diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/web/RouterStatisticsResource.java b/src/main/java/net/onrc/onos/apps/segmentrouting/web/RouterStatisticsResource.java
index 8e79639..944bf1c 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/web/RouterStatisticsResource.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/web/RouterStatisticsResource.java
@@ -1,15 +1,23 @@
 package net.onrc.onos.apps.segmentrouting.web;
 
-import java.util.HashMap;
 
-import net.floodlightcontroller.core.web.ControllerSwitchesResource;
+import java.util.List;
+import java.util.concurrent.Future;
+
+import net.floodlightcontroller.core.IFloodlightProviderService;
+import net.floodlightcontroller.core.IOFSwitch;
 import net.onrc.onos.core.topology.ITopologyService;
 import net.onrc.onos.core.topology.MutableTopology;
+import net.onrc.onos.core.util.Dpid;
 
-import org.restlet.resource.ResourceException;
+import org.apache.commons.codec.binary.Hex;
+import org.projectfloodlight.openflow.util.HexString;
 import org.restlet.resource.ServerResource;
 import org.restlet.representation.Representation;
 import org.restlet.resource.Get;
+
+import com.esotericsoftware.minlog.Log;
+
 import static net.onrc.onos.core.topology.web.TopologyResource.eval;
 /**
  * Base class for return router statistics
@@ -17,25 +25,50 @@
  */
 public class RouterStatisticsResource extends ServerResource {
     /**
-     * Gets the switches and ports information from the network topology.
+     * Gets the switches/routers and ports information from the network topology.
      *
-     * @return a Representation of a Collection of switches from the network
+     * @return a Representation of a Collection of switches/routers from the network
      * topology. Each switch contains the switch ports.
      */
     @Get("json")
     public Representation retrieve() {
+        String routerId = (String) getRequestAttributes().get("routerId");
+        String statsType = (String) getRequestAttributes().get("statsType");
+        //if (routerId == null && statsType == null){
         ITopologyService topologyService =
-            (ITopologyService) getContext().getAttributes()
+                (ITopologyService) getContext().getAttributes()
                 .get(ITopologyService.class.getCanonicalName());
 
         MutableTopology mutableTopology = topologyService.getTopology();
         mutableTopology.acquireReadLock();
         try {
-            return eval(toRepresentation(mutableTopology.getSwitches(), null));
+            if (routerId == null && statsType == null){
+                return eval(toRepresentation(mutableTopology.getSwitches(), null));
+        }
+            else if(routerId != null && statsType == "port"){
+                Log.debug("\n\n\nGot router port stats request\n\n\n");
+                System.out.println("\n\n\nGot router port stats request\n\n\n");
+                Long rId = HexString.toLong(routerId);
+                return eval(toRepresentation(mutableTopology.getSwitch(new Dpid(rId)), null));
+            }
         } finally {
             mutableTopology.releaseReadLock();
         }
+      //  }
+        /*else if(routerId != null && statsType == "port"){
+            Long rId = HexString.toLong(routerId);
+            IFloodlightProviderService floodlightProvider =
+                    (IFloodlightProviderService) getContext().getAttributes().
+                    get(IFloodlightProviderService.class.getCanonicalName());
+            IOFSwitch sw = floodlightProvider.getSwitches().get(rId);
+            Future<List<OFStatsReply>> future;
+            List<OFStatsReply> values = null;
+            
+        }*/
+    return null;
     }
+    
+        
  
     
 
diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRoutingWebRoutable.java b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRoutingWebRoutable.java
index 3e121d6..668a1ca 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRoutingWebRoutable.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRoutingWebRoutable.java
@@ -16,7 +16,9 @@
     @Override
     public Restlet getRestlet(Context context) {
         Router router = new Router(context);
-        router.attach("/routers",  SwitchesResource.class);
+        //TODO: rewrite SwitchesResource for router specific info.
+        router.attach("/routers",  RouterStatisticsResource.class);
+        router.attach("/router/{routerId}/{statsType}",  RouterStatisticsResource.class);
         return router;
     }
 
