diff --git a/owners-autoassign/src/main/java/com/vmware/gerrit/owners/common/GitRefListener.java b/owners-autoassign/src/main/java/com/vmware/gerrit/owners/common/GitRefListener.java
index e0d7faa..075f066 100644
--- a/owners-autoassign/src/main/java/com/vmware/gerrit/owners/common/GitRefListener.java
+++ b/owners-autoassign/src/main/java/com/vmware/gerrit/owners/common/GitRefListener.java
@@ -87,7 +87,7 @@
               repository, patchList);
           Set<Account.Id> allReviewers = Sets.newHashSet();
           allReviewers.addAll(owners.get().values());
-          for(Matcher matcher: owners.getMatches().values()) {
+          for(Matcher matcher: owners.getMatchers().values()) {
             allReviewers.addAll( matcher.getOwners());
           }
           logger.debug("Autoassigned reviewers are: {}",allReviewers.toString());
diff --git a/owners-common/src/main/java/com/vmware/gerrit/owners/common/ConfigurationParser.java b/owners-common/src/main/java/com/vmware/gerrit/owners/common/ConfigurationParser.java
index 06e2c64..d5859e6 100644
--- a/owners-common/src/main/java/com/vmware/gerrit/owners/common/ConfigurationParser.java
+++ b/owners-common/src/main/java/com/vmware/gerrit/owners/common/ConfigurationParser.java
@@ -75,7 +75,7 @@
   }
 
   private void addMatchers(JsonNode jsonNode, OwnersConfig ret) {
-    getNode(jsonNode, "matches")
+    getNode(jsonNode, "matchers")
     .map(this::getMatchers)
     .ifPresent(m -> m.forEach(ret::addMatcher));
   }
@@ -102,7 +102,7 @@
             .flatMap(o -> accounts.find(o).stream())
             .collect(Collectors.toSet());
     if (owners.isEmpty()) {
-      log.warn("Matches must contain a list of owners");
+      log.warn("Matchers must contain a list of owners");
       return Optional.empty();
     }
 
diff --git a/owners-common/src/main/java/com/vmware/gerrit/owners/common/PathOwners.java b/owners-common/src/main/java/com/vmware/gerrit/owners/common/PathOwners.java
index 71616ad..bbfacbc 100644
--- a/owners-common/src/main/java/com/vmware/gerrit/owners/common/PathOwners.java
+++ b/owners-common/src/main/java/com/vmware/gerrit/owners/common/PathOwners.java
@@ -45,7 +45,7 @@
 
   private final Accounts accounts;
 
-  private Map<String, Matcher> matches;
+  private Map<String, Matcher> matchers;
 
   private Map<String, Set<Id>> fileOwners;
 
@@ -59,7 +59,7 @@
 
     OwnersMap map = fetchOwners();
     owners = Multimaps.unmodifiableSetMultimap(map.getPathOwners());
-    matches = map.getMatchers();
+    matchers = map.getMatchers();
     fileOwners = map.getFileOwners();
   }
 
@@ -72,8 +72,8 @@
     return owners;
   }
 
-  public Map<String, Matcher> getMatches() {
-    return matches;
+  public Map<String, Matcher> getMatchers() {
+    return matchers;
   }
 
   public Map<String, Set<Account.Id>> getFileOwners() {
diff --git a/owners-common/src/test/java/com/vmware/gerrit/owners/common/Config.java b/owners-common/src/test/java/com/vmware/gerrit/owners/common/Config.java
index ebc802c..ba045d8 100644
--- a/owners-common/src/test/java/com/vmware/gerrit/owners/common/Config.java
+++ b/owners-common/src/test/java/com/vmware/gerrit/owners/common/Config.java
@@ -93,7 +93,7 @@
       sb.append("- " + owner + "\n");
     }
     if (matchers.length > 0) {
-      sb.append("matches: \n");
+      sb.append("matchers: \n");
       for (MatcherConfig matcher : matchers) {
         sb.append(matcher.toYaml());
       }
diff --git a/owners-common/src/test/java/com/vmware/gerrit/owners/common/RegexTest.java b/owners-common/src/test/java/com/vmware/gerrit/owners/common/RegexTest.java
index 058b747..9599672 100644
--- a/owners-common/src/test/java/com/vmware/gerrit/owners/common/RegexTest.java
+++ b/owners-common/src/test/java/com/vmware/gerrit/owners/common/RegexTest.java
@@ -149,13 +149,13 @@
     Set<Account.Id> ownersSet = owners.get().get("project/OWNERS");
     assertEquals(2, ownersSet.size());
 
-    // get matches
-    Map<String, Matcher> matches = owners.getMatches();
-    assertEquals(4, matches.size());
+    // get matchers
+    Map<String, Matcher> matchers = owners.getMatchers();
+    assertEquals(4, matchers.size());
 
     // asserts we have 1 exact matcher
     List<Entry<String, Matcher>> onlyExacts =
-        iteratorStream(matches.entrySet().iterator()).filter(
+        iteratorStream(matchers.entrySet().iterator()).filter(
             entry -> entry.getValue() instanceof ExactMatcher).collect(
             Collectors.toList());
     assertEquals(1, onlyExacts.size());
@@ -163,7 +163,7 @@
 
     // ... 1 regex matcher
     List<Entry<String, Matcher>> regexList =
-        StreamUtils.iteratorStream(matches.entrySet().iterator())
+        StreamUtils.iteratorStream(matchers.entrySet().iterator())
             .filter(entry -> entry.getValue() instanceof RegExMatcher)
             .collect(Collectors.toList());
     assertEquals(1, regexList.size());
@@ -171,7 +171,7 @@
 
     // ... 1 partial regex matcher
     List<Entry<String, Matcher>> partialRegexList =
-       iteratorStream(matches.entrySet().iterator())
+       iteratorStream(matchers.entrySet().iterator())
             .filter(entry -> entry.getValue() instanceof PartialRegExMatcher)
             .collect(Collectors.toList());
     assertEquals(1, partialRegexList.size());
@@ -179,7 +179,7 @@
 
     // .... 1 suffix matcher
     List<Entry<String, Matcher>> suffixList =
-        iteratorStream(matches.entrySet().iterator()).filter(
+        iteratorStream(matchers.entrySet().iterator()).filter(
             entry -> entry.getValue() instanceof SuffixMatcher).collect(
             Collectors.toList());
     assertEquals(1, suffixList.size());
