diff --git a/src/main/java/net/floodlightcontroller/routing/TopoRouteService.java b/src/main/java/net/floodlightcontroller/routing/TopoRouteService.java
index f979cc7..94e4769 100644
--- a/src/main/java/net/floodlightcontroller/routing/TopoRouteService.java
+++ b/src/main/java/net/floodlightcontroller/routing/TopoRouteService.java
@@ -22,6 +22,7 @@
 import org.openflow.util.HexString;
 
 import com.thinkaurelius.titan.core.TitanGraph;
+import com.tinkerpop.blueprints.TransactionalGraph.Conclusion;
 import com.tinkerpop.blueprints.Vertex;
 
 import javax.script.ScriptContext;
@@ -35,7 +36,7 @@
 public class TopoRouteService implements IFloodlightModule, ITopoRouteService {
 
     /** The logger. */
-    private static Logger logger =
+    private static Logger log =
 	LoggerFactory.getLogger(TopoRouteService.class);
 
     @Override
@@ -115,14 +116,18 @@
 
 	// Get the source vertex
 	Iterator<Vertex> iter = titanGraph.getVertices("dpid", dpid_src).iterator();
-	if (! iter.hasNext())
+	if (! iter.hasNext()) {
+	    // titanGraph.stopTransaction(Conclusion.SUCCESS);
 	    return null;		// Source vertex not found
+	}
 	Vertex v_src = iter.next();
 
 	// Get the destination vertex
 	iter = titanGraph.getVertices("dpid", dpid_dest).iterator();
-	if (! iter.hasNext())
+	if (! iter.hasNext()) {
+	    // titanGraph.stopTransaction(Conclusion.SUCCESS);
 	    return null;		// Destination vertex not found
+	}
 	Vertex v_dest = iter.next();
 
 	//
@@ -138,6 +143,7 @@
 	    flowEntry.setInPort(src.port());
 	    flowEntry.setOutPort(dest.port());
 	    result_data_path.flowEntries().add(flowEntry);
+	    // titanGraph.stopTransaction(Conclusion.SUCCESS);
 	    return result_data_path;
 	}
 
@@ -156,6 +162,7 @@
 	    engine.eval(gremlin);
 	} catch (ScriptException e) {
 	    System.err.println("Caught ScriptException running Gremlin script: " + e.getMessage());
+	    // titanGraph.stopTransaction(Conclusion.SUCCESS);
 	    return null;
 	}
 
@@ -224,6 +231,7 @@
 		result_data_path.flowEntries().add(flowEntry);
 	    }
 	}
+	// titanGraph.stopTransaction(Conclusion.SUCCESS);
 	if (result_data_path.flowEntries().size() > 0)
 	    return result_data_path;
 
