diff --git a/core/api/src/main/java/org/onosproject/net/flowobjective/DefaultFilteringObjective.java b/core/api/src/main/java/org/onosproject/net/flowobjective/DefaultFilteringObjective.java
index f3d4266..37000af 100644
--- a/core/api/src/main/java/org/onosproject/net/flowobjective/DefaultFilteringObjective.java
+++ b/core/api/src/main/java/org/onosproject/net/flowobjective/DefaultFilteringObjective.java
@@ -18,6 +18,8 @@
 import com.google.common.annotations.Beta;
 import com.google.common.collect.ImmutableList;
 import org.onosproject.core.ApplicationId;
+import org.onosproject.net.AbstractAnnotated;
+import org.onosproject.net.Annotations;
 import org.onosproject.net.flow.TrafficTreatment;
 import org.onosproject.net.flow.criteria.Criteria;
 import org.onosproject.net.flow.criteria.Criterion;
@@ -35,7 +37,8 @@
  * Default implementation of a filtering objective.
  */
 @Beta
-public final class DefaultFilteringObjective implements FilteringObjective {
+public final class DefaultFilteringObjective extends AbstractAnnotated
+        implements FilteringObjective {
 
     private final Type type;
     private final boolean permanent;
@@ -50,6 +53,7 @@
     private final TrafficTreatment meta;
 
     private DefaultFilteringObjective(Builder builder) {
+        super(builder.annotations);
         this.key = builder.key;
         this.type = builder.type;
         this.permanent = builder.permanent;
@@ -160,6 +164,7 @@
                 .add("appId", appId())
                 .add("permanent", permanent())
                 .add("timeout", timeout())
+                .add("annotations", annotations())
                 .toString();
     }
 
@@ -191,6 +196,7 @@
         private Operation op;
         private ObjectiveContext context;
         private TrafficTreatment meta;
+        private Annotations annotations;
 
         // Creates an empty builder
         private Builder() {
@@ -207,6 +213,7 @@
             this.appId = objective.appId();
             this.meta = objective.meta();
             this.op = objective.op();
+            this.annotations = objective.annotations();
         }
 
         @Override
@@ -265,6 +272,12 @@
         }
 
         @Override
+        public Builder withAnnotations(Annotations annotations) {
+            this.annotations = annotations;
+            return this;
+        }
+
+        @Override
         public FilteringObjective add() {
             conditions = listBuilder.build();
             op = Operation.ADD;
diff --git a/core/api/src/main/java/org/onosproject/net/flowobjective/DefaultForwardingObjective.java b/core/api/src/main/java/org/onosproject/net/flowobjective/DefaultForwardingObjective.java
index a44b05b..bea1e96 100644
--- a/core/api/src/main/java/org/onosproject/net/flowobjective/DefaultForwardingObjective.java
+++ b/core/api/src/main/java/org/onosproject/net/flowobjective/DefaultForwardingObjective.java
@@ -18,6 +18,8 @@
 import com.google.common.annotations.Beta;
 
 import org.onosproject.core.ApplicationId;
+import org.onosproject.net.AbstractAnnotated;
+import org.onosproject.net.Annotations;
 import org.onosproject.net.flow.TrafficSelector;
 import org.onosproject.net.flow.TrafficTreatment;
 
@@ -32,7 +34,8 @@
  * Default implementation of a forwarding objective.
  */
 @Beta
-public final class DefaultForwardingObjective implements ForwardingObjective {
+public final class DefaultForwardingObjective extends AbstractAnnotated
+        implements ForwardingObjective {
 
     private final TrafficSelector selector;
     private final Flag flag;
@@ -49,6 +52,7 @@
     private final int id;
 
     private DefaultForwardingObjective(Builder builder) {
+        super(builder.annotations);
         this.selector = builder.selector;
         this.flag = builder.flag;
         this.permanent = builder.permanent;
@@ -169,6 +173,7 @@
                 .add("appId", appId())
                 .add("permanent", permanent())
                 .add("timeout", timeout())
+                .add("annotations", annotations())
                 .toString();
     }
 
@@ -212,6 +217,8 @@
         private Operation op;
         private ObjectiveContext context;
         private TrafficSelector meta;
+        private Annotations annotations;
+
 
         // Creates an empty builder
         private Builder() {
@@ -229,6 +236,7 @@
             this.treatment = objective.treatment();
             this.op = objective.op();
             this.meta = objective.meta();
+            this.annotations = objective.annotations();
         }
 
         @Override
@@ -287,6 +295,12 @@
         }
 
         @Override
+        public Builder withAnnotations(Annotations annotations) {
+            this.annotations = annotations;
+            return this;
+        }
+
+        @Override
         public ForwardingObjective add() {
             checkNotNull(selector, "Must have a selector");
             checkNotNull(flag, "A flag must be set");
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 36656c4..32635cb 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
@@ -18,6 +18,8 @@
 import com.google.common.annotations.Beta;
 import com.google.common.collect.ImmutableList;
 import org.onosproject.core.ApplicationId;
+import org.onosproject.net.AbstractAnnotated;
+import org.onosproject.net.Annotations;
 import org.onosproject.net.flow.TrafficSelector;
 import org.onosproject.net.flow.TrafficTreatment;
 
@@ -35,7 +37,8 @@
  * Default implementation of a next objective.
  */
 @Beta
-public final class DefaultNextObjective implements NextObjective {
+public final class DefaultNextObjective extends AbstractAnnotated
+        implements NextObjective {
 
     private final List<NextTreatment> treatments;
     private final ApplicationId appId;
@@ -46,6 +49,7 @@
     private final TrafficSelector meta;
 
     private DefaultNextObjective(Builder builder) {
+        super(builder.annotations);
         this.treatments = builder.treatments;
         this.appId = builder.appId;
         this.type = builder.type;
@@ -147,6 +151,7 @@
                 .add("appId", appId())
                 .add("permanent", permanent())
                 .add("timeout", timeout())
+                .add("annotations", annotations())
                 .toString();
     }
 
@@ -173,6 +178,7 @@
         private Operation op;
         private ObjectiveContext context;
         private TrafficSelector meta;
+        private Annotations annotations;
 
         private final ImmutableList.Builder<NextTreatment> listBuilder
                 = ImmutableList.builder();
@@ -190,6 +196,7 @@
             this.meta = objective.meta();
             this.appId = objective.appId();
             this.op = objective.op();
+            this.annotations = objective.annotations();
         }
 
         @Override
@@ -261,6 +268,12 @@
         }
 
         @Override
+        public Builder withAnnotations(Annotations annotations) {
+            this.annotations = annotations;
+            return this;
+        }
+
+        @Override
         public NextObjective add() {
             return add(null);
         }
diff --git a/core/api/src/main/java/org/onosproject/net/flowobjective/FilteringObjective.java b/core/api/src/main/java/org/onosproject/net/flowobjective/FilteringObjective.java
index 623de3b..641ba88 100644
--- a/core/api/src/main/java/org/onosproject/net/flowobjective/FilteringObjective.java
+++ b/core/api/src/main/java/org/onosproject/net/flowobjective/FilteringObjective.java
@@ -17,6 +17,7 @@
 
 import com.google.common.annotations.Beta;
 import org.onosproject.core.ApplicationId;
+import org.onosproject.net.Annotations;
 import org.onosproject.net.flow.TrafficTreatment;
 import org.onosproject.net.flow.criteria.Criterion;
 
@@ -169,6 +170,16 @@
         @Override
         public Builder makePermanent();
 
+
+        /**
+         * Adds annotations to the filtering objective.
+         *
+         * @param annotations the annotations for the filtering objective
+         * @return a filtering objective builder
+         */
+         @Override
+         Builder withAnnotations(Annotations annotations);
+
         /**
          * Builds the filtering objective that will be added.
          *
diff --git a/core/api/src/main/java/org/onosproject/net/flowobjective/ForwardingObjective.java b/core/api/src/main/java/org/onosproject/net/flowobjective/ForwardingObjective.java
index a0c81af..0ae5920 100644
--- a/core/api/src/main/java/org/onosproject/net/flowobjective/ForwardingObjective.java
+++ b/core/api/src/main/java/org/onosproject/net/flowobjective/ForwardingObjective.java
@@ -17,6 +17,7 @@
 
 import com.google.common.annotations.Beta;
 import org.onosproject.core.ApplicationId;
+import org.onosproject.net.Annotations;
 import org.onosproject.net.flow.TrafficSelector;
 import org.onosproject.net.flow.TrafficTreatment;
 
@@ -182,7 +183,7 @@
         Builder withPriority(int priority);
 
         /**
-         * Makes the filtering objective permanent.
+         * Makes the forwarding objective permanent.
          *
          * @return an objective builder
          */
@@ -190,6 +191,15 @@
         Builder makePermanent();
 
         /**
+         * Adds annotations to the forwarding objective.
+         *
+         * @param annotations the annotations for the forwarding objective
+         * @return a forwarding objective builder
+         */
+        @Override
+        Builder withAnnotations(Annotations annotations);
+
+        /**
          * Builds the forwarding objective that will be added.
          *
          * @return a forwarding objective
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 19585f7..6d4acaa 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
@@ -17,6 +17,7 @@
 
 import com.google.common.annotations.Beta;
 import org.onosproject.core.ApplicationId;
+import org.onosproject.net.Annotations;
 import org.onosproject.net.flow.TrafficSelector;
 import org.onosproject.net.flow.TrafficTreatment;
 
@@ -177,6 +178,15 @@
         Builder withMeta(TrafficSelector selector);
 
         /**
+         * Adds annotations to the next objective.
+         *
+         * @param annotations the annotations for the next objective
+         * @return a next objective builder
+         */
+        @Override
+        Builder withAnnotations(Annotations annotations);
+
+        /**
          * Builds the next objective that will be added.
          *
          * @return a next objective
diff --git a/core/api/src/main/java/org/onosproject/net/flowobjective/Objective.java b/core/api/src/main/java/org/onosproject/net/flowobjective/Objective.java
index 3b0346c..8dfc176 100644
--- a/core/api/src/main/java/org/onosproject/net/flowobjective/Objective.java
+++ b/core/api/src/main/java/org/onosproject/net/flowobjective/Objective.java
@@ -17,6 +17,8 @@
 
 import com.google.common.annotations.Beta;
 import org.onosproject.core.ApplicationId;
+import org.onosproject.net.Annotated;
+import org.onosproject.net.Annotations;
 
 import java.util.Optional;
 
@@ -24,7 +26,7 @@
  * Base representation of a flow-objective description.
  */
 @Beta
-public interface Objective {
+public interface Objective extends Annotated {
 
     boolean DEFAULT_PERMANENT = true;
     int DEFAULT_TIMEOUT = 0;
@@ -174,6 +176,14 @@
         Builder withPriority(int priority);
 
         /**
+         * Adds annotations to the objective.
+         *
+         * @param annotations the annotations for the objective
+         * @return an objective builder
+         */
+         Builder withAnnotations(Annotations annotations);
+
+        /**
          * Builds the objective that will be added.
          *
          * @return an objective
