Index: binary-improvements/AllocsCommands/Commands/ListKnownPlayers.cs
===================================================================
--- binary-improvements/AllocsCommands/Commands/ListKnownPlayers.cs	(revision 359)
+++ binary-improvements/AllocsCommands/Commands/ListKnownPlayers.cs	(revision 369)
@@ -1,3 +1,2 @@
-using System;
 using System.Collections.Generic;
 using AllocsFixes.PersistentData;
@@ -14,9 +13,9 @@
 			       "  2. listknownplayers -online\n" +
 			       "  3. listknownplayers -notbanned\n" +
-			       "  4. listknownplayers <player name / steamid>\n" +
+			       "  4. listknownplayers <player name / userid>\n" +
 			       "1. Lists all players that have ever been online\n" +
 			       "2. Lists only the players that are currently online\n" +
 			       "3. Lists only the players that are not banned\n" +
-			       "4. Lists all players whose name contains the given string or matches the given SteamID";
+			       "4. Lists all players whose name contains the given string or matches the given UserID";
 		}
 
@@ -31,14 +30,13 @@
 			bool notBannedOnly = false;
 			string nameFilter = string.Empty;
-			bool isSteamId = false;
+			PlatformUserIdentifierAbs userIdFilter = null;
 
 			if (_params.Count == 1) {
-				long steamid;
 				if (_params [0].EqualsCaseInsensitive ("-online")) {
 					onlineOnly = true;
 				} else if (_params [0].EqualsCaseInsensitive ("-notbanned")) {
 					notBannedOnly = true;
-				} else if (_params [0].Length == 17 && long.TryParse (_params [0], out steamid)) {
-					isSteamId = true;
+				} else if (PlatformUserIdentifierAbs.TryFromCombinedString (_params [0], out userIdFilter)) {
+					// if true nothing to do, set by the out parameter
 				} else {
 					nameFilter = _params [0];
@@ -46,37 +44,31 @@
 			}
 
-			if (isSteamId) {
-				Player p = PersistentContainer.Instance.Players [_params [0], false];
+			if (userIdFilter != null) {
+				Player p = PersistentContainer.Instance.Players [userIdFilter, false];
 
 				if (p != null) {
-					SdtdConsole.Instance.Output (string.Format (
-						"{0}. {1}, id={2}, steamid={3}, online={4}, ip={5}, playtime={6} m, seen={7}",
-						0, p.Name, p.EntityID, _params [0], p.IsOnline, p.IP,
-						p.TotalPlayTime / 60,
-						p.LastOnline.ToString ("yyyy-MM-dd HH:mm"))
+					SdtdConsole.Instance.Output (
+						$"{0}. {p.Name}, id={p.EntityID}, steamid={_params [0]}, online={p.IsOnline}, ip={p.IP}, playtime={p.TotalPlayTime / 60} m, seen={p.LastOnline:yyyy-MM-dd HH:mm}"
 					);
 				} else {
-					SdtdConsole.Instance.Output (string.Format ("SteamID {0} unknown!", _params [0]));
+					SdtdConsole.Instance.Output ($"SteamID {_params [0]} unknown!");
 				}
 			} else {
 				int num = 0;
-				foreach (KeyValuePair<string, Player> kvp in PersistentContainer.Instance.Players.Dict) {
+				foreach (KeyValuePair<PlatformUserIdentifierAbs, Player> kvp in PersistentContainer.Instance.Players.Dict) {
 					Player p = kvp.Value;
 
 					if (
 						(!onlineOnly || p.IsOnline)
-						&& (!notBannedOnly || !admTools.IsBanned (kvp.Key))
+						&& (!notBannedOnly || !admTools.IsBanned (kvp.Key, out _, out _))
 						&& (nameFilter.Length == 0 || p.Name.ContainsCaseInsensitive (nameFilter))
 					) {
-						SdtdConsole.Instance.Output (string.Format (
-							"{0}. {1}, id={2}, steamid={3}, online={4}, ip={5}, playtime={6} m, seen={7}",
-							++num, p.Name, p.EntityID, kvp.Key, p.IsOnline, p.IP,
-							p.TotalPlayTime / 60,
-							p.LastOnline.ToString ("yyyy-MM-dd HH:mm"))
+						SdtdConsole.Instance.Output (
+							$"{++num}. {p.Name}, id={p.EntityID}, steamid={kvp.Key}, online={p.IsOnline}, ip={p.IP}, playtime={p.TotalPlayTime / 60} m, seen={p.LastOnline:yyyy-MM-dd HH:mm}"
 						);
 					}
 				}
 
-				SdtdConsole.Instance.Output ("Total of " + PersistentContainer.Instance.Players.Count + " known");
+				SdtdConsole.Instance.Output ($"Total of {PersistentContainer.Instance.Players.Count} known");
 			}
 		}
Index: binary-improvements/AllocsCommands/Commands/ListLandProtection.cs
===================================================================
--- binary-improvements/AllocsCommands/Commands/ListLandProtection.cs	(revision 359)
+++ binary-improvements/AllocsCommands/Commands/ListLandProtection.cs	(revision 369)
@@ -12,8 +12,8 @@
 			return "Usage:\n" +
 			       "  1. listlandprotection summary\n" +
-			       "  2. listlandprotection <steam id / player name / entity id> [parseable]\n" +
+			       "  2. listlandprotection <user id / player name / entity id> [parseable]\n" +
 			       "  3. listlandprotection nearby [length]\n" +
 			       "1. Lists only players that own claimstones, the number they own and the protection status\n" +
-			       "2. Lists only the claims of the player given by his SteamID / entity id / playername, including the individual claim positions.\n" +
+			       "2. Lists only the claims of the player given by his UserID / entity id / playername, including the individual claim positions.\n" +
 			       "   If \"parseable\" is specified the output of the individual claims will be in a format better suited for programmatical readout.\n" +
 			       "3. Lists claims in a square with edge length of 64 (or the optionally specified size) around the executing player\n";
@@ -25,7 +25,9 @@
 
 		public override void Execute (List<string> _params, CommandSenderInfo _senderInfo) {
-			if (_senderInfo.RemoteClientInfo != null) {
-				if (_params.Count >= 1 && _params [0].EqualsCaseInsensitive ("nearby")) {
-					_params.Add (_senderInfo.RemoteClientInfo.playerId);
+			if (_params.Count >= 1 && _params [0].EqualsCaseInsensitive ("nearby")) {
+				if (_senderInfo.RemoteClientInfo != null) {
+					_params.Add (_senderInfo.RemoteClientInfo.entityId.ToString ());
+				} else if (_senderInfo.IsLocalGame && !GameManager.IsDedicatedServer) {
+					_params.Add (GameManager.Instance.World.GetPrimaryPlayerId ().ToString ());
 				}
 			}
@@ -35,5 +37,5 @@
 
 			bool summaryOnly = false;
-			string steamIdFilter = string.Empty;
+			PlatformUserIdentifierAbs userIdFilter = null;
 			Vector3i closeTo = default (Vector3i);
 			bool onlyCloseToPlayer = false;
@@ -47,14 +49,11 @@
 
 			if (_params.Count == 1) {
-				long tempLong;
-
 				if (_params [0].EqualsCaseInsensitive ("summary")) {
 					summaryOnly = true;
-				} else if (_params [0].Length == 17 && long.TryParse (_params [0], out tempLong)) {
-					steamIdFilter = _params [0];
+				} else if (PlatformUserIdentifierAbs.TryFromCombinedString (_params[0], out userIdFilter)) {
 				} else {
 					ClientInfo ci = ConsoleHelper.ParseParamIdOrName (_params [0]);
 					if (ci != null) {
-						steamIdFilter = ci.playerId;
+						userIdFilter = ci.PlatformId;
 					} else {
 						SdtdConsole.Instance.Output ("Player name or entity id \"" + _params [0] + "\" not found.");
@@ -74,6 +73,6 @@
 						}
 
-						ClientInfo ci = ConsoleHelper.ParseParamSteamIdOnline (_params [_params.Count - 1]);
-						EntityPlayer ep = w.Players.dict [ci.entityId];
+						int entityId = int.Parse (_params [_params.Count - 1]);
+						EntityPlayer ep = w.Players.dict [entityId];
 						closeTo = new Vector3i (ep.GetPosition ());
 						onlyCloseToPlayer = true;
@@ -91,6 +90,6 @@
 
 			LandClaimList.OwnerFilter[] ownerFilters = null;
-			if (!string.IsNullOrEmpty (steamIdFilter)) {
-				ownerFilters = new[] {LandClaimList.SteamIdFilter (steamIdFilter)};
+			if (userIdFilter != null) {
+				ownerFilters = new[] {LandClaimList.UserIdFilter (userIdFilter)};
 			}
 
@@ -106,5 +105,5 @@
 					"Player \"{0} ({1})\" owns {4} keystones (protected: {2}, current hardness multiplier: {3})",
 					kvp.Key.Name,
-					kvp.Key.SteamID,
+					kvp.Key.PlatformId,
 					kvp.Key.LandProtectionActive,
 					kvp.Key.LandProtectionMultiplier,
@@ -113,5 +112,5 @@
 					foreach (Vector3i v in kvp.Value) {
 						if (parseableOutput) {
-							SdtdConsole.Instance.Output ("LandProtectionOf: id=" + kvp.Key.SteamID +
+							SdtdConsole.Instance.Output ("LandProtectionOf: id=" + kvp.Key.PlatformId +
 							                             ", playerName=" + kvp.Key.Name + ", location=" + v);
 						} else {
@@ -122,5 +121,5 @@
 			}
 
-			if (string.IsNullOrEmpty (steamIdFilter)) {
+			if (userIdFilter == null) {
 				SdtdConsole.Instance.Output ("Total of " + ppl.m_lpBlockMap.Count + " keystones in the game");
 			}
Index: binary-improvements/AllocsCommands/Commands/RemoveLandProtection.cs
===================================================================
--- binary-improvements/AllocsCommands/Commands/RemoveLandProtection.cs	(revision 359)
+++ binary-improvements/AllocsCommands/Commands/RemoveLandProtection.cs	(revision 369)
@@ -11,8 +11,8 @@
 		public override string GetHelp () {
 			return "Usage:" +
-			       "  1. removelandprotection <steamid>\n" +
+			       "  1. removelandprotection <userid>\n" +
 			       "  2. removelandprotection <x> <y> <z>\n" +
 			       "  3. removelandprotection nearby [length]\n" +
-			       "1. Remove all land claims owned by the user with the given SteamID\n" +
+			       "1. Remove all land claims owned by the user with the given UserID\n" +
 			       "2. Remove only the claim block on the exactly given block position\n" +
 			       "3. Remove all claims in a square with edge length of 64 (or the optionally specified size) around the executing player";
@@ -25,13 +25,13 @@
 		private void removeById (string _id) {
 			try {
-				PersistentPlayerList ppl = GameManager.Instance.GetPersistentPlayerList ();
-
-				if (_id.Length < 1 || !ppl.Players.ContainsKey (_id)) {
+				if (!PlatformUserIdentifierAbs.TryFromCombinedString (_id, out PlatformUserIdentifierAbs userId)) {
 					SdtdConsole.Instance.Output (
 						"Not a valid Steam ID or user has never logged on. Use \"listlandprotection\" to get a list of keystones.");
 					return;
 				}
+				
+				PersistentPlayerList ppl = GameManager.Instance.GetPersistentPlayerList ();
 
-				if (ppl.Players [_id].LPBlocks == null || ppl.Players [_id].LPBlocks.Count == 0) {
+				if (ppl.Players [userId].LPBlocks == null || ppl.Players [userId].LPBlocks.Count == 0) {
 					SdtdConsole.Instance.Output (
 						"Player does not own any keystones. Use \"listlandprotection\" to get a list of keystones.");
@@ -40,5 +40,5 @@
 
 				List<BlockChangeInfo> changes = new List<BlockChangeInfo> ();
-				foreach (Vector3i pos in ppl.Players [_id].LPBlocks) {
+				foreach (Vector3i pos in ppl.Players [userId].LPBlocks) {
 					BlockChangeInfo bci = new BlockChangeInfo (pos, new BlockValue (0), true, false);
 					changes.Add (bci);
@@ -58,8 +58,7 @@
 
 		private void removeByPosition (List<string> _coords) {
-			int x, y, z;
-			int.TryParse (_coords [0], out x);
-			int.TryParse (_coords [1], out y);
-			int.TryParse (_coords [2], out z);
+			int.TryParse (_coords [0], out int x);
+			int.TryParse (_coords [1], out int y);
+			int.TryParse (_coords [2], out int z);
 
 			if (x == int.MinValue || y == int.MinValue || z == int.MinValue) {
@@ -81,6 +80,5 @@
 			BlockChangeInfo bci = new BlockChangeInfo (v, new BlockValue (0), true, false);
 
-			List<BlockChangeInfo> changes = new List<BlockChangeInfo> ();
-			changes.Add (bci);
+			List<BlockChangeInfo> changes = new List<BlockChangeInfo> {bci};
 
 			GameManager.Instance.SetBlocksRPC (changes);
@@ -90,57 +88,53 @@
 
 		public override void Execute (List<string> _params, CommandSenderInfo _senderInfo) {
-			try {
+			if (_params.Count > 0 && _params [0].EqualsCaseInsensitive ("nearby")) {
 				if (_senderInfo.RemoteClientInfo != null) {
-					if (_params.Count >= 1 && _params [0].EqualsCaseInsensitive ("nearby")) {
-						_params.Add (_senderInfo.RemoteClientInfo.playerId);
-					}
+					_params.Add (_senderInfo.RemoteClientInfo.entityId.ToString ());
+				} else if (_senderInfo.IsLocalGame && !GameManager.IsDedicatedServer) {
+					_params.Add (GameManager.Instance.World.GetPrimaryPlayerId ().ToString ());
 				}
 
-				if (_params.Count > 0 && _params [0].EqualsCaseInsensitive ("nearby")) {
-					try {
-						int closeToDistance = 32;
-						if (_params.Count == 3) {
-							if (!int.TryParse (_params [1], out closeToDistance)) {
-								SdtdConsole.Instance.Output ("Given length is not an integer!");
-								return;
-							}
-
-							closeToDistance /= 2;
+				try {
+					int closeToDistance = 32;
+					if (_params.Count == 3) {
+						if (!int.TryParse (_params [1], out closeToDistance)) {
+							SdtdConsole.Instance.Output ("Given length is not an integer!");
+							return;
 						}
 
-						ClientInfo ci = ConsoleHelper.ParseParamSteamIdOnline (_params [_params.Count - 1]);
-						EntityPlayer ep = GameManager.Instance.World.Players.dict [ci.entityId];
-						Vector3i closeTo = new Vector3i (ep.GetPosition ());
-						LandClaimList.PositionFilter[] posFilters =
-							{LandClaimList.CloseToFilter2dRect (closeTo, closeToDistance)};
-						Dictionary<Player, List<Vector3i>> claims = LandClaimList.GetLandClaims (null, posFilters);
+						closeToDistance /= 2;
+					}
 
-						try {
-							List<BlockChangeInfo> changes = new List<BlockChangeInfo> ();
-							foreach (KeyValuePair<Player, List<Vector3i>> kvp in claims) {
-								foreach (Vector3i v in kvp.Value) {
-									BlockChangeInfo bci = new BlockChangeInfo (v, new BlockValue (0), true, false);
-									changes.Add (bci);
-								}
+					int entityId = int.Parse (_params [_params.Count - 1]);
+					EntityPlayer ep = GameManager.Instance.World.Players.dict [entityId];
+					Vector3i closeTo = new Vector3i (ep.GetPosition ());
+					LandClaimList.PositionFilter[] posFilters =
+						{LandClaimList.CloseToFilter2dRect (closeTo, closeToDistance)};
+					Dictionary<Player, List<Vector3i>> claims = LandClaimList.GetLandClaims (null, posFilters);
+
+					try {
+						List<BlockChangeInfo> changes = new List<BlockChangeInfo> ();
+						foreach (KeyValuePair<Player, List<Vector3i>> kvp in claims) {
+							foreach (Vector3i v in kvp.Value) {
+								BlockChangeInfo bci = new BlockChangeInfo (v, new BlockValue (0), true, false);
+								changes.Add (bci);
 							}
+						}
 
-							GameManager.Instance.SetBlocksRPC (changes);
-						} catch (Exception e) {
-							SdtdConsole.Instance.Output ("Error removing claims");
-							Log.Out ("Error in RemoveLandProtection.Run: " + e);
-						}
+						GameManager.Instance.SetBlocksRPC (changes);
 					} catch (Exception e) {
-						SdtdConsole.Instance.Output ("Error getting current player's position");
+						SdtdConsole.Instance.Output ("Error removing claims");
 						Log.Out ("Error in RemoveLandProtection.Run: " + e);
 					}
-				} else if (_params.Count == 1) {
-					removeById (_params [0]);
-				} else if (_params.Count == 3) {
-					removeByPosition (_params);
-				} else {
-					SdtdConsole.Instance.Output ("Illegal parameters");
+				} catch (Exception e) {
+					SdtdConsole.Instance.Output ("Error getting current player's position");
+					Log.Out ("Error in RemoveLandProtection.Run: " + e);
 				}
-			} catch (Exception e) {
-				Log.Out ("Error in RemoveLandProtection.Run: " + e);
+			} else if (_params.Count == 1) {
+				removeById (_params [0]);
+			} else if (_params.Count == 3) {
+				removeByPosition (_params);
+			} else {
+				SdtdConsole.Instance.Output ("Illegal parameters");
 			}
 		}
Index: binary-improvements/AllocsCommands/Commands/ShowInventory.cs
===================================================================
--- binary-improvements/AllocsCommands/Commands/ShowInventory.cs	(revision 359)
+++ binary-improvements/AllocsCommands/Commands/ShowInventory.cs	(revision 369)
@@ -11,6 +11,6 @@
 		public override string GetHelp () {
 			return "Usage:\n" +
-			       "   showinventory <steam id / player name / entity id> [tag]\n" +
-			       "Show the inventory of the player given by his SteamID, player name or\n" +
+			       "   showinventory <user id / player name / entity id> [tag]\n" +
+			       "Show the inventory of the player given by his UserID, player name or\n" +
 			       "entity id (as given by e.g. \"lpi\").\n" +
 			       "Optionally specify a tag that is included in each line of the output. In\n" +
@@ -30,5 +30,5 @@
 			}
 
-			string steamid = PersistentContainer.Instance.Players.GetSteamID (_params [0], true);
+			PlatformUserIdentifierAbs steamid = PersistentContainer.Instance.Players.GetSteamID (_params [0], true);
 			if (steamid == null) {
 				SdtdConsole.Instance.Output (
