diff --git a/src/main/java/net/onrc/onos/apps/forwarding/Forwarding.java b/src/main/java/net/onrc/onos/apps/forwarding/Forwarding.java
index 3d1623c..e2efdbb 100644
--- a/src/main/java/net/onrc/onos/apps/forwarding/Forwarding.java
+++ b/src/main/java/net/onrc/onos/apps/forwarding/Forwarding.java
@@ -21,9 +21,9 @@
 import net.floodlightcontroller.util.MACAddress;
 import net.onrc.onos.apps.proxyarp.BroadcastPacketOutNotification;
 import net.onrc.onos.apps.proxyarp.IProxyArpService;
-import net.onrc.onos.datagrid.IDatagridService;
-import net.onrc.onos.datagrid.IEventChannel;
-import net.onrc.onos.datagrid.IEventChannelListener;
+import net.onrc.onos.core.datagrid.IDatagridService;
+import net.onrc.onos.core.datagrid.IEventChannel;
+import net.onrc.onos.core.datagrid.IEventChannelListener;
 import net.onrc.onos.intent.Intent;
 import net.onrc.onos.intent.IntentMap;
 import net.onrc.onos.intent.IntentOperation;
diff --git a/src/main/java/net/onrc/onos/apps/proxyarp/ProxyArpManager.java b/src/main/java/net/onrc/onos/apps/proxyarp/ProxyArpManager.java
index ef3bb83..2a897a5 100644
--- a/src/main/java/net/onrc/onos/apps/proxyarp/ProxyArpManager.java
+++ b/src/main/java/net/onrc/onos/apps/proxyarp/ProxyArpManager.java
@@ -23,9 +23,9 @@
 import net.floodlightcontroller.restserver.IRestApiService;
 import net.floodlightcontroller.util.MACAddress;
 import net.onrc.onos.apps.bgproute.Interface;
-import net.onrc.onos.datagrid.IDatagridService;
-import net.onrc.onos.datagrid.IEventChannel;
-import net.onrc.onos.datagrid.IEventChannelListener;
+import net.onrc.onos.core.datagrid.IDatagridService;
+import net.onrc.onos.core.datagrid.IEventChannel;
+import net.onrc.onos.core.datagrid.IEventChannelListener;
 import net.onrc.onos.ofcontroller.core.config.IConfigInfoService;
 import net.onrc.onos.ofcontroller.devicemanager.IOnosDeviceService;
 import net.onrc.onos.ofcontroller.flowprogrammer.IFlowPusherService;
diff --git a/src/main/java/net/onrc/onos/datagrid/HazelcastDatagrid.java b/src/main/java/net/onrc/onos/core/datagrid/HazelcastDatagrid.java
similarity index 98%
rename from src/main/java/net/onrc/onos/datagrid/HazelcastDatagrid.java
rename to src/main/java/net/onrc/onos/core/datagrid/HazelcastDatagrid.java
index 31de685..7d2b7f3 100755
--- a/src/main/java/net/onrc/onos/datagrid/HazelcastDatagrid.java
+++ b/src/main/java/net/onrc/onos/core/datagrid/HazelcastDatagrid.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.datagrid;
+package net.onrc.onos.core.datagrid;
 
 import java.io.FileNotFoundException;
 import java.util.ArrayList;
@@ -12,7 +12,7 @@
 import net.floodlightcontroller.core.module.IFloodlightModule;
 import net.floodlightcontroller.core.module.IFloodlightService;
 import net.floodlightcontroller.restserver.IRestApiService;
-import net.onrc.onos.datagrid.web.DatagridWebRoutable;
+import net.onrc.onos.core.datagrid.web.DatagridWebRoutable;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/src/main/java/net/onrc/onos/datagrid/HazelcastEventChannel.java b/src/main/java/net/onrc/onos/core/datagrid/HazelcastEventChannel.java
similarity index 99%
rename from src/main/java/net/onrc/onos/datagrid/HazelcastEventChannel.java
rename to src/main/java/net/onrc/onos/core/datagrid/HazelcastEventChannel.java
index 88fb544..8797dba 100644
--- a/src/main/java/net/onrc/onos/datagrid/HazelcastEventChannel.java
+++ b/src/main/java/net/onrc/onos/core/datagrid/HazelcastEventChannel.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.datagrid;
+package net.onrc.onos.core.datagrid;
 
 import java.util.Collection;
 import java.util.LinkedList;
diff --git a/src/main/java/net/onrc/onos/datagrid/IDatagridService.java b/src/main/java/net/onrc/onos/core/datagrid/IDatagridService.java
similarity index 97%
rename from src/main/java/net/onrc/onos/datagrid/IDatagridService.java
rename to src/main/java/net/onrc/onos/core/datagrid/IDatagridService.java
index 7c067ae..5fe52cc 100755
--- a/src/main/java/net/onrc/onos/datagrid/IDatagridService.java
+++ b/src/main/java/net/onrc/onos/core/datagrid/IDatagridService.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.datagrid;
+package net.onrc.onos.core.datagrid;
 
 import net.floodlightcontroller.core.module.IFloodlightService;
 
diff --git a/src/main/java/net/onrc/onos/datagrid/IEventChannel.java b/src/main/java/net/onrc/onos/core/datagrid/IEventChannel.java
similarity index 98%
rename from src/main/java/net/onrc/onos/datagrid/IEventChannel.java
rename to src/main/java/net/onrc/onos/core/datagrid/IEventChannel.java
index c76c7a6..5874b31 100644
--- a/src/main/java/net/onrc/onos/datagrid/IEventChannel.java
+++ b/src/main/java/net/onrc/onos/core/datagrid/IEventChannel.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.datagrid;
+package net.onrc.onos.core.datagrid;
 
 import java.util.Collection;
 
diff --git a/src/main/java/net/onrc/onos/datagrid/IEventChannelListener.java b/src/main/java/net/onrc/onos/core/datagrid/IEventChannelListener.java
similarity index 93%
rename from src/main/java/net/onrc/onos/datagrid/IEventChannelListener.java
rename to src/main/java/net/onrc/onos/core/datagrid/IEventChannelListener.java
index 3f785ee..ca18aa7 100644
--- a/src/main/java/net/onrc/onos/datagrid/IEventChannelListener.java
+++ b/src/main/java/net/onrc/onos/core/datagrid/IEventChannelListener.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.datagrid;
+package net.onrc.onos.core.datagrid;
 
 /**
  * Event Channel Listener Interface.
diff --git a/src/main/java/net/onrc/onos/datagrid/web/DatagridWebRoutable.java b/src/main/java/net/onrc/onos/core/datagrid/web/DatagridWebRoutable.java
similarity index 96%
rename from src/main/java/net/onrc/onos/datagrid/web/DatagridWebRoutable.java
rename to src/main/java/net/onrc/onos/core/datagrid/web/DatagridWebRoutable.java
index 5491d34..672f66d 100755
--- a/src/main/java/net/onrc/onos/datagrid/web/DatagridWebRoutable.java
+++ b/src/main/java/net/onrc/onos/core/datagrid/web/DatagridWebRoutable.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.datagrid.web;
+package net.onrc.onos.core.datagrid.web;
 
 import net.floodlightcontroller.restserver.RestletRoutable;
 
diff --git a/src/main/java/net/onrc/onos/datagrid/web/GetNGEventsResource.java b/src/main/java/net/onrc/onos/core/datagrid/web/GetNGEventsResource.java
similarity index 88%
rename from src/main/java/net/onrc/onos/datagrid/web/GetNGEventsResource.java
rename to src/main/java/net/onrc/onos/core/datagrid/web/GetNGEventsResource.java
index bbf03cb..f319d23 100644
--- a/src/main/java/net/onrc/onos/datagrid/web/GetNGEventsResource.java
+++ b/src/main/java/net/onrc/onos/core/datagrid/web/GetNGEventsResource.java
@@ -1,9 +1,9 @@
-package net.onrc.onos.datagrid.web;
+package net.onrc.onos.core.datagrid.web;
 
 import java.util.Collection;
 
-import net.onrc.onos.datagrid.IDatagridService;
-import net.onrc.onos.datagrid.IEventChannel;
+import net.onrc.onos.core.datagrid.IDatagridService;
+import net.onrc.onos.core.datagrid.IEventChannel;
 import net.onrc.onos.ofcontroller.networkgraph.TopologyEvent;
 import net.onrc.onos.ofcontroller.networkgraph.TopologyManager;
 
diff --git a/src/main/java/net/onrc/onos/datagrid/web/GetNGFlowsSummaryResource.java b/src/main/java/net/onrc/onos/core/datagrid/web/GetNGFlowsSummaryResource.java
similarity index 98%
rename from src/main/java/net/onrc/onos/datagrid/web/GetNGFlowsSummaryResource.java
rename to src/main/java/net/onrc/onos/core/datagrid/web/GetNGFlowsSummaryResource.java
index 2b38caa..0ebeec9 100644
--- a/src/main/java/net/onrc/onos/datagrid/web/GetNGFlowsSummaryResource.java
+++ b/src/main/java/net/onrc/onos/core/datagrid/web/GetNGFlowsSummaryResource.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.datagrid.web;
+package net.onrc.onos.core.datagrid.web;
 
 import java.util.ArrayList;
 import java.util.SortedMap;
diff --git a/src/main/java/net/onrc/onos/datagrid/web/IntentResource.java b/src/main/java/net/onrc/onos/core/datagrid/web/IntentResource.java
similarity index 99%
rename from src/main/java/net/onrc/onos/datagrid/web/IntentResource.java
rename to src/main/java/net/onrc/onos/core/datagrid/web/IntentResource.java
index dd73704..7d338b5 100755
--- a/src/main/java/net/onrc/onos/datagrid/web/IntentResource.java
+++ b/src/main/java/net/onrc/onos/core/datagrid/web/IntentResource.java
@@ -2,7 +2,7 @@
  * To change this template, choose Tools | Templates
  * and open the template in the editor.
  */
-package net.onrc.onos.datagrid.web;
+package net.onrc.onos.core.datagrid.web;
 
 import java.io.IOException;
 import java.util.Collection;
diff --git a/src/main/java/net/onrc/onos/datastore/DataStoreClient.java b/src/main/java/net/onrc/onos/core/datastore/DataStoreClient.java
similarity index 74%
rename from src/main/java/net/onrc/onos/datastore/DataStoreClient.java
rename to src/main/java/net/onrc/onos/core/datastore/DataStoreClient.java
index bdf5df5..7ec6251 100644
--- a/src/main/java/net/onrc/onos/datastore/DataStoreClient.java
+++ b/src/main/java/net/onrc/onos/core/datastore/DataStoreClient.java
@@ -1,11 +1,11 @@
-package net.onrc.onos.datastore;
+package net.onrc.onos.core.datastore;
 
-import net.onrc.onos.datastore.hazelcast.HZClient;
-import net.onrc.onos.datastore.ramcloud.RCClient;
+import net.onrc.onos.core.datastore.hazelcast.HZClient;
+import net.onrc.onos.core.datastore.ramcloud.RCClient;
 
 // This class probably need to be a service
 public class DataStoreClient {
-    private static final String BACKEND = System.getProperty("net.onrc.onos.datastore.backend", "hazelcast");
+    private static final String BACKEND = System.getProperty("net.onrc.onos.core.datastore.backend", "hazelcast");
 
     // Suppresses default constructor, ensuring non-instantiability.
     private DataStoreClient() {}
diff --git a/src/main/java/net/onrc/onos/datastore/IKVClient.java b/src/main/java/net/onrc/onos/core/datastore/IKVClient.java
similarity index 97%
rename from src/main/java/net/onrc/onos/datastore/IKVClient.java
rename to src/main/java/net/onrc/onos/core/datastore/IKVClient.java
index d2602c9..e298548 100644
--- a/src/main/java/net/onrc/onos/datastore/IKVClient.java
+++ b/src/main/java/net/onrc/onos/core/datastore/IKVClient.java
@@ -1,9 +1,9 @@
-package net.onrc.onos.datastore;
+package net.onrc.onos.core.datastore;
 
 import java.util.Collection;
 import java.util.List;
 
-import net.onrc.onos.datastore.IKVTable.IKVEntry;
+import net.onrc.onos.core.datastore.IKVTable.IKVEntry;
 
 /**
  * Interface for a client class used to access the Key-Value store
diff --git a/src/main/java/net/onrc/onos/datastore/IKVTable.java b/src/main/java/net/onrc/onos/core/datastore/IKVTable.java
similarity index 98%
rename from src/main/java/net/onrc/onos/datastore/IKVTable.java
rename to src/main/java/net/onrc/onos/core/datastore/IKVTable.java
index 3151808..864b270 100644
--- a/src/main/java/net/onrc/onos/datastore/IKVTable.java
+++ b/src/main/java/net/onrc/onos/core/datastore/IKVTable.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.datastore;
+package net.onrc.onos.core.datastore;
 
 
 /**
diff --git a/src/main/java/net/onrc/onos/datastore/IKVTableID.java b/src/main/java/net/onrc/onos/core/datastore/IKVTableID.java
similarity index 64%
rename from src/main/java/net/onrc/onos/datastore/IKVTableID.java
rename to src/main/java/net/onrc/onos/core/datastore/IKVTableID.java
index d66370c..c736908 100644
--- a/src/main/java/net/onrc/onos/datastore/IKVTableID.java
+++ b/src/main/java/net/onrc/onos/core/datastore/IKVTableID.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.datastore;
+package net.onrc.onos.core.datastore;
 
 public interface IKVTableID {
 
diff --git a/src/main/java/net/onrc/onos/datastore/IMultiEntryOperation.java b/src/main/java/net/onrc/onos/core/datastore/IMultiEntryOperation.java
similarity index 93%
rename from src/main/java/net/onrc/onos/datastore/IMultiEntryOperation.java
rename to src/main/java/net/onrc/onos/core/datastore/IMultiEntryOperation.java
index dab1aad..535fe95 100644
--- a/src/main/java/net/onrc/onos/datastore/IMultiEntryOperation.java
+++ b/src/main/java/net/onrc/onos/core/datastore/IMultiEntryOperation.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.datastore;
+package net.onrc.onos.core.datastore;
 
 /**
  * Interface for a class to specify which K-V pair to batch read/write/delete.
diff --git a/src/main/java/net/onrc/onos/core/datastore/IMultiObjectOperation.java b/src/main/java/net/onrc/onos/core/datastore/IMultiObjectOperation.java
new file mode 100644
index 0000000..898327f
--- /dev/null
+++ b/src/main/java/net/onrc/onos/core/datastore/IMultiObjectOperation.java
@@ -0,0 +1,9 @@
+package net.onrc.onos.core.datastore;
+
+import net.onrc.onos.core.datastore.utils.KVObject;
+
+public interface IMultiObjectOperation {
+
+    public KVObject getObject();
+
+}
\ No newline at end of file
diff --git a/src/main/java/net/onrc/onos/datastore/ObjectDoesntExistException.java b/src/main/java/net/onrc/onos/core/datastore/ObjectDoesntExistException.java
similarity index 88%
rename from src/main/java/net/onrc/onos/datastore/ObjectDoesntExistException.java
rename to src/main/java/net/onrc/onos/core/datastore/ObjectDoesntExistException.java
index 030680f..06d21ca 100644
--- a/src/main/java/net/onrc/onos/datastore/ObjectDoesntExistException.java
+++ b/src/main/java/net/onrc/onos/core/datastore/ObjectDoesntExistException.java
@@ -1,6 +1,6 @@
-package net.onrc.onos.datastore;
+package net.onrc.onos.core.datastore;
 
-import net.onrc.onos.datastore.utils.ByteArrayUtil;
+import net.onrc.onos.core.datastore.utils.ByteArrayUtil;
 
 /**
  * Exception thrown when object was expected, but not found in data store.
diff --git a/src/main/java/net/onrc/onos/datastore/ObjectExistsException.java b/src/main/java/net/onrc/onos/core/datastore/ObjectExistsException.java
similarity index 88%
rename from src/main/java/net/onrc/onos/datastore/ObjectExistsException.java
rename to src/main/java/net/onrc/onos/core/datastore/ObjectExistsException.java
index 8ce6055..75c4e4d 100644
--- a/src/main/java/net/onrc/onos/datastore/ObjectExistsException.java
+++ b/src/main/java/net/onrc/onos/core/datastore/ObjectExistsException.java
@@ -1,6 +1,6 @@
-package net.onrc.onos.datastore;
+package net.onrc.onos.core.datastore;
 
-import net.onrc.onos.datastore.utils.ByteArrayUtil;
+import net.onrc.onos.core.datastore.utils.ByteArrayUtil;
 
 /**
  * Exception thrown when object was not expected to be in data store.
diff --git a/src/main/java/net/onrc/onos/datastore/RCProtos.java b/src/main/java/net/onrc/onos/core/datastore/RCProtos.java
similarity index 86%
rename from src/main/java/net/onrc/onos/datastore/RCProtos.java
rename to src/main/java/net/onrc/onos/core/datastore/RCProtos.java
index a451b05..5e823ee 100644
--- a/src/main/java/net/onrc/onos/datastore/RCProtos.java
+++ b/src/main/java/net/onrc/onos/core/datastore/RCProtos.java
@@ -1,7 +1,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: protobuf/ramcloud.proto
 
-package net.onrc.onos.datastore;
+package net.onrc.onos.core.datastore;
 
 public final class RCProtos {
   private RCProtos() {}
@@ -121,14 +121,14 @@
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return net.onrc.onos.datastore.RCProtos.internal_static_ProtoBuffer_SwitchProperty_descriptor;
+      return net.onrc.onos.core.datastore.RCProtos.internal_static_ProtoBuffer_SwitchProperty_descriptor;
     }
 
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return net.onrc.onos.datastore.RCProtos.internal_static_ProtoBuffer_SwitchProperty_fieldAccessorTable
+      return net.onrc.onos.core.datastore.RCProtos.internal_static_ProtoBuffer_SwitchProperty_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              net.onrc.onos.datastore.RCProtos.SwitchProperty.class, net.onrc.onos.datastore.RCProtos.SwitchProperty.Builder.class);
+              net.onrc.onos.core.datastore.RCProtos.SwitchProperty.class, net.onrc.onos.core.datastore.RCProtos.SwitchProperty.Builder.class);
     }
 
     public static com.google.protobuf.Parser<SwitchProperty> PARSER =
@@ -262,53 +262,53 @@
       return super.writeReplace();
     }
 
-    public static net.onrc.onos.datastore.RCProtos.SwitchProperty parseFrom(
+    public static net.onrc.onos.core.datastore.RCProtos.SwitchProperty parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static net.onrc.onos.datastore.RCProtos.SwitchProperty parseFrom(
+    public static net.onrc.onos.core.datastore.RCProtos.SwitchProperty parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static net.onrc.onos.datastore.RCProtos.SwitchProperty parseFrom(byte[] data)
+    public static net.onrc.onos.core.datastore.RCProtos.SwitchProperty parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static net.onrc.onos.datastore.RCProtos.SwitchProperty parseFrom(
+    public static net.onrc.onos.core.datastore.RCProtos.SwitchProperty parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static net.onrc.onos.datastore.RCProtos.SwitchProperty parseFrom(java.io.InputStream input)
+    public static net.onrc.onos.core.datastore.RCProtos.SwitchProperty parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return PARSER.parseFrom(input);
     }
-    public static net.onrc.onos.datastore.RCProtos.SwitchProperty parseFrom(
+    public static net.onrc.onos.core.datastore.RCProtos.SwitchProperty parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return PARSER.parseFrom(input, extensionRegistry);
     }
-    public static net.onrc.onos.datastore.RCProtos.SwitchProperty parseDelimitedFrom(java.io.InputStream input)
+    public static net.onrc.onos.core.datastore.RCProtos.SwitchProperty parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return PARSER.parseDelimitedFrom(input);
     }
-    public static net.onrc.onos.datastore.RCProtos.SwitchProperty parseDelimitedFrom(
+    public static net.onrc.onos.core.datastore.RCProtos.SwitchProperty parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return PARSER.parseDelimitedFrom(input, extensionRegistry);
     }
-    public static net.onrc.onos.datastore.RCProtos.SwitchProperty parseFrom(
+    public static net.onrc.onos.core.datastore.RCProtos.SwitchProperty parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return PARSER.parseFrom(input);
     }
-    public static net.onrc.onos.datastore.RCProtos.SwitchProperty parseFrom(
+    public static net.onrc.onos.core.datastore.RCProtos.SwitchProperty parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -317,7 +317,7 @@
 
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(net.onrc.onos.datastore.RCProtos.SwitchProperty prototype) {
+    public static Builder newBuilder(net.onrc.onos.core.datastore.RCProtos.SwitchProperty prototype) {
       return newBuilder().mergeFrom(prototype);
     }
     public Builder toBuilder() { return newBuilder(this); }
@@ -333,20 +333,20 @@
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements net.onrc.onos.datastore.RCProtos.SwitchPropertyOrBuilder {
+       implements net.onrc.onos.core.datastore.RCProtos.SwitchPropertyOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return net.onrc.onos.datastore.RCProtos.internal_static_ProtoBuffer_SwitchProperty_descriptor;
+        return net.onrc.onos.core.datastore.RCProtos.internal_static_ProtoBuffer_SwitchProperty_descriptor;
       }
 
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return net.onrc.onos.datastore.RCProtos.internal_static_ProtoBuffer_SwitchProperty_fieldAccessorTable
+        return net.onrc.onos.core.datastore.RCProtos.internal_static_ProtoBuffer_SwitchProperty_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                net.onrc.onos.datastore.RCProtos.SwitchProperty.class, net.onrc.onos.datastore.RCProtos.SwitchProperty.Builder.class);
+                net.onrc.onos.core.datastore.RCProtos.SwitchProperty.class, net.onrc.onos.core.datastore.RCProtos.SwitchProperty.Builder.class);
       }
 
-      // Construct using net.onrc.onos.datastore.RCProtos.SwitchProperty.newBuilder()
+      // Construct using net.onrc.onos.core.datastore.RCProtos.SwitchProperty.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -381,23 +381,23 @@
 
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return net.onrc.onos.datastore.RCProtos.internal_static_ProtoBuffer_SwitchProperty_descriptor;
+        return net.onrc.onos.core.datastore.RCProtos.internal_static_ProtoBuffer_SwitchProperty_descriptor;
       }
 
-      public net.onrc.onos.datastore.RCProtos.SwitchProperty getDefaultInstanceForType() {
-        return net.onrc.onos.datastore.RCProtos.SwitchProperty.getDefaultInstance();
+      public net.onrc.onos.core.datastore.RCProtos.SwitchProperty getDefaultInstanceForType() {
+        return net.onrc.onos.core.datastore.RCProtos.SwitchProperty.getDefaultInstance();
       }
 
-      public net.onrc.onos.datastore.RCProtos.SwitchProperty build() {
-        net.onrc.onos.datastore.RCProtos.SwitchProperty result = buildPartial();
+      public net.onrc.onos.core.datastore.RCProtos.SwitchProperty build() {
+        net.onrc.onos.core.datastore.RCProtos.SwitchProperty result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
       }
 
-      public net.onrc.onos.datastore.RCProtos.SwitchProperty buildPartial() {
-        net.onrc.onos.datastore.RCProtos.SwitchProperty result = new net.onrc.onos.datastore.RCProtos.SwitchProperty(this);
+      public net.onrc.onos.core.datastore.RCProtos.SwitchProperty buildPartial() {
+        net.onrc.onos.core.datastore.RCProtos.SwitchProperty result = new net.onrc.onos.core.datastore.RCProtos.SwitchProperty(this);
         int from_bitField0_ = bitField0_;
         int to_bitField0_ = 0;
         if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
@@ -418,16 +418,16 @@
       }
 
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof net.onrc.onos.datastore.RCProtos.SwitchProperty) {
-          return mergeFrom((net.onrc.onos.datastore.RCProtos.SwitchProperty)other);
+        if (other instanceof net.onrc.onos.core.datastore.RCProtos.SwitchProperty) {
+          return mergeFrom((net.onrc.onos.core.datastore.RCProtos.SwitchProperty)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(net.onrc.onos.datastore.RCProtos.SwitchProperty other) {
-        if (other == net.onrc.onos.datastore.RCProtos.SwitchProperty.getDefaultInstance()) return this;
+      public Builder mergeFrom(net.onrc.onos.core.datastore.RCProtos.SwitchProperty other) {
+        if (other == net.onrc.onos.core.datastore.RCProtos.SwitchProperty.getDefaultInstance()) return this;
         if (other.hasDpid()) {
           setDpid(other.getDpid());
         }
@@ -457,11 +457,11 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        net.onrc.onos.datastore.RCProtos.SwitchProperty parsedMessage = null;
+        net.onrc.onos.core.datastore.RCProtos.SwitchProperty parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (net.onrc.onos.datastore.RCProtos.SwitchProperty) e.getUnfinishedMessage();
+          parsedMessage = (net.onrc.onos.core.datastore.RCProtos.SwitchProperty) e.getUnfinishedMessage();
           throw e;
         } finally {
           if (parsedMessage != null) {
@@ -713,14 +713,14 @@
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return net.onrc.onos.datastore.RCProtos.internal_static_ProtoBuffer_PortProperty_descriptor;
+      return net.onrc.onos.core.datastore.RCProtos.internal_static_ProtoBuffer_PortProperty_descriptor;
     }
 
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return net.onrc.onos.datastore.RCProtos.internal_static_ProtoBuffer_PortProperty_fieldAccessorTable
+      return net.onrc.onos.core.datastore.RCProtos.internal_static_ProtoBuffer_PortProperty_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              net.onrc.onos.datastore.RCProtos.PortProperty.class, net.onrc.onos.datastore.RCProtos.PortProperty.Builder.class);
+              net.onrc.onos.core.datastore.RCProtos.PortProperty.class, net.onrc.onos.core.datastore.RCProtos.PortProperty.Builder.class);
     }
 
     public static com.google.protobuf.Parser<PortProperty> PARSER =
@@ -882,53 +882,53 @@
       return super.writeReplace();
     }
 
-    public static net.onrc.onos.datastore.RCProtos.PortProperty parseFrom(
+    public static net.onrc.onos.core.datastore.RCProtos.PortProperty parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static net.onrc.onos.datastore.RCProtos.PortProperty parseFrom(
+    public static net.onrc.onos.core.datastore.RCProtos.PortProperty parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static net.onrc.onos.datastore.RCProtos.PortProperty parseFrom(byte[] data)
+    public static net.onrc.onos.core.datastore.RCProtos.PortProperty parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static net.onrc.onos.datastore.RCProtos.PortProperty parseFrom(
+    public static net.onrc.onos.core.datastore.RCProtos.PortProperty parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static net.onrc.onos.datastore.RCProtos.PortProperty parseFrom(java.io.InputStream input)
+    public static net.onrc.onos.core.datastore.RCProtos.PortProperty parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return PARSER.parseFrom(input);
     }
-    public static net.onrc.onos.datastore.RCProtos.PortProperty parseFrom(
+    public static net.onrc.onos.core.datastore.RCProtos.PortProperty parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return PARSER.parseFrom(input, extensionRegistry);
     }
-    public static net.onrc.onos.datastore.RCProtos.PortProperty parseDelimitedFrom(java.io.InputStream input)
+    public static net.onrc.onos.core.datastore.RCProtos.PortProperty parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return PARSER.parseDelimitedFrom(input);
     }
-    public static net.onrc.onos.datastore.RCProtos.PortProperty parseDelimitedFrom(
+    public static net.onrc.onos.core.datastore.RCProtos.PortProperty parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return PARSER.parseDelimitedFrom(input, extensionRegistry);
     }
-    public static net.onrc.onos.datastore.RCProtos.PortProperty parseFrom(
+    public static net.onrc.onos.core.datastore.RCProtos.PortProperty parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return PARSER.parseFrom(input);
     }
-    public static net.onrc.onos.datastore.RCProtos.PortProperty parseFrom(
+    public static net.onrc.onos.core.datastore.RCProtos.PortProperty parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -937,7 +937,7 @@
 
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(net.onrc.onos.datastore.RCProtos.PortProperty prototype) {
+    public static Builder newBuilder(net.onrc.onos.core.datastore.RCProtos.PortProperty prototype) {
       return newBuilder().mergeFrom(prototype);
     }
     public Builder toBuilder() { return newBuilder(this); }
@@ -953,20 +953,20 @@
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements net.onrc.onos.datastore.RCProtos.PortPropertyOrBuilder {
+       implements net.onrc.onos.core.datastore.RCProtos.PortPropertyOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return net.onrc.onos.datastore.RCProtos.internal_static_ProtoBuffer_PortProperty_descriptor;
+        return net.onrc.onos.core.datastore.RCProtos.internal_static_ProtoBuffer_PortProperty_descriptor;
       }
 
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return net.onrc.onos.datastore.RCProtos.internal_static_ProtoBuffer_PortProperty_fieldAccessorTable
+        return net.onrc.onos.core.datastore.RCProtos.internal_static_ProtoBuffer_PortProperty_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                net.onrc.onos.datastore.RCProtos.PortProperty.class, net.onrc.onos.datastore.RCProtos.PortProperty.Builder.class);
+                net.onrc.onos.core.datastore.RCProtos.PortProperty.class, net.onrc.onos.core.datastore.RCProtos.PortProperty.Builder.class);
       }
 
-      // Construct using net.onrc.onos.datastore.RCProtos.PortProperty.newBuilder()
+      // Construct using net.onrc.onos.core.datastore.RCProtos.PortProperty.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -1003,23 +1003,23 @@
 
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return net.onrc.onos.datastore.RCProtos.internal_static_ProtoBuffer_PortProperty_descriptor;
+        return net.onrc.onos.core.datastore.RCProtos.internal_static_ProtoBuffer_PortProperty_descriptor;
       }
 
-      public net.onrc.onos.datastore.RCProtos.PortProperty getDefaultInstanceForType() {
-        return net.onrc.onos.datastore.RCProtos.PortProperty.getDefaultInstance();
+      public net.onrc.onos.core.datastore.RCProtos.PortProperty getDefaultInstanceForType() {
+        return net.onrc.onos.core.datastore.RCProtos.PortProperty.getDefaultInstance();
       }
 
-      public net.onrc.onos.datastore.RCProtos.PortProperty build() {
-        net.onrc.onos.datastore.RCProtos.PortProperty result = buildPartial();
+      public net.onrc.onos.core.datastore.RCProtos.PortProperty build() {
+        net.onrc.onos.core.datastore.RCProtos.PortProperty result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
       }
 
-      public net.onrc.onos.datastore.RCProtos.PortProperty buildPartial() {
-        net.onrc.onos.datastore.RCProtos.PortProperty result = new net.onrc.onos.datastore.RCProtos.PortProperty(this);
+      public net.onrc.onos.core.datastore.RCProtos.PortProperty buildPartial() {
+        net.onrc.onos.core.datastore.RCProtos.PortProperty result = new net.onrc.onos.core.datastore.RCProtos.PortProperty(this);
         int from_bitField0_ = bitField0_;
         int to_bitField0_ = 0;
         if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
@@ -1044,16 +1044,16 @@
       }
 
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof net.onrc.onos.datastore.RCProtos.PortProperty) {
-          return mergeFrom((net.onrc.onos.datastore.RCProtos.PortProperty)other);
+        if (other instanceof net.onrc.onos.core.datastore.RCProtos.PortProperty) {
+          return mergeFrom((net.onrc.onos.core.datastore.RCProtos.PortProperty)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(net.onrc.onos.datastore.RCProtos.PortProperty other) {
-        if (other == net.onrc.onos.datastore.RCProtos.PortProperty.getDefaultInstance()) return this;
+      public Builder mergeFrom(net.onrc.onos.core.datastore.RCProtos.PortProperty other) {
+        if (other == net.onrc.onos.core.datastore.RCProtos.PortProperty.getDefaultInstance()) return this;
         if (other.hasDpid()) {
           setDpid(other.getDpid());
         }
@@ -1090,11 +1090,11 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        net.onrc.onos.datastore.RCProtos.PortProperty parsedMessage = null;
+        net.onrc.onos.core.datastore.RCProtos.PortProperty parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (net.onrc.onos.datastore.RCProtos.PortProperty) e.getUnfinishedMessage();
+          parsedMessage = (net.onrc.onos.core.datastore.RCProtos.PortProperty) e.getUnfinishedMessage();
           throw e;
         } finally {
           if (parsedMessage != null) {
@@ -1409,14 +1409,14 @@
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return net.onrc.onos.datastore.RCProtos.internal_static_ProtoBuffer_LinkProperty_descriptor;
+      return net.onrc.onos.core.datastore.RCProtos.internal_static_ProtoBuffer_LinkProperty_descriptor;
     }
 
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return net.onrc.onos.datastore.RCProtos.internal_static_ProtoBuffer_LinkProperty_fieldAccessorTable
+      return net.onrc.onos.core.datastore.RCProtos.internal_static_ProtoBuffer_LinkProperty_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              net.onrc.onos.datastore.RCProtos.LinkProperty.class, net.onrc.onos.datastore.RCProtos.LinkProperty.Builder.class);
+              net.onrc.onos.core.datastore.RCProtos.LinkProperty.class, net.onrc.onos.core.datastore.RCProtos.LinkProperty.Builder.class);
     }
 
     public static com.google.protobuf.Parser<LinkProperty> PARSER =
@@ -1634,53 +1634,53 @@
       return super.writeReplace();
     }
 
-    public static net.onrc.onos.datastore.RCProtos.LinkProperty parseFrom(
+    public static net.onrc.onos.core.datastore.RCProtos.LinkProperty parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static net.onrc.onos.datastore.RCProtos.LinkProperty parseFrom(
+    public static net.onrc.onos.core.datastore.RCProtos.LinkProperty parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static net.onrc.onos.datastore.RCProtos.LinkProperty parseFrom(byte[] data)
+    public static net.onrc.onos.core.datastore.RCProtos.LinkProperty parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static net.onrc.onos.datastore.RCProtos.LinkProperty parseFrom(
+    public static net.onrc.onos.core.datastore.RCProtos.LinkProperty parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static net.onrc.onos.datastore.RCProtos.LinkProperty parseFrom(java.io.InputStream input)
+    public static net.onrc.onos.core.datastore.RCProtos.LinkProperty parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return PARSER.parseFrom(input);
     }
-    public static net.onrc.onos.datastore.RCProtos.LinkProperty parseFrom(
+    public static net.onrc.onos.core.datastore.RCProtos.LinkProperty parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return PARSER.parseFrom(input, extensionRegistry);
     }
-    public static net.onrc.onos.datastore.RCProtos.LinkProperty parseDelimitedFrom(java.io.InputStream input)
+    public static net.onrc.onos.core.datastore.RCProtos.LinkProperty parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return PARSER.parseDelimitedFrom(input);
     }
-    public static net.onrc.onos.datastore.RCProtos.LinkProperty parseDelimitedFrom(
+    public static net.onrc.onos.core.datastore.RCProtos.LinkProperty parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return PARSER.parseDelimitedFrom(input, extensionRegistry);
     }
-    public static net.onrc.onos.datastore.RCProtos.LinkProperty parseFrom(
+    public static net.onrc.onos.core.datastore.RCProtos.LinkProperty parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return PARSER.parseFrom(input);
     }
-    public static net.onrc.onos.datastore.RCProtos.LinkProperty parseFrom(
+    public static net.onrc.onos.core.datastore.RCProtos.LinkProperty parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -1689,7 +1689,7 @@
 
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(net.onrc.onos.datastore.RCProtos.LinkProperty prototype) {
+    public static Builder newBuilder(net.onrc.onos.core.datastore.RCProtos.LinkProperty prototype) {
       return newBuilder().mergeFrom(prototype);
     }
     public Builder toBuilder() { return newBuilder(this); }
@@ -1705,20 +1705,20 @@
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements net.onrc.onos.datastore.RCProtos.LinkPropertyOrBuilder {
+       implements net.onrc.onos.core.datastore.RCProtos.LinkPropertyOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return net.onrc.onos.datastore.RCProtos.internal_static_ProtoBuffer_LinkProperty_descriptor;
+        return net.onrc.onos.core.datastore.RCProtos.internal_static_ProtoBuffer_LinkProperty_descriptor;
       }
 
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return net.onrc.onos.datastore.RCProtos.internal_static_ProtoBuffer_LinkProperty_fieldAccessorTable
+        return net.onrc.onos.core.datastore.RCProtos.internal_static_ProtoBuffer_LinkProperty_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                net.onrc.onos.datastore.RCProtos.LinkProperty.class, net.onrc.onos.datastore.RCProtos.LinkProperty.Builder.class);
+                net.onrc.onos.core.datastore.RCProtos.LinkProperty.class, net.onrc.onos.core.datastore.RCProtos.LinkProperty.Builder.class);
       }
 
-      // Construct using net.onrc.onos.datastore.RCProtos.LinkProperty.newBuilder()
+      // Construct using net.onrc.onos.core.datastore.RCProtos.LinkProperty.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -1759,23 +1759,23 @@
 
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return net.onrc.onos.datastore.RCProtos.internal_static_ProtoBuffer_LinkProperty_descriptor;
+        return net.onrc.onos.core.datastore.RCProtos.internal_static_ProtoBuffer_LinkProperty_descriptor;
       }
 
-      public net.onrc.onos.datastore.RCProtos.LinkProperty getDefaultInstanceForType() {
-        return net.onrc.onos.datastore.RCProtos.LinkProperty.getDefaultInstance();
+      public net.onrc.onos.core.datastore.RCProtos.LinkProperty getDefaultInstanceForType() {
+        return net.onrc.onos.core.datastore.RCProtos.LinkProperty.getDefaultInstance();
       }
 
-      public net.onrc.onos.datastore.RCProtos.LinkProperty build() {
-        net.onrc.onos.datastore.RCProtos.LinkProperty result = buildPartial();
+      public net.onrc.onos.core.datastore.RCProtos.LinkProperty build() {
+        net.onrc.onos.core.datastore.RCProtos.LinkProperty result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
       }
 
-      public net.onrc.onos.datastore.RCProtos.LinkProperty buildPartial() {
-        net.onrc.onos.datastore.RCProtos.LinkProperty result = new net.onrc.onos.datastore.RCProtos.LinkProperty(this);
+      public net.onrc.onos.core.datastore.RCProtos.LinkProperty buildPartial() {
+        net.onrc.onos.core.datastore.RCProtos.LinkProperty result = new net.onrc.onos.core.datastore.RCProtos.LinkProperty(this);
         int from_bitField0_ = bitField0_;
         int to_bitField0_ = 0;
         if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
@@ -1808,16 +1808,16 @@
       }
 
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof net.onrc.onos.datastore.RCProtos.LinkProperty) {
-          return mergeFrom((net.onrc.onos.datastore.RCProtos.LinkProperty)other);
+        if (other instanceof net.onrc.onos.core.datastore.RCProtos.LinkProperty) {
+          return mergeFrom((net.onrc.onos.core.datastore.RCProtos.LinkProperty)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(net.onrc.onos.datastore.RCProtos.LinkProperty other) {
-        if (other == net.onrc.onos.datastore.RCProtos.LinkProperty.getDefaultInstance()) return this;
+      public Builder mergeFrom(net.onrc.onos.core.datastore.RCProtos.LinkProperty other) {
+        if (other == net.onrc.onos.core.datastore.RCProtos.LinkProperty.getDefaultInstance()) return this;
         if (other.hasSrcSwId()) {
           setSrcSwId(other.getSrcSwId());
         }
@@ -1868,11 +1868,11 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        net.onrc.onos.datastore.RCProtos.LinkProperty parsedMessage = null;
+        net.onrc.onos.core.datastore.RCProtos.LinkProperty parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (net.onrc.onos.datastore.RCProtos.LinkProperty) e.getUnfinishedMessage();
+          parsedMessage = (net.onrc.onos.core.datastore.RCProtos.LinkProperty) e.getUnfinishedMessage();
           throw e;
         } finally {
           if (parsedMessage != null) {
diff --git a/src/main/java/net/onrc/onos/datastore/RejectRulesException.java b/src/main/java/net/onrc/onos/core/datastore/RejectRulesException.java
similarity index 93%
rename from src/main/java/net/onrc/onos/datastore/RejectRulesException.java
rename to src/main/java/net/onrc/onos/core/datastore/RejectRulesException.java
index 1777ef6..351d1a1 100644
--- a/src/main/java/net/onrc/onos/datastore/RejectRulesException.java
+++ b/src/main/java/net/onrc/onos/core/datastore/RejectRulesException.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.datastore;
+package net.onrc.onos.core.datastore;
 
 //
 // Not sure if we really need this base class.
diff --git a/src/main/java/net/onrc/onos/datastore/WrongVersionException.java b/src/main/java/net/onrc/onos/core/datastore/WrongVersionException.java
similarity index 91%
rename from src/main/java/net/onrc/onos/datastore/WrongVersionException.java
rename to src/main/java/net/onrc/onos/core/datastore/WrongVersionException.java
index 441409f..568f5e1 100644
--- a/src/main/java/net/onrc/onos/datastore/WrongVersionException.java
+++ b/src/main/java/net/onrc/onos/core/datastore/WrongVersionException.java
@@ -1,6 +1,6 @@
-package net.onrc.onos.datastore;
+package net.onrc.onos.core.datastore;
 
-import net.onrc.onos.datastore.utils.ByteArrayUtil;
+import net.onrc.onos.core.datastore.utils.ByteArrayUtil;
 
 /**
  * Exception thrown when conditional operation failed due to version mismatch.
diff --git a/src/main/java/net/onrc/onos/datastore/hazelcast/HZClient.java b/src/main/java/net/onrc/onos/core/datastore/hazelcast/HZClient.java
similarity index 91%
rename from src/main/java/net/onrc/onos/datastore/hazelcast/HZClient.java
rename to src/main/java/net/onrc/onos/core/datastore/hazelcast/HZClient.java
index aec9f9d..b21ef8e 100644
--- a/src/main/java/net/onrc/onos/datastore/hazelcast/HZClient.java
+++ b/src/main/java/net/onrc/onos/core/datastore/hazelcast/HZClient.java
@@ -1,21 +1,21 @@
-package net.onrc.onos.datastore.hazelcast;
+package net.onrc.onos.core.datastore.hazelcast;
 
 import java.io.FileNotFoundException;
 import java.util.Collection;
 import java.util.List;
 
-import net.onrc.onos.datastore.IKVClient;
-import net.onrc.onos.datastore.IKVTable;
-import net.onrc.onos.datastore.IKVTable.IKVEntry;
-import net.onrc.onos.datastore.IKVTableID;
-import net.onrc.onos.datastore.IMultiEntryOperation;
-import net.onrc.onos.datastore.IMultiEntryOperation.OPERATION;
-import net.onrc.onos.datastore.IMultiEntryOperation.STATUS;
-import net.onrc.onos.datastore.ObjectDoesntExistException;
-import net.onrc.onos.datastore.ObjectExistsException;
-import net.onrc.onos.datastore.WrongVersionException;
-import net.onrc.onos.datastore.hazelcast.HZTable.VersionedValue;
-import net.onrc.onos.datastore.internal.IModifiableMultiEntryOperation;
+import net.onrc.onos.core.datastore.IKVClient;
+import net.onrc.onos.core.datastore.IKVTable;
+import net.onrc.onos.core.datastore.IKVTableID;
+import net.onrc.onos.core.datastore.IMultiEntryOperation;
+import net.onrc.onos.core.datastore.ObjectDoesntExistException;
+import net.onrc.onos.core.datastore.ObjectExistsException;
+import net.onrc.onos.core.datastore.WrongVersionException;
+import net.onrc.onos.core.datastore.IKVTable.IKVEntry;
+import net.onrc.onos.core.datastore.IMultiEntryOperation.OPERATION;
+import net.onrc.onos.core.datastore.IMultiEntryOperation.STATUS;
+import net.onrc.onos.core.datastore.hazelcast.HZTable.VersionedValue;
+import net.onrc.onos.core.datastore.internal.IModifiableMultiEntryOperation;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -38,11 +38,11 @@
     private static final String MAP_PREFIX = "datastore://";
 
     // make this path configurable
-    private static final String BASE_CONFIG_FILENAME = System.getProperty("net.onrc.onos.datastore.hazelcast.baseConfig", "conf/hazelcast.xml");
-    private static boolean useClientMode = Boolean.parseBoolean(System.getProperty("net.onrc.onos.datastore.hazelcast.clientMode", "true"));
+    private static final String BASE_CONFIG_FILENAME = System.getProperty("net.onrc.onos.core.datastore.hazelcast.baseConfig", "conf/hazelcast.xml");
+    private static boolean useClientMode = Boolean.parseBoolean(System.getProperty("net.onrc.onos.core.datastore.hazelcast.clientMode", "true"));
 
     // Note: xml configuration will overwrite this value if present
-    private static int backupCount = Integer.valueOf(System.getProperty("net.onrc.onos.datastore.hazelcast.backupCount", "3"));
+    private static int backupCount = Integer.valueOf(System.getProperty("net.onrc.onos.core.datastore.hazelcast.backupCount", "3"));
 
     private final HazelcastInstance hazelcastInstance;
 
@@ -77,7 +77,7 @@
             ClientConfig clientConfig = new ClientConfig();
             final int port = baseHzConfig.getNetworkConfig().getPort();
 
-            String server = System.getProperty("net.onrc.onos.datastore.hazelcast.client.server", "localhost");
+            String server = System.getProperty("net.onrc.onos.core.datastore.hazelcast.client.server", "localhost");
             clientConfig.addAddress(server + ":" + port);
 
             // copy group config from base Hazelcast configuration
diff --git a/src/main/java/net/onrc/onos/datastore/hazelcast/HZMultiEntryOperation.java b/src/main/java/net/onrc/onos/core/datastore/hazelcast/HZMultiEntryOperation.java
similarity index 91%
rename from src/main/java/net/onrc/onos/datastore/hazelcast/HZMultiEntryOperation.java
rename to src/main/java/net/onrc/onos/core/datastore/hazelcast/HZMultiEntryOperation.java
index 67a868e..a4842ef 100644
--- a/src/main/java/net/onrc/onos/datastore/hazelcast/HZMultiEntryOperation.java
+++ b/src/main/java/net/onrc/onos/core/datastore/hazelcast/HZMultiEntryOperation.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.datastore.hazelcast;
+package net.onrc.onos.core.datastore.hazelcast;
 
 import java.util.concurrent.CancellationException;
 import java.util.concurrent.ExecutionException;
@@ -7,11 +7,11 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import net.onrc.onos.datastore.IKVTableID;
-import net.onrc.onos.datastore.IMultiEntryOperation;
-import net.onrc.onos.datastore.hazelcast.HZTable.VersionedValue;
-import net.onrc.onos.datastore.internal.IModifiableMultiEntryOperation;
-import net.onrc.onos.datastore.utils.ByteArrayUtil;
+import net.onrc.onos.core.datastore.IKVTableID;
+import net.onrc.onos.core.datastore.IMultiEntryOperation;
+import net.onrc.onos.core.datastore.hazelcast.HZTable.VersionedValue;
+import net.onrc.onos.core.datastore.internal.IModifiableMultiEntryOperation;
+import net.onrc.onos.core.datastore.utils.ByteArrayUtil;
 
 public class HZMultiEntryOperation implements IMultiEntryOperation, IModifiableMultiEntryOperation {
     private static final Logger log = LoggerFactory.getLogger(HZMultiEntryOperation.class);
diff --git a/src/main/java/net/onrc/onos/datastore/hazelcast/HZTable.java b/src/main/java/net/onrc/onos/core/datastore/hazelcast/HZTable.java
similarity index 96%
rename from src/main/java/net/onrc/onos/datastore/hazelcast/HZTable.java
rename to src/main/java/net/onrc/onos/core/datastore/hazelcast/HZTable.java
index 894854c..f071ecc 100644
--- a/src/main/java/net/onrc/onos/datastore/hazelcast/HZTable.java
+++ b/src/main/java/net/onrc/onos/core/datastore/hazelcast/HZTable.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.datastore.hazelcast;
+package net.onrc.onos.core.datastore.hazelcast;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -7,11 +7,11 @@
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicLong;
 
-import net.onrc.onos.datastore.IKVTable;
-import net.onrc.onos.datastore.IKVTableID;
-import net.onrc.onos.datastore.ObjectDoesntExistException;
-import net.onrc.onos.datastore.ObjectExistsException;
-import net.onrc.onos.datastore.WrongVersionException;
+import net.onrc.onos.core.datastore.IKVTable;
+import net.onrc.onos.core.datastore.IKVTableID;
+import net.onrc.onos.core.datastore.ObjectDoesntExistException;
+import net.onrc.onos.core.datastore.ObjectExistsException;
+import net.onrc.onos.core.datastore.WrongVersionException;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/src/main/java/net/onrc/onos/datastore/hazelcast/VersionedValueSerializableFactory.java b/src/main/java/net/onrc/onos/core/datastore/hazelcast/VersionedValueSerializableFactory.java
similarity index 92%
rename from src/main/java/net/onrc/onos/datastore/hazelcast/VersionedValueSerializableFactory.java
rename to src/main/java/net/onrc/onos/core/datastore/hazelcast/VersionedValueSerializableFactory.java
index 3326890..7e77be7 100644
--- a/src/main/java/net/onrc/onos/datastore/hazelcast/VersionedValueSerializableFactory.java
+++ b/src/main/java/net/onrc/onos/core/datastore/hazelcast/VersionedValueSerializableFactory.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.datastore.hazelcast;
+package net.onrc.onos.core.datastore.hazelcast;
 
 import com.hazelcast.nio.serialization.DataSerializableFactory;
 import com.hazelcast.nio.serialization.IdentifiedDataSerializable;
diff --git a/src/main/java/net/onrc/onos/datastore/internal/IModifiableMultiEntryOperation.java b/src/main/java/net/onrc/onos/core/datastore/internal/IModifiableMultiEntryOperation.java
similarity index 91%
rename from src/main/java/net/onrc/onos/datastore/internal/IModifiableMultiEntryOperation.java
rename to src/main/java/net/onrc/onos/core/datastore/internal/IModifiableMultiEntryOperation.java
index 8a23330..a607add 100644
--- a/src/main/java/net/onrc/onos/datastore/internal/IModifiableMultiEntryOperation.java
+++ b/src/main/java/net/onrc/onos/core/datastore/internal/IModifiableMultiEntryOperation.java
@@ -1,6 +1,6 @@
-package net.onrc.onos.datastore.internal;
+package net.onrc.onos.core.datastore.internal;
 
-import net.onrc.onos.datastore.IMultiEntryOperation;
+import net.onrc.onos.core.datastore.IMultiEntryOperation;
 
 /**
  * Interface for backend to realize IMultiEntryOperation.
diff --git a/src/main/java/net/onrc/onos/datastore/ramcloud/RCClient.java b/src/main/java/net/onrc/onos/core/datastore/ramcloud/RCClient.java
similarity index 96%
rename from src/main/java/net/onrc/onos/datastore/ramcloud/RCClient.java
rename to src/main/java/net/onrc/onos/core/datastore/ramcloud/RCClient.java
index c33cb74..18ef642 100644
--- a/src/main/java/net/onrc/onos/datastore/ramcloud/RCClient.java
+++ b/src/main/java/net/onrc/onos/core/datastore/ramcloud/RCClient.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.datastore.ramcloud;
+package net.onrc.onos.core.datastore.ramcloud;
 
 import java.io.File;
 import java.util.ArrayList;
@@ -8,18 +8,18 @@
 import java.util.List;
 import java.util.concurrent.ConcurrentHashMap;
 
-import net.onrc.onos.datastore.IKVClient;
-import net.onrc.onos.datastore.IKVTable;
-import net.onrc.onos.datastore.IKVTable.IKVEntry;
-import net.onrc.onos.datastore.IKVTableID;
-import net.onrc.onos.datastore.IMultiEntryOperation;
-import net.onrc.onos.datastore.IMultiEntryOperation.STATUS;
-import net.onrc.onos.datastore.ObjectDoesntExistException;
-import net.onrc.onos.datastore.ObjectExistsException;
-import net.onrc.onos.datastore.WrongVersionException;
-import net.onrc.onos.datastore.internal.IModifiableMultiEntryOperation;
-import net.onrc.onos.datastore.ramcloud.RCTable.Entry;
-import net.onrc.onos.datastore.utils.ByteArrayUtil;
+import net.onrc.onos.core.datastore.IKVClient;
+import net.onrc.onos.core.datastore.IKVTable;
+import net.onrc.onos.core.datastore.IKVTableID;
+import net.onrc.onos.core.datastore.IMultiEntryOperation;
+import net.onrc.onos.core.datastore.ObjectDoesntExistException;
+import net.onrc.onos.core.datastore.ObjectExistsException;
+import net.onrc.onos.core.datastore.WrongVersionException;
+import net.onrc.onos.core.datastore.IKVTable.IKVEntry;
+import net.onrc.onos.core.datastore.IMultiEntryOperation.STATUS;
+import net.onrc.onos.core.datastore.internal.IModifiableMultiEntryOperation;
+import net.onrc.onos.core.datastore.ramcloud.RCTable.Entry;
+import net.onrc.onos.core.datastore.utils.ByteArrayUtil;
 
 import org.apache.commons.configuration.Configuration;
 import org.apache.commons.configuration.ConfigurationException;
diff --git a/src/main/java/net/onrc/onos/datastore/ramcloud/RCMultiEntryOperation.java b/src/main/java/net/onrc/onos/core/datastore/ramcloud/RCMultiEntryOperation.java
similarity index 91%
rename from src/main/java/net/onrc/onos/datastore/ramcloud/RCMultiEntryOperation.java
rename to src/main/java/net/onrc/onos/core/datastore/ramcloud/RCMultiEntryOperation.java
index 28c5a0b..9b8c8b6 100644
--- a/src/main/java/net/onrc/onos/datastore/ramcloud/RCMultiEntryOperation.java
+++ b/src/main/java/net/onrc/onos/core/datastore/ramcloud/RCMultiEntryOperation.java
@@ -1,9 +1,9 @@
-package net.onrc.onos.datastore.ramcloud;
+package net.onrc.onos.core.datastore.ramcloud;
 
-import net.onrc.onos.datastore.IKVTableID;
-import net.onrc.onos.datastore.IMultiEntryOperation;
-import net.onrc.onos.datastore.internal.IModifiableMultiEntryOperation;
-import net.onrc.onos.datastore.ramcloud.RCTable.Entry;
+import net.onrc.onos.core.datastore.IKVTableID;
+import net.onrc.onos.core.datastore.IMultiEntryOperation;
+import net.onrc.onos.core.datastore.internal.IModifiableMultiEntryOperation;
+import net.onrc.onos.core.datastore.ramcloud.RCTable.Entry;
 
 // FIXME move or extract this
 public class RCMultiEntryOperation implements IMultiEntryOperation, IModifiableMultiEntryOperation {
diff --git a/src/main/java/net/onrc/onos/datastore/ramcloud/RCTable.java b/src/main/java/net/onrc/onos/core/datastore/ramcloud/RCTable.java
similarity index 90%
rename from src/main/java/net/onrc/onos/datastore/ramcloud/RCTable.java
rename to src/main/java/net/onrc/onos/core/datastore/ramcloud/RCTable.java
index 741df0a..098215e 100644
--- a/src/main/java/net/onrc/onos/datastore/ramcloud/RCTable.java
+++ b/src/main/java/net/onrc/onos/core/datastore/ramcloud/RCTable.java
@@ -1,10 +1,10 @@
-package net.onrc.onos.datastore.ramcloud;
+package net.onrc.onos.core.datastore.ramcloud;
 
-import net.onrc.onos.datastore.IKVTable;
-import net.onrc.onos.datastore.IKVTableID;
-import net.onrc.onos.datastore.ObjectDoesntExistException;
-import net.onrc.onos.datastore.ObjectExistsException;
-import net.onrc.onos.datastore.WrongVersionException;
+import net.onrc.onos.core.datastore.IKVTable;
+import net.onrc.onos.core.datastore.IKVTableID;
+import net.onrc.onos.core.datastore.ObjectDoesntExistException;
+import net.onrc.onos.core.datastore.ObjectExistsException;
+import net.onrc.onos.core.datastore.WrongVersionException;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/src/main/java/net/onrc/onos/datastore/ramcloud/RCTableID.java b/src/main/java/net/onrc/onos/core/datastore/ramcloud/RCTableID.java
similarity index 92%
rename from src/main/java/net/onrc/onos/datastore/ramcloud/RCTableID.java
rename to src/main/java/net/onrc/onos/core/datastore/ramcloud/RCTableID.java
index 83ff854..f69addc 100644
--- a/src/main/java/net/onrc/onos/datastore/ramcloud/RCTableID.java
+++ b/src/main/java/net/onrc/onos/core/datastore/ramcloud/RCTableID.java
@@ -1,8 +1,8 @@
-package net.onrc.onos.datastore.ramcloud;
+package net.onrc.onos.core.datastore.ramcloud;
 
 import java.util.Objects;
 
-import net.onrc.onos.datastore.IKVTableID;
+import net.onrc.onos.core.datastore.IKVTableID;
 
 public class RCTableID implements IKVTableID {
     private final String tableName;
diff --git a/src/main/java/net/onrc/onos/datastore/topology/KVDevice.java b/src/main/java/net/onrc/onos/core/datastore/topology/KVDevice.java
similarity index 93%
rename from src/main/java/net/onrc/onos/datastore/topology/KVDevice.java
rename to src/main/java/net/onrc/onos/core/datastore/topology/KVDevice.java
index 805be62..96411a9 100644
--- a/src/main/java/net/onrc/onos/datastore/topology/KVDevice.java
+++ b/src/main/java/net/onrc/onos/core/datastore/topology/KVDevice.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.datastore.topology;
+package net.onrc.onos.core.datastore.topology;
 
 import java.nio.ByteBuffer;
 import java.util.Arrays;
@@ -10,12 +10,12 @@
 import java.util.Set;
 import java.util.TreeSet;
 
-import net.onrc.onos.datastore.DataStoreClient;
-import net.onrc.onos.datastore.IKVTable.IKVEntry;
-import net.onrc.onos.datastore.topology.KVLink.STATUS;
-import net.onrc.onos.datastore.utils.ByteArrayComparator;
-import net.onrc.onos.datastore.utils.ByteArrayUtil;
-import net.onrc.onos.datastore.utils.KVObject;
+import net.onrc.onos.core.datastore.DataStoreClient;
+import net.onrc.onos.core.datastore.IKVTable.IKVEntry;
+import net.onrc.onos.core.datastore.topology.KVLink.STATUS;
+import net.onrc.onos.core.datastore.utils.ByteArrayComparator;
+import net.onrc.onos.core.datastore.utils.ByteArrayUtil;
+import net.onrc.onos.core.datastore.utils.KVObject;
 import net.onrc.onos.ofcontroller.networkgraph.DeviceEvent;
 
 import org.slf4j.Logger;
diff --git a/src/main/java/net/onrc/onos/datastore/topology/KVLink.java b/src/main/java/net/onrc/onos/core/datastore/topology/KVLink.java
similarity index 95%
rename from src/main/java/net/onrc/onos/datastore/topology/KVLink.java
rename to src/main/java/net/onrc/onos/core/datastore/topology/KVLink.java
index 9d39787..971cb6d 100644
--- a/src/main/java/net/onrc/onos/datastore/topology/KVLink.java
+++ b/src/main/java/net/onrc/onos/core/datastore/topology/KVLink.java
@@ -1,14 +1,14 @@
-package net.onrc.onos.datastore.topology;
+package net.onrc.onos.core.datastore.topology;
 
 import java.nio.ByteBuffer;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 
-import net.onrc.onos.datastore.DataStoreClient;
-import net.onrc.onos.datastore.IKVTable.IKVEntry;
-import net.onrc.onos.datastore.RCProtos.LinkProperty;
-import net.onrc.onos.datastore.utils.KVObject;
+import net.onrc.onos.core.datastore.DataStoreClient;
+import net.onrc.onos.core.datastore.IKVTable.IKVEntry;
+import net.onrc.onos.core.datastore.RCProtos.LinkProperty;
+import net.onrc.onos.core.datastore.utils.KVObject;
 import net.onrc.onos.ofcontroller.networkgraph.LinkEvent;
 import net.onrc.onos.ofcontroller.networkgraph.PortEvent;
 
diff --git a/src/main/java/net/onrc/onos/datastore/topology/KVPort.java b/src/main/java/net/onrc/onos/core/datastore/topology/KVPort.java
similarity index 94%
rename from src/main/java/net/onrc/onos/datastore/topology/KVPort.java
rename to src/main/java/net/onrc/onos/core/datastore/topology/KVPort.java
index d31026a..9ab2d2a 100644
--- a/src/main/java/net/onrc/onos/datastore/topology/KVPort.java
+++ b/src/main/java/net/onrc/onos/core/datastore/topology/KVPort.java
@@ -1,15 +1,15 @@
-package net.onrc.onos.datastore.topology;
+package net.onrc.onos.core.datastore.topology;
 
 import java.nio.ByteBuffer;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 
-import net.onrc.onos.datastore.DataStoreClient;
-import net.onrc.onos.datastore.IKVTable.IKVEntry;
-import net.onrc.onos.datastore.RCProtos.PortProperty;
-import net.onrc.onos.datastore.utils.ByteArrayUtil;
-import net.onrc.onos.datastore.utils.KVObject;
+import net.onrc.onos.core.datastore.DataStoreClient;
+import net.onrc.onos.core.datastore.IKVTable.IKVEntry;
+import net.onrc.onos.core.datastore.RCProtos.PortProperty;
+import net.onrc.onos.core.datastore.utils.ByteArrayUtil;
+import net.onrc.onos.core.datastore.utils.KVObject;
 import net.onrc.onos.ofcontroller.networkgraph.PortEvent;
 
 import org.slf4j.Logger;
diff --git a/src/main/java/net/onrc/onos/datastore/topology/KVSwitch.java b/src/main/java/net/onrc/onos/core/datastore/topology/KVSwitch.java
similarity index 94%
rename from src/main/java/net/onrc/onos/datastore/topology/KVSwitch.java
rename to src/main/java/net/onrc/onos/core/datastore/topology/KVSwitch.java
index 5f1c8fd..eb27f7a 100644
--- a/src/main/java/net/onrc/onos/datastore/topology/KVSwitch.java
+++ b/src/main/java/net/onrc/onos/core/datastore/topology/KVSwitch.java
@@ -1,14 +1,14 @@
-package net.onrc.onos.datastore.topology;
+package net.onrc.onos.core.datastore.topology;
 
 import java.nio.ByteBuffer;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 
-import net.onrc.onos.datastore.DataStoreClient;
-import net.onrc.onos.datastore.IKVTable.IKVEntry;
-import net.onrc.onos.datastore.RCProtos.SwitchProperty;
-import net.onrc.onos.datastore.utils.KVObject;
+import net.onrc.onos.core.datastore.DataStoreClient;
+import net.onrc.onos.core.datastore.IKVTable.IKVEntry;
+import net.onrc.onos.core.datastore.RCProtos.SwitchProperty;
+import net.onrc.onos.core.datastore.utils.KVObject;
 import net.onrc.onos.ofcontroller.networkgraph.SwitchEvent;
 
 import org.slf4j.Logger;
diff --git a/src/main/java/net/onrc/onos/datastore/utils/ByteArrayComparator.java b/src/main/java/net/onrc/onos/core/datastore/utils/ByteArrayComparator.java
similarity index 93%
rename from src/main/java/net/onrc/onos/datastore/utils/ByteArrayComparator.java
rename to src/main/java/net/onrc/onos/core/datastore/utils/ByteArrayComparator.java
index fbe3ebd..f937e50 100644
--- a/src/main/java/net/onrc/onos/datastore/utils/ByteArrayComparator.java
+++ b/src/main/java/net/onrc/onos/core/datastore/utils/ByteArrayComparator.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.datastore.utils;
+package net.onrc.onos.core.datastore.utils;
 
 import java.nio.ByteBuffer;
 import java.util.Comparator;
diff --git a/src/main/java/net/onrc/onos/datastore/utils/ByteArrayUtil.java b/src/main/java/net/onrc/onos/core/datastore/utils/ByteArrayUtil.java
similarity index 96%
rename from src/main/java/net/onrc/onos/datastore/utils/ByteArrayUtil.java
rename to src/main/java/net/onrc/onos/core/datastore/utils/ByteArrayUtil.java
index c7e3765..14cd419 100644
--- a/src/main/java/net/onrc/onos/datastore/utils/ByteArrayUtil.java
+++ b/src/main/java/net/onrc/onos/core/datastore/utils/ByteArrayUtil.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.datastore.utils;
+package net.onrc.onos.core.datastore.utils;
 
 import java.nio.ByteBuffer;
 
diff --git a/src/main/java/net/onrc/onos/datastore/utils/KVObject.java b/src/main/java/net/onrc/onos/core/datastore/utils/KVObject.java
similarity index 94%
rename from src/main/java/net/onrc/onos/datastore/utils/KVObject.java
rename to src/main/java/net/onrc/onos/core/datastore/utils/KVObject.java
index b46c9f5..522ced0 100644
--- a/src/main/java/net/onrc/onos/datastore/utils/KVObject.java
+++ b/src/main/java/net/onrc/onos/core/datastore/utils/KVObject.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.datastore.utils;
+package net.onrc.onos.core.datastore.utils;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -6,17 +6,17 @@
 import java.util.List;
 import java.util.Map;
 
-import net.onrc.onos.datastore.DataStoreClient;
-import net.onrc.onos.datastore.IKVClient;
-import net.onrc.onos.datastore.IKVTable;
-import net.onrc.onos.datastore.IKVTable.IKVEntry;
-import net.onrc.onos.datastore.IKVTableID;
-import net.onrc.onos.datastore.IMultiEntryOperation;
-import net.onrc.onos.datastore.IMultiObjectOperation;
-import net.onrc.onos.datastore.ObjectDoesntExistException;
-import net.onrc.onos.datastore.ObjectExistsException;
-import net.onrc.onos.datastore.WrongVersionException;
-import net.onrc.onos.datastore.internal.IModifiableMultiEntryOperation;
+import net.onrc.onos.core.datastore.DataStoreClient;
+import net.onrc.onos.core.datastore.IKVClient;
+import net.onrc.onos.core.datastore.IKVTable;
+import net.onrc.onos.core.datastore.IKVTableID;
+import net.onrc.onos.core.datastore.IMultiEntryOperation;
+import net.onrc.onos.core.datastore.IMultiObjectOperation;
+import net.onrc.onos.core.datastore.ObjectDoesntExistException;
+import net.onrc.onos.core.datastore.ObjectExistsException;
+import net.onrc.onos.core.datastore.WrongVersionException;
+import net.onrc.onos.core.datastore.IKVTable.IKVEntry;
+import net.onrc.onos.core.datastore.internal.IModifiableMultiEntryOperation;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/src/main/java/net/onrc/onos/datastore/IMultiObjectOperation.java b/src/main/java/net/onrc/onos/datastore/IMultiObjectOperation.java
deleted file mode 100644
index 95e4e2a..0000000
--- a/src/main/java/net/onrc/onos/datastore/IMultiObjectOperation.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package net.onrc.onos.datastore;
-
-import net.onrc.onos.datastore.utils.KVObject;
-
-public interface IMultiObjectOperation {
-
-    public KVObject getObject();
-
-}
\ No newline at end of file
diff --git a/src/main/java/net/onrc/onos/intent/runtime/PathCalcRuntimeModule.java b/src/main/java/net/onrc/onos/intent/runtime/PathCalcRuntimeModule.java
index e5fded0..b8fe6ed 100755
--- a/src/main/java/net/onrc/onos/intent/runtime/PathCalcRuntimeModule.java
+++ b/src/main/java/net/onrc/onos/intent/runtime/PathCalcRuntimeModule.java
@@ -17,9 +17,9 @@
 import net.floodlightcontroller.core.module.FloodlightModuleException;
 import net.floodlightcontroller.core.module.IFloodlightModule;
 import net.floodlightcontroller.core.module.IFloodlightService;
-import net.onrc.onos.datagrid.IDatagridService;
-import net.onrc.onos.datagrid.IEventChannel;
-import net.onrc.onos.datagrid.IEventChannelListener;
+import net.onrc.onos.core.datagrid.IDatagridService;
+import net.onrc.onos.core.datagrid.IEventChannel;
+import net.onrc.onos.core.datagrid.IEventChannelListener;
 import net.onrc.onos.intent.Intent;
 import net.onrc.onos.intent.Intent.IntentState;
 import net.onrc.onos.intent.IntentMap;
diff --git a/src/main/java/net/onrc/onos/intent/runtime/PersistIntent.java b/src/main/java/net/onrc/onos/intent/runtime/PersistIntent.java
index 16e6ea4..9347d5d 100755
--- a/src/main/java/net/onrc/onos/intent/runtime/PersistIntent.java
+++ b/src/main/java/net/onrc/onos/intent/runtime/PersistIntent.java
@@ -13,10 +13,10 @@
 import java.util.Arrays;
 import java.util.concurrent.atomic.AtomicLong;
 
-import net.onrc.onos.datagrid.web.IntentResource;
-import net.onrc.onos.datastore.DataStoreClient;
-import net.onrc.onos.datastore.IKVTable;
-import net.onrc.onos.datastore.ObjectExistsException;
+import net.onrc.onos.core.datagrid.web.IntentResource;
+import net.onrc.onos.core.datastore.DataStoreClient;
+import net.onrc.onos.core.datastore.IKVTable;
+import net.onrc.onos.core.datastore.ObjectExistsException;
 import net.onrc.onos.intent.IntentOperationList;
 import net.onrc.onos.ofcontroller.networkgraph.INetworkGraphService;
 import net.onrc.onos.ofcontroller.networkgraph.NetworkGraph;
diff --git a/src/main/java/net/onrc/onos/intent/runtime/PlanInstallModule.java b/src/main/java/net/onrc/onos/intent/runtime/PlanInstallModule.java
index 293a33d..f4e8226 100644
--- a/src/main/java/net/onrc/onos/intent/runtime/PlanInstallModule.java
+++ b/src/main/java/net/onrc/onos/intent/runtime/PlanInstallModule.java
@@ -14,9 +14,9 @@
 import net.floodlightcontroller.core.module.FloodlightModuleException;
 import net.floodlightcontroller.core.module.IFloodlightModule;
 import net.floodlightcontroller.core.module.IFloodlightService;
-import net.onrc.onos.datagrid.IDatagridService;
-import net.onrc.onos.datagrid.IEventChannel;
-import net.onrc.onos.datagrid.IEventChannelListener;
+import net.onrc.onos.core.datagrid.IDatagridService;
+import net.onrc.onos.core.datagrid.IEventChannel;
+import net.onrc.onos.core.datagrid.IEventChannelListener;
 import net.onrc.onos.intent.FlowEntry;
 import net.onrc.onos.intent.Intent.IntentState;
 import net.onrc.onos.intent.IntentOperation;
@@ -25,6 +25,7 @@
 import net.onrc.onos.ofcontroller.networkgraph.INetworkGraphService;
 //import net.onrc.onos.ofcontroller.networkgraph.NetworkGraph;
 
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/src/main/java/net/onrc/onos/ofcontroller/devicemanager/OnosDeviceManager.java b/src/main/java/net/onrc/onos/ofcontroller/devicemanager/OnosDeviceManager.java
index b7e9697..90eb78c 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/devicemanager/OnosDeviceManager.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/devicemanager/OnosDeviceManager.java
@@ -24,9 +24,9 @@
 import net.floodlightcontroller.core.module.IFloodlightModule;
 import net.floodlightcontroller.core.module.IFloodlightService;
 import net.floodlightcontroller.util.MACAddress;
-import net.onrc.onos.datagrid.IDatagridService;
-import net.onrc.onos.datagrid.IEventChannel;
-import net.onrc.onos.datagrid.IEventChannelListener;
+import net.onrc.onos.core.datagrid.IDatagridService;
+import net.onrc.onos.core.datagrid.IEventChannel;
+import net.onrc.onos.core.datagrid.IEventChannelListener;
 import net.onrc.onos.packet.ARP;
 import net.onrc.onos.packet.DHCP;
 import net.onrc.onos.packet.Ethernet;
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphDatastore.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphDatastore.java
index 63f37d8..b9ed471 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphDatastore.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphDatastore.java
@@ -6,15 +6,15 @@
 import java.util.List;
 import java.util.Collection;
 
-import net.onrc.onos.datastore.DataStoreClient;
-import net.onrc.onos.datastore.IKVClient;
-import net.onrc.onos.datastore.topology.KVDevice;
-import net.onrc.onos.datastore.topology.KVLink;
-import net.onrc.onos.datastore.topology.KVPort;
-import net.onrc.onos.datastore.topology.KVPort.STATUS;
-import net.onrc.onos.datastore.topology.KVSwitch;
-import net.onrc.onos.datastore.utils.KVObject;
-import net.onrc.onos.datastore.utils.KVObject.WriteOp;
+import net.onrc.onos.core.datastore.DataStoreClient;
+import net.onrc.onos.core.datastore.IKVClient;
+import net.onrc.onos.core.datastore.topology.KVDevice;
+import net.onrc.onos.core.datastore.topology.KVLink;
+import net.onrc.onos.core.datastore.topology.KVPort;
+import net.onrc.onos.core.datastore.topology.KVSwitch;
+import net.onrc.onos.core.datastore.topology.KVPort.STATUS;
+import net.onrc.onos.core.datastore.utils.KVObject;
+import net.onrc.onos.core.datastore.utils.KVObject.WriteOp;
 import net.onrc.onos.ofcontroller.networkgraph.PortEvent.SwitchPort;
 
 import org.slf4j.Logger;
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphModule.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphModule.java
index 401a0c3..c437d3f 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphModule.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphModule.java
@@ -12,7 +12,7 @@
 import net.floodlightcontroller.core.module.IFloodlightModule;
 import net.floodlightcontroller.core.module.IFloodlightService;
 import net.floodlightcontroller.restserver.IRestApiService;
-import net.onrc.onos.datagrid.IDatagridService;
+import net.onrc.onos.core.datagrid.IDatagridService;
 import net.onrc.onos.ofcontroller.networkgraph.web.NetworkGraphWebRoutable;
 import net.onrc.onos.registry.controller.IControllerRegistryService;
 
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/TopologyManager.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/TopologyManager.java
index ccd3601..732265e 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/TopologyManager.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/TopologyManager.java
@@ -14,12 +14,12 @@
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.LinkedBlockingQueue;
 
-import net.onrc.onos.datagrid.IDatagridService;
-import net.onrc.onos.datagrid.IEventChannel;
-import net.onrc.onos.datagrid.IEventChannelListener;
-import net.onrc.onos.datastore.topology.KVLink;
-import net.onrc.onos.datastore.topology.KVPort;
-import net.onrc.onos.datastore.topology.KVSwitch;
+import net.onrc.onos.core.datagrid.IDatagridService;
+import net.onrc.onos.core.datagrid.IEventChannel;
+import net.onrc.onos.core.datagrid.IEventChannelListener;
+import net.onrc.onos.core.datastore.topology.KVLink;
+import net.onrc.onos.core.datastore.topology.KVPort;
+import net.onrc.onos.core.datastore.topology.KVSwitch;
 import net.onrc.onos.ofcontroller.networkgraph.PortEvent.SwitchPort;
 import net.onrc.onos.ofcontroller.util.EventEntry;
 import net.onrc.onos.registry.controller.IControllerRegistryService;
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/web/DatastoreLinksResource.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/web/DatastoreLinksResource.java
index c984dd1..94823b8 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/web/DatastoreLinksResource.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/web/DatastoreLinksResource.java
@@ -1,6 +1,6 @@
 package net.onrc.onos.ofcontroller.networkgraph.web;
 
-import net.onrc.onos.datastore.topology.KVLink;
+import net.onrc.onos.core.datastore.topology.KVLink;
 
 import org.restlet.resource.Get;
 import org.restlet.resource.ServerResource;
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/web/DatastorePortsResource.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/web/DatastorePortsResource.java
index 9765e7a..f5a68fb 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/web/DatastorePortsResource.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/web/DatastorePortsResource.java
@@ -1,6 +1,6 @@
 package net.onrc.onos.ofcontroller.networkgraph.web;
 
-import net.onrc.onos.datastore.topology.KVPort;
+import net.onrc.onos.core.datastore.topology.KVPort;
 
 import org.restlet.resource.Get;
 import org.restlet.resource.ServerResource;
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/web/DatastoreSwitchesResource.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/web/DatastoreSwitchesResource.java
index 018ef09..e373cec 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/web/DatastoreSwitchesResource.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/web/DatastoreSwitchesResource.java
@@ -1,6 +1,6 @@
 package net.onrc.onos.ofcontroller.networkgraph.web;
 
-import net.onrc.onos.datastore.topology.KVSwitch;
+import net.onrc.onos.core.datastore.topology.KVSwitch;
 
 import org.restlet.resource.Get;
 import org.restlet.resource.ServerResource;
