Initial implementation using titan for reference...not tested
diff --git a/src/main/java/net/floodlightcontroller/core/ISwitchStorage.java b/src/main/java/net/floodlightcontroller/core/ISwitchStorage.java
index 7aa0169..9aec3b3 100644
--- a/src/main/java/net/floodlightcontroller/core/ISwitchStorage.java
+++ b/src/main/java/net/floodlightcontroller/core/ISwitchStorage.java
@@ -1,15 +1,21 @@
 package net.floodlightcontroller.core;
 
 import java.util.Collection;
+import java.util.List;
 
 import org.openflow.protocol.OFPhysicalPort;
 
 public interface ISwitchStorage extends INetMapStorage {
 	
+	enum SwitchState {
+		INACTIVE,
+		ACTIVE
+	}
+	
 	/*
 	 * Update the switch details
 	 */
-	public void update(String dpid,DM_OPERATION op);
+	public void update(String dpid,SwitchState state, DM_OPERATION op);
 	/*
 	 * Associate a port on switch
 	 */
@@ -43,6 +49,8 @@
 	 */
 	public void deletePort(String dpid, String portName);
 	
+	public List<String> getActiveSwitches();
+	
 	/*
 	 * Initialize
 	 */
diff --git a/src/main/java/net/floodlightcontroller/core/internal/Controller.java b/src/main/java/net/floodlightcontroller/core/internal/Controller.java
index 90eff6f..d6098af 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/Controller.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/Controller.java
@@ -52,11 +52,13 @@
 import net.floodlightcontroller.core.IFloodlightProviderService;
 import net.floodlightcontroller.core.IHAListener;
 import net.floodlightcontroller.core.IInfoProvider;
+import net.floodlightcontroller.core.INetMapStorage.DM_OPERATION;
 import net.floodlightcontroller.core.IOFMessageListener;
 import net.floodlightcontroller.core.IListener.Command;
 import net.floodlightcontroller.core.IOFSwitch;
 import net.floodlightcontroller.core.IOFSwitchFilter;
 import net.floodlightcontroller.core.IOFSwitchListener;
+import net.floodlightcontroller.core.ISwitchStorage.SwitchState;
 import net.floodlightcontroller.core.annotations.LogMessageDoc;
 import net.floodlightcontroller.core.annotations.LogMessageDocs;
 import net.floodlightcontroller.core.internal.OFChannelState.HandshakeState;
@@ -136,6 +138,8 @@
 public class Controller implements IFloodlightProviderService, 
             IStorageSourceListener {
     
+	protected SwitchStorageImpl swStore;
+	
     protected static Logger log = LoggerFactory.getLogger(Controller.class);
 
     private static final String ERROR_DATABASE = 
@@ -1141,17 +1145,20 @@
         OFPhysicalPort port = m.getDesc();
         if (m.getReason() == (byte)OFPortReason.OFPPR_MODIFY.ordinal()) {
             sw.setPort(port);
+            swStore.addPort(sw.getStringId(), port);
             if (updateStorage)
                 updatePortInfo(sw, port);
             log.debug("Port #{} modified for {}", portNumber, sw);
         } else if (m.getReason() == (byte)OFPortReason.OFPPR_ADD.ordinal()) {
             sw.setPort(port);
+            swStore.addPort(sw.getStringId(), port);
             if (updateStorage)
                 updatePortInfo(sw, port);
             log.debug("Port #{} added for {}", portNumber, sw);
         } else if (m.getReason() == 
                    (byte)OFPortReason.OFPPR_DELETE.ordinal()) {
             sw.deletePort(portNumber);
+            swStore.deletePort(sw.getStringId(), portNumber);
             if (updateStorage)
                 removePortInfo(sw, portNumber);
             log.debug("Port #{} deleted for {}", portNumber, sw);
@@ -1423,6 +1430,7 @@
         }
         
         updateActiveSwitchInfo(sw);
+        swStore.update(sw.getStringId(), SwitchState.ACTIVE, DM_OPERATION.UPDATE);
         SwitchUpdate update = new SwitchUpdate(sw, SwitchUpdateType.ADDED);
         try {
             this.updates.put(update);
@@ -1462,6 +1470,7 @@
         // of the switch state that's written to storage.
         
         updateInactiveSwitchInfo(sw);
+        swStore.update(sw.getStringId(), SwitchState.ACTIVE, DM_OPERATION.UPDATE);
         SwitchUpdate update = new SwitchUpdate(sw, SwitchUpdateType.REMOVED);
         try {
             this.updates.put(update);
@@ -2050,6 +2059,7 @@
         this.roleChanger = new RoleChanger();
         initVendorMessages();
         this.systemStartTime = System.currentTimeMillis();
+        this.swStore.init("");
     }
     
     /**
diff --git a/src/main/java/net/floodlightcontroller/core/internal/SwitchStorageImpl.java b/src/main/java/net/floodlightcontroller/core/internal/SwitchStorageImpl.java
index 114803b..789f3ba 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/SwitchStorageImpl.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/SwitchStorageImpl.java
@@ -60,6 +60,7 @@
             if ((sw = graph.getVertices("dpid",dpid).iterator().next()) != null) {
             	// TODO: Check if port exists
             	Vertex p = graph.addVertex(null);
+            	p.setProperty("type","port");
             	p.setProperty("number",port.getPortNumber());
             	p.setProperty("state",port.getState());
             	p.setProperty("desc",port.getName());
@@ -133,14 +134,14 @@
             if ((sw = graph.getVertices("dpid",dpid).iterator().next()) != null) {
             	// TODO: Check if port exists
             	Vertex p = sw.query().direction(Direction.OUT).labels("on").has("number",port).vertices().iterator().next();
-            	graph.removeVertex(p);
-            	graph.stopTransaction(Conclusion.SUCCESS);
+            	if (p != null) {
+            		graph.removeVertex(p);
+            		graph.stopTransaction(Conclusion.SUCCESS);
+            	}
             }
 		} catch (TitanException e) {
              // TODO: handle exceptions
 		}	
-
-
 	}
 
 	@Override
@@ -157,9 +158,11 @@
 
 	@Override
 	public void init(String conf) {
-        graph = TitanFactory.open(conf);
+		//TODO extract the DB location from conf
+		String db = "/tmp/netmap";
+        graph = TitanFactory.open(db);
         graph.createKeyIndex("dpid", Vertex.class);
-
+        graph.createKeyIndex("type", Vertex.class);
 	}
 
 }
diff --git a/src/main/java/net/floodlightcontroller/core/internal/SwitchStorageImplStubs.java b/src/main/java/net/floodlightcontroller/core/internal/SwitchStorageImplStubs.java
index 8c3c833..c281141 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/SwitchStorageImplStubs.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/SwitchStorageImplStubs.java
@@ -4,6 +4,7 @@
 package net.floodlightcontroller.core.internal;
 
 import java.util.Collection;
+import java.util.List;
 
 import org.openflow.protocol.OFPhysicalPort;
 
@@ -15,14 +16,6 @@
  */
 public class SwitchStorageImplStubs implements ISwitchStorage {
 
-	/* (non-Javadoc)
-	 * @see net.floodlightcontroller.core.ISwitchStorage#update(long, net.floodlightcontroller.core.INetMapStorage.DM_OPERATION)
-	 */
-	@Override
-	public void update(String dpid, DM_OPERATION op) {
-		// TODO Auto-generated method stub
-
-	}
 
 	/* (non-Javadoc)
 	 * @see net.floodlightcontroller.core.ISwitchStorage#addPort(long, org.openflow.protocol.OFPhysicalPort)
@@ -105,4 +98,17 @@
 
 	}
 
+	@Override
+	public void update(String dpid, SwitchState state, DM_OPERATION op) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	@Override
+	public List<String> getActiveSwitches() {
+		return null;
+		// TODO Auto-generated method stub
+		
+	}
+
 }