diff --git a/pom.xml b/pom.xml
index 9e05740302e117bb5a1b3dfd0d65c8e5290bb825..2593a7ca7ddc2579a453a7703f28eb7bb98205cc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -53,7 +53,7 @@
         <dependency>
             <groupId>org.mapdb</groupId>
             <artifactId>mapdb</artifactId>
-            <version>1.0.9</version>
+            <version>3.0.4</version>
         </dependency>
         <dependency>
             <groupId>com.google.code.gson</groupId>
@@ -75,11 +75,6 @@
             <artifactId>metrics-graphite</artifactId>
             <version>3.1.2</version>
         </dependency>
-        <dependency>
-            <groupId>com.googlecode.concurrentlinkedhashmap</groupId>
-            <artifactId>concurrentlinkedhashmap-lru</artifactId>
-            <version>1.4</version>
-        </dependency>
         <dependency>
             <groupId>log4j</groupId>
             <artifactId>log4j</artifactId>
diff --git a/src/main/java/com/comandante/creeper/Main.java b/src/main/java/com/comandante/creeper/Main.java
index 62746b7d4d98d4da8f230ccd98f85a55afc8f922..fffcae93fb2928242599b49a2c23a2a0e20ef74f 100644
--- a/src/main/java/com/comandante/creeper/Main.java
+++ b/src/main/java/com/comandante/creeper/Main.java
@@ -15,6 +15,7 @@ import com.comandante.creeper.player.PlayerManagementManager;
 import com.comandante.creeper.player.PlayerManager;
 import com.comandante.creeper.server.player_communication.ChannelUtils;
 import com.comandante.creeper.server.telnet.CreeperServer;
+import com.comandante.creeper.storage.MapDbAutoCommitService;
 import com.comandante.creeper.storage.WorldStorage;
 import com.comandante.creeper.world.MapsManager;
 import com.comandante.creeper.world.RoomManager;
@@ -81,11 +82,13 @@ public class Main {
 
         Files.isDirectory().apply(new File("world/"));
 
-        DB db = DBMaker.newFileDB(new File("world/" + creeperConfiguration.databaseFileName))
+        DB db = DBMaker.fileDB(new File("world/" + creeperConfiguration.databaseFileName))
+                .transactionEnable()
                 .closeOnJvmShutdown()
                 .make();
 
-        Gson gson = new GsonBuilder().create();
+        MapDbAutoCommitService mapDbAutoCommitService = new MapDbAutoCommitService(db);
+        mapDbAutoCommitService.startAsync();
 
         PlayerManager playerManager = new PlayerManager(db, new SessionManager());
         playerManager.createAllGauges();
diff --git a/src/main/java/com/comandante/creeper/entity/EntityManager.java b/src/main/java/com/comandante/creeper/entity/EntityManager.java
index dece67f944eb2f60b90ea8dea739f955b6217e55..2778b8a1c6a9561e2d1f9716f7ed248fd56aa6bb 100644
--- a/src/main/java/com/comandante/creeper/entity/EntityManager.java
+++ b/src/main/java/com/comandante/creeper/entity/EntityManager.java
@@ -15,6 +15,7 @@ import com.google.gson.Gson;
 import org.apache.log4j.Logger;
 import org.mapdb.DB;
 import org.mapdb.HTreeMap;
+import org.mapdb.Serializer;
 
 import java.util.Iterator;
 import java.util.Map;
@@ -35,18 +36,21 @@ public class EntityManager {
     private final RoomManager roomManager;
     private final PlayerManager playerManager;
 
+    private final static String ITEM_MAP = "itemMap";
+    private final static String EFFECTS_MAP = "effectsMap";
+
     public EntityManager(RoomManager roomManager, PlayerManager playerManager, DB db) {
         this.roomManager = roomManager;
-        if (db.exists("itemMap")) {
-            this.items = db.get("itemMap");
-        } else {
-            this.items = db.createHashMap("itemMap").valueSerializer(new ItemSerializer()).make();
-        }
-        if (db.exists("effectsMap")) {
-            this.effects = db.get("effectsMap");
-        } else {
-            this.effects = db.createHashMap("effectsMap").valueSerializer(new EffectSerializer()).make();
-        }
+        this.items = db.hashMap(ITEM_MAP)
+                .keySerializer(Serializer.STRING)
+                .valueSerializer(new ItemSerializer())
+                .createOrOpen();
+
+        this.effects = db.hashMap(EFFECTS_MAP)
+                .keySerializer(Serializer.STRING)
+                .valueSerializer(new EffectSerializer())
+                .createOrOpen();
+
         this.playerManager = playerManager;
         ExecutorService tickOrchestratorService = Executors.newFixedThreadPool(5);
         tickOrchestratorService.submit(new PlayerTicker());
@@ -123,6 +127,7 @@ public class EntityManager {
 
     class PlayerTicker implements Runnable {
         private final com.codahale.metrics.Timer ticktime = Main.metrics.timer(name(EntityManager.class, "player_tick_time"));
+
         @Override
         public void run() {
             while (true) {
@@ -145,6 +150,7 @@ public class EntityManager {
 
     class RoomTicker implements Runnable {
         private final com.codahale.metrics.Timer ticktime = Main.metrics.timer(name(EntityManager.class, "room_tick_time"));
+
         @Override
         public void run() {
             while (true) {
@@ -167,6 +173,7 @@ public class EntityManager {
 
     class NpcTicker implements Runnable {
         private final com.codahale.metrics.Timer ticktime = Main.metrics.timer(name(EntityManager.class, "npc_tick_time"));
+
         @Override
         public void run() {
             while (true) {
@@ -187,6 +194,7 @@ public class EntityManager {
 
     class EntityTicker implements Runnable {
         private final com.codahale.metrics.Timer ticktime = Main.metrics.timer(name(EntityManager.class, "entity_tick_time"));
+
         @Override
         public void run() {
             while (true) {
diff --git a/src/main/java/com/comandante/creeper/items/EffectSerializer.java b/src/main/java/com/comandante/creeper/items/EffectSerializer.java
index b4ce934cba75c9e9ca117783fd8868f0c4a74828..538141d2c4bb6cb794e53cc9b127985bf64a6037 100644
--- a/src/main/java/com/comandante/creeper/items/EffectSerializer.java
+++ b/src/main/java/com/comandante/creeper/items/EffectSerializer.java
@@ -2,6 +2,9 @@ package com.comandante.creeper.items;
 
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
+import org.jetbrains.annotations.NotNull;
+import org.mapdb.DataInput2;
+import org.mapdb.DataOutput2;
 import org.mapdb.Serializer;
 
 import java.io.DataInput;
@@ -14,13 +17,14 @@ public class EffectSerializer implements Serializer<Effect>, Serializable {
     private final static Gson GSON = new GsonBuilder().create();
 
     @Override
-    public void serialize(DataOutput out, Effect value) throws IOException {
+    public void serialize(@NotNull DataOutput2 out, @NotNull Effect value) throws IOException {
         out.writeUTF(GSON.toJson(value, Effect.class));
+
     }
 
     @Override
-    public Effect deserialize(DataInput in, int available) throws IOException {
-        return GSON.fromJson(in.readUTF(), Effect.class);
+    public Effect deserialize(@NotNull DataInput2 input, int available) throws IOException {
+        return GSON.fromJson(input.readUTF(), Effect.class);
     }
 
     @Override
diff --git a/src/main/java/com/comandante/creeper/items/ItemSerializer.java b/src/main/java/com/comandante/creeper/items/ItemSerializer.java
index 7b911ff024ffa1892deee167aabd0668651abbd9..2d6a18511645e398ddb1d50c30ca742c0c538d47 100644
--- a/src/main/java/com/comandante/creeper/items/ItemSerializer.java
+++ b/src/main/java/com/comandante/creeper/items/ItemSerializer.java
@@ -2,6 +2,9 @@ package com.comandante.creeper.items;
 
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
+import org.jetbrains.annotations.NotNull;
+import org.mapdb.DataInput2;
+import org.mapdb.DataOutput2;
 import org.mapdb.Serializer;
 
 import java.io.DataInput;
@@ -14,13 +17,13 @@ public class ItemSerializer implements Serializer<Item>, Serializable {
     private final static Gson GSON = new GsonBuilder().create();
 
     @Override
-    public void serialize(DataOutput out, Item value) throws IOException {
+    public void serialize(@NotNull DataOutput2 out, @NotNull Item value) throws IOException {
         out.writeUTF(GSON.toJson(value, Item.class));
     }
 
     @Override
-    public Item deserialize(DataInput in, int available) throws IOException {
-        return GSON.fromJson(in.readUTF(), Item.class);
+    public Item deserialize(@NotNull DataInput2 input, int available) throws IOException {
+        return GSON.fromJson(input.readUTF(), Item.class);
     }
 
     @Override
diff --git a/src/main/java/com/comandante/creeper/player/PlayerManagementManager.java b/src/main/java/com/comandante/creeper/player/PlayerManagementManager.java
index 33ea2f8dac065283895ffbdf5ca5f3e95ed97197..724633ab008c3ad107b9055a7f8d71aad4edfed7 100644
--- a/src/main/java/com/comandante/creeper/player/PlayerManagementManager.java
+++ b/src/main/java/com/comandante/creeper/player/PlayerManagementManager.java
@@ -6,6 +6,7 @@ import org.apache.log4j.Logger;
 import javax.management.*;
 import java.lang.management.ManagementFactory;
 import java.util.Map;
+import java.util.Set;
 
 public class PlayerManagementManager {
 
@@ -18,13 +19,15 @@ public class PlayerManagementManager {
     }
 
     public void createAndRegisterAllPlayerManagementMBeans() throws MalformedObjectNameException, NotCompliantMBeanException, InstanceAlreadyExistsException, MBeanRegistrationException {
-        for (Map.Entry<String, PlayerMetadata> entry : gameManager.getPlayerManager().getPlayerMetadataStore().entrySet()) {
+        Set<Map.Entry<String, PlayerMetadata>> entrySet = gameManager.getPlayerManager().getPlayerMetadataStore().entrySet();
+        for (Map.Entry<String, PlayerMetadata> entry : entrySet) {
             registerPlayer(entry.getValue().getPlayerName(), entry.getValue().getPlayerId(), gameManager);
         }
     }
 
     public void processPlayersMarkedForDeletion(){
-        for (Map.Entry<String, PlayerMetadata> entry : gameManager.getPlayerManager().getPlayerMetadataStore().entrySet()) {
+        Set<Map.Entry<String, PlayerMetadata>> entrySet = gameManager.getPlayerManager().getPlayerMetadataStore().entrySet();
+        for (Map.Entry<String, PlayerMetadata> entry : entrySet) {
             String playerId = entry.getKey();
             PlayerMetadata playerMetadata = entry.getValue();
             if (playerMetadata.isMarkedForDelete()) {
diff --git a/src/main/java/com/comandante/creeper/player/PlayerManager.java b/src/main/java/com/comandante/creeper/player/PlayerManager.java
index c00297e9a08378d0256d18031e010b6c8cda2e6e..e7cc5653b220f99cd3959982239bcd24309475c3 100644
--- a/src/main/java/com/comandante/creeper/player/PlayerManager.java
+++ b/src/main/java/com/comandante/creeper/player/PlayerManager.java
@@ -10,6 +10,7 @@ import com.google.gson.Gson;
 import org.apache.commons.codec.binary.Base64;
 import org.mapdb.DB;
 import org.mapdb.HTreeMap;
+import org.mapdb.Serializer;
 
 import java.util.Iterator;
 import java.util.Map;
@@ -20,24 +21,17 @@ import java.util.concurrent.ConcurrentHashMap;
 import static com.codahale.metrics.MetricRegistry.name;
 
 public class PlayerManager {
-
-    private final DB db;
     private final SessionManager sessionManager;
     private ConcurrentHashMap<String, Player> players = new ConcurrentHashMap<String, Player>();
     private HTreeMap<String, PlayerMetadata> playerMetadataStore;
 
+    private final static String PLAYER_METADATA_MAP = "playerMetadata";
+
     public PlayerManager(DB db, SessionManager sessionManager) {
-        this.db = db;
-        if (db.exists("playerMetadata")) {
-            this.playerMetadataStore = db.get("playerMetadata");
-        } else {
-            this.playerMetadataStore = db
-                    .createHashMap("playerMetadata")
+        this.playerMetadataStore = db.hashMap(PLAYER_METADATA_MAP)
+                    .keySerializer(Serializer.STRING)
                     .valueSerializer(new PlayerMetadataSerializer())
-                    .make();
-        }
-        MapDbAutoCommitService mapDbAutoCommitService = new MapDbAutoCommitService(db);
-        mapDbAutoCommitService.startAsync();
+                    .createOrOpen();
         this.sessionManager = sessionManager;
     }
 
diff --git a/src/main/java/com/comandante/creeper/player/PlayerMetadataSerializer.java b/src/main/java/com/comandante/creeper/player/PlayerMetadataSerializer.java
index fdc2f58f5c81b3cbc0f2020fc266af21b70e3d75..c236d3cd4c036076a16072d06e7a2af9755a3940 100644
--- a/src/main/java/com/comandante/creeper/player/PlayerMetadataSerializer.java
+++ b/src/main/java/com/comandante/creeper/player/PlayerMetadataSerializer.java
@@ -2,6 +2,9 @@ package com.comandante.creeper.player;
 
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
+import org.jetbrains.annotations.NotNull;
+import org.mapdb.DataInput2;
+import org.mapdb.DataOutput2;
 import org.mapdb.Serializer;
 
 import java.io.DataInput;
@@ -14,13 +17,14 @@ public class PlayerMetadataSerializer implements Serializer<PlayerMetadata>, Ser
     private final static Gson GSON = new GsonBuilder().create();
 
     @Override
-    public void serialize(DataOutput out, PlayerMetadata value) throws IOException {
+    public void serialize(@NotNull DataOutput2 out, @NotNull PlayerMetadata value) throws IOException {
         out.writeUTF(GSON.toJson(value, PlayerMetadata.class));
+
     }
 
     @Override
-    public PlayerMetadata deserialize(DataInput in, int available) throws IOException {
-        return GSON.fromJson(in.readUTF(), PlayerMetadata.class);
+    public PlayerMetadata deserialize(@NotNull DataInput2 input, int available) throws IOException {
+        return GSON.fromJson(input.readUTF(), PlayerMetadata.class);
     }
 
     @Override
diff --git a/src/test/com/comandante/creeper/player/PlayerManagerTest.java b/src/test/com/comandante/creeper/player/PlayerManagerTest.java
index b3daba5e26918c7b2791d87cb7bd389049e96209..db379c9c6357576b1ec4787776c9a4e67482a2c3 100644
--- a/src/test/com/comandante/creeper/player/PlayerManagerTest.java
+++ b/src/test/com/comandante/creeper/player/PlayerManagerTest.java
@@ -31,7 +31,7 @@ public class PlayerManagerTest {
     @Before
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
-        DB db = DBMaker.newMemoryDB().make();
+        DB db = DBMaker.memoryDB().transactionEnable().make();
         playerManager = new PlayerManager(db, sessionManager);
     }
 
diff --git a/src/test/com/comandante/creeper/player/combat_simuation/NpcTestHarness.java b/src/test/com/comandante/creeper/player/combat_simuation/NpcTestHarness.java
index 31b66a18c4bcdc26a8f77761aba4a320ecb4da64..be926b52f315fb3cc61f04bcfaa8d7b2091ae256 100644
--- a/src/test/com/comandante/creeper/player/combat_simuation/NpcTestHarness.java
+++ b/src/test/com/comandante/creeper/player/combat_simuation/NpcTestHarness.java
@@ -302,8 +302,7 @@ public class NpcTestHarness {
             }
         };
         CreeperConfiguration creeperConfiguration = new CreeperConfiguration(new MapConfiguration(Maps.newHashMap()));
-        DB db = DBMaker.newMemoryDB().closeOnJvmShutdown().make();
-        Gson gson = new GsonBuilder().create();
+        DB db = DBMaker.memoryDB().transactionEnable().closeOnJvmShutdown().make();
         PlayerManager playerManager = new PlayerManager(db, new SessionManager());
         RoomManager roomManager = new RoomManager(playerManager);
         MapsManager mapsManager = new MapsManager(creeperConfiguration, roomManager);