diff --git a/src/engine/ai/MobileFSM.java b/src/engine/ai/MobileFSM.java
index 4b6e99ce..65c1b08c 100644
--- a/src/engine/ai/MobileFSM.java
+++ b/src/engine/ai/MobileFSM.java
@@ -305,6 +305,13 @@ public class MobileFSM {
     public static void DetermineAction(Mob mob) {
         if (mob == null)
             return;
+        if (mob.playerAgroMap.isEmpty() && !mob.isPlayerGuard)
+            //no players loaded, no need to proceed
+            return;
+        else{
+            if(mob.isPlayerGuard && mob.guardedCity._playerMemory.size() < 1 && mob.playerAgroMap.isEmpty())
+                return;
+        }
         if (mob.despawned && mob.isPlayerGuard) {
             //override for guards
             if(mob.BehaviourType.ordinal() == Enum.MobBehaviourType.GuardMinion.ordinal()){
@@ -326,9 +333,6 @@ public class MobileFSM {
             CheckForRespawn(mob);
             return;
         }
-        if (mob.playerAgroMap.isEmpty())
-            //no players loaded, no need to proceed
-            return;
         if (mob.isCombat() && mob.getCombatTarget() == null) {
             mob.setCombat(false);
             UpdateStateMsg rwss = new UpdateStateMsg();
diff --git a/src/engine/objects/City.java b/src/engine/objects/City.java
index dbb31856..084ab55d 100644
--- a/src/engine/objects/City.java
+++ b/src/engine/objects/City.java
@@ -87,7 +87,7 @@ public class City extends AbstractWorldObject {
 
 	// Players who have entered the city (used for adding and removing affects)
 
-	private final HashSet<Integer> _playerMemory = new HashSet<>();
+	public final HashSet<Integer> _playerMemory = new HashSet<>();
 
 	public volatile boolean protectionEnforced = true;
 	private String hash;
diff --git a/src/engine/objects/Mob.java b/src/engine/objects/Mob.java
index 2106344b..5a62cecd 100644
--- a/src/engine/objects/Mob.java
+++ b/src/engine/objects/Mob.java
@@ -99,6 +99,7 @@ public class Mob extends AbstractIntelligenceAgent {
     private DeferredPowerJob weaponPower;
     private DateTime upgradeDateTime = null;
     private boolean lootSync = false;
+    public City guardedCity;
 
     /**
      * No Id Constructor
@@ -806,6 +807,7 @@ public class Mob extends AbstractIntelligenceAgent {
         mob.npcOwner = guardCaptain;
         mob.spawnTime = (int)(-2.500 * guardCaptain.building.getRank() + 22.5) * 60;
         mob.BehaviourType = Enum.MobBehaviourType.GuardMinion;
+        mob.guardedCity = guardCaptain.guardedCity;
         mob.parentZone = parent;
         parent.zoneMobSet.add(mob);
         return mob;