diff --git a/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/AtomixConsistentMapService.java b/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/AtomixConsistentMapService.java
index 1c31c55..22f59f3 100644
--- a/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/AtomixConsistentMapService.java
+++ b/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/AtomixConsistentMapService.java
@@ -144,7 +144,7 @@
     public void install(SnapshotReader reader) {
         listeners = new LinkedHashMap<>();
         for (Long sessionId : reader.<Set<Long>>readObject(serializer()::decode)) {
-            listeners.put(sessionId, getSessions().getSession(sessionId));
+            listeners.put(sessionId, sessions().getSession(sessionId));
         }
         preparedKeys = reader.readObject(serializer()::decode);
         map = reader.readObject(serializer()::decode);
@@ -730,7 +730,7 @@
                 return PrepareResult.OK;
             }
         } catch (Exception e) {
-            getLogger().warn("Failure applying {}", commit, e);
+            logger().warn("Failure applying {}", commit, e);
             throw Throwables.propagate(e);
         }
     }
@@ -752,7 +752,7 @@
             this.currentVersion = commit.index();
             return commitTransaction(transactionScope);
         } catch (Exception e) {
-            getLogger().warn("Failure applying {}", commit, e);
+            logger().warn("Failure applying {}", commit, e);
             throw Throwables.propagate(e);
         } finally {
             discardTombstones();
diff --git a/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/AtomixConsistentSetMultimapService.java b/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/AtomixConsistentSetMultimapService.java
index 44317f3..6478eef 100644
--- a/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/AtomixConsistentSetMultimapService.java
+++ b/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/AtomixConsistentSetMultimapService.java
@@ -130,7 +130,7 @@
 
         listeners = new LinkedHashMap<>();
         for (Long sessionId : reader.<Set<Long>>readObject(serializer::decode)) {
-            listeners.put(sessionId, getSessions().getSession(sessionId));
+            listeners.put(sessionId, sessions().getSession(sessionId));
         }
 
         backingMap = reader.readObject(serializer::decode);
diff --git a/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/AtomixDocumentTreeService.java b/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/AtomixDocumentTreeService.java
index b87f784..717f362 100644
--- a/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/AtomixDocumentTreeService.java
+++ b/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/AtomixDocumentTreeService.java
@@ -103,7 +103,7 @@
 
                 @Override
                 public Listener read(Kryo kryo, Input input, Class<Listener> type) {
-                    return new Listener(getSessions().getSession(input.readLong()),
+                    return new Listener(sessions().getSession(input.readLong()),
                             kryo.readObjectOrNull(input, DocumentPath.class));
                 }
             }, Listener.class)
@@ -273,7 +273,7 @@
         } catch (NoSuchDocumentPathException e) {
             result = DocumentTreeResult.invalidPath();
         } catch (Exception e) {
-            getLogger().error("Failed to apply {} to state machine", commit.value(), e);
+            logger().error("Failed to apply {} to state machine", commit.value(), e);
             throw Throwables.propagate(e);
         }
         return result;
@@ -365,7 +365,7 @@
                 return PrepareResult.OK;
             }
         } catch (Exception e) {
-            getLogger().warn("Failure applying {}", commit, e);
+            logger().warn("Failure applying {}", commit, e);
             throw Throwables.propagate(e);
         }
     }
@@ -409,7 +409,7 @@
             try {
                 previousValue = docTree.removeNode(path);
             } catch (NoSuchDocumentPathException e) {
-                getLogger().info("Value is being inserted first time");
+                logger().info("Value is being inserted first time");
             }
 
             if (record.value() != null) {
@@ -454,7 +454,7 @@
         try {
             return commitTransaction(transactionScope);
         } catch (Exception e) {
-            getLogger().warn("Failure applying {}", commit, e);
+            logger().warn("Failure applying {}", commit, e);
             throw Throwables.propagate(e);
         }
     }
diff --git a/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/AtomixLeaderElectorService.java b/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/AtomixLeaderElectorService.java
index f8cfea9..b259cd1 100644
--- a/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/AtomixLeaderElectorService.java
+++ b/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/AtomixLeaderElectorService.java
@@ -88,18 +88,18 @@
         writer.writeObject(Sets.newHashSet(listeners.keySet()), SERIALIZER::encode);
         writer.writeObject(termCounters, SERIALIZER::encode);
         writer.writeObject(elections, SERIALIZER::encode);
-        getLogger().debug("Took state machine snapshot");
+        logger().debug("Took state machine snapshot");
     }
 
     @Override
     public void install(SnapshotReader reader) {
         listeners = new LinkedHashMap<>();
         for (Long sessionId : reader.<Set<Long>>readObject(SERIALIZER::decode)) {
-            listeners.put(sessionId, getSessions().getSession(sessionId));
+            listeners.put(sessionId, sessions().getSession(sessionId));
         }
         termCounters = reader.readObject(SERIALIZER::decode);
         elections = reader.readObject(SERIALIZER::decode);
-        getLogger().debug("Reinstated state machine from snapshot");
+        logger().debug("Reinstated state machine from snapshot");
     }
 
     @Override
@@ -176,7 +176,7 @@
             }
             return newLeadership;
         } catch (Exception e) {
-            getLogger().error("State machine operation failed", e);
+            logger().error("State machine operation failed", e);
             throw Throwables.propagate(e);
         }
     }
@@ -196,7 +196,7 @@
                 notifyLeadershipChange(oldLeadership, newLeadership);
             }
         } catch (Exception e) {
-            getLogger().error("State machine operation failed", e);
+            logger().error("State machine operation failed", e);
             throw Throwables.propagate(e);
         }
     }
@@ -221,7 +221,7 @@
                     electionState.leader() != null &&
                     commit.value().nodeId().equals(electionState.leader().nodeId()));
         } catch (Exception e) {
-            getLogger().error("State machine operation failed", e);
+            logger().error("State machine operation failed", e);
             throw Throwables.propagate(e);
         }
     }
@@ -246,7 +246,7 @@
             }
             return true;
         } catch (Exception e) {
-            getLogger().error("State machine operation failed", e);
+            logger().error("State machine operation failed", e);
             throw Throwables.propagate(e);
         }
     }
@@ -270,7 +270,7 @@
             });
             notifyLeadershipChanges(changes);
         } catch (Exception e) {
-            getLogger().error("State machine operation failed", e);
+            logger().error("State machine operation failed", e);
             throw Throwables.propagate(e);
         }
     }
@@ -285,7 +285,7 @@
         try {
             return leadership(topic);
         } catch (Exception e) {
-            getLogger().error("State machine operation failed", e);
+            logger().error("State machine operation failed", e);
             throw Throwables.propagate(e);
         }
     }
@@ -303,7 +303,7 @@
                 return leader != null && leader.nodeId().equals(nodeId);
             }).keySet());
         } catch (Exception e) {
-            getLogger().error("State machine operation failed", e);
+            logger().error("State machine operation failed", e);
             throw Throwables.propagate(e);
         }
     }
@@ -319,7 +319,7 @@
             result.putAll(Maps.transformEntries(elections, (k, v) -> leadership(k)));
             return result;
         } catch (Exception e) {
-            getLogger().error("State machine operation failed", e);
+            logger().error("State machine operation failed", e);
             throw Throwables.propagate(e);
         }
     }
diff --git a/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/AtomixWorkQueueService.java b/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/AtomixWorkQueueService.java
index 08a894b..b1d6698 100644
--- a/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/AtomixWorkQueueService.java
+++ b/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/AtomixWorkQueueService.java
@@ -90,7 +90,7 @@
     public void install(SnapshotReader reader) {
         registeredWorkers = Maps.newHashMap();
         for (Long sessionId : reader.<Set<Long>>readObject(SERIALIZER::decode)) {
-            registeredWorkers.put(sessionId, getSessions().getSession(sessionId));
+            registeredWorkers.put(sessionId, sessions().getSession(sessionId));
         }
         assignments = reader.readObject(SERIALIZER::decode);
         unassignedTasks = reader.readObject(SERIALIZER::decode);
@@ -168,7 +168,7 @@
                     })
                     .collect(Collectors.toCollection(ArrayList::new));
         } catch (Exception e) {
-            getLogger().warn("State machine update failed", e);
+            logger().warn("State machine update failed", e);
             throw Throwables.propagate(e);
         }
     }
@@ -185,7 +185,7 @@
                 }
             });
         } catch (Exception e) {
-            getLogger().warn("State machine update failed", e);
+            logger().warn("State machine update failed", e);
             throw Throwables.propagate(e);
         }
     }
