diff --git a/src/main/java/net/onrc/onos/intent/IntentOperationList.java b/src/main/java/net/onrc/onos/intent/IntentOperationList.java
index 1c916db..af00373 100644
--- a/src/main/java/net/onrc/onos/intent/IntentOperationList.java
+++ b/src/main/java/net/onrc/onos/intent/IntentOperationList.java
@@ -4,4 +4,8 @@
 
 public class IntentOperationList extends ArrayList<IntentOperation> {
 	private static final long serialVersionUID = -3894081461861052610L;
+	
+	public boolean add(IntentOperation.Operator op, Intent intent) {
+		return add(new IntentOperation(op, intent));
+	}
 }
diff --git a/src/main/java/net/onrc/onos/intent/runtime/IPathCalcRuntimeService.java b/src/main/java/net/onrc/onos/intent/runtime/IPathCalcRuntimeService.java
new file mode 100644
index 0000000..9e53732
--- /dev/null
+++ b/src/main/java/net/onrc/onos/intent/runtime/IPathCalcRuntimeService.java
@@ -0,0 +1,12 @@
+package net.onrc.onos.intent.runtime;
+
+import net.floodlightcontroller.core.module.IFloodlightService;
+import net.onrc.onos.intent.IntentMap;
+import net.onrc.onos.intent.IntentOperationList;
+
+public interface IPathCalcRuntimeService extends IFloodlightService {
+	public IntentOperationList executeIntentOperations(IntentOperationList list);
+	public IntentMap getHighLevelIntents();
+	public IntentMap getPathIntents();
+	public void purgeIntents();
+}
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 d22d516..32fe746 100644
--- a/src/main/java/net/onrc/onos/intent/runtime/PathCalcRuntime.java
+++ b/src/main/java/net/onrc/onos/intent/runtime/PathCalcRuntime.java
@@ -1,11 +1,10 @@
 package net.onrc.onos.intent.runtime;
 
-import java.util.Collection;
+import java.util.HashMap;
 
 import net.floodlightcontroller.core.module.IFloodlightService;
 import net.onrc.onos.intent.ConstrainedBFSTree;
 import net.onrc.onos.intent.ConstrainedShortestPathIntent;
-import net.onrc.onos.intent.Intent;
 import net.onrc.onos.intent.IntentOperation;
 import net.onrc.onos.intent.IntentOperationList;
 import net.onrc.onos.intent.PathIntent;
@@ -24,45 +23,61 @@
 		this.graph = g;
 	}
 
-	public PathIntentMap calcPathIntents(Collection<Intent> highLevelIntents, PathIntentMap pathIntents) {
-		IntentOperationList intentOpList = new IntentOperationList();
+	/**
+	 * calculate shortest-path and constrained-shortest-path intents into low-level path intents
+	 * @param intentOpList IntentOperationList having instances of ShortestPathIntent/ConstrainedShortestPathIntent
+	 * @param pathIntents a set of current low-level intents
+	 * @return IntentOperationList for PathIntent instances
+	 */
+	public IntentOperationList calcPathIntents(IntentOperationList intentOpList, PathIntentMap pathIntents) {
+		IntentOperationList pathIntentOpList = new IntentOperationList();
+		HashMap<Switch, ConstrainedBFSTree> spfTrees = new HashMap<>();
 
-		for (Intent intent: highLevelIntents) {
-			if (!(intent instanceof ShortestPathIntent)) {
-				// unsupported intent type.
-				// TODO should push back the intent to caller
-				continue;
-			}
+		for (IntentOperation intentOp: intentOpList) {
+			switch (intentOp.operator) {
+			case ADD:
+				if (!(intentOp.intent instanceof ShortestPathIntent)) {
+					// unsupported intent type.
+					// TODO should push back the intent to caller
+					continue;
+				}
 
-			ShortestPathIntent spIntent = (ShortestPathIntent) intent;
-			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;
-			}
+				ShortestPathIntent spIntent = (ShortestPathIntent) intentOp.intent;
+				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 = 0.0;
-			ConstrainedBFSTree tree = null;
-			if (intent instanceof ConstrainedShortestPathIntent) {
-				bandwidth = ((ConstrainedShortestPathIntent) intent).getBandwidth();
-				tree = new ConstrainedBFSTree(srcSwitch, pathIntents, bandwidth);
+				double bandwidth = 0.0;
+				ConstrainedBFSTree tree = null;
+				if (intentOp.intent instanceof ConstrainedShortestPathIntent) {
+					bandwidth = ((ConstrainedShortestPathIntent) intentOp.intent).getBandwidth();
+					tree = new ConstrainedBFSTree(srcSwitch, pathIntents, bandwidth);
+				}
+				else {
+					tree = spfTrees.get(srcSwitch);
+					if (tree == null) {
+						tree = new ConstrainedBFSTree(srcSwitch);
+						spfTrees.put(srcSwitch, tree);
+					}
+				}
+				Path path = tree.getPath(dstSwitch);
+				if (path == null) {
+					// path not found.
+					// TODO should push back the intent to caller
+					continue;
+				}
+				PathIntent pathIntent = new PathIntent("pi" + intentOp.intent.getId(), path, bandwidth, intentOp.intent);
+				pathIntentOpList.add(new IntentOperation(IntentOperation.Operator.ADD, pathIntent));
+				break;
+			case REMOVE:
+				pathIntentOpList.add(intentOp);
+				break;
 			}
-			else {
-				tree = new ConstrainedBFSTree(srcSwitch);
-			}
-			Path path = tree.getPath(dstSwitch);
-			if (path == null) {
-				// path not found.
-				// TODO should push back the intent to caller
-				continue;
-			}
-
-			PathIntent pathIntent = new PathIntent("pi" + intent.getId(), path, bandwidth, intent);
-			pathIntents.addIntent(pathIntent);
-			intentOpList.add(new IntentOperation(IntentOperation.Operator.ADD, pathIntent));
 		}
-		return pathIntents;
+		return pathIntentOpList;
 	}
 }
\ No newline at end of file
diff --git a/src/main/java/net/onrc/onos/intent/runtime/PathCalcRuntimeModule.java b/src/main/java/net/onrc/onos/intent/runtime/PathCalcRuntimeModule.java
index c32b4a7..56758cb 100644
--- a/src/main/java/net/onrc/onos/intent/runtime/PathCalcRuntimeModule.java
+++ b/src/main/java/net/onrc/onos/intent/runtime/PathCalcRuntimeModule.java
@@ -14,19 +14,20 @@
 import net.onrc.onos.intent.IntentMap;
 import net.onrc.onos.intent.IntentOperationList;
 import net.onrc.onos.intent.PathIntentMap;
+import net.onrc.onos.ofcontroller.networkgraph.INetworkGraphService;
 import net.onrc.onos.ofcontroller.networkgraph.NetworkGraph;
 
-public class PathCalcRuntimeModule implements IFloodlightModule {
+public class PathCalcRuntimeModule implements IFloodlightModule, IPathCalcRuntimeService {
 	private PathCalcRuntime runtime;
 	private IDatagridService datagridService;
-	private NetworkGraph networkGraph;
+	private INetworkGraphService networkGraphService;
 	private IntentMap highLevelIntents;
-	private PathIntentMap lowLevelIntents;
-	
+	private PathIntentMap pathIntents;
+
 	private IEventChannel<byte[], IntentOperationList> eventChannel;
 	private static final String EVENT_CHANNEL_NAME = "onos.pathintent";
 
-	
+
 	@Override
 	public Collection<Class<? extends IFloodlightService>> getModuleServices() {
 		Collection<Class<? extends IFloodlightService>> l = new ArrayList<>(1);
@@ -37,7 +38,7 @@
 	@Override
 	public Map<Class<? extends IFloodlightService>, IFloodlightService> getServiceImpls() {
 		Map<Class<? extends IFloodlightService>, IFloodlightService> m = new HashMap<>(1);
-		m.put(PathCalcRuntime.class, runtime);
+		m.put(IPathCalcRuntimeService.class, this);
 		return m;
 	}
 
@@ -45,16 +46,17 @@
 	public Collection<Class<? extends IFloodlightService>> getModuleDependencies() {
 		Collection<Class<? extends IFloodlightService>> l = new ArrayList<>();
 		l.add(IDatagridService.class);
+		l.add(INetworkGraphService.class);
 		return l;
 	}
 
 	@Override
 	public void init(FloodlightModuleContext context) throws FloodlightModuleException {
 		datagridService = context.getServiceImpl(IDatagridService.class);
-		//networkGraph = new MockNetworkGraph(); // TODO give pointer to the correct NetworkGraph
-		runtime = new PathCalcRuntime(networkGraph);
+		networkGraphService = context.getServiceImpl(INetworkGraphService.class); 
+		runtime = new PathCalcRuntime(networkGraphService.getNetworkGraph());
 		highLevelIntents = new IntentMap();
-		lowLevelIntents = new PathIntentMap(networkGraph);
+		pathIntents = new PathIntentMap(networkGraphService.getNetworkGraph());
 	}
 
 	@Override
@@ -64,25 +66,33 @@
 				byte[].class,
 				IntentOperationList.class);
 	}
-	
-	public void executeIntentOperations(IntentOperationList list) {
-		highLevelIntents.executeOperations(list);
-		lowLevelIntents = runtime.calcPathIntents(
-				highLevelIntents.getAllIntents(),
-				new PathIntentMap(networkGraph));
-		// TODO publishPathIntentOperationList(IntentOperationList list)
-	}
-	
+
 	protected void publishPathIntentOperationList(IntentOperationList list) {
 		eventChannel.addEntry(new byte[1], list); // TODO make key bytes		
 	}
-	
-	public IntentMap getIntents() {
+
+	@Override
+	public IntentOperationList executeIntentOperations(IntentOperationList list) {
+		highLevelIntents.executeOperations(list);
+		IntentOperationList pathIntentOperations = runtime.calcPathIntents(list, pathIntents);
+		pathIntents.executeOperations(pathIntentOperations);
+		publishPathIntentOperationList(pathIntentOperations);
+		return pathIntentOperations;
+	}
+
+	@Override
+	public IntentMap getHighLevelIntents() {
 		return highLevelIntents;
 	}
-	
+
+	@Override
+	public IntentMap getPathIntents() {
+		return pathIntents;
+	}
+
+	@Override
 	public void purgeIntents() {
 		highLevelIntents.purge();
-		lowLevelIntents.purge();
+		pathIntents.purge();
 	}
 }
