diff --git a/src/com/android/browser/DownloadSettings.java b/src/com/android/browser/DownloadSettings.java
index d67d6d6..175f5f9 100644
--- a/src/com/android/browser/DownloadSettings.java
+++ b/src/com/android/browser/DownloadSettings.java
@@ -156,14 +156,20 @@
         @Override
         public void onClick(View v) {
 
-            // start filemanager for getting download path
-            try {
-                Intent downloadPathIntent = new Intent("com.android.fileexplorer.action.DIR_SEL");
-                DownloadSettings.this.startActivityForResult(downloadPathIntent, DOWNLOAD_PATH);
-            } catch (Exception e) {
-                String err_msg = getString(R.string.activity_not_found,
-                        "com.android.fileexplorer.action.DIR_SEL");
-                Toast.makeText(DownloadSettings.this, err_msg, Toast.LENGTH_LONG).show();
+            final String filemanagerIntent =
+                getResources().getString(R.string.def_intent_file_manager);
+            if (!TextUtils.isEmpty(filemanagerIntent)) {
+                // start filemanager for getting download path
+                try {
+                    Intent downloadPathIntent = new Intent(filemanagerIntent);
+                    DownloadSettings.this.startActivityForResult(downloadPathIntent, DOWNLOAD_PATH);
+                } catch (Exception e) {
+                    String err_msg = getString(R.string.activity_not_found,
+                            filemanagerIntent);
+                    Toast.makeText(DownloadSettings.this, err_msg, Toast.LENGTH_LONG).show();
+                }
+            } else {
+                Log.e(LOGTAG, "File Manager intent not defined !!");
             }
 
         }
@@ -242,9 +248,12 @@
 
     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
+
         if (DOWNLOAD_PATH == requestCode) {
-            if (resultCode != Activity.RESULT_CANCELED && intent != null) {
-                downloadPath = intent.getStringExtra("result_dir_sel");
+            if (resultCode == Activity.RESULT_OK && intent != null) {
+                final String result_dir_sel =
+                    getResources().getString(R.string.def_file_manager_result_dir);
+                downloadPath = intent.getStringExtra(result_dir_sel);
                 // Fallback logic to stock browser
                 if (downloadPath == null) {
                     Uri uri = intent.getData();
diff --git a/src/com/android/browser/preferences/AdvancedPreferencesFragment.java b/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
index 256fe32..91c24e8 100644
--- a/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
+++ b/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
@@ -123,7 +123,7 @@
 
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
         if (requestCode == DOWNLOAD_PATH_RESULT_CODE) {
-            if ( resultCode != Activity.RESULT_CANCELED && data != null) {
+            if ( resultCode == Activity.RESULT_OK && data != null) {
                 String downloadPath = data.getStringExtra("result_dir_sel");
                 // Fallback logic to stock browser
                 if (downloadPath == null) {
