diff --git a/core/api/src/main/java/org/onosproject/net/intent/IntentData.java b/core/api/src/main/java/org/onosproject/net/intent/IntentData.java
index 1bfa0dc..a71b20e 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/IntentData.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/IntentData.java
@@ -23,13 +23,15 @@
 import java.util.List;
 import java.util.Objects;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
 /**
  * A wrapper class that contains an intents, its state, and other metadata for
  * internal use.
  */
 public class IntentData { //FIXME need to make this "immutable"
                           // manager should be able to mutate a local copy while processing
-    private Intent intent;
+    private final Intent intent;
 
     private IntentState state;
     private Timestamp version;
@@ -37,34 +39,77 @@
 
     private List<Intent> installables;
 
+    /**
+     * Creates a new intent data object.
+     *
+     * @param intent intent this metadata references
+     * @param state intent state
+     * @param version version of the intent for this key
+     */
     public IntentData(Intent intent, IntentState state, Timestamp version) {
         this.intent = intent;
         this.state = state;
         this.version = version;
     }
 
-    // kryo constructor
-    protected IntentData() {
+    /**
+     * Copy constructor.
+     *
+     * @param intentData intent data to copy
+     */
+    public IntentData(IntentData intentData) {
+        checkNotNull(intentData);
+
+        intent = intentData.intent;
+        state = intentData.state;
+        version = intentData.version;
+        origin = intentData.origin;
+        installables = intentData.installables;
     }
 
+    // kryo constructor
+    protected IntentData() {
+        intent = null;
+    }
+
+    /**
+     * Returns the intent this metadata references.
+     *
+     * @return intent
+     */
     public Intent intent() {
         return intent;
     }
 
+    /**
+     * Returns the state of the intent.
+     *
+     * @return intent state
+     */
     public IntentState state() {
         return state;
     }
 
+    /**
+     * Returns the intent key.
+     *
+     * @return intent key
+     */
     public Key key() {
         return intent.key();
     }
 
+    /**
+     * Returns the version of the intent for this key.
+     *
+     * @return intent version
+     */
     public Timestamp version() {
         return version;
     }
 
     /**
-     * Sets the origin, which is the node that created the instance.
+     * Sets the origin, which is the node that created the intent.
      *
      * @param origin origin instance
      */
@@ -72,10 +117,20 @@
         this.origin = origin;
     }
 
+    /**
+     * Returns the origin node that created this intent.
+     *
+     * @return origin node ID
+     */
     public NodeId origin() {
         return origin;
     }
 
+    /**
+     * Updates the state of the intent to the given new state.
+     *
+     * @param newState new state of the intent
+     */
     public void setState(IntentState newState) {
         this.state = newState;
     }
@@ -94,10 +149,20 @@
         this.version = version;
     }
 
+    /**
+     * Sets the intent installables to the given list of intents.
+     *
+     * @param installables list of installables for this intent
+     */
     public void setInstallables(List<Intent> installables) {
         this.installables = ImmutableList.copyOf(installables);
     }
 
+    /**
+     * Returns the installables associated with this intent.
+     *
+     * @return list of installable intents
+     */
     public List<Intent> installables() {
         return installables;
     }
@@ -120,12 +185,14 @@
                 && Objects.equals(this.version, other.version);
     }
 
+    @Override
     public String toString() {
         return MoreObjects.toStringHelper(getClass())
                 .add("key", key())
                 .add("state", state())
                 .add("version", version())
                 .add("intent", intent())
+                .add("origin", origin())
                 .add("installables", installables())
                 .toString();
     }
