diff --git a/core/store/dist/src/main/java/org/onlab/onos/store/flow/impl/DistributedFlowRuleStore.java b/core/store/dist/src/main/java/org/onlab/onos/store/flow/impl/DistributedFlowRuleStore.java
index 5062416..1e7f73a 100644
--- a/core/store/dist/src/main/java/org/onlab/onos/store/flow/impl/DistributedFlowRuleStore.java
+++ b/core/store/dist/src/main/java/org/onlab/onos/store/flow/impl/DistributedFlowRuleStore.java
@@ -127,7 +127,7 @@
     @Override
     public void storeFlowRule(FlowRule rule) {
         ReplicaInfo replicaInfo = replicaInfoManager.getReplicaInfoFor(rule.deviceId());
-        if (replicaInfo.master().get().equals(clusterService.getLocalNode())) {
+        if (replicaInfo.master().get().equals(clusterService.getLocalNode().id())) {
             storeFlowEntryInternal(rule);
             return;
         }
@@ -146,7 +146,7 @@
         }
     }
 
-    public synchronized void storeFlowEntryInternal(FlowRule flowRule) {
+    private synchronized void storeFlowEntryInternal(FlowRule flowRule) {
         FlowEntry flowEntry = new DefaultFlowEntry(flowRule);
         DeviceId deviceId = flowRule.deviceId();
         // write to local copy.
@@ -161,7 +161,7 @@
     @Override
     public synchronized void deleteFlowRule(FlowRule rule) {
         ReplicaInfo replicaInfo = replicaInfoManager.getReplicaInfoFor(rule.deviceId());
-        if (replicaInfo.master().get().equals(clusterService.getLocalNode())) {
+        if (replicaInfo.master().get().equals(clusterService.getLocalNode().id())) {
             deleteFlowRuleInternal(rule);
             return;
         }
@@ -180,7 +180,7 @@
         }
     }
 
-    public synchronized void deleteFlowRuleInternal(FlowRule flowRule) {
+    private synchronized void deleteFlowRuleInternal(FlowRule flowRule) {
         FlowEntry entry = getFlowEntry(flowRule);
         if (entry == null) {
             return;
@@ -192,7 +192,7 @@
     @Override
     public FlowRuleEvent addOrUpdateFlowRule(FlowEntry rule) {
         ReplicaInfo replicaInfo = replicaInfoManager.getReplicaInfoFor(rule.deviceId());
-        if (replicaInfo.master().get().equals(clusterService.getLocalNode())) {
+        if (replicaInfo.master().get().equals(clusterService.getLocalNode().id())) {
             return addOrUpdateFlowRuleInternal(rule);
         }
 
@@ -235,7 +235,7 @@
     @Override
     public FlowRuleEvent removeFlowRule(FlowEntry rule) {
         ReplicaInfo replicaInfo = replicaInfoManager.getReplicaInfoFor(rule.deviceId());
-        if (replicaInfo.master().get().equals(clusterService.getLocalNode())) {
+        if (replicaInfo.master().get().equals(clusterService.getLocalNode().id())) {
             // bypass and handle it locally
             return removeFlowRuleInternal(rule);
         }
