diff --git a/src/main/java/com/ericsson/gerrit/plugins/projectgroupstructure/ProjectCreationValidator.java b/src/main/java/com/ericsson/gerrit/plugins/projectgroupstructure/ProjectCreationValidator.java
index bff257e..2c50e81 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/projectgroupstructure/ProjectCreationValidator.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/projectgroupstructure/ProjectCreationValidator.java
@@ -41,6 +41,7 @@
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.google.inject.Singleton;
+import java.util.Optional;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -235,18 +236,18 @@
 
   private boolean isInDelegatingGroup(Project.NameKey parentCtrl) {
     try {
-      GroupReference delegateProjectCreationTo =
+      Optional<GroupReference> groupReference =
           cfg.getFromProjectConfigWithInheritance(parentCtrl, pluginName)
               .getGroupReference(DELEGATE_PROJECT_CREATION_TO);
-      if (delegateProjectCreationTo == null) {
-        return false;
+      if (groupReference.isPresent()) {
+        GroupReference delegateProjectCreationTo = groupReference.get();
+        log.debug("delegateProjectCreationTo: {}", delegateProjectCreationTo);
+        GroupMembership effectiveGroups = self.get().getEffectiveGroups();
+        return effectiveGroups.contains(delegateProjectCreationTo.getUUID());
       }
-      log.debug("delegateProjectCreationTo: {}", delegateProjectCreationTo);
-      GroupMembership effectiveGroups = self.get().getEffectiveGroups();
-      return effectiveGroups.contains(delegateProjectCreationTo.getUUID());
     } catch (NoSuchProjectException e) {
       log.error("isInDelegatingGroup with error ({}): {}", e.getClass().getName(), e.getMessage());
-      return false;
     }
+    return false;
   }
 }
diff --git a/src/test/java/com/ericsson/gerrit/plugins/projectgroupstructure/ProjectCreationValidatorIT.java b/src/test/java/com/ericsson/gerrit/plugins/projectgroupstructure/ProjectCreationValidatorIT.java
index 7e87c92..226dc1b 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/projectgroupstructure/ProjectCreationValidatorIT.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/projectgroupstructure/ProjectCreationValidatorIT.java
@@ -230,10 +230,12 @@
     try (ProjectConfigUpdate cfgUpdate = updateProject(parentNameKey)) {
       ProjectConfig cfg = cfgUpdate.getConfig();
       String gId = gApi.groups().id(delegatingGroup).get().id;
-      cfg.getPluginConfig(PLUGIN_NAME)
-          .setGroupReference(
-              ProjectCreationValidator.DELEGATE_PROJECT_CREATION_TO,
-              GroupReference.create(AccountGroup.UUID.parse(gId), delegatingGroup));
+      cfg.updatePluginConfig(
+          PLUGIN_NAME,
+          pluginCfg ->
+              pluginCfg.setGroupReference(
+                  ProjectCreationValidator.DELEGATE_PROJECT_CREATION_TO,
+                  GroupReference.create(AccountGroup.UUID.parse(gId), delegatingGroup)));
       cfgUpdate.save();
     }
     userRestSession.put("/projects/" + Url.encode(parent + "/childProject"), in).assertCreated();
@@ -253,10 +255,12 @@
     try (ProjectConfigUpdate cfgUpdate = updateProject(parentNameKey)) {
       ProjectConfig cfg = cfgUpdate.getConfig();
       String gId = gApi.groups().id(delegatingGroup).get().id;
-      cfg.getPluginConfig(PLUGIN_NAME)
-          .setGroupReference(
-              ProjectCreationValidator.DELEGATE_PROJECT_CREATION_TO,
-              GroupReference.create(AccountGroup.UUID.parse(gId), delegatingGroup));
+      cfg.updatePluginConfig(
+          PLUGIN_NAME,
+          pluginCfg ->
+              pluginCfg.setGroupReference(
+                  ProjectCreationValidator.DELEGATE_PROJECT_CREATION_TO,
+                  GroupReference.create(AccountGroup.UUID.parse(gId), delegatingGroup)));
       cfgUpdate.save();
     }
 
@@ -304,12 +308,17 @@
     try (ProjectConfigUpdate cfgUpdate = updateProject(parentNameKey)) {
       ProjectConfig cfg = cfgUpdate.getConfig();
       String gId = gApi.groups().id(delegatingGroup).get().id;
-      cfg.getPluginConfig(PLUGIN_NAME)
-          .setGroupReference(
-              ProjectCreationValidator.DELEGATE_PROJECT_CREATION_TO,
-              GroupReference.create(AccountGroup.UUID.parse(gId), delegatingGroup));
-      cfg.getPluginConfig(PLUGIN_NAME)
-          .setBoolean(ProjectCreationValidator.DISABLE_GRANTING_PROJECT_OWNERSHIP, true);
+      cfg.updatePluginConfig(
+          PLUGIN_NAME,
+          pluginCfg ->
+              pluginCfg.setGroupReference(
+                  ProjectCreationValidator.DELEGATE_PROJECT_CREATION_TO,
+                  GroupReference.create(AccountGroup.UUID.parse(gId), delegatingGroup)));
+      cfg.updatePluginConfig(
+          PLUGIN_NAME,
+          pluginCfg ->
+              pluginCfg.setBoolean(
+                  ProjectCreationValidator.DISABLE_GRANTING_PROJECT_OWNERSHIP, true));
       cfgUpdate.save();
     }
 
@@ -346,8 +355,11 @@
     Project.NameKey parentNameKey = Project.nameKey(parent);
     try (ProjectConfigUpdate cfgUpdate = updateProject(parentNameKey)) {
       ProjectConfig cfg = cfgUpdate.getConfig();
-      cfg.getPluginConfig(PLUGIN_NAME)
-          .setString(ProjectCreationValidator.DELEGATE_PROJECT_CREATION_TO, delegatingGroup);
+      cfg.updatePluginConfig(
+          PLUGIN_NAME,
+          pluginCfg ->
+              pluginCfg.setString(
+                  ProjectCreationValidator.DELEGATE_PROJECT_CREATION_TO, delegatingGroup));
       cfgUpdate.save();
     }
     userRestSession.put("/projects/" + Url.encode(parent + "/childProject"), in).assertConflict();
@@ -384,10 +396,12 @@
     try (ProjectConfigUpdate cfgUpdate = updateProject(parentNameKey)) {
       ProjectConfig cfg = cfgUpdate.getConfig();
       String gId = gApi.groups().id(delegatingGroup).get().id;
-      cfg.getPluginConfig(PLUGIN_NAME)
-          .setGroupReference(
-              ProjectCreationValidator.DELEGATE_PROJECT_CREATION_TO,
-              GroupReference.create(AccountGroup.UUID.parse(gId), delegatingGroup));
+      cfg.updatePluginConfig(
+          PLUGIN_NAME,
+          pluginCfg ->
+              pluginCfg.setGroupReference(
+                  ProjectCreationValidator.DELEGATE_PROJECT_CREATION_TO,
+                  GroupReference.create(AccountGroup.UUID.parse(gId), delegatingGroup)));
       cfgUpdate.save();
     }
     userRestSession.put("/projects/" + Url.encode(parent + "/childProject"), in).assertCreated();
@@ -419,10 +433,12 @@
     try (ProjectConfigUpdate cfgUpdate = updateProject(parentNameKey)) {
       ProjectConfig cfg = cfgUpdate.getConfig();
       String gId = gApi.groups().id(delegatingGroup).get().id;
-      cfg.getPluginConfig(PLUGIN_NAME)
-          .setGroupReference(
-              ProjectCreationValidator.DELEGATE_PROJECT_CREATION_TO,
-              GroupReference.create(AccountGroup.UUID.parse(gId), delegatingGroup));
+      cfg.updatePluginConfig(
+          PLUGIN_NAME,
+          pluginCfg ->
+              pluginCfg.setGroupReference(
+                  ProjectCreationValidator.DELEGATE_PROJECT_CREATION_TO,
+                  GroupReference.create(AccountGroup.UUID.parse(gId), delegatingGroup)));
       cfgUpdate.save();
     }
     userRestSession.put("/projects/" + Url.encode(parent + "/childProject"), in).assertConflict();
@@ -452,10 +468,12 @@
     try (ProjectConfigUpdate cfgUpdate = updateProject(parentNameKey)) {
       ProjectConfig cfg = cfgUpdate.getConfig();
       String gId = "fake-gId";
-      cfg.getPluginConfig(PLUGIN_NAME)
-          .setGroupReference(
-              ProjectCreationValidator.DELEGATE_PROJECT_CREATION_TO,
-              GroupReference.create(AccountGroup.UUID.parse(gId), delegatingGroup));
+      cfg.updatePluginConfig(
+          PLUGIN_NAME,
+          pluginCfg ->
+              pluginCfg.setGroupReference(
+                  ProjectCreationValidator.DELEGATE_PROJECT_CREATION_TO,
+                  GroupReference.create(AccountGroup.UUID.parse(gId), delegatingGroup)));
       cfgUpdate.save();
     }
     userRestSession.put("/projects/" + Url.encode(parent + "/childProject"), in).assertConflict();
@@ -490,10 +508,12 @@
       ProjectConfig cfg = cfgUpdate.getConfig();
 
       String gId = gApi.groups().id(delegatingGroup).get().id;
-      cfg.getPluginConfig("project-group-structure")
-          .setGroupReference(
-              ProjectCreationValidator.DELEGATE_PROJECT_CREATION_TO,
-              GroupReference.create(AccountGroup.UUID.parse(gId), delegatingGroup));
+      cfg.updatePluginConfig(
+          PLUGIN_NAME,
+          pluginCfg ->
+              pluginCfg.setGroupReference(
+                  ProjectCreationValidator.DELEGATE_PROJECT_CREATION_TO,
+                  GroupReference.create(AccountGroup.UUID.parse(gId), delegatingGroup)));
       cfgUpdate.save();
 
       String newDelegatingGroup = name("groupC");
