Index: /scripts/etc/cron.d/7dtd-backup
===================================================================
--- /scripts/etc/cron.d/7dtd-backup	(revision 52)
+++ /scripts/etc/cron.d/7dtd-backup	(revision 53)
@@ -1,1 +1,1 @@
-#0 *     * * *   root    /usr/local/bin/7dtd.sh backup
+#0 *     * * *   root    nice -n 15 /usr/local/bin/7dtd.sh backup
Index: /scripts/usr/local/lib/7dtd/VERSION
===================================================================
--- /scripts/usr/local/lib/7dtd/VERSION	(revision 52)
+++ /scripts/usr/local/lib/7dtd/VERSION	(revision 53)
@@ -1,2 +1,2 @@
-Version: 14
+Version: 15
 Release: 2014-06-09
Index: /scripts/usr/local/lib/7dtd/commands/backup.sh
===================================================================
--- /scripts/usr/local/lib/7dtd/commands/backup.sh	(revision 52)
+++ /scripts/usr/local/lib/7dtd/commands/backup.sh	(revision 53)
@@ -13,5 +13,5 @@
 		local fileI
 		for fileI in "$SDTD_BACKUP_ROOT"/*; do
-			if [ $fileI -nt $LatestBackup -a -d $fileI ]; then
+			if [ "$fileI" -nt "$LatestBackup" -a -d "$fileI" ]; then
 				LatestBackup=$fileI
 			fi
@@ -64,5 +64,5 @@
 			(( num++ ))
 			if [ $num -gt $removeBut ]; then
-				rm $F
+				rm -Rf $F
 			fi
 		done
@@ -82,5 +82,5 @@
 		local maxKBytes=$(( $SDTD_BACKUP_MAX_STORAGE*1024 ))
 		local curNumFiles=$(ls -t1 $SDTD_BACKUP_ROOT | wc -l)
-		while [ $(du -sk $SDTD_BACKUP_ROOT) -gt $maxKBytes -a $curNumFiles -gt $keepMin ]; do
+		while [ $(du -sk $SDTD_BACKUP_ROOT | tr '[:blank:]' ' ' | cut -d\  -f1) -gt $maxKBytes -a $curNumFiles -gt $keepMin ]; do
 			local toDel=$(ls -tr1 | head -n 1)
 			rm -Rf $toDel
@@ -90,5 +90,9 @@
 
 	for H in $(getHooksFor backup); do
-		$H $NewBackup
+		if [ "$SDTD_BACKUP_COMPRESS" = "all" ]; then
+			$H $NewBackup.tar.gz
+		else
+			$H $NewBackup
+		fi
 	done
 }
Index: /scripts/usr/local/lib/7dtd/commands/updateengine.sh
===================================================================
--- /scripts/usr/local/lib/7dtd/commands/updateengine.sh	(revision 52)
+++ /scripts/usr/local/lib/7dtd/commands/updateengine.sh	(revision 53)
@@ -4,11 +4,9 @@
 
 sdtdCommandUpdateengine() {
-	for I in $(getInstanceList); do
-		if [ $(isRunning $I) -eq 1 ]; then
-			echo "At least one instance is still running (\"$I\")."
-			echo "Before updating the engine please stop all instances!"
-			return
-		fi
-	done
+	local FORCED=no
+	local CHECKONLY=no
+	if [ "$1" = "--force" ]; then
+		FORCED=yes
+	fi
 
 	if [ ! -e $SDTD_BASE/steamcmd ]; then
@@ -21,18 +19,74 @@
 	fi
 
-	cd $SDTD_BASE/steamcmd
+	if [ "$1" = "--check" -o "$2" = "--check" ]; then
+		local LOCAL=$(getLocalEngineVersion)
+		local REMOTE=$(getRemoteEngineVersion)
+		if [ $REMOTE -gt $LOCAL ]; then
+			echo "Newer engine version available."
+		else
+			echo "Engine up to date."
+		fi
+		echo "Local buildid:     $LOCAL"
+		echo "Available buildid: $REMOTE"
+		return
+	fi
 
-	./steamcmd.sh +@sSteamCmdForcePlatformType windows +login $STEAM_USER $STEAM_PASS +force_install_dir $SDTD_BASE/engine "+app_update 251570" validate +quit
+	for I in $(getInstanceList); do
+		if [ $(isRunning $I) -eq 1 ]; then
+			echo "At least one instance is still running (\"$I\")."
+			echo "Before updating the engine please stop all instances!"
+			return
+		fi
+	done
 
-	cp $SDTD_BASE/linux_files/engine/* $SDTD_BASE/engine/ -R
-	cp $SDTD_BASE/engine/Install/32bit/SteamworksManaged.dll $SDTD_BASE/engine/7DaysToDie_Data/Managed/
+	local LOCAL=$(getLocalEngineVersion)
+	local REMOTE=$(getRemoteEngineVersion)
 
-	chown $SDTD_USER.$SDTD_GROUP -R $SDTD_BASE/engine
+	if [ "$FORCED" = "yes" -o $REMOTE -gt $LOCAL ]; then
+		echo "A newer version of the engine is available."
+		echo "Local buildid:     $LOCAL"
+		echo "Available buildid: $REMOTE"
+		echo
+		
+		while : ; do
+			local CONTINUE
+			read -p "Continue? (yn) " CONTINUE
+			case $CONTINUE in
+				y)
+					echo "Updating..."
+					break
+					;;
+				n)
+					echo "Canceled"
+					return
+					;;
+				*)
+					echo "Wrong input"
+			esac
+		done
+
+		cd $SDTD_BASE/steamcmd
+		./steamcmd.sh +@sSteamCmdForcePlatformType windows +login $STEAM_USER $STEAM_PASS +force_install_dir $SDTD_BASE/engine "+app_update 251570" validate +quit
+
+		cp $SDTD_BASE/linux_files/engine/* $SDTD_BASE/engine/ -R
+		cp $SDTD_BASE/engine/Install/32bit/SteamworksManaged.dll $SDTD_BASE/engine/7DaysToDie_Data/Managed/
+
+		chown $SDTD_USER.$SDTD_GROUP -R $SDTD_BASE/engine
+	else
+		echo "Engine is already at the newest build (local: $LOCAL, remote: $REMOTE)."
+	fi
 }
 
 sdtdCommandUpdateengineHelp() {
-	echo "Usage: $(basename $0) updateengine"
+	echo "Usage: $(basename $0) updateengine [--force | --check]"
 	echo
-	echo "Update the engine (aka game) files of 7dtd."
+	echo "Check for a newer version of engine (aka game) files of 7dtd. If there is a newer"
+	echo "version they can be updated by this command."
+	echo
+	echo "If --force is specified you are asked if you want to redownload the engine"
+	echo "even if there is no new version available."
+	echo
+	echo "If --check is specified it will only output the current local and remote build ids"
+	echo "and if an update is available."
 }
 
@@ -40,2 +94,11 @@
 	echo "Update the 7dtd engine files"
 }
+
+sdtdCommandUpdateengineExpects() {
+	case $1 in
+		2)
+			echo "--force --check"
+			;;
+	esac
+}
+
Index: /scripts/usr/local/lib/7dtd/commands/updatescripts.sh
===================================================================
--- /scripts/usr/local/lib/7dtd/commands/updatescripts.sh	(revision 52)
+++ /scripts/usr/local/lib/7dtd/commands/updatescripts.sh	(revision 53)
@@ -4,8 +4,14 @@
 
 sdtdCommandUpdatescripts() {
-	LOCAL=$(cat /usr/local/lib/7dtd/VERSION | grep "Version" | cut -d\  -f2)
-	REMOTE=$(wget -qO- http://illy.bz/fi/7dtd/VERSION | grep "Version" | cut -d\  -f2)
+	local LOCAL=$(cat /usr/local/lib/7dtd/VERSION | grep "Version" | cut -d\  -f2)
+	local REMOTE=$(wget -qO- http://illy.bz/fi/7dtd/VERSION | grep "Version" | cut -d\  -f2)
 	
-	if [ $REMOTE -gt $LOCAL ]; then
+	local FORCED
+	if [ "$1" = "--force" ]; then
+		FORCED=yes
+	else
+		FORCED=no
+	fi
+	if [ "$FORCED" = "yes" -o $REMOTE -gt $LOCAL ]; then
 		echo "A newer version of the scripts is available."
 		echo "Local:     v.$LOCAL"
@@ -58,8 +64,11 @@
 
 sdtdCommandUpdatescriptsHelp() {
-	echo "Usage: $(basename $0) updatescripts"
+	echo "Usage: $(basename $0) updatescripts [--force]"
 	echo
 	echo "Check for a newer version of the management scripts. If there is a newer"
 	echo "version they can be updated by this command."
+	echo
+	echo "If --force is specified you are asked if you want to redownload the scripts"
+	echo "even if there is no new version available."
 }
 
@@ -68,2 +77,10 @@
 }
 
+sdtdCommandUpdatescriptsExpects() {
+	case $1 in
+		2)
+			echo "--force"
+			;;
+	esac
+}
+
Index: /scripts/usr/local/lib/7dtd/common.sh
===================================================================
--- /scripts/usr/local/lib/7dtd/common.sh	(revision 52)
+++ /scripts/usr/local/lib/7dtd/common.sh	(revision 53)
@@ -94,4 +94,33 @@
 		echo 0
 	fi
+}
+
+# Get the local engine version number (i.e. build id)
+# Returns:
+#   0 if no engine installed or no appmanifest found or buildid could not be read
+#   Build Id otherwise
+getLocalEngineVersion() {
+	local APPMANIFEST=$(find $SDTD_BASE/engine -type f -name "appmanifest_251570.acf")
+	local LOCAL=0
+	if [ -f "$APPMANIFEST" ]; then
+		LOCAL=$(grep buildid "$APPMANIFEST" | tr '[:blank:]"' ' ' | tr -s ' ' | cut -d\  -f3)
+		if [ $(isANumber "$LOCAL") -eq 0 ]; then
+			LOCAL=0
+		fi
+	fi
+	echo $LOCAL
+}
+
+# Get the latest remote engine version number (i.e. build id)
+# Returns:
+#   1 if build id could not be retrieved
+#   Build Id otherwise
+getRemoteEngineVersion() {
+	cd $SDTD_BASE/steamcmd
+	local REMOTE=$(./steamcmd.sh "+app_info_print 251570" +quit | grep -EA 1000 "^\s+\"branches\"$" | grep -EA 5 "^\s+\"public\"$" | grep -m 1 -EB 10 "^\s+}$" | grep -E "^\s+\"buildid\"\s+" | tr '[:blank:]"' ' ' | tr -s ' ' | cut -d\  -f3)
+	if [ $(isANumber "$REMOTE") -eq 0 ]; then
+		REMOTE=1
+	fi
+	echo $REMOTE
 }
 
