diff --git a/cli/cli/c_actions.py b/cli/cli/c_actions.py
index fd741e0..2d87f44 100755
--- a/cli/cli/c_actions.py
+++ b/cli/cli/c_actions.py
@@ -2142,7 +2142,7 @@
         for port in portList:
             portData = port.get("port")
             name = portData.get("stringAttributes").get('name')
-            portNo = portData.get("portNumber")
+            portNo = portData.get("portNumber") & 0xFFFF # converting to unsigned16int
             subnetIp = port.get("subnetIp")
             adjacency = str(port.get('adjacency'))
             combResult.append({
diff --git a/cli/cli/desc/version200/core.py b/cli/cli/desc/version200/core.py
index 26c6fdb..f84d114 100755
--- a/cli/cli/desc/version200/core.py
+++ b/cli/cli/desc/version200/core.py
@@ -2054,11 +2054,11 @@
                                  },
             'flowEntryCnt'     : { 'verbose-name' : 'Flow-Entries'
                                  },
-            'mplsTc'           : { 'verbose-name' : 'MPLS_TC'
+            'mplsTc'           : { 'verbose-name' : 'MPLS TC'
                                  },
-            'mplsLabel'        : { 'verbose-name' : 'MPLS_Label'
+            'mplsLabel'        : { 'verbose-name' : 'MPLS Label'
                                  },
-            'mplsBos'          : { 'verbose-name' : 'MPLS_BOS'
+            'mplsBos'          : { 'verbose-name' : 'MPLS BOS'
                                  },
             }
         },
@@ -2186,11 +2186,11 @@
                                  },
             'flowEntryCnt'     : { 'verbose-name' : 'Flow-Entries'
                                  },
-            'mplsTc'           : { 'verbose-name' : 'MPLS_TC'
+            'mplsTc'           : { 'verbose-name' : 'MPLS TC'
                                  },
-            'mplsLabel'        : { 'verbose-name' : 'MPLS_LABEL'
+            'mplsLabel'        : { 'verbose-name' : 'MPLS LABEL'
                                  },
-            'mplsBos'          : { 'verbose-name' : 'MPLS_BOS'
+            'mplsBos'          : { 'verbose-name' : 'MPLS BOS'
                                  },
             }
         },
@@ -2360,17 +2360,17 @@
             'bucketbytecnt'       : { 'verbose-name' : 'Bucket Bytes',
                                        'formatter' : fmtcnv.decode_port_counter
                                      },
-            'setsrcmac'           : { 'verbose-name' : 'set_src_mac',
+            'setsrcmac'           : { 'verbose-name' : 'Set Src Mac',
                                       },
-            'setdstmac'           : { 'verbose-name' : 'set_dst_mac',
+            'setdstmac'           : { 'verbose-name' : 'Set Dst Mac',
                                       },
-            'pushMplsLabel'            : { 'verbose-name' : 'push_mpls',
+            'pushMplsLabel'            : { 'verbose-name' : 'Push Mpls',
                                      },
-            'setBos'              : { 'verbose-name' : 'setBos',
+            'setBos'              : { 'verbose-name' : 'Set Bos',
                                      },
-            'outport'             : { 'verbose-name' : 'outport',
+            'outport'             : { 'verbose-name' : 'Outport',
                                      },
-            'goToGroup'           : { 'verbose-name' : 'goToGroup',
+            'goToGroup'           : { 'verbose-name' : 'Go To Group',
                                     },
             }
         },
@@ -2441,6 +2441,23 @@
                                                },
                        'policyType'         : { 'verbose-name': 'Policy Type',
                                                },
+                       'dstMacAddress'         : { 'verbose-name': 'Dst Mac',
+                                               },
+                       'srcMacAddress'         : { 'verbose-name': 'Src Mac',
+                                               },
+                       'dstIpAddress'         : { 'verbose-name': 'Dst IP',
+                                               },
+                       'srcIpAddress'         : { 'verbose-name': 'Src IP',
+                                               },
+                       'dstTcpPortNumber'         : { 'verbose-name': 'Dst TcpPort',
+                                               },
+                       'srcTcpPortNumber'         : { 'verbose-name': 'Src TcpPort',
+                                               },
+                       'etherType'         : { 'verbose-name': 'Ether Type',
+                                               },
+
+                       'ipProtocolNumber'         : { 'verbose-name': 'IP Protocol',
+                                               },
                                                }
         },
 }
diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterResource.java b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterResource.java
index a34f47a..621a6cd 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterResource.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterResource.java
@@ -21,7 +21,6 @@
 import net.sf.json.JSONObject;
 
 import org.projectfloodlight.openflow.util.HexString;
-import org.restlet.representation.Representation;
 import org.restlet.resource.Get;
 import org.restlet.resource.ServerResource;
 /**
@@ -136,13 +135,6 @@
                     result.add( new SegmentRouterAdjacencyInfo(adj,
                             adjPortInfo.get(adj)));
                 }
-                /*HashMap<String,HashMap<Integer, List<Integer>>> dpidAdjPortMap = 
-                        new HashMap<String,HashMap<Integer, List<Integer>>>();
-                dpidAdjPortMap.put(routerId, adjPortInfo);
-                List<HashMap<String,HashMap<Integer, List<Integer>>>> result = 
-                        new ArrayList<HashMap<String,HashMap<Integer, List<Integer>>>>();
-                result.add(dpidAdjPortMap);*/
-                
                 return  result;
             }
         } finally {
