diff --git a/core/api/src/main/java/org/onosproject/net/flowobjective/DefaultNextTreatment.java b/core/api/src/main/java/org/onosproject/net/flowobjective/DefaultNextTreatment.java
index 4387b56..554be28 100644
--- a/core/api/src/main/java/org/onosproject/net/flowobjective/DefaultNextTreatment.java
+++ b/core/api/src/main/java/org/onosproject/net/flowobjective/DefaultNextTreatment.java
@@ -22,13 +22,15 @@
 import static com.google.common.base.MoreObjects.toStringHelper;
 
 /**
- * Represents a next action specified by traffic treatment.
+ * Represents a next action specified by traffic treatment and weight.
  */
 public final class DefaultNextTreatment implements NextTreatment {
     private final TrafficTreatment treatment;
+    private final int weight;
 
-    private DefaultNextTreatment(TrafficTreatment treatment) {
+    private DefaultNextTreatment(TrafficTreatment treatment, int weight) {
         this.treatment = treatment;
+        this.weight = weight;
     }
 
     /**
@@ -47,7 +49,23 @@
      * @return an instance of DefaultNextTreatment
      */
     public static DefaultNextTreatment of(TrafficTreatment treatment) {
-        return new DefaultNextTreatment(treatment);
+        return new DefaultNextTreatment(treatment, DEFAULT_WEIGHT);
+    }
+
+    /**
+     * Returns an instance of DefaultNextTreatment with given traffic treatment and weight.
+     *
+     * @param treatment traffic treatment
+     * @param weight the weight of next treatment
+     * @return an instance of DefaultNextTreatment
+     */
+    public static DefaultNextTreatment of(TrafficTreatment treatment, int weight) {
+        return new DefaultNextTreatment(treatment, weight);
+    }
+
+    @Override
+    public int weight() {
+        return weight;
     }
 
     @Override
@@ -57,7 +75,7 @@
 
     @Override
     public int hashCode() {
-        return Objects.hash(treatment);
+        return Objects.hash(treatment, weight);
     }
 
     @Override
@@ -67,7 +85,7 @@
         }
         if (obj instanceof DefaultNextTreatment) {
             final DefaultNextTreatment other = (DefaultNextTreatment) obj;
-            return Objects.equals(this.treatment, other.treatment);
+            return Objects.equals(this.treatment, other.treatment) && Objects.equals(this.weight, other.weight);
         }
         return false;
     }
@@ -76,6 +94,7 @@
     public String toString() {
         return toStringHelper(this)
                 .add("treatment", treatment)
+                .add("weight", weight)
                 .toString();
     }
 }
diff --git a/core/api/src/main/java/org/onosproject/net/flowobjective/IdNextTreatment.java b/core/api/src/main/java/org/onosproject/net/flowobjective/IdNextTreatment.java
index 98a8928..8b47361 100644
--- a/core/api/src/main/java/org/onosproject/net/flowobjective/IdNextTreatment.java
+++ b/core/api/src/main/java/org/onosproject/net/flowobjective/IdNextTreatment.java
@@ -24,14 +24,17 @@
  */
 public final class IdNextTreatment implements NextTreatment {
     private final int nextId;
+    private final int weight;
 
     /**
      * Constructs IdNextTreatment.
      *
      * @param nextId next id
+     * @param weight weight
      */
-    private IdNextTreatment(int nextId) {
+    private IdNextTreatment(int nextId, int weight) {
         this.nextId = nextId;
+        this.weight = weight;
     }
 
     /**
@@ -50,7 +53,22 @@
      * @return an instance of IdNextTreatment
      */
     public static IdNextTreatment of(int nextId) {
-        return new IdNextTreatment(nextId);
+        return new IdNextTreatment(nextId, DEFAULT_WEIGHT);
+    }
+    /**
+     * Returns an instance of IdNextTreatment with given next id and weight.
+     *
+     * @param nextId next id
+     * @param weight weight
+     * @return an instance of IdNextTreatment
+     */
+    public static IdNextTreatment of(int nextId, int weight) {
+        return new IdNextTreatment(nextId, weight);
+    }
+
+    @Override
+    public int weight() {
+        return weight;
     }
 
     @Override
@@ -59,7 +77,7 @@
     }
     @Override
     public int hashCode() {
-        return Objects.hash(nextId);
+        return Objects.hash(nextId, weight);
     }
 
     @Override
@@ -69,7 +87,7 @@
         }
         if (obj instanceof IdNextTreatment) {
             final IdNextTreatment other = (IdNextTreatment) obj;
-            return this.nextId == other.nextId;
+            return this.nextId == other.nextId && this.weight == other.weight;
         }
         return false;
     }
@@ -78,6 +96,7 @@
     public String toString() {
         return toStringHelper(this)
                 .add("nextId", nextId)
+                .add("weight", weight)
                 .toString();
     }
 }
diff --git a/core/api/src/main/java/org/onosproject/net/flowobjective/NextTreatment.java b/core/api/src/main/java/org/onosproject/net/flowobjective/NextTreatment.java
index af849a2..cdeff98 100644
--- a/core/api/src/main/java/org/onosproject/net/flowobjective/NextTreatment.java
+++ b/core/api/src/main/java/org/onosproject/net/flowobjective/NextTreatment.java
@@ -19,6 +19,7 @@
  * Represents next action in the NextObjective.
  */
 public interface NextTreatment {
+    int DEFAULT_WEIGHT = 1;
     /**
      * Types of next action.
      */
@@ -40,4 +41,10 @@
      * @return type
      */
     Type type();
+    /**
+     * weight of this next action.
+     *
+     * @return weight
+     */
+    int weight();
 }
