diff --git a/src/main/java/com/comandante/creeper/server/CreeperCommandRegistry.java b/src/main/java/com/comandante/creeper/server/CreeperCommandRegistry.java
index 0106d1ba8e2b99570714a1c02ab283f8f6608361..929dcd8a579f7500d8504972816620f23102eb6e 100644
--- a/src/main/java/com/comandante/creeper/server/CreeperCommandRegistry.java
+++ b/src/main/java/com/comandante/creeper/server/CreeperCommandRegistry.java
@@ -17,7 +17,7 @@ public class CreeperCommandRegistry {
     private final HashMap<String, Command> creeperCommands = new HashMap<>();
 
     public void addCommand(Command command) {
-        List<String> validTriggers = command.getValidTriggers();
+        List<String> validTriggers = command.validTriggers;
         for (String trigger: validTriggers) {
             creeperCommands.put(trigger, command);
         }
diff --git a/src/main/java/com/comandante/creeper/server/MultiLineInputHandler.java b/src/main/java/com/comandante/creeper/server/MultiLineInputHandler.java
index 6b3a7f3f7f14982d9f85c5a6eba9712ecbcf5334..851ce1c254fe64ccb677ccf33316f7d6ce1be9a4 100644
--- a/src/main/java/com/comandante/creeper/server/MultiLineInputHandler.java
+++ b/src/main/java/com/comandante/creeper/server/MultiLineInputHandler.java
@@ -19,7 +19,7 @@ public class MultiLineInputHandler extends SimpleChannelUpstreamHandler {
         try {
             CreeperSession creeperSession = (CreeperSession) e.getChannel().getAttachment();
             String message = (String) e.getMessage();
-            if (message.equalsIgnoreCase("DONE")) {
+            if (message.equalsIgnoreCase("done")) {
                 e.getChannel().getPipeline().addLast(UUID.randomUUID().toString(), creeperSession.getGrabMultiLineInput().get().getValue());
                 return;
             }
diff --git a/src/main/java/com/comandante/creeper/server/command/Command.java b/src/main/java/com/comandante/creeper/server/command/Command.java
index 1687f092acfd4e906f6cbe329f0e8c2f7e0c4293..39e40f9926605cab35b418975e1014a6def9cc6d 100644
--- a/src/main/java/com/comandante/creeper/server/command/Command.java
+++ b/src/main/java/com/comandante/creeper/server/command/Command.java
@@ -1,8 +1,21 @@
 package com.comandante.creeper.server.command;
 
 import com.comandante.creeper.Main;
+import com.comandante.creeper.entity.EntityManager;
+import com.comandante.creeper.fight.FightManager;
 import com.comandante.creeper.managers.GameManager;
+import com.comandante.creeper.player.Player;
+import com.comandante.creeper.player.PlayerManager;
+import com.comandante.creeper.player.PlayerMetadata;
+import com.comandante.creeper.server.ChannelUtils;
 import com.comandante.creeper.server.CreeperSession;
+import com.comandante.creeper.world.Coords;
+import com.comandante.creeper.world.FloorManager;
+import com.comandante.creeper.world.MapMatrix;
+import com.comandante.creeper.world.MapsManager;
+import com.comandante.creeper.world.Room;
+import com.comandante.creeper.world.RoomManager;
+import com.comandante.creeper.world.WorldExporter;
 import org.jboss.netty.channel.Channel;
 import org.jboss.netty.channel.ChannelHandlerContext;
 import org.jboss.netty.channel.MessageEvent;
@@ -14,16 +27,31 @@ import java.util.List;
 
 public abstract class Command extends SimpleChannelUpstreamHandler {
 
-    private final GameManager gameManager;
-    private final List<String> validTriggers;
-    private final String description;
-    private final boolean isAdminCommand;
+    public final List<String> validTriggers;
+    public final String description;
+    public final boolean isAdminCommand;
+
+    public final GameManager gameManager;
+    public final FloorManager floorManager;
+    public final MapsManager mapsManager;
+    public final EntityManager entityManager;
+    public final RoomManager roomManager;
+    public final PlayerManager playerManager;
+    public final ChannelUtils channelUtils;
+    public final FightManager fightManager;
+    public CreeperSession creeperSession;
+    public Player player;
+    public Room currentRoom;
+    public String playerId;
+    public MapMatrix mapMatrix;
+    public Coords currentRoomCoords;
+    public List<String> originalMessageParts;
+    public WorldExporter worldExporter;
+    public PlayerMetadata playerMetadata;
+
 
     protected Command(GameManager gameManager, List<String> validTriggers, String description) {
-        this.gameManager = gameManager;
-        this.validTriggers = validTriggers;
-        this.description = description;
-        this.isAdminCommand = false;
+        this(gameManager, validTriggers, description, false);
     }
 
     protected Command(GameManager gameManager, List<String> validTriggers, String description, boolean isAdminCommand) {
@@ -31,6 +59,25 @@ public abstract class Command extends SimpleChannelUpstreamHandler {
         this.validTriggers = validTriggers;
         this.description = description;
         this.isAdminCommand = isAdminCommand;
+        this.floorManager = gameManager.getFloorManager();
+        this.mapsManager = gameManager.getMapsManager();
+        this.roomManager = gameManager.getRoomManager();
+        this.entityManager = gameManager.getEntityManager();
+        this.playerManager = gameManager.getPlayerManager();
+        this.channelUtils = gameManager.getChannelUtils();
+        this.fightManager = gameManager.getFightManager();
+        this.worldExporter = new WorldExporter(roomManager, mapsManager, floorManager, entityManager);
+    }
+
+    public void configure(MessageEvent e) {
+        this.creeperSession = extractCreeperSession(e.getChannel());
+        this.player = playerManager.getPlayer(extractPlayerId(creeperSession));
+        this.playerId = player.getPlayerId();
+        this.currentRoom = gameManager.getRoomManager().getPlayerCurrentRoom(player).get();
+        this.mapMatrix  = mapsManager.getFloorMatrixMaps().get(currentRoom.getFloorId());
+        this.currentRoomCoords = mapMatrix.getCoords(currentRoom.getRoomId());
+        this.originalMessageParts = getOriginalMessageParts(e);
+        this.playerMetadata = gameManager.getPlayerManager().getPlayerMetadata(playerId);
     }
 
     @Override
@@ -46,17 +93,6 @@ public abstract class Command extends SimpleChannelUpstreamHandler {
         return (CreeperSession) channel.getAttachment();
     }
 
-    public GameManager getGameManager() {
-        return gameManager;
-    }
-
-    public List<String> getValidTriggers() {
-        return validTriggers;
-    }
-
-    public String getDescription() {
-        return description;
-    }
 
     public String extractPlayerId(CreeperSession creeperSession) {
         return Main.createPlayerId(creeperSession.getUsername().get());
@@ -71,4 +107,24 @@ public abstract class Command extends SimpleChannelUpstreamHandler {
         String origMessage = (String) e.getMessage();
         return new ArrayList<>(Arrays.asList(origMessage.split(" ")));
     }
+
+    public void write(String msg) {
+        channelUtils.write(playerId, msg);
+    }
+
+    public void write(String msg, boolean leadingBlankLine) {
+        channelUtils.write(playerId, msg, leadingBlankLine);
+    }
+
+    public void currentRoomLogic(){
+        gameManager.currentRoomLogic(playerId);
+    }
+
+    public void printMap() {
+        write(currentRoom.getMapData().get());
+    }
+
+    public String getPrompt() {
+        return playerManager.buildPrompt(playerId);
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/com/comandante/creeper/server/command/DropCommand.java b/src/main/java/com/comandante/creeper/server/command/DropCommand.java
index abb071044a7ec090702a13f4704ab143018d859f..c59d4852de7c275fc29c446950302c342f518ed9 100644
--- a/src/main/java/com/comandante/creeper/server/command/DropCommand.java
+++ b/src/main/java/com/comandante/creeper/server/command/DropCommand.java
@@ -2,9 +2,6 @@ package com.comandante.creeper.server.command;
 
 import com.comandante.creeper.Items.Item;
 import com.comandante.creeper.managers.GameManager;
-import com.comandante.creeper.player.PlayerMetadata;
-import com.comandante.creeper.world.Room;
-import com.comandante.creeper.server.CreeperSession;
 import com.google.common.base.Joiner;
 import org.jboss.netty.channel.ChannelHandlerContext;
 import org.jboss.netty.channel.MessageEvent;
@@ -23,29 +20,24 @@ public class DropCommand extends Command {
 
     @Override
     public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
+        configure(e);
         try {
-            GameManager gameManager = getGameManager();
-            CreeperSession session = extractCreeperSession(e.getChannel());
-            final String playerId = extractPlayerId(session);
-            List<String> origMessageParts = getOriginalMessageParts(e);
-            if (origMessageParts.size() == 1) {
-                gameManager.getChannelUtils().write(playerId, "No item specified.");
+            if (originalMessageParts.size() == 1) {
+                channelUtils.write(playerId, "No item specified.");
                 return;
             }
-            origMessageParts.remove(0);
-            String itemTarget = Joiner.on(" ").join(origMessageParts);
-            for (String inventoryId : gameManager.getPlayerManager().getPlayerMetadata(playerId).getInventory()) {
-                Item itemEntity = gameManager.getEntityManager().getItemEntity(inventoryId);
+            originalMessageParts.remove(0);
+            String itemTarget = Joiner.on(" ").join(originalMessageParts);
+            for (String inventoryId : playerManager.getPlayerMetadata(playerId).getInventory()) {
+                Item itemEntity = entityManager.getItemEntity(inventoryId);
                 if (itemEntity.getItemTriggers().contains(itemTarget)) {
                     itemEntity.setWithPlayer(false);
-                    Room playerCurrentRoom = gameManager.getRoomManager().getPlayerCurrentRoom(gameManager.getPlayerManager().getPlayer(playerId)).get();
-                    gameManager.placeItemInRoom(playerCurrentRoom.getRoomId(), itemEntity.getItemId());
-                    PlayerMetadata playerMetadata = gameManager.getPlayerManager().getPlayerMetadata(playerId);
+                    gameManager.placeItemInRoom(currentRoom.getRoomId(), itemEntity.getItemId());
                     playerMetadata.removeInventoryEntityId(itemEntity.getItemId());
-                    gameManager.getPlayerManager().savePlayerMetadata(playerMetadata);
+                    playerManager.savePlayerMetadata(playerMetadata);
                     gameManager.getItemDecayManager().addItem(itemEntity);
-                    gameManager.getEntityManager().addItem(itemEntity);
-                    gameManager.roomSay(playerCurrentRoom.getRoomId(), gameManager.getPlayerManager().getPlayer(playerId).getPlayerName() + " dropped " + itemEntity.getItemName(), playerId);
+                    entityManager.addItem(itemEntity);
+                    gameManager.roomSay(currentRoom.getRoomId(), player.getPlayerName() + " dropped " + itemEntity.getItemName(), playerId);
                     return;
                 }
             }
diff --git a/src/main/java/com/comandante/creeper/server/command/FightKillCommand.java b/src/main/java/com/comandante/creeper/server/command/FightKillCommand.java
index 546977cb9ca274c0341c12f9d0a28eea88bae7f5..fb7b31975fce0f5a0dbb30ceb89153cbe042537b 100644
--- a/src/main/java/com/comandante/creeper/server/command/FightKillCommand.java
+++ b/src/main/java/com/comandante/creeper/server/command/FightKillCommand.java
@@ -5,9 +5,6 @@ import com.comandante.creeper.fight.FightResults;
 import com.comandante.creeper.fight.FightRun;
 import com.comandante.creeper.managers.GameManager;
 import com.comandante.creeper.npc.Npc;
-import com.comandante.creeper.player.Player;
-import com.comandante.creeper.world.Room;
-import com.comandante.creeper.server.CreeperSession;
 import com.google.common.base.Joiner;
 import com.google.common.base.Optional;
 import org.jboss.netty.channel.ChannelHandlerContext;
@@ -29,34 +26,31 @@ public class FightKillCommand extends Command {
 
     @Override
     public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
+        configure(e);
         try {
-            CreeperSession creeperSession = extractCreeperSession(e.getChannel());
-            Player player = getGameManager().getPlayerManager().getPlayer(extractPlayerId(creeperSession));
             if (FightManager.isActiveFight(creeperSession)) {
-                getGameManager().getChannelUtils().write(player.getPlayerId(), "You are already in a fight!");
+                write("You are already in a fight!");
                 return;
             }
-            List<String> originalMessageParts = getOriginalMessageParts(e);
             if (originalMessageParts.size() == 1) {
-                getGameManager().getChannelUtils().write(player.getPlayerId(), "You need to specify who you want to fight.");
+                write("You need to specify who you want to fight.");
                 return;
             }
             originalMessageParts.remove(0);
             String target = Joiner.on(" ").join(originalMessageParts);
-            Room playerCurrentRoom = getGameManager().getRoomManager().getPlayerCurrentRoom(player).get();
-            Set<String> npcIds = playerCurrentRoom.getNpcIds();
+            Set<String> npcIds = currentRoom.getNpcIds();
             for (String npcId : npcIds) {
-                Npc npcEntity = getGameManager().getEntityManager().getNpcEntity(npcId);
+                Npc npcEntity = entityManager.getNpcEntity(npcId);
                 if (npcEntity.getValidTriggers().contains(target)) {
                     npcEntity.setIsInFight(true);
-                    FightRun fightRun = new FightRun(player, npcEntity, getGameManager());
-                    getGameManager().getChannelUtils().write(player.getPlayerId(), "You start a fight!", false);
-                    Future<FightResults> fight = getGameManager().getFightManager().fight(fightRun);
+                    FightRun fightRun = new FightRun(player, npcEntity, gameManager);
+                    write("You start a fight!", false);
+                    Future<FightResults> fight = fightManager.fight(fightRun);
                     creeperSession.setActiveFight(Optional.of(fight));
                     return;
                 }
             }
-            getGameManager().getChannelUtils().write(player.getPlayerId(), "There's no NPC here to fight by that name.");
+            write("There's no NPC here to fight by that name.");
         } finally {
             super.messageReceived(ctx, e);
         }
diff --git a/src/main/java/com/comandante/creeper/server/command/GossipCommand.java b/src/main/java/com/comandante/creeper/server/command/GossipCommand.java
index be23e872a069c167e5a7cf2738d8b61cca0fe037..c1fa62602632a5e1f8ca03e0864c2d068c9fd222 100644
--- a/src/main/java/com/comandante/creeper/server/command/GossipCommand.java
+++ b/src/main/java/com/comandante/creeper/server/command/GossipCommand.java
@@ -3,7 +3,6 @@ package com.comandante.creeper.server.command;
 
 import com.comandante.creeper.managers.GameManager;
 import com.comandante.creeper.player.Player;
-import com.comandante.creeper.server.CreeperSession;
 import com.google.common.base.Joiner;
 import org.jboss.netty.channel.ChannelHandlerContext;
 import org.jboss.netty.channel.MessageEvent;
@@ -27,28 +26,26 @@ public class GossipCommand extends Command {
 
     @Override
     public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
+        configure(e);
         try {
-            CreeperSession session = extractCreeperSession(e.getChannel());
-            String playerId = extractPlayerId(session);
-            List<String> origMessageParts = getOriginalMessageParts(e);
-            if (origMessageParts.size() == 1) {
-                getGameManager().getChannelUtils().write(playerId, "Nothing to gossip about?");
+            if (originalMessageParts.size() == 1) {
+                write("Nothing to gossip about?");
                 return;
             }
-            origMessageParts.remove(0);
-            final String msg = Joiner.on(" ").join(origMessageParts);
-            Player sourcePlayer = getGameManager().getPlayerManager().getPlayer(playerId);
-            Iterator<Map.Entry<String, Player>> players = getGameManager().getPlayerManager().getPlayers();
+            originalMessageParts.remove(0);
+            final String msg = Joiner.on(" ").join(originalMessageParts);
+            Iterator<Map.Entry<String, Player>> players = playerManager.getPlayers();
             while (players.hasNext()) {
-                StringBuilder stringBuilder = new StringBuilder();
-                Player player = players.next().getValue();
-                stringBuilder.append(MAGENTA);
-                stringBuilder.append("[").append(sourcePlayer.getPlayerName()).append("] ").append(msg);
-                stringBuilder.append(RESET);
-                if (player.getPlayerId().equals(sourcePlayer.getPlayerId())) {
-                    getGameManager().getChannelUtils().write(playerId, stringBuilder.toString());
+                final Player next = players.next().getValue();
+                final String gossipMessage = new StringBuilder()
+                        .append(MAGENTA).append("[")
+                        .append(player.getPlayerName()).append("] ")
+                        .append(msg).append(RESET)
+                        .toString();
+                if (next.getPlayerId().equals(playerId)) {
+                    write(gossipMessage);
                 } else {
-                    getGameManager().getChannelUtils().write(player.getPlayerId(), stringBuilder.toString());
+                    channelUtils.write(next.getPlayerId(), gossipMessage);
                 }
             }
         } finally {
diff --git a/src/main/java/com/comandante/creeper/server/command/InventoryCommand.java b/src/main/java/com/comandante/creeper/server/command/InventoryCommand.java
index eec7362d4c823a7b1ebb46661fd28eda1bdfc09b..5402b7c5ea6e0c7dc16651e7d077770dfc069c14 100644
--- a/src/main/java/com/comandante/creeper/server/command/InventoryCommand.java
+++ b/src/main/java/com/comandante/creeper/server/command/InventoryCommand.java
@@ -4,8 +4,6 @@ package com.comandante.creeper.server.command;
 import com.comandante.creeper.Items.Item;
 import com.comandante.creeper.Items.ItemType;
 import com.comandante.creeper.managers.GameManager;
-import com.comandante.creeper.player.PlayerMetadata;
-import com.comandante.creeper.server.CreeperSession;
 import org.jboss.netty.channel.ChannelHandlerContext;
 import org.jboss.netty.channel.MessageEvent;
 
@@ -26,12 +24,11 @@ public class InventoryCommand extends Command {
 
     @Override
     public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
+        configure(e);
         try {
-            CreeperSession session = extractCreeperSession(e.getChannel());
-            PlayerMetadata playerMetadata = getGameManager().getPlayerManager().getPlayerMetadata(extractPlayerId(session));
             String[] inventory1 = playerMetadata.getInventory();
             if (inventory1 == null) {
-                getGameManager().getChannelUtils().write(extractPlayerId(session), "You aren't carrying anything.");
+                write("You aren't carrying anything.");
                 return;
             }
             ArrayList<String> inventory = new ArrayList<String>(Arrays.asList(playerMetadata.getInventory()));
@@ -39,7 +36,7 @@ public class InventoryCommand extends Command {
             sb.append("You are carrying:\r\n");
             sb.append(RESET);
             for (String inventoryId : inventory) {
-                Item item = getGameManager().getEntityManager().getItemEntity(inventoryId);
+                Item item = entityManager.getItemEntity(inventoryId);
                 sb.append(item.getItemName());
                 int maxUses = ItemType.itemTypeFromCode(item.getItemTypeId()).getMaxUses();
                 if (maxUses > 0) {
@@ -52,7 +49,7 @@ public class InventoryCommand extends Command {
                     }
                 }
             }
-            getGameManager().getChannelUtils().write(extractPlayerId(session), sb.toString());
+            write(sb.toString());
         } finally {
             super.messageReceived(ctx, e);
         }
diff --git a/src/main/java/com/comandante/creeper/server/command/LookCommand.java b/src/main/java/com/comandante/creeper/server/command/LookCommand.java
index 6f062f074ef3dc3681d5fca35e12aed04452abd2..af16fa5eadbdaff3321e76ebc52458fbcde50977 100644
--- a/src/main/java/com/comandante/creeper/server/command/LookCommand.java
+++ b/src/main/java/com/comandante/creeper/server/command/LookCommand.java
@@ -1,9 +1,8 @@
+
 package com.comandante.creeper.server.command;
 
 import com.comandante.creeper.managers.GameManager;
 import com.comandante.creeper.player.Player;
-import com.comandante.creeper.world.Room;
-import com.comandante.creeper.server.CreeperSession;
 import com.google.common.base.Joiner;
 import org.jboss.netty.channel.ChannelHandlerContext;
 import org.jboss.netty.channel.MessageEvent;
@@ -23,24 +22,20 @@ public class LookCommand extends Command {
 
     @Override
     public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
+        configure(e);
         try {
-            CreeperSession creeperSession = extractCreeperSession(e.getChannel());
-            List<String> originalMessageParts = getOriginalMessageParts(e);
             if (originalMessageParts.size() == 1) {
-                getGameManager().currentRoomLogic(extractPlayerId(creeperSession));
+                currentRoomLogic();
                 return;
             }
             originalMessageParts.remove(0);
             String target = Joiner.on(" ").join(originalMessageParts);
             //Players
-            Player player = getGameManager().getPlayerManager().getPlayer(extractPlayerId(creeperSession));
-            Room playerCurrentRoom = getGameManager().getRoomManager().getPlayerCurrentRoom(player).get();
-            Set<String> presentPlayerIds = playerCurrentRoom.getPresentPlayerIds();
+            Set<String> presentPlayerIds = currentRoom.getPresentPlayerIds();
             for (String presentPlayerId : presentPlayerIds) {
-                Player presentPlayer = getGameManager().getPlayerManager().getPlayer(presentPlayerId);
+                Player presentPlayer = gameManager.getPlayerManager().getPlayer(presentPlayerId);
                 if (presentPlayer.getPlayerName().equals(target)) {
-                    getGameManager().getChannelUtils().write(extractPlayerId(creeperSession),
-                            getGameManager().getPlayerManager().getLookString(player));
+                    write(playerManager.getLookString(player));
                 }
             }
         } finally {
diff --git a/src/main/java/com/comandante/creeper/server/command/MovementCommand.java b/src/main/java/com/comandante/creeper/server/command/MovementCommand.java
index 048e774c46203ab63ab5023ab2eaf6db1cf9e8ed..67b755c53a935e23a794e139638c761bae8b4a47 100644
--- a/src/main/java/com/comandante/creeper/server/command/MovementCommand.java
+++ b/src/main/java/com/comandante/creeper/server/command/MovementCommand.java
@@ -3,11 +3,7 @@ package com.comandante.creeper.server.command;
 import com.comandante.creeper.fight.FightManager;
 import com.comandante.creeper.managers.GameManager;
 import com.comandante.creeper.player.PlayerMovement;
-import com.comandante.creeper.player.Player;
-import com.comandante.creeper.world.Coords;
 import com.comandante.creeper.world.Room;
-import com.comandante.creeper.server.ChannelUtils;
-import com.comandante.creeper.server.CreeperSession;
 import com.google.common.base.Optional;
 import com.google.common.collect.ImmutableList;
 import org.jboss.netty.channel.ChannelHandlerContext;
@@ -43,20 +39,12 @@ public class MovementCommand extends Command {
 
     @Override
     public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
+        configure(e);
         try {
-            final GameManager gameManager = getGameManager();
-            CreeperSession session = extractCreeperSession(e.getChannel());
-            Player player = gameManager.getPlayerManager().getPlayer(extractPlayerId(session));
-            Optional<Room> roomOptional = gameManager.getRoomManager().getPlayerCurrentRoom(player);
-            ChannelUtils channelUtils = gameManager.getChannelUtils();
-            if (!roomOptional.isPresent()) {
-                throw new RuntimeException("Player is not in a world, movement failed!");
-            }
-            if (FightManager.isActiveFight(session)) {
-                channelUtils.write(extractPlayerId(session), "You can't not move while in a fight!");
+            if (FightManager.isActiveFight(creeperSession)) {
+                write("You can't not move while in a fight!");
                 return;
             }
-            Room currentRoom = roomOptional.get();
             final String command = getRootCommand(e);
             PlayerMovement playerMovement = null;
             if (!validTriggers.contains(command.toLowerCase())) {
@@ -64,63 +52,63 @@ public class MovementCommand extends Command {
             }
             if (northTriggers.contains(command.toLowerCase())) {
                 if (!currentRoom.getNorthId().isPresent()) {
-                    channelUtils.write(extractPlayerId(session), gameManager.getMapsManager().drawMap(currentRoom.getRoomId(), new Coords(9,9)));
-                    channelUtils.write(extractPlayerId(session), "There's no northern exit.\r\n");
+                    printMap();
+                    write("There's no northern exit.\r\n");
                     return;
                 }
-                Room destinationRoom = gameManager.getRoomManager().getRoom(currentRoom.getNorthId().get());
+                Room destinationRoom = roomManager.getRoom(currentRoom.getNorthId().get());
                 playerMovement = new PlayerMovement(player, currentRoom.getRoomId(), destinationRoom.getRoomId(), this, "exited to the north.", "south");
             }
             if (southTriggers.contains(command.toLowerCase())) {
                 if (!currentRoom.getSouthId().isPresent()) {
-                    channelUtils.write(extractPlayerId(session), gameManager.getMapsManager().drawMap(currentRoom.getRoomId(), new Coords(9,9)));
-                    channelUtils.write(extractPlayerId(session), "There's no southern exit.\r\n");
+                    printMap();
+                    write("There's no southern exit.\r\n");
                     return;
                 }
-                Room destinationRoom = gameManager.getRoomManager().getRoom(currentRoom.getSouthId().get());
-                channelUtils.write(extractPlayerId(session), gameManager.getMapsManager().drawMap(currentRoom.getRoomId(), new Coords(9,9)));
+                Room destinationRoom = roomManager.getRoom(currentRoom.getSouthId().get());
+                printMap();
                 playerMovement = new PlayerMovement(player, currentRoom.getRoomId(), destinationRoom.getRoomId(), this, "exited to the south.", "north");
             }
             if (eastTriggers.contains(command.toLowerCase())) {
                 if (!currentRoom.getEastId().isPresent()) {
-                    channelUtils.write(extractPlayerId(session), gameManager.getMapsManager().drawMap(currentRoom.getRoomId(), new Coords(9,9)));
-                    channelUtils.write(extractPlayerId(session), "There's no eastern exit.\r\n");
+                    printMap();
+                    write("There's no eastern exit.\r\n");
                     return;
                 }
-                Room destinationRoom = gameManager.getRoomManager().getRoom(currentRoom.getEastId().get());
+                Room destinationRoom = roomManager.getRoom(currentRoom.getEastId().get());
                 playerMovement = new PlayerMovement(player, currentRoom.getRoomId(), destinationRoom.getRoomId(), this, "exited to the east.", "west");
             }
             if (westTriggers.contains(command.toLowerCase())) {
                 if (!currentRoom.getWestId().isPresent()) {
-                    channelUtils.write(extractPlayerId(session), gameManager.getMapsManager().drawMap(currentRoom.getRoomId(), new Coords(9,9)));
-                    channelUtils.write(extractPlayerId(session), "There's no western exit.\r\n");
+                    printMap();
+                    write("There's no western exit.\r\n");
                     return;
                 }
-                Room destinationRoom = gameManager.getRoomManager().getRoom(currentRoom.getWestId().get());
+                Room destinationRoom = roomManager.getRoom(currentRoom.getWestId().get());
                 playerMovement = new PlayerMovement(player, currentRoom.getRoomId(), destinationRoom.getRoomId(), this, "exited to the west.", "east");
             }
             if (upTriggers.contains(command.toLowerCase())) {
                 if (!currentRoom.getUpId().isPresent()) {
-                    channelUtils.write(extractPlayerId(session), gameManager.getMapsManager().drawMap(currentRoom.getRoomId(), new Coords(9,9)));
-                    channelUtils.write(extractPlayerId(session), "There's no up exit.\r\n");
+                    printMap();
+                    write("There's no up exit.\r\n");
                     return;
                 }
-                Room destinationRoom = gameManager.getRoomManager().getRoom(currentRoom.getUpId().get());
+                Room destinationRoom = roomManager.getRoom(currentRoom.getUpId().get());
                 playerMovement = new PlayerMovement(player, currentRoom.getRoomId(), destinationRoom.getRoomId(), this, "exited to the west.", "down");
             }
             if (downTriggers.contains(command.toLowerCase())) {
                 if (!currentRoom.getDownId().isPresent()) {
-                    channelUtils.write(extractPlayerId(session), gameManager.getMapsManager().drawMap(currentRoom.getRoomId(), new Coords(9,9)));
-                    channelUtils.write(extractPlayerId(session), "There's no down exit.\r\n");
+                    printMap();
+                    write("There's no down exit.\r\n");
                     return;
                 }
-                Room destinationRoom = gameManager.getRoomManager().getRoom(currentRoom.getDownId().get());
+                Room destinationRoom = roomManager.getRoom(currentRoom.getDownId().get());
                 playerMovement = new PlayerMovement(player, currentRoom.getRoomId(), destinationRoom.getRoomId(), this, "exited to the west.", "up");
             }
             gameManager.movePlayer(playerMovement);
             if (playerMovement != null) {
                 player.setReturnDirection(Optional.of(playerMovement.getReturnDirection()));
-                gameManager.currentRoomLogic(playerMovement.getPlayer().getPlayerId());
+                currentRoomLogic();
             }
         } finally {
             super.messageReceived(ctx, e);
diff --git a/src/main/java/com/comandante/creeper/server/command/PickUpCommand.java b/src/main/java/com/comandante/creeper/server/command/PickUpCommand.java
index 470c889c8733f59591be9bd69e636559ea10f251..3ee972189c650c73e7a8c892d7c00b7260b4a909 100644
--- a/src/main/java/com/comandante/creeper/server/command/PickUpCommand.java
+++ b/src/main/java/com/comandante/creeper/server/command/PickUpCommand.java
@@ -2,9 +2,6 @@ package com.comandante.creeper.server.command;
 
 import com.comandante.creeper.Items.Item;
 import com.comandante.creeper.managers.GameManager;
-import com.comandante.creeper.player.Player;
-import com.comandante.creeper.world.Room;
-import com.comandante.creeper.server.CreeperSession;
 import com.google.common.base.Joiner;
 import org.jboss.netty.channel.ChannelHandlerContext;
 import org.jboss.netty.channel.MessageEvent;
@@ -24,20 +21,17 @@ public class PickUpCommand extends Command {
 
     @Override
     public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
+        configure(e);
         try {
-            List<String> originalMessageParts = getOriginalMessageParts(e);
-            CreeperSession session = extractCreeperSession(e.getChannel());
-            Player player = getGameManager().getPlayerManager().getPlayer(extractPlayerId(session));
-            Room playerCurrentRoom = getGameManager().getRoomManager().getPlayerCurrentRoom(player).get();
-            Set<String> itemIds = playerCurrentRoom.getItemIds();
+            Set<String> itemIds = currentRoom.getItemIds();
             originalMessageParts.remove(0);
             String desiredPickUpItem = Joiner.on(" ").join(originalMessageParts);
             for (String next : itemIds) {
-                Item itemEntity = getGameManager().getEntityManager().getItemEntity(next);
+                Item itemEntity = entityManager.getItemEntity(next);
                 if (itemEntity.getItemTriggers().contains(desiredPickUpItem)) {
-                    getGameManager().acquireItem(player, itemEntity.getItemId());
-                    String playerName = getGameManager().getPlayerManager().getPlayer(extractPlayerId(session)).getPlayerName();
-                    getGameManager().roomSay(playerCurrentRoom.getRoomId(), playerName + " picked up " + itemEntity.getItemName(), extractPlayerId(session));
+                    gameManager.acquireItem(player, itemEntity.getItemId());
+                    String playerName = player.getPlayerName();
+                    gameManager.roomSay(currentRoom.getRoomId(), playerName + " picked up " + itemEntity.getItemName(), playerId);
                     return;
                 }
             }
diff --git a/src/main/java/com/comandante/creeper/server/command/SayCommand.java b/src/main/java/com/comandante/creeper/server/command/SayCommand.java
index b0235c736733dd670a18b45434ee32827f9cd1e3..1630b46609a399b0b1baaa1e5c5885afbf53e461 100644
--- a/src/main/java/com/comandante/creeper/server/command/SayCommand.java
+++ b/src/main/java/com/comandante/creeper/server/command/SayCommand.java
@@ -2,10 +2,7 @@ package com.comandante.creeper.server.command;
 
 import com.comandante.creeper.managers.GameManager;
 import com.comandante.creeper.player.Player;
-import com.comandante.creeper.world.Room;
-import com.comandante.creeper.server.CreeperSession;
 import com.google.common.base.Joiner;
-import com.google.common.base.Optional;
 import org.jboss.netty.channel.ChannelHandlerContext;
 import org.jboss.netty.channel.MessageEvent;
 
@@ -27,27 +24,20 @@ public class SayCommand extends Command {
 
     @Override
     public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
+        configure(e);
         try {
-            CreeperSession session = extractCreeperSession(e.getChannel());
-            List<String> originalMessageParts = getOriginalMessageParts(e);
             originalMessageParts.remove(0);
-            Player sourcePlayer = getGameManager().getPlayerManager().getPlayer(extractPlayerId(session));
             String message = Joiner.on(" ").join(originalMessageParts);
-            Optional<Room> playerCurrentRoomOpt = getGameManager().getRoomManager().getPlayerCurrentRoom(sourcePlayer);
-            if (!playerCurrentRoomOpt.isPresent()) {
-                throw new RuntimeException("playerCurrentRoom is missing!");
-            }
-            Room playerCurrentRoom = playerCurrentRoomOpt.get();
-            Set<Player> presentPlayers = getGameManager().getPlayerManager().getPresentPlayers(playerCurrentRoom);
+            Set<Player> presentPlayers = playerManager.getPresentPlayers(currentRoom);
             for (Player presentPlayer : presentPlayers) {
                 StringBuilder stringBuilder = new StringBuilder();
                 stringBuilder.append(RED);
-                stringBuilder.append("<").append(sourcePlayer.getPlayerName()).append("> ").append(message);
+                stringBuilder.append("<").append(player.getPlayerName()).append("> ").append(message);
                 stringBuilder.append(RESET);
-                if (presentPlayer.getPlayerId().equals(sourcePlayer.getPlayerId())) {
-                    getGameManager().getChannelUtils().write(sourcePlayer.getPlayerId(), stringBuilder.toString());
+                if (presentPlayer.getPlayerId().equals(playerId)) {
+                    write(stringBuilder.toString());
                 } else {
-                    getGameManager().getChannelUtils().write(presentPlayer.getPlayerId(), stringBuilder.toString());
+                    channelUtils.write(presentPlayer.getPlayerId(), stringBuilder.toString());
                 }
             }
         } finally {
diff --git a/src/main/java/com/comandante/creeper/server/command/TellCommand.java b/src/main/java/com/comandante/creeper/server/command/TellCommand.java
index 9d2f5380fbbb2711aadb23ef2d2f601f90c12905..2700de7d9cb1341f19163fd6dc1399d9e680a37f 100644
--- a/src/main/java/com/comandante/creeper/server/command/TellCommand.java
+++ b/src/main/java/com/comandante/creeper/server/command/TellCommand.java
@@ -2,7 +2,6 @@ package com.comandante.creeper.server.command;
 
 import com.comandante.creeper.managers.GameManager;
 import com.comandante.creeper.player.Player;
-import com.comandante.creeper.server.CreeperSession;
 import com.google.common.base.Joiner;
 import org.jboss.netty.channel.ChannelHandlerContext;
 import org.jboss.netty.channel.MessageEvent;
@@ -24,35 +23,33 @@ public class TellCommand extends Command {
 
     @Override
     public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
+        configure(e);
         try {
-            CreeperSession session = extractCreeperSession(e.getChannel());
-            Player sourcePlayer = getGameManager().getPlayerManager().getPlayer(extractPlayerId(session));
-            List<String> parts = getOriginalMessageParts(e);
-            if (parts.size() < 3) {
-                getGameManager().getChannelUtils().write(sourcePlayer.getPlayerId(), "tell failed, no message to send.");
+            if (originalMessageParts.size() < 3) {
+                write("tell failed, no message to send.");
                 return;
             }
             //remove the literal 'tell'
-            parts.remove(0);
-            String destinationUsername = parts.get(0);
-            Player desintationPlayer = getGameManager().getPlayerManager().getPlayerByUsername(destinationUsername);
+            originalMessageParts.remove(0);
+            String destinationUsername = originalMessageParts.get(0);
+            Player desintationPlayer = playerManager.getPlayerByUsername(destinationUsername);
             if (desintationPlayer == null) {
-                getGameManager().getChannelUtils().write(sourcePlayer.getPlayerId(), "tell failed, unknown user.");
+                write("tell failed, unknown user.");
                 return;
             }
-            if (desintationPlayer.getPlayerId().equals(sourcePlayer.getPlayerId())) {
-                getGameManager().getChannelUtils().write(sourcePlayer.getPlayerId(), "tell failed, you're talking to yourself.");
+            if (desintationPlayer.getPlayerId().equals(playerId)) {
+                write("tell failed, you're talking to yourself.");
                 return;
             }
-            parts.remove(0);
-            String tellMessage = Joiner.on(" ").join(parts);
+            originalMessageParts.remove(0);
+            String tellMessage = Joiner.on(" ").join(originalMessageParts);
             StringBuilder stringBuilder = new StringBuilder();
             String destinationPlayercolor = YELLOW;
-            stringBuilder.append("*").append(sourcePlayer.getPlayerName()).append("* ");
+            stringBuilder.append("*").append(player.getPlayerName()).append("* ");
             stringBuilder.append(tellMessage);
             stringBuilder.append(RESET);
-            getGameManager().getChannelUtils().write(desintationPlayer.getPlayerId(), destinationPlayercolor + stringBuilder.toString());
-            getGameManager().getChannelUtils().write(sourcePlayer.getPlayerId(), stringBuilder.toString());
+            channelUtils.write(desintationPlayer.getPlayerId(), destinationPlayercolor + stringBuilder.toString());
+            write(stringBuilder.toString());
         } finally {
             super.messageReceived(ctx, e);
         }
diff --git a/src/main/java/com/comandante/creeper/server/command/UnknownCommand.java b/src/main/java/com/comandante/creeper/server/command/UnknownCommand.java
index 860b39072a3201f3af0958b534ed5725c71e6075..e1c088feb75ba4c663bb2af994dd69e8c98347be 100644
--- a/src/main/java/com/comandante/creeper/server/command/UnknownCommand.java
+++ b/src/main/java/com/comandante/creeper/server/command/UnknownCommand.java
@@ -1,7 +1,6 @@
 package com.comandante.creeper.server.command;
 
 import com.comandante.creeper.managers.GameManager;
-import com.comandante.creeper.server.CreeperSession;
 import org.jboss.netty.channel.ChannelHandlerContext;
 import org.jboss.netty.channel.MessageEvent;
 
@@ -13,13 +12,11 @@ public class UnknownCommand extends Command {
 
     @Override
     public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
+        configure(e);
         try {
-            CreeperSession creeperSession = extractCreeperSession(e.getChannel());
-            String playerId = extractPlayerId(creeperSession);
-            getGameManager().getChannelUtils().write(playerId, getGameManager().getPlayerManager().buildPrompt(playerId), false);
+            write(getPrompt(), false);
             e.getChannel().getPipeline().remove(ctx.getHandler());
         } finally {
-            //super.messageReceived(ctx, e);
         }
     }
 }
diff --git a/src/main/java/com/comandante/creeper/server/command/UseCommand.java b/src/main/java/com/comandante/creeper/server/command/UseCommand.java
index c6055772413fd2fce059cc87ee5c9955cf3e032d..3ff1f7e4ff8b60ba9f89c6b8adb135c6150c869b 100644
--- a/src/main/java/com/comandante/creeper/server/command/UseCommand.java
+++ b/src/main/java/com/comandante/creeper/server/command/UseCommand.java
@@ -5,7 +5,6 @@ import com.comandante.creeper.Items.Item;
 import com.comandante.creeper.Items.ItemType;
 import com.comandante.creeper.Items.ItemUseHandler;
 import com.comandante.creeper.managers.GameManager;
-import com.comandante.creeper.server.CreeperSession;
 import com.google.common.base.Joiner;
 import org.jboss.netty.channel.ChannelHandlerContext;
 import org.jboss.netty.channel.MessageEvent;
@@ -24,23 +23,22 @@ public class UseCommand extends Command {
 
     @Override
     public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
+        configure(e);
         try {
-            CreeperSession session = extractCreeperSession(e.getChannel());
-            List<String> originalMessageParts = getOriginalMessageParts(e);
             if (originalMessageParts.size() == 1) {
-                getGameManager().getChannelUtils().write(extractPlayerId(session), "No item specified.");
+                write("No item specified.");
                 return;
             }
             originalMessageParts.remove(0);
             String itemTarget = Joiner.on(" ").join(originalMessageParts);
-            for (String inventoryId : getGameManager().getPlayerManager().getPlayerMetadata(extractPlayerId(session)).getInventory()) {
-                Item itemEntity = getGameManager().getEntityManager().getItemEntity(inventoryId);
+            for (String inventoryId : playerMetadata.getInventory()) {
+                Item itemEntity = entityManager.getItemEntity(inventoryId);
                 if (itemEntity.getItemTriggers().contains(itemTarget)) {
-                    new ItemUseHandler(itemEntity, session, getGameManager(), extractPlayerId(session)).handle();
+                    new ItemUseHandler(itemEntity, creeperSession, gameManager, playerId).handle();
                     return;
                 }
             }
-            new ItemUseHandler(ItemType.UNKNOWN.create(), session, getGameManager(), extractPlayerId(session)).handle();
+            new ItemUseHandler(ItemType.UNKNOWN.create(), creeperSession, gameManager, playerId).handle();
         } finally {
             super.messageReceived(ctx, e);
         }
diff --git a/src/main/java/com/comandante/creeper/server/command/WhoCommand.java b/src/main/java/com/comandante/creeper/server/command/WhoCommand.java
index 2c3b2907f008707b87b5426ee810ce3489870547..490f728d64056a1784a2ace7cd2d78f211322283 100644
--- a/src/main/java/com/comandante/creeper/server/command/WhoCommand.java
+++ b/src/main/java/com/comandante/creeper/server/command/WhoCommand.java
@@ -24,6 +24,7 @@ public class WhoCommand extends Command {
 
     @Override
     public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
+        configure(e);
         try {
             Table t = new Table(3, BorderStyle.CLASSIC_COMPATIBLE,
                     ShownBorders.HEADER_AND_FIRST_COLLUMN);
@@ -34,13 +35,13 @@ public class WhoCommand extends Command {
             t.addCell("player");
             t.addCell("ip address");
             t.addCell("logged in since");
-            Set<Player> allPlayers = getGameManager().getAllPlayers();
+            Set<Player> allPlayers = gameManager.getAllPlayers();
             for (Player allPlayer : allPlayers) {
                 t.addCell(allPlayer.getPlayerName());
                 t.addCell(allPlayer.getChannel().getRemoteAddress().toString().substring(1).split(":")[0]);
                 t.addCell(extractCreeperSession(e.getChannel()).getPrettyDate());
             }
-            getGameManager().getChannelUtils().write(extractPlayerId(extractCreeperSession(e.getChannel())), t.render());
+            write(t.render());
         } finally {
             super.messageReceived(ctx, e);
         }
diff --git a/src/main/java/com/comandante/creeper/server/command/WhoamiCommand.java b/src/main/java/com/comandante/creeper/server/command/WhoamiCommand.java
index a8183b87534b9d8a7c389f13d9381e33a90f7117..60e97de6eb6a50794680de13ac2b0df9d85b50d4 100644
--- a/src/main/java/com/comandante/creeper/server/command/WhoamiCommand.java
+++ b/src/main/java/com/comandante/creeper/server/command/WhoamiCommand.java
@@ -1,7 +1,6 @@
 package com.comandante.creeper.server.command;
 
 import com.comandante.creeper.managers.GameManager;
-import com.comandante.creeper.player.Player;
 import org.jboss.netty.channel.ChannelHandlerContext;
 import org.jboss.netty.channel.MessageEvent;
 
@@ -18,9 +17,9 @@ public class WhoamiCommand extends Command {
 
     @Override
     public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
+        configure(e);
         try {
-            Player player = getGameManager().getPlayerManager().getPlayer(extractPlayerId(extractCreeperSession(e.getChannel())));
-            getGameManager().getChannelUtils().write(player.getPlayerId(), player.getPlayerName());
+            write(player.getPlayerName());
         } finally {
             super.messageReceived(ctx, e);
         }
diff --git a/src/main/java/com/comandante/creeper/server/command/admin/BuildCommand.java b/src/main/java/com/comandante/creeper/server/command/admin/BuildCommand.java
index e69b28859ef7cff4fee9459b7312cd448faa722a..fac92b35cfb288dd7760356419e162ce1c44379a 100644
--- a/src/main/java/com/comandante/creeper/server/command/admin/BuildCommand.java
+++ b/src/main/java/com/comandante/creeper/server/command/admin/BuildCommand.java
@@ -1,23 +1,16 @@
 package com.comandante.creeper.server.command.admin;
 
-import com.comandante.creeper.entity.EntityManager;
 import com.comandante.creeper.managers.GameManager;
-import com.comandante.creeper.player.Player;
 import com.comandante.creeper.player.PlayerMovement;
-import com.comandante.creeper.server.ChannelUtils;
-import com.comandante.creeper.server.CreeperSession;
 import com.comandante.creeper.server.command.Command;
 import com.comandante.creeper.world.Area;
 import com.comandante.creeper.world.BasicRoom;
 import com.comandante.creeper.world.BasicRoomBuilder;
 import com.comandante.creeper.world.Coords;
-import com.comandante.creeper.world.FloorManager;
 import com.comandante.creeper.world.FloorModel;
 import com.comandante.creeper.world.MapMatrix;
-import com.comandante.creeper.world.MapsManager;
 import com.comandante.creeper.world.RemoteExit;
 import com.comandante.creeper.world.Room;
-import com.comandante.creeper.world.RoomManager;
 import com.comandante.creeper.world.WorldExporter;
 import com.google.common.base.Optional;
 import com.google.common.collect.Iterators;
@@ -42,46 +35,34 @@ public class BuildCommand extends Command {
 
     @Override
     public synchronized void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
+        configure(e);
         try {
-
-            CreeperSession session = extractCreeperSession(e.getChannel());
-            String playerId = extractPlayerId(session);
-            GameManager gameManager = getGameManager();
-            Player player = gameManager.getPlayerManager().getPlayer(playerId);
-            Room currentRoom = gameManager.getRoomManager().getPlayerCurrentRoom(player).get();
-            ChannelUtils utils = gameManager.getChannelUtils();
-            MapsManager mapsManager = gameManager.getMapsManager();
-            MapMatrix mapMatrix = mapsManager.getFloorMatrixMaps().get(currentRoom.getFloorId());
-            Coords currentRoomCoords = mapMatrix.getCoords(currentRoom.getRoomId());
-            EntityManager entityManager = gameManager.getEntityManager();
-            FloorManager floorManager = gameManager.getFloorManager();
-
-            if (getOriginalMessageParts(e).size() > 1) {
-                String desiredBuildDirection = getOriginalMessageParts(e).get(1);
+            if (originalMessageParts.size() > 1) {
+                String desiredBuildDirection = originalMessageParts.get(1);
                 if (desiredBuildDirection.equalsIgnoreCase("n") | desiredBuildDirection.equalsIgnoreCase("north")) {
                     if (!currentRoom.getNorthId().isPresent() && mapMatrix.isNorthernMapSpaceEmpty(currentRoom.getRoomId())) {
-                        buildBasicRoomAndProcessAllExits(player, currentRoom, mapMatrix.getNorthCords(currentRoomCoords), mapMatrix);
+                        buildBasicRoomAndProcessAllExits(mapMatrix.getNorthCords(currentRoomCoords));
                         return;
                     }
                 } else if (desiredBuildDirection.equalsIgnoreCase("s") | desiredBuildDirection.equalsIgnoreCase("south")) {
                     if (!currentRoom.getSouthId().isPresent() && mapMatrix.isSouthernMapSpaceEmpty(currentRoom.getRoomId())) {
-                        buildBasicRoomAndProcessAllExits(player, currentRoom, mapMatrix.getSouthCoords(currentRoomCoords), mapMatrix);
+                        buildBasicRoomAndProcessAllExits(mapMatrix.getSouthCoords(currentRoomCoords));
                         return;
                     }
                 } else if (desiredBuildDirection.equalsIgnoreCase("e") | desiredBuildDirection.equalsIgnoreCase("east")) {
                     if (!currentRoom.getEastId().isPresent() && mapMatrix.isEasternMapSpaceEmpty(currentRoom.getRoomId())) {
-                        buildBasicRoomAndProcessAllExits(player, currentRoom, mapMatrix.getEastCoords(currentRoomCoords), mapMatrix);
+                        buildBasicRoomAndProcessAllExits(mapMatrix.getEastCoords(currentRoomCoords));
                         return;
                     }
                 } else if (desiredBuildDirection.equalsIgnoreCase("w") | desiredBuildDirection.equalsIgnoreCase("west")) {
                     if (!currentRoom.getWestId().isPresent() && mapMatrix.isWesternMapSpaceEmpty(currentRoom.getRoomId())) {
-                        buildBasicRoomAndProcessAllExits(player, currentRoom, mapMatrix.getSouthCoords(currentRoomCoords), mapMatrix);
+                        buildBasicRoomAndProcessAllExits(mapMatrix.getSouthCoords(currentRoomCoords));
                         return;
                     }
                 } else if (desiredBuildDirection.equalsIgnoreCase("u") | desiredBuildDirection.equalsIgnoreCase("up")) {
                     if (!currentRoom.getUpId().isPresent()) {
-                        Integer newRoomId = findRoomId();
-                        Integer newFloorId = findFloorId();
+                        Integer newRoomId = findUnusedRoomId();
+                        Integer newFloorId = findUnusedFloorId();
                         mapMatrix.addRemote(currentRoom.getRoomId(), new RemoteExit(RemoteExit.Direction.UP, newRoomId));
                         FloorModel newFloorModel = newFloorModel(newFloorId, newRoomId, currentRoom.getRoomId(), RemoteExit.Direction.DOWN);
                         BasicRoom basicRoom = newBasic()
@@ -101,8 +82,8 @@ public class BuildCommand extends Command {
                     }
                 } else if (desiredBuildDirection.equalsIgnoreCase("d") | desiredBuildDirection.equalsIgnoreCase("down")) {
                     if (!currentRoom.getDownId().isPresent()) {
-                        Integer newRoomId = findRoomId();
-                        Integer newFloorId = findFloorId();
+                        Integer newRoomId = findUnusedRoomId();
+                        Integer newFloorId = findUnusedFloorId();
                         mapMatrix.addRemote(currentRoom.getRoomId(), new RemoteExit(RemoteExit.Direction.DOWN, newRoomId));
                         FloorModel newFloorModel = newFloorModel(newFloorId, newRoomId, currentRoom.getRoomId(), RemoteExit.Direction.UP);
                         BasicRoom basicRoom = newBasic()
@@ -121,7 +102,7 @@ public class BuildCommand extends Command {
                         return;
                     }
                 }
-                utils.write(playerId, "Room already exists at that location.");
+                channelUtils.write(playerId, "Room already exists at that location.");
             }
         } finally {
             super.messageReceived(ctx, e);
@@ -148,25 +129,24 @@ public class BuildCommand extends Command {
         return basicRoomBuilder;
     }
 
-    private void buildBasicRoomAndProcessAllExits(Player player, Room currentRoom, Coords newCords, MapMatrix mapMatrix) {
-        Integer newRroomId = findRoomId();
+    private void buildBasicRoomAndProcessAllExits(Coords newCords) {
+        Integer newRroomId = findUnusedRoomId();
         mapMatrix.setCoordsValue(newCords, newRroomId);
         BasicRoom basicRoom = newBasic()
                 .setRoomId(newRroomId)
                 .setFloorId(currentRoom.getFloorId())
                 .createBasicRoom();
-        getGameManager().getEntityManager().addEntity(basicRoom);
+        entityManager.addEntity(basicRoom);
         rebuildExits(basicRoom, mapMatrix);
         rebuildExits(currentRoom, mapMatrix);
         processExits(basicRoom, mapMatrix);
-        getGameManager().getMapsManager().generateAllMaps(9, 9);
-        getGameManager().movePlayer(new PlayerMovement(player, currentRoom.getRoomId(), basicRoom.getRoomId(), null, "", ""));
-        getGameManager().currentRoomLogic(player.getPlayerId());
-        getGameManager().getChannelUtils().write(player.getPlayerId(), "Room Created.");
+        mapsManager.generateAllMaps(9, 9);
+        gameManager.movePlayer(new PlayerMovement(player, currentRoom.getRoomId(), basicRoom.getRoomId(), null, "", ""));
+        gameManager.currentRoomLogic(player.getPlayerId());
+        write("Room Created.");
     }
 
     private void processExits(BasicRoom basicRoom, MapMatrix mapMatrix) {
-        RoomManager roomManager = getGameManager().getRoomManager();
         if (basicRoom.getNorthId().isPresent()) {
             rebuildExits(roomManager.getRoom(basicRoom.getNorthId().get()), mapMatrix);
         }
@@ -206,19 +186,18 @@ public class BuildCommand extends Command {
         }
     }
 
-    private synchronized Integer findRoomId() {
+    private synchronized Integer findUnusedRoomId() {
         for (int i = 1; i < Integer.MAX_VALUE; i++) {
-            if (!getGameManager().getRoomManager().doesRoomIdExist(i)) {
+            if (!roomManager.doesRoomIdExist(i)) {
                 return i;
             }
         }
         return 0;
     }
 
-
-    private synchronized Integer findFloorId() {
+    private synchronized Integer findUnusedFloorId() {
         for (int i = 1; i < Integer.MAX_VALUE; i++) {
-            if (!getGameManager().getFloorManager().doesFloorIdExist(i)) {
+            if (!floorManager.doesFloorIdExist(i)) {
                 return i;
             }
         }
diff --git a/src/main/java/com/comandante/creeper/server/command/admin/DescriptionCommand.java b/src/main/java/com/comandante/creeper/server/command/admin/DescriptionCommand.java
index 0371e3cf49c5fedcdcba6e1210f3009c0e8f4582..e6f5d561b4c976d16cbbd909c20dfd6e5a1fb966 100644
--- a/src/main/java/com/comandante/creeper/server/command/admin/DescriptionCommand.java
+++ b/src/main/java/com/comandante/creeper/server/command/admin/DescriptionCommand.java
@@ -2,9 +2,6 @@ package com.comandante.creeper.server.command.admin;
 
 import com.comandante.creeper.CreeperEntry;
 import com.comandante.creeper.managers.GameManager;
-import com.comandante.creeper.player.Player;
-import com.comandante.creeper.world.Room;
-import com.comandante.creeper.server.CreeperSession;
 import com.comandante.creeper.server.MultiLineInputManager;
 import com.comandante.creeper.server.command.Command;
 import com.google.common.base.Optional;
@@ -27,22 +24,18 @@ public class DescriptionCommand extends Command {
 
     @Override
     public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
+        configure(e);
         try {
-            GameManager gameManager = getGameManager();
-            CreeperSession session = extractCreeperSession(e.getChannel());
-            Player player = gameManager.getPlayerManager().getPlayer(extractPlayerId(session));
-            if (session.getGrabMultiLineInput().isPresent()) {
+            if (creeperSession.getGrabMultiLineInput().isPresent()) {
                 MultiLineInputManager multiLineInputManager = gameManager.getMultiLineInputManager();
-                UUID uuid = session.getGrabMultiLineInput().get().getKey();
+                UUID uuid = creeperSession.getGrabMultiLineInput().get().getKey();
                 String multiLineInput = multiLineInputManager.retrieveMultiLineInput(uuid);
-                Room playerCurrentRoom = gameManager.getRoomManager().getPlayerCurrentRoom(player).get();
-                playerCurrentRoom.setRoomDescription(multiLineInput);
-                session.setGrabMultiLineInput(Optional.<CreeperEntry<UUID, Command>>absent());
+                currentRoom.setRoomDescription(multiLineInput);
+                creeperSession.setGrabMultiLineInput(Optional.<CreeperEntry<UUID, Command>>absent());
                 return;
             }
-            final String playerId = extractPlayerId(session);
-            gameManager.getChannelUtils().write(playerId, "You are now in multi-line mode.  Type \"done\" on an empty line to exit and save.\r\n");
-            session.setGrabMultiLineInput(Optional.of(
+            write("You are now in multi-line mode.  Type \"done\" on an empty line to exit and save.\r\n");
+            creeperSession.setGrabMultiLineInput(Optional.of(
                     new CreeperEntry<UUID, Command>(gameManager.getMultiLineInputManager().createNewMultiLineInput(), this)));
         } finally {
            super.messageReceived(ctx, e);
diff --git a/src/main/java/com/comandante/creeper/server/command/admin/SaveWorldCommand.java b/src/main/java/com/comandante/creeper/server/command/admin/SaveWorldCommand.java
index f2583166a2f627750d7ef5ddac0e82ec164a62c6..42324833a416f13cf39e2ad002331c9bd8e5cf1d 100644
--- a/src/main/java/com/comandante/creeper/server/command/admin/SaveWorldCommand.java
+++ b/src/main/java/com/comandante/creeper/server/command/admin/SaveWorldCommand.java
@@ -1,7 +1,6 @@
 package com.comandante.creeper.server.command.admin;
 
 import com.comandante.creeper.managers.GameManager;
-import com.comandante.creeper.world.WorldExporter;
 import com.comandante.creeper.server.command.Command;
 import org.jboss.netty.channel.ChannelHandlerContext;
 import org.jboss.netty.channel.MessageEvent;
@@ -22,14 +21,12 @@ public class SaveWorldCommand extends Command {
 
     @Override
     public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
-        WorldExporter worldExporter = new WorldExporter(
-                        getGameManager().getRoomManager(),
-                        getGameManager().getMapsManager(),
-                        getGameManager().getFloorManager(),
-                        getGameManager().getEntityManager());
-
-        worldExporter.saveWorld();
-        getGameManager().getChannelUtils().write(extractPlayerId(extractCreeperSession(e.getChannel())), "World saved.");
-        super.messageReceived(ctx, e);
+        configure(e);
+        try {
+            worldExporter.saveWorld();
+            write("World saved.");
+        } finally {
+            super.messageReceived(ctx, e);
+        }
     }
 }
diff --git a/src/main/java/com/comandante/creeper/server/command/admin/TagRoomCommand.java b/src/main/java/com/comandante/creeper/server/command/admin/TagRoomCommand.java
index 37a3731ec52cb8994a814b1db08893772bf968fd..11acf471742af5fbaf14c7561045baacd7b91bea 100644
--- a/src/main/java/com/comandante/creeper/server/command/admin/TagRoomCommand.java
+++ b/src/main/java/com/comandante/creeper/server/command/admin/TagRoomCommand.java
@@ -1,8 +1,6 @@
 package com.comandante.creeper.server.command.admin;
 
 import com.comandante.creeper.managers.GameManager;
-import com.comandante.creeper.player.Player;
-import com.comandante.creeper.world.Room;
 import com.comandante.creeper.server.command.Command;
 import org.jboss.netty.channel.ChannelHandlerContext;
 import org.jboss.netty.channel.MessageEvent;
@@ -23,25 +21,22 @@ public class TagRoomCommand extends Command {
 
     @Override
     public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
+        configure(e);
         try {
-            GameManager gameManager = getGameManager();
-            Player player = gameManager.getPlayerManager().getPlayer(extractPlayerId(extractCreeperSession(e.getChannel())));
-            Room playerCurrentRoom = gameManager.getRoomManager().getPlayerCurrentRoom(player).get();
-            List<String> originalMessageParts = getOriginalMessageParts(e);
             originalMessageParts.remove(0);
             if (originalMessageParts.get(0).equalsIgnoreCase("list")) {
                 StringBuilder sb = new StringBuilder();
-                Iterator<String> iterator = playerCurrentRoom.getRoomTags().iterator();
+                Iterator<String> iterator = currentRoom.getRoomTags().iterator();
                 while (iterator.hasNext()) {
                     String tag = iterator.next();
                     sb.append(tag).append("\n");
                 }
-                gameManager.getChannelUtils().write(player.getPlayerId(), "tag\n---");
-                gameManager.getChannelUtils().write(player.getPlayerId(), sb.toString());
+                write("tag\n---");
+                write(sb.toString());
                 return;
             }
-            playerCurrentRoom.addTag(originalMessageParts.get(0));
-            gameManager.getChannelUtils().write(player.getPlayerId(), String.format("tagged world with tag: \"%s\".", originalMessageParts.get(0)));
+            currentRoom.addTag(originalMessageParts.get(0));
+            write(String.format("tagged world with tag: \"%s\".", originalMessageParts.get(0)));
         } finally {
             super.messageReceived(ctx, e);
         }
diff --git a/src/main/java/com/comandante/creeper/server/command/admin/TitleCommand.java b/src/main/java/com/comandante/creeper/server/command/admin/TitleCommand.java
index 549aa52a7b70f537dccc91e970d3f63c27a9a8d0..e2114b842eefc7cd165c3bd2d0dd52a1334d132b 100644
--- a/src/main/java/com/comandante/creeper/server/command/admin/TitleCommand.java
+++ b/src/main/java/com/comandante/creeper/server/command/admin/TitleCommand.java
@@ -1,9 +1,6 @@
 package com.comandante.creeper.server.command.admin;
 
 import com.comandante.creeper.managers.GameManager;
-import com.comandante.creeper.player.Player;
-import com.comandante.creeper.world.Room;
-import com.comandante.creeper.server.CreeperSession;
 import com.comandante.creeper.server.command.Command;
 import com.google.common.base.Joiner;
 import org.jboss.netty.channel.ChannelHandlerContext;
@@ -25,16 +22,11 @@ public class TitleCommand extends Command {
 
     @Override
     public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
+        configure(e);
         try {
-            GameManager gameManager = getGameManager();
-            List<String> originalMessageParts = getOriginalMessageParts(e);
             originalMessageParts.remove(0);
-            String join = Joiner.on(" ").join(originalMessageParts);
-            CreeperSession session = extractCreeperSession(e.getChannel());
-            Player player = gameManager.getPlayerManager().getPlayer(extractPlayerId(session));
-            Room playerCurrentRoom = gameManager.getRoomManager().getPlayerCurrentRoom(player).get();
-            playerCurrentRoom.setRoomTitle(join);
-            gameManager.getChannelUtils().write(player.getPlayerId(), "Titled saved.");
+            currentRoom.setRoomTitle(Joiner.on(" ").join(originalMessageParts));
+            write("Titled saved.");
         } finally {
             super.messageReceived(ctx, e);
         }
diff --git a/src/main/java/com/comandante/creeper/world/MapsManager.java b/src/main/java/com/comandante/creeper/world/MapsManager.java
index a4311b5751739a6bf1f400fdca61a5046c62116c..e028eba0ee9174f39f120be5cfe0103ea91ab3d0 100644
--- a/src/main/java/com/comandante/creeper/world/MapsManager.java
+++ b/src/main/java/com/comandante/creeper/world/MapsManager.java
@@ -29,10 +29,6 @@ public class MapsManager {
     }
 
     public String drawMap(Integer roomId, Coords max) {
-        System.out.println(roomId);
-        if (roomId.equals(67)) {
-            System.out.println("hi");
-        }
         MapMatrix floorMatrix = floorMatrixMaps.get(roomManager.getRoom(roomId).getFloorId());
         MapMatrix mapMatrix = floorMatrix.extractMatrix(roomId, max);
         return mapMatrix.renderMap(roomId, roomManager);