Index: binary-improvements/7dtd-server-fixes/src/TelnetCommands/RemoveLandProtection.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/TelnetCommands/RemoveLandProtection.cs	(revision 120)
+++ binary-improvements/7dtd-server-fixes/src/TelnetCommands/RemoveLandProtection.cs	(revision 123)
@@ -18,18 +18,40 @@
 	}
 
-	public override void Run (string[] _params)
+	private void removeById (string _id)
 	{
 		try {
-			if (_params.Length != 3) {
-				m_Console.SendResult ("Usage: removelandprotection <x> <y> <z>");
+			PersistentPlayerList ppl = CommonMappingFunctions.GetGameManager ().GetPersistentPlayerList ();
+
+			if (_id.Length < 1 || !ppl.Players.ContainsKey(_id)) {
+				m_Console.SendResult ("Not a valid Steam ID or user has never logged on. Use \"listlandprotection\" to get a list of keystones.");
+				return;
+			}
+			if (ppl.Players[_id].LPBlocks == null || ppl.Players[_id].LPBlocks.Count == 0) {
+				m_Console.SendResult ("Player does not own any keystones. Use \"listlandprotection\" to get a list of keystones.");
 				return;
 			}
 
+			List<BlockChangeInfo> changes = new List<BlockChangeInfo> ();
+			foreach (Vector3i pos in ppl.Players[_id].LPBlocks) {
+				BlockChangeInfo bci = new BlockChangeInfo (pos, 0, true);
+				changes.Add (bci);
+			}
+			CommonMappingFunctions.GetGameManager ().SetBlocksRPC (changes);
+
+			m_Console.SendResult ("#"+changes.Count + " Land protection blocks for player \"" + _id + "\" removed");
+		} catch (Exception e) {
+			Log.Out ("Error in RemoveLandProtection.removeById: " + e);
+		}
+	}
+
+	private void removeByPosition (string[] _coords)
+	{
+		try {
 			int x = int.MinValue;
-			int.TryParse (_params [0], out x);
+			int.TryParse (_coords [0], out x);
 			int y = int.MinValue;
-			int.TryParse (_params [1], out y);
+			int.TryParse (_coords [1], out y);
 			int z = int.MinValue;
-			int.TryParse (_params [2], out z);
+			int.TryParse (_coords [2], out z);
 
 			if (x == int.MinValue || y == int.MinValue || z == int.MinValue) {
@@ -48,7 +70,27 @@
 			}
 
-			ppl.RemoveLandProtectionBlock (v);
-			ppl.Write (StaticDirectories.GetSaveGameDir () + "/players.xml");
-			m_Console.SendResult ("Land protection block association at (" + v.ToString () + ") removed");
+			BlockChangeInfo bci = new BlockChangeInfo (v, 0, true);
+
+			List<BlockChangeInfo> changes = new List<BlockChangeInfo> ();
+			changes.Add (bci);
+
+			CommonMappingFunctions.GetGameManager ().SetBlocksRPC (changes);
+
+			m_Console.SendResult ("Land protection block at (" + v.ToString () + ") removed");
+		} catch (Exception e) {
+			Log.Out ("Error in RemoveLandProtection.removeByPosition: " + e);
+		}
+	}
+
+	public override void Run (string[] _params)
+	{
+		try {
+			if (_params.Length == 1) {
+				removeById (_params [0]);
+			} else if (_params.Length == 3) {
+				removeByPosition (_params);
+			} else {
+				m_Console.SendResult ("Usage: removelandprotection <x> <y> <z>  OR  removelandprotection <steamid>");
+			}
 		} catch (Exception e) {
 			Log.Out ("Error in RemoveLandProtection.Run: " + e);
