diff --git a/cli/cli/c_actions.py b/cli/cli/c_actions.py
index ad709f4..a9ebf0a 100755
--- a/cli/cli/c_actions.py
+++ b/cli/cli/c_actions.py
@@ -1974,10 +1974,26 @@
         print "command_display_rest: result ", result
 
     entries = json.loads(result)
-
+    if 'router' in data  and data['router'] == 'router':
+        combResult = []
+        for entry in entries:
+            attributes = entry.get('stringAttributes')
+            #raise error.ArgumentValidationError('\n\n\n %s' % (attributes))
+            combResult.append({
+                       'dpid'           : entry.get('dpid'),
+                       'routerIP'       : attributes['routerIp'],
+                       'name'           : attributes['name'],
+                       'isEdgeRouter'   : attributes['isEdgeRouter'],
+                       'routerMac'      : attributes['routerMac'],
+                       'nodeSId'        : attributes['nodeSid'],
+                       })
+        entries = combResult
+        #raise error.ArgumentValidationError('\n\n\n %s' % (attributes))
     #if 'realtimestats' in data and data['realtimestats'] == 'group':
 
     entries2 = None
+    
+         
     if 'realtimestats' in data and data['realtimestats'] == 'group':
         url2 = "http://%s/rest/v1/" % sdnsh.controller + ("realtimestats/groupdesc/%(dpid)s/" % data)
         result2 = sdnsh.store.rest_simple_request(url2)
@@ -2024,7 +2040,6 @@
                        'actions'                 : actions,
                     })
         elif data['tabletype'] == 'mpls':
-            import unicodedata
             for ipTableEntry in entries:
                 match = ipTableEntry['match']
                 mplsTc =  '*'
diff --git a/cli/cli/desc/version200/core.py b/cli/cli/desc/version200/core.py
index 0973daf..3c799f7 100755
--- a/cli/cli/desc/version200/core.py
+++ b/cli/cli/desc/version200/core.py
@@ -2494,6 +2494,37 @@
     },
 }
 
+
+
+
+ROUTER_FORMAT = {
+    'router'     : {
+        'field-orderings' : {
+            'default' : ['dpid','name', 'routerIP','routerMac','isEdgeRouter','nodeSId'
+                         ],
+            },
+        'fields': {
+            'dpid'               : { 'verbose-name' : 'RouterDPID',
+                                        #'formatter' : fmtcnv.replace_switch_with_alias
+                                        },
+            'name'                 : { 'verbose-name' : 'RouterName',
+                                       #'formatter' : fmtcnv.decode_port_counter
+                                       },
+            'routerIP'                   : { 'verbose-name' : 'RouterIP',
+                                      },
+            'routerMac'                  : { 'verbose-name' : 'RouterMac',
+                                       #'formatter' : fmtcnv.decode_port_counter
+                                     },
+            'isEdgeRouter'                  : { 'verbose-name' : 'isEdgeRouter',
+                                       #'formatter' : fmtcnv.decode_port_counter
+                                     },
+            'nodeSId'                     : { 'verbose-name' : 'nodeSId',
+                                       #'formatter' : fmtcnv.decode_port_counter
+                                     },
+            }
+        },
+}
+
 """
 SWITCH_CLUSTER_FORMAT = {
     'switch-cluster' : {
diff --git a/cli/sdncon/rest/views.py b/cli/sdncon/rest/views.py
index 545fe98..78f88d2 100755
--- a/cli/sdncon/rest/views.py
+++ b/cli/sdncon/rest/views.py
@@ -722,6 +722,16 @@
     return get_sdnplatform_response(url)        
 
 @safe_rest_view
+def do_routers(request):
+    if onos == 0:
+        url = controller_url("core", "controller", "switches", "json")
+    else:
+        url = controller_url("onos","segmentrouting", "routers")
+    if request.META['QUERY_STRING']:
+        url += '?' + request.META['QUERY_STRING']
+    return get_sdnplatform_response(url)        
+
+@safe_rest_view
 def do_mastership(request):
     url = controller_url("onos", "registry", "switches" ,"json")
     #url = "http://127.0.0.1:8080/wm/onos/registry/switches/json"
diff --git a/cli/sdncon/urls.py b/cli/sdncon/urls.py
index 5d522de..a850a10 100755
--- a/cli/sdncon/urls.py
+++ b/cli/sdncon/urls.py
@@ -70,6 +70,7 @@
     # REST API VNS/device information
     (r'^rest/v1/device', 'sdncon.rest.views.do_device'),
     (r'^rest/v1/switches', 'sdncon.rest.views.do_switches'),
+    (r'^rest/v1/routers', 'sdncon.rest.views.do_routers'),
     (r'^rest/v1/links', 'sdncon.rest.views.do_links'),
     (r'^rest/v1/mastership', 'sdncon.rest.views.do_mastership'),
     (r'^rest/v1/vns/device-interface', 'sdncon.rest.views.do_vns_device_interface'),
diff --git a/src/main/java/net/floodlightcontroller/core/web/serializers/OFFlowStatsEntryModSerializer.java b/src/main/java/net/floodlightcontroller/core/web/serializers/OFFlowStatsEntryModSerializer.java
index f413fd2..6080cb4 100644
--- a/src/main/java/net/floodlightcontroller/core/web/serializers/OFFlowStatsEntryModSerializer.java
+++ b/src/main/java/net/floodlightcontroller/core/web/serializers/OFFlowStatsEntryModSerializer.java
@@ -39,7 +39,6 @@
         
         List<OFInstruction> instructions = flowStatsEntry.getInstructions();
         jGen.writeStartObject();
-        //System.out.println("flowstats:\n\n\n"+ flowStatsEntry);
         jGen.writeNumberField("byteCount", flowStatsEntry.getByteCount().getValue());
         jGen.writeNumberField("packetCount", flowStatsEntry.getPacketCount().getValue());
         jGen.writeNumberField("priority", flowStatsEntry.getPriority());
diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java b/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
index 0a90a89..e3d3470 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
@@ -27,9 +27,11 @@
 import net.floodlightcontroller.core.module.IFloodlightModule;
 import net.floodlightcontroller.core.module.IFloodlightService;
 import net.floodlightcontroller.core.util.SingletonTask;
+import net.floodlightcontroller.restserver.IRestApiService;
 import net.floodlightcontroller.threadpool.IThreadPoolService;
 import net.onrc.onos.api.packet.IPacketListener;
 import net.onrc.onos.api.packet.IPacketService;
+import net.onrc.onos.apps.segmentrouting.web.SegmentRoutingWebRoutable;
 import net.onrc.onos.core.flowprogrammer.IFlowPusherService;
 import net.onrc.onos.core.intent.Path;
 import net.onrc.onos.core.main.config.IConfigInfoService;
@@ -80,7 +82,8 @@
     private static final Logger log = LoggerFactory
             .getLogger(SegmentRoutingManager.class);
 
-        private ITopologyService topologyService;
+    private ITopologyService topologyService;
+    private IRestApiService restApi;
     private IPacketService packetService;
     private MutableTopology mutableTopology;
     private ConcurrentLinkedQueue<IPv4> ipPacketQueue;
@@ -127,6 +130,7 @@
         l.add(IPacketService.class);
         l.add(IFlowPusherService.class);
         l.add(ITopologyService.class);
+        l.add(IRestApiService.class);
 
         return l;
 
@@ -147,6 +151,8 @@
         graphs = new HashMap<Switch, ECMPShortestPathGraph>();
         linksDown = new HashMap<String, LinkData>();
         linksToAdd = new HashMap<String, LinkData>();
+        //topologyLinks = new HashSet<LinkData>();
+        restApi = context.getServiceImpl(IRestApiService.class);
         topologyEventQueue = new ConcurrentLinkedQueue<TopologyEvents>();
 
         this.packetService = context.getServiceImpl(IPacketService.class);
@@ -158,6 +164,7 @@
     @Override
     public void startUp(FloodlightModuleContext context) throws FloodlightModuleException {
         ScheduledExecutorService ses = threadPool.getScheduledExecutor();
+        restApi.addRestletRoutable(new SegmentRoutingWebRoutable());
 
         discoveryTask = new SingletonTask(ses, new Runnable() {
             @Override
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
new file mode 100644
index 0000000..8e79639
--- /dev/null
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/web/RouterStatisticsResource.java
@@ -0,0 +1,42 @@
+package net.onrc.onos.apps.segmentrouting.web;
+
+import java.util.HashMap;
+
+import net.floodlightcontroller.core.web.ControllerSwitchesResource;
+import net.onrc.onos.core.topology.ITopologyService;
+import net.onrc.onos.core.topology.MutableTopology;
+
+import org.restlet.resource.ResourceException;
+import org.restlet.resource.ServerResource;
+import org.restlet.representation.Representation;
+import org.restlet.resource.Get;
+import static net.onrc.onos.core.topology.web.TopologyResource.eval;
+/**
+ * Base class for return router statistics
+ *
+ */
+public class RouterStatisticsResource extends ServerResource {
+    /**
+     * Gets the switches and ports information from the network topology.
+     *
+     * @return a Representation of a Collection of switches from the network
+     * topology. Each switch contains the switch ports.
+     */
+    @Get("json")
+    public Representation retrieve() {
+        ITopologyService topologyService =
+            (ITopologyService) getContext().getAttributes()
+                .get(ITopologyService.class.getCanonicalName());
+
+        MutableTopology mutableTopology = topologyService.getTopology();
+        mutableTopology.acquireReadLock();
+        try {
+            return eval(toRepresentation(mutableTopology.getSwitches(), null));
+        } finally {
+            mutableTopology.releaseReadLock();
+        }
+    }
+ 
+    
+
+}
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
new file mode 100644
index 0000000..3e121d6
--- /dev/null
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRoutingWebRoutable.java
@@ -0,0 +1,28 @@
+package net.onrc.onos.apps.segmentrouting.web;
+
+import org.restlet.Context;
+import org.restlet.Restlet;
+import org.restlet.routing.Router;
+
+import net.floodlightcontroller.restserver.RestletRoutable;
+import net.onrc.onos.core.topology.web.SwitchesResource;
+/**
+ *  Handle all URI's for SegmentRouter web
+ *
+ */
+
+public class SegmentRoutingWebRoutable implements RestletRoutable {
+
+    @Override
+    public Restlet getRestlet(Context context) {
+        Router router = new Router(context);
+        router.attach("/routers",  SwitchesResource.class);
+        return router;
+    }
+
+    @Override
+    public String basePath() {
+        return "/wm/onos/segmentrouting";
+    }
+
+}
