Index: binary-improvements/7dtd-server-fixes/src/AllocsLogFunctions.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/AllocsLogFunctions.cs	(revision 197)
+++ binary-improvements/7dtd-server-fixes/src/AllocsLogFunctions.cs	(revision 198)
@@ -42,4 +42,6 @@
 				if (p != null) {
 					p.SetOffline ();
+				} else {
+					Log.Out ("Disconnected player not found in client list...");
 				}
 				PersistentData.PersistentContainer.Instance.Save ();
Index: binary-improvements/7dtd-server-fixes/src/CommandExtensions.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/CommandExtensions.cs	(revision 197)
+++ binary-improvements/7dtd-server-fixes/src/CommandExtensions.cs	(revision 198)
@@ -2,4 +2,5 @@
 using System;
 using System.Collections.Generic;
+using System.Reflection;
 
 namespace AllocsFixes
@@ -11,22 +12,17 @@
 			try {
 				ConsoleSdtd cons = manager.m_GUIConsole;
-				cons.AddCommand (new CreativeMenu (cons));
-				cons.AddCommand (new EnableRendering (cons));
-				cons.AddCommand (new GetGamePrefs (cons));
-				cons.AddCommand (new GetTime (cons));
-				cons.AddCommand (new Give (cons));
-				cons.AddCommand (new Kill (cons));
-				cons.AddCommand (new ListItems (cons));
-				cons.AddCommand (new ListKnownPlayers (cons));
-				cons.AddCommand (new ListLandProtection (cons));
-				cons.AddCommand (new ListPlayersExtended (cons));
-				cons.AddCommand (new RemoveLandProtection (cons));
-				cons.AddCommand (new RenderMap (cons));
-				cons.AddCommand (new Reply (cons));
-				cons.AddCommand (new SayToPlayer (cons));
-				cons.AddCommand (new SetTimeReal (cons));
-				cons.AddCommand (new ShowInventory (cons));
-				cons.AddCommand (new TeleportPlayer (cons));
-				cons.AddCommand (new AllocsFixes.CustomCommands.Version (cons));
+				string ns = "AllocsFixes.CustomCommands";
+				string basetype = "ConsoleCommand";
+
+				foreach (Type t in Assembly.GetExecutingAssembly ().GetTypes()) {
+					if (t.IsClass && t.Namespace.Equals (ns) && t.BaseType.Name.Equals (basetype)) {
+						try {
+							ConstructorInfo ctor = t.GetConstructor (new Type[] {typeof(ConsoleSdtd)});
+							cons.AddCommand ((ConsoleCommand)ctor.Invoke (new object[] {cons}));
+						} catch (Exception e) {
+							Log.Out ("Could not register custom command \"" + t.Name + "\": " + e);
+						}
+					}
+				}
 			} catch (Exception e) {
 				Log.Out ("Error registering custom commands: " + e);
Index: binary-improvements/7dtd-server-fixes/src/PersistentData/Player.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/PersistentData/Player.cs	(revision 197)
+++ binary-improvements/7dtd-server-fixes/src/PersistentData/Player.cs	(revision 198)
@@ -98,10 +98,14 @@
 			if (clientInfo != null) {
 				Log.Out ("Player set to offline: " + steamId);
-				Vector3i lastPos = new Vector3i (Entity.GetPosition ());
-				lastPositionX = lastPos.x;
-				lastPositionY = lastPos.y;
-				lastPositionZ = lastPos.z;
-				totalPlayTime += (long)(Time.timeSinceLevelLoad - Entity.CreationTimeSinceLevelLoad);
 				lastOnline = DateTime.Now;
+				try {
+					Vector3i lastPos = new Vector3i (Entity.GetPosition ());
+					lastPositionX = lastPos.x;
+					lastPositionY = lastPos.y;
+					lastPositionZ = lastPos.z;
+					totalPlayTime += (long)(Time.timeSinceLevelLoad - Entity.CreationTimeSinceLevelLoad);
+				} catch (NullReferenceException) {
+					Log.Out ("Entity not available. Something seems to be wrong here...");
+				}
 				clientInfo = null;
 			}
