diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/config/FiltersFactory.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/config/FiltersFactory.java
index 9bdf676..c125289 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/config/FiltersFactory.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/config/FiltersFactory.java
@@ -31,22 +31,29 @@
 
   private final PluginConfigFactory configFactory;
   private final ReviewerFilterCollection.Factory filterCollectionFactory;
+  private final GlobalConfig globalConfig;
   private final String pluginName;
 
   @Inject
   public FiltersFactory(
       PluginConfigFactory configFactory,
       ReviewerFilterCollection.Factory filterCollectionFactory,
+      GlobalConfig globalConfig,
       @PluginName String pluginName) {
     this.configFactory = configFactory;
     this.filterCollectionFactory = filterCollectionFactory;
+    this.globalConfig = globalConfig;
     this.pluginName = pluginName;
   }
 
   public List<ReviewerFilter> withInheritance(Project.NameKey projectName) {
     Config cfg;
     try {
-      cfg = configFactory.getProjectPluginConfigWithMergedInheritance(projectName, pluginName);
+      if (globalConfig.mergeFilters()) {
+        cfg = configFactory.getProjectPluginConfigWithMergedInheritance(projectName, pluginName);
+      } else {
+        cfg = configFactory.getProjectPluginConfigWithInheritance(projectName, pluginName);
+      }
     } catch (NoSuchProjectException e) {
       logger.atSevere().log("Unable to get config for project %s", projectName.get());
       cfg = new Config();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/config/GlobalConfig.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/config/GlobalConfig.java
index b61279f..cd0354f 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/config/GlobalConfig.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/config/GlobalConfig.java
@@ -26,10 +26,12 @@
   private static final String KEY_ENABLE_REST = "enableREST";
   private static final String KEY_SUGGEST_ONLY = "suggestOnly";
   private static final String KEY_IGNORE_WIP = "ignoreWip";
+  private static final String KEY_MERGE_FILTERS = "mergeFilters";
 
   private final boolean enableREST;
   private final boolean suggestOnly;
   private final boolean ignoreWip;
+  private final boolean mergeFilters;
 
   @Inject
   GlobalConfig(PluginConfigFactory cfgFactory, @PluginName String pluginName) {
@@ -37,6 +39,7 @@
     this.enableREST = cfg.getBoolean(pluginName, null, KEY_ENABLE_REST, true);
     this.suggestOnly = cfg.getBoolean(pluginName, null, KEY_SUGGEST_ONLY, false);
     this.ignoreWip = cfg.getBoolean(pluginName, null, KEY_IGNORE_WIP, true);
+    this.mergeFilters = cfg.getBoolean(pluginName, null, KEY_MERGE_FILTERS, true);
   }
 
   public boolean enableREST() {
@@ -50,4 +53,8 @@
   public boolean ignoreWip() {
     return ignoreWip;
   }
+
+  public boolean mergeFilters() {
+    return mergeFilters;
+  }
 }
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md
index 173f51a..5c375d4 100644
--- a/src/main/resources/Documentation/config.md
+++ b/src/main/resources/Documentation/config.md
@@ -9,6 +9,7 @@
     enableREST = true
     suggestOnly = false
     ignoreWip = false
+    mergeFilters = true
 ```
 
 reviewers.enableREST
@@ -28,6 +29,12 @@
 	considered when adding reviewers. Defaults to true. To enable adding
 	reviewers on changes in WIP state set this value to false.
 
+reviewers.mergeFilters
+:	Decides whether to merge the filter-sections from parent projects or not.
+	If set to false	filter-sections in child project will override
+	filter-sections, with identical filters, in the parent project(s).
+	Defaults to true.
+
 Per project configuration of the @PLUGIN@ plugin is done in the
 `reviewers.config` file of the project. Missing values are inherited
 from the parent projects. This means a global default configuration can
diff --git a/src/test/java/com/googlesource/gerrit/plugins/reviewers/ReviewersIT.java b/src/test/java/com/googlesource/gerrit/plugins/reviewers/ReviewersIT.java
index 64ac429..65e72e5 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/reviewers/ReviewersIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/reviewers/ReviewersIT.java
@@ -24,14 +24,20 @@
 import com.google.gerrit.acceptance.PushOneCommit;
 import com.google.gerrit.acceptance.TestAccount;
 import com.google.gerrit.acceptance.TestPlugin;
+import com.google.gerrit.acceptance.UseLocalDisk;
+import com.google.gerrit.acceptance.config.GlobalPluginConfig;
 import com.google.gerrit.entities.Account;
 import com.google.gerrit.entities.BranchNameKey;
+import com.google.gerrit.entities.Project;
 import com.google.gerrit.extensions.api.changes.ReviewInput;
 import com.google.gerrit.extensions.api.changes.ReviewerInput;
 import com.google.gerrit.extensions.client.ChangeStatus;
 import com.google.gerrit.extensions.client.ReviewerState;
 import com.google.gerrit.extensions.common.ChangeInfo;
 import java.util.Set;
+
+import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
+import org.eclipse.jgit.junit.TestRepository;
 import org.junit.Test;
 
 @NoHttpd
@@ -155,6 +161,20 @@
     assertThat(gApi.changes().id(changeId).get().reviewers.get(CC)).isNull();
   }
 
+  @Test
+  @UseLocalDisk
+  @GlobalPluginConfig(pluginName = "reviewers", name = "reviewers.mergeFilters", value = "false")
+  public void reviewersOverriddenWithMergeFiltersFalse() throws Exception {
+    TestAccount user2 = accountCreator.user2();
+    Project.NameKey childProject = projectOperations.newProject().parent(project).create();
+    TestRepository<?> metaConfig = checkoutRefsMetaConfig(cloneProject(childProject));
+    createFiltersFor(metaConfig, filter("*").reviewer(user2));
+    createFilters(filter("*").reviewer(user));
+    TestRepository<InMemoryRepository> childRepo = cloneProject(childProject);
+    String changeId = createChange(childRepo).getChangeId();
+    assertThat(reviewersFor(changeId)).containsExactlyElementsIn(ImmutableSet.of(user2.id()));
+  }
+
   private void addReviewer(String changeId, TestAccount user, ReviewerState state)
       throws Exception {
     ReviewerInput input = new ReviewerInput();
