diff --git a/core/api/src/main/java/org/onosproject/net/mcast/McastStore.java b/core/api/src/main/java/org/onosproject/net/mcast/McastStore.java
index 96b21f6..067f517 100644
--- a/core/api/src/main/java/org/onosproject/net/mcast/McastStore.java
+++ b/core/api/src/main/java/org/onosproject/net/mcast/McastStore.java
@@ -51,7 +51,7 @@
     void storeSink(McastRoute route, ConnectPoint sink, Type operation);
 
     /**
-     * Obtain the source for a multicast route.
+     * Obtains the source for a multicast route.
      *
      * @param route a multicast route
      * @return a connect point
@@ -59,10 +59,17 @@
     ConnectPoint sourceFor(McastRoute route);
 
     /**
-     * Obtain the sinks for a multicast route.
+     * Obtains the sinks for a multicast route.
      *
      * @param route a multicast route
      * @return a set of sinks
      */
     Set<ConnectPoint> sinksFor(McastRoute route);
+
+    /**
+     * Gets the set of all known multicast routes.
+     *
+     * @return set of multicast routes
+     */
+    Set<McastRoute> getRoutes();
 }
diff --git a/core/api/src/main/java/org/onosproject/net/mcast/MulticastRouteService.java b/core/api/src/main/java/org/onosproject/net/mcast/MulticastRouteService.java
index 05bd6cb..64aa842 100644
--- a/core/api/src/main/java/org/onosproject/net/mcast/MulticastRouteService.java
+++ b/core/api/src/main/java/org/onosproject/net/mcast/MulticastRouteService.java
@@ -43,6 +43,13 @@
     void remove(McastRoute route);
 
     /**
+     * Gets all multicast routes in the system.
+     *
+     * @return set of multicast routes
+     */
+    Set<McastRoute> getRoutes();
+
+    /**
      * Adds a source connection to the route from where the
      * data stream is originating.
      *
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/CodecManager.java b/core/common/src/main/java/org/onosproject/codec/impl/CodecManager.java
index 99030ca..cbed1c2 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/CodecManager.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/CodecManager.java
@@ -53,6 +53,7 @@
 import org.onosproject.net.intent.HostToHostIntent;
 import org.onosproject.net.intent.Intent;
 import org.onosproject.net.intent.PointToPointIntent;
+import org.onosproject.net.mcast.McastRoute;
 import org.onosproject.net.meter.Band;
 import org.onosproject.net.meter.Meter;
 import org.onosproject.net.meter.MeterRequest;
@@ -117,6 +118,7 @@
         registerCodec(FilteringObjective.class, new FilteringObjectiveCodec());
         registerCodec(ForwardingObjective.class, new ForwardingObjectiveCodec());
         registerCodec(NextObjective.class, new NextObjectiveCodec());
+        registerCodec(McastRoute.class, new McastRouteCodec());
         log.info("Started");
     }
 
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/McastRouteCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/McastRouteCodec.java
new file mode 100644
index 0000000..58bd95c
--- /dev/null
+++ b/core/common/src/main/java/org/onosproject/codec/impl/McastRouteCodec.java
@@ -0,0 +1,44 @@
+package org.onosproject.codec.impl;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.onlab.packet.IpAddress;
+import org.onosproject.codec.CodecContext;
+import org.onosproject.codec.JsonCodec;
+import org.onosproject.net.mcast.McastRoute;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * Codec to encode and decode a multicast route to and from JSON.
+ */
+public class McastRouteCodec extends JsonCodec<McastRoute> {
+
+    private static final String SOURCE = "source";
+    private static final String GROUP = "group";
+    private static final String TYPE = "type";
+
+    @Override
+    public ObjectNode encode(McastRoute route, CodecContext context) {
+        checkNotNull(route);
+        ObjectNode root = context.mapper().createObjectNode()
+                .put(TYPE, route.type().toString())
+                .put(SOURCE, route.source().toString())
+                .put(GROUP, route.group().toString());
+
+        return root;
+    }
+
+    @Override
+    public McastRoute decode(ObjectNode json, CodecContext context) {
+        if (json == null || !json.isObject()) {
+            return null;
+        }
+
+        IpAddress source = IpAddress.valueOf(json.path(SOURCE).asText());
+        IpAddress group = IpAddress.valueOf(json.path(GROUP).asText());
+
+        McastRoute route = new McastRoute(source, group, McastRoute.Type.STATIC);
+
+        return route;
+    }
+}
diff --git a/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java b/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java
index 13092fe..d5a73c0 100644
--- a/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java
+++ b/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java
@@ -20,6 +20,7 @@
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Maps;
 
+import com.google.common.collect.Sets;
 import org.onlab.packet.ChassisId;
 import org.onlab.packet.EthType;
 import org.onlab.packet.Ip4Address;
@@ -219,6 +220,7 @@
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicLong;
+import java.util.concurrent.atomic.AtomicReference;
 
 public final class KryoNamespaces {
 
@@ -228,6 +230,7 @@
             .register(AtomicBoolean.class)
             .register(AtomicInteger.class)
             .register(AtomicLong.class)
+            .register(AtomicReference.class)
             .register(new ImmutableListSerializer(),
                       ImmutableList.class,
                       ImmutableList.of(1).getClass(),
@@ -245,6 +248,7 @@
             .register(HashMap.class)
             .register(ConcurrentHashMap.class)
             .register(CopyOnWriteArraySet.class)
+            .register(Sets.newConcurrentHashSet().getClass())
             .register(ArrayList.class,
                       LinkedList.class,
                       HashSet.class,
