diff --git a/core/api/src/main/java/org/onosproject/persistence/PersistenceService.java b/core/api/src/main/java/org/onosproject/persistence/PersistenceService.java
new file mode 100644
index 0000000..09065de
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/persistence/PersistenceService.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.persistence;
+
+/**
+ * Service that allows for the creation of local disk backed map for instance specific values that persist across
+ * restarts. Empty maps and sets are deleted on shutdown.
+ */
+public interface PersistenceService {
+    /**
+     * A builder for the creation of local persistent maps backed by disk.
+     *
+     * @param <K> the type of keys in this map
+     * @param <V> the type of values in this map
+     * @return a persistent map builder
+     */
+    <K, V> PersistentMapBuilder<K, V> persistentMapBuilder();
+
+    /**
+     * A builder for the creation of local persistent sets backed by disk.
+     *
+     * @param <E> the type of the elements
+     * @return a persistent set builder
+     */
+    <E> PersistentSetBuilder<E> persistentSetBuilder();
+}
\ No newline at end of file
diff --git a/core/api/src/main/java/org/onosproject/persistence/PersistentMapBuilder.java b/core/api/src/main/java/org/onosproject/persistence/PersistentMapBuilder.java
new file mode 100644
index 0000000..c3c855e
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/persistence/PersistentMapBuilder.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.persistence;
+
+
+import org.onosproject.store.service.Serializer;
+
+import java.util.Map;
+
+/**
+ * The interface for a persistent map builder for use with mapDB.
+ */
+public interface PersistentMapBuilder<K, V> {
+
+    /**
+     * Sets the name of this map.
+     * @param name the string name of this map
+     * @return a persistent map builder with the name option now set
+     */
+    PersistentMapBuilder<K, V> withName(String name);
+
+    /**
+     * Sets the key serializer to be used to serialize this map, this is a required parameter.
+     * @param serializer the serializer to be used for keys
+     * @return a persistent map builder with the key serializer set
+     */
+    PersistentMapBuilder<K, V> withSerializer(Serializer serializer);
+
+    /**
+     * Validates the map settings and then builds this map in the database.  Throws an exception if invalid settings
+     * are found.
+     * @return The map that was created
+     */
+    Map<K, V> build();
+}
\ No newline at end of file
diff --git a/core/api/src/main/java/org/onosproject/persistence/PersistentSetBuilder.java b/core/api/src/main/java/org/onosproject/persistence/PersistentSetBuilder.java
new file mode 100644
index 0000000..851872c
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/persistence/PersistentSetBuilder.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.persistence;
+
+import org.onosproject.store.service.Serializer;
+
+import java.util.Set;
+
+/**
+ * The default interface for the persistent set builder for use with mapDB.
+ */
+public interface PersistentSetBuilder<E> {
+
+    /**
+     * Sets the name of this set.
+     * @param name the string name of this set
+     * @return a persistent set builder with the name option now set
+     */
+    PersistentSetBuilder<E> withName(String name);
+
+    /**
+     * Sets the serializer to be used to serialize this set, this is a required parameter.
+     * @param serializer the serializer to be used
+     * @return a persistent set builder with the serializer set
+     */
+    PersistentSetBuilder<E> withSerializer(Serializer serializer);
+
+    /**
+     * Validates the set settings and then builds this map in the database.  Throws an exception if invalid settings
+     * are found.
+     * @return The set that was created
+     */
+    Set<E> build();
+}
\ No newline at end of file
