diff --git a/src/main/java/com/comandante/creeper/Items/ItemSpawner.java b/src/main/java/com/comandante/creeper/Items/ItemSpawner.java
index e4e2309d803ea52da2ee8dd746bfee78572360de..76e081066d2ef6fd3b55547df5d6835c1eee11c6 100644
--- a/src/main/java/com/comandante/creeper/Items/ItemSpawner.java
+++ b/src/main/java/com/comandante/creeper/Items/ItemSpawner.java
@@ -21,7 +21,7 @@ public class ItemSpawner extends CreeperEntity {
         this.gameManager = gameManager;
     }
 
-    public void incTicks(){
+    public void incTicks() {
         noTicks++;
     }
 
@@ -32,33 +32,49 @@ public class ItemSpawner extends CreeperEntity {
     @Override
     public void run() {
         incTicks();
-        int numberCurrentlyInRoom = 0;
         if (noTicks >= itemSpawnRule.getSpawnIntervalTicks()) {
-            Set<String> itemIds = gameManager.getRoomManager().getRoom(roomId).getItemIds();
-            for (String i: itemIds) {
-                Item currentItem = gameManager.getEntityManager().getItemEntity(i);
-                ItemType currentItemType = ItemType.itemTypeFromCode(currentItem.getItemTypeId());
-                if (currentItemType.equals(spawnItemType)) {
-                    numberCurrentlyInRoom++;
-                }
+            if (itemSpawnRule.getRandomChance().isPresent()) {
+                processRandom();
+            } else {
+                processNormal();
             }
-            while (numberCurrentlyInRoom < itemSpawnRule.getMaxPerRoom()) {
-                if (itemSpawnRule.getRandomChance().isPresent()) {
-                     if (random.nextInt(100) < itemSpawnRule.getRandomChance().get()) {
-                         Item item = spawnItemType.create();
-                         gameManager.getEntityManager().addItem(item);
-                         gameManager.placeItemInRoom(roomId, item.getItemId());
-                         numberCurrentlyInRoom++;
-                         continue;
-                     }
-                    Item item = spawnItemType.create();
-                    gameManager.getEntityManager().addItem(item);
-                    gameManager.placeItemInRoom(roomId, item.getItemId());
-                    numberCurrentlyInRoom++;
-                }
+        }
+    }
+
+    private void processRandom() {
+        int randomPercentage = itemSpawnRule.getRandomChance().get();
+        int numberOfAttempts = itemSpawnRule.getMaxPerRoom() - countNumberInRoom();
+        for (int i = 0; i < numberOfAttempts; i++) {
+            if (random.nextInt(100) < randomPercentage) {
+                createAndAddItem();
             }
         }
     }
 
+    private void processNormal() {
+        int numberToCreate = itemSpawnRule.getMaxPerRoom() - countNumberInRoom();
+        for (int i = 0; i < numberToCreate; i++) {
+            createAndAddItem();
+        }
+    }
+
+    private int countNumberInRoom() {
+        int numberCurrentlyInRoom = 0;
+        Set<String> itemIds = gameManager.getRoomManager().getRoom(roomId).getItemIds();
+        for (String i : itemIds) {
+            Item currentItem = gameManager.getEntityManager().getItemEntity(i);
+            ItemType currentItemType = ItemType.itemTypeFromCode(currentItem.getItemTypeId());
+            if (currentItemType.equals(spawnItemType)) {
+                numberCurrentlyInRoom++;
+            }
+        }
+        return numberCurrentlyInRoom;
+    }
+
+    private void createAndAddItem() {
+        Item item = spawnItemType.create();
+        gameManager.getEntityManager().addItem(item);
+        gameManager.placeItemInRoom(roomId, item.getItemId());
+    }
 
 }
diff --git a/src/main/java/com/comandante/creeper/builder/RoomBuilders.java b/src/main/java/com/comandante/creeper/builder/RoomBuilders.java
index ee1e70041b70ef7957a1e0971f0804d9a0d37e33..5be7fc8486c57629102cc8c85d49c1c1ed9b28b2 100644
--- a/src/main/java/com/comandante/creeper/builder/RoomBuilders.java
+++ b/src/main/java/com/comandante/creeper/builder/RoomBuilders.java
@@ -27,7 +27,7 @@ public class RoomBuilders {
                 Optional.<Integer>absent(),
                 "You are standing before the Federation Training Encampment. A huge wall surrounds the base. To the north you see a two doors leading inside. Above the doors you sits the symbol of the Federation, a single red star with five points and a raised fist in the center. Sentries along the encampment walls begin to eye you suspiciously. You then remember that malingering in front of a Federation base could prove to be a fatal mistake.\r\n");
 
-        basicRoom.addItemSpawner(new ItemSpawner(ItemType.BEER, new ItemSpawnRule(10, 3), gameManager));
+        basicRoom.addItemSpawner(new ItemSpawner(ItemType.BEER, new ItemSpawnRule(2, 3), gameManager));
         basicRoom.addItemSpawner(new ItemSpawner(ItemType.KEY, new ItemSpawnRule(5, 1, 10), gameManager));
         entityManager.addEntity(basicRoom);