diff --git a/src/main/java/net/onrc/onos/intent/ConstrainedShortestPathIntent.java b/src/main/java/net/onrc/onos/intent/ConstrainedShortestPathIntent.java
index c5db590..b659179 100644
--- a/src/main/java/net/onrc/onos/intent/ConstrainedShortestPathIntent.java
+++ b/src/main/java/net/onrc/onos/intent/ConstrainedShortestPathIntent.java
@@ -10,19 +10,19 @@
 public class ConstrainedShortestPathIntent extends ShortestPathIntent {
 	protected Double bandwidth;
 
-	public ConstrainedShortestPathIntent(
+	public ConstrainedShortestPathIntent(String id,
 			Port srcPort, MACAddress srcMac,
 			Port dstPort, MACAddress dstMac,
 			Double bandwidth) {
-		super(srcPort, srcMac, dstPort, dstMac);
+		super(id, srcPort, srcMac, dstPort, dstMac);
 		this.bandwidth = bandwidth;
 	}
 
-	public ConstrainedShortestPathIntent(NetworkGraph graph,
-			Long srcSwitch, Long srcPort, long srcMac,
-			Long dstSwitch, Long dstPort, long dstMac,
+	public ConstrainedShortestPathIntent(NetworkGraph graph, String id,
+			long srcSwitch, long srcPort, long srcMac,
+			long dstSwitch, long dstPort, long dstMac,
 			Double bandwidth) {
-		super(graph, srcSwitch, srcPort, srcMac, dstSwitch, dstPort, dstMac);
+		super(graph, id, srcSwitch, srcPort, srcMac, dstSwitch, dstPort, dstMac);
 		this.bandwidth = bandwidth;
 	}
 
diff --git a/src/main/java/net/onrc/onos/intent/Intent.java b/src/main/java/net/onrc/onos/intent/Intent.java
index 33888ae..823b106 100644
--- a/src/main/java/net/onrc/onos/intent/Intent.java
+++ b/src/main/java/net/onrc/onos/intent/Intent.java
@@ -4,4 +4,18 @@
  * @author Toshio Koide (t-koide@onlab.us)
  */
 public abstract class Intent {
+	protected String id;
+
+	public Intent(String id) {
+		this.id = id;
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	@Override
+	public int hashCode() {
+		return id.hashCode();
+	}
 }
diff --git a/src/main/java/net/onrc/onos/intent/PathIntent.java b/src/main/java/net/onrc/onos/intent/PathIntent.java
index 22948b9..07f53e1 100644
--- a/src/main/java/net/onrc/onos/intent/PathIntent.java
+++ b/src/main/java/net/onrc/onos/intent/PathIntent.java
@@ -9,6 +9,7 @@
 	protected Path path;
 	protected Double bandwidth;
 	protected Intent parentIntent;
+	protected int id;
 
 	/**
 	 * 
@@ -17,8 +18,10 @@
 	 * @param bandwidth bandwidth which should be allocated for the path.
 	 * If null, it means no intent for bandwidth allocation (best effort).
 	 * @param parentIntent parent intent. If null, it means this is root intent.
+	 * @param id
 	 */
-	public PathIntent(Path path, Double bandwidth, Intent parentIntent) {
+	public PathIntent(String id, Path path, Double bandwidth, Intent parentIntent) {
+		super(id);
 		this.path = path;
 		this.bandwidth = bandwidth;
 		this.parentIntent = parentIntent;
diff --git a/src/main/java/net/onrc/onos/intent/ShortestPathIntent.java b/src/main/java/net/onrc/onos/intent/ShortestPathIntent.java
index e7f1a13..b1f58f5 100644
--- a/src/main/java/net/onrc/onos/intent/ShortestPathIntent.java
+++ b/src/main/java/net/onrc/onos/intent/ShortestPathIntent.java
@@ -13,18 +13,20 @@
 	protected MACAddress srcMac = null;
 	protected MACAddress dstMac = null;
 
-	public ShortestPathIntent(
+	public ShortestPathIntent(String id,
 			Port srcPort, MACAddress srcMac,
 			Port dstPort, MACAddress dstMac) {
+		super(id);
 		this.srcPort = srcPort;
 		this.dstPort = dstPort;
 		this.srcMac = srcMac;
 		this.dstMac = dstMac;
 	}
 
-	public ShortestPathIntent(NetworkGraph graph,
-			Long srcSwitch, Long srcPort, long srcMac,
-			Long dstSwitch, Long dstPort, long dstMac) {
+	public ShortestPathIntent(NetworkGraph graph, String id,
+			long srcSwitch, long srcPort, long srcMac,
+			long dstSwitch, long dstPort, long dstMac) {
+		super(id);
 		this.srcPort = graph.getSwitch(srcSwitch).getPort(srcPort);
 		this.dstPort = graph.getSwitch(dstSwitch).getPort(srcPort);
 		this.srcMac = MACAddress.valueOf(srcMac);
diff --git a/src/main/java/net/onrc/onos/intent/runtime/PathCalcRuntime.java b/src/main/java/net/onrc/onos/intent/runtime/PathCalcRuntime.java
index 3e09f8c..60cf10d 100644
--- a/src/main/java/net/onrc/onos/intent/runtime/PathCalcRuntime.java
+++ b/src/main/java/net/onrc/onos/intent/runtime/PathCalcRuntime.java
@@ -73,7 +73,7 @@
 				continue;
 			}
 
-			pathIntents.addIntent(new PathIntent(path, bandwidth, intent));
+			pathIntents.addIntent(new PathIntent("pi" + intent.getId(), path, bandwidth, intent));
 		}
 		return pathIntents;
 	}
diff --git a/src/test/java/net/onrc/onos/intent/runtime/UseCaseTest.java b/src/test/java/net/onrc/onos/intent/runtime/UseCaseTest.java
index 8f7b02f..93aa8ab 100644
--- a/src/test/java/net/onrc/onos/intent/runtime/UseCaseTest.java
+++ b/src/test/java/net/onrc/onos/intent/runtime/UseCaseTest.java
@@ -114,9 +114,9 @@
 	public void useCase1() {
 		// create shortest path intents
 		LinkedList<Intent> intents = new LinkedList<Intent>();
-		intents.add(new ShortestPathIntent(g, 1L, 20L, 1L, 4L, 20L, 4L));
-		intents.add(new ShortestPathIntent(g, 2L, 20L, 2L, 6L, 20L, 5L));
-		intents.add(new ShortestPathIntent(g, 4L, 20L, 3L, 8L, 20L, 6L));
+		intents.add(new ShortestPathIntent(g, "1", 1L, 20L, 1L, 4L, 20L, 4L));
+		intents.add(new ShortestPathIntent(g, "2", 2L, 20L, 2L, 6L, 20L, 5L));
+		intents.add(new ShortestPathIntent(g, "3", 4L, 20L, 3L, 8L, 20L, 6L));
 
 		// compile high-level intents into low-level intents (calculate paths)
 		PathCalcRuntime runtime1 = new PathCalcRuntime(g);
@@ -130,11 +130,11 @@
 	public void useCase2() {
 		// create constrained shortest path intents
 		LinkedList<Intent> intents = new LinkedList<Intent>();
-		intents.add(new ConstrainedShortestPathIntent(g, 1L, 20L, 1L, 4L, 20L, 17L, 400.0));
-		intents.add(new ConstrainedShortestPathIntent(g, 2L, 20L, 2L, 6L, 20L, 18L, 400.0));
-		intents.add(new ConstrainedShortestPathIntent(g, 4L, 20L, 3L, 8L, 20L, 19L, 400.0));
-		intents.add(new ConstrainedShortestPathIntent(g, 3L, 20L, 4L, 8L, 20L, 20L, 400.0));
-		intents.add(new ConstrainedShortestPathIntent(g, 4L, 20L, 5L, 8L, 20L, 21L, 400.0));
+		intents.add(new ConstrainedShortestPathIntent(g, "1", 1L, 20L, 1L, 4L, 20L, 17L, 400.0));
+		intents.add(new ConstrainedShortestPathIntent(g, "2", 2L, 20L, 2L, 6L, 20L, 18L, 400.0));
+		intents.add(new ConstrainedShortestPathIntent(g, "3", 4L, 20L, 3L, 8L, 20L, 19L, 400.0));
+		intents.add(new ConstrainedShortestPathIntent(g, "4", 3L, 20L, 4L, 8L, 20L, 20L, 400.0));
+		intents.add(new ConstrainedShortestPathIntent(g, "5", 4L, 20L, 5L, 8L, 20L, 21L, 400.0));
 
 		// compile high-level intents into low-level intents (calculate paths)
 		PathCalcRuntime runtime1 = new PathCalcRuntime(g);
@@ -148,11 +148,11 @@
 	public void useCase3() {
 		// create constrained & not best effort shortest path intents
 		LinkedList<Intent> intents = new LinkedList<Intent>();
-		intents.add(new ConstrainedShortestPathIntent(g, 1L, 20L, 1L, 4L, 20L, 6L, 600.0));
-		intents.add(new ConstrainedShortestPathIntent(g, 2L, 20L, 2L, 6L, 20L, 7L, 600.0));
-		intents.add(new ShortestPathIntent(g, 4L, 20L, 3L, 8L, 20L, 8L));
-		intents.add(new ShortestPathIntent(g, 4L, 20L, 4L, 8L, 20L, 9L));
-		intents.add(new ConstrainedShortestPathIntent(g, 4L, 20L, 5L, 8L, 20L, 10L, 600.0));
+		intents.add(new ConstrainedShortestPathIntent(g, "1", 1L, 20L, 1L, 4L, 20L, 6L, 600.0));
+		intents.add(new ConstrainedShortestPathIntent(g, "2", 2L, 20L, 2L, 6L, 20L, 7L, 600.0));
+		intents.add(new ShortestPathIntent(g, "3", 4L, 20L, 3L, 8L, 20L, 8L));
+		intents.add(new ShortestPathIntent(g, "4", 4L, 20L, 4L, 8L, 20L, 9L));
+		intents.add(new ConstrainedShortestPathIntent(g, "5", 4L, 20L, 5L, 8L, 20L, 10L, 600.0));
 
 		// compile high-level intents into low-level intents (calculate paths)
 		PathCalcRuntime runtime1 = new PathCalcRuntime(g);
