diff --git a/src/main/java/com/comandante/creeper/command/commands/FightKillCommand.java b/src/main/java/com/comandante/creeper/command/commands/FightKillCommand.java
index 3bdc017d0a9cf26513628328e708b5472d72915c..30f59565b354d5dfb4bd31d24f54943a8429a607 100644
--- a/src/main/java/com/comandante/creeper/command/commands/FightKillCommand.java
+++ b/src/main/java/com/comandante/creeper/command/commands/FightKillCommand.java
@@ -3,13 +3,16 @@ package com.comandante.creeper.command.commands;
 import com.comandante.creeper.core_game.GameManager;
 import com.comandante.creeper.npc.Npc;
 import com.comandante.creeper.player.CoolDownType;
+import com.comandante.creeper.player.Player;
 import com.google.common.base.Joiner;
 import org.jboss.netty.channel.ChannelHandlerContext;
 import org.jboss.netty.channel.MessageEvent;
 
 import java.util.Arrays;
 import java.util.List;
+import java.util.Optional;
 import java.util.Set;
+import java.util.function.Predicate;
 
 public class FightKillCommand extends Command {
 
@@ -48,14 +51,19 @@ public class FightKillCommand extends Command {
                 if (npcEntity.getValidTriggers().contains(target)) {
                     if (player.addActiveFight(npcEntity)) {
                         writeToRoom(player.getPlayerName() + " has attacked a " + npcEntity.getColorName());
-                       // player.addActiveFight(npcEntity);
-                        return;
-                    } else {
                         return;
                     }
                 }
             }
-            write("There's no NPC here to fight by that name.");
+            Optional<Player> targetedPlayerOptional = currentRoom.getPresentPlayers().stream().filter(player -> player.getPlayerName().equals(target)).findFirst();
+            if (targetedPlayerOptional.isPresent()) {
+                Player targetedPlayer = targetedPlayerOptional.get();
+                if (player.addActiveFight(targetedPlayer)) {
+                    writeToRoom(player.getPlayerName() + " has attacked a " + targetedPlayer.getPlayerName());
+                    return;
+                }
+            }
+            write("There's no one here to fight by that name.");
         });
     }
 }
diff --git a/src/main/java/com/comandante/creeper/player/Player.java b/src/main/java/com/comandante/creeper/player/Player.java
index af34ff10b26ba68d237e21873cc5599b656b603b..704e5caa5e3a2068253bd73646e0adfb5f0d2d3e 100644
--- a/src/main/java/com/comandante/creeper/player/Player.java
+++ b/src/main/java/com/comandante/creeper/player/Player.java
@@ -121,7 +121,8 @@ public class Player extends CreeperEntity {
         DamageProcessor playerDamageProcesor = getPlayerClass().getDamageProcessor();
         Set<Map.Entry<Long, ActiveFight>> entries = activeFights.entrySet();
         for (Map.Entry<Long, ActiveFight> next : entries) {
-            Optional<String> npcIdOptional = next.getValue().getNpcId();
+            ActiveFight activeFight = next.getValue();
+            Optional<String> npcIdOptional = activeFight.getNpcId();
             if (npcIdOptional.isPresent()) {
                 // If the NPC has died- bail out.
                 String npcId = npcIdOptional.get();
@@ -130,7 +131,15 @@ public class Player extends CreeperEntity {
                 if (npc == null) {
                     continue;
                 }
-                doFightRound(playerDamageProcesor, npc.getDamageProcessor(), next.getValue());
+                doFightRound(playerDamageProcesor, npc.getDamageProcessor(), activeFight);
+                return;
+            }
+
+            Optional<String> targetPlayerOptional = activeFight.getPlayerId();
+            if (targetPlayerOptional.isPresent()) {
+                addCoolDown(new CoolDown(CoolDownType.PVP_FIGHT));
+                DamageProcessor targetPlayerDamageProcessor = gameManager.getPlayerManager().getPlayer(targetPlayerOptional.get()).getPlayerClass().getDamageProcessor();
+                doFightRound(playerDamageProcesor, targetPlayerDamageProcessor, activeFight);
             }
         }
     }
@@ -1373,6 +1382,21 @@ public class Player extends CreeperEntity {
         return false;
     }
 
+    public boolean addActiveFight(Player player) {
+        synchronized (interner.intern(playerId)) {
+            if (!doesActiveFightExist(player)) {
+                addCoolDown(new CoolDown(CoolDownType.PVP_FIGHT));
+                ActiveFight activeFight = ActiveFight.builder()
+                        .playerId(player.getPlayerId())
+                        .isPrimary(false)
+                        .create();
+                activeFights.put(System.nanoTime(), activeFight);
+                return true;
+            }
+            return false;
+        }
+    }
+
     public boolean doesActiveFightExist(Npc npc) {
         synchronized (interner.intern(playerId)) {
             if (gameManager.getEntityManager().getNpcEntity(npc.getEntityId()) == null) {
@@ -1613,10 +1637,10 @@ public class Player extends CreeperEntity {
             addCoolDown(new CoolDown(CoolDownType.PVP_FIGHT));
         } else {
             Optional<PlayerMetadata> playerMetadataOptional = getPlayerMetadata();
-            if (!playerMetadataOptional.isPresent()){
+            if (!playerMetadataOptional.isPresent()) {
                 return;
             }
-            for (CoolDown coolDown: playerMetadataOptional.get().getCoolDowns()) {
+            for (CoolDown coolDown : playerMetadataOptional.get().getCoolDowns()) {
                 if (coolDown.getCoolDownType().equals(CoolDownType.NPC_FIGHT)) {
                     coolDown.setNumberOfTicks(coolDown.getOriginalNumberOfTicks());
                 }