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 ea2f339..da9b8f1 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
@@ -63,6 +63,7 @@
 import org.onosproject.net.intent.HostToHostIntent;
 import org.onosproject.net.intent.Intent;
 import org.onosproject.net.intent.PointToPointIntent;
+import org.onosproject.net.intent.SinglePointToMultiPointIntent;
 import org.onosproject.net.key.DeviceKey;
 import org.onosproject.net.mcast.McastRoute;
 import org.onosproject.net.meter.Band;
@@ -108,6 +109,7 @@
         registerCodec(HostLocation.class, new HostLocationCodec());
         registerCodec(HostToHostIntent.class, new HostToHostIntentCodec());
         registerCodec(PointToPointIntent.class, new PointToPointIntentCodec());
+        registerCodec(SinglePointToMultiPointIntent.class, new SinglePointToMultiPointIntentCodec());
         registerCodec(Intent.class, new IntentCodec());
         registerCodec(ConnectivityIntent.class, new ConnectivityIntentCodec());
         registerCodec(FlowEntry.class, new FlowEntryCodec());
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/IntentCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/IntentCodec.java
index 448a2e0..a51665b 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/IntentCodec.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/IntentCodec.java
@@ -19,12 +19,12 @@
 import org.onosproject.codec.JsonCodec;
 import org.onosproject.core.CoreService;
 import org.onosproject.net.NetworkResource;
-import org.onosproject.net.intent.HostToHostIntent;
+import org.onosproject.net.intent.PointToPointIntent;
 import org.onosproject.net.intent.Intent;
 import org.onosproject.net.intent.IntentService;
 import org.onosproject.net.intent.IntentState;
-import org.onosproject.net.intent.PointToPointIntent;
-
+import org.onosproject.net.intent.HostToHostIntent;
+import org.onosproject.net.intent.SinglePointToMultiPointIntent;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
@@ -83,6 +83,8 @@
             return context.codec(PointToPointIntent.class).decode(json, context);
         } else if (type.equals(HostToHostIntent.class.getSimpleName())) {
             return context.codec(HostToHostIntent.class).decode(json, context);
+        } else if (type.equals(SinglePointToMultiPointIntent.class.getSimpleName())) {
+            return context.codec(SinglePointToMultiPointIntent.class).decode(json, context);
         }
 
         throw new IllegalArgumentException("Intent type "
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/SinglePointToMultiPointIntentCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/SinglePointToMultiPointIntentCodec.java
new file mode 100644
index 0000000..b3d1a25
--- /dev/null
+++ b/core/common/src/main/java/org/onosproject/codec/impl/SinglePointToMultiPointIntentCodec.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright 2015-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.codec.impl;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import org.onosproject.codec.CodecContext;
+import org.onosproject.codec.JsonCodec;
+import org.onosproject.net.ConnectPoint;
+import org.onosproject.net.intent.ConnectivityIntent;
+import org.onosproject.net.intent.SinglePointToMultiPointIntent;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.onlab.util.Tools.nullIsIllegal;
+
+/**
+ * Single Point to Multi Point intent codec.
+ */
+public class SinglePointToMultiPointIntentCodec extends JsonCodec<SinglePointToMultiPointIntent> {
+    private static final String INGRESS_POINT = "ingressPoint";
+    private static final String EGRESS_POINT = "egressPoint";
+    private static final String CP_POINTS = "connectPoints";
+
+    @Override
+    public ObjectNode encode(SinglePointToMultiPointIntent intent, CodecContext context) {
+        checkNotNull(intent, "Single Point to Multi Point intent cannot be null");
+
+        final JsonCodec<ConnectivityIntent> connectivityIntentCodec =
+                context.codec(ConnectivityIntent.class);
+        final ObjectNode result = connectivityIntentCodec.encode(intent, context);
+
+        final JsonCodec<ConnectPoint> connectPointCodec =
+                context.codec(ConnectPoint.class);
+        final ObjectNode ingress =
+                connectPointCodec.encode(intent.ingressPoint(), context);
+
+        final ObjectNode result2 = context.mapper().createObjectNode();
+        final ArrayNode jsonconnectPoints = result2.putArray(CP_POINTS);
+
+        if (intent.egressPoints() != null) {
+            for (final ConnectPoint cp : intent.egressPoints()) {
+                jsonconnectPoints.add(connectPointCodec.encode(cp, context));
+            }
+            result.set(EGRESS_POINT, jsonconnectPoints);
+        }
+        result.set(INGRESS_POINT, ingress);
+
+        return result;
+    }
+
+    @Override
+    public SinglePointToMultiPointIntent decode(ObjectNode json, CodecContext context) {
+        SinglePointToMultiPointIntent.Builder builder = SinglePointToMultiPointIntent.builder();
+
+        IntentCodec.intentAttributes(json, context, builder);
+        ConnectivityIntentCodec.intentAttributes(json, context, builder);
+
+        ObjectNode ingressJson = nullIsIllegal(get(json, INGRESS_POINT),
+                INGRESS_POINT + IntentCodec.MISSING_MEMBER_MESSAGE);
+        ConnectPoint ingress = context.codec(ConnectPoint.class)
+                .decode(ingressJson, context);
+        builder.ingressPoint(ingress);
+
+        ObjectNode egressJson = nullIsIllegal(get(json, EGRESS_POINT),
+                EGRESS_POINT + IntentCodec.MISSING_MEMBER_MESSAGE);
+        if (egressJson != null) {
+            final JsonCodec<ConnectPoint> connectPointCodec =
+                    context.codec(ConnectPoint.class);
+            JsonNode connectPointsJson = get(json, EGRESS_POINT).get(CP_POINTS);
+
+            Set<ConnectPoint> egressCp = new HashSet<ConnectPoint>();
+            if (connectPointsJson != null) {
+                for (int i = 0; i < connectPointsJson.size(); i++) {
+                    egressCp.add(connectPointCodec.decode(get(connectPointsJson, i),
+                            context));
+                }
+                builder.egressPoints(egressCp);
+            }
+        }
+
+        return builder.build();
+    }
+}
