Index: lib/init.js
diff --git a/lib/init.js b/lib/init.js
index 197321802ae68e4204334f26b8b0a870816530a0..fc09be33f5b6d850a93880cd85ee3887485961d5 100644
--- a/lib/init.js
+++ b/lib/init.js
@@ -51,18 +51,26 @@ FilterNotifier.addListener(function(action)
       let {Prefs} = require("prefs");
       let {Utils} = require("utils");
 
-      // Choose default subscription and add it
-      let subscriptions = require("subscriptions.xml");
-      let node = Utils.chooseFilterSubscription(subscriptions);
-      if (node)
+      if (Prefs.first_run_subscription_auto_select)
       {
-        let subscription = Subscription.fromURL(node.url);
-        FilterStorage.addSubscription(subscription);
-        subscription.disabled = false;
-        subscription.title = node.title;
-        subscription.homepage = node.homepage;
-        if (subscription instanceof DownloadableSubscription && !subscription.lastDownload)
-          Synchronizer.execute(subscription);
+        let subscriptions = require("subscriptions.xml");
+        let node = Utils.chooseFilterSubscription(subscriptions);
+        if (node)
+        {
+          let subscription = Subscription.fromURL(node.url);
+          subscription.disabled = false;
+          subscription.title = node.title;
+          subscription.homepage = node.homepage;
+          FilterStorage.addSubscription(subscription);
+          if (subscription instanceof DownloadableSubscription && !subscription.lastDownload)
+            Synchronizer.execute(subscription);
+        }
+
+        let aaSubscription = Subscription.fromURL(Prefs.subscriptions_exceptionsurl);
+        aaSubscription.disabled = false;
+        FilterStorage.addSubscription(aaSubscription);
+        if (aaSubscription instanceof DownloadableSubscription && !aaSubscription.lastDownload)
+          Synchronizer.execute(aaSubscription);
       }
     }
 
Index: lib/prefs.js
diff --git a/lib/prefs.js b/lib/prefs.js
index d15c3b02092a21ad843a44f03b6974937f47a555..fd8fa6b7d43400dbbda05b541595be3c6f17c70e 100644
--- a/lib/prefs.js
+++ b/lib/prefs.js
@@ -44,10 +44,12 @@ let defaults = {
   notificationurl: "https://notification.adblockplus.org/notification.json",
   suppress_first_run_page: false,
   disable_auto_updates: false,
+  first_run_subscription_auto_select: true,
   notifications_ignoredcategories: [],
 };
 
-let preconfigurable = ["suppress_first_run_page", "disable_auto_updates"];
+let preconfigurable = ["suppress_first_run_page", "disable_auto_updates",
+  "first_run_subscription_auto_select"];
 
 let values;
 let path = _fileSystem.resolve("prefs.json");
Index: test/FilterEngine.cpp
diff --git a/test/FilterEngine.cpp b/test/FilterEngine.cpp
index 177c0c7f2147850c3d846786858b9817c14155b3..0900e69b38173bf6d4595f817d4699e6b8efcab5 100644
--- a/test/FilterEngine.cpp
+++ b/test/FilterEngine.cpp
@@ -16,6 +16,9 @@
  */
 
 #include "BaseJsTest.h"
+#include <thread>
+
+using namespace AdblockPlus;
 
 namespace
 {
@@ -110,6 +113,58 @@ namespace
 
   // Workaround for https://issues.adblockplus.org/ticket/1397.
   void NoOpUpdaterCallback(const std::string&) {}
+
+  class FilterEngineWithFreshFolder : public ::testing::Test
+  {
+  protected:
+    FileSystemPtr fileSystem;
+    std::weak_ptr<JsEngine> weakJsEngine;
+
+    void SetUp() override
+    {
+      fileSystem.reset(new DefaultFileSystem());
+      // Since there is neither in memory FS nor functionality to work with
+      // directories use the hack: manually clean the directory.
+      removeFileIfExists("patterns.ini");
+      removeFileIfExists("prefs.json");
+    }
+    JsEnginePtr createJsEngine(const AppInfo& appInfo = AppInfo())
+    {
+      auto jsEngine = JsEngine::New(appInfo);
+      weakJsEngine = jsEngine;
+      jsEngine->SetFileSystem(fileSystem);
+      jsEngine->SetWebRequest(AdblockPlus::WebRequestPtr(new LazyWebRequest()));
+      jsEngine->SetLogSystem(AdblockPlus::LogSystemPtr(new LazyLogSystem()));
+      return jsEngine;
+    }
+    void TearDown() override
+    {
+      removeFileIfExists("patterns.ini");
+      removeFileIfExists("prefs.json");
+      fileSystem.reset();
+    }
+    void removeFileIfExists(const std::string& path)
+    {
+      // Hack: allow IO to finish currently running operations, in particular
+      // writing into files. Otherwise we get "Permission denied".
+      auto safeRemove = [this, &path]()->bool
+      {
+        try
+        {
+          if (fileSystem->Stat(path).exists)
+            fileSystem->Remove(path);
+          return true;
+        }
+        catch (...)
+        {
+          return false;
+        }
+      };
+      int i = 5;
+      while ((i-- > 0 && weakJsEngine.lock()) || !safeRemove())
+        std::this_thread::sleep_for(std::chrono::seconds(2));
+    }
+  };
 }
 
 TEST_F(FilterEngineTest, FilterCreation)
@@ -533,3 +588,41 @@ TEST_F(FilterEngineTest, ElemhideWhitelisting)
       "http://example.co.uk",
       documentUrls1));
 }
+
+TEST_F(FilterEngineWithFreshFolder, LangAndAASubscriptionsAreChosenOnFirstRun)
+{
+  AppInfo appInfo;
+  appInfo.locale = "zh";
+  const std::string langSubscriptionUrl = "https://easylist-downloads.adblockplus.org/easylistchina+easylist.txt";
+  auto jsEngine = createJsEngine(appInfo);
+  auto filterEngine = FilterEnginePtr(new AdblockPlus::FilterEngine(jsEngine));
+  const auto subscriptions = filterEngine->GetListedSubscriptions();
+  ASSERT_EQ(2u, subscriptions.size());
+  const auto aaUrl = filterEngine->GetPref("subscriptions_exceptionsurl")->AsString();
+  SubscriptionPtr aaSubscription;
+  SubscriptionPtr langSubscription;
+  if (subscriptions[0]->GetProperty("url")->AsString() == aaUrl)
+  {
+    aaSubscription = subscriptions[0];
+    langSubscription = subscriptions[1];
+  }
+  else if (subscriptions[1]->GetProperty("url")->AsString() == aaUrl)
+  {
+    aaSubscription = subscriptions[1];
+    langSubscription = subscriptions[0];
+  }
+  ASSERT_NE(nullptr, aaSubscription);
+  ASSERT_NE(nullptr, langSubscription);
+  EXPECT_EQ(aaUrl, aaSubscription->GetProperty("url")->AsString());
+  EXPECT_EQ(langSubscriptionUrl, langSubscription->GetProperty("url")->AsString());
+}
+
+TEST_F(FilterEngineWithFreshFolder, DisableSubscriptionsAutoSelectOnFirstRun)
+{
+  auto jsEngine = createJsEngine();
+  FilterEngine::Prefs preSettings;
+  preSettings["first_run_subscription_auto_select"] = jsEngine->NewValue(false);
+  auto filterEngine = FilterEnginePtr(new AdblockPlus::FilterEngine(jsEngine, preSettings));
+  const auto subscriptions = filterEngine->GetListedSubscriptions();
+  EXPECT_EQ(0u, subscriptions.size());
+}
