diff --git a/src/main/java/com/comandante/creeper/common/FriendlyTime.java b/src/main/java/com/comandante/creeper/common/FriendlyTime.java
index 3ce40b7b9544d9c483926869abe0c0f8feeedfda..7ef02e28b8058d9e9e86d6efc7d669060ea6a68e 100644
--- a/src/main/java/com/comandante/creeper/common/FriendlyTime.java
+++ b/src/main/java/com/comandante/creeper/common/FriendlyTime.java
@@ -84,8 +84,13 @@ public class FriendlyTime {
             if (minutes > 1) {
                 sb.append(minutes).append("m");
             }
-        } else {
+        } else if (minutes > 0) {
+            sb.append(minutes).append("m");
+            if (seconds > 1) {
                 sb.append(seconds).append("s");
+            }
+        } else {
+            sb.append(seconds).append("s");
         }
         return sb.toString();
     }
diff --git a/src/main/java/com/comandante/creeper/player/Player.java b/src/main/java/com/comandante/creeper/player/Player.java
index e585f58b43264b8606b2f4da6b8342ec5a4c15ca..9a06d63da8d9a482709d89e4697863157480c760 100644
--- a/src/main/java/com/comandante/creeper/player/Player.java
+++ b/src/main/java/com/comandante/creeper/player/Player.java
@@ -603,7 +603,7 @@ public class Player extends CreeperEntity {
         if (currentRoom == null) {
             Integer currentRoomId = getPlayerMetadata().getCurrentRoomId();
             if (currentRoomId != null) {
-                return gameManager.getRoomManager().getRoom(currentRoomId);
+                this.currentRoom = gameManager.getRoomManager().getRoom(currentRoomId);
             }
         }
         return currentRoom;
@@ -611,6 +611,7 @@ public class Player extends CreeperEntity {
 
     public void setCurrentRoomAndPersist(Room currentRoom) {
         // Persisting lazily so that performance doesn't suffer.
+        setCurrentRoom(currentRoom);
         gameManager.getEventProcessor().addEvent(() -> {
             synchronized (interner.intern(playerId)) {
                 PlayerMetadata playerMetadata = getPlayerMetadata();
@@ -618,7 +619,6 @@ public class Player extends CreeperEntity {
                 savePlayerMetadata(playerMetadata);
             }
         });
-        setCurrentRoom(currentRoom);
     }
 
     public void setCurrentRoom(Room room) {
diff --git a/src/main/java/com/comandante/creeper/server/auth/GameAuth.java b/src/main/java/com/comandante/creeper/server/auth/GameAuth.java
index 834d32918009e30793439c8d7f07a8dc9e8a13bf..be556c9ad45daf210fa2baa6da3342495b9342d5 100644
--- a/src/main/java/com/comandante/creeper/server/auth/GameAuth.java
+++ b/src/main/java/com/comandante/creeper/server/auth/GameAuth.java
@@ -40,9 +40,11 @@ public class GameAuth implements CreeperAuthenticator {
         Player player = new Player(username, gameManager);
         if (currentRoom != null) {
             player.setCurrentRoomAndPersist(currentRoom);
+            currentRoom.addPresentPlayer(player.getPlayerId());
         } else {
             currentRoom = player.getCurrentRoom();
             if (currentRoom != null) {
+                currentRoom.addPresentPlayer(player.getPlayerId());
                 player.setCurrentRoom(player.getCurrentRoom());
             }
         }
diff --git a/src/main/java/com/comandante/creeper/server/auth/GameAuthorizationAndRegistration.java b/src/main/java/com/comandante/creeper/server/auth/GameAuthorizationAndRegistration.java
new file mode 100644
index 0000000000000000000000000000000000000000..f5611c932ffa9ef79175e9003455a6ed4b5785fb
--- /dev/null
+++ b/src/main/java/com/comandante/creeper/server/auth/GameAuthorizationAndRegistration.java
@@ -0,0 +1,58 @@
+package com.comandante.creeper.server.auth;
+
+import com.comandante.creeper.Main;
+import com.comandante.creeper.core_game.GameManager;
+import com.comandante.creeper.player.Player;
+import com.comandante.creeper.player.PlayerMetadata;
+import com.comandante.creeper.world.model.Room;
+import org.jboss.netty.channel.Channel;
+
+import java.util.Optional;
+
+public class GameAuthorizationAndRegistration implements CreeperAuthenticator {
+
+    private final GameManager gameManager;
+
+    public GameAuthorizationAndRegistration(GameManager gameManager) {
+        this.gameManager = gameManager;
+    }
+
+    @Override
+    public boolean authenticateAndRegisterPlayer(String username, String password, Channel channel) {
+        PlayerMetadata playerMetadata = gameManager.getPlayerManager().getPlayerMetadata(Main.createPlayerId(username));
+        if (playerMetadata == null) {
+            return false;
+        }
+        if (!playerMetadata.getPassword().equals(password)) {
+            return false;
+        }
+        Room currentRoom = null;
+        if (gameManager.getPlayerManager().doesPlayerExist(username)) {
+            currentRoom = gameManager.getPlayerManager().getPlayerByUsername(username).getCurrentRoom();
+            gameManager.getPlayerManager().removePlayer(username);
+        } else {
+            Optional<Room> playerCurrentRoom = gameManager.getRoomManager().getPlayerCurrentRoom(Main.createPlayerId(username));
+            if (playerCurrentRoom.isPresent()) {
+                currentRoom = playerCurrentRoom.get();
+            }
+        }
+
+        Player player = new Player(username, gameManager);
+        if (currentRoom != null) {
+            player.setCurrentRoomAndPersist(currentRoom);
+            currentRoom.addPresentPlayer(player.getPlayerId());
+        } else {
+            currentRoom = player.getCurrentRoom();
+            if (currentRoom != null) {
+                currentRoom.addPresentPlayer(player.getPlayerId());
+                player.setCurrentRoom(player.getCurrentRoom());
+            }
+        }
+        player.setChannel(channel);
+        gameManager.getPlayerManager().addPlayer(player);
+        if (currentRoom == null) {
+            gameManager.placePlayerInLobby(player);
+        }
+        return true;
+    }
+}
diff --git a/src/test/com/comandante/creeper/command/commands/FriendlyTimeTest.java b/src/test/com/comandante/creeper/command/commands/FriendlyTimeTest.java
index 5f2b8567082225c7ef0d95fd7fa4ac1bf3e8f3f3..7ab0aab6d742ee26852fbc258473ad2ec238c80a 100644
--- a/src/test/com/comandante/creeper/command/commands/FriendlyTimeTest.java
+++ b/src/test/com/comandante/creeper/command/commands/FriendlyTimeTest.java
@@ -9,7 +9,7 @@ public class FriendlyTimeTest {
     @Test
     public void testFriendlyParsing() throws Exception {
 
-        FriendlyTime friendlyTime = new FriendlyTime(30949);
+        FriendlyTime friendlyTime = new FriendlyTime(400);
 
         System.out.println("Friendly Long: " + friendlyTime.getFriendlyFormatted());