diff --git a/core/common/src/main/java/org/onosproject/codec/impl/NextObjectiveCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/NextObjectiveCodec.java
index 3cb5178..1dd3399 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/NextObjectiveCodec.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/NextObjectiveCodec.java
@@ -25,6 +25,8 @@
 import org.onosproject.net.flow.TrafficTreatment;
 import org.onosproject.net.flowobjective.DefaultNextObjective;
 import org.onosproject.net.flowobjective.NextObjective;
+import org.onosproject.net.flowobjective.NextTreatment;
+import org.onosproject.net.flowobjective.DefaultNextTreatment;
 import org.slf4j.Logger;
 
 import java.util.stream.IntStream;
@@ -47,6 +49,7 @@
     private static final String OPERATION = "operation";
     private static final String TREATMENTS = "treatments";
     private static final String META = "meta";
+    private static final String WEIGHT = "weight";
 
     // messages to be printed out
     private static final String MISSING_MEMBER_MESSAGE =
@@ -79,9 +82,13 @@
 
         // encode treatments
         ArrayNode treatments = context.mapper().createArrayNode();
-        nextObjective.next().forEach(t -> {
-            ObjectNode treatmentJson = trafficTreatmentCodec.encode(t, context);
-            treatments.add(treatmentJson);
+        nextObjective.nextTreatments().forEach(nt -> {
+            if (nt.type().equals(NextTreatment.Type.TREATMENT)) {
+                TrafficTreatment tt = ((DefaultNextTreatment) nt).treatment();
+                ObjectNode treatmentJson = trafficTreatmentCodec.encode(tt, context);
+                treatmentJson.put(WEIGHT, nt.weight());
+                treatments.add(treatmentJson);
+            }
         });
         result.set(TREATMENTS, treatments);
 
@@ -148,7 +155,10 @@
         if (treatmentsJson != null) {
             IntStream.range(0, treatmentsJson.size()).forEach(i -> {
                 ObjectNode treatmentJson = get(treatmentsJson, i);
-                builder.addTreatment(trafficTreatmentCodec.decode(treatmentJson, context));
+                JsonNode weightJson = treatmentJson.get(WEIGHT);
+                int weight = (weightJson != null) ? weightJson.asInt() : NextTreatment.DEFAULT_WEIGHT;
+                builder.addTreatment(DefaultNextTreatment.of(
+                        trafficTreatmentCodec.decode(treatmentJson, context), weight));
             });
         }
 
diff --git a/core/common/src/test/java/org/onosproject/codec/impl/NextObjectiveCodecTest.java b/core/common/src/test/java/org/onosproject/codec/impl/NextObjectiveCodecTest.java
index 355209f..fb4f1e8 100644
--- a/core/common/src/test/java/org/onosproject/codec/impl/NextObjectiveCodecTest.java
+++ b/core/common/src/test/java/org/onosproject/codec/impl/NextObjectiveCodecTest.java
@@ -26,7 +26,9 @@
 import org.onosproject.net.flow.DefaultTrafficTreatment;
 import org.onosproject.net.flow.TrafficTreatment;
 import org.onosproject.net.flowobjective.DefaultNextObjective;
+import org.onosproject.net.flowobjective.DefaultNextTreatment;
 import org.onosproject.net.flowobjective.NextObjective;
+import org.onosproject.net.flowobjective.NextTreatment;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -70,6 +72,7 @@
     public void testNextObjectiveEncode() {
 
         TrafficTreatment treatment = DefaultTrafficTreatment.builder().build();
+        NextTreatment nextTreatment = DefaultNextTreatment.of(treatment, 5);
 
         NextObjective nextObj = DefaultNextObjective.builder()
                 .makePermanent()
@@ -77,7 +80,7 @@
                 .fromApp(APP_ID)
                 .withPriority(60)
                 .withId(5)
-                .addTreatment(treatment)
+                .addTreatment(nextTreatment)
                 .add();
 
         ObjectNode nextObjJson = nextObjectiveCodec.encode(nextObj, context);
diff --git a/core/common/src/test/java/org/onosproject/codec/impl/NextObjectiveJsonMatcher.java b/core/common/src/test/java/org/onosproject/codec/impl/NextObjectiveJsonMatcher.java
index bb86771..cdf4da9 100644
--- a/core/common/src/test/java/org/onosproject/codec/impl/NextObjectiveJsonMatcher.java
+++ b/core/common/src/test/java/org/onosproject/codec/impl/NextObjectiveJsonMatcher.java
@@ -16,9 +16,13 @@
 package org.onosproject.codec.impl;
 
 import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.hamcrest.Description;
 import org.hamcrest.TypeSafeDiagnosingMatcher;
 import org.onosproject.net.flowobjective.NextObjective;
+import org.onosproject.net.flowobjective.NextTreatment;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * Hamcrest matcher for nextObjective.
@@ -58,6 +62,22 @@
             return false;
         }
 
+        // check the weight
+        boolean result = true;
+        List<NextTreatment> nt = new ArrayList(nextObjective.nextTreatments());
+        for (int i = 0; i < jsonTreatments.size(); i++) {
+            ObjectNode jsonTreatment = jsonTreatments.path(i).isObject() &&
+                    !jsonTreatments.path(i).isNull() ? (ObjectNode) jsonTreatments.path(i) : null;
+            int jsonWeight = jsonTreatment.get("weight").asInt();
+            if (jsonWeight != nt.get(i).weight()) {
+                description.appendText("weight of NextTreatment with index " + i + " was " + jsonWeight);
+                result = false;
+            }
+        }
+        if (!result) {
+            return false;
+        }
+
         // TODO: need to check the content of treatment collection
 
         // TODO: need to check the content of selector instance
