diff --git a/.gitignore b/.gitignore
index 30c96d0..b300f46 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,16 +12,11 @@
 dependency-reduced-pom.xml
 .idea
 *.DS_Store
-localDB
-localDB.*
 .buckd
 buck-out
 .buckconfig.local
 .buckjavaargs*
 
-core/store/trivial/data/
-core/store/apps
-core/store/data
 /bin/
 
 web/gui/src/main/webapp/tests/node_modules
diff --git a/core/store/persistence/pom.xml b/core/store/persistence/pom.xml
index 67aff7e..1b4a729 100644
--- a/core/store/persistence/pom.xml
+++ b/core/store/persistence/pom.xml
@@ -46,6 +46,11 @@
             <artifactId>mapdb</artifactId>
             <version>1.0.9</version>
         </dependency>
+
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.core</artifactId>
+        </dependency>
     </dependencies>
 
 </project>
diff --git a/core/store/persistence/src/main/java/org/onosproject/persistence/impl/PersistenceManager.java b/core/store/persistence/src/main/java/org/onosproject/persistence/impl/PersistenceManager.java
index 1a24268..366f424 100644
--- a/core/store/persistence/src/main/java/org/onosproject/persistence/impl/PersistenceManager.java
+++ b/core/store/persistence/src/main/java/org/onosproject/persistence/impl/PersistenceManager.java
@@ -25,12 +25,13 @@
 import org.onosproject.persistence.PersistenceService;
 import org.onosproject.persistence.PersistentMapBuilder;
 import org.onosproject.persistence.PersistentSetBuilder;
+import org.osgi.service.component.ComponentContext;
 import org.slf4j.Logger;
 
+import java.io.File;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
-import java.nio.file.Paths;
 import java.util.Map;
 import java.util.Set;
 import java.util.Timer;
@@ -48,8 +49,7 @@
 @Service
 public class PersistenceManager implements PersistenceService {
 
-    private static final String DATABASE_PATH = "../data/localDB";
-    private static final String ENCLOSING_FOLDER = "../data";
+    private static final String DATABASE_PATH = "localDB";
 
     static final String MAP_PREFIX = "map:";
 
@@ -66,15 +66,18 @@
     private final CommitTask commitTask = new CommitTask();
 
     @Activate
-    public void activate() {
+    public void activate(ComponentContext context) {
         timer = new Timer();
-        Path dbPath = Paths.get(DATABASE_PATH);
-        Path dbFolderPath = Paths.get(ENCLOSING_FOLDER);
+        // bundle's persistent storage area directory
+        File dbFolderPath = context.getBundleContext().getDataFile("");
+        Path dbPath = dbFolderPath.toPath().resolve(DATABASE_PATH);
+        log.debug("dbPath: {}", dbPath);
+
         //Make sure the directory exists, if it does not, make it.
-        if (!dbFolderPath.toFile().isDirectory()) {
+        if (!dbFolderPath.isDirectory()) {
             log.info("The specified folder location for the database did not exist and will be created.");
             try {
-                Files.createDirectories(dbFolderPath);
+                Files.createDirectories(dbFolderPath.toPath());
             } catch (IOException e) {
                 log.error("Could not create the required folder for the database.");
                 throw new PersistenceException("Database folder could not be created.");
@@ -123,11 +126,13 @@
         log.info("Stopped");
     }
 
+    @Override
     public <K, V> PersistentMapBuilder<K, V> persistentMapBuilder() {
         checkPermission(PERSISTENCE_WRITE);
         return new DefaultPersistentMapBuilder<>(localDB);
     }
 
+    @Override
     public <E> PersistentSetBuilder<E> persistentSetBuilder() {
         checkPermission(PERSISTENCE_WRITE);
         return new DefaultPersistentSetBuilder<>(localDB);
diff --git a/tools/dev/bin/onos-setup-karaf b/tools/dev/bin/onos-setup-karaf
index bd3379c..b0e891d 100755
--- a/tools/dev/bin/onos-setup-karaf
+++ b/tools/dev/bin/onos-setup-karaf
@@ -47,7 +47,7 @@
 # If clean option was specified, wipe-out existing installation
 if [ "$CLEAN" = "true" ]; then
     echo "Removing existing ONOS Karaf, apps, data and config directories..."
-    [ -d $KARAF_ROOT ] && rm -fr $KARAF_ROOT $STAGE/apps $STAGE/data $STAGE/config
+    [ -d $KARAF_ROOT ] && rm -fr $KARAF_ROOT $KARAF_ROOT/data $STAGE/apps $STAGE/data $STAGE/config
 fi
 
 # If IP was not given, nor configured attempt to use ONOS_NIC env. variable
