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 bd58050..8010659 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
@@ -23,6 +23,7 @@
 
 import java.util.Collection;
 import java.util.List;
+import java.util.Objects;
 import java.util.Optional;
 
 import static com.google.common.base.Preconditions.checkArgument;
@@ -102,6 +103,28 @@
         return meta;
     }
 
+    @Override
+    public int hashCode() {
+        return Objects.hash(treatments, appId, type, id, op, meta);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj instanceof DefaultNextObjective) {
+            final DefaultNextObjective other = (DefaultNextObjective) obj;
+            return Objects.equals(this.treatments, other.treatments)
+                    && Objects.equals(this.appId, other.appId)
+                    && Objects.equals(this.type, other.type)
+                    && Objects.equals(this.id, other.id)
+                    && Objects.equals(this.op, other.op)
+                    && Objects.equals(this.meta, other.meta);
+        }
+        return false;
+    }
+
     /**
      * Returns a new builder.
      *
@@ -111,6 +134,11 @@
         return new Builder();
     }
 
+    @Override
+    public Builder copy() {
+        return new Builder(this);
+    }
+
     public static final class Builder implements NextObjective.Builder {
 
         private ApplicationId appId;
@@ -124,6 +152,20 @@
         private final ImmutableList.Builder<TrafficTreatment> listBuilder
                 = ImmutableList.builder();
 
+        // Creates an empty builder
+        private Builder() {
+        }
+
+        // Creates a builder set to create a copy of the specified objective.
+        private Builder(NextObjective objective) {
+            this.type = objective.type();
+            this.id = objective.id();
+            this.treatments = ImmutableList.copyOf(objective.next());
+            this.meta = objective.meta();
+            this.appId = objective.appId();
+            this.op = objective.op();
+        }
+
         @Override
         public Builder withId(int nextId) {
             this.id = nextId;
