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 fb08896..40273f5 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/projectgroupstructure/ProjectCreationValidator.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/projectgroupstructure/ProjectCreationValidator.java
@@ -99,35 +99,13 @@
       return;
     }
 
-    Project parent = parentCtrl.getProject();
-
-    if (allProjectsName.get().equals(parent.getNameKey())) {
-      if (name.contains("/")) {
-        log.debug("rejecting creation of {}: name contains slashes", name);
-        throw new ValidationException(String.format(
-            ROOT_PROJECT_CANNOT_CONTAINS_SLASHES_MSG, documentationUrl));
-      }
-      if (!args.permissionsOnly) {
-        log.debug("rejecting creation of {}: missing permissions only option",
-            name);
-        throw new ValidationException(String
-            .format(REGULAR_PROJECT_NOT_ALLOWED_AS_ROOT_MSG, documentationUrl));
-      }
+    if (allProjectsName.get().equals(parentCtrl.getProject().getNameKey())) {
+      validateRootProject(name, args.permissionsOnly);
       args.ownerIds.add(createGroup(name + "-admins"));
-      log.debug("allowing creation of root project {}", name);
       return;
     }
 
-    validateProjectNamePrefix(name, parent);
-
-    if (!parentCtrl.isOwner()) {
-      log.debug("rejecting creation of {}: user is not owner of {}", name,
-          parent.getName());
-      throw new ValidationException(
-          String.format(MUST_BE_OWNER_TO_CREATE_PROJECT_MSG, parent.getName(),
-              documentationUrl));
-    }
-    log.debug("allowing creation of project {}", name);
+    validateProject(name, parentCtrl);
   }
 
   private AccountGroup.UUID createGroup(String name)
@@ -155,9 +133,27 @@
     }
   }
 
-  private void validateProjectNamePrefix(String name, Project parent)
+  private void validateRootProject(String name, boolean permissionOnly)
+      throws ValidationException {
+    log.debug("validating root project name {}", name);
+    if (name.contains("/")) {
+      log.debug("rejecting creation of {}: name contains slashes", name);
+      throw new ValidationException(String
+          .format(ROOT_PROJECT_CANNOT_CONTAINS_SLASHES_MSG, documentationUrl));
+    }
+    if (!permissionOnly) {
+      log.debug("rejecting creation of {}: missing permissions only option",
+          name);
+      throw new ValidationException(String
+          .format(REGULAR_PROJECT_NOT_ALLOWED_AS_ROOT_MSG, documentationUrl));
+    }
+    log.debug("allowing creation of root project {}", name);
+  }
+
+  private void validateProject(String name, ProjectControl parentCtrl)
       throws ValidationException {
     log.debug("validating name prefix of {}", name);
+    Project parent = parentCtrl.getProject();
     String prefix = parent.getName() + "/";
     if (!name.startsWith(prefix)) {
       log.debug("rejecting creation of {}: name is not starting with {}", name,
@@ -166,5 +162,13 @@
           String.format(PROJECT_MUST_START_WITH_PARENT_NAME_MSG, prefix + name,
               documentationUrl));
     }
+    if (!parentCtrl.isOwner()) {
+      log.debug("rejecting creation of {}: user is not owner of {}", name,
+          parent.getName());
+      throw new ValidationException(
+          String.format(MUST_BE_OWNER_TO_CREATE_PROJECT_MSG, parent.getName(),
+              documentationUrl));
+    }
+    log.debug("allowing creation of project {}", name);
   }
 }
