diff --git a/src/main/java/net/onrc/onos/api/intent/Intent.java b/src/main/java/net/onrc/onos/api/intent/Intent.java
index 048bdee..be34ba8 100644
--- a/src/main/java/net/onrc/onos/api/intent/Intent.java
+++ b/src/main/java/net/onrc/onos/api/intent/Intent.java
@@ -6,6 +6,8 @@
 import net.onrc.onos.api.batchoperation.IBatchOperationTarget;
 import net.onrc.onos.api.flowmanager.IFlow;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
 /**
  * The base class for the connectivity abstraction. It allows applications to
  * specify end hosts, apply some basic filtering to traffic, and constrain
@@ -20,15 +22,15 @@
  * data-plane to satisfy those constraints.
  */
 public abstract class Intent implements IBatchOperationTarget {
-    protected final IntentId id;
+    private final IntentId id;
 
     /**
      * Constructor.
      *
      * @param id ID for this Intent object.
      */
-    public Intent(String id) {
-        this.id = new IntentId(id);
+    protected Intent(IntentId id) {
+        this.id = checkNotNull(id);
     }
 
     /**
diff --git a/src/main/java/net/onrc/onos/api/intent/IntentId.java b/src/main/java/net/onrc/onos/api/intent/IntentId.java
index d488183..4ec3e6a 100644
--- a/src/main/java/net/onrc/onos/api/intent/IntentId.java
+++ b/src/main/java/net/onrc/onos/api/intent/IntentId.java
@@ -2,29 +2,46 @@
 
 import net.onrc.onos.api.batchoperation.BatchOperationTargetId;
 
-public class IntentId extends BatchOperationTargetId {
-    private final String value;
+/**
+ * The class representing intent's ID.
+ *
+ * This class is immutable.
+ */
+public final class IntentId extends BatchOperationTargetId {
+    private final long id;
 
-    public IntentId(String id) {
-        value = id;
-    }
-
-    @Override
-    public String toString() {
-        return value;
+    /**
+     * Constructs the ID corresponding to a given long value.
+     *
+     * In the future, this constructor will not be exposed to avoid misuses.
+     *
+     * @param id the underlay value of this ID.
+     */
+    public IntentId(long id) {
+        this.id = id;
     }
 
     @Override
     public int hashCode() {
-        return value.hashCode();
+        return (int) (id ^ (id >>> 32));
     }
 
     @Override
     public boolean equals(Object obj) {
-        if (obj instanceof IntentId) {
-            IntentId other = (IntentId) obj;
-            return (this.value.equals(other.value));
+        if (obj == this) {
+            return true;
         }
-        return false;
+
+        if (!(obj instanceof IntentId)) {
+            return false;
+        }
+
+        IntentId that = (IntentId) obj;
+        return this.id == that.id;
+    }
+
+    @Override
+    public String toString() {
+        return "0x" + Long.toHexString(id);
     }
 }
diff --git a/src/main/java/net/onrc/onos/api/intent/OpticalConnectivityIntent.java b/src/main/java/net/onrc/onos/api/intent/OpticalConnectivityIntent.java
index 89f6208..e9d6171 100644
--- a/src/main/java/net/onrc/onos/api/intent/OpticalConnectivityIntent.java
+++ b/src/main/java/net/onrc/onos/api/intent/OpticalConnectivityIntent.java
@@ -25,7 +25,7 @@
      * @param srcSwitchPort The source transponder port.
      * @param dstSwitchPort The destination transponder port.
      */
-    public OpticalConnectivityIntent(String id,
+    public OpticalConnectivityIntent(IntentId id,
             SwitchPort srcSwitchPort, SwitchPort dstSwitchPort) {
         super(id);
         this.srcSwitchPort = srcSwitchPort;
diff --git a/src/main/java/net/onrc/onos/api/intent/PacketConnectivityIntent.java b/src/main/java/net/onrc/onos/api/intent/PacketConnectivityIntent.java
index 99660c8..020dd56 100644
--- a/src/main/java/net/onrc/onos/api/intent/PacketConnectivityIntent.java
+++ b/src/main/java/net/onrc/onos/api/intent/PacketConnectivityIntent.java
@@ -42,7 +42,7 @@
      * @param canSetupOpticalFlow The flag whether this intent can create
      *        optical flows if needed.
      */
-    public PacketConnectivityIntent(String id,
+    public PacketConnectivityIntent(IntentId id,
             Collection<SwitchPort> srcSwitchPorts, PacketMatch match,
             Collection<SwitchPort> dstSwitchPorts, boolean canSetupOpticalFlow) {
         super(id);
diff --git a/src/test/java/net/onrc/onos/api/intent/IntentIdTest.java b/src/test/java/net/onrc/onos/api/intent/IntentIdTest.java
new file mode 100644
index 0000000..fb563c3
--- /dev/null
+++ b/src/test/java/net/onrc/onos/api/intent/IntentIdTest.java
@@ -0,0 +1,43 @@
+package net.onrc.onos.api.intent;
+
+import org.junit.Test;
+
+import static net.onrc.onos.core.util.ImmutableClassChecker.assertThatClassIsImmutable;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.not;
+import static org.junit.Assert.assertThat;
+
+/**
+ * This class tests the immutability, equality, and non-equality of {@link IntentId}.
+ */
+public class IntentIdTest {
+    /**
+     * Tests the immutability of {@link IntentId}.
+     */
+    @Test
+    public void intentIdFollowsGuidelineForImmutableObject() {
+        assertThatClassIsImmutable(IntentId.class);
+    }
+
+    /**
+     * Tests equality of {@link IntentId}.
+     */
+    @Test
+    public void testEquality() {
+        IntentId id1 = new IntentId(1L);
+        IntentId id2 = new IntentId(1L);
+
+        assertThat(id1, is(id2));
+    }
+
+    /**
+     * Tests non-equality of {@link IntentId}.
+     */
+    @Test
+    public void testNonEquality() {
+        IntentId id1 = new IntentId(1L);
+        IntentId id2 = new IntentId(2L);
+
+        assertThat(id1, is(not(id2)));
+    }
+}
