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 7a1d404c1..1298cf49c 100644
--- a/app/src/main/java/org/fdroid/fdroid/data/InstalledAppProviderService.java
+++ b/app/src/main/java/org/fdroid/fdroid/data/InstalledAppProviderService.java
@@ -13,6 +13,7 @@ import android.support.annotation.Nullable;
 import android.util.Log;
 
 import org.acra.ACRA;
+import org.fdroid.fdroid.AppUpdateStatusManager;
 import org.fdroid.fdroid.Hasher;
 import org.fdroid.fdroid.Utils;
 import org.fdroid.fdroid.data.Schema.InstalledAppTable;
@@ -72,7 +73,7 @@ public class InstalledAppProviderService extends IntentService {
         // the list of installed apps and insert them to the database...
         packageChangeNotifier
                 .subscribeOn(Schedulers.newThread())
-                .debounce(1, TimeUnit.SECONDS)
+                .debounce(3, TimeUnit.SECONDS)
                 .subscribe(new Action1<String>() {
                         @Override
                         public void call(String packageName) {
@@ -163,6 +164,7 @@ public class InstalledAppProviderService extends IntentService {
      * @see <a href="https://gitlab.com/fdroid/fdroidclient/issues/819>issue #819</a>
      */
     public static void compareToPackageManager(Context context) {
+        Utils.debugLog(TAG, "Comparing package manager to our installed app cache.");
         Map<String, Long> cachedInfo = InstalledAppProvider.Helper.all(context);
 
         List<PackageInfo> packageInfoList = context.getPackageManager()
@@ -219,6 +221,22 @@ public class InstalledAppProviderService extends IntentService {
                     try {
                         String hashType = "sha256";
                         String hash = Utils.getBinaryHash(apk, hashType);
+
+                        // Ensure that we no longer notify the user that this apk successfully
+                        // downloaded and is now ready to be installed. Used to be handled only
+                        // by InstallManagerService after receiving ACTION_INSTALL_COMPLETE, but
+                        // that doesn't work for F-Droid itself, which never receives that action.
+                        for (Apk apkInRepo : ApkProvider.Helper.findApksByHash(this, hash)) {
+
+                            Utils.debugLog(TAG, "Noticed that " + apkInRepo.apkName +
+                                    " version " + apkInRepo.versionName + " was installed," +
+                                    " so marking as no longer pending install");
+
+                            AppUpdateStatusManager.getInstance(this)
+                                    .markAsNoLongerPendingInstall(apkInRepo.getUrl());
+
+                        }
+
                         insertAppIntoDb(this, packageInfo, hashType, hash);
                     } catch (IllegalArgumentException e) {
                         Utils.debugLog(TAG, e.getMessage());
diff --git a/app/src/main/java/org/fdroid/fdroid/receiver/PackageManagerReceiver.java b/app/src/main/java/org/fdroid/fdroid/receiver/PackageManagerReceiver.java
index d9c44b19c..3bda33bf4 100644
--- a/app/src/main/java/org/fdroid/fdroid/receiver/PackageManagerReceiver.java
+++ b/app/src/main/java/org/fdroid/fdroid/receiver/PackageManagerReceiver.java
@@ -3,6 +3,7 @@ package org.fdroid.fdroid.receiver;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
+import android.text.TextUtils;
 
 import org.fdroid.fdroid.Utils;
 import org.fdroid.fdroid.data.InstalledAppProviderService;
@@ -26,7 +27,11 @@ public class PackageManagerReceiver extends BroadcastReceiver {
             if (Intent.ACTION_PACKAGE_ADDED.equals(action)) {
                 InstalledAppProviderService.insert(context, intent.getData());
             } else if (Intent.ACTION_PACKAGE_REMOVED.equals(action)) {
-                InstalledAppProviderService.delete(context, intent.getData());
+                if (TextUtils.equals(context.getPackageName(), intent.getData().getSchemeSpecificPart())) {
+                    Utils.debugLog(TAG, "Ignoring request to remove ourselves from cache.");
+                } else {
+                    InstalledAppProviderService.delete(context, intent.getData());
+                }
             } else {
                 Utils.debugLog(TAG, "unsupported action: " + action + " " + intent);
             }