diff --git a/app/src/main/java/org/fdroid/fdroid/data/ApkProvider.java b/app/src/main/java/org/fdroid/fdroid/data/ApkProvider.java
index 8d128568a..4a6135a59 100644
--- a/app/src/main/java/org/fdroid/fdroid/data/ApkProvider.java
+++ b/app/src/main/java/org/fdroid/fdroid/data/ApkProvider.java
@@ -86,10 +86,28 @@ public class ApkProvider extends FDroidProvider {
          * <li>If installed, limit to apks signed by the same signer as the installed apk.</li>
          * <li>Otherwise, limit to apks signed by the "preferred" signer (see {@link App#preferredSigner}).</li>
          * </ul>
+         * If all else fails, try to return some {@link Apk} that will install something,
+         * rather than returning a null and triggering a {@link NullPointerException}.
          */
+        @Nullable
         public static Apk findSuggestedApk(Context context, App app) {
-            return findApkFromAnyRepo(context, app.packageName, app.suggestedVersionCode,
-                    app.getMostAppropriateSignature());
+            String mostAppropriateSignature = app.getMostAppropriateSignature();
+            Apk apk = findApkFromAnyRepo(context, app.packageName, app.suggestedVersionCode,
+                    mostAppropriateSignature);
+            if (apk == null && (mostAppropriateSignature == null || !app.isInstalled(context))) {
+                List<Apk> apks = findByPackageName(context, app.packageName);
+                for (Apk availableApk : apks) {
+                    if (availableApk.sig.equals(mostAppropriateSignature)) {
+                        apk = availableApk;
+                        break;
+                    }
+                }
+                if (apk == null && apks.size() > 0) {
+                    apk = apks.get(0);
+                }
+            }
+            return apk;
+
         }
 
         public static Apk findApkFromAnyRepo(Context context, String packageName, int versionCode) {