diff --git a/src/main/java/net/onrc/onos/datagrid/web/IntentResource.java b/src/main/java/net/onrc/onos/datagrid/web/IntentResource.java
index ee1c704..db2c38a 100755
--- a/src/main/java/net/onrc/onos/datagrid/web/IntentResource.java
+++ b/src/main/java/net/onrc/onos/datagrid/web/IntentResource.java
@@ -101,7 +101,7 @@
                 }
                 System.out.println("constructed node " + sb.toString());
                 sb.delete(0, sb.length());
-                intentDesializer = new IntentDeserializer(graph, sb.toString().getBytes());
+                intentDesializer = new IntentDeserializer(sb.toString().getBytes());
                 Intent intent = intentDesializer.getIntent();
                 intents.add(intent);
             }
diff --git a/src/main/java/net/onrc/onos/intent/ConstrainedBFSTree.java b/src/main/java/net/onrc/onos/intent/ConstrainedBFSTree.java
index 2ea27ae..758494f 100644
--- a/src/main/java/net/onrc/onos/intent/ConstrainedBFSTree.java
+++ b/src/main/java/net/onrc/onos/intent/ConstrainedBFSTree.java
@@ -23,7 +23,7 @@
 	HashMap<Switch, Path> paths = new HashMap<Switch, Path>();
 	Switch rootSwitch;
 	PathIntents intents = null;
-	Double bandwidth = null;
+	double bandwidth = 0.0; // 0.0 means no limit for bandwidth (normal BFS tree)
 
 	public ConstrainedBFSTree(Switch rootSwitch) {
 		this.rootSwitch = rootSwitch;
@@ -31,7 +31,7 @@
 		calcTree();
 	}
 
-	public ConstrainedBFSTree(Switch rootSwitch, PathIntents intents, Double bandwidth) {
+	public ConstrainedBFSTree(Switch rootSwitch, PathIntents intents, double bandwidth) {
 		this.rootSwitch = rootSwitch;
 		this.intents = intents;
 		this.bandwidth = bandwidth;
@@ -46,7 +46,7 @@
 			for (Link link: sw.getOutgoingLinks()) {
 				Switch reachedSwitch = link.getDestinationPort().getSwitch();
 				if (switchSearched.contains(reachedSwitch)) continue;
-				if (bandwidth != null && intents.getAvailableBandwidth(link) < bandwidth) continue;
+				if (bandwidth > 0.0 && intents.getAvailableBandwidth(link) < bandwidth) continue;
 				switchQueue.add(reachedSwitch);
 				switchSearched.add(reachedSwitch);
 				upstreamLinks.put(reachedSwitch, link);
diff --git a/src/main/java/net/onrc/onos/intent/ConstrainedShortestPathIntent.java b/src/main/java/net/onrc/onos/intent/ConstrainedShortestPathIntent.java
index 8a2e101..879d92f 100644
--- a/src/main/java/net/onrc/onos/intent/ConstrainedShortestPathIntent.java
+++ b/src/main/java/net/onrc/onos/intent/ConstrainedShortestPathIntent.java
@@ -1,66 +1,27 @@
 package net.onrc.onos.intent;
 
-import net.floodlightcontroller.util.MACAddress;
-import net.onrc.onos.ofcontroller.networkgraph.NetworkGraph;
-import net.onrc.onos.ofcontroller.networkgraph.Port;
-
-import com.esotericsoftware.kryo.io.Input;
-import com.esotericsoftware.kryo.io.Output;
-
 /**
  * @author Toshio Koide (t-koide@onlab.us)
  */
 public class ConstrainedShortestPathIntent extends ShortestPathIntent {
-	protected Double bandwidth;
+	protected double bandwidth;
 
-	public ConstrainedShortestPathIntent(String id,
-			Port srcPort, MACAddress srcMac,
-			Port dstPort, MACAddress dstMac,
-			Double bandwidth) {
-		super(id, srcPort, srcMac, dstPort, dstMac);
-		this.bandwidth = bandwidth;
+	/**
+	 * Default constructor for Kryo deserialization
+	 */
+	@Deprecated
+	public ConstrainedShortestPathIntent() {
 	}
-
-	public ConstrainedShortestPathIntent(NetworkGraph graph, String id,
+	
+	public ConstrainedShortestPathIntent(String id,
 			long srcSwitch, long srcPort, long srcMac,
 			long dstSwitch, long dstPort, long dstMac,
-			Double bandwidth) {
-		super(graph, id, srcSwitch, srcPort, srcMac, dstSwitch, dstPort, dstMac);
+			double bandwidth) {
+		super(id, srcSwitch, srcPort, srcMac, dstSwitch, dstPort, dstMac);
 		this.bandwidth = bandwidth;
 	}
 
-	public static ConstrainedShortestPathIntent fromBytes(NetworkGraph graph, byte[] bytes) {
-		Input input = new Input(bytes);
-		ConstrainedShortestPathIntent intent = new ConstrainedShortestPathIntent(graph,
-				input.readString(),
-				input.readLong(),
-				input.readLong(),
-				input.readLong(),
-				input.readLong(),
-				input.readLong(),
-				input.readLong(),
-				input.readDouble());
-		input.close();
-		return intent;
-	}
-
-	public Double getBandwidth() {
+	public double getBandwidth() {
 		return bandwidth;
 	}
-
-	@Override
-	public byte[] toBytes() {
-		byte[] buffer = new byte[1024];
-		Output output = new Output(buffer, -1);
-		output.writeString(id);
-		output.writeLong(srcPort.getSwitch().getDpid());
-		output.writeLong(srcPort.getNumber());
-		output.writeLong(srcMac.toLong());
-		output.writeLong(dstPort.getSwitch().getDpid());
-		output.writeLong(dstPort.getNumber());
-		output.writeLong(dstMac.toLong());
-		output.writeDouble(bandwidth);
-		output.close();
-		return output.toBytes();
-	}
 }
diff --git a/src/main/java/net/onrc/onos/intent/Intent.java b/src/main/java/net/onrc/onos/intent/Intent.java
index 070af25..921d430 100644
--- a/src/main/java/net/onrc/onos/intent/Intent.java
+++ b/src/main/java/net/onrc/onos/intent/Intent.java
@@ -4,7 +4,18 @@
  * @author Toshio Koide (t-koide@onlab.us)
  */
 public abstract class Intent {
+	enum IntentState {
+		// TODO;
+	}
 	protected String id;
+	protected IntentState state;
+
+	/**
+	 * Default constructor for Kryo deserialization
+	 */
+	@Deprecated
+	public Intent() {
+	}
 
 	public Intent(String id) {
 		this.id = id;
@@ -14,7 +25,15 @@
 		return id;
 	}
 	
-	abstract public byte[] toBytes();
+	public IntentState getState() {
+		return state;
+	}
+	
+	public IntentState setState(IntentState newState) {
+		IntentState oldState = state;
+		state = newState;
+		return oldState;
+	}
 
 	@Override
 	public int hashCode() {
diff --git a/src/main/java/net/onrc/onos/intent/IntentDeserializer.java b/src/main/java/net/onrc/onos/intent/IntentDeserializer.java
index c146698..a3a6ae6 100644
--- a/src/main/java/net/onrc/onos/intent/IntentDeserializer.java
+++ b/src/main/java/net/onrc/onos/intent/IntentDeserializer.java
@@ -1,6 +1,5 @@
 package net.onrc.onos.intent;
 
-import net.onrc.onos.ofcontroller.networkgraph.NetworkGraph;
 
 /**
  * @author Toshio Koide (t-koide@onlab.us)
@@ -9,11 +8,9 @@
 	private String id;
 	private String className;
 	private Intent intent = null;
-	private NetworkGraph g;
 
-	public IntentDeserializer(NetworkGraph graph, byte[] b) {
+	public IntentDeserializer(byte[] b) {
 		// TODO deserialize object and get (unique id, class name, object data) tuple.
-		g = graph;
 		id = "id";
 		className = "pi";
 		byte[] objectData = null;
@@ -35,17 +32,17 @@
 
 	private void parsePathIntent(byte[] objectData) {
 		// TODO deserialize object and create instance
-		intent = new PathIntent(id, null, null, null);
+		intent = new PathIntent(id, null, 0, null);
 	}
 
 	private void parseShortestPathIntent(byte[] objectData) {
 		// TODO deserialize object and create instance
-		intent = new ShortestPathIntent(g, id, 0L, 0L, 0L, 0L, 0L, 0L);
+		intent = new ShortestPathIntent(id, 0L, 0L, 0L, 0L, 0L, 0L);
 	}
 
 	private void parseConstrainedShortestPathIntent(byte[] objectData) {
 		// TODO deserialize object and create instance
-		intent = new ConstrainedShortestPathIntent(g, id, 0L, 0L, 0L, 0L, 0L, 0L, 0.0);
+		intent = new ConstrainedShortestPathIntent(id, 0L, 0L, 0L, 0L, 0L, 0L, 0.0);
 	}
 
 	public Intent getIntent() {
diff --git a/src/main/java/net/onrc/onos/intent/PathIntent.java b/src/main/java/net/onrc/onos/intent/PathIntent.java
index 3afa92e..4d1e71e 100644
--- a/src/main/java/net/onrc/onos/intent/PathIntent.java
+++ b/src/main/java/net/onrc/onos/intent/PathIntent.java
@@ -7,7 +7,7 @@
  */
 public class PathIntent extends Intent {
 	protected Path path;
-	protected Double bandwidth;
+	protected double bandwidth;
 	protected Intent parentIntent;
 	protected int id;
 
@@ -16,11 +16,11 @@
 	 * @param graph
 	 * @param path
 	 * @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.
+	 * If 0, no intent for bandwidth allocation (best effort).
+	 * @param parentIntent parent intent. If null, this is root intent.
 	 * @param id
 	 */
-	public PathIntent(String id, Path path, Double bandwidth, Intent parentIntent) {
+	public PathIntent(String id, Path path, double bandwidth, Intent parentIntent) {
 		super(id);
 		this.path = path;
 		this.bandwidth = bandwidth;
@@ -38,10 +38,4 @@
 	public Intent getParentIntent() {
 		return parentIntent;
 	}
-
-	@Override
-	public byte[] toBytes() {
-		// TODO not implemented yet
-		return null;
-	}
 }
diff --git a/src/main/java/net/onrc/onos/intent/ShortestPathIntent.java b/src/main/java/net/onrc/onos/intent/ShortestPathIntent.java
index 3fdcf66..2677942 100644
--- a/src/main/java/net/onrc/onos/intent/ShortestPathIntent.java
+++ b/src/main/java/net/onrc/onos/intent/ShortestPathIntent.java
@@ -1,90 +1,66 @@
 package net.onrc.onos.intent;
 
-import com.esotericsoftware.kryo.io.Input;
-import com.esotericsoftware.kryo.io.Output;
-
 import net.floodlightcontroller.util.MACAddress;
-import net.onrc.onos.ofcontroller.networkgraph.NetworkGraph;
-import net.onrc.onos.ofcontroller.networkgraph.Port;
+import net.onrc.onos.ofcontroller.util.Dpid;
 
 /**
  * @author Toshio Koide (t-koide@onlab.us)
  */
 public class ShortestPathIntent extends Intent {
-	protected Port srcPort = null;
-	protected Port dstPort = null;
-	protected MACAddress srcMac = null;
-	protected MACAddress dstMac = null;
+	protected long srcSwitchDpid;
+	protected long srcPortNumber;
+	protected long srcMacAddress;
+	protected long dstSwitchDpid;
+	protected long dstPortNumber;
+	protected long dstMacAddress;
 
-	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;
+	/**
+	 * Default constructor for Kryo deserialization
+	 */
+	@Deprecated
+	public ShortestPathIntent() {
 	}
 
-	public ShortestPathIntent(NetworkGraph graph, String id,
+	public ShortestPathIntent(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);
-		this.dstMac = MACAddress.valueOf(dstMac);
+		srcSwitchDpid = srcSwitch;
+		srcPortNumber = srcPort;
+		srcMacAddress = srcMac;
+		dstSwitchDpid = dstSwitch;
+		dstPortNumber = dstPort;
+		dstMacAddress = dstMac;
 	}
 
-	public static ShortestPathIntent fromBytes(NetworkGraph graph, byte[] bytes) {
-		Input input = new Input(bytes);
-		ShortestPathIntent intent = new ShortestPathIntent(graph,
-				input.readString(),
-				input.readLong(),
-				input.readLong(),
-				input.readLong(),
-				input.readLong(),
-				input.readLong(),
-				input.readLong());
-		input.close();
-		return intent;
-		}
-
-	public Port getSourcePort() {
-		return srcPort;
+	public long getSrcSwitchDpid() {
+		return srcSwitchDpid;
 	}
 
-	public MACAddress getSourceMac() {
-		return srcMac;
+	public long getSrcPortNumber() {
+		return srcPortNumber;
 	}
 
-	public Port getDestinationPort() {
-		return dstPort;
+	public long getSrcMac() {
+		return srcMacAddress;
 	}
 
-	public MACAddress getDestinationMac() {
-		return dstMac;
+	public long getDstSwitchDpid() {
+		return dstSwitchDpid;
+	}
+
+	public long getDstPortNumber() {
+		return dstPortNumber;
+	}
+
+	public long getDstMac() {
+		return dstMacAddress;
 	}
 
 	@Override
 	public String toString() {
-		return String.format("srcPort:%s, srcMac:%s, dstPort:%s, dstMac:%s",
-				srcPort.toString(), srcMac.toString(),
-				dstPort.toString(), dstMac.toString());
-	}
-
-	@Override
-	public byte[] toBytes() {
-		byte[] buffer = new byte[1024];
-		Output output = new Output(buffer, -1);
-		output.writeString(id);
-		output.writeLong(srcPort.getSwitch().getDpid());
-		output.writeLong(srcPort.getNumber());
-		output.writeLong(srcMac.toLong());
-		output.writeLong(dstPort.getSwitch().getDpid());
-		output.writeLong(dstPort.getNumber());
-		output.writeLong(dstMac.toLong());
-		output.close();
-		return output.toBytes();
+		return String.format("srcDpid:%s, srcPort:%d, srcMac:%s, dstDpid:%s, dstPort:%d, dstMac:%s",
+				new Dpid(srcSwitchDpid), srcPortNumber, MACAddress.valueOf(srcMacAddress),
+				new Dpid(dstSwitchDpid), dstPortNumber, MACAddress.valueOf(dstMacAddress));
 	}
 }
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 60cf10d..8d9cc87 100644
--- a/src/main/java/net/onrc/onos/intent/runtime/PathCalcRuntime.java
+++ b/src/main/java/net/onrc/onos/intent/runtime/PathCalcRuntime.java
@@ -49,15 +49,15 @@
 			}
 
 			ShortestPathIntent spIntent = (ShortestPathIntent) intent;
-			Switch srcSwitch = spIntent.getSourcePort().getSwitch();
-			Switch dstSwitch = spIntent.getDestinationPort().getSwitch();
+			Switch srcSwitch = graph.getSwitch(spIntent.getSrcSwitchDpid());
+			Switch dstSwitch = graph.getSwitch(spIntent.getDstSwitchDpid());
 			if (srcSwitch == null || dstSwitch == null) {
 				// incomplete intent.
 				// TODO should push back the intent to caller
 				continue;
 			}
 
-			Double bandwidth = null;
+			double bandwidth = 0.0;
 			ConstrainedBFSTree tree = null;
 			if (intent instanceof ConstrainedShortestPathIntent) {
 				bandwidth = ((ConstrainedShortestPathIntent) intent).getBandwidth();
@@ -72,7 +72,7 @@
 				// TODO should push back the intent to caller
 				continue;
 			}
-
+			
 			pathIntents.addIntent(new PathIntent("pi" + intent.getId(), path, bandwidth, intent));
 		}
 		return pathIntents;
diff --git a/src/test/java/net/onrc/onos/intent/ConstrainedShortestPathIntentTest.java b/src/test/java/net/onrc/onos/intent/ConstrainedShortestPathIntentTest.java
index 8160ca8..354e053 100644
--- a/src/test/java/net/onrc/onos/intent/ConstrainedShortestPathIntentTest.java
+++ b/src/test/java/net/onrc/onos/intent/ConstrainedShortestPathIntentTest.java
@@ -2,10 +2,15 @@
 
 import static org.junit.Assert.*;
 import net.onrc.onos.ofcontroller.networkgraph.NetworkGraph;
+
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
+import com.esotericsoftware.kryo.Kryo;
+import com.esotericsoftware.kryo.io.Input;
+import com.esotericsoftware.kryo.io.Output;
+
 public class ConstrainedShortestPathIntentTest {
 	NetworkGraph g;
 
@@ -22,21 +27,27 @@
 
 	@Test
 	public void test() {
+		Kryo kryo = new Kryo();
+		Output output = new Output(1024);
+
 		ConstrainedShortestPathIntent intent1 =
-				new ConstrainedShortestPathIntent(g, "1", 1L, 20L, 1L, 4L, 20L, 4L, 1000.0);
+				new ConstrainedShortestPathIntent("1", 2L, 3L, 4L, 5L, 6L, 7L, 1000.0);
 
-		byte b[] = intent1.toBytes();
+		kryo.writeObject(output, intent1);
+		output.close();
 
+		Input input = new Input(output.toBytes());
 		ConstrainedShortestPathIntent intent2 =
-				ConstrainedShortestPathIntent.fromBytes(g, b);
+				kryo.readObject(input, ConstrainedShortestPathIntent.class);
+		input.close();
 
 		assertEquals("1", intent2.getId());
-		assertEquals(Long.valueOf(1), intent2.getSourcePort().getSwitch().getDpid());
-		assertEquals(Long.valueOf(20), intent2.getSourcePort().getNumber());
-		assertEquals(1L, intent2.getSourceMac().toLong());
-		assertEquals(Long.valueOf(4), intent2.getDestinationPort().getSwitch().getDpid());
-		assertEquals(Long.valueOf(20), intent2.getDestinationPort().getNumber());
-		assertEquals(4L, intent2.getDestinationMac().toLong());
-		assertEquals(Double.valueOf(1000.0), intent2.getBandwidth());
+		assertEquals(2L, intent2.getSrcSwitchDpid());
+		assertEquals(3L, intent2.getSrcPortNumber());
+		assertEquals(4L, intent2.getSrcMac());
+		assertEquals(5L, intent2.getDstSwitchDpid());
+		assertEquals(6L, intent2.getDstPortNumber());
+		assertEquals(7L, intent2.getDstMac());
+		assertEquals(1000.0, intent2.getBandwidth(), 0.0);
 	}
 }
diff --git a/src/test/java/net/onrc/onos/intent/ShortestPathIntentTest.java b/src/test/java/net/onrc/onos/intent/ShortestPathIntentTest.java
index a0da341..e325be8 100644
--- a/src/test/java/net/onrc/onos/intent/ShortestPathIntentTest.java
+++ b/src/test/java/net/onrc/onos/intent/ShortestPathIntentTest.java
@@ -2,10 +2,15 @@
 
 import static org.junit.Assert.*;
 import net.onrc.onos.ofcontroller.networkgraph.NetworkGraph;
+
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
+import com.esotericsoftware.kryo.Kryo;
+import com.esotericsoftware.kryo.io.Input;
+import com.esotericsoftware.kryo.io.Output;
+
 public class ShortestPathIntentTest {
 	NetworkGraph g;
 
@@ -22,21 +27,26 @@
 
 	@Test
 	public void test() {
+		Kryo kryo = new Kryo();
+		Output output = new Output(1024);
+
 		ShortestPathIntent intent1 =
-				new ShortestPathIntent(g, "1", 1L, 20L, 1L, 4L, 20L, 4L);
+				new ShortestPathIntent("1", 2L, 3L, 4L, 5L, 6L, 7L);
 
-		byte b[] = intent1.toBytes();
+		kryo.writeObject(output, intent1);
+		output.close();
 
+		Input input = new Input(output.toBytes());
 		ShortestPathIntent intent2 =
-				ShortestPathIntent.fromBytes(g, b);
+				kryo.readObject(input, ShortestPathIntent.class);
+		input.close();
 
 		assertEquals("1", intent2.getId());
-		assertEquals(Long.valueOf(1), intent2.getSourcePort().getSwitch().getDpid());
-		assertEquals(Long.valueOf(20), intent2.getSourcePort().getNumber());
-		assertEquals(1L, intent2.getSourceMac().toLong());
-		assertEquals(Long.valueOf(4), intent2.getDestinationPort().getSwitch().getDpid());
-		assertEquals(Long.valueOf(20), intent2.getDestinationPort().getNumber());
-		assertEquals(4L, intent2.getDestinationMac().toLong());
+		assertEquals(2L, intent2.getSrcSwitchDpid());
+		assertEquals(3L, intent2.getSrcPortNumber());
+		assertEquals(4L, intent2.getSrcMac());
+		assertEquals(5L, intent2.getDstSwitchDpid());
+		assertEquals(6L, intent2.getDstPortNumber());
+		assertEquals(7L, intent2.getDstMac());
 	}
-
 }
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 73eee6b..554aece 100644
--- a/src/test/java/net/onrc/onos/intent/runtime/UseCaseTest.java
+++ b/src/test/java/net/onrc/onos/intent/runtime/UseCaseTest.java
@@ -49,9 +49,9 @@
 	public void useCase1() {
 		// create shortest path intents
 		LinkedList<Intent> intents = new LinkedList<Intent>();
-		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));
+		intents.add(new ShortestPathIntent("1", 1L, 20L, 1L, 4L, 20L, 4L));
+		intents.add(new ShortestPathIntent("2", 2L, 20L, 2L, 6L, 20L, 5L));
+		intents.add(new ShortestPathIntent("3", 4L, 20L, 3L, 8L, 20L, 6L));
 
 		// compile high-level intents into low-level intents (calculate paths)
 		PathCalcRuntime runtime1 = new PathCalcRuntime(g);
@@ -65,11 +65,11 @@
 	public void useCase2() {
 		// create constrained shortest path intents
 		LinkedList<Intent> intents = new LinkedList<Intent>();
-		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));
+		intents.add(new ConstrainedShortestPathIntent("1", 1L, 20L, 1L, 4L, 20L, 17L, 400.0));
+		intents.add(new ConstrainedShortestPathIntent("2", 2L, 20L, 2L, 6L, 20L, 18L, 400.0));
+		intents.add(new ConstrainedShortestPathIntent("3", 4L, 20L, 3L, 8L, 20L, 19L, 400.0));
+		intents.add(new ConstrainedShortestPathIntent("4", 3L, 20L, 4L, 8L, 20L, 20L, 400.0));
+		intents.add(new ConstrainedShortestPathIntent("5", 4L, 20L, 5L, 8L, 20L, 21L, 400.0));
 
 		// compile high-level intents into low-level intents (calculate paths)
 		PathCalcRuntime runtime1 = new PathCalcRuntime(g);
@@ -83,11 +83,11 @@
 	public void useCase3() {
 		// create constrained & not best effort shortest path intents
 		LinkedList<Intent> intents = new LinkedList<Intent>();
-		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));
+		intents.add(new ConstrainedShortestPathIntent("1", 1L, 20L, 1L, 4L, 20L, 6L, 600.0));
+		intents.add(new ConstrainedShortestPathIntent("2", 2L, 20L, 2L, 6L, 20L, 7L, 600.0));
+		intents.add(new ShortestPathIntent("3", 4L, 20L, 3L, 8L, 20L, 8L));
+		intents.add(new ShortestPathIntent("4", 4L, 20L, 4L, 8L, 20L, 9L));
+		intents.add(new ConstrainedShortestPathIntent("5", 4L, 20L, 5L, 8L, 20L, 10L, 600.0));
 
 		// compile high-level intents into low-level intents (calculate paths)
 		PathCalcRuntime runtime1 = new PathCalcRuntime(g);
