diff --git a/cli/src/main/java/org/onlab/onos/cli/net/IntentPushTestCommand.java b/cli/src/main/java/org/onlab/onos/cli/net/IntentPushTestCommand.java
index 9326221..32ea13f 100644
--- a/cli/src/main/java/org/onlab/onos/cli/net/IntentPushTestCommand.java
+++ b/cli/src/main/java/org/onlab/onos/cli/net/IntentPushTestCommand.java
@@ -19,6 +19,7 @@
 import com.google.common.collect.Lists;
 import org.apache.karaf.shell.commands.Argument;
 import org.apache.karaf.shell.commands.Command;
+import org.apache.karaf.shell.commands.Option;
 import org.onlab.onos.cli.AbstractShellCommand;
 import org.onlab.onos.core.ApplicationId;
 import org.onlab.onos.core.CoreService;
@@ -75,16 +76,30 @@
             required = false, multiValued = false)
     String appIds = null;
 
+    @Argument(index = 4, name = "appIdBase",
+            description = "Base Value for Application IDs",
+            required = false, multiValued = false)
+    String appIdBaseStr = null;
+
+    @Option(name = "-i", aliases = "--install",
+            description = "Install intents",
+            required = false, multiValued = false)
+    private boolean installOnly = false;
+
+    @Option(name = "-w", aliases = "--withdraw",
+            description = "Withdraw intents",
+            required = false, multiValued = false)
+    private boolean withdrawOnly = false;
 
     private IntentService service;
     private CountDownLatch latch;
     private long start, end;
     private int apps;
     private int intentsPerApp;
+    private int appIdBase;
     private int count;
     private boolean add;
 
-
     @Override
     protected void execute() {
         service = get(IntentService.class);
@@ -100,21 +115,30 @@
 
         apps = appIds != null ? Integer.parseInt(appIds) : 1;
         intentsPerApp = Integer.parseInt(intentsPerAppId);
+        appIdBase = appIdBaseStr != null ? Integer.parseInt(appIdBaseStr) : 1;
 
         count = intentsPerApp * apps;
 
-
         service.addListener(this);
 
         ArrayListMultimap<Integer, Intent> operations = generateIntents(ingress, egress);
 
-        add = true;
-        latch = new CountDownLatch(count);
-        submitIntents(operations);
+        boolean both = !(installOnly ^ withdrawOnly);
 
-        add = false;
-        latch = new CountDownLatch(count);
-        submitIntents(operations);
+        if (installOnly || both) {
+            add = true;
+            latch = new CountDownLatch(count);
+            submitIntents(operations);
+        }
+
+        if (withdrawOnly || both) {
+            if (withdrawOnly && !both) {
+                print("This should fail for now...");
+            }
+            add = false;
+            latch = new CountDownLatch(count);
+            submitIntents(operations);
+        }
 
         service.removeListener(this);
     }
@@ -125,12 +149,12 @@
         TrafficTreatment treatment = DefaultTrafficTreatment.builder().build();
 
         ArrayListMultimap<Integer, Intent> intents = ArrayListMultimap.create();
-        for (int app = 1; app <= apps; app++) {
+        for (int app = 0; app < apps; app++) {
             for (int i = 1; i <= intentsPerApp; i++) {
                 TrafficSelector s = selector
                         .matchEthSrc(MacAddress.valueOf(i))
                         .build();
-                intents.put(app, new PointToPointIntent(appId(), s, treatment,
+                intents.put(app, new PointToPointIntent(appId(app), s, treatment,
                                                         ingress, egress));
 
             }
@@ -178,7 +202,8 @@
      * @return command-line application identifier
      */
     protected ApplicationId appId(Integer id) {
-        return get(CoreService.class).registerApplication("org.onlab.onos.cli-" + id);
+        return get(CoreService.class).registerApplication("org.onlab.onos.cli-"
+                                                                  + (id + appIdBase));
     }
 
     /**
