diff --git a/build.xml b/build.xml
index 349b683..aa8b593 100644
--- a/build.xml
+++ b/build.xml
@@ -52,8 +52,8 @@
     <patternset id="lib">
         <include name="logback-classic-1.0.0.jar"/>
         <include name="logback-core-1.0.0.jar"/>
-        <include name="jackson-core-asl-1.8.6.jar"/>
-        <include name="jackson-mapper-asl-1.8.6.jar"/>
+        <include name="jackson-core-asl-1.9.11.jar"/>
+        <include name="jackson-mapper-asl-1.9.11.jar"/>
         <include name="slf4j-api-1.6.4.jar"/>
         <include name="org.restlet-2.1-RC1.jar"/>
         <include name="org.restlet.ext.jackson-2.1-RC1.jar"/>
diff --git a/src/main/java/net/floodlightcontroller/core/INetMapTopologyService.java b/src/main/java/net/floodlightcontroller/core/INetMapTopologyService.java
index da00e0f..f0c7f7f 100644
--- a/src/main/java/net/floodlightcontroller/core/INetMapTopologyService.java
+++ b/src/main/java/net/floodlightcontroller/core/INetMapTopologyService.java
@@ -2,15 +2,16 @@
 
 import java.util.List;
 
+import net.floodlightcontroller.core.ISwitchStorage.ISwitchObject;
 import net.floodlightcontroller.routing.Link;
 import net.floodlightcontroller.topology.NodePortTuple;
 
 public interface INetMapTopologyService extends INetMapService {
 
 	public interface ITopoSwitchService {
-		List<String> GetActiveSwitches();
-		List<String> GetAllSwitches();
-		List<String> GetInactiveSwitches();
+		Iterable<ISwitchObject> GetActiveSwitches();
+		Iterable<ISwitchObject> GetAllSwitches();
+		Iterable<ISwitchObject> GetInactiveSwitches();
 		List<String> GetPortsOnSwitch(String dpid);
 	}
 	
@@ -24,7 +25,7 @@
 	}
 	
 	public interface ITopoRouteService {
-		List<NodePortTuple> GetShortestpath(NodePortTuple src, NodePortTuple dest);
+		List<NodePortTuple> GetShortestPath(NodePortTuple src, NodePortTuple dest);
 		Boolean RouteExists(NodePortTuple src, NodePortTuple dest);
 	}
 	
diff --git a/src/main/java/net/floodlightcontroller/core/ISwitchStorage.java b/src/main/java/net/floodlightcontroller/core/ISwitchStorage.java
index 8060c4d..28e6a5d 100644
--- a/src/main/java/net/floodlightcontroller/core/ISwitchStorage.java
+++ b/src/main/java/net/floodlightcontroller/core/ISwitchStorage.java
@@ -3,15 +3,67 @@
 import java.util.Collection;
 import java.util.List;
 
+import org.codehaus.jackson.annotate.JsonAutoDetect;
+import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
+import org.codehaus.jackson.annotate.JsonIgnore;
+import org.codehaus.jackson.annotate.JsonProperty;
+import org.codehaus.jackson.map.annotate.JsonSerialize;
+import org.codehaus.jackson.map.ser.StdSerializers;
 import org.openflow.protocol.OFPhysicalPort;
 
+import com.tinkerpop.blueprints.Direction;
+import com.tinkerpop.frames.Adjacency;
+import com.tinkerpop.frames.Incidence;
+import com.tinkerpop.frames.Property;
+
 public interface ISwitchStorage extends INetMapStorage {
 	
 	public enum SwitchState {
 		INACTIVE,
 		ACTIVE
 	}
+
+	public interface ISwitchObject {
+		
+		@JsonProperty("dpid")
+		@Property("dpid")
+		public String getDPID();
+		
+		@JsonProperty("state")
+		@Property("state")
+		public String getState();
+		
+		@JsonIgnore
+		@Property("type")
+		public String getType();
+		
+		@JsonProperty("ports")
+		@Adjacency(label="on")
+		public Iterable<IPortObject> getPorts();
+	}
 	
+	public interface IPortObject {
+		
+		@JsonProperty("state")
+		@Property("state")
+		public int getState();
+		
+		@JsonIgnore
+		@Property("type")
+		public String getType();
+		
+		@JsonProperty("number")
+		@Property("number")
+		public Short getNumber();
+		
+		@JsonProperty("desc")
+		@Property("desc")
+		public String getDesc();
+		
+		@JsonIgnore
+		@Incidence(label="on",direction = Direction.IN)
+		public ISwitchObject getSwitch();
+	}
 	/*
 	 * Update the switch details
 	 */
@@ -49,9 +101,9 @@
 	 */
 	public void deletePort(String dpid, String portName);
 	
-	public List<String> getActiveSwitches();
-	public List<String> getAllSwitches();
-	public List<String> getInactiveSwitches();
+	public Iterable<ISwitchObject> getActiveSwitches();
+	public Iterable<ISwitchObject> getAllSwitches();
+	public Iterable<ISwitchObject> getInactiveSwitches();
 	
 	/*
 	 * Initialize
diff --git a/src/main/java/net/floodlightcontroller/core/internal/SwitchStorageImpl.java b/src/main/java/net/floodlightcontroller/core/internal/SwitchStorageImpl.java
index be33659..dbb985e 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/SwitchStorageImpl.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/SwitchStorageImpl.java
@@ -19,6 +19,7 @@
 import com.tinkerpop.blueprints.TransactionalGraph.Conclusion;
 import com.tinkerpop.blueprints.Edge;
 import com.tinkerpop.blueprints.Vertex;
+import com.tinkerpop.frames.FramedGraph;
 import net.floodlightcontroller.core.ISwitchStorage;
 
 public class SwitchStorageImpl implements ISwitchStorage {
@@ -198,15 +199,19 @@
 	}
 
 	@Override
-	public List<String> getActiveSwitches() {
+	public Iterable<ISwitchObject> getActiveSwitches() {
 		// TODO Add unit test
-		List<String> switches = new ArrayList<String>();
-    	for (Vertex V : graph.getVertices("type","switch")) {
-    		if (V.getProperty("state").equals(SwitchState.ACTIVE.toString())) {
-    		     switches.add((String) V.getProperty("dpid"));
-    		}
-    	}
-		return switches;
+		FramedGraph<TitanGraph> fg = new FramedGraph<TitanGraph>(graph);
+		Iterable<ISwitchObject> switches =  fg.getVertices("type","switch",ISwitchObject.class);
+		List<ISwitchObject> activeSwitches = new ArrayList<ISwitchObject>();
+		
+		for (ISwitchObject sw: switches) {
+			if(sw.getState().equals(SwitchState.ACTIVE.toString())) {
+				activeSwitches.add(sw);
+			}
+		}
+  
+		return activeSwitches;
 	}
 
 	@Override
@@ -227,25 +232,32 @@
 	}
 
 	@Override
-	public List<String> getAllSwitches() {
+	public Iterable<ISwitchObject> getAllSwitches() {
 		// TODO Auto-generated method stub
-		List<String> switches = new ArrayList<String>();
-    	for (Vertex V : graph.getVertices("type","switch")) {
-    		switches.add((String) V.getProperty("dpid"));
-    	}
+		FramedGraph<TitanGraph> fg = new FramedGraph<TitanGraph>(graph);
+		Iterable<ISwitchObject> switches =  fg.getVertices("type","switch",ISwitchObject.class);
+
+		for (ISwitchObject sw: switches) {
+			log.debug("switch: {}", sw.getDPID());
+		}
+
 		return switches;
 	}
 
 	@Override
-	public List<String> getInactiveSwitches() {
+	public Iterable<ISwitchObject> getInactiveSwitches() {
 		// TODO Auto-generated method stub
-		List<String> switches = new ArrayList<String>();
-    	for (Vertex V : graph.getVertices("type","switch")) {
-    		if (V.getProperty("state").equals(SwitchState.INACTIVE.toString())) {
-    		     switches.add((String) V.getProperty("dpid"));
-    		}
-    	}
-		return switches;
+		FramedGraph<TitanGraph> fg = new FramedGraph<TitanGraph>(graph);
+		Iterable<ISwitchObject> switches =  fg.getVertices("type","switch",ISwitchObject.class);
+
+		List<ISwitchObject> inActiveSwitches = new ArrayList<ISwitchObject>();
+		
+		for (ISwitchObject sw: switches) {
+			if(sw.getState().equals(SwitchState.INACTIVE.toString())) {
+				inActiveSwitches.add(sw);
+			}
+		}
+		return inActiveSwitches;
 	}
 
 	
diff --git a/src/main/java/net/floodlightcontroller/core/internal/SwitchStorageImplStubs.java b/src/main/java/net/floodlightcontroller/core/internal/SwitchStorageImplStubs.java
deleted file mode 100644
index 88f94db..0000000
--- a/src/main/java/net/floodlightcontroller/core/internal/SwitchStorageImplStubs.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/**
- * 
- */
-package net.floodlightcontroller.core.internal;
-
-import java.util.Collection;
-import java.util.List;
-
-import org.openflow.protocol.OFPhysicalPort;
-
-import net.floodlightcontroller.core.ISwitchStorage;
-
-/**
- * @author pankaj
- *
- */
-public class SwitchStorageImplStubs implements ISwitchStorage {
-
-
-	/* (non-Javadoc)
-	 * @see net.floodlightcontroller.core.ISwitchStorage#addPort(long, org.openflow.protocol.OFPhysicalPort)
-	 */
-	@Override
-	public void addPort(String dpid, OFPhysicalPort port) {
-		// TODO Auto-generated method stub
-
-	}
-
-	/* (non-Javadoc)
-	 * @see net.floodlightcontroller.core.ISwitchStorage#getPorts(long)
-	 */
-	@Override
-	public Collection<OFPhysicalPort> getPorts(long dpid) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see net.floodlightcontroller.core.ISwitchStorage#getPort(long, short)
-	 */
-	@Override
-	public OFPhysicalPort getPort(String dpid, short portnum) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see net.floodlightcontroller.core.ISwitchStorage#getPort(long, java.lang.String)
-	 */
-	@Override
-	public OFPhysicalPort getPort(String dpid, String portName) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see net.floodlightcontroller.core.ISwitchStorage#addSwitch(long)
-	 */
-	@Override
-	public void addSwitch(String dpid) {
-		// TODO Auto-generated method stub
-
-	}
-
-	/* (non-Javadoc)
-	 * @see net.floodlightcontroller.core.ISwitchStorage#deleteSwitch(long)
-	 */
-	@Override
-	public void deleteSwitch(String dpid) {
-		// TODO Auto-generated method stub
-
-	}
-
-	/* (non-Javadoc)
-	 * @see net.floodlightcontroller.core.ISwitchStorage#deletePort(long, short)
-	 */
-	@Override
-	public void deletePort(String dpid, short port) {
-		// TODO Auto-generated method stub
-
-	}
-
-	/* (non-Javadoc)
-	 * @see net.floodlightcontroller.core.ISwitchStorage#deletePort(long, java.lang.String)
-	 */
-	@Override
-	public void deletePort(String dpid, String portName) {
-		// TODO Auto-generated method stub
-
-	}
-
-	/* (non-Javadoc)
-	 * @see net.floodlightcontroller.core.ISwitchStorage#init(java.lang.String)
-	 */
-	@Override
-	public void init(String conf) {
-		// TODO Auto-generated method stub
-
-	}
-
-	@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
-		
-	}
-
-	@Override
-	public List<String> getAllSwitches() {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-	@Override
-	public List<String> getInactiveSwitches() {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-}
diff --git a/src/main/java/net/floodlightcontroller/core/internal/TopoSwitchServiceImpl.java b/src/main/java/net/floodlightcontroller/core/internal/TopoSwitchServiceImpl.java
index 99f291d..0edc35e 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/TopoSwitchServiceImpl.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/TopoSwitchServiceImpl.java
@@ -3,6 +3,7 @@
 import java.util.List;
 
 import net.floodlightcontroller.core.INetMapTopologyService.ITopoSwitchService;
+import net.floodlightcontroller.core.ISwitchStorage.ISwitchObject;
 
 public class TopoSwitchServiceImpl implements ITopoSwitchService {
 	
@@ -19,19 +20,19 @@
 	SwitchStorageImpl swStore = store.get();
 	
 	@Override
-	public List<String> GetActiveSwitches() {
+	public Iterable<ISwitchObject> GetActiveSwitches() {
 		// TODO Auto-generated method stub
 		return swStore.getActiveSwitches();
 	}
 
 	@Override
-	public List<String> GetAllSwitches() {
+	public Iterable<ISwitchObject> GetAllSwitches() {
 		// TODO Auto-generated method stub
 		return swStore.getAllSwitches();
 	}
 
 	@Override
-	public List<String> GetInactiveSwitches() {
+	public Iterable<ISwitchObject> GetInactiveSwitches() {
 		// TODO Auto-generated method stub
 		return swStore.getInactiveSwitches();
 	}
diff --git a/src/main/java/net/floodlightcontroller/core/web/TopoSwitchesResource.java b/src/main/java/net/floodlightcontroller/core/web/TopoSwitchesResource.java
index a73b0b4..11dbcb1 100644
--- a/src/main/java/net/floodlightcontroller/core/web/TopoSwitchesResource.java
+++ b/src/main/java/net/floodlightcontroller/core/web/TopoSwitchesResource.java
@@ -2,6 +2,7 @@
 
 import java.util.Iterator;
 
+import net.floodlightcontroller.core.ISwitchStorage.ISwitchObject;
 import net.floodlightcontroller.core.internal.TopoSwitchServiceImpl;
 
 import org.restlet.resource.Get;
@@ -10,18 +11,18 @@
 public class TopoSwitchesResource extends ServerResource {
 	
 	@Get("json")
-	public Iterator<String> retrieve() {
+	public Iterator<ISwitchObject> retrieve() {
 		TopoSwitchServiceImpl impl = new TopoSwitchServiceImpl();
 		
 		String filter = (String) getRequestAttributes().get("filter");
 		
 		if (filter.equals("active")) {
-			return (Iterator<String>) impl.GetActiveSwitches().iterator();
+			return (Iterator<ISwitchObject>) impl.GetActiveSwitches().iterator();
 		}
 		if (filter.equals("inactive")) {
-			return (Iterator<String>) impl.GetInactiveSwitches().iterator();
+			return (Iterator<ISwitchObject>) impl.GetInactiveSwitches().iterator();
 		}
-		return (Iterator<String>) impl.GetAllSwitches().iterator();				
+		return (Iterator<ISwitchObject>) impl.GetAllSwitches().iterator();				
 	}
 
 }
diff --git a/src/main/java/net/floodlightcontroller/linkdiscovery/ILinkStorage.java b/src/main/java/net/floodlightcontroller/linkdiscovery/ILinkStorage.java
index a764227..eb2fac9 100644
--- a/src/main/java/net/floodlightcontroller/linkdiscovery/ILinkStorage.java
+++ b/src/main/java/net/floodlightcontroller/linkdiscovery/ILinkStorage.java
@@ -42,9 +42,12 @@
 	 *  If only dpid is set all links associated with Switch are retrieved
 	 */
 	public List<Link> getLinks(Long dpid, short port);
+	public List<Link> getLinks(String dpid);
+	public List<Link> getActiveLinks();
 	
 	/*
 	 * Init with Storage conf
 	 */
 	public void init(String conf);
+
 }
diff --git a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkStorageImpl.java b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkStorageImpl.java
index 249d626..70d93c9 100644
--- a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkStorageImpl.java
+++ b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkStorageImpl.java
@@ -207,4 +207,16 @@
 		
 	}
 
+	@Override
+	public List<Link> getLinks(String dpid) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public List<Link> getActiveLinks() {
+		// TODO Auto-generated method stub
+		
+		return null;
+	}
+
 }
diff --git a/web/restapi3.py b/web/restapi3.py
index e1b1c04..546f2a7 100755
--- a/web/restapi3.py
+++ b/web/restapi3.py
@@ -13,7 +13,7 @@
 ## Global Var ##
 RestIP="127.0.0.1"
 RestPort=8182
-DBName="onos-network-map"
+DBName="Cassandra-Netmap"
 
 DEBUG=1
 pp = pprint.PrettyPrinter(indent=4)
@@ -198,8 +198,8 @@
 
   switches_ = []
   for v in parsedResult:
-    if v.has_key('dpid'):
-#    if v.has_key('dpid') and str(v['state']) == "ACTIVE":#;if you want only ACTIVE nodes
+#    if v.has_key('dpid'):
+    if v.has_key('dpid') and str(v['state']) == "ACTIVE":#;if you want only ACTIVE nodes
       dpid = str(v['dpid'])
       state = str(v['state'])
       sw = {}
