diff --git a/pom.xml b/pom.xml
index 8dfe950a442f393ad26e1a4e5559d1921eea9d9a..413a0d18feb5d31e5e1b55ba0b5dbbffca524cd7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,6 +28,11 @@
             <artifactId>jansi</artifactId>
             <version>1.9</version>
         </dependency>
+      <dependency>
+        <groupId>org.mapdb</groupId>
+        <artifactId>mapdb</artifactId>
+        <version>1.0.6</version>
+      </dependency>
     </dependencies>
 
     <build>
diff --git a/src/main/java/com/comandante/creeper/command/DefaultCommandHandler.java b/src/main/java/com/comandante/creeper/command/DefaultCommandHandler.java
index 582e6a43a2445f2d15de2b80fddfe3106eea84bb..7c45299f6a1531d1b37278540726e22c4e35cd91 100644
--- a/src/main/java/com/comandante/creeper/command/DefaultCommandHandler.java
+++ b/src/main/java/com/comandante/creeper/command/DefaultCommandHandler.java
@@ -46,6 +46,8 @@ public class DefaultCommandHandler {
             case GOSSIP:
                 gameManager.gossip(player, originalMessage.replaceFirst("^gossip ", ""));
                 break;
+            case WHO:
+                gameManager.who(player);
             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 5c2d67589ccfb66b3d43d0b50600e3f9416cdbbe..0c97f248982073c440a7e44333c3be55c7bc4e53 100644
--- a/src/main/java/com/comandante/creeper/command/DefaultCommandType.java
+++ b/src/main/java/com/comandante/creeper/command/DefaultCommandType.java
@@ -12,7 +12,8 @@ public enum DefaultCommandType implements CommandType {
     MOVE_WEST(new HashSet<String>(Arrays.asList("w", "West")), false, "Move west."),
     SAY(new HashSet<String>(Arrays.asList("say")), true, "Say something to the current room."),
     GOSSIP(new HashSet<String>(Arrays.asList("gossip")), true, "Gossip to the entire server."),
-    UNKNOWN(new HashSet<String>(Arrays.asList("gossip")), true, "Gossip to the entire server.");
+    WHO(new HashSet<String>(Arrays.asList("who")), true, "List who is logged into the server."),
+    UNKNOWN(new HashSet<String>(Arrays.asList("")), true, "");
 
     private Set<String> validCommandTriggers;
     private boolean caseSensitive;
diff --git a/src/main/java/com/comandante/creeper/managers/GameManager.java b/src/main/java/com/comandante/creeper/managers/GameManager.java
index d365d82884f9ba77a03dbf24930feb0faa9e9b17..f597b9b94184f67ea0cf200bffd9b73c77d2d9e4 100644
--- a/src/main/java/com/comandante/creeper/managers/GameManager.java
+++ b/src/main/java/com/comandante/creeper/managers/GameManager.java
@@ -70,6 +70,32 @@ public class GameManager {
         return ImmutableSet.copyOf(players);
     }
 
+    public void who(Player player) {
+        Set<Player> allPlayers = getAllPlayers();
+        StringBuilder stringBuilder = new StringBuilder();
+        stringBuilder.append(new Ansi().fg(Ansi.Color.CYAN).toString());
+        stringBuilder.append("User\r\n----\r\n");
+        for (Player allPlayer: allPlayers) {
+            stringBuilder.append(allPlayer.getPlayerName()).append("\r\n");
+        }
+        stringBuilder.append(new Ansi().reset().toString());
+        player.getChannel().write(stringBuilder.toString() + "\r\n");
+    }
+
+    public Set<Player> getAllPlayers() {
+        ImmutableSet.Builder<Player> builder = ImmutableSet.builder();
+        Iterator<Map.Entry<Integer, Room>> rooms = roomManager.getRooms();
+        while (rooms.hasNext()) {
+            Map.Entry<Integer, Room> next = rooms.next();
+            Room room = next.getValue();
+            Set<Player> presentPlayers = getPresentPlayers(room);
+            for (Player player: presentPlayers) {
+                builder.add(player);
+            }
+        }
+        return builder.build();
+    }
+
     public void movePlayer(Movement movement) {
         synchronized (Interners.newStrongInterner()) {
             Room sourceRoom = roomManager.getRoom(movement.getSourceRoomId());
diff --git a/src/main/java/com/comandante/creeper/managers/PlayerManager.java b/src/main/java/com/comandante/creeper/managers/PlayerManager.java
index 759ecbb345ad4108a323afbbaf19e5311971bbc2..ea5a3d7c97456bc2f91c003e011a38b35fc58c84 100644
--- a/src/main/java/com/comandante/creeper/managers/PlayerManager.java
+++ b/src/main/java/com/comandante/creeper/managers/PlayerManager.java
@@ -3,6 +3,8 @@ package com.comandante.creeper.managers;
 
 import com.comandante.creeper.model.Player;
 import org.apache.commons.codec.binary.Base64;
+import org.mapdb.DBMaker;
+import org.mapdb.HTreeMap;
 
 import java.util.Iterator;
 import java.util.concurrent.ConcurrentHashMap;
@@ -16,6 +18,8 @@ public class PlayerManager {
     }
 
     public Player getPlayerByUsername(String username) {
+        HTreeMap<String, Player> objectObjectHTreeMap = DBMaker.newTempHashMap();
+
         return getPlayer(new String(Base64.encodeBase64(username.getBytes())));
     }
 
diff --git a/src/main/java/com/comandante/creeper/server/CreeperSimpleAuthenticator.java b/src/main/java/com/comandante/creeper/server/CreeperSimpleAuthenticator.java
index 454707a9d6f5f4b458062c2a35bbceed1aa616df..424120130b8f3ae54cba63050b6d4e068cf7229d 100644
--- a/src/main/java/com/comandante/creeper/server/CreeperSimpleAuthenticator.java
+++ b/src/main/java/com/comandante/creeper/server/CreeperSimpleAuthenticator.java
@@ -20,10 +20,7 @@ public class CreeperSimpleAuthenticator implements CreeperAuthenticator {
         userMap = new HashMap<String, String>();
         userMap.put("chris", "poop");
         userMap.put("brian", "poop");
-        userMap.put("test1", "poop");
-        userMap.put("test2", "poop");
-        userMap.put("test3", "poop");
-        userMap.put("test4", "poop");
+        userMap.put("sean", "poop");
     }
 
     @Override