diff --git a/src/main/java/com/googlesource/gerrit/plugins/copyright/CopyrightReviewApi.java b/src/main/java/com/googlesource/gerrit/plugins/copyright/CopyrightReviewApi.java
index de97d60..ad047a6 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/copyright/CopyrightReviewApi.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/copyright/CopyrightReviewApi.java
@@ -31,6 +31,7 @@
 import com.google.gerrit.extensions.api.changes.ReviewInput;
 import com.google.gerrit.extensions.api.changes.ReviewInput.CommentInput;
 import com.google.gerrit.extensions.api.changes.ReviewResult;
+import com.google.gerrit.extensions.api.changes.ReviewerInfo;
 import com.google.gerrit.extensions.client.Comment;
 import com.google.gerrit.extensions.client.ReviewerState;
 import com.google.gerrit.extensions.common.CommentInfo;
@@ -328,8 +329,9 @@
               .label(scannerConfig.reviewLabel, reviewRequired ? -1 : +2);
 
       if (reviewRequired) {
-        ri = addReviewers(ri, scannerConfig.ccs, ReviewerState.CC);
-        ri = addReviewers(ri, scannerConfig.reviewers, ReviewerState.REVIEWER);
+        List<ReviewerInfo> reviewers = cApi.reviewers();
+        ri = addReviewers(reviewers, ri, scannerConfig.ccs, ReviewerState.CC);
+        ri = addReviewers(reviewers, ri, scannerConfig.reviewers, ReviewerState.REVIEWER);
       }
       ImmutableMap.Builder<String, List<CommentInput>> comments = ImmutableMap.builder();
       if (reviewRequired) {
@@ -567,8 +569,15 @@
    * {@code reviewers} as {@code type} CC or REVIEWER.
    */
   @VisibleForTesting
-  ReviewInput addReviewers(ReviewInput ri, Iterable<String> reviewers, ReviewerState type) {
+  ReviewInput addReviewers(
+      List<ReviewerInfo> existingReviewers,
+      ReviewInput ri,
+      Iterable<String> reviewers,
+      ReviewerState type) {
     for (String reviewer : reviewers) {
+      if (containsReviewer(existingReviewers, reviewer)) {
+        continue;
+      }
       ri = ri.reviewer(reviewer, type, true);
     }
     return ri;
@@ -590,6 +599,24 @@
     return false;
   }
 
+  /** Returns true if {@code priorReviewers} already includes {@code reviewer}. */
+  boolean containsReviewer(Iterable<? extends ReviewerInfo> priorReviewers, String reviewer) {
+    if (priorReviewers == null) {
+      return false;
+    }
+    for (ReviewerInfo prior : priorReviewers) {
+      if (Objects.equals(prior.username, reviewer) || Objects.equals(prior.name, reviewer)
+          || Objects.equals(prior.email, reviewer)
+          || Objects.equals(Integer.toString(prior._accountId), reviewer)) {
+        return true;
+      }
+      if (prior.secondaryEmails != null && prior.secondaryEmails.contains(reviewer)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
   /**
    * Puts the pieces together from a scanner finding to construct a coherent human-reable message.
    *
diff --git a/src/test/java/com/googlesource/gerrit/plugins/copyright/CopyrightReviewApiTest.java b/src/test/java/com/googlesource/gerrit/plugins/copyright/CopyrightReviewApiTest.java
index efea843..7fd95d2 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/copyright/CopyrightReviewApiTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/copyright/CopyrightReviewApiTest.java
@@ -33,6 +33,7 @@
 import com.google.gerrit.extensions.api.changes.AddReviewerInput;
 import com.google.gerrit.extensions.api.changes.ReviewInput;
 import com.google.gerrit.extensions.api.changes.ReviewInput.CommentInput;
+import com.google.gerrit.extensions.api.changes.ReviewerInfo;
 import com.google.gerrit.extensions.client.ReviewerState;
 import com.google.gerrit.reviewdb.client.Account;
 import com.google.gerrit.server.CurrentUser;
@@ -90,36 +91,55 @@
 
   @Test
   public void testAddReviewers_addNone() throws Exception {
+    ImmutableList<ReviewerInfo> priorReviewers = ImmutableList.of();
     ReviewInput ri = new ReviewInput();
-    ri = reviewApi.addReviewers(ri, ImmutableList.of(), ReviewerState.CC);
+    ri = reviewApi.addReviewers(priorReviewers, ri, ImmutableList.of(), ReviewerState.CC);
     assertThat(ri.reviewers).isNull();
-    ri = reviewApi.addReviewers(ri, ImmutableList.of(), ReviewerState.REVIEWER);
+    ri = reviewApi.addReviewers(priorReviewers, ri, ImmutableList.of(), ReviewerState.REVIEWER);
     assertThat(ri.reviewers).isNull();
   }
 
   @Test
   public void testAddReviewers_addCC() throws Exception {
+    ImmutableList<ReviewerInfo> priorReviewers = ImmutableList.of();
     ReviewInput ri = new ReviewInput();
-    ri = reviewApi.addReviewers(ri, ImmutableList.of("someone"), ReviewerState.CC);
+    ri = reviewApi.addReviewers(priorReviewers, ri, ImmutableList.of("someone"), ReviewerState.CC);
     assertThat(ri.reviewers).comparingElementsUsing(addressedTo()).containsExactly("CC:someone");
   }
 
   @Test
   public void testAddReviewers_addReviewer() throws Exception {
+    ImmutableList<ReviewerInfo> priorReviewers = ImmutableList.of();
     ReviewInput ri = new ReviewInput();
-    ri = reviewApi.addReviewers(ri, ImmutableList.of("someone"), ReviewerState.REVIEWER);
+    ri = reviewApi.addReviewers(
+        priorReviewers, ri, ImmutableList.of("someone"), ReviewerState.REVIEWER);
     assertThat(ri.reviewers)
         .comparingElementsUsing(addressedTo())
         .containsExactly("REVIEWER:someone");
   }
 
   @Test
+  public void testAddReviewers_addReviewerAlreadyCCd() throws Exception {
+    ImmutableList<ReviewerInfo> priorReviewers =
+        ImmutableList.of(ReviewerInfo.byEmail("someone", "someone@example.com"));
+    ReviewInput ri = new ReviewInput();
+    ri = reviewApi.addReviewers(
+        priorReviewers, ri, ImmutableList.of("someone"), ReviewerState.REVIEWER);
+    assertThat(ri.reviewers).isNull();
+  }
+
+  @Test
   public void testAddReviewers_addMultiple() throws Exception {
+    ImmutableList<ReviewerInfo> priorReviewers = ImmutableList.of();
     ReviewInput ri = new ReviewInput();
     ri =
         reviewApi.addReviewers(
-            ri, ImmutableList.of("someone", "someone else"), ReviewerState.REVIEWER);
-    ri = reviewApi.addReviewers(ri, ImmutableList.of("another", "and another"), ReviewerState.CC);
+            priorReviewers,
+            ri,
+            ImmutableList.of("someone", "someone else"),
+            ReviewerState.REVIEWER);
+    ri = reviewApi.addReviewers(
+        priorReviewers, ri, ImmutableList.of("another", "and another"), ReviewerState.CC);
     assertThat(ri.reviewers)
         .comparingElementsUsing(addressedTo())
         .containsExactly(
diff --git a/src/test/java/com/googlesource/gerrit/plugins/copyright/lib/CopyrightPatternsTest.java b/src/test/java/com/googlesource/gerrit/plugins/copyright/lib/CopyrightPatternsTest.java
index 394eb76..e3fbc25 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/copyright/lib/CopyrightPatternsTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/copyright/lib/CopyrightPatternsTest.java
@@ -161,13 +161,13 @@
       CopyrightPatterns.Rule rule = CopyrightPatterns.lookup.get(ruleName);
 
       if (rule.exclusions != null) {
-        assertThat(rules.excludePatterns).containsAllIn(rule.exclusions);
+        assertThat(rules.excludePatterns).containsAtLeastElementsIn(rule.exclusions);
       }
       if (rule.licenses != null) {
-        assertThat(rules.excludePatterns).containsAllIn(rule.licenses);
+        assertThat(rules.excludePatterns).containsAtLeastElementsIn(rule.licenses);
       }
       if (rule.owners != null) {
-        assertThat(rules.excludePatterns).containsAllIn(rule.owners);
+        assertThat(rules.excludePatterns).containsAtLeastElementsIn(rule.owners);
       }
     }
   }
