diff --git a/java/com/google/gerrit/acceptance/AbstractDaemonTest.java b/java/com/google/gerrit/acceptance/AbstractDaemonTest.java
index a4eda1b..57de49b 100644
--- a/java/com/google/gerrit/acceptance/AbstractDaemonTest.java
+++ b/java/com/google/gerrit/acceptance/AbstractDaemonTest.java
@@ -553,13 +553,13 @@
   }
 
   protected Project.NameKey createProject(String nameSuffix) throws Exception {
-    return projectOperations.newProject().withEmptyCommit().create();
+    return projectOperations.newProject().create();
   }
 
   protected Project.NameKey createProject(String nameSuffix, Project.NameKey parent)
       throws Exception {
     // Default for createEmptyCommit should match TestProjectConfig.
-    return projectOperations.newProject().withEmptyCommit().parent(parent).create();
+    return projectOperations.newProject().parent(parent).create();
   }
 
   protected Project.NameKey createProject(
diff --git a/java/com/google/gerrit/acceptance/testsuite/project/TestProjectCreation.java b/java/com/google/gerrit/acceptance/testsuite/project/TestProjectCreation.java
index aef2625..a0b130e 100644
--- a/java/com/google/gerrit/acceptance/testsuite/project/TestProjectCreation.java
+++ b/java/com/google/gerrit/acceptance/testsuite/project/TestProjectCreation.java
@@ -48,13 +48,7 @@
 
     public abstract TestProjectCreation.Builder createEmptyCommit(boolean value);
 
-    /**
-     * Creates empty commit on creation. This is necessary for the project's branches to be born.
-     */
-    public TestProjectCreation.Builder withEmptyCommit() {
-      return createEmptyCommit(true);
-    }
-
+    /** Skips the empty commit on creation. This means that project's branches will not exist. */
     public TestProjectCreation.Builder noEmptyCommit() {
       return createEmptyCommit(false);
     }
diff --git a/javatests/com/google/gerrit/acceptance/git/SubmoduleSubscriptionsWholeTopicMergeIT.java b/javatests/com/google/gerrit/acceptance/git/SubmoduleSubscriptionsWholeTopicMergeIT.java
index d3d1ab3..94483b1 100644
--- a/javatests/com/google/gerrit/acceptance/git/SubmoduleSubscriptionsWholeTopicMergeIT.java
+++ b/javatests/com/google/gerrit/acceptance/git/SubmoduleSubscriptionsWholeTopicMergeIT.java
@@ -285,7 +285,6 @@
           projectOperations
               .newProject()
               .name(prefix + "sub" + i)
-              .withEmptyCommit()
               .submitType(getSubmitType())
               .create();
       grant(subKey[i], "refs/heads/*", Permission.PUSH);
diff --git a/javatests/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java b/javatests/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java
index f717d27..8b755e9 100644
--- a/javatests/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java
+++ b/javatests/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java
@@ -1364,8 +1364,7 @@
   // TODO(hanwen): the submodule tests have a similar method; maybe we could share code?
   protected Project.NameKey createProjectForPush(@Nullable NameKey parent, SubmitType submitType)
       throws Exception {
-    TestProjectCreation.Builder b =
-        projectOperations.newProject().withEmptyCommit().submitType(submitType);
+    TestProjectCreation.Builder b = projectOperations.newProject().submitType(submitType);
     if (parent != null) {
       b.parent(parent);
     }
diff --git a/javatests/com/google/gerrit/acceptance/rest/project/AccessIT.java b/javatests/com/google/gerrit/acceptance/rest/project/AccessIT.java
index 54195d1..e688216 100644
--- a/javatests/com/google/gerrit/acceptance/rest/project/AccessIT.java
+++ b/javatests/com/google/gerrit/acceptance/rest/project/AccessIT.java
@@ -76,7 +76,7 @@
 
   @Before
   public void setUp() throws Exception {
-    newProjectName = projectOperations.newProject().withEmptyCommit().create();
+    newProjectName = projectOperations.newProject().create();
   }
 
   @Test
diff --git a/javatests/com/google/gerrit/acceptance/server/change/SubmittedTogetherIT.java b/javatests/com/google/gerrit/acceptance/server/change/SubmittedTogetherIT.java
index 304a1e4..ddc3905 100644
--- a/javatests/com/google/gerrit/acceptance/server/change/SubmittedTogetherIT.java
+++ b/javatests/com/google/gerrit/acceptance/server/change/SubmittedTogetherIT.java
@@ -21,6 +21,7 @@
 import com.google.gerrit.acceptance.AbstractDaemonTest;
 import com.google.gerrit.acceptance.GitUtil;
 import com.google.gerrit.acceptance.TestProjectInput;
+import com.google.gerrit.acceptance.testsuite.project.ProjectOperations;
 import com.google.gerrit.extensions.api.changes.SubmittedTogetherInfo;
 import com.google.gerrit.extensions.client.ChangeStatus;
 import com.google.gerrit.extensions.client.ListChangesOption;
@@ -29,6 +30,7 @@
 import com.google.gerrit.extensions.common.RevisionInfo;
 import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.testing.ConfigSuite;
+import com.google.inject.Inject;
 import java.util.EnumSet;
 import org.eclipse.jgit.junit.TestRepository;
 import org.eclipse.jgit.lib.Config;
@@ -41,6 +43,8 @@
     return submitWholeTopicEnabledConfig();
   }
 
+  @Inject private ProjectOperations projectOperations;
+
   @Test
   public void doesNotIncludeCurrentFiles() throws Exception {
     RevCommit c1_1 = commitBuilder().add("a.txt", "1").message("subject: 1").create();
@@ -226,7 +230,8 @@
 
   @Test
   public void newBranchTwoChangesTogether() throws Exception {
-    Project.NameKey p1 = createProject("a-new-project", null, false);
+    Project.NameKey p1 = projectOperations.newProject().noEmptyCommit().create();
+
     TestRepository<?> repo1 = cloneProject(p1);
 
     RevCommit c1 =
diff --git a/javatests/com/google/gerrit/acceptance/testsuite/project/ProjectOperationsImplTest.java b/javatests/com/google/gerrit/acceptance/testsuite/project/ProjectOperationsImplTest.java
index 6dc69be..3f537c0 100644
--- a/javatests/com/google/gerrit/acceptance/testsuite/project/ProjectOperationsImplTest.java
+++ b/javatests/com/google/gerrit/acceptance/testsuite/project/ProjectOperationsImplTest.java
@@ -47,7 +47,7 @@
 
   @Test
   public void emptyCommit() throws Exception {
-    Project.NameKey key = projectOperations.newProject().withEmptyCommit().create();
+    Project.NameKey key = projectOperations.newProject().create();
     List<BranchInfo> branches = gApi.projects().name(key.get()).branches().get();
     assertThat(branches).isNotEmpty();
     assertThat(branches.stream().map(x -> x.ref).collect(toList()))
