Index: binary-improvements/7dtd-server-fixes/src/API.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/API.cs	(revision 337)
+++ binary-improvements/7dtd-server-fixes/src/API.cs	(revision 345)
@@ -1,3 +1,5 @@
 using System.Collections.Generic;
+using AllocsFixes.PersistentData;
+using System;
 
 namespace AllocsFixes {
@@ -9,30 +11,88 @@
 			ModEvents.PlayerSpawning.RegisterHandler (PlayerSpawning);
 			ModEvents.PlayerDisconnected.RegisterHandler (PlayerDisconnected);
+			ModEvents.PlayerSpawnedInWorld.RegisterHandler (PlayerSpawned);
 			ModEvents.ChatMessage.RegisterHandler (ChatMessage);
 		}
 
 		public void GameAwake () {
-			StateManager.Awake ();
+			try {
+				PersistentContainer.Load ();
+			} catch (Exception e) {
+				Log.Out ("Error in StateManager.Awake: " + e);
+			}
 		}
 
 		public void GameShutdown () {
-			StateManager.Shutdown ();
+			try {
+				Log.Out ("Server shutting down!");
+				PersistentContainer.Instance.Save ();
+			} catch (Exception e) {
+				Log.Out ("Error in StateManager.Shutdown: " + e);
+			}
 		}
 
 		public void SavePlayerData (ClientInfo _cInfo, PlayerDataFile _playerDataFile) {
-			PlayerDataStuff.GM_SavePlayerData (_cInfo, _playerDataFile);
+			try {
+				PersistentContainer.Instance.Players [_cInfo.playerId, true].Update (_playerDataFile);
+			} catch (Exception e) {
+				Log.Out ("Error in GM_SavePlayerData: " + e);
+			}
 		}
 
 		public void PlayerSpawning (ClientInfo _cInfo, int _chunkViewDim, PlayerProfile _playerProfile) {
-			AllocsLogFunctions.RequestToSpawnPlayer (_cInfo, _chunkViewDim, _playerProfile);
+			try {
+				Log.Out ("Player connected" +
+					", entityid=" + _cInfo.entityId +
+					", name=" + _cInfo.playerName +
+					", steamid=" + _cInfo.playerId +
+					", steamOwner=" + _cInfo.ownerId +
+					", ip=" + _cInfo.ip
+				);
+			} catch (Exception e) {
+				Log.Out ("Error in AllocsLogFunctions.RequestToSpawnPlayer: " + e);
+			}
 		}
 
 		public void PlayerDisconnected (ClientInfo _cInfo, bool _bShutdown) {
-			AllocsLogFunctions.PlayerDisconnected (_cInfo, _bShutdown);
+			try {
+				Player p = PersistentContainer.Instance.Players [_cInfo.playerId, false];
+				if (p != null) {
+					p.SetOffline ();
+				} else {
+					Log.Out ("Disconnected player not found in client list...");
+				}
+
+				PersistentContainer.Instance.Save ();
+			} catch (Exception e) {
+				Log.Out ("Error in AllocsLogFunctions.PlayerDisconnected: " + e);
+			}
 		}
+
+		public void PlayerSpawned (ClientInfo _cInfo, RespawnType _respawnReason, Vector3i _spawnPos) {
+			try {
+				PersistentContainer.Instance.Players [_cInfo.playerId, true].SetOnline (_cInfo);
+				PersistentContainer.Instance.Save ();
+			} catch (Exception e) {
+				Log.Out ("Error in AllocsLogFunctions.PlayerSpawnedInWorld: " + e);
+			}
+		}
+
+		private const string ANSWER =
+			"     [ff0000]I[-] [ff7f00]W[-][ffff00]A[-][80ff00]S[-] [00ffff]H[-][0080ff]E[-][0000ff]R[-][8b00ff]E[-]";
 
 		public bool ChatMessage (ClientInfo _cInfo, EChatType _type, int _senderId, string _msg, string _mainName,
 			bool _localizeMain, List<int> _recipientEntityIds) {
-			return ChatHookExample.Hook (_cInfo, _type, _msg, _mainName);
+			if (string.IsNullOrEmpty (_msg) || !_msg.EqualsCaseInsensitive ("/alloc")) {
+				return true;
+			}
+
+			if (_cInfo != null) {
+				Log.Out ("Sent chat hook reply to {0}", _cInfo.playerId);
+				_cInfo.SendPackage (new NetPackageChat (EChatType.Whisper, -1, ANSWER, "", false, null));
+			} else {
+				Log.Error ("ChatHookExample: Argument _cInfo null on message: {0}", _msg);
+			}
+
+			return false;
 		}
 	}
Index: binary-improvements/7dtd-server-fixes/src/AllocsLogFunctions.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/AllocsLogFunctions.cs	(revision 337)
+++ 	(revision )
@@ -1,38 +1,0 @@
-using System;
-using AllocsFixes.PersistentData;
-
-namespace AllocsFixes {
-	public class AllocsLogFunctions {
-		public static void RequestToSpawnPlayer (ClientInfo _cInfo, int _chunkViewDim, PlayerProfile _playerProfile) {
-			try {
-				Log.Out ("Player connected" +
-				         ", entityid=" + _cInfo.entityId +
-				         ", name=" + _cInfo.playerName +
-				         ", steamid=" + _cInfo.playerId +
-				         ", steamOwner=" + _cInfo.ownerId +
-				         ", ip=" + _cInfo.ip
-				);
-
-				PersistentContainer.Instance.Players [_cInfo.playerId, true].SetOnline (_cInfo);
-				PersistentContainer.Instance.Save ();
-			} catch (Exception e) {
-				Log.Out ("Error in AllocsLogFunctions.RequestToSpawnPlayer: " + e);
-			}
-		}
-
-		public static void PlayerDisconnected (ClientInfo _cInfo, bool _bShutdown) {
-			try {
-				Player p = PersistentContainer.Instance.Players [_cInfo.playerId, true];
-				if (p != null) {
-					p.SetOffline ();
-				} else {
-					Log.Out ("Disconnected player not found in client list...");
-				}
-
-				PersistentContainer.Instance.Save ();
-			} catch (Exception e) {
-				Log.Out ("Error in AllocsLogFunctions.PlayerDisconnected: " + e);
-			}
-		}
-	}
-}
Index: binary-improvements/7dtd-server-fixes/src/ChatHookExample.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/ChatHookExample.cs	(revision 337)
+++ 	(revision )
@@ -1,22 +1,0 @@
-namespace AllocsFixes {
-	public class ChatHookExample {
-		private const string ANSWER =
-			"     [ff0000]I[-] [ff7f00]W[-][ffff00]A[-][80ff00]S[-] [00ffff]H[-][0080ff]E[-][0000ff]R[-][8b00ff]E[-]";
-
-		public static bool Hook (ClientInfo _cInfo, EChatType _type, string _message, string _playerName) {
-			if (string.IsNullOrEmpty (_message) || !_message.EqualsCaseInsensitive ("/alloc")) {
-				return true;
-			}
-
-			if (_cInfo != null) {
-				Log.Out ("Sent chat hook reply to {0}", _cInfo.playerId);
-				_cInfo.SendPackage (new NetPackageChat (EChatType.Whisper, -1, ANSWER, "", false, null));
-			} else {
-				Log.Error ("ChatHookExample: Argument _cInfo null on message: {0}", _message);
-			}
-
-			return false;
-
-		}
-	}
-}
Index: binary-improvements/7dtd-server-fixes/src/PlayerDataStuff.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/PlayerDataStuff.cs	(revision 337)
+++ 	(revision )
@@ -1,14 +1,0 @@
-using System;
-using AllocsFixes.PersistentData;
-
-namespace AllocsFixes {
-	public class PlayerDataStuff {
-		public static void GM_SavePlayerData (ClientInfo _cInfo, PlayerDataFile _playerDataFile) {
-			try {
-				PersistentContainer.Instance.Players [_cInfo.playerId, true].Update (_playerDataFile);
-			} catch (Exception e) {
-				Log.Out ("Error in GM_SavePlayerData: " + e);
-			}
-		}
-	}
-}
Index: binary-improvements/7dtd-server-fixes/src/StateManager.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/StateManager.cs	(revision 337)
+++ 	(revision )
@@ -1,23 +1,0 @@
-using System;
-using AllocsFixes.PersistentData;
-
-namespace AllocsFixes {
-	public class StateManager {
-		public static void Awake () {
-			try {
-				PersistentContainer.Load ();
-			} catch (Exception e) {
-				Log.Out ("Error in StateManager.Awake: " + e);
-			}
-		}
-
-		public static void Shutdown () {
-			try {
-				Log.Out ("Server shutting down!");
-				PersistentContainer.Instance.Save ();
-			} catch (Exception e) {
-				Log.Out ("Error in StateManager.Shutdown: " + e);
-			}
-		}
-	}
-}
