diff --git a/apps/vpls/src/main/java/org/onosproject/vpls/cli/VplsCommand.java b/apps/vpls/src/main/java/org/onosproject/vpls/cli/VplsCommand.java
index 6d15ea8..d4bfa8d 100644
--- a/apps/vpls/src/main/java/org/onosproject/vpls/cli/VplsCommand.java
+++ b/apps/vpls/src/main/java/org/onosproject/vpls/cli/VplsCommand.java
@@ -22,7 +22,6 @@
 import org.apache.karaf.shell.commands.Command;
 import org.onosproject.cli.AbstractShellCommand;
 import org.onosproject.incubator.net.intf.Interface;
-import org.onosproject.incubator.net.intf.InterfaceService;
 import org.onosproject.net.EncapsulationType;
 import org.onosproject.vpls.config.VplsConfigService;
 
@@ -60,6 +59,21 @@
                     " already associated to VPLS " + BOLD + "%s" + RESET +
                     COLOR_ERROR + "" + RESET;
 
+    private static final String INSERT_VPLS_NAME =
+            COLOR_ERROR + "Missing the " + BOLD + "VPLS name." + RESET +
+                    COLOR_ERROR + " Specifying a VPLS name is mandatory." +
+                    RESET;
+
+    private static final String INSERT_ENCAP_TYPE =
+            COLOR_ERROR + "Missing the " + BOLD + "encapsulation type." +
+                    RESET + COLOR_ERROR + " Encapsulation type is mandatory." +
+                    RESET;
+
+    private static final String INSERT_INTERFACE =
+            COLOR_ERROR + "Missing the " + BOLD + "interface name." +
+                    RESET + COLOR_ERROR + " Specifying an interface name is" +
+                    " mandatory." + RESET;
+
     private static final String SEPARATOR = "----------------";
 
     private static final String VPLS_ALREADY_EXISTS =
@@ -73,9 +87,6 @@
     private static final String VPLS_DISPLAY = "VPLS name: " + BOLD +
             "%s" + RESET + "\nAssociated interfaces: %s\nEncapsulation: %s";
 
-    private static final String VPLS_LIST_TITLE =
-            BOLD + "Configured VPLSs" + RESET;
-
     private static final String VPLS_NOT_FOUND =
             COLOR_ERROR + "VPLS " + BOLD + "%s" + RESET + COLOR_ERROR +
                     " not found" + RESET;
@@ -88,11 +99,9 @@
 
     private static VplsConfigService vplsConfigService =
             get(VplsConfigService.class);
-    private static InterfaceService interfaceService =
-            get(InterfaceService.class);
 
-    @Argument(index = 0, name = "command", description = "Command name (add|" +
-            "clean|create|delete|list|removeIface|set-encap|show)",
+    @Argument(index = 0, name = "command", description = "Command name (add-if|" +
+            "clean|create|delete|list|rem-if|set-encap|show)",
             required = true, multiValued = false)
     String command = null;
 
@@ -100,8 +109,8 @@
             required = false, multiValued = false)
     String vplsName = null;
 
-    @Argument(index = 2, name = "optArg", description = "The interface name for" +
-            "all commands; the encapsulation type for set-encap",
+    @Argument(index = 2, name = "optArg", description = "The interface name or" +
+            " the encapsulation type for set-encap",
             required = false, multiValued = false)
     String optArg = null;
 
@@ -137,6 +146,8 @@
                 default:
                     print(VPLS_COMMAND_NOT_FOUND, command);
             }
+        } else {
+            print(VPLS_COMMAND_NOT_FOUND, command);
         }
     }
 
@@ -147,17 +158,22 @@
      * @param ifaceName the name of the interface to add
      */
     private void addIface(String vplsName, String ifaceName) {
-        // Check if the VPLS exists
+        if (vplsName == null) {
+            print(INSERT_VPLS_NAME);
+            return;
+        }
+        if (ifaceName == null) {
+            print(INSERT_INTERFACE);
+            return;
+        }
         if (!vplsExists(vplsName)) {
             print(VPLS_NOT_FOUND, vplsName);
             return;
         }
-        // Check if the interface exists
         if (!ifaceExists(ifaceName)) {
             print(IFACE_NOT_FOUND, ifaceName);
             return;
         }
-        // Check if the interface is already associated to a VPLS
         if (isIfaceAssociated(ifaceName)) {
             print(IFACE_ALREADY_ASSOCIATED,
                   ifaceName, vplsNameFromIfaceName(ifaceName));
@@ -180,6 +196,10 @@
      * @param vplsName the name of the VLPS
      */
     private void create(String vplsName) {
+        if (vplsName == null || vplsName.isEmpty()) {
+            print(INSERT_VPLS_NAME);
+            return;
+        }
         if (vplsExists(vplsName)) {
             print(VPLS_ALREADY_EXISTS, vplsName);
             return;
@@ -193,6 +213,10 @@
      * @param vplsName the name of the VLPS
      */
     private void delete(String vplsName) {
+        if (vplsName == null) {
+            print(INSERT_VPLS_NAME);
+            return;
+        }
         if (!vplsExists(vplsName)) {
             print(VPLS_NOT_FOUND, vplsName);
             return;
@@ -207,8 +231,6 @@
         List<String> vplsNames = Lists.newArrayList(vplsConfigService.vplsNames());
         Collections.sort(vplsNames);
 
-        print(VPLS_LIST_TITLE);
-        print(SEPARATOR);
         vplsNames.forEach(vpls -> {
             print(vpls);
         });
@@ -221,6 +243,14 @@
      * @param ifaceName the name of the interface to remove
      */
     private void removeIface(String vplsName, String ifaceName) {
+        if (vplsName == null) {
+            print(INSERT_VPLS_NAME);
+            return;
+        }
+        if (ifaceName == null) {
+            print(INSERT_INTERFACE);
+            return;
+        }
         if (!vplsExists(vplsName)) {
             print(VPLS_NOT_FOUND, vplsName);
             return;
@@ -244,6 +274,14 @@
      * @param encap the encapsulation type
      */
     private void setEncap(String vplsName, String encap) {
+        if (vplsName == null) {
+            print(INSERT_VPLS_NAME);
+            return;
+        }
+        if (encap == null) {
+            print(INSERT_ENCAP_TYPE);
+            return;
+        }
         if (!vplsExists(vplsName)) {
             print(VPLS_NOT_FOUND, vplsName);
             return;
@@ -269,8 +307,6 @@
         Map<String, EncapsulationType> encapByVplsName =
                 vplsConfigService.encapByVplsName();
 
-        print(VPLS_LIST_TITLE);
-        print(SEPARATOR);
         if (!isNullOrEmpty(vplsName)) {
             // A VPLS name is provided. Check first if the VPLS exists
             if (vplsExists(vplsName)) {
@@ -283,6 +319,7 @@
             }
         } else {
             // No VPLS names are provided. Display all VPLSs configured
+            print(SEPARATOR);
             vplsNames.forEach(v -> {
                 print(VPLS_DISPLAY,
                       v,
