diff --git a/app/build.gradle b/app/build.gradle
index 3dad1c7..fc67912 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,8 +20,8 @@
         applicationId "projekt.substratum.helper"
         minSdkVersion 23
         targetSdkVersion 24
-        versionCode 2
-        versionName "masquerade"
+        versionCode 3
+        versionName "three (masquerade)"
     }
     buildTypes {
         debug {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index aff0984..4bd7e9b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,6 +1,8 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="projekt.substratum.helper">
 
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
 
     <application
@@ -9,7 +11,7 @@
         android:label="@string/app_name"
         android:supportsRtl="true"
         android:theme="@style/AppTheme">
-        <receiver android:name=".services.BootCompletedDetector">
+        <receiver android:name=".services.BootDetector">
             <intent-filter>
                 <action android:name="android.intent.action.BOOT_COMPLETED"/>
             </intent-filter>
@@ -19,11 +21,6 @@
                 <action android:name="projekt.substratum.helper.COMMANDS"/>
             </intent-filter>
         </receiver>
-        <receiver android:name=".services.Initializer">
-            <intent-filter>
-                <action android:name="projekt.substratum.helper.INITIALIZE"/>
-            </intent-filter>
-        </receiver>
 
         <activity android:name=".activities.MainActivity">
             <intent-filter>
diff --git a/app/src/main/java/projekt/substratum/helper/activities/LoaderActivity.java b/app/src/main/java/projekt/substratum/helper/activities/LoaderActivity.java
index eefe047..bf61169 100644
--- a/app/src/main/java/projekt/substratum/helper/activities/LoaderActivity.java
+++ b/app/src/main/java/projekt/substratum/helper/activities/LoaderActivity.java
@@ -3,8 +3,6 @@
 import android.app.Activity;
 import android.os.Bundle;
 
-import projekt.substratum.helper.util.Root;
-
 /**
  * @author Nicholas Chum (nicholaschum)
  */
@@ -14,6 +12,5 @@
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         finish();
-        Root.requestRootAccess();
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/projekt/substratum/helper/activities/MainActivity.java b/app/src/main/java/projekt/substratum/helper/activities/MainActivity.java
index 436d1e1..13a50e7 100644
--- a/app/src/main/java/projekt/substratum/helper/activities/MainActivity.java
+++ b/app/src/main/java/projekt/substratum/helper/activities/MainActivity.java
@@ -4,8 +4,6 @@
 import android.content.pm.PackageManager;
 import android.os.Bundle;
 
-import projekt.substratum.helper.util.Root;
-
 /**
  * @author Nicholas Chum (nicholaschum)
  */
@@ -20,6 +18,5 @@
                 PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                 PackageManager.DONT_KILL_APP);
         finish();
-        Root.requestRootAccess();
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/projekt/substratum/helper/services/BootCompletedDetector.java b/app/src/main/java/projekt/substratum/helper/services/BootDetector.java
similarity index 88%
rename from app/src/main/java/projekt/substratum/helper/services/BootCompletedDetector.java
rename to app/src/main/java/projekt/substratum/helper/services/BootDetector.java
index 716c1f0..6c0e78d 100644
--- a/app/src/main/java/projekt/substratum/helper/services/BootCompletedDetector.java
+++ b/app/src/main/java/projekt/substratum/helper/services/BootDetector.java
@@ -8,7 +8,7 @@
  * @author Nicholas Chum (nicholaschum)
  */
 
-public class BootCompletedDetector extends BroadcastReceiver {
+public class BootDetector extends BroadcastReceiver {
     @Override
     public void onReceive(Context context, Intent intent) {
         if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
diff --git a/app/src/main/java/projekt/substratum/helper/services/Helper.java b/app/src/main/java/projekt/substratum/helper/services/Helper.java
index 6ce7035..cc1761a 100644
--- a/app/src/main/java/projekt/substratum/helper/services/Helper.java
+++ b/app/src/main/java/projekt/substratum/helper/services/Helper.java
@@ -3,7 +3,13 @@
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
+import android.os.Environment;
+import android.util.Log;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import projekt.substratum.helper.util.ReadOverlaysFile;
 import projekt.substratum.helper.util.Root;
 
 /**
@@ -12,8 +18,86 @@
 
 public class Helper extends BroadcastReceiver {
 
+    private List<String> state5overlays = null;
+
     @Override
     public void onReceive(Context context, Intent intent) {
-        Root.runCommand(intent.getStringExtra("om-commands"));
+        Log.e("SubstratumHelper",
+                "BroadcastReceiver has accepted Substratum's commands and is running now...");
+        Root.requestRootAccess();
+
+        if (intent.getStringArrayListExtra("pm-uninstall") != null) {
+            uninstall_handler(intent);
+        }
+
+        if (intent.getStringExtra("om-commands") != null) {
+            Log.e("SubstratumHelper", 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 final_commands_disable = "";
+        String final_commands_uninstall = "";
+
+        Root.runCommand(
+                "pm grant projekt.substratum.helper android.permission.READ_EXTERNAL_STORAGE");
+        Root.runCommand(
+                "pm grant projekt.substratum.helper android.permission.WRITE_EXTERNAL_STORAGE");
+
+        ArrayList<String> packages_to_uninstall =
+                new ArrayList<>(intent.getStringArrayListExtra("pm-uninstall"));
+        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.e("SubstratumHelper", "Intent received to purge referendum package file \"" +
+                    current + "\"");
+            if (checkIfPackageActivated(packages_to_uninstall.get(i))) {
+                Log.e("SubstratumHelper", "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 {
+                Root.runCommand("pm uninstall " + current);
+            }
+        }
+
+        if (final_commands_disable.length() > 0) {
+            Log.e("SubstratumHelper", "Disable commands: " + final_commands_disable);
+            Root.runCommand(final_commands_disable);
+        } else {
+            if (final_commands_uninstall.length() > 0) {
+                Log.e("SubstratumHelper", "Uninstall commands: " + final_commands_uninstall);
+                Root.runCommand(final_commands_uninstall);
+            }
+        }
+        
+        // Clear the resource idmapping files generated by OMS
+        Log.e("SubstratumHelper", "Cleaning up resource-cache directory...");
+        Root.runCommand("rm /data/resource-cache/*");
+        // Now clear the persistent overlays database
+        Log.e("SubstratumHelper", "Finalizing clean up of persistent overlays database...");
+        Root.runCommand("rm -rf /data/system/overlays.xml");
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/projekt/substratum/helper/services/Initializer.java b/app/src/main/java/projekt/substratum/helper/services/Initializer.java
deleted file mode 100644
index 9881c4c..0000000
--- a/app/src/main/java/projekt/substratum/helper/services/Initializer.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package projekt.substratum.helper.services;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-
-import projekt.substratum.helper.util.Root;
-
-/**
- * @author Nicholas Chum (nicholaschum)
- */
-
-public class Initializer extends BroadcastReceiver {
-
-    @Override
-    public void onReceive(Context context, Intent intent) {
-        Root.requestRootAccess();
-    }
-}
\ No newline at end of file
diff --git a/app/src/main/java/projekt/substratum/helper/util/ReadOverlaysFile.java b/app/src/main/java/projekt/substratum/helper/util/ReadOverlaysFile.java
new file mode 100644
index 0000000..34bc9de
--- /dev/null
+++ b/app/src/main/java/projekt/substratum/helper/util/ReadOverlaysFile.java
@@ -0,0 +1,38 @@
+package projekt.substratum.helper.util;
+
+import android.util.Log;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Nicholas Chum (nicholaschum)
+ */
+
+public class ReadOverlaysFile {
+
+    public static List<String> main(String argv[]) {
+
+        File file = new File(argv[0]);
+        int state_count = Integer.parseInt(argv[1]);
+
+        List<String> list = new ArrayList<>();
+
+        try (BufferedReader br = new BufferedReader(new FileReader(file))) {
+            for (String line; (line = br.readLine()) != null; ) {
+                if (line.contains("state=\"" + state_count + "\"")) {
+                    String[] split = line.substring(21).split("\\s+");
+                    list.add(split[0].substring(1, split[0].length() - 1));
+                }
+            }
+        } catch (IOException ioe) {
+            ioe.printStackTrace();
+            Log.e("SubstratumLogger", "Unable to load XML file correctly.");
+        }
+        return list;
+    }
+}
\ No newline at end of file
