diff --git a/src/main/java/com/comandante/creeper/Items/Item.java b/src/main/java/com/comandante/creeper/Items/Item.java
index a3645280d6ba0538ce0a92300af17853274fa0bd..0a0c3527e23563f35b49619b19c4464b17aa6b60 100644
--- a/src/main/java/com/comandante/creeper/Items/Item.java
+++ b/src/main/java/com/comandante/creeper/Items/Item.java
@@ -2,22 +2,23 @@ package com.comandante.creeper.Items;
 
 
 import java.io.Serializable;
+import java.util.List;
 
 public class Item implements Serializable {
 
     private String itemName;
     private String itemDescription;
-    private String shortName;
+    private List<String> itemTriggers;
     private String restingName;
     private String itemId;
     private Integer itemTypeId;
     private int numberOfUses;
     private boolean isWithPlayer;
 
-    protected Item(String itemName, String itemDescription, String shortName, String restingName, String itemId, Integer itemTypeId, int numberOfUses, boolean isWithPlayer) {
+    protected Item(String itemName, String itemDescription, List<String> itemTriggers, String restingName, String itemId, Integer itemTypeId, int numberOfUses, boolean isWithPlayer) {
         this.itemName = itemName;
         this.itemDescription = itemDescription;
-        this.shortName = shortName;
+        this.itemTriggers = itemTriggers;
         this.restingName = restingName;
         this.itemId = itemId;
         this.itemTypeId = itemTypeId;
@@ -64,8 +65,8 @@ public class Item implements Serializable {
         return itemDescription;
     }
 
-    public String getShortName() {
-        return shortName;
+    public List<String> getItemTriggers() {
+        return itemTriggers;
     }
 
     public void setItemName(String itemName) {
@@ -76,8 +77,8 @@ public class Item implements Serializable {
         this.itemDescription = itemDescription;
     }
 
-    public void setShortName(String shortName) {
-        this.shortName = shortName;
+    public void setItemTriggers(List<String> itemTriggers) {
+        this.itemTriggers = itemTriggers;
     }
 
     public String getRestingName() {
diff --git a/src/main/java/com/comandante/creeper/Items/ItemType.java b/src/main/java/com/comandante/creeper/Items/ItemType.java
index 08be3210bcd941e15d98f28f78fcdaa3a945a183..e6b90813d3286b7bd586846a5736061da7910a03 100644
--- a/src/main/java/com/comandante/creeper/Items/ItemType.java
+++ b/src/main/java/com/comandante/creeper/Items/ItemType.java
@@ -1,26 +1,28 @@
 package com.comandante.creeper.Items;
 
+import java.util.Arrays;
+import java.util.List;
 import java.util.UUID;
 
 import static com.comandante.creeper.model.Color.*;
 
 public enum ItemType {
-    UNKNOWN(0, "", "", "", "", false, 0, 0),
-    KEY(1, "key",
+    UNKNOWN(0, Arrays.asList(""), "", "", "", false, 0, 0),
+    KEY(1, Arrays.asList("key", "gold key", "shiny gold key"),
             YELLOW + "a shiny gold key" + RESET,
             YELLOW + "a shiny gold key" + RESET + " catches your eye.",
             "A basic key with nothing really remarkable other than its made of gold.",
             false,
             0,
             60),
-    BEER(2, "beer",
+    BEER(2, Arrays.asList("beer", "can of beer"),
             CYAN + "a dented can of beer" + RESET,
             CYAN + "a beer" + RESET + " lies on the ground, unopened",
             "This beer looks sketch but you'll probably drink it anyways.",
             false,
             0,
             60),
-    BOOK(3, "beer",
+    BOOK(3, Arrays.asList("book", "used book"),
             MAGENTA + "a leather book" + RESET,
             MAGENTA + "a well used book" + RESET + " with what looks like a leather back rests here.",
             "A book written in a foreign language. Doesn't matter as you can't read.",
@@ -29,7 +31,7 @@ public enum ItemType {
             60);
 
     private final Integer itemTypeCode;
-    private final String itemShortName;
+    private final List<String> itemTriggers;
     private final String restingName;
     private final String itemName;
     private final String itemDescription;
@@ -37,9 +39,9 @@ public enum ItemType {
     private final int maxUses;
     private final int itemHalfLifeTicks;
 
-    ItemType(Integer itemTypeCode, String itemShortName, String itemName, String restingName, String itemDescription, boolean isDisposable, int maxUses, int itemHalfLifeTicks) {
+    ItemType(Integer itemTypeCode, List<String> itemTriggers, String itemName, String restingName, String itemDescription, boolean isDisposable, int maxUses, int itemHalfLifeTicks) {
         this.itemTypeCode = itemTypeCode;
-        this.itemShortName = itemShortName;
+        this.itemTriggers = itemTriggers;
         this.itemName = itemName;
         this.restingName = restingName;
         this.itemDescription = itemDescription;
@@ -53,7 +55,7 @@ public enum ItemType {
     }
 
     public Item create() {
-        return new Item(getItemName(), getItemDescription(), getItemShortName(), getRestingName(), UUID.randomUUID().toString(), getItemTypeCode(), 0, false);
+        return new Item(getItemName(), getItemDescription(), getItemTriggers(), getRestingName(), UUID.randomUUID().toString(), getItemTypeCode(), 0, false);
     }
 
 
@@ -65,8 +67,8 @@ public enum ItemType {
         return itemTypeCode;
     }
 
-    public String getItemShortName() {
-        return itemShortName;
+    public List<String> getItemTriggers() {
+        return itemTriggers;
     }
 
     public String getItemName() {
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 9dc9a99dc355ff9065547ba374f1128ca486692f..dd2e6c8f37dfc7d012ba909207a62fd7858913b7 100644
--- a/src/main/java/com/comandante/creeper/command/commands/DropCommand.java
+++ b/src/main/java/com/comandante/creeper/command/commands/DropCommand.java
@@ -5,6 +5,7 @@ import com.comandante.creeper.managers.GameManager;
 import com.comandante.creeper.model.PlayerMetadata;
 import com.comandante.creeper.model.Room;
 import com.comandante.creeper.server.CreeperSession;
+import com.google.common.base.Joiner;
 import com.google.common.collect.ImmutableList;
 
 import java.util.ArrayList;
@@ -30,10 +31,11 @@ public class DropCommand extends Command {
             commandWrite("No item specified.");
             return;
         }
-        String itemTarget = originalMessageParts.get(1);
+        originalMessageParts.remove(0);
+        String itemTarget = Joiner.on(" ").join(originalMessageParts);
         for (String inventoryId : getGameManager().getPlayerManager().getPlayerMetadata(getPlayerId()).getInventory()) {
             Item itemEntity = getGameManager().getEntityManager().getItemEntity(inventoryId);
-            if (itemEntity.getShortName().equals(itemTarget)) {
+            if (itemEntity.getItemTriggers().contains(itemTarget)) {
                 itemEntity.setWithPlayer(false);
                 Room playerCurrentRoom = getGameManager().getRoomManager().getPlayerCurrentRoom(getGameManager().getPlayerManager().getPlayer(getPlayerId())).get();
                 getGameManager().placeItemInRoom(playerCurrentRoom.getRoomId(), itemEntity.getItemId());
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 c3a7c153151e87ff89e2ac711489ac4e2fa1a100..6271a7d3b80e90017a5948b460950e6b2a16691c 100644
--- a/src/main/java/com/comandante/creeper/command/commands/PickUpCommand.java
+++ b/src/main/java/com/comandante/creeper/command/commands/PickUpCommand.java
@@ -4,6 +4,7 @@ import com.comandante.creeper.managers.GameManager;
 import com.comandante.creeper.Items.Item;
 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;
@@ -31,7 +32,9 @@ public class PickUpCommand extends Command {
         Set<String> itemIds = playerCurrentRoom.getItemIds();
         for (String next : itemIds) {
             Item itemEntity = getGameManager().getEntityManager().getItemEntity(next);
-            if (itemEntity.getShortName().equalsIgnoreCase(originalMessageParts.get(1))) {
+            originalMessageParts.remove(0);
+            String desiredPickUpItem = Joiner.on(" ").join(originalMessageParts);
+            if (itemEntity.getItemTriggers().contains(desiredPickUpItem)) {
                 getGameManager().acquireItem(player, itemEntity.getItemId());
                 roomSay(playerCurrentRoom.getRoomId(), getGameManager().getPlayerManager().getPlayer(getPlayerId()).getPlayerName() + " picked up " + itemEntity.getItemName());
                 return;
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 d41d05d8a549ef2adfb7a41486cd3c6e921650bb..eb0c2c2ab1fef99a524e3d20aabe7715ddc977f5 100644
--- a/src/main/java/com/comandante/creeper/command/commands/TellCommand.java
+++ b/src/main/java/com/comandante/creeper/command/commands/TellCommand.java
@@ -2,8 +2,8 @@ package com.comandante.creeper.command.commands;
 
 import com.comandante.creeper.managers.GameManager;
 import com.comandante.creeper.model.Player;
+import com.google.common.base.Joiner;
 import com.google.common.collect.ImmutableList;
-import org.apache.commons.lang3.StringUtils;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -44,7 +44,7 @@ public class TellCommand extends Command {
             return;
         }
         parts.remove(0);
-        String tellMessage = StringUtils.join(parts, " ");
+        String tellMessage = Joiner.on(" ").join(parts);
         StringBuilder stringBuilder = new StringBuilder();
         String destinationPlayercolor = YELLOW;
         stringBuilder.append("*").append(sourcePlayer.getPlayerName()).append("* ");
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 fcd78219db027ece151f3b41e87a5c60b3582f9e..06b85b20a87b786a407a2c43aab93b4b94dc2287 100644
--- a/src/main/java/com/comandante/creeper/command/commands/UseCommand.java
+++ b/src/main/java/com/comandante/creeper/command/commands/UseCommand.java
@@ -6,6 +6,7 @@ import com.comandante.creeper.Items.ItemType;
 import com.comandante.creeper.Items.ItemUseHandler;
 import com.comandante.creeper.managers.GameManager;
 import com.comandante.creeper.server.CreeperSession;
+import com.google.common.base.Joiner;
 import com.google.common.collect.ImmutableList;
 
 import java.util.ArrayList;
@@ -31,10 +32,11 @@ public class UseCommand extends Command {
             commandWrite("No item specified.");
             return;
         }
-        String itemTarget = originalMessageParts.get(1);
+        originalMessageParts.remove(0);
+        String itemTarget = Joiner.on(" ").join(originalMessageParts);
         for (String inventoryId : getGameManager().getPlayerManager().getPlayerMetadata(getPlayerId()).getInventory()) {
             Item itemEntity = getGameManager().getEntityManager().getItemEntity(inventoryId);
-            if (itemEntity.getShortName().equals(itemTarget)) {
+            if (itemEntity.getItemTriggers().contains(itemTarget)) {
                 new ItemUseHandler(itemEntity, creeperSession, getGameManager(), getPlayerId()).handle();
                 return;
             }