diff --git a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java
index 3998e883f..c4a9369c2 100644
--- a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java
+++ b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java
@@ -301,8 +301,9 @@ public class FDroidApp extends Application {
 
         configureTor(Preferences.get().isTorEnabled());
 
-        // TODO enable this based on a preference
-        InstallHistoryService.register(this);
+        if (Preferences.get().isKeepingInstallHistory()) {
+            InstallHistoryService.register(this);
+        }
 
         String packageName = getString(R.string.install_history_reader_packageName);
         String unset = getString(R.string.install_history_reader_packageName_UNSET);
diff --git a/app/src/main/java/org/fdroid/fdroid/Preferences.java b/app/src/main/java/org/fdroid/fdroid/Preferences.java
index 1973d4dd0..7a5b91bed 100644
--- a/app/src/main/java/org/fdroid/fdroid/Preferences.java
+++ b/app/src/main/java/org/fdroid/fdroid/Preferences.java
@@ -55,6 +55,7 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
     public static final String PREF_IGN_TOUCH = "ignoreTouchscreen";
     public static final String PREF_KEEP_CACHE_TIME = "keepCacheFor";
     public static final String PREF_UNSTABLE_UPDATES = "unstableUpdates";
+    public static final String PREF_KEEP_INSTALL_HISTORY = "keepInstallHistory";
     public static final String PREF_EXPERT = "expert";
     public static final String PREF_PRIVILEGED_INSTALLER = "privilegedInstaller";
     public static final String PREF_UNINSTALL_PRIVILEGED_APP = "uninstallPrivilegedApp";
@@ -75,6 +76,7 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
     //private static final boolean DEFAULT_LOCAL_REPO_BONJOUR = true;
     private static final long DEFAULT_KEEP_CACHE_TIME = TimeUnit.DAYS.toMillis(1);
     private static final boolean DEFAULT_UNSTABLE_UPDATES = false;
+    private static final boolean DEFAULT_KEEP_INSTALL_HISTORY = 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;
@@ -184,6 +186,10 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
         return preferences.getBoolean(PREF_UNSTABLE_UPDATES, DEFAULT_UNSTABLE_UPDATES);
     }
 
+    public boolean isKeepingInstallHistory() {
+        return preferences.getBoolean(PREF_KEEP_INSTALL_HISTORY, DEFAULT_KEEP_INSTALL_HISTORY);
+    }
+
     public boolean showIncompatibleVersions() {
         return preferences.getBoolean(PREF_INCOMP_VER, DEFAULT_INCOMP_VER);
     }
diff --git a/app/src/main/java/org/fdroid/fdroid/installer/InstallHistoryService.java b/app/src/main/java/org/fdroid/fdroid/installer/InstallHistoryService.java
index e111b15df..6d930c850 100644
--- a/app/src/main/java/org/fdroid/fdroid/installer/InstallHistoryService.java
+++ b/app/src/main/java/org/fdroid/fdroid/installer/InstallHistoryService.java
@@ -52,6 +52,9 @@ public class InstallHistoryService extends IntentService {
     private static BroadcastReceiver broadcastReceiver;
 
     public static void register(Context context) {
+        if (broadcastReceiver != null) {
+            return;  // already registered
+        }
         IntentFilter intentFilter = new IntentFilter();
         intentFilter.addDataScheme("http");
         intentFilter.addDataScheme("https");
@@ -78,6 +81,7 @@ public class InstallHistoryService extends IntentService {
     public static void unregister(Context context) {
         LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(context);
         localBroadcastManager.unregisterReceiver(broadcastReceiver);
+        broadcastReceiver = null;
     }
 
     public static void queue(Context context, Intent intent) {
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 4304b87c6..c1355b5ad 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
@@ -19,6 +19,7 @@ import org.fdroid.fdroid.FDroidApp;
 import org.fdroid.fdroid.Preferences;
 import org.fdroid.fdroid.PreferencesActivity;
 import org.fdroid.fdroid.R;
+import org.fdroid.fdroid.installer.InstallHistoryService;
 import org.fdroid.fdroid.installer.PrivilegedInstaller;
 
 import info.guardianproject.netcipher.NetCipher;
@@ -193,6 +194,14 @@ public class PreferencesFragment extends PreferenceFragment
                 }
                 break;
 
+            case Preferences.PREF_KEEP_INSTALL_HISTORY:
+                CheckBoxPreference p = (CheckBoxPreference) findPreference(key);
+                if (p.isChecked()) {
+                    InstallHistoryService.register(getContext());
+                } else {
+                    InstallHistoryService.unregister(getContext());
+                }
+                break;
         }
     }
 
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index a3a30b88f..d23295a97 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -14,6 +14,8 @@
     <string name="updates">Updates</string>
     <string name="unstable_updates">Unstable updates</string>
     <string name="unstable_updates_summary">Suggest updates to unstable versions</string>
+    <string name="keep_install_history">Keep install history</string>
+    <string name="keep_install_history_summary">Store a log of all installs and uninstalls inside F-Droid</string>
     <string name="other">Other</string>
 
     <string name="update_interval">Automatic update interval</string>
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index aa80594bd..96ae03aaa 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -91,6 +91,12 @@
             android:summary="@string/unstable_updates_summary"
             android:defaultValue="false"
             android:dependency="expert" />
+        <CheckBoxPreference
+            android:key="keepInstallHistory"
+            android:title="@string/keep_install_history"
+            android:summary="@string/keep_install_history_summary"
+            android:defaultValue="false"
+            android:dependency="expert" />
         <CheckBoxPreference android:title="@string/system_installer"
             android:defaultValue="false"
             android:key="privilegedInstaller"