diff --git a/src/com/android/browser/UploadDialog.java b/src/com/android/browser/UploadDialog.java
index d96c486..a91613e 100644
--- a/src/com/android/browser/UploadDialog.java
+++ b/src/com/android/browser/UploadDialog.java
@@ -41,7 +41,6 @@
 import android.content.pm.ResolveInfo;
 import android.content.pm.PackageManager;
 
-import java.util.ArrayList;
 import java.util.List;
 
 public class UploadDialog extends AppItem {
@@ -55,21 +54,8 @@
         this.apps = null;
     }
 
-    public void getUploadableApps(List<Intent> intents) {
-
-        ArrayList<ResolveInfo> uploadApps = new ArrayList<ResolveInfo>();
-
-        PackageManager pm = activity.getPackageManager();
-
-        for (Intent currentIntent: intents) {
-            List<ResolveInfo> appsList = pm.queryIntentActivities(currentIntent,
-                PackageManager.MATCH_DEFAULT_ONLY);
-            for (ResolveInfo res : appsList) {
-                uploadApps.add(res);
-            }
-        }
-
-        this.apps = uploadApps;
+    public void getUploadableApps(List<ResolveInfo> apps, List<Intent> intents) {
+        this.apps = apps;
         this.uploadIntents = intents;
     }
 
@@ -78,7 +64,6 @@
         final AppAdapter adapter = new AppAdapter(activity, activity.getPackageManager(),
                                     R.layout.app_row, this.apps);
 
-
         AlertDialog.Builder builderSingle = new AlertDialog.Builder(activity);
         builderSingle.setIcon(R.mipmap.ic_launcher_browser_swe);
         builderSingle.setTitle(activity.getString(R.string.choose_upload));
@@ -87,12 +72,10 @@
             @Override
             public void onClick(DialogInterface dialog, int position) {
                 dialog.dismiss();
-                Intent chooserIntent = Intent.createChooser(uploadIntents.get(position), "Upload Via");
-                uploadHandler.initiateActivity(chooserIntent);
+                uploadHandler.initiateActivity(uploadIntents.get(position));
             }
         });
 
-
         builderSingle.setOnCancelListener(new DialogInterface.OnCancelListener()
             {
                @Override
@@ -104,6 +87,5 @@
         });
 
         builderSingle.show();
-
     }
 }
\ No newline at end of file
diff --git a/src/com/android/browser/UploadHandler.java b/src/com/android/browser/UploadHandler.java
index 655d642..34de006 100644
--- a/src/com/android/browser/UploadHandler.java
+++ b/src/com/android/browser/UploadHandler.java
@@ -40,7 +40,6 @@
 import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Vector;
 
 /**
  * Handle the file upload callbacks from WebView here
@@ -494,22 +493,34 @@
             intentList.add(createSoundRecorderIntent());
         }
 
-        // get all openable apps list and create corresponading intents
         PackageManager pm = mController.getActivity().getPackageManager();
-        List<ResolveInfo> openableAppsList = pm.queryIntentActivities(openable, 0);
-        for (int j = 0, n = openableAppsList.size(); j < n; j++ ) {
-                Intent i = new Intent(Intent.ACTION_GET_CONTENT);
-                i.setType(openableMimeType);
-                ActivityInfo activityInfo = openableAppsList.get(j).activityInfo;
-                ComponentName name = new ComponentName(activityInfo.applicationInfo.packageName,
-                                            activityInfo.name);
-                i.setComponent(name);
-                intentList.add(i);
+        ArrayList<ResolveInfo> uploadApps = new ArrayList<ResolveInfo>();
+
+        //Step 1:- resolve all apps for IntentList passed
+        for (Intent i: intentList) {
+            List<ResolveInfo> intentAppsList = pm.queryIntentActivities(i,
+                                                    PackageManager.MATCH_DEFAULT_ONLY);
+            // limit only to first activity
+            uploadApps.add(intentAppsList.get(0));
         }
 
+        // Step 2:- get all openable apps list and create corresponding intents
+        List<ResolveInfo> openableAppsList = pm.queryIntentActivities(openable,
+                                                PackageManager.MATCH_DEFAULT_ONLY);
+        // limit only to first activity
+        ResolveInfo topOpenableApp = openableAppsList.get(0);
+        uploadApps.add(topOpenableApp);
+        ActivityInfo activityInfo = topOpenableApp.activityInfo;
+        ComponentName name = new ComponentName(activityInfo.applicationInfo.packageName,
+                                    activityInfo.name);
+        Intent i = new Intent(Intent.ACTION_GET_CONTENT);
+        i.setType(openableMimeType);
+        i.setComponent(name);
+        intentList.add(i);
 
+        // Step 3: Pass all the apps and their corresponding intents to uploaddialog
         UploadDialog upDialog = new UploadDialog(mController.getActivity());
-        upDialog.getUploadableApps(intentList);
+        upDialog.getUploadableApps(uploadApps, intentList);
         upDialog.loadView(this);
     }
 
