diff --git a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/IntentPartitionManager.java b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/IntentPartitionManager.java
index d2c63f3..f859ce4 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/IntentPartitionManager.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/IntentPartitionManager.java
@@ -72,6 +72,7 @@
 
     private static final String ELECTION_PREFIX = "intent-partition-";
 
+    protected NodeId localNodeId;
     private ListenerRegistry<IntentPartitionEvent, IntentPartitionEventListener> listenerRegistry;
     private LeadershipEventListener leaderListener = new InternalLeadershipListener();
 
@@ -80,6 +81,7 @@
 
     @Activate
     public void activate() {
+        localNodeId = clusterService.getLocalNode().id();
         leadershipService.addListener(leaderListener);
 
         listenerRegistry = new ListenerRegistry<>();
@@ -87,10 +89,12 @@
 
         for (int i = 0; i < NUM_PARTITIONS; i++) {
             leadershipService.runForLeadership(getPartitionPath(i));
+            log.debug("Registered to run for {}", getPartitionPath(i));
         }
 
         executor.scheduleAtFixedRate(() -> scheduleRebalance(0), 0,
                                      CHECK_PARTITION_BALANCE_PERIOD_SEC, TimeUnit.SECONDS);
+        log.info("Started");
     }
 
     @Deactivate
@@ -99,6 +103,7 @@
 
         eventDispatcher.removeSink(IntentPartitionEvent.class);
         leadershipService.removeListener(leaderListener);
+        log.info("Stopped");
     }
 
     /**
@@ -132,7 +137,7 @@
     @Override
     public boolean isMine(Key intentKey) {
         return Objects.equals(leadershipService.getLeader(getPartitionPath(getPartitionForKey(intentKey))),
-                              clusterService.getLocalNode().id());
+                              localNodeId);
     }
 
     @Override
@@ -175,7 +180,7 @@
 
         List<Leadership> myPartitions = leadershipService.getLeaderBoard().values()
                 .stream()
-                .filter(l -> clusterService.getLocalNode().id().equals(l.leaderNodeId()))
+                .filter(l -> localNodeId.equals(l.leaderNodeId()))
                 .filter(l -> l.topic().startsWith(ELECTION_PREFIX))
                 .collect(Collectors.toList());
 
@@ -215,7 +220,7 @@
         public void event(LeadershipEvent event) {
             Leadership leadership = event.subject();
 
-            if (Objects.equals(leadership.leaderNodeId(), clusterService.getLocalNode().id()) &&
+            if (Objects.equals(leadership.leaderNodeId(), localNodeId) &&
                     leadership.topic().startsWith(ELECTION_PREFIX)) {
 
                 eventDispatcher.post(new IntentPartitionEvent(IntentPartitionEvent.Type.LEADER_CHANGED,
diff --git a/core/store/dist/src/test/java/org/onosproject/store/intent/impl/IntentPartitionManagerTest.java b/core/store/dist/src/test/java/org/onosproject/store/intent/impl/IntentPartitionManagerTest.java
index 0c92280..e9ded9a 100644
--- a/core/store/dist/src/test/java/org/onosproject/store/intent/impl/IntentPartitionManagerTest.java
+++ b/core/store/dist/src/test/java/org/onosproject/store/intent/impl/IntentPartitionManagerTest.java
@@ -87,6 +87,7 @@
                 .withScheduledExecutor(new NullScheduledExecutor());
 
         partitionManager.clusterService = new TestClusterService();
+        partitionManager.localNodeId = MY_NODE_ID;
         partitionManager.leadershipService = leadershipService;
         partitionManager.eventDispatcher = new TestEventDispatcher();
     }
diff --git a/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/TranscodingAsyncConsistentMap.java b/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/TranscodingAsyncConsistentMap.java
index a1fe73f..438d9b3 100644
--- a/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/TranscodingAsyncConsistentMap.java
+++ b/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/TranscodingAsyncConsistentMap.java
@@ -208,8 +208,8 @@
         public void event(MapEvent<K2, V2> event) {
             listener.event(new MapEvent<K1, V1>(event.name(),
                     keyDecoder.apply(event.key()),
-                    event.newValue().map(valueDecoder),
-                    event.oldValue().map(valueDecoder)));
+                    event.newValue() != null ? event.newValue().map(valueDecoder) : null,
+                    event.oldValue() != null ? event.oldValue().map(valueDecoder) : null));
         }
     }
 }
