diff --git a/BrainBread2/bb2server b/BrainBread2/bb2server
new file mode 100644
index 000000000..a78fdbc5a
--- /dev/null
+++ b/BrainBread2/bb2server
@@ -0,0 +1,143 @@
+#!/bin/bash
+# BrainBread 2
+# Server Management Script
+# Author: Daniel Gibbs
+# Website: http://gameservermanagers.com
+if [ -f ".dev-debug" ]; then
+	exec 5>dev-debug.log
+	BASH_XTRACEFD="5"
+	set -x
+fi
+
+version="090116"
+
+#### Variables ####
+
+# Notification Email
+# (on|off)
+emailnotification="off"
+email="email@example.com"
+
+# Steam login
+steamuser="username"
+steampass="password"
+
+# Start Variables
+defaultmap="bba_barracks"
+maxplayers="20"
+port="27015"
+sourcetvport="27020"
+clientport="27005"
+ip="0.0.0.0"
+updateonstart="off"
+
+# Required: Game Server Login Token
+# GSLT is required for running a public server.
+# More info: http://gameservermanagers.com/gslt
+gslt=""
+
+# https://developer.valvesoftware.com/wiki/Command_Line_Options#Source_Dedicated_Server
+fn_parms(){
+parms="-game brainbread2 -insecure -strictportbind -ip ${ip} -port ${port} +clientport ${clientport} +tv_port ${sourcetvport} +sv_setsteamaccount ${gslt} +map ${defaultmap} +servercfgfile ${servercfg} -maxplayers ${maxplayers}"
+}
+
+#### Advanced Variables ####
+
+# Github Branch Select
+# Allows for the use of different function files
+# from a different repo and/or branch.
+githubuser="dgibbs64"
+githubrepo="linuxgsm"
+githubbranch="master"
+
+# Steam
+appid="346330"
+
+# Server Details
+servicename="bb2-server"
+gamename="BrainBread 2"
+engine="source"
+
+# Directories
+rootdir="$(dirname $(readlink -f "${BASH_SOURCE[0]}"))"
+selfname="$(basename $(readlink -f "${BASH_SOURCE[0]}"))"
+lockselfname=".${servicename}.lock"
+filesdir="${rootdir}/serverfiles"
+systemdir="${filesdir}/brainbread2"
+executabledir="${filesdir}"
+executable="./srcds_run"
+servercfg="${servicename}.cfg"
+servercfgdir="${systemdir}/cfg"
+servercfgfullpath="${servercfgdir}/${servercfg}"
+servercfgdefault="${servercfgdir}/lgsm-default.cfg"
+backupdir="${rootdir}/backups"
+
+# Logging
+logdays="7"
+gamelogdir="${systemdir}/logs"
+scriptlogdir="${rootdir}/log/script"
+consolelogdir="${rootdir}/log/console"
+
+scriptlog="${scriptlogdir}/${servicename}-script.log"
+consolelog="${consolelogdir}/${servicename}-console.log"
+emaillog="${scriptlogdir}/${servicename}-email.log"
+
+scriptlogdate="${scriptlogdir}/${servicename}-script-$(date '+%d-%m-%Y-%H-%M-%S').log"
+consolelogdate="${consolelogdir}/${servicename}-console-$(date '+%d-%m-%Y-%H-%M-%S').log"
+
+##### Script #####
+# Do not edit
+
+fn_getgithubfile(){
+filename=$1
+exec=$2
+fileurl=${3:-$filename}
+filepath="${rootdir}/${filename}"
+filedir=$(dirname "${filepath}")
+# If the function file is missing, then download
+if [ ! -f "${filepath}" ]; then
+	if [ ! -d "${filedir}" ]; then
+		mkdir "${filedir}"
+	fi
+	githuburl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${fileurl}"
+	echo -e "    fetching ${filename}...\c"
+	if [ "$(command -v curl)" ]||[ "$(which curl >/dev/null 2>&1)" ]||[ -f "/usr/bin/curl" ]||[ -f "/bin/curl" ]; then
+		:
+	else	
+		echo -e "\e[0;31mFAIL\e[0m\n"
+		echo "Curl is not installed!"
+		echo -e ""
+		exit
+	fi
+	curl=$(curl --fail -o "${filepath}" "${githuburl}" 2>&1)
+	if [ $? -ne 0 ]; then
+		echo -e "\e[0;31mFAIL\e[0m\n"
+		echo "${curl}"
+		echo -e "${githuburl}\n"
+		exit
+	else
+		echo -e "\e[0;32mOK\e[0m"
+	fi	
+	if [ "${exec}" ]; then
+		chmod +x "${filepath}"
+	fi
+fi
+if [ "${exec}" ]; then
+	source "${filepath}"
+fi
+}
+
+fn_runfunction(){
+	fn_getgithubfile "functions/${functionfile}" 1
+}
+
+core_functions.sh(){
+# Functions are defined in core_functions.sh.
+functionfile="${FUNCNAME}"
+fn_runfunction
+}
+
+core_functions.sh
+
+getopt=$1
+core_getopt.sh
diff --git a/BrainBread2/cfg/lgsm-default.cfg b/BrainBread2/cfg/lgsm-default.cfg
new file mode 100644
index 000000000..e016e66fb
--- /dev/null
+++ b/BrainBread2/cfg/lgsm-default.cfg
@@ -0,0 +1,201 @@
+// ****************************************************************************
+//                                                                            *
+//     BrainBread 2 - server.cfg                                             *
+//     Version 080116                                                         *
+//                                                                            *
+// ****************************************************************************
+
+// ............................. Basic Settings ............................. //
+
+// Hostname for server.
+hostname "<hostname>"
+
+// RCON - remote console password.
+rcon_password "<rconpassword>"
+
+// Server password - for private servers.
+sv_password ""
+
+// Contact email for server sysop.
+sv_contact "email@example.com"
+
+// LAN Mode - If set the server will not show on the internet.
+// Default: sv_lan 0
+sv_lan 0
+
+// Cheats - Allows cheats on the server. Steam achievements and stats are disabled.
+// Default: 0
+sv_cheats 0
+
+// Friendly Fire - Allows team members to injure other members of their team.
+// 0 = Friendly fire off.
+// 1 = Friendly fire on.
+// Default: 0
+mp_friendlyfire 0
+
+// ........................ Game Specific Commands ........................ //
+// info: any commands that only apply to this game.
+
+
+// Mercy Value - Sets how many deaths until the players become human once again.
+// Default: bb2_allow_mercy 0
+bb2_allow_mercy 3
+
+// Late Joining - Allows players to spawn late.
+// default bb2_allow_latejoin 0
+bb2_allow_latejoin 1
+
+// Player Spawn Protection - Time in seconds after Spawn.
+// default bb2_spawn_protection 1
+bb2_spawn_protection 15
+
+// Profile System - Allow players to save and load there skills.
+// 0 = Disabled, skills are not saved.
+// 1 = Global, players can load there global skills.
+// 2 = Server, players save there skills to the server. Steam achievements and stats are disabled.
+// Default 1
+bb2_allow_profile_system 1
+
+// Allow NPC to score - Allow friendly npcs to affect scoring. For example for quests.
+// Default 1
+bb2_allow_npc_to_score 0
+
+// Vote Settings
+
+// Voting: Passing Votes - Percentage of players that are required to pass a vote.
+// Minimum: 0
+// Maximum: 100
+// Default 50
+bb2_votes_required 50
+
+// Voting: Ban Time - Number of minutes a player be banned if a vaote ban passes.
+// minimum: 0 (permanent)
+// default 30
+bb2_ban_time 30
+
+
+// Arena Settings
+
+// Arena: Respawn Interval Time (Seconds).
+// Minimum: 20
+// Default 40
+bb2_arena_respawn_time 25
+
+// Arena: Number of Reinforcements.
+// Minimum: 0
+// Maximum: 100
+// Default 14
+bb2_arena_reinforcement_count 14
+
+
+// Classic Mode Settings
+
+// Classic: Zombie No Team Change.
+// 0 = Players can become zombies.
+// 1 = Players cannot become zombies.
+// Default 0
+bb2_classic_zombie_noteamchange 1
+
+
+// Elimination Settings
+
+// Elimination: Team Fraglimit - Number of frags for a team to win a game.
+// Minimum: 10
+// Default 200
+bb2_elimination_fraglimit 200
+
+// Elimination: Respawn Time (Seconds).
+// Minimum: 1
+// Maximum: 30
+// Default 4
+bb2_elimination_respawn_time 5
+
+// Elimination: Respawn Time Scale - Increase the respawn timer in seconds when a player joins.
+// Example: respawn_timer + (joined_players x time_scale) = new_respawn_timer. 14 + (20 x 2) = 54.
+// Minimum: 0
+// Maximum: 10
+// Default 1
+bb2_elimination_respawn_time_scale 1
+
+// Elimination: Extermination Score - The score a team should be awarded for exterminating (kill everyone before respawn) the other team. 
+// Minimum: 0
+// Maximum: 50
+// Default 25
+bb2_elimination_score_from_extermination 25
+
+// Elimination: Zombie Score - Number of point a zombie gets for a kill.
+// Minimum: 2
+// Maximum: 10
+// Default 5
+bb2_elimination_score_zombies 5
+
+// Elimination: Team Perk Duration - Number of seconds a team perk lasts.
+// Minimum: 5
+// Maximum: 60
+// Default 30
+bb2_elimination_teamperk_duration 30
+
+// Elimination: Team Perk Required Kills - Number of kills a team need to get in order to activate a team perk.
+// Minimum: 25
+// Maximum: 500
+// Default 50
+bb2_elimination_teamperk_kills_required 50
+
+
+// Zombie Settings
+
+// Zombie Lifespan - Number of minutes a regular zombie will last before dying.
+// Minimum: 1
+// Default 5
+bb2_zombie_lifespan 2
+
+// Max Zombies - Maximum number of zombies allowed in the game.
+// Minimum: 1
+// Maximum: 128
+// Default 50
+bb2_zombie_max 45
+
+
+// M1A1 Abrams Settings
+
+// M1A1 Abrams: Main Cannon Damage.
+// Minimum: 100
+// Maximum: 10000
+// Default 3000
+bb2_m1a1_damage 200
+
+// M1A1 Abrams: Machinegun Damage.
+// Minimum: 25
+// Maximum: 1000
+// Default 30
+bb2_m1a1_damage_machinegun 25
+
+// M1A1 Abrams: Friendly Fire (Including NPC's).
+// Minimum: 0
+// Maximum: 1
+// Default 1
+bb2_m1a1_friendly 1
+
+// M1A1 Abrams: Machinegun Rate of Fire.
+// Minimum: 0.01
+// Maximum: 1
+// Default 0.08
+bb2_m1a1_machinegun_firerate 1
+
+// M1A1 Abrams: Explosion Radius.
+// Minimum: 200
+// Maximum: 10000
+// Default 500
+bb2_m1a1_radius 500
+
+// M1A1 Abrams: Max Sight Range.
+// Minimum: 500
+// Maximum: 10000
+// Default 2000
+bb2_m1a1_range_max 1000
+
+// M1A1 Abrams: Min Sight Range.
+// Minimum: 250
+// Maximum: 5000
+// Default 400
+bb2_m1a1_range_min 250
\ No newline at end of file
diff --git a/FistfulOfFrags/cfg/lgsm-default.cfg b/FistfulOfFrags/cfg/lgsm-default.cfg
index d7e1d9aa9..81d9929fc 100644
--- a/FistfulOfFrags/cfg/lgsm-default.cfg
+++ b/FistfulOfFrags/cfg/lgsm-default.cfg
@@ -1,7 +1,7 @@
 // ****************************************************************************
 //                                                                            *
 //     Fistful of Frags - server.cfg                                          *
-//     Version 271015                                                         *
+//     Version 100116                                                         *
 //                                                                            *
 // ****************************************************************************
 
@@ -40,7 +40,7 @@ mapcyclefile "mapcycle.txt"
 // Default: mp_timelimit 0
 mp_timelimit 15
 
-// ........................ Server Specific Commands ........................ //
+// ........................ Game Specific Commands ........................ //
 // info: any commands that only apply to this game.
 
 // Game Modes
diff --git a/Insurgency/insserver b/Insurgency/insserver
index e43d5e752..66e511149 100644
--- a/Insurgency/insserver
+++ b/Insurgency/insserver
@@ -31,10 +31,11 @@ sourcetvport="27020"
 clientport="27005"
 ip="0.0.0.0"
 updateonstart="off"
+workshop="0"
 
 # https://developer.valvesoftware.com/wiki/Command_Line_Options#Source_Dedicated_Server
 fn_parms(){
-parms="-game insurgency -strictportbind -ip ${ip} -port ${port} +clientport ${clientport} +tv_port ${sourcetvport} -tickrate ${tickrate} +map ${defaultmap} +servercfgfile ${servercfg} -maxplayers ${maxplayers}"
+parms="-game insurgency -strictportbind -ip ${ip} -port ${port} +clientport ${clientport} +tv_port ${sourcetvport} -tickrate ${tickrate} +map ${defaultmap} +servercfgfile ${servercfg} -maxplayers ${maxplayers} +sv_workshop_enabled ${workshop}"
 }
 
 #### Advanced Variables ####
diff --git a/NoMoreRoomInHell/cfg/lgsm-default.cfg b/NoMoreRoomInHell/cfg/lgsm-default.cfg
index 83645c78c..ba48eab5b 100644
--- a/NoMoreRoomInHell/cfg/lgsm-default.cfg
+++ b/NoMoreRoomInHell/cfg/lgsm-default.cfg
@@ -1,7 +1,7 @@
 // ****************************************************************************
 //                                                                            *
 //     No More Room in Hell - server.cfg                                      *
-//     Version 150815                                                         *
+//     Version 100116                                                         *
 //                                                                            *
 // ****************************************************************************
 
@@ -43,7 +43,7 @@ mp_timelimit 45
 // Default: mp_maxrounds 2
 mp_maxrounds 2
 
-// ........................ Server Specific Commands ........................ //
+// ........................ Game Specific Commands ........................ //
 // info: any commands that only apply to this game.
 
 // Difficulty
diff --git a/PiratesVikingandKnightsII/cfg/lgsm-default.cfg b/PiratesVikingandKnightsII/cfg/lgsm-default.cfg
index 8469f1014..48ba5072a 100644
--- a/PiratesVikingandKnightsII/cfg/lgsm-default.cfg
+++ b/PiratesVikingandKnightsII/cfg/lgsm-default.cfg
@@ -1,7 +1,7 @@
 // ****************************************************************************
 //                                                                            *
 //     Pirates, Vikings, and Knights II                                       *
-//     Version 150815                                                         *
+//     Version 100116                                                         *
 //                                                                            *
 // ****************************************************************************
 
@@ -48,7 +48,7 @@ mp_roundtime 3
 // Default: mp_winlimit 0
 mp_winlimit 0
 
-// ........................ Server Specific Commands ........................ //
+// ........................ Game Specific Commands ........................ //
 
 // Server tags - Tags show up on the in-game server browser. This helps 
 // users filter servers.
diff --git a/functions/check.sh b/functions/check.sh
index 86e141416..ca50777cc 100644
--- a/functions/check.sh
+++ b/functions/check.sh
@@ -2,7 +2,7 @@
 # LGSM fn_check function
 # Author: Daniel Gibbs
 # Website: http://gameservermanagers.com
-lgsm_version="060116"
+lgsm_version="170116"
 
 # Description: Overall function for managing checks.
 # Runs checks that will either halt on or fix an issue.
@@ -33,6 +33,14 @@ do
 	fi
 done
 
+local allowed_commands_array=( command_debug.sh command_start.sh command_stop.sh )
+for allowed_command in "${allowed_commands_array[@]}"
+do
+	if [ "${allowed_command}" == "${function_selfname}" ]; then
+		check_deps.sh
+	fi
+done
+
 local allowed_commands_array=( command_debug.sh command_details.sh command_monitor.sh command_start.sh command_stop.sh )
 for allowed_command in "${allowed_commands_array[@]}"
 do
@@ -41,7 +49,7 @@ do
 	fi
 done
 
-local allowed_commands_array=( command_debug.sh command_start.sh command_stop.sh update_check.sh command_validate.sh )
+local allowed_commands_array=( update_check.sh command_validate.sh )
 for allowed_command in "${allowed_commands_array[@]}"
 do
 	if [ "${allowed_command}" == "${function_selfname}" ]; then
diff --git a/functions/check_deps.sh b/functions/check_deps.sh
new file mode 100644
index 000000000..1e2e99fee
--- /dev/null
+++ b/functions/check_deps.sh
@@ -0,0 +1,200 @@
+#!/bin/bash
+# LGSM check_deps.sh function
+# Author: Daniel Gibbs
+# Website: http://gameservermanagers.com
+lgsm_version="310116"
+
+# Description: Checks that the requires dependencies are installed for LGSM.
+
+
+fn_deps_detector(){
+# Checks if dependency is missing
+if [ -n "$(command -v dpkg-query)" ]; then
+	dpkg-query -W -f='${Status}' ${deptocheck} 2>/dev/null| grep -q -P '^install ok installed$'
+	depstatus=$?
+elif [ -n "$(command -v yum)" ]; then
+	yum -q list installed ${deptocheck} > /dev/null 2>&1
+	depstatus=$?
+fi	
+if [ "${depstatus}" == "0" ]; then
+	missingdep=0
+	if [ "${function_selfname}" == "command_install.sh" ]; then
+		echo -e "\e[0;32m${deptocheck}\e[0m"
+		sleep 0.5
+	fi
+else
+	# if missing dependency is found
+	missingdep=1
+	if [ "${function_selfname}" == "command_install.sh" ]; then
+		echo -e "\e[0;31m${deptocheck}\e[0m"
+		sleep 0.5
+	fi	
+fi
+
+# Missing dependencies are added to array_deps_missing
+if [ "${missingdep}" == "1" ]; then
+	array_deps_missing+=("${deptocheck}")
+fi
+}
+
+fn_deps_email(){
+# Adds postfix to required dependencies if email notification is enabled
+if [ "${emailnotification}" == "on" ]; then
+	if [ -n "$(command -v dpkg-query)" ]; then
+		array_deps_required+=( mailutils postfix )
+	elif [ -n "$(command -v yum)" ]; then
+		array_deps_required+=( mailx postfix )
+	fi	
+fi
+}
+
+fn_found_missing_deps(){
+if [ "${#array_deps_missing[@]}" != "0" ]; then
+	fn_printdots "Checking dependencies"
+	sleep 2
+	fn_printwarn "Checking dependencies: Dependency missing: \e[0;31m${array_deps_missing[@]}\e[0m"
+	sleep 1
+	echo -e ""
+	sudo -n true > /dev/null 2>&1
+	if [ $? -eq 0 ]; then
+		fn_printinfonl "Attempting to install missing dependencies automatically"
+		echo -en ".\r"
+		sleep 1
+		echo -en "..\r"
+		sleep 1
+		echo -en "...\r"
+		sleep 1
+		echo -en "   \r"	
+		if [ -n "$(command -v dpkg-query)" ]; then
+			echo "sudo dpkg --add-architecture i386; sudo apt-get install ${array_deps_missing[@]}"
+		elif [ -n "$(command -v yum)" ]; then
+			echo "yum install ${array_deps_missing[@]}"
+		fi	
+	else
+		echo ""
+		fn_printinfomationnl "$(whoami) does not have sudo access. manually install dependencies"
+		echo ""
+		if [ -n "$(command -v dpkg-query)" ]; then
+			echo "sudo dpkg --add-architecture i386; sudo apt-get install ${array_deps_missing[@]}"
+		elif [ -n "$(command -v yum)" ]; then
+			echo "yum install ${array_deps_missing[@]}"
+		fi	
+		echo ""
+	fi
+	if [ "${function_selfname}" == "command_install.sh" ]; then
+		sleep 5
+	fi
+fi	
+}
+
+fn_check_loop(){
+	# Loop though required depenencies
+	for deptocheck in "${array_deps_required[@]}"
+	do
+		fn_deps_detector
+	done
+
+	# user to be informaed of any missing dependecies 
+	fn_found_missing_deps
+}
+
+if [ "${function_selfname}" == "command_install.sh" ]; then
+	echo ""
+	echo "Checking Dependecies"
+	echo "================================="
+fi
+
+
+# Check will only run if using apt-get or yum
+if [ -n "$(command -v dpkg-query)" ]; then
+	# Generate array of missing deps
+	array_deps_missing=()
+
+	# LGSM requirement for curl
+	array_deps_required=( curl ca-certificates )
+
+	# All servers except ts3 require tmux
+	if [ "${executable}" != "./ts3server_startscript.sh" ]; then
+		array_deps_required+=( tmux )
+	fi
+
+	# All servers excelts ts3 & mumble require libstdc++6,lib32gcc1
+	if [ "${executable}" != "./ts3server_startscript.sh" ]||[ "${executable}" != "./murmur.x86" ]; then
+		array_deps_required+=( lib32gcc1 libstdc++6:i386 )
+	fi
+
+	# Game Specific requirements
+
+	# Spark
+	if [ "${engine}" ==  "spark" ]; then
+		array_deps_required+=( speex:i386 libtbb2 )
+	# 7 Days to Die	
+	elif [ "${executable}" ==  "./7DaysToDie.sh" ]; then
+		array_deps_required+=( telnet expect )
+	# No More Room in Hell	
+	elif [ "${gamename}" == "No More Room in Hell" ]; then
+		array_deps_required+=( lib32tinfo5 )
+	# Brainbread 2 and Don't Starve Together
+	elif [ "${gamename}" == "Brainbread 2" ]||[ "${gamename}" == "Don't Starve Together" ]; then
+		array_deps_required+=( libcurl4-gnutls-dev:i386 )
+	elif [ "${engine}" ==  "projectzomboid" ]; then
+		array_deps_required+=( openjdk-7-jre )
+	# Unreal engine
+	elif [ "${executable}" ==  "./ucc-bin" ]; then
+		#UT2K4
+		if [ -f "${executabledir}/ut2004-bin" ]; then
+			array_deps_required+=( libsdl1.2debian libstdc++5:i386 bzip2 unzip )
+		#UT99
+		else
+			array_deps_required+=( libsdl1.2debian bzip2 )
+		fi	
+	fi
+	fn_deps_email
+	fn_check_loop
+
+elif [ -n "$(command -v yum)" ]; then
+	# Generate array of missing deps
+	array_deps_missing=()
+
+	# LGSM requirement for curl
+	array_deps_required=( curl )
+
+	# All servers except ts3 require tmux
+	if [ "${executable}" != "./ts3server_startscript.sh" ]; then
+		array_deps_required+=( tmux )
+	fi
+
+	# All servers excelts ts3 & mumble require libstdc++6,lib32gcc1
+	if [ "${executable}" != "./ts3server_startscript.sh" ]||[ "${executable}" != "./murmur.x86" ]; then
+		array_deps_required+=( glibc.i686 libstdc++.i686 )
+	fi
+
+	# Game Specific requirements
+
+	# Spark
+	if [ "${engine}" ==  "spark" ]; then
+		array_deps_required+=( speex.i686 tbb.i686 )
+	# 7 Days to Die	
+	elif [ "${executable}" ==  "./7DaysToDie.sh" ]; then
+		array_deps_required+=( telnet expect )
+	# No More Room in Hell	
+	elif [ "${gamename}" == "No More Room in Hell" ]; then
+		array_deps_required+=( ncurses-libs.i686 )
+	# Brainbread 2 and Don't Starve Together
+	elif [ "${gamename}" == "Brainbread 2" ]||[ "${gamename}" == "Don't Starve Together" ]; then
+		array_deps_required+=( libcurl.i686 )
+	elif [ "${engine}" ==  "projectzomboid" ]; then
+		array_deps_required+=( java-1.7.0-openjdk )
+	# Unreal engine
+	elif [ "${executable}" ==  "./ucc-bin" ]; then
+		#UT2K4
+		if [ -f "${executabledir}/ut2004-bin" ]; then
+			array_deps_required+=( compat-libstdc++-33.i686 SDL.i686 bzip2 unzip )
+		#UT99
+		else
+			array_deps_required+=( SDL.i686 bzip2 )
+		fi	
+	fi
+	fn_deps_email
+	fn_check_loop
+fi
\ No newline at end of file
diff --git a/functions/command_details.sh b/functions/command_details.sh
index ef63a08f9..0084f20e5 100644
--- a/functions/command_details.sh
+++ b/functions/command_details.sh
@@ -586,6 +586,7 @@ info_distro.sh
 info_glibc.sh
 fn_details_os
 fn_details_performance
+fn_details_disk
 fn_details_gameserver
 fn_details_backup
 # Some game servers do not have parms.
diff --git a/functions/command_dev_detect_deps.sh b/functions/command_dev_detect_deps.sh
index 30f89157d..f6d1da766 100644
--- a/functions/command_dev_detect_deps.sh
+++ b/functions/command_dev_detect_deps.sh
@@ -35,10 +35,12 @@ elif [ "${executable}" ==  "./ts3server_startscript.sh" ]; then
 	executable=ts3server_linux_amd64	
 fi
 
-if [ -n "$(command -v eu-readelf)" ]; then
+if [ "$(command -v eu-readelf)" ]; then
 	readelf=eu-readelf
-else
+elif [ "$(command -v readelf)" ];
 	readelf=readelf
+else
+	echo "readelf/eu-readelf not installed"	
 fi
 
 ${readelf} -d ${executable} |grep NEEDED|awk '{ print $5 }'|sed 's/\[//g'|sed 's/\]//g' > "${rootdir}/.depdetect_readelf"
diff --git a/functions/command_install.sh b/functions/command_install.sh
index 75e6c0060..791cb160d 100644
--- a/functions/command_install.sh
+++ b/functions/command_install.sh
@@ -9,7 +9,7 @@ function_selfname="$(basename $(readlink -f "${BASH_SOURCE[0]}"))"
 check.sh
 install_header.sh
 install_serverdir.sh
-
+check_deps.sh 
 # Download and install
 if [ "${gamename}" == "Unreal Tournament 2004" ]; then
 	install_dl_ut2k4.sh
@@ -30,11 +30,9 @@ fix.sh
 install_logs.sh
 install_gsquery.sh
 install_config.sh
-if [ "${gamename}" == "Counter Strike: Global Offensive" ]; then
+if [ "${gamename}" == "Counter Strike: Global Offensive" ]||[ "${gamename}" == "Team Fortress 2" ]||[ "${gamename}" == "BrainBread 2" ]; then
 	install_gslt.sh
 elif [ "${gamename}" == "Teamspeak 3" ]; then
 	install_ts3db.sh
-elif [ "${gamename}" == "Team Fortress 2" ]; then
-	install_gslt.sh
 fi
 install_complete.sh
diff --git a/functions/command_start.sh b/functions/command_start.sh
index a79302698..309a8078f 100644
--- a/functions/command_start.sh
+++ b/functions/command_start.sh
@@ -2,7 +2,7 @@
 # LGSM command_start.sh function
 # Author: Daniel Gibbs
 # Website: http://gameservermanagers.com
-lgsm_version="271215"
+lgsm_version="070116"
 
 # Description: Starts the server.
 
@@ -55,7 +55,11 @@ mv "${scriptlog}" "${scriptlogdate}"
 # Create lock file
 date > "${rootdir}/${lockselfname}"
 cd "${executabledir}"
-./ts3server_startscript.sh start inifile="${servercfgfullpath}" > /dev/null 2>&1
+if [ "${ts3serverpass}" == "1" ];then
+	./ts3server_startscript.sh start serveradmin_password="${newpassword}" 
+else
+	./ts3server_startscript.sh start inifile="${servercfgfullpath}" > /dev/null 2>&1
+fi
 sleep 1
 info_ts3status.sh
 if [ "${ts3status}" = "Server seems to have died" ]||[ "${ts3status}"	= "No server running (ts3server.pid is missing)" ]; then
diff --git a/functions/command_ts3_server_pass.sh b/functions/command_ts3_server_pass.sh
new file mode 100644
index 000000000..3cd0f0b1f
--- /dev/null
+++ b/functions/command_ts3_server_pass.sh
@@ -0,0 +1,62 @@
+#!/bin/bash
+# LGSM command_serveradmin_password.sh function
+# Author: Daniel Gibbs
+# Contributor : UltimateByte
+# Website: http://gameservermanagers.com
+lgsm_version="080116"
+
+# Description: Changes TS3 serveradmin password
+
+local modulename="Change password"
+function_selfname="$(basename $(readlink -f "${BASH_SOURCE[0]}"))"
+
+
+fn_serveradmin_password_prompt(){
+echo ""
+echo "${gamename} ServerAdmin Password Change"
+echo "============================"
+echo ""
+echo "Press \"CTRL+b d\" to exit console."
+fn_printinfomationnl "You are about to change the ${gamename} ServerAdmin password."
+fn_printwarningnl "${gamename} will restart during this process."
+echo ""
+while true; do
+	read -e -i "y" -p "Continue? [y/N]" yn
+	case $yn in
+	[Yy]* ) break;;
+	[Nn]* ) echo Exiting; return;;
+	* ) echo "Please answer yes or no.";;
+esac
+done
+fn_scriptlog "Initiating ${gamename} ServerAdmin password change"
+read -p "Enter new password : " newpassword
+}
+
+
+fn_serveradmin_password_set(){
+fn_printinfonl "Applying new password"
+fn_scriptlog "Applying new password"
+sleep 1
+# Stop any running server
+command_stop.sh
+# Start server in "new password mode"
+ts3serverpass="1"
+fn_printinfonl "Starting server with new password"
+command_start.sh
+# Stop server in "new password mode"
+command_stop.sh
+fn_printoknl "Password applied"
+fn_scriptlog "New ServerAdmin password applied"
+sleep 1
+}
+
+# Running functions
+check.sh
+fn_serveradmin_password_prompt
+info_ts3status.sh
+if [ "${ts3status}" == "Server is running" ]; then
+	fn_serveradmin_password_set
+	command_start.sh
+else
+	fn_serveradmin_password_set
+fi
\ No newline at end of file
diff --git a/functions/core_functions.sh b/functions/core_functions.sh
index 7f97004ef..7b0f148cd 100644
--- a/functions/core_functions.sh
+++ b/functions/core_functions.sh
@@ -2,7 +2,7 @@
 # LGSM core_functions.sh function
 # Author: Daniel Gibbs
 # Website: http://gameservermanagers.com
-lgsm_version="060116"
+lgsm_version="170116"
 
 # Description: Defines all functions to allow download and execution of functions using fn_runfunction.
 # This function is called first before any other function. Without this file other functions would not load.
@@ -85,6 +85,11 @@ functionfile="${FUNCNAME}"
 fn_runfunction
 }
 
+command_ts3_server_pass.sh(){
+functionfile="${FUNCNAME}"
+fn_runfunction
+}
+
 fn_restart(){
 local modulename="Restarting"
 info_config.sh
@@ -106,6 +111,11 @@ functionfile="${FUNCNAME}"
 fn_runfunction
 }
 
+check_deps.sh(){
+functionfile="${FUNCNAME}"
+fn_runfunction
+}
+
 check_ip.sh(){
 functionfile="${FUNCNAME}"
 fn_runfunction
diff --git a/functions/core_getopt.sh b/functions/core_getopt.sh
index 2b90be321..95196d0ef 100644
--- a/functions/core_getopt.sh
+++ b/functions/core_getopt.sh
@@ -2,7 +2,7 @@
 # LGSM core_getopt.sh function
 # Author: Daniel Gibbs
 # Website: http://gameservermanagers.com
-lgsm_version="271215"
+lgsm_version="070116"
 
 # Description: getopt arguments.
 
@@ -90,6 +90,8 @@ case "$getopt" in
 		command_details.sh;;
 	b|backup)
 		command_backup.sh;;
+	pw|change-password)
+		command_ts3_server_pass.sh;;
 	dev|dev-debug)
 		command_dev_debug.sh;;		
 	i|install)
@@ -113,6 +115,7 @@ case "$getopt" in
 		echo -e "\e[34mmonitor\t\e[0mChecks that the server is running."
 		echo -e "\e[34memail-test\t\e[0mSends test monitor email."
 		echo -e "\e[34mdetails\t\e[0mDisplays useful infomation about the server."
+		echo -e "\e[34mchange-password\t\e[0mChanges TS3 serveradmin password."
 		echo -e "\e[34mbackup\t\e[0mCreate archive of the server."
 		echo -e "\e[34minstall\t\e[0mInstall the server."
 		echo -e "\e[34mauto-install\t\e[0mInstall the server, without prompts."
diff --git a/functions/email.sh b/functions/email.sh
index ba5d47717..93d259d80 100644
--- a/functions/email.sh
+++ b/functions/email.sh
@@ -2,41 +2,66 @@
 # LGSM email.sh function
 # Author: Daniel Gibbs
 # Website: http://gameservermanagers.com
-lgsm_version="271215"
+lgsm_version="020216"
 
 # Description: Sends email notification if monitor picks up a failure.
 
 local modulename="Email"
 fn_printdots "Sending notification to ${email}"
-echo -en "\n"
 info_distro.sh
+info_config.sh
+check_ip.sh
+fn_parms
 {
-	echo -e "========================================\n${servicename} details\n========================================\n"
-	echo -e "Service: ${servicename}"
-	echo -e "Server: ${servername}"
-	echo -e "Game: ${gamename}"
+	echo -e "========================================\n${servicename} details\n========================================"
+	echo -e "Service name: ${servicename}"
+	echo -e "Server name: ${servername}"
+	echo -e "Game name: ${gamename}"
+	echo -e "Server IP: ${ip}:${port}"
 	echo -e "Failure reason: ${failurereason}"
 	echo -e "Action Taken: ${actiontaken}\n"
-	echo -e "========================================\nServer details\n========================================\n"
+	echo -e ""
+	echo -e "========================================\nDistro Details\n========================================"
 	echo -e "Date: $(date)"
 	echo -e "Distro: ${os}"
 	echo -e "Arch: ${arch}"
 	echo -e "Kernel: ${kernel}"
 	echo -e "Hostname: $HOSTNAME"
+	echo -e "tmux: ${tmuxv}"
+	echo -e "GLIBC: ${glibcv}"
+	echo -e ""
+	echo -e "========================================\nPerformance\n========================================"
 	echo -e "Uptime: ${days}d, ${hours}h, ${minutes}m"
-	echo -e "Avg Load${load}\n"
-	echo -e "========================================\nLogs\n========================================\n"
-	echo -e "Script log\n===================\n"
-	command_details.sh
-}|sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"|tee "${scriptlogdir}/${servicename}-email.log"
+	echo -e "Avg Load: ${load}" 
+	echo -e ""
+	echo -e "Mem: total used free"
+	echo -e "Physical: ${physmemtotal} ${physmemused} ${physmemfree}"
+	echo -e "Swap: ${swaptotal}${swapused} ${swapfree}"
+	echo -e ""
+	echo -e "========================================\nStorage\n========================================"	
+	echo -e "\e[34mFilesystem:\t\e[0m${filesystem}"
+	echo -e "\e[34mTotal:\t\e[0m${totalspace}"
+	echo -e "\e[34mUsed:\t\e[0m${usedspace}"
+	echo -e "\e[34mAvailable:\t\e[0m${availspace}"
+	echo -e "\e[34mServerfiles:\t\e[0m${filesdirdu}"
+	if [ -d "${backupdir}" ]; then
+		echo -e "\e[34mBackups:\t\e[0m${backupdirdu}"
+	fi
+	echo -e ""	
+	echo -e "========================================\nCommand-line Parameters\n========================================"
+	echo -e "${executable} ${parms}"
+	echo -e ""
+	echo -e "========================================\nLogs\n========================================"
+}| sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"| tee "${scriptlogdir}/${servicename}-email.log" > /dev/null 2>&1
+echo -e "\n\n	Script log\n===================" >> "${emaillog}"
 tail -25 "${scriptlog}" >> "${emaillog}"
 if [ ! -z "${consolelog}" ]; then
-	echo -e "\n\nConsole log\n====================\n" >> "${emaillog}"
-	tail -25 "${consolelog}" >> "${emaillog}"
+	echo -e "\n\n	Console log\n====================" >> "${emaillog}"
+	tail -25 "${consolelog}" | awk '{ sub("\r$", ""); print }' >> "${emaillog}"
 fi
 if [ ! -z "${gamelogdir}" ]; then
-	echo -e "\n\nServer log\n====================\n" >> "${emaillog}"
-	tail "${gamelogdir}"/*|grep -v "==>"|sed '/^$/d'|tail -25 >> "${emaillog}"
+	echo -e "\n\n	Server log\n====================" >> "${emaillog}"
+	tail "${gamelogdir}"/* | grep -v "==>" | sed '/^$/d' | tail -25 >> "${emaillog}"
 fi
 mail -s "${subject}" ${email} < "${emaillog}"
 fn_printok "Sending notification to ${email}"
diff --git a/functions/fix_ins.sh b/functions/fix_ins.sh
index 0e9c77089..210c702ce 100644
--- a/functions/fix_ins.sh
+++ b/functions/fix_ins.sh
@@ -17,4 +17,3 @@ if [ "${function_selfname}" == "command_debug.sh" ]; then
 else
         defaultmap="\\\"${defaultmap}\\\""
 fi
-fn_parms
diff --git a/functions/fn_update_functions b/functions/fn_update_functions
index 185f44f5e..2de9afd6d 100644
--- a/functions/fn_update_functions
+++ b/functions/fn_update_functions
@@ -2,7 +2,7 @@
 # LGSM update_functions.sh function
 # Author: Daniel Gibbs
 # Website: http://gameservermanagers.com
-lgsm_version="271215"
+lgsm_version="230116"
 
 # Description: LEGACY FUNCTION Deletes the functions dir to allow re-downloading of functions from GitHub.
 
@@ -14,9 +14,9 @@ rm -rfv "${rootdir}/functions/"*
 exitcode=$?
 if [ "${exitcode}" == "0" ]; then
 	fn_printok "Updating functions"
-	fn_scriptlog "Successfull! Updating functions"
+	fn_scriptlog "Success! Updating functions"
 else
-	fn_printokfail "Updating functions"
+	fn_printfail "Updating functions"
 	fn_scriptlog "Failure! Updating functions"
 fi
 echo -ne "\n"
\ No newline at end of file
diff --git a/functions/info_glibc.sh b/functions/info_glibc.sh
index d311cc4d5..4181d011d 100644
--- a/functions/info_glibc.sh
+++ b/functions/info_glibc.sh
@@ -2,7 +2,7 @@
 # LGSM info_glibc.sh function
 # Author: Daniel Gibbs
 # Website: http://gameservermanagers.com
-lgsm_version="271215"
+lgsm_version="100116"
 
 # Description: stores details on servers Glibc requirements.
 
@@ -10,6 +10,8 @@ lgsm_version="271215"
 if [ "${gamename}" == "Blade Symphony" ]; then
 	glibcrequired="2.15"
 	glibcfix="yes"
+elif [ "${gamename}" == "BrainBread 2" ]; then
+	glibcrequired="2.17"
 elif [ "${gamename}" == "Double Action: Boogaloo" ]; then
 	glibcrequired="2.15"
 	glibcfix="yes"
diff --git a/functions/install_config.sh b/functions/install_config.sh
index 635c89f24..f3420e9ac 100644
--- a/functions/install_config.sh
+++ b/functions/install_config.sh
@@ -2,7 +2,7 @@
 # LGSM install_config.sh function
 # Author: Daniel Gibbs
 # Website: http://gameservermanagers.com
-lgsm_version="271215"
+lgsm_version="100116"
 
 fn_defaultconfig(){
 	echo "creating ${servercfg} config file."
@@ -165,6 +165,11 @@ elif [ "${gamename}" == "ARMA 3" ]; then
 	wget -N /dev/null ${githuburl}/Arma3/cfg/lgsm-default.network.cfg 2>&1 | grep -F HTTP | cut -c45- | uniq
 	sleep 1
 	fn_arma3config
+elif [ "${gamename}" == "BrainBread 2" ]; then
+	echo -e "downloading lgsm-default.cfg...\c"
+	wget -N /dev/null ${githuburl}/BrainBread2/cfg/lgsm-default.cfg 2>&1 | grep -F HTTP | cut -c45- | uniq
+	sleep 1
+	fn_sourceconfig	
 elif [ "${gamename}" == "Black Mesa: Deathmatch" ]; then
 	echo -e "downloading lgsm-default.cfg...\c"
 	wget -N /dev/null ${githuburl}/BlackMesa/cfg/lgsm-default.cfg 2>&1 | grep -F HTTP | cut -c45- | uniq
diff --git a/functions/install_steamcmd.sh b/functions/install_steamcmd.sh
index fe944a253..1f744e7f6 100644
--- a/functions/install_steamcmd.sh
+++ b/functions/install_steamcmd.sh
@@ -10,31 +10,4 @@ echo ""
 echo "Installing SteamCMD"
 echo "================================="
 sleep 1
-steamcmddir="${rootdir}/steamcmd"
-if [ ! -f "${steamcmddir}/steamcmd.sh" ]; then
-	if [ ! -d "${steamcmddir}" ]; then
-		mkdir -v "${steamcmddir}"
-	fi
-	curl=$(curl --fail -o "${steamcmddir}/steamcmd_linux.tar.gz" "http://media.steampowered.com/client/steamcmd_linux.tar.gz" 2>&1)
-	exitcode=$?
-	echo -e "downloading steamcmd_linux.tar.gz...\c"
-	if [ $exitcode -eq 0 ]; then
-		fn_printokeol
-	else
-		fn_printfaileol
-		echo "${curl}"
-		echo -e "${githuburl}\n"
-		exit $exitcode
-	fi
-	tar --verbose -zxf "${steamcmddir}/steamcmd_linux.tar.gz" -C "${steamcmddir}"
-	rm -v "${steamcmddir}/steamcmd_linux.tar.gz"
-	chmod +x "${steamcmddir}/steamcmd.sh"
-else
-	echo "SteamCMD already installed!"
-fi
-	# Checks that steamcmd is working correctly and will prompt Steam Guard if required.
-	"${steamcmddir}"/steamcmd.sh +login "${steamuser}" "${steampass}" +quit
-	if [ $? -ne 0 ]; then
-		fn_printfailurenl "Error running SteamCMD"
-	fi	
-sleep 1
+check_steamcmd.sh
diff --git a/functions/install_ts3.sh b/functions/install_ts3.sh
index 3860fbc50..f90f91073 100644
--- a/functions/install_ts3.sh
+++ b/functions/install_ts3.sh
@@ -15,29 +15,29 @@ else
 	exit 1
 fi
 
-# Grabs all version numbers not in correct order
+# Grabs all version numbers but not in correct order
 wget "http://dl.4players.de/ts/releases/?C=M;O=D" -q -O -| grep -i dir | egrep -o '<a href=\".*\/\">.*\/<\/a>' | egrep -o '[0-9\.?]+'|uniq > .ts3_version_numbers_unsorted.tmp
 
-# removes digits to allow sorting of numbers
-cat .ts3_version_numbers_unsorted.tmp |tr -cd '[:digit:][*\n]' > .ts3_version_numbers_digit.tmp
-# Sorts numbers in to correct order
-# merges two files in to one with two columns sorts the numbers in to order then only outputs the second to the ts3_version_numbers.tmp
-paste .ts3_version_numbers_digit.tmp .ts3_version_numbers_unsorted.tmp |sort -rn|awk '{ print $2 }' > .ts3_version_numbers.tmp
+# Replaces dots with spaces to split up the number. e.g 3 0 12 1 is 3.0.12.1 this allows correct sorting
+ cat .ts3_version_numbers_unsorted.tmp | tr "." " " > .ts3_version_numbers_digit.tmp
+# Sorts versions in to correct order
+# merges 2 files and orders by each column in order allowing these version numbers to be sorted in order
+paste .ts3_version_numbers_digit.tmp .ts3_version_numbers_unsorted.tmp | awk '{print $1,$2,$3,$4 " " $0;}'| sort  -k1rn -k2rn -k3rn -k4rn | awk '{print $NF}' > .ts3_version_numbers.tmp
 
 # Finds directory with most recent server version.
 while read ts3_version_number; do
-	wget --spider -q "http://dl.4players.de/ts/releases/${ts3_version_number}/teamspeak3-server_linux-${ts3arch}-${ts3_version_number}.tar.gz"
+	wget --spider -q "http://dl.4players.de/ts/releases/${ts3_version_number}/teamspeak3-server_linux_${ts3arch}-${ts3_version_number}.tar.bz2"
 	if [ $? -eq 0 ]; then
 		availablebuild="${ts3_version_number}"
-		echo "Latest Build: ${availablebuild}"
 		# Break while-loop, if the latest release could be found
-		echo "http://dl.4players.de/ts/releases/${ts3_version_number}/teamspeak3-66server_linux-${ts3arch}-${ts3_version_number}.tar.g"
 		break
 	fi
 done < .ts3_version_numbers.tmp
-rm -f .ts3_version_numbers_digit.tmp
-rm -f .ts3_version_numbers_unsorted.tmp
-rm -f .ts3_version_numbers.tmp
+
+# tidy up
+rm -f ".ts3_version_numbers_digit.tmp"
+rm -f ".ts3_version_numbers_unsorted.tmp"
+rm -f ".ts3_version_numbers.tmp"
 
 # Checks availablebuild info is available
 if [ -z "${availablebuild}" ]; then
@@ -49,11 +49,11 @@ if [ -z "${availablebuild}" ]; then
 fi
 
 cd "${rootdir}"
-echo -e "downloading teamspeak3-server_linux-${ts3arch}-${availablebuild}.tar.gz...\c"
-wget -N /dev/null http://dl.4players.de/ts/releases/${ts3_version_number}/teamspeak3-server_linux-${ts3arch}-${ts3_version_number}.tar.gz 2>&1 | grep -F HTTP | cut -c45-| uniq
+echo -e "downloading teamspeak3-server_linux_${ts3arch}-${ts3_version_number}.tar.bz2...\c"
+wget -N /dev/null http://dl.4players.de/ts/releases/${ts3_version_number}/teamspeak3-server_linux_${ts3arch}-${ts3_version_number}.tar.bz2 2>&1 | grep -F HTTP | cut -c45-| uniq
 sleep 1
-echo -e "extracting teamspeak3-server_linux-${ts3arch}-${availablebuild}.tar.gz...\c"
-tar -xf "teamspeak3-server_linux-${ts3arch}-${availablebuild}.tar.gz" 2> ".${servicename}-tar-error.tmp"
+echo -e "extracting teamspeak3-server_linux_${ts3arch}-${ts3_version_number}.tar.bz2...\c"
+tar -xf "teamspeak3-server_linux_${ts3arch}-${ts3_version_number}.tar.bz2" 2> ".${servicename}-tar-error.tmp"
 local status=$?
 if [ ${status} -eq 0 ]; then
 	echo "OK"
@@ -76,5 +76,5 @@ else
 	rm ".${servicename}-cp-error.tmp"
 	exit $?
 fi
-rm -f teamspeak3-server_linux-${ts3arch}-${availablebuild}.tar.gz
+rm -f "teamspeak3-server_linux_${ts3arch}-${ts3_version_number}.tar.bz2"
 rm -rf "${rootdir}/teamspeak3-server_linux-${ts3arch}"
diff --git a/functions/update_check.sh b/functions/update_check.sh
index e0ba3ea96..ece46fb88 100644
--- a/functions/update_check.sh
+++ b/functions/update_check.sh
@@ -2,7 +2,7 @@
 # LGSM update_check.sh function
 # Author: Daniel Gibbs
 # Website: http://gameservermanagers.com
-lgsm_version="271215"
+lgsm_version="020216"
 
 # Description: Checks if a server update is available.
 
@@ -188,7 +188,6 @@ sleep 1
 # Checks currentbuild info is available, if fails a server restart will be forced to generate logs
 if [ -z "$(find ./* -name 'ts3server*_0.log')" ]; then
 	fn_printfail "Checking for update: teamspeak.com"
-	fn_scriptlog "Checking for update: teamspeak.com"
 	sleep 1
 	fn_printfailnl "Checking for update: teamspeak.com: No logs with server version found"
 	fn_scriptlog "Failure! Checking for update: teamspeak.com: No logs with server version found"
@@ -213,27 +212,29 @@ ts3arch=$(ls $(find ${filesdir}/ -name 'ts3server_*_*' 2> /dev/null | grep -v 't
 
 # Gets availablebuild info
 
-# Grabs all version numbers not in correct order
+# Grabs all version numbers but not in correct order
 wget "http://dl.4players.de/ts/releases/?C=M;O=D" -q -O -| grep -i dir | egrep -o '<a href=\".*\/\">.*\/<\/a>' | egrep -o '[0-9\.?]+'|uniq > .ts3_version_numbers_unsorted.tmp
 
-# removes digits to allow sorting of numbers
-cat .ts3_version_numbers_unsorted.tmp |tr -cd '[:digit:][*\n]' > .ts3_version_numbers_digit.tmp
-# Sorts numbers in to correct order
-# merges two files in to one with two columns sorts the numbers in to order then only outputs the second to the ts3_version_numbers.tmp
-paste .ts3_version_numbers_digit.tmp .ts3_version_numbers_unsorted.tmp |sort -rn|awk '{ print $2 }' > .ts3_version_numbers.tmp
+# Replaces dots with spaces to split up the number. e.g 3 0 12 1 is 3.0.12.1 this allows correct sorting
+ cat .ts3_version_numbers_unsorted.tmp | tr "." " " > .ts3_version_numbers_digit.tmp
+# Sorts versions in to correct order
+# merges 2 files and orders by each column in order allowing these version numbers to be sorted in order
+paste .ts3_version_numbers_digit.tmp .ts3_version_numbers_unsorted.tmp | awk '{print $1,$2,$3,$4 " " $0;}'| sort  -k1rn -k2rn -k3rn -k4rn | awk '{print $NF}' > .ts3_version_numbers.tmp
 
 # Finds directory with most recent server version.
 while read ts3_version_number; do
-	wget --spider -q "http://dl.4players.de/ts/releases/${ts3_version_number}/teamspeak3-server_linux-${ts3arch}-${ts3_version_number}.tar.gz"
+	wget --spider -q "http://dl.4players.de/ts/releases/${ts3_version_number}/teamspeak3-server_linux_${ts3arch}-${ts3_version_number}.tar.bz2"
 	if [ $? -eq 0 ]; then
 		availablebuild="${ts3_version_number}"
 		# Break while-loop, if the latest release could be found
 		break
 	fi
 done < .ts3_version_numbers.tmp
-rm -f .ts3_version_numbers_digit.tmp
-rm -f .ts3_version_numbers_unsorted.tmp
-rm -f .ts3_version_numbers.tmp
+
+# tidy up
+rm -f ".ts3_version_numbers_digit.tmp"
+rm -f ".ts3_version_numbers_unsorted.tmp"
+rm -f ".ts3_version_numbers.tmp"
 
 # Checks availablebuild info is available
 if [ -z "${availablebuild}" ]; then
diff --git a/functions/update_dl.sh b/functions/update_dl.sh
index 09bd3ebe9..a80caa6d8 100644
--- a/functions/update_dl.sh
+++ b/functions/update_dl.sh
@@ -2,7 +2,7 @@
 # LGSM update_dl.sh function
 # Author: Daniel Gibbs
 # Website: http://gameservermanagers.com
-lgsm_version="271215"
+lgsm_version="020216"
 
 # Description: Runs a server update.
 
@@ -29,13 +29,13 @@ fix.sh
 
 fn_teamspeak3_dl(){
 cd "${rootdir}"
-echo -e "downloading teamspeak3-server_linux-${ts3arch}-${availablebuild}.tar.gz...\c"
-fn_scriptlog "Downloading teamspeak3-server_linux-${ts3arch}-${availablebuild}.tar.gz"
-wget -N /dev/null http://dl.4players.de/ts/releases/${ts3_version_number}/teamspeak3-server_linux-${ts3arch}-${ts3_version_number}.tar.gz 2>&1 | grep -F HTTP | cut -c45-| uniq
+echo -e "downloading teamspeak3-server_linux_${ts3arch}-${ts3_version_number}.tar.bz2...\c"
+fn_scriptlog "Downloading teamspeak3-server_linux_${ts3arch}-${ts3_version_number}.tar.bz2"
+wget -N /dev/null http://dl.4players.de/ts/releases/${ts3_version_number}/teamspeak3-server_linux_${ts3arch}-${ts3_version_number}.tar.bz2 2>&1 | grep -F HTTP | cut -c45-| uniq
 sleep 1
-echo -e "extracting teamspeak3-server_linux-${ts3arch}-${availablebuild}.tar.gz...\c"
-fn_scriptlog "Extracting teamspeak3-server_linux-${ts3arch}-${availablebuild}.tar.gz"
-tar -xf "teamspeak3-server_linux-${ts3arch}-${availablebuild}.tar.gz" 2> "${scriptlogdir}/.${servicename}-tar-error.tmp"
+echo -e "extracting teamspeak3-server_linux_${ts3arch}-${ts3_version_number}.tar.bz2...\c"
+fn_scriptlog "Extracting teamspeak3-server_linux_${ts3arch}-${ts3_version_number}.tar.bz2"
+tar -xf "teamspeak3-server_linux_${ts3arch}-${ts3_version_number}.tar.bz2" 2> "${scriptlogdir}/.${servicename}-tar-error.tmp"
 local status=$?
 if [ ${status} -eq 0 ]; then
 	echo "OK"
@@ -51,7 +51,7 @@ else
 fi
 echo -e "copying to ${filesdir}...\c"
 fn_scriptlog "Copying to ${filesdir}"
-cp -R "${rootdir}/teamspeak3-server_linux-${ts3arch}/"* "${filesdir}" 2> "${scriptlogdir}/.${servicename}-cp-error.tmp"
+cp -R "${rootdir}/teamspeak3-server_linux_${ts3arch}/"* "${filesdir}" 2> "${scriptlogdir}/.${servicename}-cp-error.tmp"
 local status=$?
 if [ ${status} -eq 0 ]; then
 	echo "OK"
@@ -65,8 +65,8 @@ else
 	fn_scriptlog "Failure! Unable to update"
 	exit ${status}
 fi
-rm -f teamspeak3-server_linux-${ts3arch}-${availablebuild}.tar.gz
-rm -rf "${rootdir}/teamspeak3-server_linux-${ts3arch}"
+rm -f teamspeak3-server_linux_${ts3arch}-${ts3_version_number}.tar.bz2
+rm -rf "${rootdir}/teamspeak3-server_linux_${ts3arch}"
 }
 
 check.sh
diff --git a/functions/update_functions.sh b/functions/update_functions.sh
index 350714ed0..196b90f75 100644
--- a/functions/update_functions.sh
+++ b/functions/update_functions.sh
@@ -2,7 +2,7 @@
 # LGSM update_functions.sh function
 # Author: Daniel Gibbs
 # Website: http://gameservermanagers.com
-lgsm_version="271215"
+lgsm_version="230116"
 
 # Description: Deletes the functions dir to allow re-downloading of functions from GitHub.
 
@@ -16,9 +16,9 @@ rm -rfv "${rootdir}/functions/"*
 exitcode=$?
 if [ "${exitcode}" == "0" ]; then
 	fn_printok "Updating functions"
-	fn_scriptlog "Successfull! Updating functions"
+	fn_scriptlog "Success! Updating functions"
 else
-	fn_printokfail "Updating functions"
+	fn_printfail "Updating functions"
 	fn_scriptlog "Failure! Updating functions"
 fi
 echo -ne "\n"
\ No newline at end of file