diff --git a/cli/src/main/java/org/onosproject/cli/app/ApplicationCommand.java b/cli/src/main/java/org/onosproject/cli/app/ApplicationCommand.java
index ff0cbf8..9b5e91f 100644
--- a/cli/src/main/java/org/onosproject/cli/app/ApplicationCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/app/ApplicationCommand.java
@@ -21,13 +21,19 @@
 import org.apache.karaf.shell.api.action.Completion;
 import org.apache.karaf.shell.api.action.lifecycle.Service;
 import org.onosproject.app.ApplicationAdminService;
+import org.onosproject.app.ApplicationService;
 import org.onosproject.cli.AbstractShellCommand;
 import org.onosproject.core.Application;
 import org.onosproject.core.ApplicationId;
+import org.onosproject.core.VersionService;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
 
 import java.io.IOException;
 import java.net.URL;
+import java.util.Iterator;
 import java.util.List;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 /**
@@ -44,6 +50,9 @@
     static final String DEACTIVATE = "deactivate";
     static final String DOWNLOAD = "download";
 
+    @Reference(cardinality = ReferenceCardinality.MANDATORY)
+    protected VersionService versionService;
+
     @Argument(index = 0, name = "command",
             description = "Command name (install|activate|deactivate|uninstall|download)",
             required = true)
@@ -64,7 +73,6 @@
                     return;
                 }
             }
-
         } else if (command.equals(DOWNLOAD)) {
             for (String name : names) {
                 if (!downloadApp(service, name)) {
@@ -86,7 +94,20 @@
             if ("-".equals(url)) {
                 service.install(System.in);
             } else {
-                service.install(new URL(url).openStream());
+                Set<Application> app = get(ApplicationService.class)
+                        .getRegisteredApplications().stream()
+                        .filter(ra -> ra.id().toString().equals(url))
+                        .collect(Collectors.toSet());
+                if (app.isEmpty()) {
+                    service.install(new URL(url).openStream());
+                }
+                Iterator<Application> iterator = app.iterator();
+                while (iterator.hasNext()) {
+                    Application application = iterator.next();
+                    if (application.version().toString().equals(versionService.version().toString())) {
+                        service.install(application.imageUrl().openStream());
+                    }
+                }
             }
         } catch (IOException e) {
             error("Unable to get URL: %s", url);
diff --git a/cli/src/main/java/org/onosproject/cli/app/ApplicationNameCompleter.java b/cli/src/main/java/org/onosproject/cli/app/ApplicationNameCompleter.java
index 2d0a6f7..03409d0 100644
--- a/cli/src/main/java/org/onosproject/cli/app/ApplicationNameCompleter.java
+++ b/cli/src/main/java/org/onosproject/cli/app/ApplicationNameCompleter.java
@@ -54,30 +54,24 @@
         // Command name is the second argument.
         String cmd = commandLine.getArguments()[1];
 
-        // Grab apps already on the command (to prevent tab-completed duplicates)
-        // FIXME: This does not work.
-//        final Set previousApps;
-//        if (list.getArguments().length > 2) {
-//            previousApps = Sets.newHashSet(
-//                    Arrays.copyOfRange(list.getArguments(), 2, list.getArguments().length));
-//        } else {
-//            previousApps = Collections.emptySet();
-//        }
-
         // Fetch our service and feed it's offerings to the string completer
         ApplicationService service = get(ApplicationService.class);
         Iterator<Application> it = service.getApplications().iterator();
         SortedSet<String> strings = delegate.getStrings();
-        while (it.hasNext()) {
-            Application app = it.next();
-            ApplicationState state = service.getState(app.id());
-//            if (previousApps.contains(app.id().name())) {
-//                continue;
-//            }
-            if ("uninstall".equals(cmd) || "download".equals(cmd) ||
-                    ("activate".equals(cmd) && state == INSTALLED) ||
-                    ("deactivate".equals(cmd) && state == ACTIVE)) {
-                strings.add(app.id().name());
+        if ("install".equals(cmd)) {
+            it = service.getRegisteredApplications().iterator();
+            while (it.hasNext()) {
+                strings.add(it.next().id().name());
+            }
+        } else {
+            while (it.hasNext()) {
+                Application app = it.next();
+                ApplicationState state = service.getState(app.id());
+                if ("uninstall".equals(cmd) || "download".equals(cmd) ||
+                        ("activate".equals(cmd) && state == INSTALLED) ||
+                        ("deactivate".equals(cmd) && state == ACTIVE)) {
+                    strings.add(app.id().name());
+                }
             }
         }
 
