diff --git a/src/main/java/com/comandante/command/DefaultCommandHandler.java b/src/main/java/com/comandante/command/DefaultCommandHandler.java
index b2d64ebf04706586710f3046bd5f50966ce079ca..e80b36c30543b12cb8f298929a0505c0df045d7b 100644
--- a/src/main/java/com/comandante/command/DefaultCommandHandler.java
+++ b/src/main/java/com/comandante/command/DefaultCommandHandler.java
@@ -1,89 +1,64 @@
 package com.comandante.command;
 
 
+import com.comandante.managers.MovementManager;
 import com.comandante.model.Movement;
 import com.comandante.managers.GameManager;
 import com.comandante.model.Player;
 import com.comandante.model.Room;
-import com.comandante.server.CreeperSessionState;
+import com.comandante.server.CreeperSession;
 import com.google.common.base.Optional;
 import org.jboss.netty.channel.MessageEvent;
 
 public class DefaultCommandHandler {
 
     GameManager gameManager;
-    CreeperSessionState creeperSessionState;
+    CreeperSession creeperSession;
     MessageEvent event;
 
-    public DefaultCommandHandler(GameManager gameManager, CreeperSessionState creeperSessionState, MessageEvent event) {
+    public DefaultCommandHandler(GameManager gameManager, CreeperSession creeperSession, MessageEvent event) {
         this.gameManager = gameManager;
-        this.creeperSessionState = creeperSessionState;
+        this.creeperSession = creeperSession;
         this.event = event;
     }
 
     public void handle(DefaultCommandType cmdType) {
         final String originalMessage = cmdType.getOriginalMessage();
         final Player player = _player();
-        Optional<Movement> movementOptional = Optional.absent();
-        Room currentRoom = null;
+        Optional<Movement> movement = Optional.absent();
 
         switch(cmdType) {
             case MOVE_NORTH:
-                currentRoom = _currentRoom();
-                if (!currentRoom.getNorthId().isPresent()) {
-                    event.getChannel().write("There's no northern exit.\r\n");
-                    break;
-                }
-                movementOptional = Optional.of(
-                        new Movement(player, currentRoom.getRoomId(), currentRoom.getNorthId().get(), cmdType));
+                movement = MovementManager.moveNorth(cmdType, player, _currentRoom(), event);
                 break;
             case MOVE_SOUTH:
-                currentRoom = _currentRoom();
-                if (!currentRoom.getSouthId().isPresent()) {
-                    event.getChannel().write("There's no southern exit.\r\n");
-                    break;
-                }
-                movementOptional = Optional.of(
-                        new Movement(player, currentRoom.getRoomId(), currentRoom.getSouthId().get(), cmdType));
+                movement = MovementManager.moveSouth(cmdType, player, _currentRoom(), event);
                 break;
             case MOVE_EAST:
-                currentRoom = _currentRoom();
-                if (!currentRoom.getEastId().isPresent()) {
-                    event.getChannel().write("There's no eastern exit.\r\n");
-                    break;
-                }
-                movementOptional = Optional.of(
-                        new Movement(player, currentRoom.getRoomId(), currentRoom.getEastId().get(), cmdType));
+                movement = MovementManager.moveEast(cmdType, player, _currentRoom(), event);
                 break;
             case MOVE_WEST:
-                currentRoom = _currentRoom();
-                if (!currentRoom.getWestId().isPresent()) {
-                    event.getChannel().write("There's no western exit.\r\n");
-                    break;
-                }
-                movementOptional = Optional.of(
-                        new Movement(player, currentRoom.getRoomId(), currentRoom.getWestId().get(), cmdType));
+                movement = MovementManager.moveWest(cmdType, player, _currentRoom(), event);
                 break;
             case SAY:
                 gameManager.say(player, originalMessage.replaceFirst("^say ", ""));
                 break;
             case GOSSIP:
-                String s = originalMessage.replaceFirst("^gossip ", "");
-                gameManager.gossip(player, s);
+                gameManager.gossip(player, originalMessage.replaceFirst("^gossip ", ""));
                 break;
             case UNKNOWN:
-                gameManager.currentRoomLogic(creeperSessionState, event);
+                gameManager.currentRoomLogic(creeperSession, event);
                 break;
         }
 
-        if (movementOptional.isPresent()) {
-            gameManager.movePlayer(movementOptional.get());
-            gameManager.currentRoomLogic(creeperSessionState, event);
+        if (movement.isPresent()) {
+            gameManager.movePlayer(movement.get());
+            gameManager.currentRoomLogic(creeperSession, event);
         }
     }
 
     private Player _player() {
-        return gameManager.getPlayerManager().getPlayer(creeperSessionState.getUsername().get());
+        return gameManager.getPlayerManager().getPlayer(creeperSession.getUsername().get());
     }
 
     private Room _currentRoom() {
diff --git a/src/main/java/com/comandante/managers/GameManager.java b/src/main/java/com/comandante/managers/GameManager.java
index b79f2f4f203b6a76524a3cf084968121339ccf22..eb98ab7b0dc7513cbdac00d874a1603c24f81ceb 100644
--- a/src/main/java/com/comandante/managers/GameManager.java
+++ b/src/main/java/com/comandante/managers/GameManager.java
@@ -4,7 +4,7 @@ package com.comandante.managers;
 import com.comandante.model.Movement;
 import com.comandante.model.Player;
 import com.comandante.model.Room;
-import com.comandante.server.CreeperSessionState;
+import com.comandante.server.CreeperSession;
 import com.google.common.base.Optional;
 import com.google.common.collect.Interners;
 import org.fusesource.jansi.Ansi;
@@ -123,12 +123,12 @@ public class GameManager {
         channel.write("\r\n");
     }
 
-    public void currentRoomLogic(CreeperSessionState creeperSessionState, MessageEvent e) {
-        final Player player = playerManager.getPlayer(creeperSessionState.getUsername().get());
+    public void currentRoomLogic(CreeperSession creeperSession, MessageEvent e) {
+        final Player player = playerManager.getPlayer(creeperSession.getUsername().get());
         final Room playerCurrentRoom = getPlayerCurrentRoom(player).get();
         e.getChannel().write(playerCurrentRoom.getRoomDescription() + "\r\n");
         for (Player next : playerCurrentRoom.getPresentPlayers()) {
-            if (next.getPlayerId().equals(new Player(creeperSessionState.getUsername().get()).getPlayerId())) {
+            if (next.getPlayerId().equals(new Player(creeperSession.getUsername().get()).getPlayerId())) {
                 continue;
             }
             e.getChannel().write(next.getPlayerName() + " is here.\r\n");
diff --git a/src/main/java/com/comandante/managers/MovementManager.java b/src/main/java/com/comandante/managers/MovementManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..c18d978c8e575f849440fa980874b916d40cf1e7
--- /dev/null
+++ b/src/main/java/com/comandante/managers/MovementManager.java
@@ -0,0 +1,47 @@
+package com.comandante.managers;
+
+import com.comandante.command.CommandType;
+import com.comandante.model.Movement;
+import com.comandante.model.Player;
+import com.comandante.model.Room;
+import com.google.common.base.Optional;
+import org.jboss.netty.channel.MessageEvent;
+
+public class MovementManager {
+
+    public static Optional<Movement> moveNorth(CommandType cmdType, Player player, Room currentRoom, MessageEvent event) {
+        if (!currentRoom.getNorthId().isPresent()) {
+            event.getChannel().write("There's no northern exit.\r\n");
+            return Optional.absent();
+        }
+        return Optional.of(
+                new Movement(player, currentRoom.getRoomId(), currentRoom.getNorthId().get(), cmdType));
+    }
+
+    public static Optional<Movement> moveSouth(CommandType cmdType, Player player, Room currentRoom, MessageEvent event) {
+        if (!currentRoom.getSouthId().isPresent()) {
+            event.getChannel().write("There's no southern exit.\r\n");
+            return Optional.absent();
+        }
+        return Optional.of(
+                new Movement(player, currentRoom.getRoomId(), currentRoom.getSouthId().get(), cmdType));
+    }
+
+    public static Optional<Movement> moveEast(CommandType cmdType, Player player, Room currentRoom, MessageEvent event) {
+        if (!currentRoom.getEastId().isPresent()) {
+            event.getChannel().write("There's no eastern exit.\r\n");
+            return Optional.absent();
+        }
+        return Optional.of(
+                new Movement(player, currentRoom.getRoomId(), currentRoom.getEastId().get(), cmdType));
+    }
+    
+    public static Optional<Movement> moveWest(CommandType cmdType, Player player, Room currentRoom, MessageEvent event) {
+        if (!currentRoom.getWestId().isPresent()) {
+            event.getChannel().write("There's no western exit.\r\n");
+            return Optional.absent();
+        }
+        return Optional.of(
+                new Movement(player, currentRoom.getRoomId(), currentRoom.getWestId().get(), cmdType));
+    }
+}
diff --git a/src/main/java/com/comandante/server/CreeperServerHandler.java b/src/main/java/com/comandante/server/CreeperServerHandler.java
index 793bd53908934bd2007386a92f4c65ecb80660f0..fd7f9f85691a0219b0da40f7b01aeea3bfe265b4 100644
--- a/src/main/java/com/comandante/server/CreeperServerHandler.java
+++ b/src/main/java/com/comandante/server/CreeperServerHandler.java
@@ -33,21 +33,21 @@ public class CreeperServerHandler extends SimpleChannelUpstreamHandler {
     public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
         // Send greeting for a new connection.
         e.getChannel().write("username: ");
-        CreeperSessionState creeperSessionState = new CreeperSessionState();
-        creeperSessionState.setState(CreeperSessionState.State.promptedForUsername);
-        ctx.setAttachment(creeperSessionState);
+        CreeperSession creeperSession = new CreeperSession();
+        creeperSession.setState(CreeperSession.State.promptedForUsername);
+        ctx.setAttachment(creeperSession);
     }
 
     @Override
     public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws InterruptedException {
-        CreeperSessionState creeperSessionState = (CreeperSessionState) ctx.getAttachment();
-        if (!creeperSessionState.isAuthed()) {
+        CreeperSession creeperSession = (CreeperSession) ctx.getAttachment();
+        if (!creeperSession.isAuthed()) {
             doAuthentication(ctx, e);
-            if (creeperSessionState.isAuthed()) {
-                gameManager.currentRoomLogic(creeperSessionState, e);
+            if (creeperSession.isAuthed()) {
+                gameManager.currentRoomLogic(creeperSession, e);
             }
         } else {
-            DefaultCommandHandler cmdHandler = new DefaultCommandHandler(gameManager, creeperSessionState, e);
+            DefaultCommandHandler cmdHandler = new DefaultCommandHandler(gameManager, creeperSession, e);
             DefaultCommandType cmdType =
                     (DefaultCommandType) DefaultCommandType.getCommandTypeFromMessage(((String) e.getMessage()));
             cmdHandler.handle(cmdType);
@@ -56,24 +56,24 @@ public class CreeperServerHandler extends SimpleChannelUpstreamHandler {
 
     private void doAuthentication(ChannelHandlerContext ctx, MessageEvent e) {
         String message = (String) e.getMessage();
-        CreeperSessionState creeperSessionState = (CreeperSessionState) ctx.getAttachment();
-        if (creeperSessionState.getState().equals(CreeperSessionState.State.promptedForUsername)) {
-            creeperSessionState.setUsername(Optional.of(message));
-            creeperSessionState.setState(CreeperSessionState.State.promptedForPassword);
+        CreeperSession creeperSession = (CreeperSession) ctx.getAttachment();
+        if (creeperSession.getState().equals(CreeperSession.State.promptedForUsername)) {
+            creeperSession.setUsername(Optional.of(message));
+            creeperSession.setState(CreeperSession.State.promptedForPassword);
             e.getChannel().write("password: ");
             return;
         }
-        if (creeperSessionState.getState().equals(CreeperSessionState.State.promptedForPassword)) {
-            creeperSessionState.setPassword(Optional.of(message));
+        if (creeperSession.getState().equals(CreeperSession.State.promptedForPassword)) {
+            creeperSession.setPassword(Optional.of(message));
         }
-        boolean b = creeperAuthenticator.authenticateAndRegisterPlayer(creeperSessionState.getUsername().get(), creeperSessionState.getPassword().get(), e.getChannel());
+        boolean b = creeperAuthenticator.authenticateAndRegisterPlayer(creeperSession.getUsername().get(), creeperSession.getPassword().get(), e.getChannel());
         if (!b) {
             e.getChannel().write("Auth failed.\r\n");
             e.getChannel().write("username: ");
-            creeperSessionState.setState(CreeperSessionState.State.promptedForUsername);
+            creeperSession.setState(CreeperSession.State.promptedForUsername);
         } else {
-            creeperSessionState.setAuthed(true);
-            creeperSessionState.setState(CreeperSessionState.State.authed);
+            creeperSession.setAuthed(true);
+            creeperSession.setState(CreeperSession.State.authed);
             e.getChannel().write("Welcome to bertha.\r\n");
         }
     }
diff --git a/src/main/java/com/comandante/server/CreeperSessionState.java b/src/main/java/com/comandante/server/CreeperSession.java
similarity index 96%
rename from src/main/java/com/comandante/server/CreeperSessionState.java
rename to src/main/java/com/comandante/server/CreeperSession.java
index 8dc4f7c2720975130b66b271f2f163491828a675..011bafb32aa5afc49a0075ea5bf1a0721c6a0bc6 100644
--- a/src/main/java/com/comandante/server/CreeperSessionState.java
+++ b/src/main/java/com/comandante/server/CreeperSession.java
@@ -2,7 +2,7 @@ package com.comandante.server;
 
 import com.google.common.base.Optional;
 
-public class CreeperSessionState {
+public class CreeperSession {
 
     private Optional<String> username = Optional.absent();
     private Optional<String> password = Optional.absent();