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 9b5e91f..67bd6ba 100644
--- a/cli/src/main/java/org/onosproject/cli/app/ApplicationCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/app/ApplicationCommand.java
@@ -54,7 +54,7 @@
     protected VersionService versionService;
 
     @Argument(index = 0, name = "command",
-            description = "Command name (install|activate|deactivate|uninstall|download)",
+            description = "Command name (install|activate|deactivate|uninstall|download|installreg)",
             required = true)
     @Completion(ApplicationCommandCompleter.class)
     String command = null;
@@ -90,24 +90,31 @@
 
     // Installs the application from input of the specified URL
     private boolean installApp(ApplicationAdminService service, String url) {
+
         try {
             if ("-".equals(url)) {
                 service.install(System.in);
+            } else if (url.contains("oar")) {
+                service.install(new URL(url).openStream());
             } else {
                 Set<Application> app = get(ApplicationService.class)
-                        .getRegisteredApplications().stream()
-                        .filter(ra -> ra.id().toString().equals(url))
-                        .collect(Collectors.toSet());
+                        .getRegisteredApplications();
                 if (app.isEmpty()) {
-                    service.install(new URL(url).openStream());
+                    System.out.println("Could Not Install " + url);
+                    return false;
                 }
                 Iterator<Application> iterator = app.iterator();
+                Application recent = null;
                 while (iterator.hasNext()) {
                     Application application = iterator.next();
-                    if (application.version().toString().equals(versionService.version().toString())) {
-                        service.install(application.imageUrl().openStream());
+                    if (recent == null && application.id().name().equals(url)) {
+                        recent = application;
+                    } else if (application.version().compareTo(recent.version()) > 0 &&
+                            application.id().name().equals(url)) {
+                        recent = application;
                     }
                 }
+                service.install(recent.imageUrl().openStream());
             }
         } catch (IOException e) {
             error("Unable to get URL: %s", url);
diff --git a/core/net/src/main/java/org/onosproject/app/impl/ApplicationManager.java b/core/net/src/main/java/org/onosproject/app/impl/ApplicationManager.java
index 7ea40d4..c7e28bd 100644
--- a/core/net/src/main/java/org/onosproject/app/impl/ApplicationManager.java
+++ b/core/net/src/main/java/org/onosproject/app/impl/ApplicationManager.java
@@ -336,12 +336,13 @@
     public Set<Application> getRegisteredApplications() {
         ImmutableSet.Builder<Application> builder = ImmutableSet.builder();
         ObjectMapper mapper = new ObjectMapper();
-
+        String vers = versionService.version().toString();
+        vers = vers.substring(0, vers.lastIndexOf(".") + 2);
         // Get input stream from the URL
         try {
-            URL githubUrl = new URL(APP_REGISTRY_URL + "?onosVersion=" + versionService.version().toString());
-            HttpURLConnection githubHttp = (HttpURLConnection) githubUrl.openConnection();
-            InputStream githubStream = githubHttp.getInputStream();
+            URL serverUrl = new URL(APP_REGISTRY_URL + "?onosVersion=" + vers);
+            HttpURLConnection serverHttp = (HttpURLConnection) serverUrl.openConnection();
+            InputStream githubStream = serverHttp.getInputStream();
 
             // Read input stream into an ArrayNode
             ArrayNode rootTree = (ArrayNode) mapper.readTree(githubStream);
@@ -356,9 +357,9 @@
 
             return apps;
         } catch (MalformedURLException e) {
-            throw new IllegalStateException("Bad URL " + APP_REGISTRY_URL, e);
+            throw new IllegalStateException("Bad URL: " + APP_REGISTRY_URL + "?onosVersion=" + vers, e);
         } catch (IOException e) {
-            throw new IllegalStateException("Unable to fetch URL " + APP_REGISTRY_URL, e);
+            throw new IllegalStateException("Unable to fetch URL: " + APP_REGISTRY_URL + "?onosVersion=" + vers, e);
         }
     }
 
