diff --git a/src/main/java/com/comandante/creeper/Items/ItemUseHandler.java b/src/main/java/com/comandante/creeper/Items/ItemUseHandler.java
index b454ce109f7ec84eb37e5d6f7486f155537e83ff..824fd8e2767d08379cc95a3cc60b794a18b92938 100644
--- a/src/main/java/com/comandante/creeper/Items/ItemUseHandler.java
+++ b/src/main/java/com/comandante/creeper/Items/ItemUseHandler.java
@@ -63,7 +63,7 @@ public class ItemUseHandler {
     }
 
     private void writeToPlayer(String message) {
-        gameManager.getChannelUtils().write(playerId, message);
+        gameManager.getChannelUtils().writeNoPrompt(playerId, message);
     }
 
     private void incrementUses(Item item) {
diff --git a/src/main/java/com/comandante/creeper/command/commands/Command.java b/src/main/java/com/comandante/creeper/command/commands/Command.java
index eab784e79c8f167eb36b5c52795e0bd1aff68fda..2746bc6bf13c9d832ea1bc548903147b0639d58f 100644
--- a/src/main/java/com/comandante/creeper/command/commands/Command.java
+++ b/src/main/java/com/comandante/creeper/command/commands/Command.java
@@ -1,10 +1,12 @@
 package com.comandante.creeper.command.commands;
 
 import com.comandante.creeper.managers.GameManager;
+import com.comandante.creeper.model.Player;
 import com.google.common.collect.ImmutableList;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Set;
 
 public abstract class Command implements Runnable {
 
@@ -58,4 +60,19 @@ public abstract class Command implements Runnable {
         String[] split = s.split(" ");
         return new ArrayList<String>(Arrays.asList(split));
     }
+
+    public void commandWrite(String message) {
+        getGameManager().getChannelUtils().write(getPlayerId(), message);
+    }
+
+    public void roomSay(Integer roomId, String message) {
+        Set<String> presentPlayerIds = getGameManager().getRoomManager().getRoom(roomId).getPresentPlayerIds();
+        for (String playerId : presentPlayerIds) {
+            Player player = getGameManager().getPlayerManager().getPlayer(playerId);
+            if (player.getPlayerId().equals(getPlayerId())) {
+                commandWrite(message);
+            }
+            getGameManager().getChannelUtils().writeNoPrompt(player.getPlayerId(), message);
+        }
+    }
 }
diff --git a/src/main/java/com/comandante/creeper/command/commands/DropCommand.java b/src/main/java/com/comandante/creeper/command/commands/DropCommand.java
index 7a1d2181fa775f0a8afd3cfcbbcabd4fd6887dc7..9dc9a99dc355ff9065547ba374f1128ca486692f 100644
--- a/src/main/java/com/comandante/creeper/command/commands/DropCommand.java
+++ b/src/main/java/com/comandante/creeper/command/commands/DropCommand.java
@@ -27,7 +27,7 @@ public class DropCommand extends Command {
     public void run() {
         ArrayList<String> originalMessageParts = getOriginalMessageParts();
         if (originalMessageParts.size() == 1) {
-            getGameManager().getChannelUtils().write(getPlayerId(), "No item specified.");
+            commandWrite("No item specified.");
             return;
         }
         String itemTarget = originalMessageParts.get(1);
@@ -42,7 +42,7 @@ public class DropCommand extends Command {
                 getGameManager().getPlayerManager().savePlayerMetadata(playerMetadata);
                 getGameManager().getItemDecayManager().addItem(itemEntity);
                 getGameManager().getEntityManager().addItem(itemEntity);
-                getGameManager().roomSay(playerCurrentRoom.getRoomId(),getGameManager().getPlayerManager().getPlayer(getPlayerId()).getPlayerName() + " dropped " + itemEntity.getItemName());
+                roomSay(playerCurrentRoom.getRoomId(),getGameManager().getPlayerManager().getPlayer(getPlayerId()).getPlayerName() + " dropped " + itemEntity.getItemName());
                 return;
             }
         }
diff --git a/src/main/java/com/comandante/creeper/command/commands/GossipCommand.java b/src/main/java/com/comandante/creeper/command/commands/GossipCommand.java
index 3c24d17f1423db04d445ab4a46f4e9a722d0a778..b5a99cface1a4d14a0b8fb3d68fd7224738be542 100644
--- a/src/main/java/com/comandante/creeper/command/commands/GossipCommand.java
+++ b/src/main/java/com/comandante/creeper/command/commands/GossipCommand.java
@@ -4,6 +4,10 @@ package com.comandante.creeper.command.commands;
 import com.comandante.creeper.managers.GameManager;
 import com.comandante.creeper.model.Player;
 import com.google.common.collect.ImmutableList;
+import org.fusesource.jansi.Ansi;
+
+import java.util.Iterator;
+import java.util.Map;
 
 public class GossipCommand extends Command {
 
@@ -19,7 +23,19 @@ public class GossipCommand extends Command {
 
     @Override
     public void run() {
-        Player player = getGameManager().getPlayerManager().getPlayer(getPlayerId());
-        getGameManager().gossip(player, getOriginalMessage().replaceFirst("^gossip ", ""));
+        Player sourcePlayer = getGameManager().getPlayerManager().getPlayer(getPlayerId());
+        Iterator<Map.Entry<String, Player>> players = getGameManager().getPlayerManager().getPlayers();
+        while (players.hasNext()) {
+            StringBuilder stringBuilder = new StringBuilder();
+            Player player = players.next().getValue();
+            stringBuilder.append(new Ansi().fg(Ansi.Color.MAGENTA).toString());
+            stringBuilder.append("[").append(sourcePlayer.getPlayerName()).append("] ").append(getOriginalMessage());
+            stringBuilder.append(new Ansi().reset().toString());
+            if (player.getPlayerId().equals(sourcePlayer.getPlayerId())) {
+                commandWrite(stringBuilder.toString());
+            } else {
+                getGameManager().getChannelUtils().writeNoPrompt(player.getPlayerId(), stringBuilder.toString());
+            }
+        }
     }
 }
diff --git a/src/main/java/com/comandante/creeper/command/commands/InventoryCommand.java b/src/main/java/com/comandante/creeper/command/commands/InventoryCommand.java
index 72538e6273e968961dc7b057611534141e67e32e..d068ec440f8a3fa6a50084ce6f05816dac3e7278 100644
--- a/src/main/java/com/comandante/creeper/command/commands/InventoryCommand.java
+++ b/src/main/java/com/comandante/creeper/command/commands/InventoryCommand.java
@@ -50,6 +50,6 @@ public class InventoryCommand extends Command {
             }
             sb.append("\r\n");
         }
-        getGameManager().getChannelUtils().write(getPlayerId(), sb.toString());
+        commandWrite(sb.toString());
     }
 }
diff --git a/src/main/java/com/comandante/creeper/command/commands/MovementCommand.java b/src/main/java/com/comandante/creeper/command/commands/MovementCommand.java
index de08f65c4d8d3a0740ec4d9bfe989508d7a9c961..cd87fc2bf3c0cd79024f8a7e444b7ed19921b607 100644
--- a/src/main/java/com/comandante/creeper/command/commands/MovementCommand.java
+++ b/src/main/java/com/comandante/creeper/command/commands/MovementCommand.java
@@ -53,7 +53,7 @@ public class MovementCommand extends Command {
         }
         if (northTriggers.contains(command.toLowerCase())) {
             if (!currentRoom.getNorthId().isPresent()) {
-                channelUtils.write(player.getPlayerId(), "There's no northern exit.");
+                commandWrite("There's no northern exit.");
                 return;
             }
             Room destinationRoom = gameManager.getRoomManager().getRoom(currentRoom.getNorthId().get());
@@ -61,7 +61,7 @@ public class MovementCommand extends Command {
         }
         if (southTriggers.contains(command.toLowerCase())) {
             if (!currentRoom.getSouthId().isPresent()) {
-                channelUtils.write(player.getPlayerId(), "There's no southern exit.");
+                commandWrite("There's no southern exit.");
                 return;
             }
             Room destinationRoom = gameManager.getRoomManager().getRoom(currentRoom.getSouthId().get());
@@ -69,7 +69,7 @@ public class MovementCommand extends Command {
         }
         if (eastTriggers.contains(command.toLowerCase())) {
             if (!currentRoom.getEastId().isPresent()) {
-                channelUtils.write(player.getPlayerId(), "There's no eastern exit.");
+                commandWrite("There's no eastern exit.");
                 return;
             }
             Room destinationRoom = gameManager.getRoomManager().getRoom(currentRoom.getEastId().get());
@@ -77,7 +77,7 @@ public class MovementCommand extends Command {
         }
         if (westTriggers.contains(command.toLowerCase())) {
             if (!currentRoom.getWestId().isPresent()) {
-                channelUtils.write(player.getPlayerId(), "There's no western exit.");
+                commandWrite("There's no western exit.");
                 return;
             }
             Room destinationRoom = gameManager.getRoomManager().getRoom(currentRoom.getWestId().get());
@@ -85,7 +85,7 @@ public class MovementCommand extends Command {
         }
         if (upTriggers.contains(command.toLowerCase())) {
             if (!currentRoom.getUpId().isPresent()) {
-                channelUtils.write(player.getPlayerId(), "There's no up exit.");
+                commandWrite("There's no up exit.");
                 return;
             }
             Room destinationRoom = gameManager.getRoomManager().getRoom(currentRoom.getUpId().get());
@@ -93,7 +93,7 @@ public class MovementCommand extends Command {
         }
         if (downTriggers.contains(command.toLowerCase())) {
             if (!currentRoom.getDownId().isPresent()) {
-                channelUtils.write(player.getPlayerId(), "There's no down exit.");
+                commandWrite("There's no down exit.");
                 return;
             }
             Room destinationRoom = gameManager.getRoomManager().getRoom(currentRoom.getDownId().get());
diff --git a/src/main/java/com/comandante/creeper/command/commands/PickUpCommand.java b/src/main/java/com/comandante/creeper/command/commands/PickUpCommand.java
index ef797ea0cc48a1bce7696230c714d203482f78e5..c3a7c153151e87ff89e2ac711489ac4e2fa1a100 100644
--- a/src/main/java/com/comandante/creeper/command/commands/PickUpCommand.java
+++ b/src/main/java/com/comandante/creeper/command/commands/PickUpCommand.java
@@ -33,7 +33,7 @@ public class PickUpCommand extends Command {
             Item itemEntity = getGameManager().getEntityManager().getItemEntity(next);
             if (itemEntity.getShortName().equalsIgnoreCase(originalMessageParts.get(1))) {
                 getGameManager().acquireItem(player, itemEntity.getItemId());
-                getGameManager().roomSay(playerCurrentRoom.getRoomId(),getGameManager().getPlayerManager().getPlayer(getPlayerId()).getPlayerName() + " picked up " + itemEntity.getItemName());
+                roomSay(playerCurrentRoom.getRoomId(), getGameManager().getPlayerManager().getPlayer(getPlayerId()).getPlayerName() + " picked up " + itemEntity.getItemName());
                 return;
             }
         }
diff --git a/src/main/java/com/comandante/creeper/command/commands/SayCommand.java b/src/main/java/com/comandante/creeper/command/commands/SayCommand.java
index cc0c30a9c67a7611672d537607bcfe1ccb60d176..219453dd1664aeb012a1f0aa5dce8a90898992f8 100644
--- a/src/main/java/com/comandante/creeper/command/commands/SayCommand.java
+++ b/src/main/java/com/comandante/creeper/command/commands/SayCommand.java
@@ -2,7 +2,12 @@ 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.Optional;
 import com.google.common.collect.ImmutableList;
+import org.fusesource.jansi.Ansi;
+
+import java.util.Set;
 
 public class SayCommand extends Command {
 
@@ -18,8 +23,24 @@ public class SayCommand extends Command {
 
     @Override
     public void run() {
-        GameManager gameManager = getGameManager();
-        Player player = gameManager.getPlayerManager().getPlayer(getPlayerId());
-        getGameManager().say(player, getOriginalMessage().trim().replaceFirst("^say ", ""));
+        Player sourcePlayer = getGameManager().getPlayerManager().getPlayer(getPlayerId());
+        String message = getOriginalMessage().replaceFirst("^say ", "");
+        Optional<Room> playerCurrentRoomOpt = getGameManager().getRoomManager().getPlayerCurrentRoom(sourcePlayer);
+        if (!playerCurrentRoomOpt.isPresent()) {
+            throw new RuntimeException("playerCurrentRoom is missing!");
+        }
+        Room playerCurrentRoom = playerCurrentRoomOpt.get();
+        Set<Player> presentPlayers = getGameManager().getPlayerManager().getPresentPlayers(playerCurrentRoom);
+        for (Player presentPlayer : presentPlayers) {
+            StringBuilder stringBuilder = new StringBuilder();
+            stringBuilder.append(new Ansi().fg(Ansi.Color.RED).toString());
+            stringBuilder.append("<").append(sourcePlayer.getPlayerName()).append("> ").append(message);
+            stringBuilder.append(new Ansi().reset().toString());
+            if (presentPlayer.getPlayerId().equals(sourcePlayer.getPlayerId())) {
+                commandWrite(stringBuilder.toString());
+            } else {
+                getGameManager().getChannelUtils().writeNoPrompt(presentPlayer.getPlayerId(), stringBuilder.toString());
+            }
+        }
     }
 }
diff --git a/src/main/java/com/comandante/creeper/command/commands/TellCommand.java b/src/main/java/com/comandante/creeper/command/commands/TellCommand.java
index b40f04d2dc54fd45a8a7783ed0a3064ab2c8bb1e..633cfa2a5b29075a4d562bf1b1b877587d71424c 100644
--- a/src/main/java/com/comandante/creeper/command/commands/TellCommand.java
+++ b/src/main/java/com/comandante/creeper/command/commands/TellCommand.java
@@ -1,7 +1,13 @@
 package com.comandante.creeper.command.commands;
 
 import com.comandante.creeper.managers.GameManager;
+import com.comandante.creeper.model.Player;
 import com.google.common.collect.ImmutableList;
+import org.apache.commons.lang3.StringUtils;
+import org.fusesource.jansi.Ansi;
+
+import java.util.ArrayList;
+import java.util.Arrays;
 
 public class TellCommand extends Command {
 
@@ -17,6 +23,32 @@ public class TellCommand extends Command {
 
     @Override
     public void run() {
-        getGameManager().tell(getGameManager().getPlayerManager().getPlayer(getPlayerId()), getOriginalMessage());
+        Player sourcePlayer = getGameManager().getPlayerManager().getPlayer(getPlayerId());
+        ArrayList<String> parts = new ArrayList<>(Arrays.asList(getOriginalMessage().split(" ")));
+        if (parts.size() < 3) {
+            commandWrite("tell failed, no message to send.");
+            return;
+        }
+        //remove the literal 'tell'
+        parts.remove(0);
+        String destinationUsername = parts.get(0);
+        Player desintationPlayer = getGameManager().getPlayerManager().getPlayerByUsername(destinationUsername);
+        if (desintationPlayer == null) {
+            commandWrite("tell failed, unknown user.");
+            return;
+        }
+        if (desintationPlayer.getPlayerId().equals(sourcePlayer.getPlayerId())) {
+            commandWrite("tell failed, you're talking to yourself.");
+            return;
+        }
+        parts.remove(0);
+        String tellMessage = StringUtils.join(parts, " ");
+        StringBuilder stringBuilder = new StringBuilder();
+        String destinationPlayercolor = new Ansi().fg(Ansi.Color.YELLOW).toString();
+        stringBuilder.append("*").append(sourcePlayer.getPlayerName()).append("* ");
+        stringBuilder.append(tellMessage);
+        stringBuilder.append(new Ansi().reset().toString());
+        getGameManager().getChannelUtils().writeNoPrompt(desintationPlayer.getPlayerId(), destinationPlayercolor + stringBuilder.toString());
+        commandWrite(stringBuilder.toString());
     }
 }
diff --git a/src/main/java/com/comandante/creeper/command/commands/UseCommand.java b/src/main/java/com/comandante/creeper/command/commands/UseCommand.java
index ce381cd4b1b5fdb9f01e64aab2407f890fef209f..fcd78219db027ece151f3b41e87a5c60b3582f9e 100644
--- a/src/main/java/com/comandante/creeper/command/commands/UseCommand.java
+++ b/src/main/java/com/comandante/creeper/command/commands/UseCommand.java
@@ -28,7 +28,7 @@ public class UseCommand extends Command {
     public void run() {
         ArrayList<String> originalMessageParts = getOriginalMessageParts();
         if (originalMessageParts.size() == 1) {
-            getGameManager().getChannelUtils().write(getPlayerId(), "No item specified.");
+            commandWrite("No item specified.");
             return;
         }
         String itemTarget = originalMessageParts.get(1);
diff --git a/src/main/java/com/comandante/creeper/command/commands/WhoCommand.java b/src/main/java/com/comandante/creeper/command/commands/WhoCommand.java
index d44a20aa692c3af119d5881fddbd9733f850e86f..71b87e875e457e630db832834e7d647a1fda90a9 100644
--- a/src/main/java/com/comandante/creeper/command/commands/WhoCommand.java
+++ b/src/main/java/com/comandante/creeper/command/commands/WhoCommand.java
@@ -1,7 +1,11 @@
 package com.comandante.creeper.command.commands;
 
 import com.comandante.creeper.managers.GameManager;
+import com.comandante.creeper.model.Player;
 import com.google.common.collect.ImmutableList;
+import org.fusesource.jansi.Ansi;
+
+import java.util.Set;
 
 public class WhoCommand extends Command {
 
@@ -17,6 +21,17 @@ public class WhoCommand extends Command {
 
     @Override
     public void run() {
-        getGameManager().who(getGameManager().getPlayerManager().getPlayer(getPlayerId()));
-    }
+            Set<Player> allPlayers = getGameManager().getAllPlayers();
+            StringBuilder stringBuilder = new StringBuilder();
+            stringBuilder.append(new Ansi().fg(Ansi.Color.CYAN).toString());
+            stringBuilder.append("----------------------\r\n");
+            stringBuilder.append("|--active users------|\r\n");
+            stringBuilder.append("----------------------\r\n");
+            for (Player allPlayer : allPlayers) {
+                stringBuilder.append(allPlayer.getPlayerName());
+                stringBuilder.append("\r\n");
+            }
+            stringBuilder.append(new Ansi().reset().toString());
+            commandWrite(stringBuilder.toString());
+        }
 }
diff --git a/src/main/java/com/comandante/creeper/command/commands/WhoamiCommand.java b/src/main/java/com/comandante/creeper/command/commands/WhoamiCommand.java
index dbd18f5c9cf9a95749faa665d5fe67e8256c88cd..fc2375392a0f7be733c4ca951fd33e4bb161af0e 100644
--- a/src/main/java/com/comandante/creeper/command/commands/WhoamiCommand.java
+++ b/src/main/java/com/comandante/creeper/command/commands/WhoamiCommand.java
@@ -19,6 +19,6 @@ public class WhoamiCommand extends Command {
     @Override
     public void run() {
         Player player = getGameManager().getPlayerManager().getPlayer(getPlayerId());
-        getGameManager().getChannelUtils().write(getPlayerId(), player.getPlayerName());
+        commandWrite(player.getPlayerName());
     }
 }
diff --git a/src/main/java/com/comandante/creeper/managers/GameManager.java b/src/main/java/com/comandante/creeper/managers/GameManager.java
index 0ee488c838d2c7afbcf74afecc371e5e3778c042..e982939e761307a8367b4bcf5d893a1e11a995af 100644
--- a/src/main/java/com/comandante/creeper/managers/GameManager.java
+++ b/src/main/java/com/comandante/creeper/managers/GameManager.java
@@ -12,13 +12,10 @@ import com.comandante.creeper.server.CreeperSession;
 import com.google.common.base.Optional;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Interners;
-import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.text.WordUtils;
 import org.fusesource.jansi.Ansi;
 import org.jboss.netty.channel.MessageEvent;
 
-import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
@@ -96,56 +93,6 @@ public class GameManager {
 
     private static final Integer LOBBY_ID = 1;
 
-    public void who(Player player) {
-        Set<Player> allPlayers = getAllPlayers();
-        StringBuilder stringBuilder = new StringBuilder();
-        stringBuilder.append(new Ansi().fg(Ansi.Color.CYAN).toString());
-        stringBuilder.append("----------------------\r\n");
-        stringBuilder.append("|--active users------|\r\n");
-        stringBuilder.append("----------------------\r\n");
-        for (Player allPlayer : allPlayers) {
-            stringBuilder.append(allPlayer.getPlayerName());
-        }
-        stringBuilder.append(new Ansi().reset().toString());
-        channelUtils.write(player.getPlayerId(), stringBuilder.toString());
-    }
-
-    public void tell(Player sourcePlayer, String rawMessage) {
-        ArrayList<String> parts = new ArrayList<>(Arrays.asList(rawMessage.split(" ")));
-        if (parts.size() < 3) {
-            channelUtils.write(sourcePlayer.getPlayerId(), "tell failed, no message to send.");
-            return;
-        }
-        //remove the literal 'tell'
-        parts.remove(0);
-        String destinationUsername = parts.get(0);
-        Player desintationPlayer = getPlayerManager().getPlayerByUsername(destinationUsername);
-        if (desintationPlayer == null) {
-            channelUtils.write(sourcePlayer.getPlayerId(), "tell failed, unknown user.");
-            return;
-        }
-        if (desintationPlayer.getPlayerId().equals(sourcePlayer.getPlayerId())) {
-            channelUtils.write(sourcePlayer.getPlayerId(), "tell failed, you're talking to yourself.");
-            return;
-        }
-        parts.remove(0);
-
-        String tellMessage = StringUtils.join(parts, " ");
-        privateMessage(sourcePlayer, desintationPlayer, tellMessage);
-
-    }
-
-    private void privateMessage(Player sourcePlayer, Player destinationPlayer, String message) {
-        StringBuilder stringBuilder = new StringBuilder();
-        String sourcePlayerColor = new Ansi().fg(Ansi.Color.WHITE).toString();
-        String destinationPlayercolor = new Ansi().fg(Ansi.Color.YELLOW).toString();
-        stringBuilder.append("*").append(sourcePlayer.getPlayerName()).append("* ");
-        stringBuilder.append(message);
-        stringBuilder.append(new Ansi().reset().toString());
-        channelUtils.write(destinationPlayer.getPlayerId(), destinationPlayercolor + stringBuilder.toString());
-        channelUtils.write(sourcePlayer.getPlayerId(), sourcePlayerColor + stringBuilder.toString());
-    }
-
     public Set<Player> getAllPlayers() {
         ImmutableSet.Builder<Player> builder = ImmutableSet.builder();
         Iterator<Map.Entry<Integer, Room>> rooms = roomManager.getRooms();
@@ -176,10 +123,10 @@ public class GameManager {
                 StringBuilder sb = new StringBuilder();
                 sb.append(movement.getPlayer().getPlayerName());
                 sb.append(" ").append(movement.getRoomExitMessage());
-                channelUtils.write(next.getPlayerId(), sb.toString());
+                channelUtils.writeNoPrompt(next.getPlayerId(), sb.toString());
             }
             for (Player next : playerManager.getPresentPlayers(destinationRoom)) {
-                channelUtils.write(next.getPlayerId(), movement.getPlayer().getPlayerName() + " arrived.");
+                channelUtils.writeNoPrompt(next.getPlayerId(), movement.getPlayer().getPlayerName() + " arrived.");
             }
             destinationRoom.addPresentPlayer(movement.getPlayer().getPlayerId());
         }
@@ -196,40 +143,6 @@ public class GameManager {
         }
     }
 
-    public void say(Player sourcePlayer, String message) {
-        Optional<Room> playerCurrentRoomOpt = roomManager.getPlayerCurrentRoom(sourcePlayer);
-        if (!playerCurrentRoomOpt.isPresent()) {
-            throw new RuntimeException("playerCurrentRoom is missing!");
-        }
-
-        Room playerCurrentRoom = playerCurrentRoomOpt.get();
-        Set<Player> presentPlayers = playerManager.getPresentPlayers(playerCurrentRoom);
-
-        for (Player presentPlayer : presentPlayers) {
-            StringBuilder stringBuilder = new StringBuilder();
-            stringBuilder.append(new Ansi().fg(Ansi.Color.RED).toString());
-            stringBuilder.append("<").append(sourcePlayer.getPlayerName()).append("> ").append(message);
-            stringBuilder.append(new Ansi().reset().toString());
-            channelUtils.write(presentPlayer.getPlayerId(), stringBuilder.toString());
-        }
-    }
-
-    public void gossip(Player sourcePlayer, String message) {
-        Iterator<Map.Entry<String, Player>> players = playerManager.getPlayers();
-        while (players.hasNext()) {
-            StringBuilder stringBuilder = new StringBuilder();
-            Player player = players.next().getValue();
-            if (player.getPlayerId().equals(sourcePlayer.getPlayerId())) {
-                stringBuilder.append(new Ansi().fg(Ansi.Color.WHITE).toString());
-            } else {
-                stringBuilder.append(new Ansi().fg(Ansi.Color.MAGENTA).toString());
-            }
-            stringBuilder.append("[").append(sourcePlayer.getPlayerName()).append("] ").append(message);
-            stringBuilder.append(new Ansi().reset().toString());
-            channelUtils.write(player.getPlayerId(), stringBuilder.toString());
-        }
-    }
-
     private String getExits(Room room, Player player) {
         StringBuilder stringBuilder = new StringBuilder();
         stringBuilder.append("[ Exits: ");
@@ -331,14 +244,6 @@ public class GameManager {
         currentRoomLogic(player);
     }
 
-    public void roomSay(Integer roomId, String message) {
-        Set<String> presentPlayerIds = roomManager.getRoom(roomId).getPresentPlayerIds();
-        for (String playerId : presentPlayerIds) {
-            Player player = playerManager.getPlayer(playerId);
-            channelUtils.write(player.getPlayerId(), message);
-        }
-    }
-
     public void placeItemInRoom(Integer roomId, String itemId) {
         roomManager.getRoom(roomId).addPresentItem(entityManager.getItemEntity(itemId).getItemId());
     }
diff --git a/src/main/java/com/comandante/creeper/npc/Npc.java b/src/main/java/com/comandante/creeper/npc/Npc.java
index 32b7517ec76a7a338ee8db56605e4e4b76e1697a..2cd0fae691539afe0caf1af1f3280cf3eb6af20b 100644
--- a/src/main/java/com/comandante/creeper/npc/Npc.java
+++ b/src/main/java/com/comandante/creeper/npc/Npc.java
@@ -57,6 +57,5 @@ public abstract class Npc extends CreeperEntity {
         sb.append(new Ansi().fg(Ansi.Color.RED).toString());
         sb.append(name).append(": ").append(message);
         sb.append(new Ansi().reset().toString());
-        gameManager.roomSay(roomId, sb.toString());
     }
 }
diff --git a/src/main/java/com/comandante/creeper/server/ChannelUtils.java b/src/main/java/com/comandante/creeper/server/ChannelUtils.java
index 4c564a926645899c997515ad7fac2e4aa698df14..a72e841421df891e3a23b6a1db7cad92543d0d13 100644
--- a/src/main/java/com/comandante/creeper/server/ChannelUtils.java
+++ b/src/main/java/com/comandante/creeper/server/ChannelUtils.java
@@ -15,14 +15,24 @@ public class ChannelUtils {
         this.roomManager = roomManager;
     }
 
+    public void writeNoPrompt(String playerId, String message) {
+         write(playerId, message, false);
+    }
+
     public void write(String playerId, String message) {
+        write(playerId, message, true);
+    }
+
+    public void write(String playerId, String message, boolean isPrompt) {
         Player player = playerManager.getPlayer(playerId);
         Room playerCurrentRoom = roomManager.getPlayerCurrentRoom(player).get();
         StringBuilder sb = new StringBuilder();
         sb.append("\r\n");
         sb.append(sanitze(message));
         sb.append(("\r\n"));
-        sb.append(playerManager.getPrompt(playerId, playerCurrentRoom.getRoomId()));
+        if (isPrompt) {
+            sb.append(playerManager.getPrompt(playerId, playerCurrentRoom.getRoomId()));
+        }
         player.getChannel().write(sb.toString());
     }