diff --git a/src/main/java/net/onrc/onos/graph/GraphDBManager.java b/src/main/java/net/onrc/onos/graph/GraphDBManager.java
index b58f489..ec7eb7f 100644
--- a/src/main/java/net/onrc/onos/graph/GraphDBManager.java
+++ b/src/main/java/net/onrc/onos/graph/GraphDBManager.java
@@ -14,16 +14,16 @@
  * @author nickkaranatsios
  */
 public class GraphDBManager {
-    //private static ThreadLocal<HashMap<String, DBConnection>> connections = new ThreadLocal<HashMap<String, DBConnection>>();
+    private static ThreadLocal<HashMap<String, DBConnection>> connections = new ThreadLocal<HashMap<String, DBConnection>>();
     private static DBOperation operation = null;
-    /*
+    
     static Map<String, DBConnection> getConnectionMap() {
         if (connections.get() == null) {
             connections.set(new HashMap<String, DBConnection>());
         }
         return connections.get();
     }
-*/
+
     public static DBOperation getDBOperation(final String dbStore, final String dbConfigFile) {
 	if (dbStore.equals("ramcloud")) {
 	    operation = new RamCloudDBOperation();
@@ -37,24 +37,22 @@
     }
 
     public static DBConnection getConnection(final String dbStore, final String dbConfigFile) {
-        //DBConnection conn = getConnectionMap().get(dbStore);
-	DBConnection conn = null;
-        //if (conn == null) {
+        DBConnection conn = getConnectionMap().get(dbStore);
+        if (conn == null) {
             if (dbStore.equals("ramcloud")) {
                 conn = new RamCloudDBConnection(dbConfigFile);
             } else if (dbStore.equals("titan")) {
                 conn = new TitanDBConnection(dbConfigFile);
             }
 
-            //GraphDBManager.getConnectionMap().put(dbStore, conn);
-        //} else {
-        //    GraphDBManager.getConnectionMap().get(dbStore);
-        //}
+            GraphDBManager.getConnectionMap().put(dbStore, conn);
+        } else {
+            GraphDBManager.getConnectionMap().get(dbStore);
+        }
         return conn;
     }
-/*
+
     static List<DBConnection> getConnections() {
         return new ArrayList<DBConnection>(getConnectionMap().values());
     }
-    */
 }
diff --git a/src/main/java/net/onrc/onos/ofcontroller/core/internal/LinkStorageImpl.java b/src/main/java/net/onrc/onos/ofcontroller/core/internal/LinkStorageImpl.java
index ac95609..458d533 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/core/internal/LinkStorageImpl.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/core/internal/LinkStorageImpl.java
@@ -232,7 +232,6 @@
 	@Override
 	public List<Link> getLinks(Long dpid, short port) {
 	    List<Link> links = new ArrayList<Link>();
-	    this.dbop = GraphDBManager.getDBOperation("ramcloud", "/tmp/ramcloudconf");
 	    IPortObject srcPort = dbop.searchPort(HexString.toHexString(dpid), port);
 	    if (srcPort == null)
 		return links;
@@ -318,7 +317,6 @@
 	@Override
 	public List<Link> getLinks(String dpid) {
 		List<Link> links = new ArrayList<Link>();
-		this.dbop = GraphDBManager.getDBOperation("ramcloud", "/tmp/ramcloudconf");
 		ISwitchObject srcSw = dbop.searchSwitch(dpid);
 		
 		if(srcSw != null) {
diff --git a/src/main/java/net/onrc/onos/ofcontroller/core/internal/SwitchStorageImpl.java b/src/main/java/net/onrc/onos/ofcontroller/core/internal/SwitchStorageImpl.java
index c50b2e8..15c41f3 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/core/internal/SwitchStorageImpl.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/core/internal/SwitchStorageImpl.java
@@ -142,7 +142,6 @@
 		log.info("SwitchStorage:addSwitch(): dpid {} ", dpid);
 		
 		try {
-		        op = GraphDBManager.getDBOperation("ramcloud", "/tmp/ramcloudconf");
 			ISwitchObject curr = op.searchSwitch(dpid);
 			if (curr != null) {
 				//If existing the switch. set The SW state ACTIVE. 
@@ -194,7 +193,6 @@
 		
 		log.info("SwitchStorage:addSwitch(): dpid {} ", dpid);
 		try {
-			op = GraphDBManager.getDBOperation("ramcloud", "/tmp/ramcloudconf");
 			ISwitchObject sw = op.searchSwitch(dpid);
 			if (sw != null) {
 				//If existing the switch. set The SW state ACTIVE. 
diff --git a/src/main/java/net/onrc/onos/ofcontroller/floodlightlistener/NetworkGraphPublisher.java b/src/main/java/net/onrc/onos/ofcontroller/floodlightlistener/NetworkGraphPublisher.java
index c94acd5..723fc4e 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/floodlightlistener/NetworkGraphPublisher.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/floodlightlistener/NetworkGraphPublisher.java
@@ -152,7 +152,6 @@
 
     protected void switchCleanup() {
     	//op.close();
-	op = GraphDBManager.getDBOperation("ramcloud", "/tmp/ramcloudconf");
     	Iterable<ISwitchObject> switches = op.getActiveSwitches();
     	
     	log.debug("Checking for inactive switches");
diff --git a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowManager.java b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowManager.java
index a2b8728..9e56797 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowManager.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowManager.java
@@ -258,7 +258,6 @@
      */
     @Override
     public boolean deleteAllFlows() {
-	dbHandlerApi = GraphDBManager.getDBOperation("ramcloud", "/tmp/ramcloudconf");
 	if (FlowDatabaseOperation.deleteAllFlows(dbHandlerApi)) {
 	    datagridService.notificationSendAllFlowsRemoved();
 	    return true;
@@ -274,7 +273,6 @@
      */
     @Override
     public boolean deleteFlow(FlowId flowId) {
-	dbHandlerApi = GraphDBManager.getDBOperation("ramcloud", "/tmp/ramcloudconf");
 	if (FlowDatabaseOperation.deleteFlow(dbHandlerApi, flowId)) {
 	    datagridService.notificationSendFlowRemoved(flowId);
 	    return true;
@@ -290,7 +288,6 @@
      */
     @Override
     public FlowPath getFlow(FlowId flowId) {
-	dbHandlerApi = GraphDBManager.getDBOperation("ramcloud", "/tmp/ramcloudconf");
 	return FlowDatabaseOperation.getFlow(dbHandlerApi, flowId);
     }
 
@@ -301,7 +298,6 @@
      */
     @Override
     public ArrayList<FlowPath> getAllFlows() {
-	dbHandlerApi = GraphDBManager.getDBOperation("ramcloud", "/tmp/ramcloudconf");
 	return FlowDatabaseOperation.getAllFlows(dbHandlerApi);
     }
 
diff --git a/src/main/java/net/onrc/onos/ofcontroller/topology/ShortestPath.java b/src/main/java/net/onrc/onos/ofcontroller/topology/ShortestPath.java
index 393e16f..a4a2be3 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/topology/ShortestPath.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/topology/ShortestPath.java
@@ -22,7 +22,6 @@
 
 import com.tinkerpop.blueprints.Direction;
 import com.tinkerpop.blueprints.Vertex;
-import net.onrc.onos.graph.GraphDBManager;
 
 /**
  * Class to calculate a shortest DataPath between 2 SwitchPorts
