diff --git a/cli/src/main/java/org/onosproject/cli/app/AllApplicationNamesCompleter.java b/cli/src/main/java/org/onosproject/cli/app/AllApplicationNamesCompleter.java
new file mode 100644
index 0000000..9006369
--- /dev/null
+++ b/cli/src/main/java/org/onosproject/cli/app/AllApplicationNamesCompleter.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.cli.app;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.Spliterator;
+import java.util.Spliterators;
+import java.util.stream.StreamSupport;
+
+import org.onosproject.app.ApplicationService;
+import org.onosproject.cli.AbstractChoicesCompleter;
+import org.onosproject.core.Application;
+
+import static java.util.stream.Collectors.toList;
+import static org.onosproject.app.ApplicationState.INSTALLED;
+import static org.onosproject.cli.AbstractShellCommand.get;
+
+/**
+ * All installed application name completer.
+ */
+public class AllApplicationNamesCompleter extends AbstractChoicesCompleter {
+    @Override
+    public List<String> choices() {
+
+        // Fetch the service and return the list of app names
+        ApplicationService service = get(ApplicationService.class);
+        Iterator<Application> it = service.getApplications().iterator();
+
+        // Filter the list of apps, selecting only the installed ones.
+        // Add each app name to the list of choices.
+        return
+            StreamSupport.stream(
+                Spliterators.spliteratorUnknownSize(it, Spliterator.ORDERED), false)
+                    .filter(app -> service.getState(app.id()) == INSTALLED)
+                    .map(app -> app.id().name())
+                    .collect(toList());
+
+    }
+
+}
diff --git a/cli/src/main/java/org/onosproject/cli/net/ConnectivityIntentCommand.java b/cli/src/main/java/org/onosproject/cli/net/ConnectivityIntentCommand.java
index 713603b..ea95b5d 100644
--- a/cli/src/main/java/org/onosproject/cli/net/ConnectivityIntentCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/ConnectivityIntentCommand.java
@@ -23,6 +23,8 @@
 
 import org.apache.karaf.shell.commands.Option;
 import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.core.ApplicationId;
+import org.onosproject.core.CoreService;
 import org.onosproject.net.Link;
 import org.onosproject.net.flow.DefaultTrafficSelector;
 import org.onosproject.net.flow.DefaultTrafficTreatment;
@@ -84,6 +86,10 @@
             required = false, multiValued = false)
     private boolean lambda = false;
 
+    @Option(name = "-a", aliases = "--appId", description = "Application Id",
+            required = false, multiValued = false)
+    private String appId = null;
+
     @Option(name = "-k", aliases = "--key", description = "Intent Key",
             required = false, multiValued = false)
     private String intentKey = null;
@@ -229,6 +235,18 @@
         return constraints;
     }
 
+    @Override
+    protected ApplicationId appId() {
+        ApplicationId appIdForIntent;
+        if (appId == null) {
+            appIdForIntent = super.appId();
+        } else {
+            CoreService service = get(CoreService.class);
+            appIdForIntent = service.getAppId(appId);
+        }
+        return appIdForIntent;
+    }
+
     /**
      * Creates a key for an intent based on command line arguments.  If a key
      * has been specified, it is returned.  If no key is specified, null
@@ -238,6 +256,8 @@
      */
     protected Key key() {
         Key key = null;
+        ApplicationId appIdForIntent;
+
         if (intentKey != null) {
             key = Key.of(intentKey, appId());
         }
diff --git a/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml b/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
index e7df3b2..da9f95d 100644
--- a/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
+++ b/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
@@ -151,6 +151,9 @@
                 <ref component-id="hostIdCompleter"/>
                 <null/>
             </completers>
+            <optional-completers>
+                <entry key="-a" value-ref="allAppNameCompleter"/>
+            </optional-completers>
         </command>
         <command>
             <action class="org.onosproject.cli.net.AddPointToPointIntentCommand"/>
@@ -162,6 +165,7 @@
             <optional-completers>
                 <entry key="-t" value-ref="ethTypeCompleter"/>
                 <entry key="--ipProto" value-ref="ipProtocolCompleter"/>
+                <entry key="-a" value-ref="allAppNameCompleter"/>
             </optional-completers>
         </command>
         <command>
@@ -171,6 +175,9 @@
                 <ref component-id="connectPointCompleter"/>
                 <null/>
             </completers>
+            <optional-completers>
+                <entry key="-a" value-ref="allAppNameCompleter"/>
+            </optional-completers>
         </command>
         <command>
             <action class="org.onosproject.cli.net.GetStatistics"/>
@@ -186,6 +193,7 @@
             <optional-completers>
                 <entry key="-t" value-ref="ethTypeCompleter"/>
                 <entry key="--ipProto" value-ref="ipProtocolCompleter"/>
+                <entry key="-a" value-ref="allAppNameCompleter"/>
             </optional-completers>
         </command>
         <command>
@@ -196,6 +204,7 @@
             <optional-completers>
                 <entry key="-t" value-ref="ethTypeCompleter"/>
                 <entry key="--ipProto" value-ref="ipProtocolCompleter"/>
+                <entry key="-a" value-ref="allAppNameCompleter"/>
             </optional-completers>
         </command>
         <command>
@@ -317,11 +326,15 @@
                 <ref component-id="connectPointCompleter"/>
                 <null/>
             </completers>
+            <optional-completers>
+                <entry key="-a" value-ref="allAppNameCompleter"/>
+            </optional-completers>
         </command>
     </command-bundle>
 
     <bean id="appCommandCompleter" class="org.onosproject.cli.app.ApplicationCommandCompleter"/>
     <bean id="appNameCompleter" class="org.onosproject.cli.app.ApplicationNameCompleter"/>
+    <bean id="allAppNameCompleter" class="org.onosproject.cli.app.AllApplicationNamesCompleter"/>
     <bean id="appIdWithIntentNameCompleter" class="org.onosproject.cli.app.ApplicationIdWithIntentNameCompleter"/>
     <bean id="cfgCommandCompleter" class="org.onosproject.cli.cfg.ComponentConfigCommandCompleter"/>
     <bean id="componentNameCompleter" class="org.onosproject.cli.cfg.ComponentNameCompleter"/>
