diff --git a/src/main/java/com/comandante/creeper/ConfigureCommands.java b/src/main/java/com/comandante/creeper/ConfigureCommands.java
index 6fb2fe3fbe2b5a94788f1d6ba8d6f7ca60b166b8..dc186d2f089ce6a54e64c55eae29e875ab50d242 100644
--- a/src/main/java/com/comandante/creeper/ConfigureCommands.java
+++ b/src/main/java/com/comandante/creeper/ConfigureCommands.java
@@ -93,5 +93,6 @@ public class ConfigureCommands {
         creeperCommandRegistry.addCommand(new CardsCommand(gameManager));
         creeperCommandRegistry.addCommand(new SpellsCommand(gameManager));
         creeperCommandRegistry.addCommand(new LeaveCommand(gameManager));
+        creeperCommandRegistry.addCommand(new BackCommand(gameManager));
     }
 }
diff --git a/src/main/java/com/comandante/creeper/command/BackCommand.java b/src/main/java/com/comandante/creeper/command/BackCommand.java
new file mode 100644
index 0000000000000000000000000000000000000000..e7fa4d66209a28dc4df4fd1533b7b557c1b10e74
--- /dev/null
+++ b/src/main/java/com/comandante/creeper/command/BackCommand.java
@@ -0,0 +1,32 @@
+package com.comandante.creeper.command;
+
+import com.comandante.creeper.managers.GameManager;
+import com.comandante.creeper.player.PlayerMovement;
+import com.comandante.creeper.world.Room;
+import org.jboss.netty.channel.ChannelHandlerContext;
+import org.jboss.netty.channel.MessageEvent;
+
+import java.util.Arrays;
+import java.util.List;
+
+public class BackCommand extends Command {
+
+    final static List<String> validTriggers = Arrays.asList("back", "b");
+    final static String description = "Return to where you came from.";
+    final static String correctUsage = "back";
+
+    public BackCommand(GameManager gameManager) {
+        super(gameManager, validTriggers, description, correctUsage);
+    }
+
+    @Override
+    public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
+        execCommand(ctx, e, () -> {
+            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);
+        });
+    }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/comandante/creeper/command/MovementCommand.java b/src/main/java/com/comandante/creeper/command/MovementCommand.java
index 7750b369ae1bea2c40214c418471bd7c9c54ab77..ff8a125ebd21a03f89cd65dc8eb5160d0f5a7e22 100644
--- a/src/main/java/com/comandante/creeper/command/MovementCommand.java
+++ b/src/main/java/com/comandante/creeper/command/MovementCommand.java
@@ -44,6 +44,10 @@ public class MovementCommand extends Command {
                 MovementCommand.this.write("You are dead and can not move.");
                 return;
             }
+            if (player.isActiveAlertNpcStatus()) {
+                MovementCommand.this.write("You are unable to progress, but can return to where you came from by typing \"back\".");
+                return;
+            }
             for (String effectId : playerManager.getPlayerMetadata(playerId).getEffects()) {
                 Effect effect = gameManager.getEntityManager().getEffectEntity(effectId);
                 if (effect.isFrozenMovement()) {
diff --git a/src/main/java/com/comandante/creeper/command/admin/BuildCommand.java b/src/main/java/com/comandante/creeper/command/admin/BuildCommand.java
index df593275aa70eba2f309db101db3d050feb43265..e7f43e3a49d2f9f27b491938624c378a6ec1469d 100644
--- a/src/main/java/com/comandante/creeper/command/admin/BuildCommand.java
+++ b/src/main/java/com/comandante/creeper/command/admin/BuildCommand.java
@@ -15,7 +15,7 @@ import java.util.stream.Collectors;
 
 public class BuildCommand extends Command {
 
-    final static List<String> validTriggers = Arrays.asList("build", "b");
+    final static List<String> validTriggers = Arrays.asList("build");
     final static String description = "Build new rooms in the world.";
     final static String correctUsage = "build [n|s|e|w|enter <name>|notable <name>]";
     final static Set<PlayerRole> roles = Sets.newHashSet(PlayerRole.ADMIN);
diff --git a/src/main/java/com/comandante/creeper/player/CoolDownType.java b/src/main/java/com/comandante/creeper/player/CoolDownType.java
index 1e1d98d34e673b7a25a00896434258c7f373595b..2993ef20b5e7a2988fd2593b1d917efc2578a097 100644
--- a/src/main/java/com/comandante/creeper/player/CoolDownType.java
+++ b/src/main/java/com/comandante/creeper/player/CoolDownType.java
@@ -10,7 +10,8 @@ public enum CoolDownType {
     FORAGE_SUPERSHORT("forage-supershort", 1),
     SPELL("",0),
     NPC_FIGHT("fight",30),
-    NPC_ROAM("npc-roam", 600);
+    NPC_ROAM("npc-roam", 1200),
+    NPC_ALERTED("npc-alerted", 30);
     private final String name;
     private final int ticks;
 
diff --git a/src/main/java/com/comandante/creeper/player/NpcAggroCountDown.java b/src/main/java/com/comandante/creeper/player/NpcAggroCountDown.java
new file mode 100644
index 0000000000000000000000000000000000000000..f507cad0ea3e9c9c95ffa0fbd79bb5f72f9ea6e6
--- /dev/null
+++ b/src/main/java/com/comandante/creeper/player/NpcAggroCountDown.java
@@ -0,0 +1,38 @@
+package com.comandante.creeper.player;
+
+import com.comandante.creeper.managers.GameManager;
+import com.comandante.creeper.npc.Npc;
+import com.comandante.creeper.server.Color;
+import com.comandante.creeper.world.Room;
+import com.google.common.util.concurrent.AbstractExecutionThreadService;
+
+public class NpcAggroCountDown extends AbstractExecutionThreadService {
+
+    private final int delaySeconds;
+    private final GameManager gameManager;
+    private final Player player;
+    private final Npc npc;
+    private final Room originalRoom;
+
+    public NpcAggroCountDown(int delaySeconds, GameManager gameManager, Player player, Npc npc, Room originalRoom) {
+        this.delaySeconds = delaySeconds;
+        this.gameManager = gameManager;
+        this.player = player;
+        this.npc = npc;
+        this.originalRoom = originalRoom;
+    }
+
+    @Override
+    protected void run() throws Exception {
+        try {
+            Thread.sleep(delaySeconds * 1000);
+            if (!player.getCurrentRoom().getRoomId().equals(originalRoom.getRoomId())) {
+                return;
+            }
+            gameManager.writeToPlayerCurrentRoom(player.getPlayerId(), player.getPlayerName() + " has " + Color.BOLD_ON + Color.RED + "angered" + Color.RESET + " a " + npc.getColorName() + "\r\n");
+            player.addActiveFight(npc);
+        } finally {
+            this.shutDown();
+        }
+    }
+}
diff --git a/src/main/java/com/comandante/creeper/player/Player.java b/src/main/java/com/comandante/creeper/player/Player.java
index 7f123c381d2bed25bee058906fca48f7eeb1b7b7..2dcfb547e9241c3e6534f4412bd3a4ca42f36ad5 100644
--- a/src/main/java/com/comandante/creeper/player/Player.java
+++ b/src/main/java/com/comandante/creeper/player/Player.java
@@ -46,6 +46,9 @@ public class Player extends CreeperEntity {
     private Set<CoolDown> coolDowns = Collections.synchronizedSet(new HashSet<CoolDown>());
     private int tickBucket = 0;
     private int fightTickBucket = 0;
+    private List<NpcAggroCountDown> aggroCountDowns = Lists.newArrayList();
+    private boolean hasAlertedNpc;
+    private Room previousRoom;
 
     public Player(String playerName, GameManager gameManager) {
         this.playerName = playerName;
@@ -164,7 +167,6 @@ public class Player extends CreeperEntity {
                 gameManager.writeToPlayerCurrentRoom(getPlayerId(), getPlayerName() + " is now dead." + "\r\n");
                 PlayerMovement playerMovement = new PlayerMovement(this, gameManager.getRoomManager().getPlayerCurrentRoom(this).get().getRoomId(), GameManager.LOBBY_ID, "vanished into the ether.", "");
                 movePlayer(playerMovement);
-                gameManager.currentRoomLogic(getPlayerId());
                 String prompt = gameManager.buildPrompt(playerId);
                 gameManager.getChannelUtils().write(getPlayerId(), prompt, true);
             }
@@ -197,6 +199,18 @@ public class Player extends CreeperEntity {
         return false;
     }
 
+    public Room getPreviousRoom() {
+        synchronized (interner.intern(playerId)) {
+            return previousRoom;
+        }
+    }
+
+    public void setPreviousRoom(Room previousRoom) {
+        synchronized (interner.intern(playerId)) {
+            this.previousRoom = previousRoom;
+        }
+    }
+
     private void addHealth(long addAmt, PlayerMetadata playerMetadata) {
         long currentHealth = playerMetadata.getStats().getCurrentHealth();
         Stats statsModifier = getPlayerStatsWithEquipmentAndLevel();
@@ -337,6 +351,24 @@ public class Player extends CreeperEntity {
         return Lists.newArrayList(playerMetadata.getLearnedSpells());
     }
 
+    public boolean isActiveAlertNpcStatus() {
+        synchronized (interner.intern(playerId)) {
+            return hasAlertedNpc;
+        }
+    }
+
+    public void setIsActiveAlertNpcStatus() {
+        synchronized (interner.intern(playerId)) {
+            hasAlertedNpc = true;
+        }
+    }
+
+    public void removeActiveAlertStatus() {
+        synchronized (interner.intern(playerId)) {
+            hasAlertedNpc = false;
+        }
+    }
+
     public void addInventoryId(String inventoryId) {
         synchronized (interner.intern(playerId)) {
             PlayerMetadata playerMetadata = getPlayerMetadata();
@@ -517,6 +549,7 @@ public class Player extends CreeperEntity {
                 gameManager.getChannelUtils().write(next.getPlayerId(), sb.toString(), true);
             }
             destinationRoom.addPresentPlayer(playerMovement.getPlayer().getPlayerId());
+            setPreviousRoom(currentRoom);
             playerMovement.getPlayer().setCurrentRoom(destinationRoom);
             for (Player next : gameManager.getRoomManager().getPresentPlayers(destinationRoom)) {
                 if (next.getPlayerId().equals(playerMovement.getPlayer().getPlayerId())) {
@@ -526,7 +559,9 @@ public class Player extends CreeperEntity {
             setReturnDirection(java.util.Optional.of(playerMovement.getReturnDirection()));
             gameManager.currentRoomLogic(playerId, gameManager.getRoomManager().getRoom(playerMovement.getDestinationRoomId()));
             gameManager.getRoomManager().getRoom(playerMovement.getDestinationRoomId());
-            processNpcAggro();
+            if (!isActive(CoolDownType.DEATH)) {
+                processNpcAggro();
+            }
         }
     }
 
@@ -540,8 +575,11 @@ public class Player extends CreeperEntity {
                 .collect(Collectors.toList());
 
         aggresiveRoomNpcs.forEach(npc -> {
-            gameManager.writeToPlayerCurrentRoom(getPlayerId(), getPlayerName() + " has angered a " + npc.getColorName() + "\r\n");
-            addActiveFight(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();
+            NpcAggroCountDown npcAggroCountDown = new NpcAggroCountDown(5, gameManager, this, npc, currentRoom);
+            npcAggroCountDown.startAsync();
         });
     }
 
diff --git a/world/npcs/redeyedbear.json b/world/npcs/redeyedbear.json
index e525cf35f46088eea0bc93bda17b6a251575a01d..18ad613dbfa99cf33e46d6193b57b5b21eb09885 100644
--- a/world/npcs/redeyedbear.json
+++ b/world/npcs/redeyedbear.json
@@ -19,7 +19,7 @@
     "armorRating": 20,
     "currentHealth": 150,
     "currentMana": 105,
-    "experience": 22500,
+    "experience": 90000,
     "maxHealth": 150,
     "maxMana": 105,
     "meleSkill": 22,