diff --git a/src/main/java/com/comandante/creeper/command/BackCommand.java b/src/main/java/com/comandante/creeper/command/BackCommand.java
index c15120bdf0cd3884173fc9e7889916899e0b8aa5..aead2c1ddceb19e8932a44472366a35e17307f20 100644
--- a/src/main/java/com/comandante/creeper/command/BackCommand.java
+++ b/src/main/java/com/comandante/creeper/command/BackCommand.java
@@ -27,7 +27,6 @@ public class BackCommand extends Command {
                 return;
             }
             Room returnRoom = player.getPreviousRoom();
-            player.removeActiveAlertStatus();
             PlayerMovement playerMovement = new PlayerMovement(player, currentRoom.getRoomId(), returnRoom.getRoomId(), "fleed to where they came from.", "up");
             player.movePlayer(playerMovement);
         });
diff --git a/src/main/java/com/comandante/creeper/command/MovementCommand.java b/src/main/java/com/comandante/creeper/command/MovementCommand.java
index ff8a125ebd21a03f89cd65dc8eb5160d0f5a7e22..329460fc2d1be8ecde4aad26dbc09c17d2114885 100644
--- a/src/main/java/com/comandante/creeper/command/MovementCommand.java
+++ b/src/main/java/com/comandante/creeper/command/MovementCommand.java
@@ -44,7 +44,7 @@ public class MovementCommand extends Command {
                 MovementCommand.this.write("You are dead and can not move.");
                 return;
             }
-            if (player.isActiveAlertNpcStatus()) {
+            if (player.isAlertedNpcPresentInCurrentRoom()) {
                 MovementCommand.this.write("You are unable to progress, but can return to where you came from by typing \"back\".");
                 return;
             }
diff --git a/src/main/java/com/comandante/creeper/managers/GameManager.java b/src/main/java/com/comandante/creeper/managers/GameManager.java
index 7583b864b407895fbe3b955fb344f116039d29ff..87be794be33b11c3ba2861fc0026773438c9da23 100644
--- a/src/main/java/com/comandante/creeper/managers/GameManager.java
+++ b/src/main/java/com/comandante/creeper/managers/GameManager.java
@@ -726,7 +726,7 @@ public class GameManager {
                 sb.append(Color.GREEN + "F" + Color.RESET);
             }
         }
-        if (player.isActiveAlertNpcStatus()) {
+        if (player.isAlertedNpcPresentInCurrentRoom()) {
             sb.append(" ");
             sb.append(Color.RED + "ALERT" + Color.RESET);
         }
diff --git a/src/main/java/com/comandante/creeper/player/Player.java b/src/main/java/com/comandante/creeper/player/Player.java
index 0b970850d7d7cd1092d856b6e5cea0a741b202f8..82c58fa05e91602f697dfb165f96eea15149c9f9 100644
--- a/src/main/java/com/comandante/creeper/player/Player.java
+++ b/src/main/java/com/comandante/creeper/player/Player.java
@@ -49,6 +49,7 @@ public class Player extends CreeperEntity {
     private int tickBucket = 0;
     private int fightTickBucket = 0;
     private boolean hasAlertedNpc;
+    private final Set<Npc> alertedNpcs = Sets.newHashSet();
     private Room previousRoom;
     private final ScheduledThreadPoolExecutor scheduledExecutor = new ScheduledThreadPoolExecutor(1000);
 
@@ -355,24 +356,44 @@ public class Player extends CreeperEntity {
         return Lists.newArrayList(playerMetadata.getLearnedSpells());
     }
 
+    public boolean isActiveAlertNpcStatus(Npc npc) {
+        synchronized (interner.intern(playerId)) {
+            return alertedNpcs.contains(npc);
+        }
+    }
+
     public boolean isActiveAlertNpcStatus() {
         synchronized (interner.intern(playerId)) {
-            return hasAlertedNpc;
+            return alertedNpcs.size() > 0;
         }
     }
 
-    public void setIsActiveAlertNpcStatus() {
+    public boolean isAlertedNpcPresentInCurrentRoom() {
+        return currentRoom.getPresentNpcs().stream().filter(this::isActiveAlertNpcStatus).count() > 0;
+    }
+
+    public void setIsActiveAlertNpcStatus(Npc npc) {
         synchronized (interner.intern(playerId)) {
-            hasAlertedNpc = true;
+            alertedNpcs.add(npc);
         }
     }
 
     public void removeActiveAlertStatus() {
         synchronized (interner.intern(playerId)) {
-            hasAlertedNpc = false;
+            alertedNpcs.clear();
         }
     }
 
+    public void removeActiveAlertStatus(Npc npc) {
+        synchronized (interner.intern(playerId)) {
+            alertedNpcs.clear();
+        }
+    }
+
+    public Set<Npc> getAlertedNpcs() {
+        return alertedNpcs;
+    }
+
     public void addInventoryId(String inventoryId) {
         synchronized (interner.intern(playerId)) {
             PlayerMetadata playerMetadata = getPlayerMetadata();
@@ -497,6 +518,9 @@ public class Player extends CreeperEntity {
             if (coolDown.isActive()) {
                 coolDown.decrementTick();
             } else {
+                if (coolDown.equals(CoolDownType.DEATH)) {
+                    gameManager.getChannelUtils().write(playerId, "You have risen from the dead.\r\n");
+                }
                 iterator.remove();
             }
         }
@@ -585,8 +609,9 @@ public class Player extends CreeperEntity {
             aggresiveRoomNpcs.forEach(npc -> {
                 gameManager.writeToPlayerCurrentRoom(getPlayerId(), getPlayerName() + " has alerted a " + npc.getColorName() + "\r\n");
                 gameManager.getChannelUtils().write(playerId, "You can return to your previous location by typing \"back\"" + "\r\n");
-                setIsActiveAlertNpcStatus();
+                setIsActiveAlertNpcStatus(npc);
                 scheduledExecutor.schedule(() -> {
+                    removeActiveAlertStatus(npc);
                     if (!getCurrentRoom().getRoomId().equals(originalRoom.getRoomId())) {
                         return;
                     }
diff --git a/src/main/java/com/comandante/creeper/world/Room.java b/src/main/java/com/comandante/creeper/world/Room.java
index aadb5b44b338e3760bda9980e859c7322a2899ec..5bd55bf92747e6c1535f190e4d4be8e6bae259ed 100644
--- a/src/main/java/com/comandante/creeper/world/Room.java
+++ b/src/main/java/com/comandante/creeper/world/Room.java
@@ -6,6 +6,7 @@ import com.comandante.creeper.Items.ItemType;
 import com.comandante.creeper.entity.CreeperEntity;
 import com.comandante.creeper.managers.GameManager;
 import com.comandante.creeper.merchant.Merchant;
+import com.comandante.creeper.npc.Npc;
 import com.comandante.creeper.spawner.ItemSpawner;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
@@ -15,6 +16,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 public abstract class Room extends CreeperEntity {
 
@@ -260,6 +262,10 @@ public abstract class Room extends CreeperEntity {
         return gameManager;
     }
 
+    public List<Npc> getPresentNpcs() {
+        return npcIds.stream().map(s -> gameManager.getEntityManager().getNpcEntity(s)).collect(Collectors.toList());
+    }
+
     @Override
     public void run() {
         for (String itemId : itemIds) {