diff --git a/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/cli/PseudowireAddCommand.java b/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/cli/PseudowireAddCommand.java
index d916823..ab80aff 100644
--- a/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/cli/PseudowireAddCommand.java
+++ b/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/cli/PseudowireAddCommand.java
@@ -19,8 +19,17 @@
 import org.apache.karaf.shell.commands.Argument;
 import org.apache.karaf.shell.commands.Command;
 import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.net.ConnectPoint;
 import org.onosproject.segmentrouting.SegmentRoutingService;
+import org.onosproject.segmentrouting.pwaas.DefaultL2Tunnel;
+import org.onosproject.segmentrouting.pwaas.DefaultL2TunnelDescription;
+import org.onosproject.segmentrouting.pwaas.DefaultL2TunnelPolicy;
+import org.onosproject.segmentrouting.pwaas.L2Tunnel;
+import org.onosproject.segmentrouting.pwaas.L2TunnelDescription;
 import org.onosproject.segmentrouting.pwaas.L2TunnelHandler;
+import org.onosproject.segmentrouting.pwaas.L2TunnelPolicy;
+
+import static org.onosproject.segmentrouting.pwaas.PwaasUtil.*;
 
 
 /**
@@ -86,16 +95,36 @@
         SegmentRoutingService srService =
                 AbstractShellCommand.get(SegmentRoutingService.class);
 
-        L2TunnelHandler.Result res = srService.addPseudowire(pwId, pwLabel,
-                                                             cP1, cP1InnerVlan, cP1OuterVlan,
-                                                             cP2, cP2InnerVlan, cP2OuterVlan,
-                                                             mode, sDTag);
+        L2Tunnel tun;
+        L2TunnelPolicy policy;
+
+        try {
+            tun = new DefaultL2Tunnel(parseMode(mode), parseVlan(sDTag), parsePwId(pwId), parsePWLabel(pwLabel));
+        } catch (Exception e) {
+            print("Exception while parsing L2Tunnel : {}", e);
+            return;
+        }
+
+        try {
+            policy = new DefaultL2TunnelPolicy(parsePwId(pwId),
+                                               ConnectPoint.deviceConnectPoint(cP1), parseVlan(cP1InnerVlan),
+                                               parseVlan(cP1OuterVlan), ConnectPoint.deviceConnectPoint(cP2),
+                                               parseVlan(cP2InnerVlan), parseVlan(cP2OuterVlan));
+
+        } catch (Exception e) {
+            print("Exception while parsing L2TunnelPolicy : {}", e);
+            return;
+        }
+
+        L2TunnelDescription pw = new DefaultL2TunnelDescription(tun, policy);
+        L2TunnelHandler.Result res = srService.addPseudowire(pw);
+
         switch (res) {
             case ADDITION_ERROR:
-                print("Pseudowire could not be added, error in configuration, please check logs for more details!");
+                print("Pseudowire could not be added, please check logs for more details!");
                 break;
-            case CONFIG_NOT_FOUND:
-                print("Configuration for pwaas was not found! Initialize the configuration first through netcfg.");
+            case SUCCESS:
+                print("Pseudowire was added succesfully!");
                 break;
             default:
                 break;
diff --git a/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/cli/PseudowireRemoveCommand.java b/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/cli/PseudowireRemoveCommand.java
index 098bbf9..0f027b2 100644
--- a/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/cli/PseudowireRemoveCommand.java
+++ b/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/cli/PseudowireRemoveCommand.java
@@ -23,6 +23,8 @@
 import org.onosproject.segmentrouting.SegmentRoutingService;
 import org.onosproject.segmentrouting.pwaas.L2TunnelHandler;
 
+import static org.onosproject.segmentrouting.pwaas.PwaasUtil.parsePwId;
+
 
 /**
  * Command to remove a pseudowire.
@@ -44,8 +46,15 @@
 
         // remove the pseudowire
         SegmentRoutingManager mngr = (SegmentRoutingManager) srService;
-        L2TunnelHandler.Result res = mngr.removePseudowire(pwId);
+        int pwIntId;
+        try {
+            pwIntId = parsePwId(pwId);
+        } catch (Exception e) {
+            print("Exception while parsing pseudowire id : {}", e);
+            return;
+        }
 
+        L2TunnelHandler.Result res = mngr.removePseudowire(pwIntId);
         switch (res) {
             case REMOVAL_ERROR:
                 error("Error in deletion, pseudowire not found!");
