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 1b38573..3a8f982 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/projectgroupstructure/ProjectCreationValidator.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/projectgroupstructure/ProjectCreationValidator.java
@@ -77,9 +77,12 @@
       "Project name must start with parent project name, e.g. %s."
           + SEE_DOCUMENTATION_MSG;
 
-  /* package */ static final String DELEGATE_PROJECT_CREATION_TO =
+  static final String DELEGATE_PROJECT_CREATION_TO =
       "delegateProjectCreationTo";
 
+  static final String DISABLE_GRANTING_PROJECT_OWNERSHIP =
+      "disableGrantingProjectOwnership";
+
   private final CreateGroup.Factory createGroupFactory;
   private final String documentationUrl;
   private final AllProjectsNameProvider allProjectsName;
@@ -122,11 +125,25 @@
 
     // If we reached that point, it means we allow project creation. Make the
     // user an owner if not already by inheritance.
-    if (!parentCtrl.isOwner()) {
+    if (!parentCtrl.isOwner() && !configDisableGrantingOwnership(parentCtrl)) {
       args.ownerIds.add(createGroup(name + "-admins"));
     }
   }
 
+  private boolean configDisableGrantingOwnership(ProjectControl parentCtrl)
+      throws ValidationException {
+    try {
+      return cfg
+          .getFromProjectConfigWithInheritance(
+              parentCtrl.getProject().getNameKey(), pluginName)
+          .getBoolean(DISABLE_GRANTING_PROJECT_OWNERSHIP, false);
+    } catch (NoSuchProjectException e) {
+      log.error("Failed to check project config for "
+          + parentCtrl.getProject().getName() + ": " + e.getMessage(), e);
+      throw new ValidationException(AN_ERROR_OCCURRED_MSG);
+    }
+  }
+
   private AccountGroup.UUID createGroup(String name)
       throws ValidationException {
     try {
diff --git a/src/main/resources/Documentation/about.md b/src/main/resources/Documentation/about.md
index ee094c5..a967a52 100644
--- a/src/main/resources/Documentation/about.md
+++ b/src/main/resources/Documentation/about.md
@@ -80,3 +80,14 @@
 	```
 - Click `Publish` button, review, vote and submit the change to apply new
 configuration
+
+Ownership of a project created by delegated user is given automatically to that
+user by adding him to a group named `<root-project-name>-admins`. It is
+possible to disable granting the ownership by configuring
+`disableGrantingProjectOwnership` in the `project.config` of
+`refs/meta/config` branch of the parent project:
+
+```
+[plugin "@PLUGIN@"]
+disableGrantingProjectOwnership = true
+```
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 e76f94b..23f0bea 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/projectgroupstructure/ProjectCreationValidatorIT.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/projectgroupstructure/ProjectCreationValidatorIT.java
@@ -275,6 +275,37 @@
   }
 
   @Test
+  public void shouldNotMakeUserOwnerIfNotAlreadyOwnerByInheritanceAndGrantingIsDisabled()
+      throws Exception {
+    String parent = name("parentProject");
+    ProjectInput in = new ProjectInput();
+    in.permissionsOnly = true;
+    adminRestSession.put("/projects/" + parent, in).assertCreated();
+
+    String delegatingGroup = name("someGroup");
+    GroupApi dGroup = gApi.groups().create(delegatingGroup);
+    dGroup.addMembers(user.username);
+    Project.NameKey parentNameKey = new Project.NameKey(parent);
+    ProjectConfig cfg = projectCache.checkedGet(parentNameKey).getConfig();
+    String gId = gApi.groups().id(delegatingGroup).get().id;
+    cfg.getPluginConfig(PLUGIN_NAME).setGroupReference(
+        ProjectCreationValidator.DELEGATE_PROJECT_CREATION_TO,
+        new GroupReference(AccountGroup.UUID.parse(gId), delegatingGroup));
+    cfg.getPluginConfig(PLUGIN_NAME).setBoolean(
+        ProjectCreationValidator.DISABLE_GRANTING_PROJECT_OWNERSHIP, true);
+    saveProjectConfig(parentNameKey, cfg);
+
+    in = new ProjectInput();
+    in.parent = parent;
+    String childProject = parent + "/childProject";
+    userRestSession.put("/projects/" + Url.encode(childProject), in)
+        .assertCreated();
+    ProjectState projectState =
+        projectCache.get(new Project.NameKey(childProject));
+    assertThat(projectState.getOwners().size()).isEqualTo(0);
+  }
+
+  @Test
   public void shouldBlockCreationIfGroupRefIsNotUsed() throws Exception {
     String ownerGroup = name("groupA");
     gApi.groups().create(ownerGroup);
