diff --git a/app/build.gradle b/app/build.gradle
index 2db9f0937..2e909b462 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -139,7 +139,6 @@ dependencies {
 
     implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
     implementation 'com.google.zxing:core:3.3.2'
-    implementation 'eu.chainfire:libsuperuser:1.0.0.201602271131'
     implementation 'info.guardianproject.netcipher:netcipher:2.0.0-alpha1'
     implementation 'info.guardianproject.panic:panic:0.5'
     implementation 'commons-io:commons-io:2.5'
diff --git a/app/src/basic/res/xml/preferences.xml b/app/src/basic/res/xml/preferences.xml
index dd194a299..c4d8280cb 100644
--- a/app/src/basic/res/xml/preferences.xml
+++ b/app/src/basic/res/xml/preferences.xml
@@ -76,15 +76,12 @@
                 android:entryValues="@array/themeValues"/>
     </android.support.v7.preference.PreferenceCategory>
 
-    <android.support.v7.preference.PreferenceCategory android:title="@string/appcompatibility">
+    <android.support.v7.preference.PreferenceCategory android:title="@string/appcompatibility"
+                                                      android:key="pref_category_appcompatibility">
         <SwitchPreference
                 android:title="@string/show_incompat_versions"
                 android:defaultValue="false"
                 android:key="incompatibleVersions"/>
-        <SwitchPreference
-                android:title="@string/show_root_apps"
-                android:defaultValue="true"
-                android:key="rooted"/>
         <SwitchPreference
                 android:title="@string/show_anti_feature_apps"
                 android:defaultValue="false"
diff --git a/app/src/main/java/org/fdroid/fdroid/AppDetails2.java b/app/src/main/java/org/fdroid/fdroid/AppDetails2.java
index 328854bf4..7a1251258 100644
--- a/app/src/main/java/org/fdroid/fdroid/AppDetails2.java
+++ b/app/src/main/java/org/fdroid/fdroid/AppDetails2.java
@@ -109,7 +109,8 @@ public class AppDetails2 extends AppCompatActivity
         getSupportActionBar().setDisplayHomeAsUpEnabled(true);
         supportPostponeEnterTransition();
 
-        if (!reset(getPackageNameFromIntent(getIntent()))) {
+        resetCurrentApp(getPackageNameFromIntent(getIntent()));
+        if (app == null) {
             finish();
             return;
         }
@@ -187,27 +188,6 @@ public class AppDetails2 extends AppCompatActivity
         return intent.getStringExtra(EXTRA_APPID);
     }
 
-    /**
-     * If passed null, this will show a message to the user ("Could not find app ..." or something
-     * like that) and then finish the activity.
-     */
-    private void setApp(App newApp) {
-        if (newApp == null) {
-            Toast.makeText(this, R.string.no_such_app, Toast.LENGTH_LONG).show();
-            finish();
-            return;
-        }
-        app = newApp;
-
-        // Remove all "installed" statuses for this app, since we are now viewing it.
-        AppUpdateStatusManager ausm = AppUpdateStatusManager.getInstance(this);
-        for (AppUpdateStatusManager.AppUpdateStatus status : ausm.getByPackageName(app.packageName)) {
-            if (status.status == AppUpdateStatusManager.Status.Installed) {
-                ausm.removeApk(status.getUniqueKey());
-            }
-        }
-    }
-
     /**
      * Some notifications (like "downloading" and "installed") are not shown
      * for this app if it is open in app details.  When closing, we need to
@@ -673,27 +653,40 @@ public class AppDetails2 extends AppCompatActivity
 
     /**
      * Reset the display and list contents. Used when entering the activity, and
-     * also when something has been installed/uninstalled.
-     * Return true if the app was found, false otherwise.
+     * also when something has been installed/uninstalled.  An index update or
+     * other external factors might have changed since {@code app} was set
+     * before.  This also removes all pending installs with
+     * {@link AppUpdateStatusManager.Status#Installed Installed}
+     * status for this {@code packageName}, to prevent any lingering open ones from
+     * messing up any action that the user might take.  They sometimes might not get
+     * removed while F-Droid was in the background.
+     * <p>
+     * Shows a {@link Toast} if no {@link App} was found matching {@code packageName}.
      */
-    private boolean reset(String packageName) {
-
-        Utils.debugLog(TAG, "Getting application details for " + packageName);
-        App newApp = null;
-
-        if (!TextUtils.isEmpty(packageName)) {
-            newApp = AppProvider.Helper.findHighestPriorityMetadata(getContentResolver(), packageName);
+    private void resetCurrentApp(String packageName) {
+        if (TextUtils.isEmpty(packageName)) {
+            return;
         }
+        app = AppProvider.Helper.findHighestPriorityMetadata(getContentResolver(), packageName);
 
-        setApp(newApp);
-        return this.app != null;
+        //
+        AppUpdateStatusManager ausm = AppUpdateStatusManager.getInstance(this);
+        for (AppUpdateStatusManager.AppUpdateStatus status : ausm.getByPackageName(packageName)) {
+            if (status.status == AppUpdateStatusManager.Status.Installed) {
+                ausm.removeApk(status.getUniqueKey());
+            }
+        }
+        if (app == null) {
+            Toast.makeText(this, R.string.no_such_app, Toast.LENGTH_LONG).show();
+        }
     }
 
     private void onAppChanged() {
         recyclerView.post(new Runnable() {
             @Override
             public void run() {
-                if (!reset(app.packageName)) {
+                resetCurrentApp(app.packageName);
+                if (app == null) {
                     AppDetails2.this.finish();
                     return;
                 }
@@ -705,6 +698,13 @@ public class AppDetails2 extends AppCompatActivity
         });
     }
 
+    @Override
+    public boolean isAppDownloading() {
+        return currentStatus != null &&
+                (currentStatus.status == AppUpdateStatusManager.Status.PendingInstall
+                        || currentStatus.status == AppUpdateStatusManager.Status.Downloading);
+    }
+
     @Override
     public void enableAndroidBeam() {
         NfcHelper.setAndroidBeam(this, app.packageName);
diff --git a/app/src/main/java/org/fdroid/fdroid/AppFilter.java b/app/src/main/java/org/fdroid/fdroid/AppFilter.java
deleted file mode 100644
index 141fdc967..000000000
--- a/app/src/main/java/org/fdroid/fdroid/AppFilter.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2010-12  Ciaran Gultnieks, ciaran@ciarang.com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 3
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-
-package org.fdroid.fdroid;
-
-import org.fdroid.fdroid.data.App;
-
-public class AppFilter {
-
-    // Return true if the given app should be filtered out based on user
-    // preferences, and false otherwise.
-    public boolean filter(App app) {
-        if (app.requirements != null && !Preferences.get().showAppsRequiringRoot()) {
-            for (String requirement : app.requirements) {
-                if ("root".equals(requirement)) {
-                    return true;
-                }
-            }
-        }
-        if (app.antiFeatures != null && app.antiFeatures.length > 0 && !Preferences.get().showAppsWithAntiFeatures()) { // NOPMD NOCHECKSTYLE LineLength
-            return true;
-        }
-        return false;
-    }
-
-}
diff --git a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java
index 640d3f6f1..6844d0934 100644
--- a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java
+++ b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java
@@ -373,16 +373,6 @@ public class FDroidApp extends Application {
 
         InstalledAppProviderService.compareToPackageManager(this);
 
-        // If the user changes the preference to do with filtering rooted apps,
-        // it is easier to just notify a change in the app provider,
-        // so that the newly updated list will correctly filter relevant apps.
-        preferences.registerAppsRequiringRootChangeListener(new Preferences.ChangeListener() {
-            @Override
-            public void onPreferenceChange() {
-                getContentResolver().notifyChange(AppProvider.getContentUri(), null);
-            }
-        });
-
         // If the user changes the preference to do with filtering anti-feature apps,
         // it is easier to just notify a change in the app provider,
         // so that the newly updated list will correctly filter relevant apps.
diff --git a/app/src/main/java/org/fdroid/fdroid/Preferences.java b/app/src/main/java/org/fdroid/fdroid/Preferences.java
index ac282b7ef..21dff8f23 100644
--- a/app/src/main/java/org/fdroid/fdroid/Preferences.java
+++ b/app/src/main/java/org/fdroid/fdroid/Preferences.java
@@ -81,7 +81,6 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
     public static final String PREF_UPDATE_NOTIFICATION_ENABLED = "updateNotify";
     public static final String PREF_THEME = "theme";
     public static final String PREF_SHOW_INCOMPAT_VERSIONS = "incompatibleVersions";
-    public static final String PREF_SHOW_ROOT_APPS = "rooted";
     public static final String PREF_SHOW_ANTI_FEATURE_APPS = "showAntiFeatureApps";
     public static final String PREF_FORCE_TOUCH_APPS = "ignoreTouchscreen";
     public static final String PREF_PROMPT_TO_SEND_CRASH_REPORTS = "promptToSendCrashReports";
@@ -155,12 +154,10 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
             DateUtils.HOUR_IN_MILLIS,
     };
 
-    private boolean showAppsRequiringRoot;
     private boolean showAppsWithAntiFeatures;
 
     private final Map<String, Boolean> initialized = new HashMap<>();
 
-    private final List<ChangeListener> showAppsRequiringRootListeners = new ArrayList<>();
     private final List<ChangeListener> showAppsRequiringAntiFeaturesListeners = new ArrayList<>();
     private final List<ChangeListener> localRepoNameListeners = new ArrayList<>();
     private final List<ChangeListener> localRepoHttpsListeners = new ArrayList<>();
@@ -527,20 +524,6 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
         return preferences.getBoolean(PREF_ALLOW_PUSH_REQUESTS, IGNORED_B);
     }
 
-    /**
-     * This is cached as it is called several times inside app list adapters.
-     * Providing it here means the shared preferences file only needs to be
-     * read once, and we will keep our copy up to date by listening to changes
-     * in PREF_SHOW_ROOT_APPS.
-     */
-    public boolean showAppsRequiringRoot() {
-        if (!isInitialized(PREF_SHOW_ROOT_APPS)) {
-            initialize(PREF_SHOW_ROOT_APPS);
-            showAppsRequiringRoot = preferences.getBoolean(PREF_SHOW_ROOT_APPS, IGNORED_B);
-        }
-        return showAppsRequiringRoot;
-    }
-
     /**
      * This is cached as it is called several times inside app list adapters.
      * Providing it here means the shared preferences file only needs to be
@@ -560,14 +543,6 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
         return showAppsWithAntiFeatures;
     }
 
-    public void registerAppsRequiringRootChangeListener(ChangeListener listener) {
-        showAppsRequiringRootListeners.add(listener);
-    }
-
-    public void unregisterAppsRequiringRootChangeListener(ChangeListener listener) {
-        showAppsRequiringRootListeners.remove(listener);
-    }
-
     public void registerAppsRequiringAntiFeaturesChangeListener(ChangeListener listener) {
         showAppsRequiringAntiFeaturesListeners.add(listener);
     }
@@ -590,11 +565,6 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
         uninitialize(key);
 
         switch (key) {
-            case PREF_SHOW_ROOT_APPS:
-                for (ChangeListener listener : showAppsRequiringRootListeners) {
-                    listener.onPreferenceChange();
-                }
-                break;
             case PREF_SHOW_ANTI_FEATURE_APPS:
                 for (ChangeListener listener : showAppsRequiringAntiFeaturesListeners) {
                     listener.onPreferenceChange();
diff --git a/app/src/main/java/org/fdroid/fdroid/data/App.java b/app/src/main/java/org/fdroid/fdroid/data/App.java
index 75d7d5b1b..a1b02e49e 100644
--- a/app/src/main/java/org/fdroid/fdroid/data/App.java
+++ b/app/src/main/java/org/fdroid/fdroid/data/App.java
@@ -23,7 +23,6 @@ import com.fasterxml.jackson.annotation.JacksonInject;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import org.apache.commons.io.filefilter.RegexFileFilter;
-import org.fdroid.fdroid.AppFilter;
 import org.fdroid.fdroid.FDroidApp;
 import org.fdroid.fdroid.Preferences;
 import org.fdroid.fdroid.Utils;
@@ -1008,15 +1007,17 @@ public class App extends ValueObject implements Comparable<App>, Parcelable {
         boolean canUpdate = hasUpdates();
         AppPrefs prefs = getPrefs(context);
         boolean wantsUpdate = !prefs.ignoreAllUpdates && prefs.ignoreThisUpdate < suggestedVersionCode;
-        return canUpdate && wantsUpdate && !isFiltered();
+        return canUpdate && wantsUpdate && !isDisabledByAntiFeatures();
     }
 
     /**
-     * Whether the app is filtered or not based on AntiFeatures and root
-     * permission (set in the Settings page)
+     * @return if the given app should be filtered out based on the
+     * {@link Preferences#PREF_SHOW_ANTI_FEATURE_APPS Show Anti-Features Setting}
      */
-    public boolean isFiltered() {
-        return new AppFilter().filter(this);
+    public boolean isDisabledByAntiFeatures() {
+        return this.antiFeatures != null
+                && this.antiFeatures.length > 0
+                && !Preferences.get().showAppsWithAntiFeatures();
     }
 
     @Nullable
diff --git a/app/src/main/java/org/fdroid/fdroid/data/InstalledAppProviderService.java b/app/src/main/java/org/fdroid/fdroid/data/InstalledAppProviderService.java
index 5f01aa7bd..2afc56f75 100644
--- a/app/src/main/java/org/fdroid/fdroid/data/InstalledAppProviderService.java
+++ b/app/src/main/java/org/fdroid/fdroid/data/InstalledAppProviderService.java
@@ -12,6 +12,7 @@ import android.support.annotation.Nullable;
 import android.support.v4.app.JobIntentService;
 import android.util.Log;
 import org.acra.ACRA;
+import org.fdroid.fdroid.AppUpdateStatusManager;
 import org.fdroid.fdroid.Utils;
 import org.fdroid.fdroid.data.Schema.InstalledAppTable;
 import rx.functions.Action1;
@@ -31,13 +32,21 @@ import java.util.concurrent.TimeUnit;
  * versus what Android says is installed, or processing {@link Intent}s that come
  * from {@link android.content.BroadcastReceiver}s for {@link Intent#ACTION_PACKAGE_ADDED}
  * and {@link Intent#ACTION_PACKAGE_REMOVED}
- * <p/>
+ * <p>
  * Since {@link android.content.ContentProvider#insert(Uri, ContentValues)} does not check
  * for duplicate records, it is entirely the job of this service to ensure that it is not
  * inserting duplicate versions of the same installed APK. On that note,
  * {@link #insertAppIntoDb(Context, PackageInfo, String, String)} and
  * {@link #deleteAppFromDb(Context, String)} are both static methods to enable easy testing
  * of this stuff.
+ * <p>
+ * This also updates the {@link AppUpdateStatusManager.Status status} of any
+ * package installs that are still in progress.  Most importantly, this
+ * provides the final {@link AppUpdateStatusManager.Status#Installed status update}
+ * to mark the end of the installation process.  It also errors out installation
+ * processes where some outside factor uninstalled the package while the F-Droid
+ * process was underway, e.g. uninstalling via {@code adb}, updates via Google
+ * Play, Yalp, etc.
  */
 @SuppressWarnings("LineLength")
 public class InstalledAppProviderService extends JobIntentService {
@@ -221,11 +230,15 @@ public class InstalledAppProviderService extends JobIntentService {
     protected void onHandleWork(@NonNull Intent intent) {
         Process.setThreadPriority(Process.THREAD_PRIORITY_LOWEST);
 
+        AppUpdateStatusManager ausm = AppUpdateStatusManager.getInstance(this);
         String packageName = intent.getData().getSchemeSpecificPart();
         final String action = intent.getAction();
         if (ACTION_INSERT.equals(action)) {
             PackageInfo packageInfo = getPackageInfo(intent, packageName);
             if (packageInfo != null) {
+                for (AppUpdateStatusManager.AppUpdateStatus status : ausm.getByPackageName(packageName)) {
+                    ausm.updateApk(status.getUniqueKey(), AppUpdateStatusManager.Status.Installed, null);
+                }
                 File apk = getPathToInstalledApk(packageInfo);
                 if (apk == null) {
                     return;
@@ -244,6 +257,9 @@ public class InstalledAppProviderService extends JobIntentService {
             }
         } else if (ACTION_DELETE.equals(action)) {
             deleteAppFromDb(this, packageName);
+            for (AppUpdateStatusManager.AppUpdateStatus status : ausm.getByPackageName(packageName)) {
+                ausm.updateApk(status.getUniqueKey(), AppUpdateStatusManager.Status.InstallError, null);
+            }
         }
         packageChangeNotifier.onNext(packageName);
     }
diff --git a/app/src/main/java/org/fdroid/fdroid/installer/InstallManagerService.java b/app/src/main/java/org/fdroid/fdroid/installer/InstallManagerService.java
index 50d63e3e4..8e0f5e926 100644
--- a/app/src/main/java/org/fdroid/fdroid/installer/InstallManagerService.java
+++ b/app/src/main/java/org/fdroid/fdroid/installer/InstallManagerService.java
@@ -6,7 +6,6 @@ import android.app.Service;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
-import android.content.IntentFilter;
 import android.content.SharedPreferences;
 import android.content.pm.PackageInfo;
 import android.net.Uri;
@@ -52,6 +51,8 @@ import java.io.IOException;
  * {@code {@link #stopSelf(int)}}, so {@code Intent}s are sometimes redelivered even
  * though they are no longer valid.  {@link #onStartCommand(Intent, int, int)} checks
  * first that the incoming {@code Intent} is not an invalid, redelivered {@code Intent}.
+ * {@link #isPendingInstall(String)} and other checks are used to check whether to
+ * process the redelivered {@code Intent} or not.
  * <p>
  * The canonical URL for the APK file to download is also used as the unique ID to
  * represent the download itself throughout F-Droid.  This follows the model
@@ -95,7 +96,6 @@ public class InstallManagerService extends Service {
 
     private LocalBroadcastManager localBroadcastManager;
     private AppUpdateStatusManager appUpdateStatusManager;
-    private BroadcastReceiver broadcastReceiver;
     private boolean running = false;
 
     /**
@@ -111,21 +111,6 @@ public class InstallManagerService extends Service {
         super.onCreate();
         localBroadcastManager = LocalBroadcastManager.getInstance(this);
         appUpdateStatusManager = AppUpdateStatusManager.getInstance(this);
-
-        broadcastReceiver = new BroadcastReceiver() {
-            @Override
-            public void onReceive(Context context, Intent intent) {
-                if (intent.getData() == null) return;
-                String packageName = intent.getData().getSchemeSpecificPart();
-                for (AppUpdateStatusManager.AppUpdateStatus status : appUpdateStatusManager.getByPackageName(packageName)) {
-                    appUpdateStatusManager.updateApk(status.getUniqueKey(), AppUpdateStatusManager.Status.Installed, null);
-                }
-            }
-        };
-        IntentFilter intentFilter = new IntentFilter();
-        intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
-        intentFilter.addDataScheme("package");
-        registerReceiver(broadcastReceiver, intentFilter);
         running = true;
         pendingInstalls = getPendingInstalls(this);
     }
@@ -140,7 +125,6 @@ public class InstallManagerService extends Service {
     @Override
     public void onDestroy() {
         running = false;
-        unregisterReceiver(broadcastReceiver);
         super.onDestroy();
     }
 
@@ -489,25 +473,12 @@ public class InstallManagerService extends Service {
         return pendingInstalls.contains(urlString);
     }
 
-    /**
-     * Look up by {@code packageName} whether it is a Pending Install.
-     *
-     * @see #isPendingInstall(String)
-     */
-    public static boolean isPendingInstall(Context context, String packageName) {
-        if (pendingInstalls == null) {
-            pendingInstalls = getPendingInstalls(context);
-        }
-        return pendingInstalls.getAll().values().contains(packageName);
-    }
-
     /**
      * Mark a given APK as in the process of being installed, with
      * the {@code urlString} of the download used as the unique ID,
      * and the file hash used to verify that things are the same.
      *
      * @see #isPendingInstall(String)
-     * @see #isPendingInstall(Context, String)
      */
     public static void putPendingInstall(Context context, String urlString, String packageName) {
         if (pendingInstalls == null) {
diff --git a/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java b/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java
index 150aabbc5..b59403ac8 100644
--- a/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java
+++ b/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java
@@ -43,7 +43,6 @@ import org.fdroid.fdroid.data.ApkProvider;
 import org.fdroid.fdroid.data.App;
 import org.fdroid.fdroid.data.InstalledAppProvider;
 import org.fdroid.fdroid.data.RepoProvider;
-import org.fdroid.fdroid.installer.InstallManagerService;
 import org.fdroid.fdroid.privileged.views.AppDiff;
 import org.fdroid.fdroid.privileged.views.AppSecurityPermissions;
 import org.fdroid.fdroid.views.main.MainActivity;
@@ -58,6 +57,8 @@ public class AppDetailsRecyclerViewAdapter
 
     public interface AppDetailsRecyclerViewAdapterCallbacks {
 
+        boolean isAppDownloading();
+
         void enableAndroidBeam();
 
         void disableAndroidBeam();
@@ -487,7 +488,7 @@ public class AppDetailsRecyclerViewAdapter
             buttonSecondaryView.setOnClickListener(onUnInstallClickListener);
             buttonPrimaryView.setText(R.string.menu_install);
             buttonPrimaryView.setVisibility(versions.size() > 0 ? View.VISIBLE : View.GONE);
-            if (InstallManagerService.isPendingInstall(context, app.packageName)) {
+            if (callbacks.isAppDownloading()) {
                 buttonPrimaryView.setText(R.string.downloading);
                 buttonPrimaryView.setEnabled(false);
                 buttonLayout.setVisibility(View.GONE);
diff --git a/app/src/main/java/org/fdroid/fdroid/views/apps/AppListItemController.java b/app/src/main/java/org/fdroid/fdroid/views/apps/AppListItemController.java
index eaa78f14e..fbafdb9ae 100644
--- a/app/src/main/java/org/fdroid/fdroid/views/apps/AppListItemController.java
+++ b/app/src/main/java/org/fdroid/fdroid/views/apps/AppListItemController.java
@@ -108,7 +108,12 @@ public abstract class AppListItemController extends RecyclerView.ViewHolder {
 
         installButton = (ImageView) itemView.findViewById(R.id.install);
         if (installButton != null) {
-            installButton.setOnClickListener(onActionClicked);
+            installButton.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    onActionButtonPressed(currentApp);
+                }
+            });
 
             if (Build.VERSION.SDK_INT >= 21) {
                 installButton.setOutlineProvider(new ViewOutlineProvider() {
@@ -140,7 +145,14 @@ public abstract class AppListItemController extends RecyclerView.ViewHolder {
         secondaryButton = (Button) itemView.findViewById(R.id.secondary_button);
 
         if (actionButton != null) {
-            actionButton.setOnClickListener(onActionClicked);
+            actionButton.setEnabled(true);
+            actionButton.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    actionButton.setEnabled(false);
+                    onActionButtonPressed(currentApp);
+                }
+            });
         }
 
         if (secondaryButton != null) {
@@ -439,18 +451,6 @@ public abstract class AppListItemController extends RecyclerView.ViewHolder {
         }
     };
 
-    @SuppressWarnings("FieldCanBeLocal")
-    private final View.OnClickListener onActionClicked = new View.OnClickListener() {
-        @Override
-        public void onClick(View v) {
-            if (currentApp == null) {
-                return;
-            }
-
-            onActionButtonPressed(currentApp);
-        }
-    };
-
     @SuppressWarnings("FieldCanBeLocal")
     private final View.OnClickListener onSecondaryButtonClicked = new View.OnClickListener() {
         @Override
@@ -463,7 +463,11 @@ public abstract class AppListItemController extends RecyclerView.ViewHolder {
         }
     };
 
-    protected void onActionButtonPressed(@NonNull App app) {
+    protected void onActionButtonPressed(App app) {
+        if (app == null) {
+            return;
+        }
+
         // When the button says "Run", then launch the app.
         if (currentStatus != null && currentStatus.status == AppUpdateStatusManager.Status.Installed) {
             Intent intent = activity.getPackageManager().getLaunchIntentForPackage(app.packageName);
@@ -484,9 +488,6 @@ public abstract class AppListItemController extends RecyclerView.ViewHolder {
             Utils.debugLog(TAG, "skip download, we have already downloaded " + currentStatus.apk.getUrl() +
                     " to " + apkFilePath);
 
-            // TODO: This seems like a bit of a hack. Is there a better way to do this by changing
-            // the Installer API so that we can ask it to install without having to get it to fire
-            // off an intent which we then listen for and action?
             final LocalBroadcastManager broadcastManager = LocalBroadcastManager.getInstance(activity);
             final BroadcastReceiver receiver = new BroadcastReceiver() {
                 @Override
diff --git a/app/src/main/java/org/fdroid/fdroid/views/apps/StandardAppListItemController.java b/app/src/main/java/org/fdroid/fdroid/views/apps/StandardAppListItemController.java
index dcfa73e9d..a35d64b32 100644
--- a/app/src/main/java/org/fdroid/fdroid/views/apps/StandardAppListItemController.java
+++ b/app/src/main/java/org/fdroid/fdroid/views/apps/StandardAppListItemController.java
@@ -4,7 +4,6 @@ import android.app.Activity;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.view.View;
-
 import org.fdroid.fdroid.AppUpdateStatusManager;
 import org.fdroid.fdroid.R;
 import org.fdroid.fdroid.data.App;
@@ -12,9 +11,11 @@ import org.fdroid.fdroid.data.App;
 /**
  * Used for search results or for category lists.
  * Shows an inline download button, and also (if appropriate):
- *  * Whether the app is incompatible.
- *  * Version that app can be upgraded to.
- *  * Installed version.
+ * <ul>
+ * <li>Whether the app is incompatible
+ * <li>Version that app can be upgraded to
+ * <li>Installed version
+ * </ul>
  */
 public class StandardAppListItemController extends AppListItemController {
     public StandardAppListItemController(Activity activity, View itemView) {
@@ -35,6 +36,8 @@ public class StandardAppListItemController extends AppListItemController {
     private CharSequence getStatusText(@NonNull App app) {
         if (!app.compatible) {
             return activity.getString(R.string.app_incompatible);
+        } else if (app.isDisabledByAntiFeatures()) {
+            return activity.getString(R.string.antifeatures);
         } else if (app.isInstalled(activity.getApplicationContext())) {
             if (app.canAndWantToUpdate(activity)) {
                 return activity.getString(R.string.app_version_x_available, app.getSuggestedVersionName());
@@ -48,7 +51,7 @@ public class StandardAppListItemController extends AppListItemController {
 
     private boolean shouldShowInstall(@NonNull App app) {
         boolean installable = app.canAndWantToUpdate(activity) || !app.isInstalled(activity.getApplicationContext());
-        boolean shouldAllow = app.compatible && !app.isFiltered();
+        boolean shouldAllow = app.compatible && !app.isDisabledByAntiFeatures();
 
         return installable && shouldAllow;
     }
diff --git a/app/src/main/java/org/fdroid/fdroid/views/fragments/PreferencesFragment.java b/app/src/main/java/org/fdroid/fdroid/views/fragments/PreferencesFragment.java
index 62f29f63e..884a8ce32 100644
--- a/app/src/main/java/org/fdroid/fdroid/views/fragments/PreferencesFragment.java
+++ b/app/src/main/java/org/fdroid/fdroid/views/fragments/PreferencesFragment.java
@@ -28,6 +28,7 @@ package org.fdroid.fdroid.views.fragments;
 import android.app.Activity;
 import android.content.Intent;
 import android.content.SharedPreferences;
+import android.content.pm.PackageManager;
 import android.os.Build;
 import android.os.Bundle;
 import android.support.v14.preference.PreferenceFragment;
@@ -65,7 +66,6 @@ public class PreferencesFragment extends PreferenceFragment
             Preferences.PREF_OVER_DATA,
             Preferences.PREF_UPDATE_INTERVAL,
             Preferences.PREF_UPDATE_NOTIFICATION_ENABLED,
-            Preferences.PREF_SHOW_ROOT_APPS,
             Preferences.PREF_SHOW_ANTI_FEATURE_APPS,
             Preferences.PREF_SHOW_INCOMPAT_VERSIONS,
             Preferences.PREF_THEME,
@@ -157,11 +157,18 @@ public class PreferencesFragment extends PreferenceFragment
             languagePref.setEntries(languages.getAllNames());
             languagePref.setEntryValues(languages.getSupportedLocales());
         }
+
+        if (getActivity().getPackageManager().hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN)) {
+            PreferenceCategory category = (PreferenceCategory) findPreference("pref_category_appcompatibility");
+            category.removePreference(findPreference(Preferences.PREF_FORCE_TOUCH_APPS));
+        }
     }
 
     private void checkSummary(String key, int resId) {
         Preference pref = findPreference(key);
-        pref.setSummary(resId);
+        if (pref != null) {
+            pref.setSummary(resId);
+        }
     }
 
     private void entrySummary(String key) {
@@ -249,10 +256,6 @@ public class PreferencesFragment extends PreferenceFragment
                 checkSummary(key, R.string.show_incompat_versions_on);
                 break;
 
-            case Preferences.PREF_SHOW_ROOT_APPS:
-                checkSummary(key, R.string.show_root_apps_on);
-                break;
-
             case Preferences.PREF_SHOW_ANTI_FEATURE_APPS:
                 checkSummary(key, R.string.show_anti_feature_apps_on);
                 break;
diff --git a/app/src/main/java/org/fdroid/fdroid/views/updates/UpdatesAdapter.java b/app/src/main/java/org/fdroid/fdroid/views/updates/UpdatesAdapter.java
index 7489c28a8..cf5594f65 100644
--- a/app/src/main/java/org/fdroid/fdroid/views/updates/UpdatesAdapter.java
+++ b/app/src/main/java/org/fdroid/fdroid/views/updates/UpdatesAdapter.java
@@ -99,7 +99,9 @@ public class UpdatesAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
      * {@link org.fdroid.fdroid.AppUpdateStatusManager.Status#UpdateAvailable} are not interesting here.
      */
     private boolean shouldShowStatus(AppUpdateStatusManager.AppUpdateStatus status) {
-        return status.status == AppUpdateStatusManager.Status.Downloading ||
+        return status.status == AppUpdateStatusManager.Status.PendingInstall ||
+                status.status == AppUpdateStatusManager.Status.Downloading ||
+                status.status == AppUpdateStatusManager.Status.Installing ||
                 status.status == AppUpdateStatusManager.Status.Installed ||
                 status.status == AppUpdateStatusManager.Status.ReadyToInstall;
     }
diff --git a/app/src/main/java/org/fdroid/fdroid/views/updates/items/UpdateableAppsHeader.java b/app/src/main/java/org/fdroid/fdroid/views/updates/items/UpdateableAppsHeader.java
index 7770e3624..5e5b6a971 100644
--- a/app/src/main/java/org/fdroid/fdroid/views/updates/items/UpdateableAppsHeader.java
+++ b/app/src/main/java/org/fdroid/fdroid/views/updates/items/UpdateableAppsHeader.java
@@ -64,7 +64,7 @@ public class UpdateableAppsHeader extends AppUpdateData {
         }
     }
 
-    public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
+    public static class ViewHolder extends RecyclerView.ViewHolder {
 
         private UpdateableAppsHeader header;
 
@@ -81,8 +81,22 @@ public class UpdateableAppsHeader extends AppUpdateData {
             appsToUpdate = (TextView) itemView.findViewById(R.id.text_apps_to_update);
             toggleAppsToUpdate = (Button) itemView.findViewById(R.id.button_toggle_apps_to_update);
 
-            toggleAppsToUpdate.setOnClickListener(this);
-            downloadAll.setOnClickListener(this);
+            toggleAppsToUpdate.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    header.adapter.toggleAllUpdateableApps();
+                    updateToggleButtonText();
+                }
+            });
+
+            downloadAll.setVisibility(View.VISIBLE);
+            downloadAll.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    downloadAll.setVisibility(View.GONE);
+                    UpdateService.autoDownloadUpdates(header.activity);
+                }
+            });
         }
 
         public void bindHeader(UpdateableAppsHeader header) {
@@ -101,16 +115,6 @@ public class UpdateableAppsHeader extends AppUpdateData {
             updateToggleButtonText();
         }
 
-        @Override
-        public void onClick(View v) {
-            if (v == toggleAppsToUpdate) {
-                header.adapter.toggleAllUpdateableApps();
-                updateToggleButtonText();
-            } else if (v == downloadAll) {
-                UpdateService.autoDownloadUpdates(header.activity);
-            }
-        }
-
         private void updateToggleButtonText() {
             if (header.adapter.canViewAllUpdateableApps()) {
                 toggleAppsToUpdate.setText(R.string.updates__hide_updateable_apps);
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index 56be345d5..77cdfe52d 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -502,8 +502,6 @@
     <string name="repo_add_mirror">إضافة مستودع مِرآة</string>
     <string name="sort_search">ترتيب حسب</string>
 
-    <string name="show_root_apps">إضافة التطبيقات التي تحتاج إلى التصريحات الجذرية</string>
-    <string name="show_root_apps_on">إظهار التطبيقات التي تتطلّب التصريحات الجذرية</string>
     <string name="force_touch_apps">إضافة التطبيقات التي تتطلّب لمس الشاشة</string>
     <string name="hide_on_long_search_press_title">الإخفاء عن طريق زر البحث</string>
     <string name="hide_on_long_search_press_summary">الضغط المُطوّل على زر البحث يُمكّن مِن إخفاء التطبيق</string>
diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml
index 5d67aa896..53692a686 100644
--- a/app/src/main/res/values-be/strings.xml
+++ b/app/src/main/res/values-be/strings.xml
@@ -562,8 +562,6 @@
     <string name="menu_liberapay">Liberapay</string>
 
 <string name="warning_scaning_qr_code">Ваша камеры не падтрымлівае аўтафокус. Сканаванне кода можа быць абцяжаранае.</string>
-    <string name="show_root_apps">Паказваць root-прыкладанні</string>
-    <string name="show_root_apps_on">Паказваць прыкладанні, які патрабуюць root-прывілей</string>
     <string name="force_touch_apps">Паказваць прыкладанні для сэнсарнага экрана</string>
     <string name="force_touch_apps_on">Паказваць прыкладанні, якія патрабуюць сэнсарны экран незалежна ад наяўнасці апаратнай падтрымкі</string>
 
diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml
index 7dd8014ac..fc5ba2577 100644
--- a/app/src/main/res/values-ca/strings.xml
+++ b/app/src/main/res/values-ca/strings.xml
@@ -499,7 +499,6 @@
 
     <string name="menu_liberapay">Liberapay</string>
 
-    <string name="show_root_apps_on">Mostra aplicacions que requereixen privilegis d\'administrador</string>
     <string name="panic_hide_warning_title">Recorda com restaurar-ho</string>
     <string name="panic_hide_warning_message">En una situació de pànic, això esborrarà %1$s del menú. Només es podrà restaurar escrivint \"%2$d\" a la falsa aplicació %3$s.</string>
 
@@ -516,7 +515,6 @@
     <string name="antidisabledalgorithmlist">La signatura de seguretat de l\'aplicació és feble</string>
     <string name="antiknownvulnlist">Aquesta aplicació té un problema de seguretat conegut</string>
 
-    <string name="show_root_apps">Inclou aplicacions amb accés d\'administrador</string>
     <string name="show_anti_feature_apps">Inclou aplicacions amb característiques indesitjades</string>
     <string name="show_anti_feature_apps_on">Mostra aplicacions que requereixen característiques indesitjades</string>
     <string name="force_touch_apps">Inclou aplicacions per pantalla tàctil</string>
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index 0a77dc3cc..5ca345536 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -537,8 +537,6 @@
     <string name="menu_liberapay">Liberapay</string>
 
 <string name="warning_scaning_qr_code">Vypadá to, že váš fotoaparát nemá automatické zaostřování. Oskenování kódu může být obtížné.</string>
-    <string name="show_root_apps">Zahrnout aplikace vyžadující root přístup</string>
-    <string name="show_root_apps_on">Zobrazit aplikace které vyžadují práva root</string>
     <string name="show_anti_feature_apps">Zahrnout aplikace s funkcemi které nejsou v zájmu uživatele</string>
     <string name="show_anti_feature_apps_on">Zobrazit aplikace které vyžadují funkce které nejsou v zájmu uživatele</string>
     <string name="force_touch_apps">Zahrnout aplikace pro dotykovou obrazovku</string>
diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml
index 6089834e7..259542624 100644
--- a/app/src/main/res/values-da/strings.xml
+++ b/app/src/main/res/values-da/strings.xml
@@ -491,6 +491,4 @@
     <string name="antidisabledalgorithmlist">Denne app har en svag sikkerhedssignatur</string>
     <string name="antiknownvulnlist">Denne app indeholder en kendt sårbarhed</string>
 
-    <string name="show_root_apps">Inkluder root-apps</string>
-    <string name="show_root_apps_on">Vis apps som kræver root-rettigheder</string>
     </resources>
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 4ef66334e..4c44181da 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -522,8 +522,6 @@
 
     <string name="panic_hide_warning_title">Wiederherstellungsmethode merken</string>
 <string name="warning_scaning_qr_code">Ihre Kamera scheint keinen Autofokus zu haben. Es könnte schwierig sein, den Code zu scannen.</string>
-    <string name="show_root_apps">Root-Apps einbeziehen</string>
-    <string name="show_root_apps_on">Apps anzeigen, die Root-Berechtigungen benötigen</string>
     <string name="repo_add_mirror">Mirror hinzufügen</string>
     <string name="repo_exists_add_fingerprint">%1$s ist bereits eingerichtet, dies fügt neue Schlüsselinformationen hinzu.</string>
     <string name="repo_exists_enable">%1$s ist bereits eingestellt, bestätigen Sie, dass Sie erneut aktivieren möchten.</string>
diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml
index eb848f48a..a2fed0039 100644
--- a/app/src/main/res/values-eo/strings.xml
+++ b/app/src/main/res/values-eo/strings.xml
@@ -515,8 +515,6 @@
     <string name="menu_liberapay">Liberapay</string>
 
 <string name="warning_scaning_qr_code">Via fotilo ne havas memfokuson. Povas esti malfacile skani la kodon.</string>
-    <string name="show_root_apps">Inkluzivi ĉefuzantajn aplikaĵojn</string>
-    <string name="show_root_apps_on">Montri aplikaĵojn, kiuj postulas ĉefuzantan aliron (root)</string>
     <string name="show_anti_feature_apps">Inkluzivi aplikaĵojn kun fiebloj</string>
     <string name="show_anti_feature_apps_on">Montri aplikaĵojn, kiuj enhavas nedeziratajn eblojn</string>
     <string name="force_touch_apps">Inkluzivi tuŝekranajn aplikaĵojn</string>
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 5adf98b72..dcc3c9f0e 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -536,8 +536,6 @@
     <string name="repo_exists_and_enabled">%1$s ya está configurado y habilitado.</string>
     <string name="repo_delete_to_overwrite">Primero borra %1$s para agregar este ya que hay un conflicto de claves.</string>
     <string name="repo_exists_add_mirror">Esto es una copia de %1$s, ¿agregarlo como réplica?</string>
-    <string name="show_root_apps">Incluir aplicaciones con acceso de administrador</string>
-    <string name="show_root_apps_on">Listar aplicaciones que requieren privilegios de administrador</string>
     <string name="show_anti_feature_apps">Incluir aplicaciones controvertidas</string>
     <string name="show_anti_feature_apps_on">Listar aplicaciones que requieren características controvertidas</string>
     <string name="force_touch_apps">Incluir aplicaciones de pantalla táctil</string>
diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml
index 2a1ff2a85..8ee62d3b0 100644
--- a/app/src/main/res/values-eu/strings.xml
+++ b/app/src/main/res/values-eu/strings.xml
@@ -547,8 +547,6 @@
     <string name="menu_liberapay">Liberapay</string>
 
 <string name="warning_scaning_qr_code">Zure kamerak ez du fokatze automatikorako gaitasunik. Kodea eskaneatzea zaila izan daiteke.</string>
-    <string name="show_root_apps">Sartu root aplikazioak</string>
-    <string name="show_root_apps_on">Erakutsi root baimenak behar dituzten aplikazioak</string>
     <string name="show_anti_feature_apps">Sartu ezaugarri zalantzagarriak dituzten aplikazioak</string>
     <string name="show_anti_feature_apps_on">Erakutsi ezaugarri zalantzagarriak behar dituzten aplikazioak</string>
     <string name="force_touch_apps">Sartu ukimen pantaila darabilten aplikazioak</string>
diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml
index 906ad2aee..b0190fead 100644
--- a/app/src/main/res/values-fa/strings.xml
+++ b/app/src/main/res/values-fa/strings.xml
@@ -517,8 +517,6 @@
     <string name="antidisabledalgorithmlist">این کاره یک امضای امنیتی ضعیف دارد</string>
     <string name="antiknownvulnlist">این کاره یک آسیب‌پذیری امنیتی شناخته‌شده دارد</string>
 
-    <string name="show_root_apps">شامل کاره‌های ریشه‌ای</string>
-    <string name="show_root_apps_on">نمایش کاره‌هایی که نیاز به دسترسی ریشه دارند</string>
     <string name="show_anti_feature_apps">شامل کاره‌های ضدویژگی‌دار</string>
     <string name="show_anti_feature_apps_on">نمایش کاره‌هایی که نیاز به ضدویژگی دارند</string>
     <string name="force_touch_apps">شامل کاره‌های لمسی</string>
diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml
index 3e3058507..0faf5975a 100644
--- a/app/src/main/res/values-fi/strings.xml
+++ b/app/src/main/res/values-fi/strings.xml
@@ -480,8 +480,6 @@
     <string name="antidisabledalgorithmlist">Tällä sovelluksella on heikko turvallisuusallekirjoitus</string>
     <string name="antiknownvulnlist">Tämä sovellus sisältää tunnetun haavoittuvuuden</string>
 
-    <string name="show_root_apps">Sisällytä root-sovellukset</string>
-    <string name="show_root_apps_on">Näytä sovellukset, jotka vaativat root-oikeudet</string>
     <string name="show_anti_feature_apps">Sisällytä anti-ominaisuus -sovellukset</string>
     <string name="show_anti_feature_apps_on">Näytä sovellukset, jotka vaativat anti-ominaisuuksia</string>
     <string name="force_touch_apps">Sisällytä kosketusnäyttösovellukset</string>
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index d9cd38866..e58d900e5 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -526,8 +526,6 @@
     <string name="hide_on_long_search_press_summary">Appuyer longtemps sur le bouton de recherche masquera l\'application</string>
 
 <string name="warning_scaning_qr_code">Votre appareil-photo n’a pas de mise au point automatique. Il sera peut-être difficile de scanner le code.</string>
-    <string name="show_root_apps">Inclure les applications root</string>
-    <string name="show_root_apps_on">Afficher les applications nécessitant les privilèges root</string>
     <string name="repo_add_mirror">Ajouter un miroir</string>
     <string name="repo_delete_to_overwrite">Veuillez d\'abord supprimer %1$s pour pouvoir l\'ajouter avec la clé en conflit.</string>
     <string name="repo_exists_add_mirror">Il s\'agit d\'une copie de %1$s, l\'ajouter comme miroir ?</string>
diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml
index e4441fd6a..095a9e5e5 100644
--- a/app/src/main/res/values-gl/strings.xml
+++ b/app/src/main/res/values-gl/strings.xml
@@ -538,8 +538,6 @@
     <string name="antidisabledalgorithmlist">Este aplicativo ten unha sinatura de seguridade feble</string>
     <string name="antiknownvulnlist">Esta aplicación contén unha vulnerabilidade de seguridade coñecida</string>
 
-    <string name="show_root_apps">Incluir aplicativos con permiso de administrador</string>
-    <string name="show_root_apps_on">Amosar aplicativos que requiren privilexios de administrador</string>
     <string name="show_anti_feature_apps">Incluir aplicativos con anti-funcionalidades</string>
     <string name="show_anti_feature_apps_on">Amosar aplicativos que requiren de anti-funcionalidades</string>
     <string name="force_touch_apps">Incluir aplicativos de pantalla táctil</string>
diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml
index c8d3c5855..e3fb90410 100644
--- a/app/src/main/res/values-he/strings.xml
+++ b/app/src/main/res/values-he/strings.xml
@@ -532,8 +532,6 @@
     <string name="menu_liberapay">Liberapay</string>
 
 <string name="warning_scaning_qr_code">כנראה שלמצלמה שלך אין מיקוד אוטומטי. סריקת הקוד עשויה להוות מכשול.</string>
-    <string name="show_root_apps">לכלול גירסאות שדורשות גישת על</string>
-    <string name="show_root_apps_on">הצגת יישומונים שדורשים גישת על למכשיר</string>
     <string name="show_anti_feature_apps">לכלול יישומונים שמכילים תכונות שליליות</string>
     <string name="show_anti_feature_apps_on">הצגת יישומונים שדורשים תכונות שליליות</string>
     <string name="force_touch_apps">לכלול יישומוני מסך מגע</string>
diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
index 7204634da..5e77863b6 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -473,7 +473,6 @@
     <string name="antidisabledalgorithmlist">Ennek az alkalmazásnak gyönge a biztonsági aláírása</string>
     <string name="antiknownvulnlist">Ez az alkalmazás ismert biztonsági rést tartalmaz</string>
 
-    <string name="show_root_apps">Root jogot igénylő alkalmazások belefoglalása</string>
     <string name="over_data">Adatkapcsolaton keresztül</string>
     <string name="repo_exists_add_fingerprint">A(z) %1$s már be lett állítva, ez új kulcsinformációkat fog hozzáadni.</string>
     <string name="repo_exists_enable">A(z) %1$s már be lett állítva, erősítse meg, hogy újra engedélyezni akarja.</string>
@@ -481,7 +480,6 @@
     <string name="repo_delete_to_overwrite">Először törölje a(z) %1$s alkalmazást, hogy hozzáadhassa egy ütköző kulccsal.</string>
     <string name="menu_liberapay">Liberapay</string>
 
-    <string name="show_root_apps_on">Azon alkalmazások megjelenítése, melyekhez root jogosultság szükséges</string>
     <string name="show_anti_feature_apps">Előnytelen funkciókkal rendelkező alkalmazások belefoglalása</string>
     <string name="show_anti_feature_apps_on">Azon alkalmazások megjelenítése, melyek előnytelen funkciókkal rendelkeznek</string>
     <string name="force_touch_apps">Érintőképernyős alkalmazások belefoglalása</string>
diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml
index d673f0f7b..362ff8e12 100644
--- a/app/src/main/res/values-id/strings.xml
+++ b/app/src/main/res/values-id/strings.xml
@@ -514,8 +514,6 @@
     <string name="repo_exists_add_mirror">Ini adalah salinan dari %1$s, tambahkan sebagai mirror?</string>
     <string name="menu_liberapay">Liberapay</string>
 
-    <string name="show_root_apps">Termasuk apl root</string>
-    <string name="show_root_apps_on">Tampilkan apl yg butuh akses root</string>
     <string name="show_anti_feature_apps">Termasuk apl anti-fitur</string>
     <string name="show_anti_feature_apps_on">Tampilkan apl yg butuh anti-fitur</string>
     <string name="force_touch_apps">Termasuk apl layar sentuh</string>
diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml
index bd0ec2409..f825a1a7a 100644
--- a/app/src/main/res/values-is/strings.xml
+++ b/app/src/main/res/values-is/strings.xml
@@ -561,8 +561,6 @@
     <string name="menu_liberapay">Liberapay</string>
 
 <string name="warning_scaning_qr_code">Það lítur út eins og myndavélin þín sé ekki með sjálfvirkan fókus. Það gæti orðið vandkvæðum bundið að skanna kóðann.</string>
-    <string name="show_root_apps">Hafa með rótaraðgangsforrit</string>
-    <string name="show_root_apps_on">Birta forrit sem þurfa rótaraðgang</string>
     <string name="show_anti_feature_apps">Hafa með forrit með ókostum</string>
     <string name="show_anti_feature_apps_on">Birta forrit með óæskilegum eiginleikum</string>
     <string name="force_touch_apps">Hafa með forrit sem þurfa snertiskjá</string>
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 3e91f6ccb..85e96a6b3 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -532,8 +532,6 @@
     <string name="repo_exists_add_mirror">Questa è una copia di %1$s, aggiungerla come mirror?</string>
     <string name="menu_liberapay">Liberapay</string>
 
-    <string name="show_root_apps">Includi app di root</string>
-    <string name="show_root_apps_on">Mostra le app che richiedono privilegi di root</string>
     <string name="show_anti_feature_apps">Includi app con anti-caratteristiche</string>
     <string name="show_anti_feature_apps_on">Mostra app che richiedono anti-caratteristiche</string>
     <string name="force_touch_apps">Includi app tattili</string>
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 62451f066..d8f0329f0 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -489,8 +489,6 @@
     <string name="repo_exists_and_enabled">%1$sはすでに設定済みで有効です。</string>
     <string name="repo_delete_to_overwrite">競合する鍵でこのリポジトリを追加するためには、先に%1$sを削除してください。</string>
     <string name="repo_exists_add_mirror">これは%1$sの複製です。ミラーとして追加しますか?</string>
-    <string name="show_root_apps">root権限の使用が必要なアプリ</string>
-    <string name="show_root_apps_on">root権限の使用を必要とするアプリを表示します</string>
     <string name="show_anti_feature_apps">好ましくない機能の使用が必要なアプリ</string>
     <string name="show_anti_feature_apps_on">好ましくない機能の使用を必要とするアプリを表示します</string>
     <string name="force_touch_apps">タッチスクリーンの使用が必要なアプリ</string>
diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml
index 38c089dab..60afb2365 100644
--- a/app/src/main/res/values-ko/strings.xml
+++ b/app/src/main/res/values-ko/strings.xml
@@ -479,8 +479,6 @@
     <string name="repo_exists_and_enabled">%1$s은(는) 이미 설정되어 있으며, 활성화됩니다.</string>
     <string name="repo_delete_to_overwrite">이것과 충돌하는 키를 추가하려면 먼저 %1$s을(를) 삭제합니다.</string>
     <string name="repo_exists_add_mirror">이것은 %1$s의 복사본입니다, 그것을 미러로 추가하시겠습니까?</string>
-    <string name="show_root_apps">루트 앱을 포함</string>
-    <string name="show_root_apps_on">루트 권한이 필요한 앱을 보여주기</string>
     <string name="show_anti_feature_apps">안티 기능 앱을 포함</string>
     <string name="show_anti_feature_apps_on">안티 기능이 필요한 앱을 보여주기</string>
     <string name="force_touch_apps">터치스크린 앱을 포함</string>
diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml
index 6cdc5f021..e5d2e7a93 100644
--- a/app/src/main/res/values-nb/strings.xml
+++ b/app/src/main/res/values-nb/strings.xml
@@ -528,8 +528,6 @@
     <string name="menu_liberapay">Liberapay</string>
 
     <string name="warning_scaning_qr_code">Kameraet ditt mangler autofokus. Det kan vise seg vanskelig å skanne koden.</string>
-    <string name="show_root_apps">Inkluder root-programmer</string>
-    <string name="show_root_apps_on">Vis programmer som krever root-tilgang</string>
     <string name="show_anti_feature_apps">Inkluder antifunksjons-programmer</string>
     <string name="show_anti_feature_apps_on">Vis programmer som krever anti-funksjoner</string>
     <string name="force_touch_apps">Inkluder pekeskjermsprogrammer</string>
diff --git a/app/src/main/res/values-nl-rBE/strings.xml b/app/src/main/res/values-nl-rBE/strings.xml
index c6d65aa1f..763d1914f 100644
--- a/app/src/main/res/values-nl-rBE/strings.xml
+++ b/app/src/main/res/values-nl-rBE/strings.xml
@@ -238,8 +238,6 @@
     <string name="appcompatibility">Compatibiliteit van app</string>
     <string name="show_incompat_versions">Incompatibele versies tonen</string>
     <string name="show_incompat_versions_on">Toont app-versies die niet compatibel zijn met uw apparaat</string>
-    <string name="show_root_apps">Root-apps tonen</string>
-    <string name="show_root_apps_on">Toont apps die root-privileges vereisen</string>
     <string name="show_anti_feature_apps">Apps met antifuncties tonen</string>
     <string name="show_anti_feature_apps_on">Toont apps die antifuncties bevatten</string>
     <string name="force_touch_apps">Aanraakschermapps tonen</string>
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index ee6cb03b0..2fafd3a0e 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -508,8 +508,6 @@
     <string name="menu_liberapay">Liberapay</string>
 
 <string name="warning_scaning_qr_code">Je camera lijkt niet over autofocus te beschikken. Het scannen van de code kan moeilijk zijn.</string>
-    <string name="show_root_apps">Root-apps tonen</string>
-    <string name="show_root_apps_on">Toon apps die root-privileges vereisen</string>
     <string name="show_anti_feature_apps">Apps met antifuncties tonen</string>
     <string name="show_anti_feature_apps_on">Toon apps die antifuncties bevatten</string>
     <string name="force_touch_apps">Aanraakschermapps tonen</string>
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index 7fe993136..69d92eb83 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -538,8 +538,6 @@
     <string name="menu_liberapay">Liberapay</string>
 
 <string name="warning_scaning_qr_code">Twój aparat nie posiada autofokusu. Mogą wystąpić trudności ze zeskanowaniem kodu.</string>
-    <string name="show_root_apps">Uwzględnij aplikacje roota</string>
-    <string name="show_root_apps_on">Pokaż aplikacje wymagające do działania uprawnień roota</string>
     <string name="show_anti_feature_apps">Uwzględnij (trochę) niefajne aplikacje</string>
     <string name="show_anti_feature_apps_on">Pokaż aplikacje zawierające niepożądane funkcje</string>
     <string name="force_touch_apps">Uwzględnij aplikacje dotykowe</string>
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index cb46f2019..34537f464 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -543,8 +543,6 @@
     <string name="warning_scaning_qr_code">Sua câmera não parece ter focagem automática. Pode ser difícil escanear o código.</string>
     <string name="repo_add_mirror">Adicionar mirror</string>
     <string name="repo_exists_add_mirror">Esta é uma copia de %1$s, adicionar ele como um mirror?</string>
-    <string name="show_root_apps">Incluir aplicativos root</string>
-    <string name="show_root_apps_on">Mostrar aplicativos que requerem privilégios root</string>
     <string name="show_anti_feature_apps">Incluir aplicativos antifraude</string>
     <string name="force_touch_apps">Incluir aplicativos touchscreen</string>
     <string name="force_touch_apps_on">Mostrar aplicativos touchscreen independente do suporte de hardware</string>
diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml
index 6eaf98c0e..948be240a 100644
--- a/app/src/main/res/values-pt-rPT/strings.xml
+++ b/app/src/main/res/values-pt-rPT/strings.xml
@@ -545,8 +545,6 @@
     <string name="repo_exists_add_mirror">Esta é uma cópia de %1$s, deseja adicionar como \'mirror\'?</string>
     <string name="menu_liberapay">Liberapay</string>
 
-    <string name="show_root_apps">Incluir aplicações \'root\'</string>
-    <string name="show_root_apps_on">Mostrar aplicações que necessitam de acesso \'root\'</string>
     <string name="show_anti_feature_apps">Incluir aplicações com anti-funcionalidades</string>
     <string name="show_anti_feature_apps_on">Mostrar aplicações que necessitem de anti-funcionalidades</string>
     <string name="force_touch_apps">Incluir aplicações \'touchscreen\'</string>
diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml
index 41888d0ff..799321f72 100644
--- a/app/src/main/res/values-ro/strings.xml
+++ b/app/src/main/res/values-ro/strings.xml
@@ -499,8 +499,6 @@
 <string name="warning_scaning_qr_code">Camera foto a dispozitivului nu pare să suporte focalizare automată. Ar putea fi dificil să se scaneze codul.</string>
     <string name="menu_liberapay">Liberapay</string>
 
-    <string name="show_root_apps">Include root</string>
-    <string name="show_root_apps_on">Se listează și aplicațiile ce necesită acces de tip administrator (root)</string>
     <string name="show_anti_feature_apps">Include caracteristici periculoase</string>
     <string name="show_anti_feature_apps_on">Se listează și aplicațiile ce prezintă caracteristici periculoase (ex. urmărire)</string>
     <string name="force_touch_apps">Include ecran tactil</string>
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index c8569da76..c260ef90e 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -526,8 +526,6 @@
     <string name="hide_on_long_search_press_summary">Длительное нажатие кнопки поиска скроет приложение</string>
 
 <string name="warning_scaning_qr_code">Ваша камера не поддерживает автофокус. Сканирование кода может быть затруднено.</string>
-    <string name="show_root_apps">Включить root-приложения</string>
-    <string name="show_root_apps_on">Показать приложения, требующие привилегий root</string>
     <string name="repo_add_mirror">Добавить зеркало</string>
     <string name="repo_exists_add_mirror">Это копия %1$s, добавить ее как зеркало?</string>
     <string name="show_anti_feature_apps">Включить приложения с сомнительным функционалом</string>
diff --git a/app/src/main/res/values-sc/strings.xml b/app/src/main/res/values-sc/strings.xml
index fc04160d2..a87c1dc3e 100644
--- a/app/src/main/res/values-sc/strings.xml
+++ b/app/src/main/res/values-sc/strings.xml
@@ -546,8 +546,6 @@
     <string name="menu_liberapay">Liberapay</string>
 
 <string name="warning_scaning_qr_code">Paret chi sa fotocàmera tua non tèngiat su focus automàticu. Diat pòdere èssere difìtzile a iscansire su còdighe.</string>
-    <string name="show_root_apps">Inclue sas aplicatziones \"root\"</string>
-    <string name="show_root_apps_on">Ammustra sas aplicatziones chi tenent bisòngiu de sos privilègios de root</string>
     <string name="show_anti_feature_apps">Inclue sas aplicatziones cun anti-funtzionalidades</string>
     <string name="show_anti_feature_apps_on">Ammustra sas aplicatziones chi tenent bisòngiu de anti-funtzionalidades</string>
     <string name="force_touch_apps">Inclue sas aplicatziones chi impreant s\'ischermu tàtile</string>
diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml
index f6d577cf5..ea04b746b 100644
--- a/app/src/main/res/values-sl/strings.xml
+++ b/app/src/main/res/values-sl/strings.xml
@@ -232,8 +232,6 @@
     <string name="expert_on">Pokaži dodatne informacije in omogoči dodatne nastavitve</string>
 
     <string name="show_incompat_versions_on">Pokaži verzije aplikacij, ki so nekompatibilne z napravo</string>
-    <string name="show_root_apps">Vključi root aplikacije</string>
-    <string name="show_root_apps_on">Prikaži aplikacije, ki zahtevajo root dostop</string>
     <string name="show_anti_feature_apps">Vključi aplikcije z proti-lastnostmi</string>
     <string name="force_touch_apps">Vključi aplikacije, ki potrebujejo zaslone na dotik</string>
     <string name="local_repo">Lokalni vir aplikacij</string>
diff --git a/app/src/main/res/values-sq/strings.xml b/app/src/main/res/values-sq/strings.xml
index e88146d8b..a32e60c5a 100644
--- a/app/src/main/res/values-sq/strings.xml
+++ b/app/src/main/res/values-sq/strings.xml
@@ -243,8 +243,6 @@
     <string name="appcompatibility">Përshtatja e Aplikacioneve</string>
     <string name="show_incompat_versions">Përfshije verzione jo përshtatshme</string>
     <string name="show_incompat_versions_on">Shfaqe verzione të aplikacioneve që janë nuk përshtaten me pajisjen tuaj</string>
-    <string name="show_root_apps">Përfshije aplikacionet rrënjë</string>
-    <string name="show_root_apps_on">Shfaqe aplikacionet që kërkojnë privilegjet rrënjë</string>
     <string name="show_anti_feature_apps">Përfshije aplikacionet kundër-veçori</string>
     <string name="show_anti_feature_apps_on">Shfaqe aplikacione që kërkojnë kundër-veçori</string>
     <string name="force_touch_apps">Përfshije aplikacionet me gjurmë gishtore</string>
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index a56a95172..8a46ffbc9 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -518,8 +518,6 @@
     <string name="antidisabledalgorithmlist">Denna app har en svag säkerhetssignatur</string>
     <string name="antiknownvulnlist">Denna app innehåller en känd säkerhetsårbarhet</string>
 
-    <string name="show_root_apps">Inkludera root-appar</string>
-    <string name="show_root_apps_on">Visa appar som kräver root-privilegier</string>
     <string name="show_anti_feature_apps">Inkludera mot-funktionsappar</string>
     <string name="show_anti_feature_apps_on">Vis appar som kräver mot-funktioner</string>
     <string name="force_touch_apps">Inkludera pekskärmsappar</string>
diff --git a/app/src/main/res/values-te/strings.xml b/app/src/main/res/values-te/strings.xml
index 9025fcbf5..ef8d3dc1d 100644
--- a/app/src/main/res/values-te/strings.xml
+++ b/app/src/main/res/values-te/strings.xml
@@ -202,8 +202,6 @@
 
     <string name="appcompatibility">అనువర్తన అనుకూలత</string>
     <string name="show_incompat_versions">సరిపడలేని వెర్షన్లను చేర్చండి</string>
-    <string name="show_root_apps">రూట్ అనువర్తనాలను చేర్చండి</string>
-    <string name="show_root_apps_on">రూట్ అధికారాలు అవసరమయ్యే అనువర్తనాలను చూపించు</string>
     <string name="force_touch_apps">టచ్స్క్రీన్ అనువర్తనాలను చేర్చండి</string>
     <string name="local_repo">స్థానిక రెపో</string>
     <string name="local_repo_running">F- Droid మారడానికి సిద్ధంగా ఉంది</string>
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 78c01c525..b4ccb5b97 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -521,8 +521,6 @@
     <string name="menu_liberapay">Liberapay</string>
 
 <string name="warning_scaning_qr_code">Kameranızın kendiliğinden odaklanması yok gibi görünüyor. Kodu taramak zor olabilir.</string>
-    <string name="show_root_apps">Kök uygulamalarını içer</string>
-    <string name="show_root_apps_on">Kök yetkileri gerektiren uygulamaları göster</string>
     <string name="show_anti_feature_apps">Karşıt-özellikli uygulamaları içer</string>
     <string name="show_anti_feature_apps_on">Karşıt-özellikler gerektiren uygulamaları göster</string>
     <string name="force_touch_apps">Dokunmatik ekran uygulamalarını içer</string>
diff --git a/app/src/main/res/values-ug/strings.xml b/app/src/main/res/values-ug/strings.xml
index 29a692bd7..9ee9ace16 100644
--- a/app/src/main/res/values-ug/strings.xml
+++ b/app/src/main/res/values-ug/strings.xml
@@ -215,7 +215,6 @@
     <string name="antifeatures">ئىقتىدار-قارشى</string>
     <string name="expert_on">قوشۇمچە ئۇچۇرلانى كۆرسەت ۋە قوشۇمچە تەڭشەكلەرنى قوزغات</string>
 
-    <string name="show_root_apps_on">يىلتىز ھۇقۇقىنى تەلەپ قىلىدىغان ئۇيغۇلىمىلارنى كۆرسەت</string>
     <string name="show_anti_feature_apps">ئىقتىدار-چەكلەش ئۇيغۇلىمىلىرىنى ئۆز ئىچىگە ئالىدۇ</string>
     <string name="local_repo">يەرلىك ئامبار</string>
     <string name="deleting_repo">ھازىرقى ئامبار ئۆچۈرۈلىۋاتىدۇ…</string>
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index cd8b1aab6..281189970 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -541,8 +541,6 @@
     <string name="repo_exists_enable">%1$s вже налаштовано, підтвердьте, що бажаєте наново увімкнути.</string>
     <string name="repo_exists_and_enabled">%1$s вже налаштовано і увімкнуто.</string>
     <string name="repo_delete_to_overwrite">Спершу видаліть %1$s, аби додати його з конфліктним ключем.</string>
-    <string name="show_root_apps">Увімкнути root додатки</string>
-    <string name="show_root_apps_on">Показати додатки, які потребують root привілеїв</string>
     <string name="share_repository">Поділитися репозиторієм</string>
     <string name="use_bluetooth">Використовувати Bluetooth</string>
     <string name="swap_toast_hotspot_enabled">Точку доступу Wi-Fi увімкнуто</string>
diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml
index 5af81201d..cf328dbf5 100644
--- a/app/src/main/res/values-vi/strings.xml
+++ b/app/src/main/res/values-vi/strings.xml
@@ -493,8 +493,6 @@
     <string name="antidisabledalgorithmlist">Ứng dụng này có chữ kí bảo mật yếu</string>
     <string name="antiknownvulnlist">Ứng dụng này có lỗ hổng bảo mật đã bị phát hiện</string>
 
-    <string name="show_root_apps">Hiện ứng dụng root</string>
-    <string name="show_root_apps_on">Hiện các ứng dụng cần quyền root</string>
     <string name="show_anti_feature_apps">Hiện ứng dụng có tính năng không mong muốn</string>
     <string name="show_anti_feature_apps_on">Hiện các ứng dụng có một số tính năng không mong muốn</string>
     <string name="force_touch_apps">Hiện ứng dụng cảm ứng</string>
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index c965faf35..c361cee7f 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -478,8 +478,6 @@
     <string name="hide_on_long_search_press_summary">长按搜索按钮将隐藏此应用</string>
 
 <string name="warning_scaning_qr_code">您的相机似乎没有自动对焦。扫描二维码可能较为困难。</string>
-    <string name="show_root_apps">包括需 root 的应用</string>
-    <string name="show_root_apps_on">显示需要 root 权限的应用程序</string>
     <string name="show_anti_feature_apps">包括带有 anti-feature 的应用</string>
     <string name="show_anti_feature_apps_on">显示需要 anti-feature 的应用程序</string>
     <string name="repo_add_mirror">添加镜像</string>
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 8da7cacb1..3f61f7f28 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -500,8 +500,6 @@
     <string name="menu_liberapay">Liberapay</string>
 
 <string name="warning_scaning_qr_code">您的相機似乎沒有自動對焦。掃描代碼可能會很困難。</string>
-    <string name="show_root_apps">包括 root 應用程式</string>
-    <string name="show_root_apps_on">顯示需要 root 授權的應用程式</string>
     <string name="show_anti_feature_apps">包括反特徵應用程式</string>
     <string name="show_anti_feature_apps_on">顯示需要反特徵的應用程式</string>
     <string name="force_touch_apps">包括觸控式螢幕的應用程式</string>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 60ff065fe..a39e8637d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -236,8 +236,6 @@ This often occurs with apps installed via Google Play or other sources, if they
     <string name="appcompatibility">App compatibility</string>
     <string name="show_incompat_versions">Include incompatible versions</string>
     <string name="show_incompat_versions_on">Show app versions that are incompatible with the device</string>
-    <string name="show_root_apps">Include root apps</string>
-    <string name="show_root_apps_on">Show apps that require root privileges</string>
     <string name="show_anti_feature_apps">Include anti-feature apps</string>
     <string name="show_anti_feature_apps_on">Show apps that require anti-features</string>
     <string name="force_touch_apps">Include touchscreen apps</string>
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index 846044d13..2eb46455d 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -76,15 +76,12 @@
                 android:entryValues="@array/themeValues"/>
     </android.support.v7.preference.PreferenceCategory>
 
-    <android.support.v7.preference.PreferenceCategory android:title="@string/appcompatibility">
+    <android.support.v7.preference.PreferenceCategory android:title="@string/appcompatibility"
+                                                      android:key="pref_category_appcompatibility">
         <SwitchPreference
                 android:title="@string/show_incompat_versions"
                 android:defaultValue="false"
                 android:key="incompatibleVersions"/>
-        <SwitchPreference
-                android:title="@string/show_root_apps"
-                android:defaultValue="true"
-                android:key="rooted"/>
         <SwitchPreference
                 android:title="@string/show_anti_feature_apps"
                 android:defaultValue="false"
diff --git a/app/src/test/java/org/fdroid/fdroid/PreferencesTest.java b/app/src/test/java/org/fdroid/fdroid/PreferencesTest.java
index 3afc307c7..3a4b03d85 100644
--- a/app/src/test/java/org/fdroid/fdroid/PreferencesTest.java
+++ b/app/src/test/java/org/fdroid/fdroid/PreferencesTest.java
@@ -118,8 +118,6 @@ public class PreferencesTest {
                 preferences.showAppsWithAntiFeatures());
         assertEquals(defaults.getBoolean(Preferences.PREF_SHOW_INCOMPAT_VERSIONS, false),
                 preferences.showIncompatibleVersions());
-        assertEquals(defaults.getBoolean(Preferences.PREF_SHOW_ROOT_APPS, false),
-                preferences.showAppsRequiringRoot());
         assertEquals(defaults.getBoolean(Preferences.PREF_UPDATE_NOTIFICATION_ENABLED, false),
                 preferences.isUpdateNotificationEnabled());
 
diff --git a/app/src/test/java/org/fdroid/fdroid/views/AppDetailsAdapterTest.java b/app/src/test/java/org/fdroid/fdroid/views/AppDetailsAdapterTest.java
index 1a829fddf..c072af430 100644
--- a/app/src/test/java/org/fdroid/fdroid/views/AppDetailsAdapterTest.java
+++ b/app/src/test/java/org/fdroid/fdroid/views/AppDetailsAdapterTest.java
@@ -101,6 +101,10 @@ public class AppDetailsAdapterTest extends FDroidProviderTest {
     }
 
     private final AppDetailsRecyclerViewAdapter.AppDetailsRecyclerViewAdapterCallbacks dummyCallbacks = new AppDetailsRecyclerViewAdapter.AppDetailsRecyclerViewAdapterCallbacks() { // NOCHECKSTYLE LineLength
+        @Override
+        public boolean isAppDownloading() {
+            return false;
+        }
 
         @Override
         public void enableAndroidBeam() {