diff --git a/src/main/java/com/googlesource/gerrit/plugins/simplesubmitrules/config/ConfigTranslator.java b/src/main/java/com/googlesource/gerrit/plugins/simplesubmitrules/config/ConfigTranslator.java
index 13b5301..e7982fb 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/simplesubmitrules/config/ConfigTranslator.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/simplesubmitrules/config/ConfigTranslator.java
@@ -123,9 +123,8 @@
   void applyTo(SubmitConfig inConfig, ProjectConfig projectConfig)
       throws BadRequestException, IOException {
     PluginConfig hostPluginConfig = pluginConfigFactory.getFromGerritConfig(pluginName);
-    PluginConfig projectPluginConfig = projectConfig.getPluginConfig(pluginName);
 
-    applyCommentRulesTo(inConfig.comments, projectPluginConfig);
+    applyCommentRulesTo(inConfig.comments, projectConfig, pluginName);
     applyLabelsTo(inConfig.labels, projectConfig, hostPluginConfig);
   }
 
@@ -203,12 +202,13 @@
     labelDefinition.ignoreSelfApproval = labelType.isIgnoreSelfApproval();
   }
 
-  private static void applyCommentRulesTo(@Nullable CommentsRules comments, PluginConfig config) {
+  private static void applyCommentRulesTo(@Nullable CommentsRules comments,
+      ProjectConfig projectConfig, String pluginName) {
     if (comments == null) {
       return;
     }
-    config.setBoolean(
+    projectConfig.updatePluginConfig(pluginName, cfg -> cfg.setBoolean(
         SimpleSubmitRulesConfig.KEY_BLOCK_IF_UNRESOLVED_COMMENTS,
-        comments.blockIfUnresolvedComments);
+        comments.blockIfUnresolvedComments));
   }
 }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/simplesubmitrules/PluginIT.java b/src/test/java/com/googlesource/gerrit/plugins/simplesubmitrules/PluginIT.java
index 2602df6..3049dc0 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/simplesubmitrules/PluginIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/simplesubmitrules/PluginIT.java
@@ -25,6 +25,7 @@
 import com.google.gerrit.acceptance.RestResponse;
 import com.google.gerrit.acceptance.TestPlugin;
 import com.google.gerrit.common.RawInputUtil;
+import com.google.gerrit.entities.CachedProjectConfig;
 import com.google.gerrit.entities.LabelFunction;
 import com.google.gerrit.entities.LabelType;
 import com.google.gerrit.entities.Project;
@@ -140,12 +141,7 @@
 
     // Check that the label has the same configs besides the function, which we changed
     LabelType allProjectsCR = projectCache.getAllProjects().getLabelTypes().byLabel("Code-Review");
-    projectCache
-        .get(project)
-        .get()
-        .getBareConfig()
-        .updateLabelType("Code-Review", lt -> lt.setFunction(allProjectsCR.getFunction()));
-    assertLabelTypeEquals(localCR, allProjectsCR);
+    assertThat(localCR.toBuilder().setFunction(allProjectsCR.getFunction()).build()).isEqualTo(allProjectsCR);
   }
 
   @Test
@@ -169,23 +165,4 @@
   private static String endpointUrl(Project.NameKey project) {
     return "/projects/" + project.get() + "/simple-submit-rules";
   }
-
-  private static void assertLabelTypeEquals(LabelType l1, LabelType l2) {
-    assertThat(l1.isAllowPostSubmit()).isEqualTo(l2.isAllowPostSubmit());
-    assertThat(l1.isCanOverride()).isEqualTo(l2.isCanOverride());
-    assertThat(l1.getDefaultValue()).isEqualTo(l2.getDefaultValue());
-    assertThat(l1.getLabelId()).isEqualTo(l2.getLabelId());
-    assertThat(l1.getMax()).isEqualTo(l2.getMax());
-    assertThat(l1.getMin()).isEqualTo(l2.getMin());
-    assertThat(l1.getName()).isEqualTo(l2.getName());
-    assertThat(l1.getRefPatterns()).isEqualTo(l2.getRefPatterns());
-    assertThat(l1.isIgnoreSelfApproval()).isEqualTo(l2.isIgnoreSelfApproval());
-    assertThat(l1.isCopyAllScoresIfNoChange()).isEqualTo(l2.isCopyAllScoresIfNoChange());
-    assertThat(l1.isCopyAllScoresIfNoCodeChange()).isEqualTo(l2.isCopyAllScoresIfNoCodeChange());
-    assertThat(l1.isCopyAllScoresOnMergeFirstParentUpdate())
-        .isEqualTo(l2.isCopyAllScoresOnMergeFirstParentUpdate());
-    assertThat(l1.isCopyAllScoresOnTrivialRebase()).isEqualTo(l2.isCopyAllScoresOnTrivialRebase());
-    assertThat(l1.isCopyMaxScore()).isEqualTo(l2.isCopyMaxScore());
-    assertThat(l1.isCopyMinScore()).isEqualTo(l2.isCopyMinScore());
-  }
 }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/simplesubmitrules/rules/NoUnresolvedCommentsRuleIT.java b/src/test/java/com/googlesource/gerrit/plugins/simplesubmitrules/rules/NoUnresolvedCommentsRuleIT.java
index b090681..e4e55f3 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/simplesubmitrules/rules/NoUnresolvedCommentsRuleIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/simplesubmitrules/rules/NoUnresolvedCommentsRuleIT.java
@@ -113,8 +113,8 @@
   private void enableRule(boolean newState) throws Exception {
     try (ProjectConfigUpdate u = updateProject(project)) {
       u.getConfig()
-          .getPluginConfig(plugin.getName())
-          .setBoolean(SimpleSubmitRulesConfig.KEY_BLOCK_IF_UNRESOLVED_COMMENTS, newState);
+          .updatePluginConfig(plugin.getName(), cfg ->
+          cfg.setBoolean(SimpleSubmitRulesConfig.KEY_BLOCK_IF_UNRESOLVED_COMMENTS, newState));
       u.save();
     }
   }
