diff --git a/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/CatalystSerializers.java b/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/CatalystSerializers.java
index 2cecc0f..53f57f1 100644
--- a/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/CatalystSerializers.java
+++ b/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/CatalystSerializers.java
@@ -15,29 +15,19 @@
  */
 package org.onosproject.store.primitives.impl;
 
-import io.atomix.catalyst.serializer.CatalystSerializable;
+import java.util.Arrays;
+
 import io.atomix.catalyst.serializer.Serializer;
 import io.atomix.catalyst.serializer.TypeSerializerFactory;
 import io.atomix.copycat.client.Query;
-import io.atomix.manager.state.GetResource;
-import io.atomix.manager.state.GetResourceKeys;
-import io.atomix.resource.ResourceQuery;
-import io.atomix.variables.state.ValueCommands;
-
-import java.io.IOException;
-import java.net.URL;
-import java.util.Arrays;
-import java.util.Enumeration;
-import java.util.Scanner;
 
 import org.onlab.util.Match;
+import org.onosproject.cluster.Leader;
+import org.onosproject.cluster.Leadership;
 import org.onosproject.cluster.NodeId;
 import org.onosproject.event.Change;
 import org.onosproject.store.primitives.MapUpdate;
 import org.onosproject.store.primitives.TransactionId;
-import org.onosproject.store.primitives.resources.impl.AtomixConsistentMapCommands;
-import org.onosproject.store.primitives.resources.impl.AtomixConsistentMapState;
-import org.onosproject.store.primitives.resources.impl.AtomixLeaderElectorCommands;
 import org.onosproject.store.primitives.resources.impl.CommitResult;
 import org.onosproject.store.primitives.resources.impl.MapEntryUpdateResult;
 import org.onosproject.store.primitives.resources.impl.PrepareResult;
@@ -47,7 +37,6 @@
 import org.onosproject.store.service.MapTransaction;
 import org.onosproject.store.service.Versioned;
 
-import com.google.common.base.Throwables;
 import com.google.common.collect.Maps;
 
 /**
@@ -65,113 +54,31 @@
                         org.onosproject.store.service.Serializer.using(Arrays.asList((KryoNamespaces.API)),
                                 MapEntryUpdateResult.class,
                                 MapEntryUpdateResult.Status.class,
-                                MapUpdate.class,
-                                MapUpdate.Type.class,
-                                MapTransaction.class,
                                 Transaction.State.class,
-                                TransactionId.class,
                                 PrepareResult.class,
                                 CommitResult.class,
                                 RollbackResult.class,
-                                AtomixConsistentMapCommands.Get.class,
-                                AtomixConsistentMapCommands.ContainsKey.class,
-                                AtomixConsistentMapCommands.ContainsValue.class,
-                                AtomixConsistentMapCommands.Size.class,
-                                AtomixConsistentMapCommands.IsEmpty.class,
-                                AtomixConsistentMapCommands.KeySet.class,
-                                AtomixConsistentMapCommands.EntrySet.class,
-                                AtomixConsistentMapCommands.Values.class,
-                                AtomixConsistentMapCommands.UpdateAndGet.class,
-                                AtomixConsistentMapCommands.TransactionPrepare.class,
-                                AtomixConsistentMapCommands.TransactionCommit.class,
-                                AtomixConsistentMapCommands.TransactionRollback.class,
-                                AtomixLeaderElectorCommands.GetLeadership.class,
-                                AtomixLeaderElectorCommands.GetAllLeaderships.class,
-                                AtomixLeaderElectorCommands.GetElectedTopics.class,
-                                AtomixLeaderElectorCommands.Run.class,
-                                AtomixLeaderElectorCommands.Withdraw.class,
-                                AtomixLeaderElectorCommands.Anoint.class,
-                                GetResource.class,
-                                GetResourceKeys.class,
-                                ResourceQuery.class,
-                                ValueCommands.Get.class,
-                                ValueCommands.Set.class,
                                 Query.ConsistencyLevel.class));
         // ONOS classes
         serializer.register(Change.class, factory);
+        serializer.register(Leader.class, factory);
+        serializer.register(Leadership.class, factory);
         serializer.register(NodeId.class, factory);
         serializer.register(Match.class, factory);
         serializer.register(MapEntryUpdateResult.class, factory);
         serializer.register(MapEntryUpdateResult.Status.class, factory);
-        serializer.register(MapTransaction.class, factory);
         serializer.register(Transaction.State.class, factory);
         serializer.register(PrepareResult.class, factory);
         serializer.register(CommitResult.class, factory);
         serializer.register(RollbackResult.class, factory);
         serializer.register(TransactionId.class, factory);
         serializer.register(MapUpdate.class, factory);
+        serializer.register(MapUpdate.Type.class, factory);
+        serializer.register(MapTransaction.class, factory);
         serializer.register(Versioned.class, factory);
         serializer.register(MapEvent.class, factory);
         serializer.register(Maps.immutableEntry("a", "b").getClass(), factory);
-        serializer.register(AtomixConsistentMapState.class, factory);
 
-        serializer.register(ResourceQuery.class, factory);
-        serializer.register(GetResource.class, factory);
-        serializer.register(GetResourceKeys.class, factory);
-        serializer.register(ValueCommands.Get.class, factory);
-        serializer.register(ValueCommands.Set.class, factory);
-
-        // ConsistentMap
-        serializer.register(AtomixConsistentMapCommands.UpdateAndGet.class, factory);
-        serializer.register(AtomixConsistentMapCommands.Clear.class);
-        serializer.register(AtomixConsistentMapCommands.Listen.class);
-        serializer.register(AtomixConsistentMapCommands.Unlisten.class);
-        serializer.register(AtomixConsistentMapCommands.Get.class);
-        serializer.register(AtomixConsistentMapCommands.ContainsKey.class);
-        serializer.register(AtomixConsistentMapCommands.ContainsValue.class);
-        serializer.register(AtomixConsistentMapCommands.EntrySet.class);
-        serializer.register(AtomixConsistentMapCommands.IsEmpty.class);
-        serializer.register(AtomixConsistentMapCommands.KeySet.class);
-        serializer.register(AtomixConsistentMapCommands.Size.class);
-        serializer.register(AtomixConsistentMapCommands.Values.class);
-        serializer.register(AtomixConsistentMapCommands.TransactionPrepare.class);
-        serializer.register(AtomixConsistentMapCommands.TransactionCommit.class);
-        serializer.register(AtomixConsistentMapCommands.TransactionRollback.class);
-        // LeaderElector
-        serializer.register(AtomixLeaderElectorCommands.Run.class, factory);
-        serializer.register(AtomixLeaderElectorCommands.Withdraw.class, factory);
-        serializer.register(AtomixLeaderElectorCommands.Anoint.class, factory);
-        serializer.register(AtomixLeaderElectorCommands.GetElectedTopics.class, factory);
-        serializer.register(AtomixLeaderElectorCommands.GetElectedTopics.class, factory);
-        serializer.register(AtomixLeaderElectorCommands.GetLeadership.class, factory);
-        serializer.register(AtomixLeaderElectorCommands.GetAllLeaderships.class, factory);
-        serializer.register(AtomixLeaderElectorCommands.Listen.class);
-        serializer.register(AtomixLeaderElectorCommands.Unlisten.class);
-        // Atomix types
-        try {
-            ClassLoader cl = CatalystSerializable.class.getClassLoader();
-            Enumeration<URL> urls = cl.getResources(
-                    String.format("META-INF/services/%s", CatalystSerializable.class.getName()));
-            while (urls.hasMoreElements()) {
-                URL url = urls.nextElement();
-                try (Scanner scanner = new Scanner(url.openStream(), "UTF-8")) {
-                    scanner.useDelimiter("\n").forEachRemaining(line -> {
-                        if (!line.trim().startsWith("#")) {
-                            line = line.trim();
-                            if (line.length() > 0) {
-                                try {
-                                    serializer.register(cl.loadClass(line));
-                                } catch (ClassNotFoundException e) {
-                                    Throwables.propagate(e);
-                                }
-                            }
-                        }
-                    });
-                }
-            }
-        } catch (IOException e) {
-            Throwables.propagate(e);
-        }
         return serializer;
     }
 }
