diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml
index 51d76e68c9389cd7221adcb2c6f9332663c0512a..5c1e203739236dd53dd5a57d9c7c4fbfb525537c 100644
--- a/dependency-reduced-pom.xml
+++ b/dependency-reduced-pom.xml
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.comandante</groupId>
   <artifactId>creeper</artifactId>
diff --git a/src/main/java/com/comandante/creeper/RandomMOTD.java b/src/main/java/com/comandante/creeper/RandomMOTD.java
new file mode 100644
index 0000000000000000000000000000000000000000..aa23748fd1c137a25050437f02cc965eb7095625
--- /dev/null
+++ b/src/main/java/com/comandante/creeper/RandomMOTD.java
@@ -0,0 +1,7 @@
+package com.comandante.creeper;
+
+
+public class RandomMOTD {
+
+
+}
diff --git a/src/main/java/com/comandante/creeper/command/DefaultCommandHandler.java b/src/main/java/com/comandante/creeper/command/DefaultCommandHandler.java
index 079d690d398cb915a27e442ec96e591832cdd727..e7c3cd9d4719b1955999e3b05d59e94465d31dcb 100644
--- a/src/main/java/com/comandante/creeper/command/DefaultCommandHandler.java
+++ b/src/main/java/com/comandante/creeper/command/DefaultCommandHandler.java
@@ -4,6 +4,8 @@ package com.comandante.creeper.command;
 import com.comandante.creeper.command.commands.DropCommand;
 import com.comandante.creeper.command.commands.GossipCommand;
 import com.comandante.creeper.command.commands.InventoryCommand;
+import com.comandante.creeper.command.commands.KillCommand;
+import com.comandante.creeper.command.commands.LookCommand;
 import com.comandante.creeper.command.commands.MovementCommand;
 import com.comandante.creeper.command.commands.PickUpCommand;
 import com.comandante.creeper.command.commands.SayCommand;
@@ -62,11 +64,16 @@ public class DefaultCommandHandler {
         } else if (DropCommand.validTriggers.contains(rootCommand)) {
             DropCommand dropCommand = new DropCommand(playerId, gameManager, originalMessage, creeperSession);
             commandService.processCommand(dropCommand);
+        } else if (LookCommand.validTriggers.contains(rootCommand)) {
+            LookCommand lookCommand = new LookCommand(playerId, gameManager, originalMessage);
+            commandService.processCommand(lookCommand);
+        } else if (KillCommand.validTriggers.contains(rootCommand)) {
+            KillCommand killCommand = new KillCommand(playerId, gameManager, originalMessage, gameManager.getFightManager());
+            commandService.processCommand(killCommand);
         } else {
             UnknownCommand unknownCommand = new UnknownCommand(playerId, gameManager, originalMessage);
             commandService.processCommand(unknownCommand);
         }
-
     }
 }
 
diff --git a/src/main/java/com/comandante/creeper/command/commands/KillCommand.java b/src/main/java/com/comandante/creeper/command/commands/KillCommand.java
new file mode 100644
index 0000000000000000000000000000000000000000..e19a4b9cce4feb74f332846fae83b1612133d05b
--- /dev/null
+++ b/src/main/java/com/comandante/creeper/command/commands/KillCommand.java
@@ -0,0 +1,51 @@
+package com.comandante.creeper.command.commands;
+
+import com.comandante.creeper.managers.GameManager;
+import com.comandante.creeper.model.FightManager;
+import com.comandante.creeper.model.Player;
+import com.comandante.creeper.model.Room;
+import com.comandante.creeper.npc.Npc;
+import com.google.common.base.Joiner;
+import com.google.common.collect.ImmutableList;
+
+import java.util.ArrayList;
+import java.util.Set;
+
+public class KillCommand extends Command {
+
+    private final static String helpDescription = "Kill a NPC.";
+    public final static ImmutableList validTriggers = new ImmutableList.Builder<String>().add(
+            "kill".toLowerCase(),
+            "k".toLowerCase()
+    ).build();
+    private final static boolean isCaseSensitiveTriggers = false;
+    private final FightManager fightManager;
+
+    public KillCommand(String playerId, GameManager gameManager, String originalMessage, FightManager fightManager) {
+        super(playerId, gameManager, helpDescription, validTriggers, isCaseSensitiveTriggers, originalMessage);
+        this.fightManager = fightManager;
+    }
+
+    @Override
+    public void run() {
+
+        Player player = getGameManager().getPlayerManager().getPlayer(getPlayerId());
+        ArrayList<String> originalMessageParts = getOriginalMessageParts();
+        if (originalMessageParts.size() == 1) {
+            commandWrite("You need to specify who you want to kill.");
+            return;
+        }
+        originalMessageParts.remove(0);
+        String target = Joiner.on(" ").join(originalMessageParts);
+        Room playerCurrentRoom = getGameManager().getRoomManager().getPlayerCurrentRoom(player).get();
+        Set<String> npcIds = playerCurrentRoom.getNpcIds();
+        for (String npcId: npcIds) {
+            Npc npcEntity = getGameManager().getEntityManager().getNpcEntity(npcId);
+            if (npcEntity.getName().equals(target)) {
+                fightManager.fight(player, npcEntity);
+                return;
+            }
+        }
+        commandWrite("There's no NPC here to kill by that name.");
+    }
+}
diff --git a/src/main/java/com/comandante/creeper/command/commands/LookCommand.java b/src/main/java/com/comandante/creeper/command/commands/LookCommand.java
new file mode 100644
index 0000000000000000000000000000000000000000..ee286d437633125ddcb4b2a7939f16fec2285b2b
--- /dev/null
+++ b/src/main/java/com/comandante/creeper/command/commands/LookCommand.java
@@ -0,0 +1,45 @@
+package com.comandante.creeper.command.commands;
+
+import com.comandante.creeper.managers.GameManager;
+import com.comandante.creeper.model.Player;
+import com.comandante.creeper.model.Room;
+import com.google.common.base.Joiner;
+import com.google.common.collect.ImmutableList;
+
+import java.util.ArrayList;
+import java.util.Set;
+
+public class LookCommand extends Command {
+
+    private final static String helpDescription = "Examine an item or other entity.";
+    public final static ImmutableList validTriggers = new ImmutableList.Builder<String>().add(
+            "look".toLowerCase(),
+            "l".toLowerCase()
+    ).build();
+    private final static boolean isCaseSensitiveTriggers = false;
+
+    public LookCommand(String playerId, GameManager gameManager, String originalMessage) {
+        super(playerId, gameManager, helpDescription, validTriggers, isCaseSensitiveTriggers, originalMessage);
+    }
+
+    @Override
+    public void run() {
+        ArrayList<String> originalMessageParts = getOriginalMessageParts();
+        if (originalMessageParts.size() == 1) {
+            getGameManager().currentRoomLogic(getPlayerId());
+            return;
+        }
+        originalMessageParts.remove(0);
+        String target = Joiner.on(" ").join(originalMessageParts);
+        //Players
+        Player player = getGameManager().getPlayerManager().getPlayer(getPlayerId());
+        Room playerCurrentRoom = getGameManager().getRoomManager().getPlayerCurrentRoom(player).get();
+        Set<String> presentPlayerIds = playerCurrentRoom.getPresentPlayerIds();
+        for (String presentPlayerId: presentPlayerIds) {
+            Player presentPlayer = getGameManager().getPlayerManager().getPlayer(presentPlayerId);
+            if (presentPlayer.getPlayerName().equals(target)) {
+                commandWrite(getGameManager().getPlayerManager().getLookString(player));
+            }
+        }
+    }
+}
diff --git a/src/main/java/com/comandante/creeper/command/commands/UnknownCommand.java b/src/main/java/com/comandante/creeper/command/commands/UnknownCommand.java
index b92ad687b86777f705850491f1538e73e078c5de..bf75b972607110f1613868a289ef693d6568d2b6 100644
--- a/src/main/java/com/comandante/creeper/command/commands/UnknownCommand.java
+++ b/src/main/java/com/comandante/creeper/command/commands/UnknownCommand.java
@@ -16,6 +16,6 @@ public class UnknownCommand extends Command {
 
     @Override
     public void run() {
-        getGameManager().currentRoomLogic(getPlayerId());
+        getGameManager().getChannelUtils().writeOnlyPrompt(getPlayerId());
     }
 }
diff --git a/src/main/java/com/comandante/creeper/managers/GameManager.java b/src/main/java/com/comandante/creeper/managers/GameManager.java
index 90e38c77530c5ba49e3aa6451b50e1257e39e8b2..7fdc731ac3a1d19b15d912af19f31efbf5a0298a 100644
--- a/src/main/java/com/comandante/creeper/managers/GameManager.java
+++ b/src/main/java/com/comandante/creeper/managers/GameManager.java
@@ -3,6 +3,7 @@ package com.comandante.creeper.managers;
 
 import com.comandante.creeper.Items.Item;
 import com.comandante.creeper.Items.ItemDecayManager;
+import com.comandante.creeper.model.FightManager;
 import com.comandante.creeper.model.Movement;
 import com.comandante.creeper.model.Player;
 import com.comandante.creeper.model.Room;
@@ -19,7 +20,9 @@ import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
 
-import static com.comandante.creeper.model.Color.*;
+import static com.comandante.creeper.model.Color.BRIGHT_GREEN;
+import static com.comandante.creeper.model.Color.GREEN;
+import static com.comandante.creeper.model.Color.RESET;
 
 public class GameManager {
 
@@ -61,6 +64,7 @@ public class GameManager {
     private final NewUserRegistrationManager newUserRegistrationManager;
     private final EntityManager entityManager;
     private final ItemDecayManager itemDecayManager;
+    private final FightManager fightManager;
 
     public GameManager(RoomManager roomManager, PlayerManager playerManager, EntityManager entityManager) {
         this.roomManager = roomManager;
@@ -70,7 +74,11 @@ public class GameManager {
         this.entityManager.addEntity(itemDecayManager);
         this.newUserRegistrationManager = new NewUserRegistrationManager(playerManager);
         this.channelUtils = new ChannelUtils(getPlayerManager(), getRoomManager());
+        this.fightManager = new FightManager(channelUtils, entityManager, roomManager, playerManager);
+    }
 
+    public FightManager getFightManager() {
+        return fightManager;
     }
 
     public NewUserRegistrationManager getNewUserRegistrationManager() {
diff --git a/src/main/java/com/comandante/creeper/managers/NewUserRegistrationManager.java b/src/main/java/com/comandante/creeper/managers/NewUserRegistrationManager.java
index a21ff3918e79151becb87de22f8d659f091098e8..7e188150ee47f8c8002daac12ae878e699da1e05 100644
--- a/src/main/java/com/comandante/creeper/managers/NewUserRegistrationManager.java
+++ b/src/main/java/com/comandante/creeper/managers/NewUserRegistrationManager.java
@@ -3,7 +3,7 @@ package com.comandante.creeper.managers;
 
 import com.comandante.creeper.model.Player;
 import com.comandante.creeper.model.PlayerMetadata;
-import com.comandante.creeper.model.StatsBuilder;
+import com.comandante.creeper.model.PlayerStats;
 import com.comandante.creeper.server.CreeperSession;
 import com.google.common.base.Optional;
 import org.jboss.netty.channel.MessageEvent;
@@ -58,7 +58,7 @@ public class NewUserRegistrationManager {
             return;
         }
         session.setPassword(Optional.of(password));
-        PlayerMetadata playerMetadata = new PlayerMetadata(session.getUsername().get(), session.getPassword().get(), new Player(session.getUsername().get()).getPlayerId(), new StatsBuilder().setStrength(7).setWillpower(8).setAim(6).setAgile(5).setArmorRating(4).setMeleSkill(10).setHealth(100).setWeaponRatingMin(10).setWeaponRatingMax(20).setNumberweaponOfRolls(1).createStats());
+        PlayerMetadata playerMetadata = new PlayerMetadata(session.getUsername().get(), session.getPassword().get(), new Player(session.getUsername().get()).getPlayerId(), PlayerStats.DEFAULT_PLAYER.createStats());
         playerManager.savePlayerMetadata(playerMetadata);
         e.getChannel().write("User created.\r\n");
         session.setState(CreeperSession.State.newUserRegCompleted);
diff --git a/src/main/java/com/comandante/creeper/managers/PlayerManager.java b/src/main/java/com/comandante/creeper/managers/PlayerManager.java
index 6a7e32c35000bc3fa21b4c1c3b101dc7cd83e970..6d8e92bb11a583c00ae3ada4a4ebfdef3a5e5e3d 100644
--- a/src/main/java/com/comandante/creeper/managers/PlayerManager.java
+++ b/src/main/java/com/comandante/creeper/managers/PlayerManager.java
@@ -1,10 +1,11 @@
 package com.comandante.creeper.managers;
 
 
-import com.comandante.creeper.model.PlayerMetadataSerializer;
 import com.comandante.creeper.model.Player;
 import com.comandante.creeper.model.PlayerMetadata;
+import com.comandante.creeper.model.PlayerMetadataSerializer;
 import com.comandante.creeper.model.Room;
+import com.comandante.creeper.model.Stats;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Sets;
 import org.apache.commons.codec.binary.Base64;
@@ -111,4 +112,10 @@ public class PlayerManager {
         return players.containsKey(new String(Base64.encodeBase64(username.getBytes())));
     }
 
+    public String getLookString(Player player) {
+        PlayerMetadata playerMetadata = getPlayerMetadata(player.getPlayerId());
+        Stats playerStats = playerMetadata.getStats();
+        return playerStats.toString();
+    }
+
 }
diff --git a/src/main/java/com/comandante/creeper/model/FightManager.java b/src/main/java/com/comandante/creeper/model/FightManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..7fe1f3cd1626d7a4db5fff2ec81dc947e61fd407
--- /dev/null
+++ b/src/main/java/com/comandante/creeper/model/FightManager.java
@@ -0,0 +1,108 @@
+package com.comandante.creeper.model;
+
+import com.comandante.creeper.managers.EntityManager;
+import com.comandante.creeper.managers.PlayerManager;
+import com.comandante.creeper.managers.RoomManager;
+import com.comandante.creeper.npc.Npc;
+import com.comandante.creeper.server.ChannelUtils;
+
+import java.util.Random;
+
+public class FightManager {
+
+    private final PlayerManager playerManager;
+    private final RoomManager roomManager;
+    private final EntityManager entityManager;
+    private final ChannelUtils channelUtils;
+    private static final Random random = new Random();
+
+    public FightManager(ChannelUtils channelUtils, EntityManager entityManager, RoomManager roomManager, PlayerManager playerManager) {
+        this.channelUtils = channelUtils;
+        this.entityManager = entityManager;
+        this.roomManager = roomManager;
+        this.playerManager = playerManager;
+    }
+
+    public void fight(Player player, Npc npc) {
+        PlayerMetadata playerMetadata = playerManager.getPlayerMetadata(player.getPlayerId());
+        Stats npcStats = npc.getStats();
+        Stats playerStats = playerMetadata.getStats();
+
+        while (npcStats.getHealth() > 0) {
+            if (playerStats.getHealth() <= 0) {
+                break;
+            }
+            fightTurn(playerStats, npcStats, 3, player, npc);
+        }
+
+        playerManager.savePlayerMetadata(playerMetadata);
+
+        if (playerStats.getHealth() <= 0) {
+            channelUtils.write(player.getPlayerId(), "You died.");
+            return;
+        }
+
+        if (npcStats.getHealth() <= 0) {
+            channelUtils.write(player.getPlayerId(), "You killed " + npc.getName());
+            return;
+        }
+    }
+
+    public void fightTurn(Stats challenger, Stats victim, int numRoundsPerTurns, Player player, Npc npc) {
+        for (int i = 0; i < numRoundsPerTurns; i++) {
+            if (challenger.getHealth() <= 0 || victim.getHealth() <= 0) {
+                return;
+            }
+            fightRound(challenger, victim, player, npc);
+        }
+    }
+
+    public void fightRound(Stats challenger, Stats victim, Player player, Npc npc) {
+        int chanceToHit = getChanceToHit(challenger, victim);
+        int damageToVictim = 0;
+        if (randInt(0, 100) < chanceToHit) {
+            damageToVictim = getAttack(challenger, victim);
+        }
+        if (damageToVictim > 0) {
+            doDamage(victim, damageToVictim);
+            channelUtils.writeNoPrompt(player.getPlayerId(), damageToVictim + " damage done to " + npc.getName());
+        } else {
+            channelUtils.writeNoPrompt(player.getPlayerId(), "You miss " + npc.getName());
+        }
+        if (victim.getHealth() <= 0) {
+            return;
+        }
+        int chanceToHitBack = getChanceToHit(victim, challenger);
+        int damageBack = getAttack(victim, challenger);
+        if (randInt(0, 100) < chanceToHitBack) {
+            doDamage(challenger, damageBack);
+            channelUtils.writeNoPrompt(player.getPlayerId(), npc.getName() + " damages you for " + damageBack);
+        } else {
+            channelUtils.writeNoPrompt(player.getPlayerId(), npc.getName() + " misses you");
+        }
+    }
+
+    private static void doDamage(Stats stats, int damageAmount) {
+        stats.setHealth(stats.getHealth() - damageAmount);
+    }
+
+    private static int getChanceToHit(Stats challenger, Stats victim) {
+        return (challenger.getStrength() + challenger.getMeleSkill()) * 5 - victim.getAgile() * 5;
+    }
+
+    private static int getAttack(Stats challenger, Stats victim) {
+        int rolls = 0;
+        int totDamage = 0;
+        while (rolls <= challenger.getNumberweaponOfRolls()) {
+            rolls++;
+            totDamage = totDamage + randInt(challenger.getWeaponRatingMin(), challenger.getWeaponRatingMax());
+        }
+        return challenger.getStrength() + totDamage - victim.getArmorRating();
+    }
+
+    private static int randInt(int min, int max) {
+        return random.nextInt((max - min) + 1) + min;
+    }
+
+}
+
diff --git a/src/main/java/com/comandante/creeper/model/FightResults.java b/src/main/java/com/comandante/creeper/model/FightResults.java
new file mode 100644
index 0000000000000000000000000000000000000000..67c32351a39d9f019220fbc9fe623c00bf0290b6
--- /dev/null
+++ b/src/main/java/com/comandante/creeper/model/FightResults.java
@@ -0,0 +1,11 @@
+package com.comandante.creeper.model;
+
+public class FightResults {
+    private final Stats challenger;
+    private final Stats victim;
+
+    public FightResults(Stats challenger, Stats victim) {
+        this.challenger = challenger;
+        this.victim = victim;
+    }
+}
diff --git a/src/main/java/com/comandante/creeper/model/NpcStats.java b/src/main/java/com/comandante/creeper/model/NpcStats.java
index 8bf763beab28d569c34771363cfaac5731a23ac6..3e5925755f1e6cd896dd693e97ae0b9927511e21 100644
--- a/src/main/java/com/comandante/creeper/model/NpcStats.java
+++ b/src/main/java/com/comandante/creeper/model/NpcStats.java
@@ -1,7 +1,7 @@
 package com.comandante.creeper.model;
 
 public class NpcStats {
-    public final static Stats JOE_NPC = new StatsBuilder()
+    public final static StatsBuilder JOE_NPC = new StatsBuilder()
             .setStrength(5)
             .setWillpower(1)
             .setAim(1)
@@ -11,17 +11,5 @@ public class NpcStats {
             .setHealth(100)
             .setWeaponRatingMin(5)
             .setWeaponRatingMax(10)
-            .setNumberweaponOfRolls(1).createStats();
-
-    public final static Stats ANOTHER_DOUCHER = new StatsBuilder()
-            .setStrength(5)
-            .setWillpower(1)
-            .setAim(1)
-            .setAgile(1)
-            .setArmorRating(5)
-            .setMeleSkill(5)
-            .setHealth(100)
-            .setWeaponRatingMin(5)
-            .setWeaponRatingMax(10)
-            .setNumberweaponOfRolls(1).createStats();
+            .setNumberweaponOfRolls(1);
 }
diff --git a/src/main/java/com/comandante/creeper/model/PlayerMetadata.java b/src/main/java/com/comandante/creeper/model/PlayerMetadata.java
index 63065166c55f2478b6309506cbad4ba4f2bc6c74..95aedbc6d175f3b0bcadb3934da0f8c50a681e23 100644
--- a/src/main/java/com/comandante/creeper/model/PlayerMetadata.java
+++ b/src/main/java/com/comandante/creeper/model/PlayerMetadata.java
@@ -8,26 +8,12 @@ import java.util.List;
 
 public class PlayerMetadata implements Serializable {
 
-    String playerName;
-    String password;
-    String playerId;
+    private String playerName;
+    private String password;
+    private String playerId;
     Stats stats;
     String[] inventory;
 
-    /*STRENGTH -
-WILLPOWER - HEALTH REGENATION HOW EFFECTIVE HEALING DEVICES ARE
-                - INCREASES CHANCE OF CRITICAL
-ENDURANCE - INCREASE TOTAL HEALTH
-        -RATE AT WHICH NATURAL TICK HEALTH REGENATION WORKS
-        - RATE OF MOVEMENT
-AIM - CHANCE TO HIT
-        AND DAMAGE PER HIT INCREASE
-AGILE - CRITICAL CHANCE INCREASE
-        - FLEE INCREASE
-        - DODGE/PARRY INCREASE
-
-*/
-
     public PlayerMetadata(String playerName, String password, String playerId, Stats stats) {
         this.playerName = playerName;
         this.password = password;
@@ -87,4 +73,8 @@ AGILE - CRITICAL CHANCE INCREASE
     public void setPlayerId(String playerId) {
         this.playerId = playerId;
     }
+
+    public Stats getStats() {
+        return stats;
+    }
 }
diff --git a/src/main/java/com/comandante/creeper/model/PlayerStats.java b/src/main/java/com/comandante/creeper/model/PlayerStats.java
new file mode 100644
index 0000000000000000000000000000000000000000..627298acf0484024a2f238ebccb1b3df9016434a
--- /dev/null
+++ b/src/main/java/com/comandante/creeper/model/PlayerStats.java
@@ -0,0 +1,17 @@
+package com.comandante.creeper.model;
+
+
+public class PlayerStats {
+
+    public final static StatsBuilder DEFAULT_PLAYER = new StatsBuilder()
+            .setStrength(10)
+            .setWillpower(1)
+            .setAim(1)
+            .setAgile(1)
+            .setArmorRating(2)
+            .setMeleSkill(10)
+            .setHealth(100)
+            .setWeaponRatingMin(10)
+            .setWeaponRatingMax(20)
+            .setNumberweaponOfRolls(1);
+}
diff --git a/src/main/java/com/comandante/creeper/model/Stats.java b/src/main/java/com/comandante/creeper/model/Stats.java
index 5f75aae1d5e76c5ac1598a67fd8b15f401a9b9d9..48843191f78f256786ebeccfe1c909f4e2d0c37b 100644
--- a/src/main/java/com/comandante/creeper/model/Stats.java
+++ b/src/main/java/com/comandante/creeper/model/Stats.java
@@ -1,29 +1,29 @@
 package com.comandante.creeper.model;
 
 import java.io.Serializable;
-import java.util.Random;
 
 public class Stats implements Serializable {
-    int strength;
-    int willpower;
-    int aim;
-    int agile;
-    int armorRating;
-    int meleSkill;
-    int health;
-    int weaponRatingMax;
-    int weaponRatingMin;
-    int numberweaponOfRolls;
-
-    public static int NO_TURNS = 0;
-    public static int NO_HITS_CHALLENGER = 0;
-    public static int NO_HITS_VICTIM = 0;
-    public static int NO_MISSES_CHALLENGER = 0;
-    public static int NO_MISSES_VICTIM = 0;
-    public static int TOTAL_DAMAGE_CHALLENGER = 0;
-    public static int TOTAL_DAMAGE_VICTIM = 0;
-
-    public Stats(int strength, int willpower, int aim, int agile, int armorRating, int meleSkill, int health, int weaponRatingMin, int weaponRatingMax, int numberweaponOfRolls) {
+    private int strength;
+    private int willpower;
+    private int aim;
+    private int agile;
+    private int armorRating;
+    private int meleSkill;
+    private int health;
+    private int weaponRatingMax;
+    private int weaponRatingMin;
+    private int numberweaponOfRolls;
+
+    public Stats(int strength,
+                 int willpower,
+                 int aim,
+                 int agile,
+                 int armorRating,
+                 int meleSkill,
+                 int health,
+                 int weaponRatingMax,
+                 int weaponRatingMin,
+                 int numberweaponOfRolls) {
         this.strength = strength;
         this.willpower = willpower;
         this.aim = aim;
@@ -36,9 +36,6 @@ public class Stats implements Serializable {
         this.numberweaponOfRolls = numberweaponOfRolls;
     }
 
-    public Stats() {
-    }
-
     public int getStrength() {
         return strength;
     }
@@ -119,119 +116,19 @@ public class Stats implements Serializable {
         this.numberweaponOfRolls = numberweaponOfRolls;
     }
 
-    public static void main(String[] args) throws InterruptedException {
-        int totalChallengerWin = 0;
-        int totalVictimWin = 0;
-        int NUM_EXECUTION = 30000;
-        for (int i = 0; i < NUM_EXECUTION; i++) {
-            boolean results = fight(
-                    new StatsBuilder()
-                            .setStrength(10)
-                            .setWillpower(1)
-                            .setAim(1)
-                            .setAgile(1)
-                            .setArmorRating(2)
-                            .setMeleSkill(10)
-                            .setHealth(100)
-                            .setWeaponRatingMin(10)
-                            .setWeaponRatingMax(20)
-                            .setNumberweaponOfRolls(1).createStats(),
-                    new StatsBuilder()
-                            .setStrength(5)
-                            .setWillpower(1)
-                            .setAim(1)
-                            .setAgile(1)
-                            .setArmorRating(5)
-                            .setMeleSkill(5)
-                            .setHealth(100)
-                            .setWeaponRatingMin(5)
-                            .setWeaponRatingMax(10)
-                            .setNumberweaponOfRolls(1).createStats());
-            //strength, willpower, aim, agile, armorRating, meleSkill, health, weaponRatingMin, weaponRatingMax, numberweaponOfRolls
-            if (results) {
-                totalChallengerWin++;
-            } else {
-                totalVictimWin++;
-            }
-        }
-        System.out.println("Challenger: " + totalChallengerWin + " wins.");
-        System.out.println("Victim: " + totalVictimWin + " wins.");
-        System.out.println("AVERAGE TURNS: " + NO_TURNS / NUM_EXECUTION);
-        System.out.println("AVERAGE HITS CHALLENGER: " + NO_HITS_CHALLENGER / NUM_EXECUTION);
-        System.out.println("AVERAGE MISSES CHALLENGER: " + NO_MISSES_CHALLENGER / NUM_EXECUTION);
-        System.out.println("AVERAGE DAMAGE CHALLENGER: " + TOTAL_DAMAGE_CHALLENGER / NUM_EXECUTION);
-        System.out.println("AVERAGE HITS VICTIM: " + NO_HITS_VICTIM / NUM_EXECUTION);
-        System.out.println("AVERAGE MISSES VICTIM: " + NO_MISSES_VICTIM / NUM_EXECUTION);
-        System.out.println("AVERAGE DAMAGE VICTIM: " + TOTAL_DAMAGE_VICTIM / NUM_EXECUTION);
-
-    }
-
-    public static boolean fight(Stats challenger, Stats victim) {
-        int damageToVictim = 0;
-        int chanceToHitVictim = 0;
-
-
-        int damageToChallenger = 0;
-        int chanceToHitChallenger = 0;
-
-
-        int turns = 0;
-        while (true) {
-            if (challenger.getHealth() <= 0 || victim.getHealth() <= 0) {
-                break;
-            }
-            NO_TURNS++;
-            damageToVictim = getAttack(challenger, victim);
-            chanceToHitVictim = (challenger.getStrength() + challenger.getMeleSkill()) * 5 - victim.getAgile() * 5;
-            if (randInt(0, 100) < chanceToHitVictim) {
-                victim.setHealth(victim.getHealth() - damageToVictim);
-                TOTAL_DAMAGE_CHALLENGER = TOTAL_DAMAGE_CHALLENGER + damageToVictim;
-                NO_HITS_CHALLENGER++;
-            } else {
-                NO_MISSES_CHALLENGER++;
-            }
-            damageToChallenger = getAttack(victim, challenger);
-            chanceToHitChallenger = (victim.getStrength() + victim.getMeleSkill()) * 5 - (challenger.getAgile() * 5);
-
-            if (randInt(0, 100) < chanceToHitChallenger) {
-                challenger.setHealth(challenger.getHealth() - damageToChallenger);
-                TOTAL_DAMAGE_VICTIM = TOTAL_DAMAGE_VICTIM + damageToVictim;
-                NO_HITS_VICTIM++;
-            } else {
-                NO_MISSES_VICTIM++;
-            }
-        }
-
-        if (challenger.getHealth() > victim.getHealth()) {
-            return true;
-        } else {
-            return false;
-
-        }
-    }
-
-    private static int getAttack(Stats challenger, Stats victim) {
-        int rolls = 0;
-        int totDamage = 0;
-        while (rolls <= challenger.getNumberweaponOfRolls()) {
-            rolls++;
-            totDamage = totDamage + randInt(challenger.getWeaponRatingMin(), challenger.getWeaponRatingMax());
-        }
-        return challenger.getStrength() + totDamage - victim.getArmorRating();
-    }
-
-    public static int randInt(int min, int max) {
-
-        // NOTE: Usually this should be a field rather than a method
-        // variable so that it is not re-seeded every call.
-        Random rand = new Random();
-
-        // nextInt is normally exclusive of the top value,
-        // so add 1 to make it inclusive
-        int randomNum = rand.nextInt((max - min) + 1) + min;
-
-        return randomNum;
+    @Override
+    public String toString() {
+        return "Stats{" +
+                "strength=" + strength +
+                ", willpower=" + willpower +
+                ", aim=" + aim +
+                ", agile=" + agile +
+                ", armorRating=" + armorRating +
+                ", meleSkill=" + meleSkill +
+                ", health=" + health +
+                ", weaponRatingMax=" + weaponRatingMax +
+                ", weaponRatingMin=" + weaponRatingMin +
+                ", numberweaponOfRolls=" + numberweaponOfRolls +
+                '}';
     }
-
-
 }
diff --git a/src/main/java/com/comandante/creeper/model/StatsBuilder.java b/src/main/java/com/comandante/creeper/model/StatsBuilder.java
index 4e5cf483ae6f3489572833ec92db037998cacf98..8794d21515996a9240376663588b0f20d62f1cd0 100644
--- a/src/main/java/com/comandante/creeper/model/StatsBuilder.java
+++ b/src/main/java/com/comandante/creeper/model/StatsBuilder.java
@@ -8,8 +8,8 @@ public class StatsBuilder {
     private int armorRating;
     private int meleSkill;
     private int health;
-    private int weaponRatingMin;
     private int weaponRatingMax;
+    private int weaponRatingMin;
     private int numberweaponOfRolls;
 
     public StatsBuilder setStrength(int strength) {
@@ -47,13 +47,13 @@ public class StatsBuilder {
         return this;
     }
 
-    public StatsBuilder setWeaponRatingMin(int weaponRatingMin) {
-        this.weaponRatingMin = weaponRatingMin;
+    public StatsBuilder setWeaponRatingMax(int weaponRatingMax) {
+        this.weaponRatingMax = weaponRatingMax;
         return this;
     }
 
-    public StatsBuilder setWeaponRatingMax(int weaponRatingMax) {
-        this.weaponRatingMax = weaponRatingMax;
+    public StatsBuilder setWeaponRatingMin(int weaponRatingMin) {
+        this.weaponRatingMin = weaponRatingMin;
         return this;
     }
 
@@ -63,6 +63,6 @@ public class StatsBuilder {
     }
 
     public Stats createStats() {
-        return new Stats(strength, willpower, aim, agile, armorRating, meleSkill, health, weaponRatingMin, weaponRatingMax, numberweaponOfRolls);
+        return new Stats(strength, willpower, aim, agile, armorRating, meleSkill, health, weaponRatingMax, weaponRatingMin, numberweaponOfRolls);
     }
 }
\ No newline at end of file
diff --git a/src/main/java/com/comandante/creeper/model/StatsTester.java b/src/main/java/com/comandante/creeper/model/StatsTester.java
new file mode 100644
index 0000000000000000000000000000000000000000..7713d30fe338b8759993303a46f08bc81270c905
--- /dev/null
+++ b/src/main/java/com/comandante/creeper/model/StatsTester.java
@@ -0,0 +1,109 @@
+package com.comandante.creeper.model;
+
+import java.util.Random;
+
+public class StatsTester {
+
+    public static int NO_TURNS = 0;
+    public static int NO_HITS_CHALLENGER = 0;
+    public static int NO_HITS_VICTIM = 0;
+    public static int NO_MISSES_CHALLENGER = 0;
+    public static int NO_MISSES_VICTIM = 0;
+    public static int TOTAL_DAMAGE_CHALLENGER = 0;
+    public static int TOTAL_DAMAGE_VICTIM = 0;
+
+
+    public static void main(String[] args) throws InterruptedException {
+        int totalChallengerWin = 0;
+        int totalVictimWin = 0;
+        int NUM_EXECUTION = 60000;
+        for (int i = 0; i < NUM_EXECUTION; i++) {
+            boolean results = fight(
+                    PlayerStats.DEFAULT_PLAYER.createStats(),
+                    NpcStats.JOE_NPC.createStats());
+            //strength, willpower, aim, agile, armorRating, meleSkill, health, weaponRatingMin, weaponRatingMax, numberweaponOfRolls
+            if (results) {
+                totalChallengerWin++;
+            } else {
+                totalVictimWin++;
+            }
+        }
+        System.out.println("Challenger: " + totalChallengerWin + " wins.");
+        System.out.println("Victim: " + totalVictimWin + " wins.");
+        System.out.println("AVERAGE TURNS: " + NO_TURNS / NUM_EXECUTION);
+        System.out.println("AVERAGE HITS CHALLENGER: " + NO_HITS_CHALLENGER / NUM_EXECUTION);
+        System.out.println("AVERAGE MISSES CHALLENGER: " + NO_MISSES_CHALLENGER / NUM_EXECUTION);
+        System.out.println("AVERAGE DAMAGE CHALLENGER: " + TOTAL_DAMAGE_CHALLENGER / NUM_EXECUTION);
+        System.out.println("AVERAGE HITS VICTIM: " + NO_HITS_VICTIM / NUM_EXECUTION);
+        System.out.println("AVERAGE MISSES VICTIM: " + NO_MISSES_VICTIM / NUM_EXECUTION);
+        System.out.println("AVERAGE DAMAGE VICTIM: " + TOTAL_DAMAGE_VICTIM / NUM_EXECUTION);
+
+    }
+
+    public static boolean fight(Stats challenger, Stats victim) {
+        int damageToVictim = 0;
+        int chanceToHitVictim = 0;
+
+
+        int damageToChallenger = 0;
+        int chanceToHitChallenger = 0;
+
+
+        int turns = 0;
+        while (true) {
+            if (challenger.getHealth() <= 0 || victim.getHealth() <= 0) {
+                break;
+            }
+            NO_TURNS++;
+            damageToVictim = getAttack(challenger, victim);
+            chanceToHitVictim = (challenger.getStrength() + challenger.getMeleSkill()) * 5 - victim.getAgile() * 5;
+            if (randInt(0, 100) < chanceToHitVictim) {
+                victim.setHealth(victim.getHealth() - damageToVictim);
+                TOTAL_DAMAGE_CHALLENGER = TOTAL_DAMAGE_CHALLENGER + damageToVictim;
+                NO_HITS_CHALLENGER++;
+            } else {
+                NO_MISSES_CHALLENGER++;
+            }
+            damageToChallenger = getAttack(victim, challenger);
+            chanceToHitChallenger = (victim.getStrength() + victim.getMeleSkill()) * 5 - (challenger.getAgile() * 5);
+
+            if (randInt(0, 100) < chanceToHitChallenger) {
+                challenger.setHealth(challenger.getHealth() - damageToChallenger);
+                TOTAL_DAMAGE_VICTIM = TOTAL_DAMAGE_VICTIM + damageToVictim;
+                NO_HITS_VICTIM++;
+            } else {
+                NO_MISSES_VICTIM++;
+            }
+        }
+
+        if (challenger.getHealth() > victim.getHealth()) {
+            return true;
+        } else {
+            return false;
+
+        }
+    }
+
+    private static int getAttack(Stats challenger, Stats victim) {
+        int rolls = 0;
+        int totDamage = 0;
+        while (rolls <= challenger.getNumberweaponOfRolls()) {
+            rolls++;
+            totDamage = totDamage + randInt(challenger.getWeaponRatingMin(), challenger.getWeaponRatingMax());
+        }
+        return challenger.getStrength() + totDamage - victim.getArmorRating();
+    }
+
+    public static int randInt(int min, int max) {
+
+        // NOTE: Usually this should be a field rather than a method
+        // variable so that it is not re-seeded every call.
+        Random rand = new Random();
+
+        // nextInt is normally exclusive of the top value,
+        // so add 1 to make it inclusive
+        int randomNum = rand.nextInt((max - min) + 1) + min;
+
+        return randomNum;
+    }
+}
diff --git a/src/main/java/com/comandante/creeper/npc/Derper.java b/src/main/java/com/comandante/creeper/npc/Derper.java
index d698d10b72311d5abe91056eab51d22b86306a2d..29c67c93a4deab8fca0a8b9588c7096a3b09feb3 100644
--- a/src/main/java/com/comandante/creeper/npc/Derper.java
+++ b/src/main/java/com/comandante/creeper/npc/Derper.java
@@ -2,7 +2,7 @@ package com.comandante.creeper.npc;
 
 
 import com.comandante.creeper.managers.GameManager;
-import com.comandante.creeper.model.StatsBuilder;
+import com.comandante.creeper.model.NpcStats;
 
 import java.util.Arrays;
 import java.util.List;
@@ -22,7 +22,7 @@ public class Derper extends Npc {
             .append(RESET).toString();
 
     public Derper(GameManager gameManager, Integer roomId) {
-        super(gameManager, roomId, NAME, colorName, 0, new StatsBuilder().setStrength(7).setWillpower(8).setAim(6).setAgile(5).setArmorRating(4).setMeleSkill(10).setHealth(100).setWeaponRatingMin(10).setWeaponRatingMax(20).setNumberweaponOfRolls(1).createStats());
+        super(gameManager, roomId, NAME, colorName, 0, NpcStats.JOE_NPC.createStats());
         this.random = new Random();
     }
 
diff --git a/src/main/java/com/comandante/creeper/npc/Npc.java b/src/main/java/com/comandante/creeper/npc/Npc.java
index 515efc0ca4feb93083dec50efe24f313953dbd2f..696aa76dcaa2f75ad4f998264557624209762c32 100644
--- a/src/main/java/com/comandante/creeper/npc/Npc.java
+++ b/src/main/java/com/comandante/creeper/npc/Npc.java
@@ -40,6 +40,10 @@ public abstract class Npc extends CreeperEntity {
         this.stats = stats;
     }
 
+    public Stats getStats() {
+        return stats;
+    }
+
     public GameManager getGameManager() {
         return gameManager;
     }
diff --git a/src/main/java/com/comandante/creeper/server/ChannelUtils.java b/src/main/java/com/comandante/creeper/server/ChannelUtils.java
index b1c1821f70d1c6504c5c0bd5f560a9d690d54236..ed4085e3c75597f1ec8747d1942cb3cc0f73ad4b 100644
--- a/src/main/java/com/comandante/creeper/server/ChannelUtils.java
+++ b/src/main/java/com/comandante/creeper/server/ChannelUtils.java
@@ -19,6 +19,12 @@ public class ChannelUtils {
         write(playerId, message, false);
     }
 
+    public void writeOnlyPrompt(String playerId) {
+        Player player = playerManager.getPlayer(playerId);
+        Room playerCurrentRoom = roomManager.getPlayerCurrentRoom(player).get();
+        player.getChannel().write(playerManager.getPrompt(playerId, playerCurrentRoom.getRoomId()));
+    }
+
     public void write(String playerId, String message) {
         write(playerId, message, true);
     }