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..36656c4 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.toList());
+    }
+
+    @Override
+    public Collection<NextTreatment> nextTreatments() {
         return treatments;
     }
 
@@ -133,7 +142,7 @@
                 .add("type", type())
                 .add("op", op())
                 .add("priority", priority())
-                .add("next", next())
+                .add("nextTreatments", 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..19585f7 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 in 1.14.2, 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 in 1.14.2, replaced by {@link #addTreatment(NextTreatment)}
          */
+        @Deprecated
         Builder addTreatment(TrafficTreatment treatment);
 
         /**
+         * Adds a next treatment 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();
+}
