diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/inbandtelemetry/IntDeviceConfig.java b/core/api/src/main/java/org/onosproject/net/behaviour/inbandtelemetry/IntDeviceConfig.java
index a21a2ae..92e5fa2 100644
--- a/core/api/src/main/java/org/onosproject/net/behaviour/inbandtelemetry/IntDeviceConfig.java
+++ b/core/api/src/main/java/org/onosproject/net/behaviour/inbandtelemetry/IntDeviceConfig.java
@@ -16,6 +16,7 @@
 package org.onosproject.net.behaviour.inbandtelemetry;
 
 import com.google.common.annotations.Beta;
+import com.google.common.base.Objects;
 import org.onlab.packet.IpAddress;
 import org.onlab.packet.MacAddress;
 import org.onlab.packet.TpPort;
@@ -36,14 +37,14 @@
          * Embeds telemetry metadata according to the INT specification.
          *
          * @see <a href="https://github.com/p4lang/p4-applications/blob/master/docs/INT.pdf">
-         *     INT sepcification</a>
+         * INT sepcification</a>
          */
         INT,
         /**
          * Embeds telemetry metadata according to the OAM specification.
          *
          * @see <a href="https://tools.ietf.org/html/draft-ietf-ippm-ioam-data">
-         *     Data fields for In-situ OAM</a>
+         * Data fields for In-situ OAM</a>
          */
         IOAM
     }
@@ -166,6 +167,31 @@
         return new Builder();
     }
 
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        IntDeviceConfig that = (IntDeviceConfig) o;
+        return enabled == that.enabled &&
+                hopLatencySensitivity == that.hopLatencySensitivity &&
+                Objects.equal(collectorIp, that.collectorIp) &&
+                Objects.equal(collectorPort, that.collectorPort) &&
+                Objects.equal(collectorNextHopMac, that.collectorNextHopMac) &&
+                Objects.equal(sinkIp, that.sinkIp) &&
+                Objects.equal(sinkMac, that.sinkMac) &&
+                spec == that.spec;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hashCode(collectorIp, collectorPort, collectorNextHopMac,
+                sinkIp, sinkMac, spec, enabled, hopLatencySensitivity);
+    }
+
     /**
      * An IntConfig object builder.
      */
@@ -280,7 +306,7 @@
             checkArgument(minFlowHopLatencyChangeNs >= 0, "Hop latency sensitivity must be positive or zero");
 
             return new IntDeviceConfig(collectorIp, collectorPort, collectorNextHopMac,
-                                 sinkIp, sinkMac, spec, enabled, minFlowHopLatencyChangeNs);
+                    sinkIp, sinkMac, spec, enabled, minFlowHopLatencyChangeNs);
         }
     }
 }
diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/inbandtelemetry/IntObjective.java b/core/api/src/main/java/org/onosproject/net/behaviour/inbandtelemetry/IntObjective.java
index 8f036fe..4d94e62 100644
--- a/core/api/src/main/java/org/onosproject/net/behaviour/inbandtelemetry/IntObjective.java
+++ b/core/api/src/main/java/org/onosproject/net/behaviour/inbandtelemetry/IntObjective.java
@@ -15,6 +15,7 @@
  */
 package org.onosproject.net.behaviour.inbandtelemetry;
 
+import com.google.common.base.Objects;
 import com.google.common.collect.ImmutableSet;
 import org.onosproject.net.flow.DefaultTrafficSelector;
 import org.onosproject.net.flow.TrafficSelector;
@@ -75,6 +76,24 @@
         return new Builder();
     }
 
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        IntObjective that = (IntObjective) o;
+        return Objects.equal(selector, that.selector) &&
+                Objects.equal(metadataTypes, that.metadataTypes);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hashCode(selector, metadataTypes);
+    }
+
     /**
      * An IntObjective builder.
      */
diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/inbandtelemetry/IntProgrammable.java b/core/api/src/main/java/org/onosproject/net/behaviour/inbandtelemetry/IntProgrammable.java
index 5560e8c..8cbcae0 100644
--- a/core/api/src/main/java/org/onosproject/net/behaviour/inbandtelemetry/IntProgrammable.java
+++ b/core/api/src/main/java/org/onosproject/net/behaviour/inbandtelemetry/IntProgrammable.java
@@ -41,7 +41,11 @@
         /**
          * Transit functionality.
          */
-        TRANSIT
+        TRANSIT,
+        /**
+         * Postcard functionality.
+         */
+        POSTCARD
     }
 
     /**
