diff --git a/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/AtomixLeaderElectorCommands.java b/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/AtomixLeaderElectorCommands.java
index 1bd06a1..87e6bcc 100644
--- a/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/AtomixLeaderElectorCommands.java
+++ b/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/AtomixLeaderElectorCommands.java
@@ -48,7 +48,6 @@
      */
     @SuppressWarnings("serial")
     public abstract static class ElectionQuery<V> implements Query<V>, CatalystSerializable {
-
         @Override
         public void writeObject(BufferOutput<?> buffer, Serializer serializer) {
         }
@@ -111,6 +110,10 @@
      */
     @SuppressWarnings("serial")
     public static class Listen extends ElectionCommand<Void> {
+        @Override
+        public CompactionMode compaction() {
+            return CompactionMode.QUORUM;
+        }
     }
 
     /**
@@ -118,10 +121,9 @@
      */
     @SuppressWarnings("serial")
     public static class Unlisten extends ElectionCommand<Void> {
-
         @Override
         public CompactionMode compaction() {
-            return CompactionMode.QUORUM;
+            return CompactionMode.TOMBSTONE;
         }
     }
 
@@ -231,6 +233,11 @@
         }
 
         @Override
+        public CompactionMode compaction() {
+            return CompactionMode.SNAPSHOT;
+        }
+
+        @Override
         public String toString() {
             return MoreObjects.toStringHelper(getClass())
                     .add("topic", topic)
@@ -275,6 +282,11 @@
         }
 
         @Override
+        public CompactionMode compaction() {
+            return CompactionMode.SNAPSHOT;
+        }
+
+        @Override
         public String toString() {
             return MoreObjects.toStringHelper(getClass())
                     .add("topic", topic)
@@ -329,6 +341,11 @@
         }
 
         @Override
+        public CompactionMode compaction() {
+            return CompactionMode.SNAPSHOT;
+        }
+
+        @Override
         public String toString() {
             return MoreObjects.toStringHelper(getClass())
                     .add("topic", topic)
@@ -401,6 +418,11 @@
         }
 
         @Override
+        public CompactionMode compaction() {
+            return CompactionMode.SNAPSHOT;
+        }
+
+        @Override
         public String toString() {
             return MoreObjects.toStringHelper(getClass())
                     .add("nodeId", nodeId)
