diff --git a/build.gradle b/build.gradle
index c0bd27756b..dea94eb99c 100644
--- a/build.gradle
+++ b/build.gradle
@@ -5,7 +5,7 @@ buildscript {
         mavenCentral()
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:1.4.0-beta6'
+        classpath 'com.android.tools.build:gradle:1.5.0'
     }
 }
 
diff --git a/cSploit/build.gradle b/cSploit/build.gradle
index 1271813146..2c5d5117ed 100644
--- a/cSploit/build.gradle
+++ b/cSploit/build.gradle
@@ -4,7 +4,7 @@ buildscript {
         mavenCentral()
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:1.4.0-beta6'
+        classpath 'com.android.tools.build:gradle:1.5.0'
     }
 }
 
@@ -52,8 +52,8 @@ android {
     defaultConfig {
         minSdkVersion 9
         targetSdkVersion 22
-        versionCode 3
-        versionName "1.6.1"
+        versionCode 6
+        versionName "1.6.5"
         if(System.getenv("NIGHTLY_BUILD")) {
             versionName += "+" + System.getenv("NIGHTLY_BUILD_COMMIT").substring(0, 7)
         }
diff --git a/cSploit/res/layout/plugin_inspector.xml b/cSploit/res/layout/plugin_inspector.xml
index 1c9ee175ef..026735c44a 100644
--- a/cSploit/res/layout/plugin_inspector.xml
+++ b/cSploit/res/layout/plugin_inspector.xml
@@ -6,19 +6,6 @@
     android:paddingTop="16sp"
     android:id="@+id/whatever">
 
-    <android.support.design.widget.FloatingActionButton
-        android:id="@+id/inspectToggleButton"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:padding="20dp"
-        android:src="@drawable/ic_play_arrow_24dp"
-        android:checked="false"
-        android:translationZ="8dp"
-        android:layout_alignParentBottom="true"
-        android:layout_alignParentRight="true"
-        android:layout_margin="20dp"
-        android:focusableInTouchMode="true" />
-
     <ProgressBar
         android:id="@+id/inspectActivity"
         android:layout_width="wrap_content"
@@ -156,4 +143,21 @@
         android:gravity="center_vertical"
         />
     </ScrollView>
+
+    <!--
+    Later children in a RelativeLayout tend to float over earlier children in a RelativeLayout.
+    https://www.stackoverflow.com/a/28651543
+    -->
+    <android.support.design.widget.FloatingActionButton
+        android:id="@+id/inspectToggleButton"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:padding="20dp"
+        android:src="@drawable/ic_play_arrow_24dp"
+        android:checked="false"
+        android:translationZ="8dp"
+        android:layout_alignParentBottom="true"
+        android:layout_alignParentRight="true"
+        android:layout_margin="20dp"
+        android:focusableInTouchMode="true" />
 </RelativeLayout>
\ No newline at end of file
diff --git a/cSploit/res/values/strings.xml b/cSploit/res/values/strings.xml
index d03780c5c9..43af23b7c5 100644
--- a/cSploit/res/values/strings.xml
+++ b/cSploit/res/values/strings.xml
@@ -529,4 +529,5 @@
     <string name="mitm_ss_select_target_prompt">Select %s ?</string>
     <string name="github_issues_url" translatable="false">https://github.com/cSploit/android/issues</string>
     <string name="issue_message"><![CDATA[<p>Before opening a new issue, please, take the time to read the already <a href="%1$s">open issues</a>, probably it\' s already open. If it\' s not open we\'ll need as much information as you can get, so please, read <a href="%2$s">this guide</a> in order to know how to report a bug properly.</p>]]></string>
+    <string name="pref_err_empty_or_old">must be empty or an old installation directory.</string>
 </resources>
diff --git a/cSploit/src/org/csploit/android/MainActivity.java b/cSploit/src/org/csploit/android/MainActivity.java
index 157d8ad230..0d1a076b98 100644
--- a/cSploit/src/org/csploit/android/MainActivity.java
+++ b/cSploit/src/org/csploit/android/MainActivity.java
@@ -1130,7 +1130,7 @@ public void onReceive(Context context, Intent intent) {
             mUpdateStatus.setText(UPDATE_MESSAGE.replace(
                     "#STATUS#", getString(R.string.no_updates_available)));
 
-          if (!System.isCoreInitialized()) {
+          if (!System.isCoreInstalled()) {
             onInitializationError(getString(R.string.no_core_found));
           }
           break;
diff --git a/cSploit/src/org/csploit/android/SettingsActivity.java b/cSploit/src/org/csploit/android/SettingsActivity.java
index 4a64f9787a..dbb71f2026 100644
--- a/cSploit/src/org/csploit/android/SettingsActivity.java
+++ b/cSploit/src/org/csploit/android/SettingsActivity.java
@@ -214,14 +214,84 @@ public void onEnd(int exitCode) {
       }
     }
 
+    private boolean isDirectoryEmptyOrWithVersion(File folder) {
+      String[] files = folder.list();
+
+      if(files.length > 0) {
+        for(String fname : files) {
+          if("VERSION".equals(fname)) {
+            return true;
+          }
+        }
+        return false;
+      }
+
+      return true;
+    }
+
+    private ExecChecker getCheckerForKey(String key) {
+      switch (key) {
+        case "RUBY_DIR":
+          return ExecChecker.ruby();
+        case "MSF_DIR":
+          return ExecChecker.msf();
+      }
+      return null;
+    }
+
+    private String getCurrentPathForKey(String key) {
+      switch (key) {
+        case "RUBY_DIR":
+          return System.getRubyPath();
+        case "MSF_DIR":
+          return System.getMsfPath();
+      }
+      return null;
+    }
+
+    private boolean shallAskForDelete(String key) {
+      return key.equals("RUBY_DIR") || key.equals("MSF_DIR");
+    }
+
+    /**
+     * check if selected directory is valid for the given key.
+     * @param key to be updated
+     * @param path of the chosen directory
+     * @return true if {@code path} is valid, false otherwise
+     */
+    private boolean canChangeDirectoryTo(String key, String path) {
+      File folder = new File(path);
+      ExecChecker checker = getCheckerForKey(key);
+      String oldPath = getCurrentPathForKey(key);
+      String toastMessage = null;
+      boolean valid = false;
+      boolean checkEmptyOrVersion = shallAskForDelete(key);
+
+      if (!folder.exists()) {
+        toastMessage = getString(R.string.pref_folder) + " " + path + " " + getString(R.string.pref_err_exists);
+      } else if (!folder.canWrite()) {
+        toastMessage = getString(R.string.pref_folder) + " " + path + " " + getString(R.string.pref_err_writable);
+      } else if (checker != null && !checker.canExecuteInDir(path)) {
+        toastMessage = getString(R.string.pref_folder) + " " + path + " " + getString(R.string.pref_err_executable);
+      } else if (checkEmptyOrVersion && !isDirectoryEmptyOrWithVersion(folder)) {
+        toastMessage = getString(R.string.pref_folder) + " " + path + " " + getString(R.string.pref_err_empty_or_old);
+      } else if (oldPath == null || !oldPath.equals(path)) {
+        valid = true;
+      }
+
+      if(toastMessage != null) {
+        Toast.makeText(getContext(), toastMessage, Toast.LENGTH_LONG).show();
+      }
+
+      return valid;
+    }
+
     @Override
     public void onActivityResult(int requestCode, int resultCode, Intent intent) {
       if (requestCode == DirectoryPicker.PICK_DIRECTORY && resultCode != RESULT_CANCELED) {
         Bundle extras = intent.getExtras();
         String path;
         String key;
-        File folder;
-        String oldPath = null;
 
         if (extras == null) {
           Logger.debug("null extra: " + intent);
@@ -236,35 +306,18 @@ public void onActivityResult(int requestCode, int resultCode, Intent intent) {
           return;
         }
 
-        folder = new File(path);
-        ExecChecker checker = null;
-
-
-        if (key.equals("RUBY_DIR")) {
-          oldPath = System.getRubyPath();
-          checker = ExecChecker.ruby();
-        } else if (key.equals("MSF_DIR")) {
-          oldPath = System.getMsfPath();
-          checker = ExecChecker.msf();
-        }
-
-        if (!folder.exists())
-          Toast.makeText(getActivity(), getString(R.string.pref_folder) + " " + path + " " + getString(R.string.pref_err_exists), Toast.LENGTH_SHORT).show();
-
-        else if (!folder.canWrite())
-          Toast.makeText(getActivity(), getString(R.string.pref_folder) + " " + path + " " + getString(R.string.pref_err_writable), Toast.LENGTH_SHORT).show();
+        if(canChangeDirectoryTo(key, path)) {
 
-        else if (checker != null && !checker.canExecuteInDir(path))
-          Toast.makeText(getActivity(), getString(R.string.pref_folder) + " " + path + " " + getString(R.string.pref_err_executable), Toast.LENGTH_LONG).show();
 
-        else {
-          //noinspection ConstantConditions
           getPreferenceManager().getSharedPreferences().edit().putString(key, path).commit();
-          if (oldPath != null && !oldPath.equals(path)) {
-            File current = new File(oldPath);
 
-            if (current.exists() && current.isDirectory() && current.listFiles().length > 2) {
-              wipe_prompt_older(current);
+          if(shallAskForDelete(key)) {
+            String oldPath = getCurrentPathForKey(key);
+            if(oldPath != null) {
+              File current = new File(oldPath);
+              if(current.exists() && current.isDirectory() && current.list().length > 0) {
+                wipe_prompt_older(current);
+              }
             }
           }
         }
diff --git a/cSploit/src/org/csploit/android/services/receivers/MsfRpcdServiceReceiver.java b/cSploit/src/org/csploit/android/services/receivers/MsfRpcdServiceReceiver.java
index d832e90f62..63dacf81ac 100644
--- a/cSploit/src/org/csploit/android/services/receivers/MsfRpcdServiceReceiver.java
+++ b/cSploit/src/org/csploit/android/services/receivers/MsfRpcdServiceReceiver.java
@@ -2,6 +2,7 @@
 
 import android.app.Activity;
 import android.app.NotificationManager;
+import android.app.PendingIntent;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
@@ -68,7 +69,7 @@ private void showToastForStatus(Context context, MsfRpcdService.Status status) {
   }
 
   private void updateNotificationForStatus(Context context, MsfRpcdService.Status status) {
-    NotificationCompat.Builder mBuilder =
+    NotificationCompat.Builder builder =
             new NotificationCompat.Builder(context)
             .setSmallIcon(R.drawable.exploit_msf)
             .setContentTitle(context.getString(R.string.msf_status))
@@ -76,8 +77,13 @@ private void updateNotificationForStatus(Context context, MsfRpcdService.Status
             .setContentText(context.getString(status.getText()))
             .setColor(ContextCompat.getColor(context, status.getColor()));
 
+    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
+            new Intent(), PendingIntent.FLAG_UPDATE_CURRENT);
+
+    builder.setContentIntent(pendingIntent);
+
     NotificationManager mNotificationManager =
             (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
-    mNotificationManager.notify(MSF_NOTIFICATION, mBuilder.build());
+    mNotificationManager.notify(MSF_NOTIFICATION, builder.build());
   }
 }