diff --git a/src/main/java/net/floodlightcontroller/core/INetMapTopologyObjects.java b/src/main/java/net/floodlightcontroller/core/INetMapTopologyObjects.java
index d0cf90f..a54136c 100644
--- a/src/main/java/net/floodlightcontroller/core/INetMapTopologyObjects.java
+++ b/src/main/java/net/floodlightcontroller/core/INetMapTopologyObjects.java
@@ -21,6 +21,7 @@
 	@JsonProperty("state")
 	@Property("state")
 	public String getState();
+	
 	@Property("state")
 	public void setState(final String state);
 	
diff --git a/src/main/java/net/floodlightcontroller/core/internal/SwitchStorageImpl.java b/src/main/java/net/floodlightcontroller/core/internal/SwitchStorageImpl.java
index 3cb8163..0e43ed2 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/SwitchStorageImpl.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/SwitchStorageImpl.java
@@ -88,7 +88,8 @@
             		Vertex p = graph.addVertex(null);
             		p.setProperty("type","port");
             		p.setProperty("number",port.getPortNumber());
-            		p.setProperty("state",port.getState());
+            		p.setProperty("state", "ACTIVE");
+            		p.setProperty("port_state",port.getState());
             		p.setProperty("desc",port.getName());
             		Edge e = graph.addEdge(null, sw, p, "on");
             		e.setProperty("state","ACTIVE");
diff --git a/src/main/java/net/floodlightcontroller/core/web/TopoSwitchesResource.java b/src/main/java/net/floodlightcontroller/core/web/TopoSwitchesResource.java
index c5b7e66..7a8511b 100644
--- a/src/main/java/net/floodlightcontroller/core/web/TopoSwitchesResource.java
+++ b/src/main/java/net/floodlightcontroller/core/web/TopoSwitchesResource.java
@@ -17,12 +17,12 @@
 		String filter = (String) getRequestAttributes().get("filter");
 		
 		if (filter.equals("active")) {
-			return (Iterator<ISwitchObject>) impl.GetActiveSwitches().iterator();
+			return (Iterator<ISwitchObject>) impl.getActiveSwitches().iterator();
 		}
 		if (filter.equals("inactive")) {
-			return (Iterator<ISwitchObject>) impl.GetInactiveSwitches().iterator();
+			return (Iterator<ISwitchObject>) impl.getInactiveSwitches().iterator();
 		} else {
-		    return (Iterator<ISwitchObject>) impl.GetAllSwitches().iterator();
+		    return (Iterator<ISwitchObject>) impl.getAllSwitches().iterator();
 		}
 	}
 
diff --git a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkStorageImpl.java b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkStorageImpl.java
index 966e180..503f2f3 100644
--- a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkStorageImpl.java
+++ b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkStorageImpl.java
@@ -224,7 +224,7 @@
 
 		ITopoSwitchService swService = new TopoSwitchServiceImpl();
 		
-		Iterable<ISwitchObject> switches = swService.GetActiveSwitches();
+		Iterable<ISwitchObject> switches = swService.getActiveSwitches();
 
 		List<Link> links = new ArrayList<Link>(); 
 		for (ISwitchObject sw : switches) {
diff --git a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/TopoLinkServiceImpl.java b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/TopoLinkServiceImpl.java
index 2dbb338..c452fcd 100644
--- a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/TopoLinkServiceImpl.java
+++ b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/TopoLinkServiceImpl.java
@@ -19,14 +19,14 @@
  
 	LinkStorageImpl linkStore = store.get();
 	@Override
-	public List<Link> GetActiveLinks() {
+	public List<Link> getActiveLinks() {
 		// TODO Auto-generated method stub
 		List<Link> retval = linkStore.getActiveLinks();
 		return retval;
 	}
 
 	@Override
-	public List<Link> GetLinksOnSwitch(String dpid) {
+	public List<Link> getLinksOnSwitch(String dpid) {
 		// TODO Auto-generated method stub
 		return linkStore.getLinks(dpid);
 	}
diff --git a/src/main/java/net/floodlightcontroller/linkdiscovery/web/TopoLinksResource.java b/src/main/java/net/floodlightcontroller/linkdiscovery/web/TopoLinksResource.java
index a0770cb..25b68fb 100644
--- a/src/main/java/net/floodlightcontroller/linkdiscovery/web/TopoLinksResource.java
+++ b/src/main/java/net/floodlightcontroller/linkdiscovery/web/TopoLinksResource.java
@@ -13,7 +13,7 @@
     public List<Link> retrieve() {
 		TopoLinkServiceImpl impl = new TopoLinkServiceImpl();
 		
-		List<Link> retval = impl.GetActiveLinks();
+		List<Link> retval = impl.getActiveLinks();
 		return retval;
 	}
 
diff --git a/src/main/java/net/floodlightcontroller/routing/TopoRouteService.java b/src/main/java/net/floodlightcontroller/routing/TopoRouteService.java
index 90fdb6e..2c50d29 100644
--- a/src/main/java/net/floodlightcontroller/routing/TopoRouteService.java
+++ b/src/main/java/net/floodlightcontroller/routing/TopoRouteService.java
@@ -33,7 +33,7 @@
 	SwitchStorageImpl swStore = store.get();
 
 	@Override
-	public List<NodePortTuple> GetShortestPath(NodePortTuple src,
+	public List<NodePortTuple> getShortestPath(NodePortTuple src,
 			NodePortTuple dest) {
 	    List<NodePortTuple> result_list = new ArrayList<NodePortTuple>();
 
@@ -145,8 +145,8 @@
 	}
 
 	@Override
-	public Boolean RouteExists(NodePortTuple src, NodePortTuple dest) {
-		List<NodePortTuple> route = GetShortestPath(src, dest);
+	public Boolean routeExists(NodePortTuple src, NodePortTuple dest) {
+		List<NodePortTuple> route = getShortestPath(src, dest);
 		if (route != null)
 		    return true;
 		return false;
diff --git a/src/main/java/net/floodlightcontroller/routing/TopoRouteServiceImpl.java b/src/main/java/net/floodlightcontroller/routing/TopoRouteServiceImpl.java
index 42ce6a8..2ba6097 100644
--- a/src/main/java/net/floodlightcontroller/routing/TopoRouteServiceImpl.java
+++ b/src/main/java/net/floodlightcontroller/routing/TopoRouteServiceImpl.java
@@ -8,14 +8,14 @@
 public class TopoRouteServiceImpl implements ITopoRouteService {
 
 	@Override
-	public List<NodePortTuple> GetShortestPath(NodePortTuple src,
+	public List<NodePortTuple> getShortestPath(NodePortTuple src,
 			NodePortTuple dest) {
 		// TODO Auto-generated method stub
 		return null;
 	}
 
 	@Override
-	public Boolean RouteExists(NodePortTuple src, NodePortTuple dest) {
+	public Boolean routeExists(NodePortTuple src, NodePortTuple dest) {
 		// TODO Auto-generated method stub
 		return null;
 	}
diff --git a/src/main/java/net/floodlightcontroller/topology/web/RouteResource.java b/src/main/java/net/floodlightcontroller/topology/web/RouteResource.java
index fe33f47..fd9d201 100644
--- a/src/main/java/net/floodlightcontroller/topology/web/RouteResource.java
+++ b/src/main/java/net/floodlightcontroller/topology/web/RouteResource.java
@@ -51,7 +51,7 @@
         }
 	*/
 	List<NodePortTuple> result =
-	    onos_routing.GetShortestPath(new NodePortTuple(longSrcDpid, shortSrcPort),
+	    onos_routing.getShortestPath(new NodePortTuple(longSrcDpid, shortSrcPort),
 					 new NodePortTuple(longDstDpid, shortDstPort));
 	if ((result != null) && (result.size() > 0)) {
 	    return result;
