diff --git a/cli/cli/desc/version200/policy.py b/cli/cli/desc/version200/policy.py
index 9bf94df..1ddd33c 100644
--- a/cli/cli/desc/version200/policy.py
+++ b/cli/cli/desc/version200/policy.py
@@ -114,7 +114,7 @@
                 #'dest-ip'      : 'src-ip',
                 #'dest-netmask' : 'src-ip-mask',
                 'data'         : {
-                                  'dst_ip'      : '0.0.0.0/32',
+                                  'dst_ip'      : '0.0.0.0/0',
                                  },
                 'doc'          : 'vns|vns-access-list-cidr-range',
             }
@@ -123,8 +123,8 @@
             {
                 'token'  : 'any',
                 'data'   : {
-                              'src_ip'      : '0.0.0.0/32',
-                              'dst_ip'      : '0.0.0.0/32',
+                              'src_ip'      : '0.0.0.0/0',
+                              'dst_ip'      : '0.0.0.0/0',
                            },
                 'doc'    : 'vns|vns-access-list-ip-any',
             }
@@ -178,7 +178,7 @@
             {
                 'token'  : 'any',
                 'data'   : {
-                              'dst_ip'      : '0.0.0.0/32',
+                              'dst_ip'      : '0.0.0.0/0',
                            },
                 'doc'    : 'vns|vns-access-list-ip-any',
             }
diff --git a/cli/cli/desc/version200/tunnel.py b/cli/cli/desc/version200/tunnel.py
index 29f1044..67a37ab 100644
--- a/cli/cli/desc/version200/tunnel.py
+++ b/cli/cli/desc/version200/tunnel.py
@@ -66,23 +66,20 @@
 
 def tunnel_adjacency_label_completion(prefix, data, completions):
     #print "tunnel_adjacency_label_completion:",prefix,data,completions
-    query_url = "http://127.0.0.1:8000/rest/v1/switches"
-    result = command.sdnsh.store.rest_simple_request(query_url)
-    entries = json.loads(result)
-    for entry in entries:
-        if (int(entry['stringAttributes']['nodeSid']) != int(data['node-label'])):
-            continue
-        adjacencySids = entry['stringAttributes']['adjacencySids']
-        #print "adjacencySids=",adjacencySids
-        for subs in adjacencySids.split('}'):
-            pair = subs.split('adjSid\":')
-            if len(pair) < 2:
-                continue
-            adjacency_label = pair[1]
-            #adjacency_label = entry['stringAttributes']['nodeSid'] + ':' + pair[1]
-            #print "adjacency_label=",adjacency_label 
-            if adjacency_label.startswith(prefix):
-                completions[adjacency_label+' '] = adjacency_label
+    query_url1 = "http://127.0.0.1:8000/rest/v1/switches"
+    result1 = command.sdnsh.store.rest_simple_request(query_url1)
+    entries1 = json.loads(result1)
+    node_dpid = None
+    for entry in entries1:
+        if (int (entry['stringAttributes']['nodeSid']) == int(data['node-label'])):
+            node_dpid = entry['dpid']
+    if (node_dpid != None):
+        query_url2 = "http://127.0.0.1:8000/rest/v1/router/"+node_dpid+"/adjacency"
+        result2 = command.sdnsh.store.rest_simple_request(query_url2)
+        entries2 = json.loads(result2)
+        for entry in entries2:
+            if str(entry.get("adjacencySid")).startswith(prefix):
+                completions[str(entry.get("adjacencySid"))+' '] = entry.get("adjacencySid")
     return
 
 command.add_completion('tunnel-adjacency-label-completion', tunnel_adjacency_label_completion,
diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterPolicyResource.java b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterPolicyResource.java
index 6c24901..f1ad1ec 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterPolicyResource.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterPolicyResource.java
@@ -53,10 +53,13 @@
                 createParams.getSrc_tp_port(), createParams.getDst_tp_port(),
                 createParams.getPriority(), createParams.getTunnel_id());
 
+        IPv4Net src_ip = (createParams.getSrc_ip() != null) ?
+                new IPv4Net(createParams.getSrc_ip()) : null;
+        IPv4Net dst_ip = (createParams.getDst_ip() != null) ?
+                new IPv4Net(createParams.getDst_ip()) : null;
         boolean result = segmentRoutingService.createPolicy(
                 createParams.getPolicy_id(), null, null, null,
-                new IPv4Net(createParams.getSrc_ip()),
-                new IPv4Net(createParams.getDst_ip()),
+                src_ip, dst_ip,
                 getProtoTypeByte(createParams.getProto_type()),
                 createParams.getSrc_tp_port(),
                 createParams.getDst_tp_port(),
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 621a6cd..0dc9b78 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
@@ -47,7 +47,7 @@
         try {
             if (routerId == null && statsType == null){
                 return eval(toRepresentation(mutableTopology.getSwitches(), null));
-        }
+            }
             else if(routerId != null && statsType.equals("port")){
                 Switch sw = mutableTopology
                 .getSwitch(new Dpid(HexString.toLong(routerId)));
