diff --git a/core/store/dist/src/main/java/org/onosproject/store/cluster/impl/DistributedClusterStore.java b/core/store/dist/src/main/java/org/onosproject/store/cluster/impl/DistributedClusterStore.java
index e8a6f01..084c198 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/cluster/impl/DistributedClusterStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/cluster/impl/DistributedClusterStore.java
@@ -38,6 +38,7 @@
 import org.onosproject.cluster.ControllerNode;
 import org.onosproject.cluster.ControllerNode.State;
 import org.onosproject.cluster.DefaultControllerNode;
+import org.onosproject.cluster.Node;
 import org.onosproject.cluster.NodeId;
 import org.onosproject.core.Version;
 import org.onosproject.core.VersionService;
@@ -70,7 +71,7 @@
 import static org.onosproject.cluster.ClusterEvent.Type.INSTANCE_READY;
 import static org.slf4j.LoggerFactory.getLogger;
 
-@Component(immediate = true)
+@Component(enabled = false)
 @Service
 /**
  * Distributed cluster nodes store that employs an accrual failure
@@ -222,6 +223,11 @@
     }
 
     @Override
+    public Set<Node> getStorageNodes() {
+        return ImmutableSet.of();
+    }
+
+    @Override
     public ControllerNode getNode(NodeId nodeId) {
         checkNotNull(nodeId, INSTANCE_ID_NULL);
         return allNodes.get(nodeId);
diff --git a/core/store/dist/src/main/java/org/onosproject/store/cluster/messaging/impl/NettyMessagingManager.java b/core/store/dist/src/main/java/org/onosproject/store/cluster/messaging/impl/NettyMessagingManager.java
index 454f1bc..c98c72c 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/cluster/messaging/impl/NettyMessagingManager.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/cluster/messaging/impl/NettyMessagingManager.java
@@ -101,7 +101,7 @@
 /**
  * Netty based MessagingService.
  */
-@Component(immediate = true)
+@Component(enabled = false)
 @Service
 public class NettyMessagingManager implements MessagingService {
     private static final long HISTORY_EXPIRE_MILLIS = Duration.ofMinutes(1).toMillis();
diff --git a/core/store/dist/src/main/java/org/onosproject/store/config/impl/DistributedNetworkConfigStore.java b/core/store/dist/src/main/java/org/onosproject/store/config/impl/DistributedNetworkConfigStore.java
index c8547fa..7c2081e 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/config/impl/DistributedNetworkConfigStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/config/impl/DistributedNetworkConfigStore.java
@@ -129,7 +129,7 @@
 
     // Sweep through any pending configurations, validate them and then prune them.
     private void processPendingConfigs(ConfigFactory configFactory) {
-        ImmutableSet.copyOf(configs.keySet()).forEach(k -> {
+        configs.keySet().forEach(k -> {
             if (Objects.equals(k.configKey, configFactory.configKey()) &&
                     isAssignableFrom(configFactory, k)) {
                 // Prune whether valid or not
@@ -175,7 +175,7 @@
 
     // Sweep through any configurations for the config factory, set back to pending state.
     private void processExistingConfigs(ConfigFactory configFactory) {
-        ImmutableSet.copyOf(configs.keySet()).forEach(k -> {
+        configs.keySet().forEach(k -> {
             if (Objects.equals(configFactory.configClass().getName(), k.configClass)) {
                 Versioned<JsonNode> remove = configs.remove(k);
                 if (remove != null) {
@@ -294,7 +294,7 @@
 
     @Override
     public <S> void clearConfig(S subject) {
-        ImmutableSet.copyOf(configs.keySet()).forEach(k -> {
+        configs.keySet().forEach(k -> {
             if (Objects.equals(subject, k.subject) && delegate != null) {
                 configs.remove(k);
             }
@@ -303,7 +303,7 @@
 
     @Override
     public <S> void clearConfig() {
-        ImmutableSet.copyOf(configs.keySet()).forEach(k -> {
+        configs.keySet().forEach(k -> {
             if (delegate != null) {
                 configs.remove(k);
             }
