diff --git a/.idea/misc.xml b/.idea/misc.xml
index fbb6828..5d19981 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -37,7 +37,7 @@
     <ConfirmationsSetting value="0" id="Add" />
     <ConfirmationsSetting value="0" id="Remove" />
   </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
     <output url="file://$PROJECT_DIR$/build/classes" />
   </component>
   <component name="ProjectType">
diff --git a/app/build.gradle b/app/build.gradle
index 267fa06..e4651c1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,8 +20,8 @@
         applicationId "masquerade.substratum"
         minSdkVersion 23
         targetSdkVersion 23
-        versionCode 10
-        versionName "ten"
+        versionCode 11
+        versionName "eleven"
     }
 
     buildTypes {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 993969d..94120e4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -16,7 +16,7 @@
                 <action android:name="android.intent.action.BOOT_COMPLETED"/>
             </intent-filter>
         </receiver>
-        <receiver android:name="masquerade.substratum.services.Helper">
+        <receiver android:name=".util.Helper">
             <intent-filter>
                 <action android:name="masquerade.substratum.COMMANDS"/>
             </intent-filter>
diff --git a/app/src/main/java/masquerade/substratum/activities/LoaderActivity.java b/app/src/main/java/masquerade/substratum/activities/LoaderActivity.java
index b82ba3b..29279fa 100644
--- a/app/src/main/java/masquerade/substratum/activities/LoaderActivity.java
+++ b/app/src/main/java/masquerade/substratum/activities/LoaderActivity.java
@@ -14,7 +14,7 @@
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        Log.d("Masquerade", "Masquerade is now ensuring superuser permissions!");
+        Log.d("Masquerade", "Masquerade is now securing superuser permissions!");
         Root.requestRootAccess();
         finish();
     }
diff --git a/app/src/main/java/masquerade/substratum/services/BootDetector.java b/app/src/main/java/masquerade/substratum/services/BootDetector.java
index 61e2702..70ef491 100644
--- a/app/src/main/java/masquerade/substratum/services/BootDetector.java
+++ b/app/src/main/java/masquerade/substratum/services/BootDetector.java
@@ -4,6 +4,8 @@
 import android.content.Context;
 import android.content.Intent;
 
+import masquerade.substratum.util.Helper;
+
 /**
  * @author Nicholas Chum (nicholaschum)
  */
@@ -11,9 +13,7 @@
 public class BootDetector extends BroadcastReceiver {
     @Override
     public void onReceive(Context context, Intent intent) {
-        if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
-            Intent pushIntent = new Intent(context, Helper.class);
-            context.startService(pushIntent);
-        }
+        Intent pushIntent = new Intent(context, Helper.class);
+        context.startService(pushIntent);
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/masquerade/substratum/services/Helper.java b/app/src/main/java/masquerade/substratum/services/Helper.java
deleted file mode 100644
index 576c12b..0000000
--- a/app/src/main/java/masquerade/substratum/services/Helper.java
+++ /dev/null
@@ -1,139 +0,0 @@
-package masquerade.substratum.services;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.os.Environment;
-import android.util.Log;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import masquerade.substratum.util.ReadOverlaysFile;
-import masquerade.substratum.util.Root;
-
-/**
- * @author Nicholas Chum (nicholaschum)
- */
-
-public class Helper extends BroadcastReceiver {
-
-    private List<String> state5overlays = null;
-
-    @Override
-    public void onReceive(Context context, Intent intent) {
-        Log.d("Masquerade",
-                "BroadcastReceiver has accepted Substratum's commands and is running now...");
-        Root.requestRootAccess();
-
-        if (intent.getStringExtra("substratum-check") != null) {
-            if (intent.getStringExtra("substratum-check").equals("masquerade-ball")) {
-                Intent runCommand = new Intent();
-                runCommand.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
-                runCommand.setAction("projekt.substratum.MASQUERADE_BALL");
-                runCommand.putExtra("substratum-check", "masquerade-ball");
-                context.sendBroadcast(runCommand);
-                Log.d("Masquerade",
-                        "BroadcastReceiver was triggered to check for system integrity and " +
-                                "service activation.");
-
-            }
-        }
-
-        if (intent.getStringArrayListExtra("pm-uninstall") != null) {
-            uninstall_handler(intent, "pm-uninstall", false);
-        }
-
-        if (intent.getStringArrayListExtra("pm-uninstall-specific") != null) {
-            uninstall_handler(intent, "pm-uninstall-specific", true);
-        }
-
-        if (intent.getStringExtra("om-commands") != null) {
-            Log.d("Masquerade", "Running command: \"" +
-                    intent.getStringExtra("om-commands") + "\"");
-            Root.runCommand(intent.getStringExtra("om-commands"));
-        }
-    }
-
-    private boolean checkIfPackageActivated(String package_name) {
-        return (state5overlays.contains(package_name));
-    }
-
-    private void uninstall_handler(Intent intent, String inheritor, boolean specific) {
-        try {
-            String final_commands_disable = "";
-            String final_commands_uninstall = "";
-
-            Root.runCommand(
-                    "pm grant masquerade.substratum android.permission.READ_EXTERNAL_STORAGE");
-            Root.runCommand(
-                    "pm grant masquerade.substratum android.permission.WRITE_EXTERNAL_STORAGE");
-
-            ArrayList<String> packages_to_uninstall =
-                    new ArrayList<>(intent.getStringArrayListExtra(inheritor));
-            File current_overlays = new File(Environment
-                    .getExternalStorageDirectory().getAbsolutePath() +
-                    "/.substratum/current_overlays.xml");
-            if (current_overlays.exists()) {
-                Root.runCommand("rm " + Environment
-                        .getExternalStorageDirectory().getAbsolutePath() +
-                        "/.substratum/current_overlays.xml");
-            }
-            Root.runCommand("cp /data/system/overlays.xml " +
-                    Environment.getExternalStorageDirectory().getAbsolutePath() +
-                    "/.substratum/current_overlays.xml");
-            String[] state5initial = {Environment.getExternalStorageDirectory().getAbsolutePath() +
-                    "/.substratum/current_overlays.xml", "5"};
-            state5overlays = ReadOverlaysFile.main(state5initial);
-
-            for (int i = 0; i < packages_to_uninstall.size(); i++) {
-                String current = packages_to_uninstall.get(i);
-
-                Log.d("Masquerade", "Intent received to purge referendum package file \"" +
-                        current + "\"");
-                if (checkIfPackageActivated(packages_to_uninstall.get(i))) {
-                    Log.d("Masquerade", "Package file \"" + current +
-                            "\" requires an overlay disable prior to uninstall...");
-                    if (final_commands_disable.length() == 0) {
-                        final_commands_disable = "om disable " + current;
-                    } else {
-                        final_commands_disable = final_commands_disable + " " + current;
-                    }
-
-                    if (final_commands_uninstall.length() == 0) {
-                        final_commands_uninstall = "pm uninstall " + current;
-                    } else {
-                        final_commands_uninstall = final_commands_uninstall +
-                                " && pm uninstall " + current;
-                    }
-                } else {
-                    Log.d("Masquerade", "\"" + current +
-                            "\" has been redirected to the package manager in " +
-                            "preparations of removal...");
-                    Root.runCommand("pm uninstall " + current);
-                }
-            }
-
-            if (final_commands_disable.length() > 0) {
-                Log.d("Masquerade", "Disable commands: " + final_commands_disable);
-                Root.runCommand(final_commands_disable);
-            }
-            if (final_commands_uninstall.length() > 0) {
-                Log.d("Masquerade", "Uninstall commands: " + final_commands_uninstall);
-                Root.runCommand(final_commands_uninstall);
-            }
-
-            if (!specific) {
-                // Clear the resource idmapping files generated by OMS
-                Log.d("Masquerade", "Cleaning up resource-cache directory...");
-                Root.runCommand("rm /data/resource-cache/*");
-                // Now clear the persistent overlays database
-                Log.d("Masquerade", "Finalizing clean up of persistent overlays database...");
-                Root.runCommand("rm -rf /data/system/overlays.xml");
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-}
\ No newline at end of file
diff --git a/app/src/main/java/masquerade/substratum/util/Helper.java b/app/src/main/java/masquerade/substratum/util/Helper.java
new file mode 100644
index 0000000..8ca6964
--- /dev/null
+++ b/app/src/main/java/masquerade/substratum/util/Helper.java
@@ -0,0 +1,40 @@
+package masquerade.substratum.util;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.util.Log;
+
+/**
+ * @author Nicholas Chum (nicholaschum)
+ */
+
+public class Helper extends BroadcastReceiver {
+
+    @Override
+    public void onReceive(Context context, Intent intent) {
+        Log.d("Masquerade",
+                "BroadcastReceiver has accepted Substratum's commands and is running now...");
+        Root.requestRootAccess();
+
+        if (intent.getStringExtra("substratum-check") != null) {
+            if (intent.getStringExtra("substratum-check").equals("masquerade-ball")) {
+                Intent runCommand = new Intent();
+                runCommand.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
+                runCommand.setAction("projekt.substratum.MASQUERADE_BALL");
+                runCommand.putExtra("substratum-check", "masquerade-ball");
+                context.sendBroadcast(runCommand);
+                Log.d("Masquerade", "BroadcastReceiver was triggered to check for system " +
+                        "integrity and service activation.");
+            }
+        } else if (intent.getStringArrayListExtra("pm-uninstall") != null) {
+            new Uninstaller().Uninstaller(intent, "pm-uninstall", false);
+        } else if (intent.getStringArrayListExtra("pm-uninstall-specific") != null) {
+            new Uninstaller().Uninstaller(intent, "pm-uninstall-specific", true);
+        } else if (intent.getStringExtra("om-commands") != null) {
+            Log.d("Masquerade", "Running command: \"" +
+                    intent.getStringExtra("om-commands") + "\"");
+            Root.runCommand(intent.getStringExtra("om-commands"));
+        }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/masquerade/substratum/util/Uninstaller.java b/app/src/main/java/masquerade/substratum/util/Uninstaller.java
new file mode 100644
index 0000000..b75482e
--- /dev/null
+++ b/app/src/main/java/masquerade/substratum/util/Uninstaller.java
@@ -0,0 +1,115 @@
+package masquerade.substratum.util;
+
+import android.content.Intent;
+import android.os.AsyncTask;
+import android.os.Environment;
+import android.util.Log;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Nicholas Chum (nicholaschum)
+ */
+
+public class Uninstaller {
+
+    private Intent mIntent;
+    private String uninstallString;
+    private Boolean specific;
+
+    public void Uninstaller(Intent mIntent, String uninstallString, Boolean specific) {
+        this.mIntent = mIntent;
+        this.uninstallString = uninstallString;
+        this.specific = specific;
+        new UninstallAsync().execute("");
+    }
+
+    private class UninstallAsync extends AsyncTask<String, Integer, String> {
+
+        @Override
+        protected String doInBackground(String... sUrl) {
+            uninstall_handler(mIntent, uninstallString, specific);
+            return null;
+        }
+
+        private void uninstall_handler(Intent intent, String inheritor, boolean specific) {
+            try {
+                String final_commands_disable = "";
+                String final_commands_uninstall = "";
+
+                Root.runCommand(
+                        "pm grant masquerade.substratum android.permission.READ_EXTERNAL_STORAGE");
+                Root.runCommand(
+                        "pm grant masquerade.substratum android.permission.WRITE_EXTERNAL_STORAGE");
+
+                ArrayList<String> packages_to_uninstall =
+                        new ArrayList<>(intent.getStringArrayListExtra(inheritor));
+                File current_overlays = new File(Environment
+                        .getExternalStorageDirectory().getAbsolutePath() +
+                        "/.substratum/current_overlays.xml");
+                if (current_overlays.exists()) {
+                    Root.runCommand("rm " + Environment
+                            .getExternalStorageDirectory().getAbsolutePath() +
+                            "/.substratum/current_overlays.xml");
+                }
+                Root.runCommand("cp /data/system/overlays.xml " +
+                        Environment.getExternalStorageDirectory().getAbsolutePath() +
+                        "/.substratum/current_overlays.xml");
+                String[] state5initial = {Environment.getExternalStorageDirectory()
+                        .getAbsolutePath() +
+                        "/.substratum/current_overlays.xml", "5"};
+                List<String> state5overlays = ReadOverlaysFile.main(state5initial);
+
+                for (int i = 0; i < packages_to_uninstall.size(); i++) {
+                    String current = packages_to_uninstall.get(i);
+
+                    Log.d("Masquerade", "Intent received to purge referendum package file \"" +
+                            current + "\"");
+                    if (state5overlays.contains(packages_to_uninstall.get(i))) {
+                        Log.d("Masquerade", "Package file \"" + current +
+                                "\" requires an overlay disable prior to uninstall...");
+                        if (final_commands_disable.length() == 0) {
+                            final_commands_disable = "om disable " + current;
+                        } else {
+                            final_commands_disable = final_commands_disable + " " + current;
+                        }
+
+                        if (final_commands_uninstall.length() == 0) {
+                            final_commands_uninstall = "pm uninstall " + current;
+                        } else {
+                            final_commands_uninstall = final_commands_uninstall +
+                                    " && pm uninstall " + current;
+                        }
+                    } else {
+                        Log.d("Masquerade", "\"" + current +
+                                "\" has been redirected to the package manager in " +
+                                "preparations of removal...");
+                        Root.runCommand("pm uninstall " + current);
+                    }
+                }
+
+                if (final_commands_disable.length() > 0) {
+                    Log.d("Masquerade", "Disable commands: " + final_commands_disable);
+                    Root.runCommand(final_commands_disable);
+                }
+                if (final_commands_uninstall.length() > 0) {
+                    Log.d("Masquerade", "Uninstall commands: " + final_commands_uninstall);
+                    Root.runCommand(final_commands_uninstall);
+                }
+
+                if (!specific) {
+                    // Clear the resource idmapping files generated by OMS
+                    Log.d("Masquerade", "Cleaning up resource-cache directory...");
+                    Root.runCommand("rm /data/resource-cache/*");
+                    // Now clear the persistent overlays database
+                    Log.d("Masquerade", "Finalizing clean up of persistent overlays database...");
+                    Root.runCommand("rm -rf /data/system/overlays.xml");
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+}
