diff --git a/F-Droid/res/values/strings.xml b/F-Droid/res/values/strings.xml
index 8fae272f7..07cb85d56 100644
--- a/F-Droid/res/values/strings.xml
+++ b/F-Droid/res/values/strings.xml
@@ -13,6 +13,8 @@
 	<string name="cache_downloaded">App cache</string>
 	<string name="cache_downloaded_on">Keep downloaded .apk files on device</string>
 	<string name="updates">Updates</string>
+	<string name="updates_summary">Get updates newer than suggested version</string>
+	<string name="beta_updates">Beta updates</string>
 	<string name="other">Other</string>
 	<string name="last_update_check">Last repo scan: %s</string>
 	<string name="never">never</string>
diff --git a/F-Droid/res/xml/preferences.xml b/F-Droid/res/xml/preferences.xml
index 0de38fb22..839c0d41a 100644
--- a/F-Droid/res/xml/preferences.xml
+++ b/F-Droid/res/xml/preferences.xml
@@ -78,6 +78,11 @@
 		<CheckBoxPreference android:title="@string/cache_downloaded"
 			android:defaultValue="false"
 			android:key="cacheDownloaded" />
+		<CheckBoxPreference
+			android:key="betaUpdates"
+			android:title="@string/beta_updates"
+			android:summary="@string/updates_summary"
+			android:defaultValue="false" />
 		<CheckBoxPreference android:title="@string/expert"
 			android:defaultValue="false"
 			android:key="expert" />
diff --git a/F-Droid/src/org/fdroid/fdroid/FDroidApp.java b/F-Droid/src/org/fdroid/fdroid/FDroidApp.java
index 53848a639..03a1a66ff 100644
--- a/F-Droid/src/org/fdroid/fdroid/FDroidApp.java
+++ b/F-Droid/src/org/fdroid/fdroid/FDroidApp.java
@@ -182,6 +182,14 @@ public class FDroidApp extends Application {
             }
         });
 
+        final Context context = this;
+        Preferences.get().registerBetaUpdatesChangeListener(new Preferences.ChangeListener() {
+            @Override
+            public void onPreferenceChange() {
+                AppProvider.Helper.calcDetailsFromIndex(context);
+            }
+        });
+
         // Clear cached apk files. We used to just remove them after they'd
         // been installed, but this causes problems for proprietary gapps
         // users since the introduction of verification (on pre-4.2 Android),
diff --git a/F-Droid/src/org/fdroid/fdroid/Preferences.java b/F-Droid/src/org/fdroid/fdroid/Preferences.java
index 61816b1b6..ede945a97 100644
--- a/F-Droid/src/org/fdroid/fdroid/Preferences.java
+++ b/F-Droid/src/org/fdroid/fdroid/Preferences.java
@@ -47,6 +47,7 @@ public class Preferences implements SharedPreferences.OnSharedPreferenceChangeLi
     public static final String PREF_COMPACT_LAYOUT = "compactlayout";
     public static final String PREF_IGN_TOUCH = "ignoreTouchscreen";
     public static final String PREF_CACHE_APK = "cacheDownloaded";
+    public static final String PREF_BETA_UPDATES = "betaUpdates";
     public static final String PREF_EXPERT = "expert";
     public static final String PREF_UPD_LAST = "lastUpdateCheck";
     public static final String PREF_SYSTEM_INSTALLER = "systemInstaller";
@@ -68,6 +69,7 @@ public class Preferences implements SharedPreferences.OnSharedPreferenceChangeLi
     private static final boolean DEFAULT_SYSTEM_INSTALLER = false;
     private static final boolean DEFAULT_LOCAL_REPO_BONJOUR = true;
     private static final boolean DEFAULT_CACHE_APK = false;
+    private static final boolean DEFAULT_BETA_UPDATES = false;
     private static final boolean DEFAULT_LOCAL_REPO_HTTPS = false;
     private static final boolean DEFAULT_INCOMP_VER = false;
     private static final boolean DEFAULT_EXPERT = false;
@@ -90,6 +92,7 @@ public class Preferences implements SharedPreferences.OnSharedPreferenceChangeLi
     private final List<ChangeListener> localRepoBonjourListeners = new ArrayList<>();
     private final List<ChangeListener> localRepoNameListeners = new ArrayList<>();
     private final List<ChangeListener> localRepoHttpsListeners = new ArrayList<>();
+    private final List<ChangeListener> betaUpdatesListeners = new ArrayList<>();
 
     private boolean isInitialized(String key) {
         return initialized.containsKey(key) && initialized.get(key);
@@ -135,6 +138,10 @@ public class Preferences implements SharedPreferences.OnSharedPreferenceChangeLi
         return preferences.getBoolean(PREF_CACHE_APK, DEFAULT_CACHE_APK);
     }
 
+    public boolean getBetaUpdates() {
+        return preferences.getBoolean(PREF_BETA_UPDATES, DEFAULT_BETA_UPDATES);
+    }
+
     public boolean showIncompatibleVersions() {
         return preferences.getBoolean(PREF_INCOMP_VER, DEFAULT_INCOMP_VER);
     }
@@ -241,6 +248,14 @@ public class Preferences implements SharedPreferences.OnSharedPreferenceChangeLi
         filterAppsRequiringRootListeners.remove(listener);
     }
 
+    public void registerBetaUpdatesChangeListener(ChangeListener listener) {
+        betaUpdatesListeners.add(listener);
+    }
+
+    public void unregisterBetaUpdatesChangeListener(ChangeListener listener) {
+        betaUpdatesListeners.remove(listener);
+    }
+
     @Override
     public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
         if (BuildConfig.DEBUG) {
@@ -278,6 +293,10 @@ public class Preferences implements SharedPreferences.OnSharedPreferenceChangeLi
             for (ChangeListener listener : localRepoHttpsListeners) {
                 listener.onPreferenceChange();
             }
+        case PREF_BETA_UPDATES:
+            for (ChangeListener listener : betaUpdatesListeners) {
+                listener.onPreferenceChange();
+            }
             break;
         }
     }
diff --git a/F-Droid/src/org/fdroid/fdroid/data/AppProvider.java b/F-Droid/src/org/fdroid/fdroid/data/AppProvider.java
index 7c223e3b5..27d2251ac 100644
--- a/F-Droid/src/org/fdroid/fdroid/data/AppProvider.java
+++ b/F-Droid/src/org/fdroid/fdroid/data/AppProvider.java
@@ -833,6 +833,8 @@ public class AppProvider extends FDroidProvider {
         final String apk = DBHelper.TABLE_APK;
         final String app = DBHelper.TABLE_APP;
 
+        final boolean betaUpdates = Preferences.get().getBetaUpdates();
+        String restrictToStable = betaUpdates ? "" : ( apk + ".vercode <= " + app + ".upstreamVercode AND " );
         String updateSql =
             "UPDATE " + app +
             " SET suggestedVercode = ( " +
@@ -840,7 +842,7 @@ public class AppProvider extends FDroidProvider {
                 " FROM " + apk +
                 " WHERE " +
                     app + ".id = " + apk + ".id AND " +
-                    apk + ".vercode <= " + app + ".upstreamVercode AND " +
+                    restrictToStable +
                     " ( " + app + ".compatible = 0 OR " + apk + ".compatible = 1 ) ) " +
             " WHERE upstreamVercode > 0 ";