diff --git a/src/main/java/com/comandante/creeper/configuration/ConfigureNpc.java b/src/main/java/com/comandante/creeper/configuration/ConfigureNpc.java
index 22a44afa4c6e5716ea37dffaa1113595c5d2a005..674cd47fc02af2dd6810d2452d15400be3934234 100644
--- a/src/main/java/com/comandante/creeper/configuration/ConfigureNpc.java
+++ b/src/main/java/com/comandante/creeper/configuration/ConfigureNpc.java
@@ -6,13 +6,11 @@ import com.comandante.creeper.core_game.GameManager;
 import com.comandante.creeper.entity.EntityManager;
 import com.comandante.creeper.items.Forage;
 import com.comandante.creeper.items.ItemMetadata;
-import com.comandante.creeper.merchant.LloydBartender;
-import com.comandante.creeper.merchant.MerchantItemForSale;
+import com.comandante.creeper.merchant.Merchant;
 import com.comandante.creeper.npc.Npc;
 import com.comandante.creeper.spawner.ItemSpawner;
 import com.comandante.creeper.spawner.NpcSpawner;
 import com.comandante.creeper.spawner.SpawnRule;
-import com.google.common.collect.Lists;
 
 import java.io.IOException;
 import java.util.List;
@@ -54,6 +52,11 @@ public class ConfigureNpc {
             }
         }
 
+        List<Merchant> allMerchantMetadatas = gameManager.getMerchantStorage().getAllMerchants();
+        for (Merchant merchant: allMerchantMetadatas) {
+            gameManager.getRoomManager().addMerchant(merchant);
+        }
+
 //        ItemSpawner itemSpawner = new ItemSpawner(ItemType.SMALL_HEALTH_POTION, new SpawnRuleBuilder().setArea(Area.NEWBIE_ZONE).setSpawnIntervalTicks(600).setMaxInstances(100).setMaxPerRoom(5).setRandomPercent(40).createSpawnRule(), gameManager);
 //        ItemSpawner itemSpawner1 = new ItemSpawner(ItemType.SMALL_HEALTH_POTION, new SpawnRuleBuilder().setArea(Area.FANCYHOUSE_ZONE).setSpawnIntervalTicks(600).setMaxInstances(12).setMaxPerRoom(2).setRandomPercent(50).createSpawnRule(), gameManager);
 //        ItemSpawner itemSpawner2 = new ItemSpawner(ItemType.SMALL_HEALTH_POTION, new SpawnRuleBuilder().setArea(Area.HOUSE_ZONE).setSpawnIntervalTicks(600).setMaxInstances(12).setMaxPerRoom(2).setRandomPercent(50).createSpawnRule(), gameManager);
@@ -66,14 +69,14 @@ public class ConfigureNpc {
 //        entityManager.addEntity(itemSpawner2);
 //        entityManager.addEntity(itemSpawner5);
 
-        List<MerchantItemForSale> itemsForSale = Lists.newArrayList();
-        itemsForSale.add(new MerchantItemForSale("small health potion", 8));
-        itemsForSale.add(new MerchantItemForSale("purple drank", 80));
-        itemsForSale.add(new MerchantItemForSale("biggers skin satchel", 25000));
-//
-        LloydBartender lloydBartender = new LloydBartender(gameManager, itemsForSale);
-        gameManager.getRoomManager().addMerchant(64, lloydBartender);
-//
+//        List<MerchantItemForSale> itemsForSale = Lists.newArrayList();
+//        itemsForSale.add(new MerchantItemForSale("small health potion", 8));
+//        itemsForSale.add(new MerchantItemForSale("purple drank", 80));
+//        itemsForSale.add(new MerchantItemForSale("biggers skin satchel", 25000));
+////
+//        LloydBartender lloydBartender = new LloydBartender(gameManager, itemsForSale);
+//        gameManager.getRoomManager().addMerchant(64, lloydBartender);
+////
 //        Map<Integer, MerchantItemForSale> nigelForSale = Maps.newLinkedHashMap();
 //        nigelForSale.put(1, new MerchantItemForSale(ItemType.SMALL_HEALTH_POTION, 6));
 //
diff --git a/src/main/java/com/comandante/creeper/core_game/GameManager.java b/src/main/java/com/comandante/creeper/core_game/GameManager.java
index ba31db77a85df0b3db7bf696ac28c4d1f4ab3e78..6fb4ea6bb4c6f1e300f468ecd356f45d161309ab 100644
--- a/src/main/java/com/comandante/creeper/core_game/GameManager.java
+++ b/src/main/java/com/comandante/creeper/core_game/GameManager.java
@@ -28,6 +28,7 @@ import com.comandante.creeper.stats.StatsBuilder;
 import com.comandante.creeper.stats.modifier.StatsModifierFactory;
 import com.comandante.creeper.storage.FilebasedJsonStorage;
 import com.comandante.creeper.storage.ItemStorage;
+import com.comandante.creeper.storage.MerchantStorage;
 import com.comandante.creeper.storage.NpcStorage;
 import com.comandante.creeper.world.FloorManager;
 import com.comandante.creeper.world.MapsManager;
@@ -92,6 +93,12 @@ public class GameManager {
     private final Gson gson;
     private final FilebasedJsonStorage filebasedJsonStorage;
 
+    public MerchantStorage getMerchantStorage() {
+        return merchantStorage;
+    }
+
+    private final MerchantStorage merchantStorage;
+
 
     public GameManager(CreeperConfiguration creeperConfiguration, RoomManager roomManager, PlayerManager playerManager, EntityManager entityManager, MapsManager mapsManager, ChannelCommunicationUtils channelUtils, HttpClient httpClient) {
         this.roomManager = roomManager;
@@ -124,6 +131,7 @@ public class GameManager {
         this.filebasedJsonStorage = new FilebasedJsonStorage(gson);
         this.npcStorage = new NpcStorage(this, filebasedJsonStorage);
         this.itemStorage = new ItemStorage(filebasedJsonStorage);
+        this.merchantStorage = new MerchantStorage(this, filebasedJsonStorage);
         this.httpclient = httpClient;
     }
 
diff --git a/src/main/java/com/comandante/creeper/merchant/BlackbeardRogue.java b/src/main/java/com/comandante/creeper/merchant/BlackbeardRogue.java
index 4fb9dc20cad6c8aa1d8ca32bdb6cc0f10b73d142..fc8e379afebfb5289187afb105fcbbfb4a62d8a5 100644
--- a/src/main/java/com/comandante/creeper/merchant/BlackbeardRogue.java
+++ b/src/main/java/com/comandante/creeper/merchant/BlackbeardRogue.java
@@ -1,3 +1,4 @@
+/*
 package com.comandante.creeper.merchant;
 
 import com.comandante.creeper.core_game.GameManager;
@@ -24,3 +25,4 @@ public class BlackbeardRogue extends Merchant {
         super(gameManager, NAME, colorName, validTriggers, merchantItemForSales, welcomeMessage);
     }
 }
+*/
diff --git a/src/main/java/com/comandante/creeper/merchant/Blacksmith.java b/src/main/java/com/comandante/creeper/merchant/Blacksmith.java
index 1943d206cac40794389c9f1ed9fc07a7c8697d42..dae36afa690b42a56642eaf8cf57dddbbee7f93f 100644
--- a/src/main/java/com/comandante/creeper/merchant/Blacksmith.java
+++ b/src/main/java/com/comandante/creeper/merchant/Blacksmith.java
@@ -1,3 +1,4 @@
+/*
 package com.comandante.creeper.merchant;
 
 
@@ -35,3 +36,4 @@ public class Blacksmith extends Merchant {
         super(gameManager, NAME, colorName, validTriggers, merchantItemForSales, welcomeMessage);
     }
 }
+*/
diff --git a/src/main/java/com/comandante/creeper/merchant/GrimulfWizard.java b/src/main/java/com/comandante/creeper/merchant/GrimulfWizard.java
index 526cad787df00ed719a749cefbadec8f39e843d8..620b8a86517d6ff71594fb0da6620ffb8a215c4f 100644
--- a/src/main/java/com/comandante/creeper/merchant/GrimulfWizard.java
+++ b/src/main/java/com/comandante/creeper/merchant/GrimulfWizard.java
@@ -1,3 +1,4 @@
+/*
 package com.comandante.creeper.merchant;
 
 
@@ -25,3 +26,4 @@ public class GrimulfWizard extends Merchant {
         super(gameManager, NAME, colorName, validTriggers, merchantItemForSales, welcomeMessage);
     }
 }
+*/
diff --git a/src/main/java/com/comandante/creeper/merchant/JimBanker.java b/src/main/java/com/comandante/creeper/merchant/JimBanker.java
index 4d740233e8b4b1d84ea38dc311fe64b18fe8b07f..495ebf4f2acbf1bab39a921f4831a6a6b9d05cb8 100644
--- a/src/main/java/com/comandante/creeper/merchant/JimBanker.java
+++ b/src/main/java/com/comandante/creeper/merchant/JimBanker.java
@@ -1,3 +1,4 @@
+/*
 package com.comandante.creeper.merchant;
 
 
@@ -31,3 +32,4 @@ public class JimBanker extends Merchant {
     }
 }
 
+*/
diff --git a/src/main/java/com/comandante/creeper/merchant/KetilCommissary.java b/src/main/java/com/comandante/creeper/merchant/KetilCommissary.java
index f01357b8406987fed230b9e838538ec9a0cad2c3..5ee11e8eb820473527c8de766aaab3d8d925cc16 100644
--- a/src/main/java/com/comandante/creeper/merchant/KetilCommissary.java
+++ b/src/main/java/com/comandante/creeper/merchant/KetilCommissary.java
@@ -1,3 +1,4 @@
+/*
 package com.comandante.creeper.merchant;
 
 import com.comandante.creeper.core_game.GameManager;
@@ -24,3 +25,4 @@ public class KetilCommissary extends Merchant {
         super(gameManager, NAME, colorName, validTriggers, merchantItemForSales, welcomeMessage);
     }
 }
+*/
diff --git a/src/main/java/com/comandante/creeper/merchant/LloydBartender.java b/src/main/java/com/comandante/creeper/merchant/LloydBartender.java
index 6f6f297b96677e6c13d0edb3307438e9779e88da..a6eff8cf171c817a0d6efd4a69c61ae034b1c3a4 100644
--- a/src/main/java/com/comandante/creeper/merchant/LloydBartender.java
+++ b/src/main/java/com/comandante/creeper/merchant/LloydBartender.java
@@ -1,3 +1,4 @@
+/*
 package com.comandante.creeper.merchant;
 
 import com.comandante.creeper.core_game.GameManager;
@@ -32,3 +33,4 @@ public class LloydBartender extends Merchant {
         super(gameManager, NAME, colorName, validTriggers, merchantItemForSales, welcomeMessage);
     }
 }
+*/
diff --git a/src/main/java/com/comandante/creeper/merchant/LockerRoomGuy.java b/src/main/java/com/comandante/creeper/merchant/LockerRoomGuy.java
index 854af255e8d3bfb2109b7635235680801f7e9e39..72e18877d04f21f61840024558ba033580309a7d 100644
--- a/src/main/java/com/comandante/creeper/merchant/LockerRoomGuy.java
+++ b/src/main/java/com/comandante/creeper/merchant/LockerRoomGuy.java
@@ -1,3 +1,4 @@
+/*
 package com.comandante.creeper.merchant;
 
 import com.comandante.creeper.core_game.GameManager;
@@ -30,3 +31,4 @@ public class LockerRoomGuy extends Merchant {
     }
 }
 
+*/
diff --git a/src/main/java/com/comandante/creeper/merchant/Merchant.java b/src/main/java/com/comandante/creeper/merchant/Merchant.java
index ceedad93f5c4e8ddd9e1791310fe290e52ef1395..1c8f21d5e1c1aee8c10c49666e9543c8be970c4a 100644
--- a/src/main/java/com/comandante/creeper/merchant/Merchant.java
+++ b/src/main/java/com/comandante/creeper/merchant/Merchant.java
@@ -9,22 +9,23 @@ import org.nocrala.tools.texttablefmt.Table;
 import java.text.NumberFormat;
 import java.util.*;
 
-public abstract class Merchant {
+public class Merchant {
 
-    private long lastPhraseTimestamp;
     private final GameManager gameManager;
+    private final String internalName;
     private final String name;
     private final String colorName;
     private final Set<String> validTriggers;
     private final List<MerchantItemForSale> merchantItemForSales;
     private final String welcomeMessage;
     private final MerchantType merchantType;
+    private final Integer roomId;
 
-    public Merchant(GameManager gameManager, String name, String colorName, Set<String> validTriggers, List<MerchantItemForSale> merchantItemForSales, String welcomeMessage) {
-        this(gameManager, name, colorName, validTriggers, merchantItemForSales, welcomeMessage, MerchantType.BASIC);
+    public Merchant(GameManager gameManager, String internalName, String name, String colorName, Set<String> validTriggers, List<MerchantItemForSale> merchantItemForSales, String welcomeMessage, Integer roomId) {
+        this(gameManager, internalName, name, colorName, validTriggers, merchantItemForSales, welcomeMessage, roomId, MerchantType.BASIC);
     }
 
-    public Merchant(GameManager gameManager, String name, String colorName, Set<String> validTriggers, List<MerchantItemForSale> merchantItemForSales, String welcomeMessage, MerchantType merchantType) {
+    public Merchant(GameManager gameManager, String internalName, String name, String colorName, Set<String> validTriggers, List<MerchantItemForSale> merchantItemForSales, String welcomeMessage, Integer roomId, MerchantType merchantType) {
         this.gameManager = gameManager;
         this.name = name;
         this.colorName = colorName;
@@ -32,6 +33,13 @@ public abstract class Merchant {
         this.merchantItemForSales = merchantItemForSales;
         this.welcomeMessage = welcomeMessage;
         this.merchantType = merchantType;
+        this.roomId = roomId;
+        this.internalName = internalName;
+
+    }
+
+    public String getInternalName() {
+        return internalName;
     }
 
     public String getMenu() {
@@ -60,14 +68,14 @@ public abstract class Merchant {
         return t.render();
     }
 
-    public long getLastPhraseTimestamp() {
-        return lastPhraseTimestamp;
-    }
-
     public GameManager getGameManager() {
         return gameManager;
     }
 
+    public Integer getRoomId() {
+        return roomId;
+    }
+
     public String getName() {
         return name;
     }
diff --git a/src/main/java/com/comandante/creeper/merchant/MerchantMetadata.java b/src/main/java/com/comandante/creeper/merchant/MerchantMetadata.java
index ad8401e5e5ecfb58a2a544ec986a614e79a9eebf..541304ed7eac217272353c93a1062d3636645e99 100644
--- a/src/main/java/com/comandante/creeper/merchant/MerchantMetadata.java
+++ b/src/main/java/com/comandante/creeper/merchant/MerchantMetadata.java
@@ -5,12 +5,19 @@ import java.util.Set;
 
 public class MerchantMetadata {
 
+    private String internalName;
+    private Integer roomId;
     private String name;
     private String colorName;
     private Set<String> validTriggers;
     private List<MerchantItemForSale> merchantItemForSales;
     private String welcomeMessage;
 
+
+    public String getInternalName() {
+        return internalName;
+    }
+
     public String getName() {
         return name;
     }
@@ -39,8 +46,21 @@ public class MerchantMetadata {
         return merchantItemForSales;
     }
 
+    public void setInternalName(String internalName) {
+        this.internalName = internalName;
+    }
+
+    public Integer getRoomId() {
+        return roomId;
+    }
+
+    public void setRoomId(Integer roomId) {
+        this.roomId = roomId;
+    }
+
     public void setMerchantItemForSales(List<MerchantItemForSale> merchantItemForSales) {
         this.merchantItemForSales = merchantItemForSales;
+
     }
 
     public String getWelcomeMessage() {
diff --git a/src/main/java/com/comandante/creeper/merchant/NigelBartender.java b/src/main/java/com/comandante/creeper/merchant/NigelBartender.java
index 772075ddeb50f295892eeb8dea6088b662c1a207..0829e940f493930f6be08e22d437c12a3c4feabf 100644
--- a/src/main/java/com/comandante/creeper/merchant/NigelBartender.java
+++ b/src/main/java/com/comandante/creeper/merchant/NigelBartender.java
@@ -1,3 +1,4 @@
+/*
 package com.comandante.creeper.merchant;
 
 import com.comandante.creeper.core_game.GameManager;
@@ -24,3 +25,4 @@ public class NigelBartender extends Merchant {
         super(gameManager, NAME, colorName, validTriggers, merchantItemForSales, welcomeMessage);
     }
 }
+*/
diff --git a/src/main/java/com/comandante/creeper/merchant/OldWiseMan.java b/src/main/java/com/comandante/creeper/merchant/OldWiseMan.java
index bc568491e107d3fdb541b1a83b7eb8d0f81f5c8f..164caef6bcb07d008cde4e84d6a939f8f0e0a7c4 100644
--- a/src/main/java/com/comandante/creeper/merchant/OldWiseMan.java
+++ b/src/main/java/com/comandante/creeper/merchant/OldWiseMan.java
@@ -1,17 +1,7 @@
 package com.comandante.creeper.merchant;
 
-import com.comandante.creeper.core_game.GameManager;
-import com.comandante.creeper.server.player_communication.Color;
-
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import static com.comandante.creeper.server.player_communication.Color.BOLD_ON;
-
-public class OldWiseMan extends Merchant {
-    private final static long phraseIntervalMs = 300000;
+public class OldWiseMan {
+ /*   private final static long phraseIntervalMs = 300000;
     private final static String NAME = "old wise man";
     private final static String colorName = BOLD_ON + Color.CYAN + NAME + Color.RESET;
     private final static String welcomeMessage = "The "+ colorName +" can assist you in choosing a character class.\r\n";
@@ -27,6 +17,6 @@ public class OldWiseMan extends Merchant {
     @Override
     public String getMenu() {
         return null;
-    }
+    }*/
 }
 
diff --git a/src/main/java/com/comandante/creeper/merchant/WentworthTailor.java b/src/main/java/com/comandante/creeper/merchant/WentworthTailor.java
index c38a894f028e1d26e7b3c4756a85bfcd6971f9cc..3df29817e6e297a4b0693b2c899dcd8c0868087b 100644
--- a/src/main/java/com/comandante/creeper/merchant/WentworthTailor.java
+++ b/src/main/java/com/comandante/creeper/merchant/WentworthTailor.java
@@ -1,3 +1,4 @@
+/*
 package com.comandante.creeper.merchant;
 
 import com.comandante.creeper.core_game.GameManager;
@@ -24,3 +25,4 @@ public class WentworthTailor extends Merchant {
         super(gameManager, NAME, colorName, validTriggers, merchantItemForSales, welcomeMessage);
     }
 }
+*/
diff --git a/src/main/java/com/comandante/creeper/merchant/Wizard.java b/src/main/java/com/comandante/creeper/merchant/Wizard.java
index a98f07ca35df83e040e2e5d00d66977d0b4b2501..23577bcce2258e4b7c301794b1895db8f75a6770 100644
--- a/src/main/java/com/comandante/creeper/merchant/Wizard.java
+++ b/src/main/java/com/comandante/creeper/merchant/Wizard.java
@@ -1,3 +1,4 @@
+/*
 package com.comandante.creeper.merchant;
 
 import com.comandante.creeper.core_game.GameManager;
@@ -38,3 +39,4 @@ public class Wizard extends Merchant {
         super(gameManager, NAME, colorName, validTriggers, merchantItemForSales, welcomeMessage);
     }
 }
+*/
diff --git a/src/main/java/com/comandante/creeper/storage/FilebasedJsonStorage.java b/src/main/java/com/comandante/creeper/storage/FilebasedJsonStorage.java
index 259d56786c8285f3b1765c6f380ee2dbc0cf8c75..887f258faae5c6cf9f82286ad6d9e2b9007c1e7a 100644
--- a/src/main/java/com/comandante/creeper/storage/FilebasedJsonStorage.java
+++ b/src/main/java/com/comandante/creeper/storage/FilebasedJsonStorage.java
@@ -46,6 +46,7 @@ public class FilebasedJsonStorage {
     }
 
     private List<String> getAllJsonStrings(String storageDirectory, boolean recursive) {
+        new File(storageDirectory).mkdirs();
         Iterator<File> iterator = FileUtils.iterateFiles(new File(storageDirectory), new String[]{"json"}, recursive);
         return toListOfJsonStrings(iterator);
     }
diff --git a/src/main/java/com/comandante/creeper/storage/MerchantStorage.java b/src/main/java/com/comandante/creeper/storage/MerchantStorage.java
new file mode 100644
index 0000000000000000000000000000000000000000..ec867a65cddf3ab60ed26a419d24861634b0c83b
--- /dev/null
+++ b/src/main/java/com/comandante/creeper/storage/MerchantStorage.java
@@ -0,0 +1,60 @@
+package com.comandante.creeper.storage;
+
+import com.comandante.creeper.core_game.GameManager;
+import com.comandante.creeper.merchant.Merchant;
+import com.comandante.creeper.merchant.MerchantMetadata;
+import org.apache.log4j.Logger;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+public class MerchantStorage {
+
+    public final static String LOCAL_MERCHANT_DIRECTORY = "world/merchants/";
+
+    private static final Logger log = Logger.getLogger(MerchantStorage.class);
+    private final FilebasedJsonStorage filebasedJsonStorage;
+    private final GameManager gameManager;
+    private final List<MerchantMetadata> merchantMetadatas;
+
+    public MerchantStorage(GameManager gameManager, FilebasedJsonStorage filebasedJsonStorage) {
+        this.gameManager = gameManager;
+        this.filebasedJsonStorage = filebasedJsonStorage;
+        this.merchantMetadatas = filebasedJsonStorage.readAllMetadatas(LOCAL_MERCHANT_DIRECTORY, true, new MerchantMetadata());
+    }
+
+    public List<Merchant> getAllMerchants() {
+        return merchantMetadatas.stream()
+                .map(this::create)
+                .collect(Collectors.toList());
+    }
+
+    public Merchant create(MerchantMetadata merchantMetadata) {
+        return new Merchant(gameManager,
+                merchantMetadata.getInternalName(),
+                merchantMetadata.getName(),
+                merchantMetadata.getColorName(),
+                merchantMetadata.getValidTriggers(),
+                merchantMetadata.getMerchantItemForSales(),
+                merchantMetadata.getWelcomeMessage(),
+                merchantMetadata.getRoomId());
+    }
+
+
+    public List<MerchantMetadata> getAllMerchantMetadatas() {
+        return merchantMetadatas;
+    }
+
+    public void saveMerchantMetadata(MerchantMetadata merchantMetadata) throws IOException {
+        filebasedJsonStorage.saveMetadata(merchantMetadata.getInternalName(), LOCAL_MERCHANT_DIRECTORY, merchantMetadata);
+    }
+
+    public Optional<MerchantMetadata> get(String internalName) {
+        return merchantMetadatas.stream()
+                .filter(merchantMetadata -> merchantMetadata.getInternalName().equals(internalName))
+                .findFirst();
+    }
+
+}
diff --git a/src/main/java/com/comandante/creeper/world/RoomManager.java b/src/main/java/com/comandante/creeper/world/RoomManager.java
index bcfa0cbab8c585ffaf9c4c67f7b3d62ccef3c85a..6f300cec1d765c4726a1f5d7f7ad19acaa54552a 100644
--- a/src/main/java/com/comandante/creeper/world/RoomManager.java
+++ b/src/main/java/com/comandante/creeper/world/RoomManager.java
@@ -43,8 +43,8 @@ public class RoomManager {
         return rooms.entrySet().iterator();
     }
 
-    public void addMerchant(Integer roomId, Merchant merchant) {
-        getRoom(roomId).addMerchant(merchant);
+    public void addMerchant(Merchant merchant) {
+        getRoom(merchant.getRoomId()).addMerchant(merchant);
     }
 
     public Room getRoom(Integer roomId) {
diff --git a/src/test/com/comandante/creeper/items/ItemMetadataTest.java b/src/test/com/comandante/creeper/items/ItemMetadataTest.java
index c1938ad3194ccdc603b2e561afe3bb31ad05a975..f86d59a32876da6e1c396c1da02007747e313b4d 100644
--- a/src/test/com/comandante/creeper/items/ItemMetadataTest.java
+++ b/src/test/com/comandante/creeper/items/ItemMetadataTest.java
@@ -1,16 +1,22 @@
 package com.comandante.creeper.items;
 
 import com.comandante.creeper.merchant.MerchantItemForSale;
-import com.comandante.creeper.stats.Stats;
-import com.comandante.creeper.stats.StatsBuilder;
+import com.comandante.creeper.merchant.MerchantMetadata;
+import com.comandante.creeper.server.player_communication.Color;
 import com.comandante.creeper.storage.FilebasedJsonStorage;
 import com.comandante.creeper.storage.ItemStorage;
+import com.comandante.creeper.storage.MerchantStorage;
 import com.google.common.collect.Lists;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import org.junit.Test;
 
+import java.util.Arrays;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
+
+import static com.comandante.creeper.server.player_communication.Color.BOLD_ON;
 
 
 public class ItemMetadataTest {
@@ -214,12 +220,12 @@ public class ItemMetadataTest {
 //
 //
        //  RED CLAW PANTS
-        ItemMetadata itemMetadataPants = metadataFrom(ItemType.RED_CLAW_PANTS);
-        Stats statsPants = new StatsBuilder().setArmorRating(15).setStrength(7).createStats();
-        final Equipment equipmentPants = new Equipment(EquipmentSlotType.LEGS, statsPants);
-        itemMetadataPants.setEquipment(equipmentPants);
-        itemMetadataPants.setInternalItemName("rad claw pants1");
-        itemStorage.saveItemMetadata(itemMetadataPants);
+//        ItemMetadata itemMetadataPants = metadataFrom(ItemType.RED_CLAW_PANTS);
+//        Stats statsPants = new StatsBuilder().setArmorRating(15).setStrength(7).createStats();
+//        final Equipment equipmentPants = new Equipment(EquipmentSlotType.LEGS, statsPants);
+//        itemMetadataPants.setEquipment(equipmentPants);
+//        itemMetadataPants.setInternalItemName("rad claw pants1");
+//        itemStorage.saveItemMetadata(itemMetadataPants);
     }
 
 
@@ -247,12 +253,43 @@ public class ItemMetadataTest {
     @Test
     public void generateMerchants() throws Exception {
 
-        List<MerchantItemForSale> itemsForSale = Lists.newArrayList();
-        itemsForSale.add(new MerchantItemForSale("small health potion", 8));
-        itemsForSale.add(new MerchantItemForSale("purple drank", 80));
-        itemsForSale.add(new MerchantItemForSale("biggers skin satchel", 25000));
-//
-      //  LloydBartender lloydBartender = new LloydBartender(gameManager, itemsForSale);
+        // LLOYD BARTENDER
+        {
+            final String welcomeMessage = " _        _        _______           ______   _  _______ \r\n" +
+                    "( \\      ( \\      (  ___  )|\\     /|(  __  \\ ( )(  ____ \\\r\n" +
+                    "| (      | (      | (   ) |( \\   / )| (  \\  )|/ | (    \\/\r\n" +
+                    "| |      | |      | |   | | \\ (_) / | |   ) |   | (_____ \r\n" +
+                    "| |      | |      | |   | |  \\   /  | |   | |   (_____  )\r\n" +
+                    "| |      | |      | |   | |   ) (   | |   ) |         ) |\r\n" +
+                    "| (____/\\| (____/\\| (___) |   | |   | (__/  )   /\\____) |\r\n" +
+                    "(_______/(_______/(_______)   \\_/   (______/    \\_______)\r\n" +
+                    "                                                         ";
+
+
+            String name = "lloyd the bartender";
+            String colorName = BOLD_ON + Color.CYAN + name  + Color.RESET;
+            Set<String> validTriggers = new HashSet<String>(Arrays.asList(new String[]
+                            {"lloyd", "bartender", "barkeep", "Lloyd", "LLOYD", name}));
+
+            List<MerchantItemForSale> itemsForSale = Lists.newArrayList();
+            itemsForSale.add(new MerchantItemForSale("small health potion", 8));
+            itemsForSale.add(new MerchantItemForSale("purple drank", 80));
+            itemsForSale.add(new MerchantItemForSale("biggers skin satchel", 25000));
+            MerchantMetadata merchantMetadata = new MerchantMetadata();
+            merchantMetadata.setName(name);
+            merchantMetadata.setInternalName(name);
+            merchantMetadata.setColorName(colorName);
+            merchantMetadata.setMerchantItemForSales(itemsForSale);
+            merchantMetadata.setRoomId(64);
+            merchantMetadata.setValidTriggers(validTriggers);
+            merchantMetadata.setWelcomeMessage(welcomeMessage);
+
+            FilebasedJsonStorage filebasedJsonStorage = new FilebasedJsonStorage(new GsonBuilder().setPrettyPrinting().create());
+            MerchantStorage merchantStorage = new MerchantStorage(null, filebasedJsonStorage);
+            merchantStorage.saveMerchantMetadata(merchantMetadata);
+
+        }
+
     }
 
 }
diff --git a/world/merchants/lloyd_the_bartender.json b/world/merchants/lloyd_the_bartender.json
new file mode 100644
index 0000000000000000000000000000000000000000..3ece7ce52efa0ccf572e51a8781a219b562bf373
--- /dev/null
+++ b/world/merchants/lloyd_the_bartender.json
@@ -0,0 +1,29 @@
+{
+  "internalName": "lloyd the bartender",
+  "roomId": 64,
+  "name": "lloyd the bartender",
+  "colorName": "\u001b[1m\u001b[36mlloyd the bartender\u001b[m",
+  "validTriggers": [
+    "lloyd the bartender",
+    "bartender",
+    "LLOYD",
+    "barkeep",
+    "Lloyd",
+    "lloyd"
+  ],
+  "merchantItemForSales": [
+    {
+      "internalItemName": "small health potion",
+      "cost": 8
+    },
+    {
+      "internalItemName": "purple drank",
+      "cost": 80
+    },
+    {
+      "internalItemName": "biggers skin satchel",
+      "cost": 25000
+    }
+  ],
+  "welcomeMessage": " _        _        _______           ______   _  _______ \r\n( \\      ( \\      (  ___  )|\\     /|(  __  \\ ( )(  ____ \\\r\n| (      | (      | (   ) |( \\   / )| (  \\  )|/ | (    \\/\r\n| |      | |      | |   | | \\ (_) / | |   ) |   | (_____ \r\n| |      | |      | |   | |  \\   /  | |   | |   (_____  )\r\n| |      | |      | |   | |   ) (   | |   ) |         ) |\r\n| (____/\\| (____/\\| (___) |   | |   | (__/  )   /\\____) |\r\n(_______/(_______/(_______)   \\_/   (______/    \\_______)\r\n                                                         "
+}
\ No newline at end of file