diff --git a/src/engine/gameManager/BuildingManager.java b/src/engine/gameManager/BuildingManager.java
index 8907339a..a939f289 100644
--- a/src/engine/gameManager/BuildingManager.java
+++ b/src/engine/gameManager/BuildingManager.java
@@ -777,7 +777,7 @@ public enum BuildingManager {
         int newMeshUUID;
         boolean success;
 
-        // If this building has no blueprint then set rank and exit immediatly.
+        // If this building has no blueprint then set rank and exit immediately.
 
         if (building.blueprintUUID == 0 || building.getBlueprint() != null && building.getBlueprint().getBuildingGroup().equals(BuildingGroup.MINE)) {
             building.rank = rank;
diff --git a/src/engine/objects/Building.java b/src/engine/objects/Building.java
index 5367c8f7..b9d11769 100644
--- a/src/engine/objects/Building.java
+++ b/src/engine/objects/Building.java
@@ -505,6 +505,11 @@ public class Building extends AbstractWorldObject {
             return;
         }
 
+        if (city.destroyed.get() == true) {
+            Logger.error(city.getName() + "derankk called on destroyed city");
+            return;
+        }
+
         bane = city.getBane();
 
         // We need to collect the spires and shrines on the citygrid in case
diff --git a/src/engine/objects/City.java b/src/engine/objects/City.java
index 8f674de8..6b52dc7a 100644
--- a/src/engine/objects/City.java
+++ b/src/engine/objects/City.java
@@ -41,6 +41,7 @@ import java.util.HashSet;
 import java.util.Iterator;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ThreadLocalRandom;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 
 public class City extends AbstractWorldObject {
@@ -80,6 +81,7 @@ public class City extends AbstractWorldObject {
     private String hash;
     public Warehouse warehouse;
     public Realm realm;
+    public AtomicBoolean destroyed = new AtomicBoolean(false);
 
     /**
      * ResultSet Constructor
@@ -1104,7 +1106,7 @@ public class City extends AbstractWorldObject {
 
         Thread destroyCityThread = new Thread(new DestroyCityThread(this));
 
-        destroyCityThread.setName("destroyCity:" + this.getName());
+        destroyCityThread.setName("destroyCity: " + this.getName());
         destroyCityThread.start();
     }
 
@@ -1112,7 +1114,7 @@ public class City extends AbstractWorldObject {
 
         Thread transferCityThread = new Thread(new TransferCityThread(this, newOwner));
 
-        transferCityThread.setName("TransferCity:" + this.getName());
+        transferCityThread.setName("TransferCity: " + this.getName());
         transferCityThread.start();
     }
 
diff --git a/src/engine/workthreads/DestroyCityThread.java b/src/engine/workthreads/DestroyCityThread.java
index 9c5b2050..8f2ed1b3 100644
--- a/src/engine/workthreads/DestroyCityThread.java
+++ b/src/engine/workthreads/DestroyCityThread.java
@@ -51,6 +51,8 @@ public class DestroyCityThread implements Runnable {
         Vector3fImmutable localCoords;
         ArrayList<Guild> subGuildList;
 
+        city.destroyed.set(true);
+
         // Member variable assignment
 
         cityZone = city.getParent();
@@ -83,8 +85,6 @@ public class DestroyCityThread implements Runnable {
             }
         }
 
-        Building tol = null;
-
         // Build list of buildings within this parent zone
 
         for (Building cityBuilding : cityZone.zoneBuildingSet) {
@@ -100,13 +100,6 @@ public class DestroyCityThread implements Runnable {
             if (cityBuilding.getBlueprint().getBuildingGroup().equals(mbEnums.BuildingGroup.BANESTONE))
                 continue;
 
-            // TOL is processed after all other structures in the city zone
-
-            if (cityBuilding.getBlueprint().getBuildingGroup().equals(mbEnums.BuildingGroup.TOL)) {
-                tol = cityBuilding;
-                continue;
-            }
-
             // All buildings are moved to a location relative
             // to their new parent zone
 
@@ -146,11 +139,6 @@ public class DestroyCityThread implements Runnable {
             }
         }
 
-        // Destroy the tol
-
-        if (tol != null)
-            BuildingManager.setRank(tol, -1);
-
         if (city.realm != null)
             city.realm.removeCity(city.getObjectUUID());