diff --git a/core/store/dist/src/main/java/org/onlab/onos/store/service/impl/DatabaseManager.java b/core/store/dist/src/main/java/org/onlab/onos/store/service/impl/DatabaseManager.java
index 0c33485..def56e8 100644
--- a/core/store/dist/src/main/java/org/onlab/onos/store/service/impl/DatabaseManager.java
+++ b/core/store/dist/src/main/java/org/onlab/onos/store/service/impl/DatabaseManager.java
@@ -2,7 +2,6 @@
 
 import static org.slf4j.LoggerFactory.getLogger;
 
-import java.io.File;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -129,7 +128,7 @@
         // Chronicle + OSGi issue
         //Log consensusLog = new ChronicleLog(LOG_FILE_PREFIX + "_" + thisNode.id());
         //Log consensusLog = new KryoRegisteredInMemoryLog();
-        Log consensusLog = new MapDBLog(new File(LOG_FILE_PREFIX + localNode.id()),
+        Log consensusLog = new MapDBLog(LOG_FILE_PREFIX + localNode.id(),
                                         ClusterMessagingProtocol.SERIALIZER);
 
         copycat = new Copycat(stateMachine, consensusLog, cluster, copycatMessagingProtocol);
diff --git a/core/store/dist/src/main/java/org/onlab/onos/store/service/impl/MapDBLog.java b/core/store/dist/src/main/java/org/onlab/onos/store/service/impl/MapDBLog.java
index 893c311..b7165c3 100644
--- a/core/store/dist/src/main/java/org/onlab/onos/store/service/impl/MapDBLog.java
+++ b/core/store/dist/src/main/java/org/onlab/onos/store/service/impl/MapDBLog.java
@@ -35,8 +35,8 @@
     private static final String LOG_NAME = "log";
     private static final String SIZE_FIELD_NAME = "size";
 
-    public MapDBLog(File dbFile, StoreSerializer serializer) {
-        this.dbFile = dbFile;
+    public MapDBLog(String dbFileName, StoreSerializer serializer) {
+        this.dbFile = new File(dbFileName);
         this.serializer = serializer;
     }
 
@@ -277,4 +277,4 @@
             }
         });
     }
-}
\ No newline at end of file
+}
diff --git a/core/store/dist/src/test/java/org/onlab/onos/store/service/impl/MapDBLogTest.java b/core/store/dist/src/test/java/org/onlab/onos/store/service/impl/MapDBLogTest.java
index 4ad98798..7c9993f 100644
--- a/core/store/dist/src/test/java/org/onlab/onos/store/service/impl/MapDBLogTest.java
+++ b/core/store/dist/src/test/java/org/onlab/onos/store/service/impl/MapDBLogTest.java
@@ -51,13 +51,13 @@
 
     @Test(expected = IllegalStateException.class)
     public void testAssertOpen() {
-        Log log = new MapDBLog(new File(DB_FILE_NAME), SERIALIZER);
+        Log log = new MapDBLog(DB_FILE_NAME, SERIALIZER);
         log.size();
     }
 
     @Test
     public void testAppendEntry() throws IOException {
-        Log log = new MapDBLog(new File(DB_FILE_NAME), SERIALIZER);
+        Log log = new MapDBLog(DB_FILE_NAME, SERIALIZER);
         log.open();
         log.appendEntry(TEST_ENTRY1);
         OperationEntry first = log.firstEntry();
@@ -72,7 +72,7 @@
 
     @Test
     public void testAppendEntries() throws IOException {
-        Log log = new MapDBLog(new File(DB_FILE_NAME), SERIALIZER);
+        Log log = new MapDBLog(DB_FILE_NAME, SERIALIZER);
         log.open();
         log.appendEntries(TEST_ENTRY1, TEST_ENTRY2, TEST_ENTRY3);
         OperationEntry first = log.firstEntry();
@@ -90,7 +90,7 @@
 
     @Test
     public void testDelete() throws IOException {
-        Log log = new MapDBLog(new File(DB_FILE_NAME), SERIALIZER);
+        Log log = new MapDBLog(DB_FILE_NAME, SERIALIZER);
         log.open();
         log.appendEntries(TEST_ENTRY1, TEST_ENTRY2);
         log.delete();
@@ -104,7 +104,7 @@
 
     @Test
     public void testGetEntries() throws IOException {
-        Log log = new MapDBLog(new File(DB_FILE_NAME), SERIALIZER);
+        Log log = new MapDBLog(DB_FILE_NAME, SERIALIZER);
         log.open();
         log.appendEntries(TEST_ENTRY1, TEST_ENTRY2, TEST_ENTRY3, TEST_ENTRY4);
         Assert.assertEquals(
@@ -123,7 +123,7 @@
 
     @Test
     public void testRemoveAfter() throws IOException {
-        Log log = new MapDBLog(new File(DB_FILE_NAME), SERIALIZER);
+        Log log = new MapDBLog(DB_FILE_NAME, SERIALIZER);
         log.open();
         log.appendEntries(TEST_ENTRY1, TEST_ENTRY2, TEST_ENTRY3, TEST_ENTRY4);
         log.removeAfter(1);
@@ -135,7 +135,7 @@
 
     @Test
     public void testAddAfterRemove() throws IOException {
-        Log log = new MapDBLog(new File(DB_FILE_NAME), SERIALIZER);
+        Log log = new MapDBLog(DB_FILE_NAME, SERIALIZER);
         log.open();
         log.appendEntries(TEST_ENTRY1, TEST_ENTRY2, TEST_ENTRY3, TEST_ENTRY4);
         log.removeAfter(1);
@@ -150,7 +150,7 @@
 
     @Test
     public void testClose() throws IOException {
-        Log log = new MapDBLog(new File(DB_FILE_NAME), SERIALIZER);
+        Log log = new MapDBLog(DB_FILE_NAME, SERIALIZER);
         Assert.assertFalse(log.isOpen());
         log.open();
         Assert.assertTrue(log.isOpen());
@@ -160,7 +160,7 @@
 
     @Test
     public void testReopen() throws IOException {
-        Log log = new MapDBLog(new File(DB_FILE_NAME), SERIALIZER);
+        Log log = new MapDBLog(DB_FILE_NAME, SERIALIZER);
         log.open();
         log.appendEntries(TEST_ENTRY1, TEST_ENTRY2, TEST_ENTRY3, TEST_ENTRY4);
         log.close();
@@ -180,7 +180,7 @@
 
     @Test
     public void testCompact() throws IOException {
-        Log log = new MapDBLog(new File(DB_FILE_NAME), SERIALIZER);
+        Log log = new MapDBLog(DB_FILE_NAME, SERIALIZER);
         log.open();
         log.appendEntries(TEST_ENTRY1, TEST_ENTRY2, TEST_ENTRY3, TEST_ENTRY4);
         log.compact(3, TEST_SNAPSHOT_ENTRY);
