diff --git a/src/main/java/com/comandante/creeper/command/DefaultCommandHandler.java b/src/main/java/com/comandante/creeper/command/DefaultCommandHandler.java
index 4f3ae61076ab5190be134eb30873074e070b983c..8ccce30c38f4ac7cbaf6af40352fc9e01f7db0f3 100644
--- a/src/main/java/com/comandante/creeper/command/DefaultCommandHandler.java
+++ b/src/main/java/com/comandante/creeper/command/DefaultCommandHandler.java
@@ -55,6 +55,9 @@ public class DefaultCommandHandler {
             case WHOAMI:
                 player.getChannel().write(player.getPlayerName() + "\r\n");
                 break;
+            case HELP:
+                gameManager.getHelpManager().printHelp(player, originalMessage);
+                break;
             case UNKNOWN:
                 gameManager.currentRoomLogic(creeperSession, event);
                 break;
diff --git a/src/main/java/com/comandante/creeper/command/DefaultCommandType.java b/src/main/java/com/comandante/creeper/command/DefaultCommandType.java
index 784f9f344c245cc81cddb47f48e7d86336224b86..6ed5aa439106548730fe334426e4e42f30825063 100644
--- a/src/main/java/com/comandante/creeper/command/DefaultCommandType.java
+++ b/src/main/java/com/comandante/creeper/command/DefaultCommandType.java
@@ -15,6 +15,7 @@ public enum DefaultCommandType implements CommandType {
     GOSSIP(new HashSet<String>(Arrays.asList("gossip")), false, "Gossip to the entire server."),
     WHO(new HashSet<String>(Arrays.asList("who")), false, "List who is logged into the server."),
     WHOAMI(new HashSet<String>(Arrays.asList("whoami")), false, "Who am I?"),
+    HELP(new HashSet<String>(Arrays.asList("help")), false, "This is the help."),
     UNKNOWN(new HashSet<String>(Arrays.asList("")), true, "");
 
     private Set<String> validCommandTriggers;
diff --git a/src/main/java/com/comandante/creeper/managers/GameManager.java b/src/main/java/com/comandante/creeper/managers/GameManager.java
index 4877279bf24cb00281ad663f070ee07cdc313c0d..54fa0a2fd8ef7b8f3afac16f7014ee83f19f1898 100644
--- a/src/main/java/com/comandante/creeper/managers/GameManager.java
+++ b/src/main/java/com/comandante/creeper/managers/GameManager.java
@@ -1,6 +1,7 @@
 package com.comandante.creeper.managers;
 
 
+import com.comandante.creeper.command.DefaultCommandType;
 import com.comandante.creeper.model.Movement;
 import com.comandante.creeper.model.Player;
 import com.comandante.creeper.model.Room;
@@ -34,6 +35,7 @@ public class GameManager {
 
     private final RoomManager roomManager;
     private final PlayerManager playerManager;
+    private final HelpManager helpManager;
     private final NewUserRegistrationManager newUserRegistrationManager;
 
     public NewUserRegistrationManager getNewUserRegistrationManager() {
@@ -44,6 +46,11 @@ public class GameManager {
         this.roomManager = roomManager;
         this.playerManager = playerManager;
         this.newUserRegistrationManager = new NewUserRegistrationManager(playerManager);
+        this.helpManager = new HelpManager();
+    }
+
+    public HelpManager getHelpManager() {
+        return helpManager;
     }
 
     public RoomManager getRoomManager() {
@@ -156,7 +163,21 @@ public class GameManager {
             Room destinationRoom = roomManager.getRoom(movement.getDestinationRoomId());
             sourceRoom.removePresentPlayer(movement.getPlayer().getPlayerId());
             for (Player next : getPresentPlayers(sourceRoom)) {
-                next.getChannel().write(movement.getPlayer().getPlayerName() + " used exit: " + movement.getOriginalMovementCommand() + ".\r\n");
+                StringBuilder sb = new StringBuilder();
+                sb.append(movement.getPlayer().getPlayerName());
+                if (movement.getOriginalMovementCommand().equals(DefaultCommandType.MOVE_NORTH)) {
+                    sb.append(" exited to the north.");
+                } else if (movement.getOriginalMovementCommand().equals(DefaultCommandType.MOVE_EAST)) {
+                    sb.append(" exited to the east.");
+                } else if (movement.getOriginalMovementCommand().equals(DefaultCommandType.MOVE_SOUTH)) {
+                    sb.append(" exited to the south.");
+                } else if (movement.getOriginalMovementCommand().equals(DefaultCommandType.MOVE_WEST)) {
+                    sb.append(" exited to the west.");
+                } else {
+                    sb.append(" exited.");
+                }
+                sb.append("\r\n");
+            next.getChannel().write(sb.toString());
             }
             for (Player next : getPresentPlayers(destinationRoom)) {
                 next.getChannel().write(movement.getPlayer().getPlayerName() + " arrived.\r\n");
@@ -216,7 +237,7 @@ public class GameManager {
 
     private void printExits(Room room, Channel channel) {
         StringBuilder stringBuilder = new StringBuilder();
-        stringBuilder.append("move: ");
+        stringBuilder.append("exits: ");
         stringBuilder.append(new Ansi().fg(Ansi.Color.BLUE).toString());
         if (room.getNorthId().isPresent()) {
             stringBuilder.append("north ");
diff --git a/src/main/java/com/comandante/creeper/managers/HelpManager.java b/src/main/java/com/comandante/creeper/managers/HelpManager.java
index 65ebb3c0d103c216dc610651af732de1958095ae..2a5c4c9790d15c81640a02257cf82945d19b47c3 100644
--- a/src/main/java/com/comandante/creeper/managers/HelpManager.java
+++ b/src/main/java/com/comandante/creeper/managers/HelpManager.java
@@ -1,7 +1,23 @@
 package com.comandante.creeper.managers;
 
 
-public class HelpManager {
+import com.comandante.creeper.command.DefaultCommandType;
+import com.comandante.creeper.model.Player;
+import org.fusesource.jansi.Ansi;
 
+public class HelpManager {
 
+    public void printHelp(Player player, String originalMessage) {
+        StringBuilder sb = new StringBuilder();
+        DefaultCommandType[] values = DefaultCommandType.values();
+        sb.append(new Ansi().bg(Ansi.Color.RED).toString());
+        for (DefaultCommandType defaultCommandType : values) {
+            if (defaultCommandType.equals(DefaultCommandType.UNKNOWN)) {
+                continue;
+            }
+            sb.append(defaultCommandType.getValidCommandTriggers()).append(" ").append(defaultCommandType.getDescription()).append("\r\n");
+        }
+        sb.append(new Ansi().reset().toString()).append("\r\n");
+        player.getChannel().write(sb.toString());
+    }
 }
diff --git a/src/main/java/com/comandante/creeper/managers/NewUserRegistrationManager.java b/src/main/java/com/comandante/creeper/managers/NewUserRegistrationManager.java
index 642c242010c6394f2b3874941733a46921ebfc09..5910c44606c906aaa2748df14deef87d07c84935 100644
--- a/src/main/java/com/comandante/creeper/managers/NewUserRegistrationManager.java
+++ b/src/main/java/com/comandante/creeper/managers/NewUserRegistrationManager.java
@@ -50,7 +50,13 @@ public class NewUserRegistrationManager {
     }
 
     private void createUser(CreeperSession session, MessageEvent e) {
-        session.setPassword(Optional.of((String) e.getMessage()));
+        String password = (String) e.getMessage();
+        if (password.length() < 8) {
+            e.getChannel().write("Passwords must be at least 8 characters.\r\n");
+            newUserRegistrationFlow(session, e);
+            return;
+        }
+        session.setPassword(Optional.of(password));
         PlayerMetadata playerMetadata = new PlayerMetadata(session.getUsername().get(), session.getPassword().get(), new Player(session.getUsername().get()).getPlayerId());
         playerManager.savePlayerMetadata(playerMetadata);
         e.getChannel().write("User created.\r\n");
diff --git a/src/main/java/com/comandante/creeper/server/CreeperServerHandler.java b/src/main/java/com/comandante/creeper/server/CreeperServerHandler.java
index cd282fbe14d659f80f6d50ac7a43f7c05cee3ee5..f9c9d18ea5b12c952b552f0bf64d21d4dc3109cf 100644
--- a/src/main/java/com/comandante/creeper/server/CreeperServerHandler.java
+++ b/src/main/java/com/comandante/creeper/server/CreeperServerHandler.java
@@ -4,6 +4,7 @@ import com.comandante.creeper.command.DefaultCommandHandler;
 import com.comandante.creeper.command.DefaultCommandType;
 import com.comandante.creeper.managers.GameManager;
 import com.google.common.base.Optional;
+import org.fusesource.jansi.Ansi;
 import org.jboss.netty.channel.ChannelEvent;
 import org.jboss.netty.channel.ChannelHandlerContext;
 import org.jboss.netty.channel.ChannelStateEvent;
@@ -31,9 +32,15 @@ public class CreeperServerHandler extends SimpleChannelUpstreamHandler {
 
     @Override
     public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
-//        e.getChannel().write("\r\n\r\n\r\n\r\n" + GameManager.LOGO + "\r\n" + GameManager.VERSION + "\r\n\r\n\r\n\r\n");
-        e.getChannel().write("First time here? Type \"new\".\r\n");
-        e.getChannel().write("username: ");
+        StringBuilder stringBuilder = new StringBuilder();
+        stringBuilder
+                .append(new Ansi().bg(Ansi.Color.GREEN).toString())
+                .append(new Ansi().fg(Ansi.Color.BLACK))
+                .append("\r\n\r\n\r\n\r\n" + GameManager.LOGO + "\r\n" + GameManager.VERSION + "\r\n\r\n\r\n\r\n")
+                .append(new Ansi().reset().toString() + "\r\n")
+                .append("First time here? Type \"new\".\r\n")
+                .append("username: ");
+        e.getChannel().write(stringBuilder.toString());
         CreeperSession creeperSession = new CreeperSession();
         creeperSession.setState(CreeperSession.State.promptedForUsername);
         ctx.setAttachment(creeperSession);