diff --git a/src/main/java/com/comandante/creeper/command/commands/KillCommand.java b/src/main/java/com/comandante/creeper/command/commands/KillCommand.java
index a905b661d22e9bb7f3f003845eacc354362bc830..dce351cc6b206657e244471536ac761293e70184 100644
--- a/src/main/java/com/comandante/creeper/command/commands/KillCommand.java
+++ b/src/main/java/com/comandante/creeper/command/commands/KillCommand.java
@@ -1,7 +1,8 @@
 package com.comandante.creeper.command.commands;
 
+import com.comandante.creeper.fight.FightRun;
 import com.comandante.creeper.managers.GameManager;
-import com.comandante.creeper.managers.FightManager;
+import com.comandante.creeper.fight.FightManager;
 import com.comandante.creeper.player.Player;
 import com.comandante.creeper.room.Room;
 import com.comandante.creeper.npc.Npc;
@@ -42,7 +43,8 @@ public class KillCommand extends Command {
         for (String npcId: npcIds) {
             Npc npcEntity = getGameManager().getEntityManager().getNpcEntity(npcId);
             if (npcEntity.getName().equals(target)) {
-                fightManager.fight(player, npcEntity);
+                FightRun fightRun = new FightRun(player, npcEntity, getGameManager());
+                fightManager.fight(fightRun);
                 return;
             }
         }
diff --git a/src/main/java/com/comandante/creeper/managers/FightManager.java b/src/main/java/com/comandante/creeper/fight/FightManager.java
similarity index 76%
rename from src/main/java/com/comandante/creeper/managers/FightManager.java
rename to src/main/java/com/comandante/creeper/fight/FightManager.java
index 06269ca125494d19c41ed6fcfa3be2b39e5a6ddb..f0ae6187bcd104b39dfa47293aebd515c6fa9ce0 100644
--- a/src/main/java/com/comandante/creeper/managers/FightManager.java
+++ b/src/main/java/com/comandante/creeper/fight/FightManager.java
@@ -1,15 +1,17 @@
-package com.comandante.creeper.managers;
+package com.comandante.creeper.fight;
 
 import com.comandante.creeper.entity.EntityManager;
-import com.comandante.creeper.stat.Stats;
-import com.comandante.creeper.player.PlayerManager;
-import com.comandante.creeper.room.RoomManager;
 import com.comandante.creeper.npc.Npc;
 import com.comandante.creeper.player.Player;
-import com.comandante.creeper.player.PlayerMetadata;
+import com.comandante.creeper.player.PlayerManager;
+import com.comandante.creeper.room.RoomManager;
 import com.comandante.creeper.server.ChannelUtils;
+import com.comandante.creeper.stat.Stats;
 
 import java.util.Random;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
 
 public class FightManager {
 
@@ -19,39 +21,19 @@ public class FightManager {
     private final ChannelUtils channelUtils;
     private static final Random random = new Random();
 
+    private final ExecutorService fightService;
+
     public FightManager(ChannelUtils channelUtils, EntityManager entityManager, RoomManager roomManager, PlayerManager playerManager) {
         this.channelUtils = channelUtils;
         this.entityManager = entityManager;
         this.roomManager = roomManager;
         this.playerManager = playerManager;
+        this.fightService = Executors.newFixedThreadPool(10);
     }
 
-    public void fight(Player player, Npc npc) {
-        PlayerMetadata playerMetadata = playerManager.getPlayerMetadata(player.getPlayerId());
-        Stats npcStats = npc.getStats();
-        Stats playerStats = playerMetadata.getStats();
-
-        while (npcStats.getCurrentHealth() > 0) {
-            if (playerStats.getCurrentHealth() <= 0) {
-                break;
-            }
-            fightTurn(playerStats, npcStats, 3, player, npc);
-        }
-
-        playerManager.savePlayerMetadata(playerMetadata);
-
-        if (playerStats.getCurrentHealth() <= 0) {
-            channelUtils.write(player.getPlayerId(), "You died.");
-            channelUtils.writeToRoom(player.getPlayerId(), player.getPlayerName() + " is now dead.");
-            return;
-        }
 
-        if (npcStats.getCurrentHealth() <= 0) {
-            channelUtils.writeNoPrompt(player.getPlayerId(), "You killed " + npc.getName());
-            channelUtils.writeToRoom(player.getPlayerId(), npc.getDieMessage());
-            entityManager.deleteNpcEntity(npc.getEntityId());
-            return;
-        }
+    public Future<FightResults> fight(FightRun fightRun) {
+        return fightService.submit(fightRun);
     }
 
     public void fightTurn(Stats challenger, Stats victim, int numRoundsPerTurns, Player player, Npc npc) {
diff --git a/src/main/java/com/comandante/creeper/fight/FightResults.java b/src/main/java/com/comandante/creeper/fight/FightResults.java
new file mode 100644
index 0000000000000000000000000000000000000000..919476b8ff3228fe0d8841dbd6579805c9728219
--- /dev/null
+++ b/src/main/java/com/comandante/creeper/fight/FightResults.java
@@ -0,0 +1,12 @@
+package com.comandante.creeper.fight;
+
+public class FightResults {
+
+    private final boolean npcWon;
+    private final boolean playerWon;
+
+    public FightResults(boolean npcWon, boolean playerWon) {
+        this.npcWon = npcWon;
+        this.playerWon = playerWon;
+    }
+}
diff --git a/src/main/java/com/comandante/creeper/fight/FightResultsBuilder.java b/src/main/java/com/comandante/creeper/fight/FightResultsBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..52bd27b725f66347a38fd074040fd75a8c579447
--- /dev/null
+++ b/src/main/java/com/comandante/creeper/fight/FightResultsBuilder.java
@@ -0,0 +1,20 @@
+package com.comandante.creeper.fight;
+
+public class FightResultsBuilder {
+    private boolean npcWon;
+    private boolean playerWon;
+
+    public FightResultsBuilder setNpcWon(boolean npcWon) {
+        this.npcWon = npcWon;
+        return this;
+    }
+
+    public FightResultsBuilder setPlayerWon(boolean playerWon) {
+        this.playerWon = playerWon;
+        return this;
+    }
+
+    public FightResults createFightResults() {
+        return new FightResults(npcWon, playerWon);
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/comandante/creeper/fight/FightRun.java b/src/main/java/com/comandante/creeper/fight/FightRun.java
new file mode 100644
index 0000000000000000000000000000000000000000..80ab89987b10de8d71419d3e9d19ce40bb555961
--- /dev/null
+++ b/src/main/java/com/comandante/creeper/fight/FightRun.java
@@ -0,0 +1,53 @@
+package com.comandante.creeper.fight;
+
+import com.comandante.creeper.managers.GameManager;
+import com.comandante.creeper.npc.Npc;
+import com.comandante.creeper.player.Player;
+import com.comandante.creeper.player.PlayerMetadata;
+import com.comandante.creeper.stat.Stats;
+
+import java.util.concurrent.Callable;
+
+
+public class FightRun implements Callable<FightResults> {
+
+    private final Player player;
+    private final Npc npc;
+    private final GameManager gameManager;
+
+    public FightRun(Player player, Npc npc, GameManager gameManager) {
+        this.player = player;
+        this.npc = npc;
+        this.gameManager = gameManager;
+    }
+
+    @Override
+    public FightResults call() throws Exception {
+        Stats npcStats = npc.getStats();
+        PlayerMetadata playerMetadata = gameManager.getPlayerManager().getPlayerMetadata(player.getPlayerId());
+        Stats playerStats = gameManager.getPlayerManager().getPlayerMetadata(player.getPlayerId()).getStats();
+
+        while (npcStats.getCurrentHealth() > 0) {
+            if (playerStats.getCurrentHealth() <= 0) {
+                break;
+            }
+            gameManager.getFightManager().fightTurn(playerStats, npcStats, 3, player, npc);
+        }
+
+        gameManager.getPlayerManager().savePlayerMetadata(playerMetadata);
+
+        if (playerStats.getCurrentHealth() <= 0) {
+            gameManager.getChannelUtils().write(player.getPlayerId(), "You died.");
+            gameManager.getChannelUtils().writeToRoom(player.getPlayerId(), player.getPlayerName() + " is now dead.");
+            return new FightResultsBuilder().setNpcWon(true).setPlayerWon(false).createFightResults();
+        }
+
+        if (npcStats.getCurrentHealth() <= 0) {
+            gameManager.getChannelUtils().writeNoPrompt(player.getPlayerId(), "You killed " + npc.getName());
+            gameManager.getChannelUtils().writeToRoom(player.getPlayerId(), npc.getDieMessage());
+            gameManager.getEntityManager().deleteNpcEntity(npc.getEntityId());
+            return new FightResultsBuilder().setNpcWon(false).setPlayerWon(true).createFightResults();
+        }
+        return new FightResultsBuilder().setNpcWon(false).setPlayerWon(false).createFightResults();
+    }
+}
diff --git a/src/main/java/com/comandante/creeper/managers/GameManager.java b/src/main/java/com/comandante/creeper/managers/GameManager.java
index 741cf3bac6447d043d2a28a41d155530a65f3624..4baacd54f5ee7a2a08d0fa6e6c728c4f56041dea 100644
--- a/src/main/java/com/comandante/creeper/managers/GameManager.java
+++ b/src/main/java/com/comandante/creeper/managers/GameManager.java
@@ -4,6 +4,7 @@ package com.comandante.creeper.managers;
 import com.comandante.creeper.Items.Item;
 import com.comandante.creeper.Items.ItemDecayManager;
 import com.comandante.creeper.entity.EntityManager;
+import com.comandante.creeper.fight.FightManager;
 import com.comandante.creeper.player.PlayerMovement;
 import com.comandante.creeper.player.Player;
 import com.comandante.creeper.player.PlayerManager;