diff --git a/.travis.yml b/.travis.yml
index 3fe218846031e66b9f9bec8c5f793d36721d3a4f..12d3c59aa05f6eeb6383c65f2366f48b403cd2d9 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -594,8 +594,10 @@ install:
 before_script:
   # OLDPWD is root repo folder
   - OLDPWD=$PWD
+  - mkdir -p "$OLDPWD/assets/installer"
   - cd "$HOME/srb2_cache"
 
+  # Get stat command so we know what the cached archive date is.
   # stat is different for OSX
   - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
       STATCMD="stat -f %m";
@@ -609,52 +611,25 @@ before_script:
         echo "$(basename $ASSET_ARCHIVE_PATH) cache date -- $($STATCMD $(basename $ASSET_ARCHIVE_PATH))";
       fi;
       wget --verbose --server-response -N "$ASSET_ARCHIVE_PATH";
-      7z x "$(basename $ASSET_ARCHIVE_PATH)" -o"$HOME/srb2_cache" -aos;
-      for f in $ASSET_FILES_REQUIRED; do
-        cp "$HOME/srb2_cache/$f" "$OLDPWD/assets/$f";
-      done;
+      7z x "$(basename $ASSET_ARCHIVE_PATH)" -o"$OLDPWD/assets/installer" -aos;
     fi;
 
-  # Get individual required files
-  - for f in $ASSET_FILES_REQUIRED; do
-      if [ -f "$f" ]; then
-        echo "$f cache date -- $($STATCMD $f)";
-      fi;
-      wget --verbose --server-response -N "$ASSET_BASE_PATH/$f";
-      if [ ! -f "$HOME/srb2_cache/$f" ]; then
-        echo "Could not download \"$ASSET_BASE_PATH/$f\"";
-        return 1;
-      fi;
-      cp "$HOME/srb2_cache/$f" "$OLDPWD/assets/$f";
-    done;
-
-  # Get the docs
-  - for f in $ASSET_FILES_DOCS; do
-      if [ -f "$f" ]; then
-        echo "$f cache date -- $($STATCMD $f)";
-      fi;
-      wget --verbose --server-response -N "$ASSET_BASE_PATH/$f";
-      cp "$HOME/srb2_cache/$f" "$OLDPWD/assets/$f";
-    done;
-
   # Get optional files too
-  - if [[ "$ASSET_FILES_OPTIONAL_GET" == "1" ]]; then
-      for f in $ASSET_FILES_OPTIONAL; do
-        if [ -f "$f" ]; then
-          echo "$f cache date -- $($STATCMD $f)";
-        fi;
-        wget --verbose --server-response -N "$ASSET_BASE_PATH/$f";
-        cp "$HOME/srb2_cache/$f" "$OLDPWD/assets/$f";
-      done;
+  - if [[ "$ASSET_FILES_OPTIONAL_GET" == "1" ]] && [[ "$ASSET_ARCHIVE_OPTIONAL_PATH" != "" ]]; then
+      if [ -f "$(basename $ASSET_ARCHIVE_OPTIONAL_PATH)" ]; then
+        echo "$(basename $ASSET_ARCHIVE_OPTIONAL_PATH) cache date -- $($STATCMD $(basename $ASSET_ARCHIVE_OPTIONAL_PATH))";
+      fi;
+      wget --verbose --server-response -N "$ASSET_ARCHIVE_OPTIONAL_PATH";
+      7z x "$(basename $ASSET_ARCHIVE_OPTIONAL_PATH)" -o"$OLDPWD/assets/installer" -aos;
     fi;
 
-  # Go back to root repo folder
+  # Copy assets to repo staging folder, then go back to root repo folder
   - cd "$OLDPWD"
 
   # Prepare CMake asset lists
-  - SRB2_ASSET_REQUIRED=$(echo ${ASSET_FILES_REQUIRED// /\;})
-  - SRB2_ASSET_OPTIONAL=$(echo ${ASSET_FILES_OPTIONAL// /\;})
+  - SRB2_ASSET_HASHED=$(echo ${ASSET_FILES_HASHED// /\;})
   - SRB2_ASSET_DOCS=$(echo ${ASSET_FILES_DOCS// /\;})
+  - SRB2_ASSET_DIRECTORY="$OLDPWD/assets/installer"
 
   # Prepare CMake
   - mkdir build
@@ -663,8 +638,8 @@ before_script:
   - export CFLAGS="-Wall -W $WFLAGS" # -Werror
   - export CCACHE_COMPRESS=true
   - cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$PWD/bin -DCPACK_PACKAGE_DIRECTORY=$PWD/package
-      -DSRB2_ASSET_REQUIRED="${SRB2_ASSET_REQUIRED}" -DSRB2_ASSET_OPTIONAL="${SRB2_ASSET_OPTIONAL}"
-      -DSRB2_ASSET_DOCS="${SRB2_ASSET_DOCS}"
+      -DSRB2_ASSET_HASHED="${SRB2_ASSET_HASHED}" -DSRB2_ASSET_DOCS="${SRB2_ASSET_DOCS}"
+      -DSRB2_ASSET_DIRECTORY="${SRB2_ASSET_DIRECTORY}"
       -DCPACK_PACKAGE_DESCRIPTION_SUMMARY="${PROGRAM_NAME}"
       -DCPACK_PACKAGE_VENDOR="${PROGRAM_VENDOR}"
       -DSRB2_SDL2_EXE_NAME="${PROGRAM_FILENAME}"
diff --git a/assets/CMakeLists.txt b/assets/CMakeLists.txt
index 5f6db6dd5b189778a12d01fe217357579b88c769..b957f48aa613a2f13e7b8a5dbb85968077b11d34 100644
--- a/assets/CMakeLists.txt
+++ b/assets/CMakeLists.txt
@@ -9,7 +9,10 @@ FUNCTION(PREPEND var prefix)
    SET(${var} "${listVar}" PARENT_SCOPE)
 ENDFUNCTION(PREPEND)
 
-set(SRB2_ASSET_REQUIRED
+set(SRB2_ASSET_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/installer"
+	CACHE STRING "Path to directory that contains all asset files for the installer.")
+
+set(SRB2_ASSET_HASHED
 "srb2.srb;\
 patch.kart;\
 gfx.kart;\
@@ -18,7 +21,7 @@ chars.kart;\
 bonuschars.kart;\
 maps.kart;\
 sounds.kart"
-	CACHE STRING "Required asset files for packaging. No spaces between entries!"
+	CACHE STRING "Asset filenames to apply MD5 checks. No spaces between entries!"
 )
 
 set(SRB2_ASSET_DOCS
@@ -26,25 +29,13 @@ set(SRB2_ASSET_DOCS
 history.txt;\
 LICENSE.txt;\
 LICENSE-3RD-PARTY.txt"
-	CACHE STRING "Documentation files; will not fail if they do not exist. Packaged differently from optional assets. No spaces between entries!"
+	CACHE STRING "Documentation filenames. In OS X, these are packaged separately from other assets. No spaces between entries!"
 )
 
-set(SRB2_ASSET_OPTIONAL
-"music.kart"
-	CACHE STRING "Optional asset files. No spaces between entries!"
-)
-
-# MD5 generation - Filename only, we don't append path to this
-set(SRB2_ASSET_HASHED
-	${SRB2_ASSET_REQUIRED}
-)
-
-PREPEND(SRB2_ASSET_REQUIRED ${CMAKE_CURRENT_SOURCE_DIR} ${SRB2_ASSET_REQUIRED})
-PREPEND(SRB2_ASSET_DOCS ${CMAKE_CURRENT_SOURCE_DIR} ${SRB2_ASSET_DOCS})
-PREPEND(SRB2_ASSET_OPTIONAL ${CMAKE_CURRENT_SOURCE_DIR} ${SRB2_ASSET_OPTIONAL})
+PREPEND(SRB2_ASSET_DOCS ${SRB2_ASSET_DIRECTORY} ${SRB2_ASSET_DOCS})
 
 foreach(SRB2_ASSET ${SRB2_ASSET_HASHED})
-	file(MD5 ${CMAKE_CURRENT_SOURCE_DIR}/${SRB2_ASSET} "SRB2_ASSET_${SRB2_ASSET}_HASH")
+	file(MD5 ${SRB2_ASSET_DIRECTORY}/${SRB2_ASSET} "SRB2_ASSET_${SRB2_ASSET}_HASH")
 	set(SRB2_ASSET_${SRB2_ASSET}_HASH ${SRB2_ASSET_${SRB2_ASSET}_HASH} PARENT_SCOPE)
 endforeach()
 
@@ -52,27 +43,20 @@ endforeach()
 
 if(${CMAKE_SYSTEM} MATCHES Darwin)
 	get_target_property(outname SRB2SDL2 OUTPUT_NAME)
-	install(FILES ${SRB2_ASSET_REQUIRED}
+	install(DIRECTORY "${SRB2_ASSET_DIRECTORY}/"
 		DESTINATION "${outname}.app/Contents/Resources"
 	)
-	install(FILES ${SRB2_ASSET_OPTIONAL}
-		DESTINATION "${outname}.app/Contents/Resources"
-		OPTIONAL
-	)
 	install(FILES ${SRB2_ASSET_DOCS}
 		DESTINATION .
 		OPTIONAL
 	)
 else()
-	install(FILES ${SRB2_ASSET_REQUIRED}
-		DESTINATION .
-	)
-	install(FILES ${SRB2_ASSET_OPTIONAL}
-		DESTINATION .
-		OPTIONAL
-	)
-	install(FILES ${SRB2_ASSET_DOCS}
+	install(DIRECTORY "${SRB2_ASSET_DIRECTORY}/"
 		DESTINATION .
-		OPTIONAL
 	)
+	# Docs are assumed to be located in SRB2_ASSET_DIRECTORY, so don't install again
+	#install(FILES ${SRB2_ASSET_DOCS}
+	#	DESTINATION .
+	#	OPTIONAL
+	#)
 endif()
diff --git a/assets/debian-template/rules b/assets/debian-template/rules
index 99a4eaf3c19eef44841b85463589d4eef7bdaa19..c2d19922d406ea891324d8f066d40b4fee1c193a 100644
--- a/assets/debian-template/rules
+++ b/assets/debian-template/rules
@@ -47,55 +47,31 @@ RM	:= rm -rf
 DIR	:= $(shell pwd)
 
 PACKAGE := $(shell cat $(DIR)/debian/control | grep 'Package:' | sed -e 's/Package: //g')
-DATAFILES := ${ASSET_FILES_REQUIRED}
-DOCFILES := ${ASSET_FILES_DOCS}
-OPTIONALFILES := ${ASSET_FILES_OPTIONAL}
+ARCHIVEPATH := ${ASSET_ARCHIVE_PATH}
+ARCHIVEOPTIONALPATH := ${ASSET_ARCHIVE_OPTIONAL_PATH}
 GETOPTIONALFILES := ${ASSET_FILES_OPTIONAL_GET}
 
 DATADIR	:= $(shell echo "${PACKAGE_INSTALL_PATH}" | sed -e 's/^\///')
 RESOURCEDIR := .
+STAGINGDIR := $(RESOURCEDIR)/installer
 WGET	:= wget -P $(RESOURCEDIR) -c -nc
 
 build:
 	$(MKDIR) $(DIR)/debian/tmp/$(DATADIR)
 	> $(DIR)/debian/source/include-binaries
-	# This will need to be updated every time SRB2 official version is
 	# Copy data files to their install locations, and add data files to include-binaries
-	for file in $(DATAFILES); do \
-		if [ ! -f $(RESOURCEDIR)/${DEBFILEVAR} ]; then \
-			$(WGET) ${ASSET_BASE_PATH}/${DEBFILEVAR}; \
+	if [ ! -d $(STAGINGDIR) ]; then \
+		mkdir -p "$(STAGINGDIR)"; \
+		$(WGET) $(ARCHIVEPATH); \
+		7z x "$(RESOURCEDIR)/$(shell basename $(ARCHIVEPATH))" -aos; \
+		if [ "$(GETOPTIONALFILES)" = "1" ]; then \
+			$(WGET) $(ARCHIVEOPTIONALPATH); \
+			7z x "$(RESOURCEDIR)/$(shell basename $(ARCHIVEOPTIONALPATH))" -aos; \
 		fi; \
-		if [ -f $(RESOURCEDIR)/${DEBFILEVAR} ]; then \
-			$(INSTALL) $(RESOURCEDIR)/${DEBFILEVAR} $(DIR)/debian/tmp/$(DATADIR)/${DEBFILEVAR}; \
-			echo $(RESOURCEDIR)/${DEBFILEVAR} >> $(DIR)/debian/source/include-binaries; \
-		fi; \
-		if [ ! -f $(DIR)/debian/tmp/$(DATADIR)/${DEBFILEVAR} ]; then \
-			echo $(DIR)/debian/tmp/$(DATADIR)/${DEBFILEVAR} not found and could not be downloaded!; \
-			return 1; \
-		fi; \
-	done
-	# Do the same for DOCFILES, but don't error out if not found
-	for file in $(DOCFILES); do \
-		if [ ! -f $(RESOURCEDIR)/${DEBFILEVAR} ]; then \
-			$(WGET) ${ASSET_BASE_PATH}/${DEBFILEVAR}; \
-		fi; \
-		if [ -f $(RESOURCEDIR)/${DEBFILEVAR} ]; then \
-			$(INSTALL) $(RESOURCEDIR)/${DEBFILEVAR} $(DIR)/debian/tmp/$(DATADIR)/${DEBFILEVAR}; \
-			echo $(RESOURCEDIR)/${DEBFILEVAR} >> $(DIR)/debian/source/include-binaries; \
-		fi; \
-	done
-	# Do the same for OPTIONALFILES if GETOPTIONALFILES == 1
-	if [ "$(GETOPTIONALFILES)" = "1" ]; then \
-		for file in $(OPTIONALFILES); do \
-			if [ ! -f $(RESOURCEDIR)/${DEBFILEVAR} ]; then \
-				$(WGET) ${ASSET_BASE_PATH}/${DEBFILEVAR}; \
-			fi; \
-			if [ -f $(RESOURCEDIR)/${DEBFILEVAR} ]; then \
-				$(INSTALL) $(RESOURCEDIR)/${DEBFILEVAR} $(DIR)/debian/tmp/$(DATADIR)/${DEBFILEVAR}; \
-				echo $(RESOURCEDIR)/${DEBFILEVAR} >> $(DIR)/debian/source/include-binaries; \
-			fi; \
-		done; \
-	fi;
+	fi
+	# Install asset directory and add asset file to include-binaries
+	cp -vr "$(STAGINGDIR)/." "$(DIR)/debian/tmp/$(DATADIR)"
+	find "$(STAGINGDIR)" >> $(DIR)/debian/source/include-binaries
 
 
 binary-indep:
diff --git a/deployer/travis/deployer_defaults.sh b/deployer/travis/deployer_defaults.sh
index 9f81733dc423e0b978064adeb1df765a9471995c..96ce1142f2989acd6313b10f89efdc5def249bd9 100644
--- a/deployer/travis/deployer_defaults.sh
+++ b/deployer/travis/deployer_defaults.sh
@@ -28,10 +28,9 @@
 
 # Asset File Parameters
 : ${ASSET_ARCHIVE_PATH:=https://github.com/mazmazz/Kart-Public/releases/download/kart_assets/srb2kart-v102-assets.7z}
-: ${ASSET_BASE_PATH:=https://github.com/mazmazz/Kart-Public/releases/download/kart_assets}
-: ${ASSET_FILES_REQUIRED:=srb2.srb patch.kart gfx.kart textures.kart chars.kart bonuschars.kart maps.kart sounds.kart}
+: ${ASSET_ARCHIVE_OPTIONAL_PATH:=https://github.com/mazmazz/Kart-Public/releases/download/kart_assets/srb2kart-v102-optional-assets.7z}
+: ${ASSET_FILES_HASHED:=srb2.srb patch.kart gfx.kart textures.kart chars.kart bonuschars.kart maps.kart sounds.kart}
 : ${ASSET_FILES_DOCS:=README.txt history.txt LICENSE.txt LICENSE-3RD-PARTY.txt}
-: ${ASSET_FILES_OPTIONAL:=music.kart}
 : ${ASSET_FILES_OPTIONAL_GET:=0}
 
 # FTP Parameters
@@ -78,10 +77,9 @@
 # Export Asset and Package Parameters for envsubst templating
 
 export ASSET_ARCHIVE_PATH="${ASSET_ARCHIVE_PATH}"
-export ASSET_BASE_PATH="${ASSET_BASE_PATH}"
-export ASSET_FILES_REQUIRED="${ASSET_FILES_REQUIRED}"
+export ASSET_ARCHIVE_OPTIONAL_PATH="${ASSET_ARCHIVE_OPTIONAL_PATH}"
+export ASSET_FILES_HASHED="${ASSET_FILES_HASHED}"
 export ASSET_FILES_DOCS="${ASSET_FILES_DOCS}"
-export ASSET_FILES_OPTIONAL="${ASSET_FILES_OPTIONAL}"
 export ASSET_FILES_OPTIONAL_GET="${ASSET_FILES_OPTIONAL_GET}"
 
 export PACKAGE_NAME="${PACKAGE_NAME}"