diff --git a/cli/cli/c_actions.py b/cli/cli/c_actions.py
index 92bea37..ce1c9cb 100755
--- a/cli/cli/c_actions.py
+++ b/cli/cli/c_actions.py
@@ -117,7 +117,7 @@
     tunnel_id=data['tunnel-id']
     url_str = "http://%s/rest/v1/tunnel/" % (sdnsh.controller)
     obj_data = {}
-    obj_data['tunnel-id']=data['tunnel_id']
+    obj_data['tunnel_id']=data['tunnel-id']
     data = sdnsh.store.rest_post_request(url_str,obj_data,'DELETE')
     if data != "deleted":
         result = json.loads(data)
@@ -131,7 +131,7 @@
         print "policy_create:" , data
     if data.has_key('policy-id'):
         policy_obj_data['policy_id'] = data['policy-id']
-    if data.has_key('src-ip'):
+    if data.has_key('src_ip'):
         for key in data:
             policy_obj_data[key] = data[key]
     if data.has_key('priority'):
@@ -164,7 +164,7 @@
     policy_id=data['policy-id']
     url_str = "http://%s/rest/v1/policy/" % (sdnsh.controller)
     obj_data = {}
-    obj_data['policy-id']=data['policy-id']
+    obj_data['policy_id']=data['policy-id']
     data = sdnsh.store.rest_post_request(url_str,obj_data,'DELETE')
     if data != "deleted":
         result = json.loads(data)
diff --git a/cli/cli/desc/version200/switch.py b/cli/cli/desc/version200/switch.py
index 9062f70..70ff54b 100755
--- a/cli/cli/desc/version200/switch.py
+++ b/cli/cli/desc/version200/switch.py
@@ -155,14 +155,14 @@
     'choices' : (
         (
             {
-                'field'        : 'src-ip',
+                'field'        : 'src_ip',
                 'type'         : 'cidr-range',
                 'help-name'    : 'src-cidr',
                 #'data-handler' : 'split-cidr-data-inverse',
                 #'dest-ip'      : 'src-ip',
                 #'dest-netmask' : 'src-ip-mask',
                 'data'         : {
-                                  'dst-ip'      : '0.0.0.0/32',
+                                  'dst_ip'      : '0.0.0.0/32',
                                  },
                 'doc'          : 'vns|vns-access-list-cidr-range',
             }
@@ -171,8 +171,8 @@
             {
                 'token'  : 'any',
                 'data'   : {
-                              'src-ip'      : '0.0.0.0/32',
-                              'dst-ip'      : '0.0.0.0/32',
+                              'src_ip'      : '0.0.0.0/32',
+                              'dst_ip'      : '0.0.0.0/32',
                            },
                 'doc'    : 'vns|vns-access-list-ip-any',
             }
@@ -182,7 +182,7 @@
 
 SRC_PORT_MATCH = (
     {
-        'field'  : 'src-tp-port-op',
+        'field'  : 'src_tp_port_op',
         'type'   : 'enum',
         'values' : ('eq', 'neq'),
         'doc'    : 'vns|vns-access-list-port-op-+',
@@ -190,7 +190,7 @@
     {
         'choices' : (
             {
-                'field'        : 'src-tp-port',
+                'field'        : 'src_tp_port',
                 'base-type'    : 'hex-or-decimal-integer',
                 'range'        : (0,65535),
                 'data-handler' : 'hex-to-integer',
@@ -198,7 +198,7 @@
                 'doc-include'  : [ 'range' ],
             },
             {
-                'field'   : 'src-tp-port',
+                'field'   : 'src_tp_port',
                 'type'    : 'enum',
                 'values'  : fmtcnv.tcp_name_to_number_dict,
                 'permute' : 'skip',
@@ -213,7 +213,7 @@
     'choices' : (
         (
             {
-                'field'        : 'dst-ip',
+                'field'        : 'dst_ip',
                 'type'         : 'cidr-range',
                 'help-name'    : 'dst-cidr',
                 #'data-handler' : 'split-cidr-data-inverse',
@@ -226,7 +226,7 @@
             {
                 'token'  : 'any',
                 'data'   : {
-                              'dst-ip'      : '0.0.0.0/32',
+                              'dst_ip'      : '0.0.0.0/32',
                            },
                 'doc'    : 'vns|vns-access-list-ip-any',
             }
@@ -237,7 +237,7 @@
 
 DST_PORT_MATCH = (
     {
-        'field' : 'dst-tp-port-op',
+        'field' : 'dst_tp_port_op',
         'type'  : 'enum',
         'values' : ('eq', 'neq'),
         'doc'          : 'vns|vns-access-list-port-op+',
@@ -245,14 +245,14 @@
     {
         'choices' : (
             {
-                'field'        : 'dst-tp-port',
+                'field'        : 'dst_tp_port',
                 'base-type'    : 'hex-or-decimal-integer',
                 'range'        : (0,65535),
                 'data-handler' : 'hex-to-integer',
                 'doc'          : 'vns|vns-access-list-port-hex',
             },
             {
-                'field'   : 'dst-tp-port',
+                'field'   : 'dst_tp_port',
                 'type'    : 'enum',
                 'values'  : fmtcnv.tcp_name_to_number_dict,
                 'permute' : 'skip'
@@ -280,13 +280,13 @@
                 {
                     'choices' : (
                         {
-                            'field'  : 'type',
+                            'field'  : 'proto_type',
                             'type'   : 'enum',
                             'values' : ('ip','tcp','udp'),
                             'doc'    : 'vns|vns-access-list-entry-type-+',
                         },
                         {
-                            'field'        : 'type',
+                            'field'        : 'proto_type',
                             'base-type'    : 'hex-or-decimal-integer',
                             'range'        : (0,255),
                             'help-name'    : 'ip protocol',
diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterPolicyRESTParams.java b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterPolicyRESTParams.java
new file mode 100644
index 0000000..d0a34b0
--- /dev/null
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterPolicyRESTParams.java
@@ -0,0 +1,108 @@
+package net.onrc.onos.apps.segmentrouting.web;
+
+
+public class SegmentRouterPolicyRESTParams {
+    private String policy_id;
+    private int priority;
+    private String tunnel_id;
+    private String proto_type;
+    private String src_ip;
+    private String src_tp_port_op;
+    private short src_tp_port;
+    private String dst_ip;
+    private String dst_tp_port_op;
+    private short dst_tp_port;
+
+    public SegmentRouterPolicyRESTParams() {
+        this.policy_id = null;
+        this.priority = 0;
+        this.tunnel_id = null;
+        this.proto_type = null;
+        this.src_ip = null;
+        this.src_tp_port_op = null;
+        this.src_tp_port = 0;
+        this.dst_ip = null;
+        this.dst_tp_port_op = null;
+        this.dst_tp_port = 0;
+    }
+
+    public void setPolicy_id(String policy_id) {
+        this.policy_id = policy_id;
+    }
+
+    public String getPolicy_id() {
+        return this.policy_id;
+    }
+
+    public void setPriority(int priority) {
+        this.priority = priority;
+    }
+
+    public int getPriority() {
+        return this.priority;
+    }
+
+    public void setTunnel_id(String tunnel_id) {
+        this.tunnel_id = tunnel_id;
+    }
+
+    public String getTunnel_id() {
+        return this.tunnel_id;
+    }
+
+    public void setProto_type(String proto_type) {
+        this.proto_type = proto_type;
+    }
+
+    public String getProto_type() {
+        return this.proto_type;
+    }
+
+    public void setSrc_ip(String src_ip) {
+        this.src_ip = src_ip;
+    }
+
+    public String getSrc_ip() {
+        return this.src_ip;
+    }
+
+    public void setSrc_tp_port_op(String src_tp_port_op) {
+        this.src_tp_port_op = src_tp_port_op;
+    }
+
+    public String getSrc_tp_port_op() {
+        return this.src_tp_port_op;
+    }
+
+    public void setSrc_tp_port(short src_tp_port) {
+        this.src_tp_port = src_tp_port;
+    }
+
+    public short getSrc_tp_port() {
+        return this.src_tp_port;
+    }
+
+    public void setDst_ip(String dst_ip) {
+        this.dst_ip = dst_ip;
+    }
+
+    public String getDst_ip() {
+        return this.dst_ip;
+    }
+
+    public void setDst_tp_port_op(String dst_tp_port_op) {
+        this.dst_tp_port_op = dst_tp_port_op;
+    }
+
+    public String getDst_tp_port_op() {
+        return this.dst_tp_port_op;
+    }
+
+    public void setDst_tp_port(short dst_tp_port) {
+        this.dst_tp_port = dst_tp_port;
+    }
+
+    public short getDst_tp_port() {
+        return this.dst_tp_port;
+    }
+}
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 f91cc7d..694258c 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
@@ -1,5 +1,12 @@
 package net.onrc.onos.apps.segmentrouting.web;
 
+import java.io.IOException;
+
+import net.onrc.onos.apps.segmentrouting.ISegmentRoutingService;
+import net.onrc.onos.core.packet.IPv4;
+import net.onrc.onos.core.util.IPv4Net;
+
+import org.codehaus.jackson.map.ObjectMapper;
 import org.restlet.resource.Delete;
 import org.restlet.resource.Get;
 import org.restlet.resource.Post;
@@ -17,16 +24,74 @@
 
     @Post("json")
     public String createPolicy(String policyParams) {
-        String reply = "success";
-        log.debug("createPolicy with params {}", policyParams);
-        return reply;
+        ISegmentRoutingService segmentRoutingService =
+                (ISegmentRoutingService) getContext().getAttributes().
+                        get(ISegmentRoutingService.class.getCanonicalName());
+        ObjectMapper mapper = new ObjectMapper();
+        SegmentRouterPolicyRESTParams createParams = null;
+        try {
+            if (policyParams != null) {
+                createParams = mapper.readValue(policyParams,
+                        SegmentRouterPolicyRESTParams.class);
+            }
+        } catch (IOException ex) {
+            log.error("Exception occurred parsing inbound JSON", ex);
+            return "fail";
+        }
+
+        log.debug("createPolicy with params id {} src_ip {} dst_ip {}"
+                + "proto {} src_port {} dst_port {} priority {} tunnel_id {}",
+                createParams.getPolicy_id(), createParams.getSrc_ip(),
+                createParams.getDst_ip(), createParams.getProto_type(),
+                createParams.getSrc_tp_port(), createParams.getDst_tp_port(),
+                createParams.getPriority(), createParams.getTunnel_id());
+
+        boolean result = segmentRoutingService.createPolicy(
+                createParams.getPolicy_id(), null, null, (short) 0,
+                new IPv4Net(createParams.getSrc_ip()),
+                new IPv4Net(createParams.getDst_ip()),
+                getProtoTypeByte(createParams.getProto_type()),
+                createParams.getSrc_tp_port(),
+                createParams.getDst_tp_port(),
+                createParams.getPriority(),
+                createParams.getTunnel_id());
+        return (result == true) ? "success" : "fail";
+    }
+
+    private Byte getProtoTypeByte(String protoType) {
+        Byte protoTypeByte = 0;
+        switch (protoType) {
+        case "tcp":
+            protoTypeByte = IPv4.PROTOCOL_TCP;
+            break;
+        case "udp":
+            protoTypeByte = IPv4.PROTOCOL_UDP;
+            break;
+        }
+        return protoTypeByte;
     }
 
     @Delete("json")
-    public String deletePolicy(String policyId) {
-        String reply = "deleted";
-        log.debug("deletePolicy with Id {}", policyId);
-        return reply;
+    public String deletePolicy(String policyParams) {
+        ISegmentRoutingService segmentRoutingService =
+                (ISegmentRoutingService) getContext().getAttributes().
+                        get(ISegmentRoutingService.class.getCanonicalName());
+        ObjectMapper mapper = new ObjectMapper();
+        SegmentRouterPolicyRESTParams createParams = null;
+        try {
+            if (policyParams != null) {
+                createParams = mapper.readValue(policyParams,
+                        SegmentRouterPolicyRESTParams.class);
+            }
+        } catch (IOException ex) {
+            log.error("Exception occurred parsing inbound JSON", ex);
+            return "fail";
+        }
+
+        log.debug("deletePolicy with Id {}", createParams.getPolicy_id());
+        boolean result = segmentRoutingService.removePolicy(
+                createParams.getPolicy_id());
+        return (result == true) ? "deleted" : "fail";
     }
 
     @Get("json")
diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/web/TunnelCreateParams.java b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterTunnelRESTParams.java
similarity index 86%
rename from src/main/java/net/onrc/onos/apps/segmentrouting/web/TunnelCreateParams.java
rename to src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterTunnelRESTParams.java
index fb3a00d..4248b24 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/web/TunnelCreateParams.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterTunnelRESTParams.java
@@ -2,11 +2,11 @@
 
 import java.util.List;
 
-public class TunnelCreateParams {
+public class SegmentRouterTunnelRESTParams {
     private String tunnel_id;
     private List<String> tunnel_path;
 
-    public TunnelCreateParams() {
+    public SegmentRouterTunnelRESTParams() {
         this.tunnel_id = null;
         this.tunnel_path = null;
     }
diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterTunnelResource.java b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterTunnelResource.java
index 71cfc05..3c19a21 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterTunnelResource.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterTunnelResource.java
@@ -39,10 +39,11 @@
                 (ISegmentRoutingService) getContext().getAttributes().
                         get(ISegmentRoutingService.class.getCanonicalName());
         ObjectMapper mapper = new ObjectMapper();
-        TunnelCreateParams createParams = null;
+        SegmentRouterTunnelRESTParams createParams = null;
         try {
             if (tunnelParams != null) {
-                createParams = mapper.readValue(tunnelParams, TunnelCreateParams.class);
+                createParams = mapper.readValue(tunnelParams,
+                        SegmentRouterTunnelRESTParams.class);
             }
         } catch (IOException ex) {
             log.error("Exception occurred parsing inbound JSON", ex);
@@ -60,10 +61,25 @@
     }
 
     @Delete("json")
-    public String deleteTunnel(String tunnelId) {
-        String reply = "deleted";
-        log.debug("deleteTunnel with Id {}", tunnelId);
-        return reply;
+    public String deleteTunnel(String tunnelParams) {
+        ISegmentRoutingService segmentRoutingService =
+                (ISegmentRoutingService) getContext().getAttributes().
+                        get(ISegmentRoutingService.class.getCanonicalName());
+        ObjectMapper mapper = new ObjectMapper();
+        SegmentRouterTunnelRESTParams createParams = null;
+        try {
+            if (tunnelParams != null) {
+                createParams = mapper.readValue(tunnelParams,
+                        SegmentRouterTunnelRESTParams.class);
+            }
+        } catch (IOException ex) {
+            log.error("Exception occurred parsing inbound JSON", ex);
+            return "fail";
+        }
+        log.debug("deleteTunnel with Id {}", createParams.getTunnel_id());
+        boolean result = segmentRoutingService.removeTunnel(
+                createParams.getTunnel_id());
+        return (result == true) ? "deleted" : "fail";
     }
 
     @Get("json")
