diff --git a/core/api/src/main/java/org/onosproject/net/flowobjective/DefaultNextObjective.java b/core/api/src/main/java/org/onosproject/net/flowobjective/DefaultNextObjective.java
index 8c466c9..a80885f 100644
--- a/core/api/src/main/java/org/onosproject/net/flowobjective/DefaultNextObjective.java
+++ b/core/api/src/main/java/org/onosproject/net/flowobjective/DefaultNextObjective.java
@@ -25,6 +25,7 @@
 import java.util.List;
 import java.util.Objects;
 import java.util.Optional;
+import java.util.stream.Collectors;
 
 import static com.google.common.base.MoreObjects.toStringHelper;
 import static com.google.common.base.Preconditions.checkArgument;
@@ -36,7 +37,7 @@
 @Beta
 public final class DefaultNextObjective implements NextObjective {
 
-    private final List<TrafficTreatment> treatments;
+    private final List<NextTreatment> treatments;
     private final ApplicationId appId;
     private final Type type;
     private final Integer id;
@@ -56,6 +57,14 @@
 
     @Override
     public Collection<TrafficTreatment> next() {
+        return treatments.stream()
+                .filter(t -> t.type() == NextTreatment.Type.TREATMENT)
+                .map(t -> ((DefaultNextTreatment) t).treatment())
+                .collect(Collectors.toSet());
+    }
+
+    @Override
+    public Collection<NextTreatment> nextTreatments() {
         return treatments;
     }
 
@@ -133,7 +142,7 @@
                 .add("type", type())
                 .add("op", op())
                 .add("priority", priority())
-                .add("next", next())
+                .add("nextTreatment", nextTreatments())
                 .add("meta", meta())
                 .add("appId", appId())
                 .add("permanent", permanent())
@@ -160,12 +169,12 @@
         private ApplicationId appId;
         private Type type;
         private Integer id;
-        private List<TrafficTreatment> treatments;
+        private List<NextTreatment> treatments;
         private Operation op;
         private ObjectiveContext context;
         private TrafficSelector meta;
 
-        private final ImmutableList.Builder<TrafficTreatment> listBuilder
+        private final ImmutableList.Builder<NextTreatment> listBuilder
                 = ImmutableList.builder();
 
         // Creates an empty builder
@@ -176,8 +185,8 @@
         private Builder(NextObjective objective) {
             this.type = objective.type();
             this.id = objective.id();
-            this.treatments = ImmutableList.copyOf(objective.next());
-            this.listBuilder.addAll(objective.next());
+            this.treatments = ImmutableList.copyOf(objective.nextTreatments());
+            this.listBuilder.addAll(objective.nextTreatments());
             this.meta = objective.meta();
             this.appId = objective.appId();
             this.op = objective.op();
@@ -197,7 +206,13 @@
 
         @Override
         public Builder addTreatment(TrafficTreatment treatment) {
-            listBuilder.add(treatment);
+            listBuilder.add(DefaultNextTreatment.of(treatment));
+            return this;
+        }
+
+        @Override
+        public Builder addTreatment(NextTreatment nextTreatment) {
+            listBuilder.add(nextTreatment);
             return this;
         }
 
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
new file mode 100644
index 0000000..4387b56
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/flowobjective/DefaultNextTreatment.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+ *
+ * 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.net.flowobjective;
+
+import org.onosproject.net.flow.TrafficTreatment;
+
+import java.util.Objects;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+/**
+ * Represents a next action specified by traffic treatment.
+ */
+public final class DefaultNextTreatment implements NextTreatment {
+    private final TrafficTreatment treatment;
+
+    private DefaultNextTreatment(TrafficTreatment treatment) {
+        this.treatment = treatment;
+    }
+
+    /**
+     * Returns traffic treatment.
+     *
+     * @return traffic treatment.
+     */
+    public TrafficTreatment treatment() {
+        return treatment;
+    }
+
+    /**
+     * Returns an instance of DefaultNextTreatment with given traffic treatment.
+     *
+     * @param treatment traffic treatment
+     * @return an instance of DefaultNextTreatment
+     */
+    public static DefaultNextTreatment of(TrafficTreatment treatment) {
+        return new DefaultNextTreatment(treatment);
+    }
+
+    @Override
+    public Type type() {
+        return Type.TREATMENT;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(treatment);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj instanceof DefaultNextTreatment) {
+            final DefaultNextTreatment other = (DefaultNextTreatment) obj;
+            return Objects.equals(this.treatment, other.treatment);
+        }
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        return toStringHelper(this)
+                .add("treatment", treatment)
+                .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
new file mode 100644
index 0000000..98a8928
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/flowobjective/IdNextTreatment.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+ *
+ * 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.net.flowobjective;
+
+import java.util.Objects;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+/**
+ * Represents a next action specified by next id.
+ */
+public final class IdNextTreatment implements NextTreatment {
+    private final int nextId;
+
+    /**
+     * Constructs IdNextTreatment.
+     *
+     * @param nextId next id
+     */
+    private IdNextTreatment(int nextId) {
+        this.nextId = nextId;
+    }
+
+    /**
+     * Returns next id.
+     *
+     * @return next id
+     */
+    public int nextId() {
+        return nextId;
+    }
+
+    /**
+     * Returns an instance of IdNextTreatment with given next id.
+     *
+     * @param nextId next id
+     * @return an instance of IdNextTreatment
+     */
+    public static IdNextTreatment of(int nextId) {
+        return new IdNextTreatment(nextId);
+    }
+
+    @Override
+    public Type type() {
+        return Type.ID;
+    }
+    @Override
+    public int hashCode() {
+        return Objects.hash(nextId);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj instanceof IdNextTreatment) {
+            final IdNextTreatment other = (IdNextTreatment) obj;
+            return this.nextId == other.nextId;
+        }
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        return toStringHelper(this)
+                .add("nextId", nextId)
+                .toString();
+    }
+}
diff --git a/core/api/src/main/java/org/onosproject/net/flowobjective/NextObjective.java b/core/api/src/main/java/org/onosproject/net/flowobjective/NextObjective.java
index 4cc8478..9c8d606 100644
--- a/core/api/src/main/java/org/onosproject/net/flowobjective/NextObjective.java
+++ b/core/api/src/main/java/org/onosproject/net/flowobjective/NextObjective.java
@@ -73,10 +73,19 @@
      * The collection of treatments that need to be applied to a set of traffic.
      *
      * @return a collection of traffic treatments
+     * @deprecated replaced by {@link #nextTreatments}
      */
+    @Deprecated
     Collection<TrafficTreatment> next();
 
     /**
+     * The collection of next treatments that need to be applied to a set of traffic.
+     *
+     * @return a collection of next treatments
+     */
+    Collection<NextTreatment> nextTreatments();
+
+    /**
      * The type of operation that will be applied to the traffic using the collection
      * of treatments.
      *
@@ -128,10 +137,20 @@
          *
          * @param treatment a traffic treatment
          * @return a next step builder
+         * @deprecated replaced by {@link #addTreatment(NextTreatment)}
          */
+        @Deprecated
         Builder addTreatment(TrafficTreatment treatment);
 
         /**
+         * Adds a next ID to this next step.
+         *
+         * @param nextTreatment a next treatment
+         * @return a next step builder
+         */
+        Builder addTreatment(NextTreatment nextTreatment);
+
+        /**
          * Specifies the application which applied the filter.
          *
          * @param appId an application id
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
new file mode 100644
index 0000000..af849a2
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/flowobjective/NextTreatment.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+ *
+ * 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.net.flowobjective;
+
+/**
+ * Represents next action in the NextObjective.
+ */
+public interface NextTreatment {
+    /**
+     * Types of next action.
+     */
+    enum Type {
+        /**
+         * The next action is specified by a TrafficTreatment.
+         */
+        TREATMENT,
+
+        /**
+         * The next action is specified by an Integer next id.
+         */
+        ID
+    }
+
+    /**
+     * Type of this next action.
+     *
+     * @return type
+     */
+    Type type();
+}
