diff --git a/app/build.gradle b/app/build.gradle
index ddb980fc87515d2b0850cad0fdeb7e37d612f7d2..9841600f97d50ae01b270b9b3b4963b2277fd18e 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -21,7 +21,6 @@ if(isTravis) {
 android {
     compileSdkVersion 22
     buildToolsVersion '22.0.1'
-
     defaultConfig {
         minSdkVersion 16
         targetSdkVersion 19 // Do not change: Working Icons on Android 5+
@@ -31,7 +30,6 @@ android {
 
         buildConfigField 'String', 'BUILD_NUMBER', (buildNumber == null ? 'null' : "\"${buildNumber}\"")
     }
-
     buildTypes {
         debug {
             try {
@@ -53,12 +51,10 @@ android {
             versionNameSuffix '-release'
         }
     }
-
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_1_7
         targetCompatibility JavaVersion.VERSION_1_7
     }
-
     lintOptions {
         warning 'MissingTranslation', 'InvalidPackage'
         abortOnError false
@@ -69,11 +65,15 @@ android {
         textReport isCi
         textOutput 'stdout'
     }
-
     packagingOptions {
         exclude 'META-INF/NOTICE.txt'
         exclude 'META-INF/LICENSE.txt'
     }
+
+    productFlavors {
+        system {}
+        normal {}
+    }
 }
 
 dependencies {
@@ -81,7 +81,7 @@ dependencies {
     //compile 'com.github.amlcurran.showcaseview:library:5.0.0'
     compile 'com.android.support:appcompat-v7:22.2.1'
     //https://github.com/lp0/slf4j-android
-    compile fileTree(dir: 'libs', include: '*.jar')
+    compile fileTree(include: '*.jar', dir: 'libs')
     compile project(':third_party:rootshell')
     compile 'org.osmdroid:osmdroid-android:4.2'
     compile 'org.slf4j:slf4j-api:1.7.12'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3802f97ab44d9e84edcc76bb044d9909531319f3..2925999267565835f7a4ba70786119f9573e8115 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,8 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
-    package="com.SecUpwN.AIMSICD"
-    tools:ignore="ProtectedPermissions">
+    package="com.SecUpwN.AIMSICD">
 
     <!-- If we ever wanna make this a system app, we can add the following 2 lines above:
           coreApp="true"
@@ -42,22 +41,6 @@
     <!-- To list all available (used) Android permissions on a device, use:
          # `pm list permissions -g`  -->
 
-    <!-- These are Android System (non 3rd party) Permissions -->
-    <uses-permission android:name="android.permission.CONTROL_LOCATION_UPDATES"/>
-    <uses-permission android:name="android.permission.DEVICE_POWER"/>
-    <uses-permission android:name="android.permission.DIAGNOSTIC"/>
-    <uses-permission android:name="android.permission.DUMP"/>
-    <uses-permission android:name="android.permission.FACTORY_TEST"/>
-    <uses-permission android:name="android.permission.HARDWARE_TEST"/>
-    <uses-permission android:name="android.permission.INJECT_EVENTS"/>
-    <uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW"/>
-    <uses-permission android:name="android.permission.LOCATION_HARDWARE"/>
-    <uses-permission android:name="android.permission.MODIFY_PHONE_STATE"/>
-    <uses-permission android:name="android.permission.SET_PROCESS_LIMIT"/>
-    <uses-permission android:name="android.permission.WRITE_APN_SETTINGS"/>
-    <!--uses-permission android:name="android.permission.WRITE_GSERVICES"/ -->
-    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>
-
     <!-- These are OEM / Samsung Permissions -->
     <uses-permission android:name="android.phone.receiveDetailedCallState"/>
     <uses-permission android:name="com.android.permission.HANDOVER_STATUS"/>
diff --git a/app/src/system/AndroidManifest.xml b/app/src/system/AndroidManifest.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2c9e3e2ec5a7ccb3250fd7ba4125978e7ae3f9cb
--- /dev/null
+++ b/app/src/system/AndroidManifest.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    coreApp="true"
+    package="com.SecUpwN.AIMSICD"
+    android:sharedUserId="android.uid.system"
+    tools:ignore="ProtectedPermissions">
+
+    <!-- PERMISSIONS ARE SORTED BY AOS PERMISSION AND 3rd PARTY ACCESS. KEEP THIS! -->
+    <!-- https://github.com/SecUpwN/Android-IMSI-Catcher-Detector/wiki/Permissions -->
+
+    <!-- SPECIAL PERMISSIONS TO BE ADDED AFTER THIS LINE. /> -->
+    <!-- To list all available (used) Android permissions on a device, use:
+         # `pm list permissions -g`  -->
+
+    <!-- These are Android System (non 3rd party) Permissions -->
+    <uses-permission android:name="android.permission.CONTROL_LOCATION_UPDATES"/>
+    <uses-permission android:name="android.permission.DEVICE_POWER"/>
+    <uses-permission android:name="android.permission.DIAGNOSTIC"/>
+    <uses-permission android:name="android.permission.DUMP"/>
+    <uses-permission android:name="android.permission.FACTORY_TEST"/>
+    <uses-permission android:name="android.permission.HARDWARE_TEST"/>
+    <uses-permission android:name="android.permission.INJECT_EVENTS"/>
+    <uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW"/>
+    <uses-permission android:name="android.permission.LOCATION_HARDWARE"/>
+    <uses-permission android:name="android.permission.MODIFY_PHONE_STATE"/>
+    <uses-permission android:name="android.permission.SET_PROCESS_LIMIT"/>
+    <uses-permission android:name="android.permission.WRITE_APN_SETTINGS"/>
+    <!--uses-permission android:name="android.permission.WRITE_GSERVICES"/ -->
+    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>
+
+    <!-- These are OEM / Samsung Permissions -->
+    <uses-permission android:name="android.phone.receiveDetailedCallState"/>
+    <uses-permission android:name="com.android.permission.HANDOVER_STATUS"/>
+    <uses-permission android:name="com.sec.android.app.controlpanel.permission.PRIVATE"/>
+    <uses-permission android:name="com.sec.android.app.factorymode.permission.KEYSTRING"/>
+    <uses-permission android:name="com.sec.android.app.cm.permission.PERMISSION_MANAGEMENT"/>
+    <uses-permission android:name="com.sec.android.app.phoneutil.permission.KEYSTRING"/>
+    <uses-permission android:name="com.sec.android.app.servicemodeapp.permission.KEYSTRING"/>
+    <uses-permission android:name="com.sec.android.phone.permission.DATA_ROAMING_SETTINGS_ENHANCED"/>
+    <uses-permission android:name="com.sec.android.phone.permission.READ_CALL_SETTINGS"/>
+    <uses-permission android:name="com.sec.android.phone.permission.WRITE_CALL_SETTINGS"/>
+    <!-- uses-permission android:name="com.sec.factory.permission.ALLOWFTCLIENTCPOBIND"/>
+    <uses-permission android:name="com.sec.factory.permission.BT_ID_WRITE"/ -->
+    <uses-permission android:name="com.sec.factory.permission.KEYSTRING"/>
+    <uses-permission android:name="com.sec.modem.settings.permission.KEYSTRING"/>
+    <!-- uses-permission android:name="diagandroid.app.receiveDetailedApplicationState"/>
+    <uses-permission android:name="diagandroid.data.receivePDPContextState"/>
+    <uses-permission android:name="diagandroid.phone.receiveDetailedCallState"/ -->
+
+    <!-- May be needed (in the future) to access SIM related functions -->
+    <uses-permission android:name="org.simalliance.openmobileapi.SMARTCARD"/>
+
+</manifest>