diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/ProjectServlet.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/ProjectServlet.java
index 8c1e5df..eacd0cf 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/ProjectServlet.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/ProjectServlet.java
@@ -171,7 +171,7 @@
       }
       req.setAttribute(ATT_CONTROL, pc);
 
-      return manager.openRepository(pc.getProject().getName());
+      return manager.openRepository(pc.getProject().getNameKey());
     }
   }
 
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/gitweb/GitWebServlet.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/gitweb/GitWebServlet.java
index 8991ea9..2d7ed09 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/gitweb/GitWebServlet.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/gitweb/GitWebServlet.java
@@ -323,9 +323,9 @@
       name = name.substring(0, name.length() - 4);
     }
 
+    final Project.NameKey nameKey = new Project.NameKey(name);
     final ProjectControl project;
     try {
-      final Project.NameKey nameKey = new Project.NameKey(name);
       project = projectControl.validateFor(nameKey);
       if (!project.allRefsAreVisible()) {
          // Pretend the project doesn't exist
@@ -338,7 +338,7 @@
 
     final Repository repo;
     try {
-      repo = repoManager.openRepository(name);
+      repo = repoManager.openRepository(nameKey);
     } catch (RepositoryNotFoundException e) {
       getServletContext().log("Cannot open repository", e);
       rsp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/raw/CatServlet.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/raw/CatServlet.java
index 832ae99..b4c3519 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/raw/CatServlet.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/raw/CatServlet.java
@@ -157,7 +157,7 @@
 
     final Repository repo;
     try {
-      repo = repoManager.openRepository(project.getNameKey().get());
+      repo = repoManager.openRepository(project.getNameKey());
     } catch (RepositoryNotFoundException e) {
       getServletContext().log("Cannot open repository", e);
       rsp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/IncludedInDetailFactory.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/IncludedInDetailFactory.java
index 7d6f764..398ca7e 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/IncludedInDetailFactory.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/IncludedInDetailFactory.java
@@ -77,7 +77,7 @@
     final PatchSet patch =
         db.patchSets().get(control.getChange().currentPatchSetId());
     final Repository repo =
-        repoManager.openRepository(control.getProject().getName());
+        repoManager.openRepository(control.getProject().getNameKey());
     try {
       final RevWalk rw = new RevWalk(repo);
       try {
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/patch/PatchScriptFactory.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/patch/PatchScriptFactory.java
index fcaa0c5..9ad8e3a 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/patch/PatchScriptFactory.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/patch/PatchScriptFactory.java
@@ -137,7 +137,7 @@
 
     final Repository git;
     try {
-      git = repoManager.openRepository(projectKey.get());
+      git = repoManager.openRepository(projectKey);
     } catch (RepositoryNotFoundException e) {
       log.error("Repository " + projectKey + " not found", e);
       throw new NoSuchChangeException(changeId, e);
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/project/AddBranch.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/project/AddBranch.java
index d4698c2..4bd873a 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/project/AddBranch.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/project/AddBranch.java
@@ -107,7 +107,7 @@
 
     final Branch.NameKey name = new Branch.NameKey(projectName, refname);
     final RefControl refControl = projectControl.controlForRef(name);
-    final Repository repo = repoManager.openRepository(projectName.get());
+    final Repository repo = repoManager.openRepository(projectName);
     try {
       final ObjectId revid = parseStartingRevision(repo);
       final RevWalk rw = verifyConnected(repo, revid);
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/project/ChangeProjectSettings.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/project/ChangeProjectSettings.java
index 8831e90..88c85b8f 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/project/ChangeProjectSettings.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/project/ChangeProjectSettings.java
@@ -73,7 +73,7 @@
     projectCache.evict(proj);
 
     if (!projectControl.getProjectState().isSpecialWildProject()) {
-      repoManager.setProjectDescription(projectName.get(), update.getDescription());
+      repoManager.setProjectDescription(projectName, update.getDescription());
     }
 
     return projectDetailFactory.create(projectName).call();
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/project/DeleteBranches.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/project/DeleteBranches.java
index fffc126..d3eae24 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/project/DeleteBranches.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/project/DeleteBranches.java
@@ -88,7 +88,7 @@
     }
 
     final Set<Branch.NameKey> deleted = new HashSet<Branch.NameKey>();
-    final Repository r = repoManager.openRepository(projectName.get());
+    final Repository r = repoManager.openRepository(projectName);
     try {
       for (final Branch.NameKey branchKey : toRemove) {
         final String refname = branchKey.get();
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/project/ListBranches.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/project/ListBranches.java
index 7b22de0..011e2ab 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/project/ListBranches.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/project/ListBranches.java
@@ -70,7 +70,7 @@
 
     final Repository db;
     try {
-      db = repoManager.openRepository(projectName.get());
+      db = repoManager.openRepository(projectName);
     } catch (RepositoryNotFoundException noGitRepository) {
       return new ListBranchesResult(branches, false, true);
     }
diff --git a/gerrit-httpd/src/test/java/com/google/gerrit/httpd/rpc/project/ListBranchesTest.java b/gerrit-httpd/src/test/java/com/google/gerrit/httpd/rpc/project/ListBranchesTest.java
index e05f811..1eb04e2 100644
--- a/gerrit-httpd/src/test/java/com/google/gerrit/httpd/rpc/project/ListBranchesTest.java
+++ b/gerrit-httpd/src/test/java/com/google/gerrit/httpd/rpc/project/ListBranchesTest.java
@@ -128,7 +128,7 @@
 
     validate().andReturn(pc);
 
-    expect(grm.openRepository(eq(name.get()))).andReturn(mockDb);
+    expect(grm.openRepository(eq(name))).andReturn(mockDb);
     expect(mockDb.getAllRefs()).andDelegateTo(realDb);
     if (getHead) {
       expect(mockDb.getRef(HEAD)).andDelegateTo(realDb);
@@ -263,7 +263,7 @@
         + "master", null)));
 
     validate().andReturn(pc);
-    expect(grm.openRepository(eq(name.get()))).andReturn(mockDb);
+    expect(grm.openRepository(eq(name))).andReturn(mockDb);
     expect(mockDb.getAllRefs()).andReturn(u);
     for (Ref ref : u.values()) {
       assumeVisible(ref, true);
@@ -291,7 +291,7 @@
     u.put(HEAD, new SymbolicRef(HEAD, bar));
 
     validate().andReturn(pc);
-    expect(grm.openRepository(eq(name.get()))).andReturn(mockDb);
+    expect(grm.openRepository(eq(name))).andReturn(mockDb);
     expect(mockDb.getAllRefs()).andReturn(u);
     assumeVisible(bar, false);
     assumeVisible(bar, false);
@@ -318,7 +318,7 @@
     u.put(foo.getName(), foo);
 
     validate().andReturn(pc);
-    expect(grm.openRepository(eq(name.get()))).andReturn(mockDb);
+    expect(grm.openRepository(eq(name))).andReturn(mockDb);
     expect(mockDb.getAllRefs()).andReturn(u);
     assumeVisible(bar, true);
     assumeVisible(bar, true);
diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/ScanTrackingIds.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/ScanTrackingIds.java
index 16c72d4..beeed24 100644
--- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/ScanTrackingIds.java
+++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/ScanTrackingIds.java
@@ -116,7 +116,7 @@
     final Project.NameKey project = change.getDest().getParentKey();
     final Repository git;
     try {
-      git = gitManager.openRepository(project.get());
+      git = gitManager.openRepository(project);
     } catch (RepositoryNotFoundException e) {
       return;
     }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/common/ChangeHookRunner.java b/gerrit-server/src/main/java/com/google/gerrit/common/ChangeHookRunner.java
index c7c51b6..1a4a863 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/common/ChangeHookRunner.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/common/ChangeHookRunner.java
@@ -191,7 +191,7 @@
      */
     private Repository openRepository(final Project.NameKey name) {
         try {
-            return repoManager.openRepository(name.get());
+            return repoManager.openRepository(name);
         } catch (RepositoryNotFoundException err) {
             log.warn("Cannot open repository " + name.get(), err);
             return null;
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/GitProjectImporter.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/GitProjectImporter.java
index 4a33999..3f2ff0d 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/GitProjectImporter.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/GitProjectImporter.java
@@ -105,7 +105,7 @@
         final Project.NameKey nameKey = new Project.NameKey(name);
         final Project p = new Project(nameKey);
 
-        p.setDescription(repositoryManager.getProjectDescription(name));
+        p.setDescription(repositoryManager.getProjectDescription(nameKey));
         p.setSubmitType(SubmitType.MERGE_IF_NECESSARY);
         p.setUseContributorAgreements(false);
         p.setUseSignedOffBy(false);
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/GitRepositoryManager.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/GitRepositoryManager.java
index 4ac55ba..701716d 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/GitRepositoryManager.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/GitRepositoryManager.java
@@ -14,6 +14,7 @@
 
 package com.google.gerrit.server.git;
 
+import com.google.gerrit.reviewdb.Project;
 import com.google.inject.Singleton;
 
 import org.eclipse.jgit.errors.RepositoryNotFoundException;
@@ -42,7 +43,7 @@
    * @throws RepositoryNotFoundException the name does not denote an existing
    *         repository, or the name cannot be read as a repository.
    */
-  public abstract Repository openRepository(String name)
+  public abstract Repository openRepository(Project.NameKey name)
       throws RepositoryNotFoundException;
 
   /**
@@ -54,7 +55,7 @@
    * @throws RepositoryNotFoundException the name does not denote an existing
    *         repository, or the name cannot be read as a repository.
    */
-  public abstract Repository createRepository(String name)
+  public abstract Repository createRepository(Project.NameKey name)
       throws RepositoryNotFoundException;
 
   /**
@@ -69,7 +70,7 @@
    * @throws IOException the description file exists, but is not readable by
    *         this process.
    */
-  public abstract String getProjectDescription(final String name)
+  public abstract String getProjectDescription(Project.NameKey name)
       throws RepositoryNotFoundException, IOException;
 
   /**
@@ -81,6 +82,6 @@
    * @param name the repository name, relative to the base directory.
    * @param description new description text for the repository.
    */
-  public abstract void setProjectDescription(final String name,
+  public abstract void setProjectDescription(Project.NameKey name,
       final String description);
 }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/LocalDiskRepositoryManager.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/LocalDiskRepositoryManager.java
index c644ca8..7e98348 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/LocalDiskRepositoryManager.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/LocalDiskRepositoryManager.java
@@ -15,6 +15,7 @@
 package com.google.gerrit.server.git;
 
 import com.google.gerrit.lifecycle.LifecycleListener;
+import com.google.gerrit.reviewdb.Project;
 import com.google.gerrit.server.config.GerritServerConfig;
 import com.google.gerrit.server.config.SitePaths;
 import com.google.inject.Inject;
@@ -84,14 +85,18 @@
     return basePath;
   }
 
-  public Repository openRepository(String name)
+  private File gitDirOf(Project.NameKey name) {
+    return new File(getBasePath(), name.get());
+  }
+
+  public Repository openRepository(Project.NameKey name)
       throws RepositoryNotFoundException {
     if (isUnreasonableName(name)) {
       throw new RepositoryNotFoundException("Invalid name: " + name);
     }
 
     try {
-      final FileKey loc = FileKey.lenient(new File(basePath, name), FS.DETECTED);
+      final FileKey loc = FileKey.lenient(gitDirOf(name), FS.DETECTED);
       return RepositoryCache.open(loc);
     } catch (IOException e1) {
       final RepositoryNotFoundException e2;
@@ -101,14 +106,14 @@
     }
   }
 
-  public Repository createRepository(String name)
+  public Repository createRepository(final Project.NameKey name)
       throws RepositoryNotFoundException {
     if (isUnreasonableName(name)) {
       throw new RepositoryNotFoundException("Invalid name: " + name);
     }
 
     try {
-      File dir = FileKey.resolve(new File(basePath, name), FS.DETECTED);
+      File dir = FileKey.resolve(gitDirOf(name), FS.DETECTED);
       FileKey loc;
       if (dir != null) {
         // Already exists on disk, use the repository we found.
@@ -118,10 +123,11 @@
         // It doesn't exist under any of the standard permutations
         // of the repository name, so prefer the standard bare name.
         //
-        if (!name.endsWith(".git")) {
-          name = name + ".git";
+        String n = name.get();
+        if (!n.endsWith(Constants.DOT_GIT_EXT)) {
+          n = n + Constants.DOT_GIT_EXT;
         }
-        loc = FileKey.exact(new File(basePath, name), FS.DETECTED);
+        loc = FileKey.exact(new File(basePath, n), FS.DETECTED);
       }
       return RepositoryCache.open(loc, false);
     } catch (IOException e1) {
@@ -132,7 +138,7 @@
     }
   }
 
-  public String getProjectDescription(final String name)
+  public String getProjectDescription(final Project.NameKey name)
       throws RepositoryNotFoundException, IOException {
     final Repository e = openRepository(name);
     try {
@@ -160,7 +166,8 @@
     }
   }
 
-  public void setProjectDescription(final String name, final String description) {
+  public void setProjectDescription(final Project.NameKey name,
+      final String description) {
     // Update git's description file, in case gitweb is being used
     //
     try {
@@ -193,7 +200,9 @@
     }
   }
 
-  private boolean isUnreasonableName(final String name) {
+  private boolean isUnreasonableName(final Project.NameKey nameKey) {
+    final String name = nameKey.get();
+
     if (name.length() == 0) return true; // no empty paths
 
     if (name.indexOf('\\') >= 0) return true; // no windows/dos stlye paths
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java
index 2efb1f4..e402728 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java
@@ -240,11 +240,11 @@
   }
 
   private void openRepository() throws MergeException {
-    final String name = destBranch.getParentKey().get();
+    final Project.NameKey name = destBranch.getParentKey();
     try {
       db = repoManager.openRepository(name);
     } catch (RepositoryNotFoundException notGit) {
-      final String m = "Repository \"" + name + "\" unknown.";
+      final String m = "Repository \"" + name.get() + "\" unknown.";
       throw new MergeException(m, notGit);
     }
 
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/PushOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/PushOp.java
index 043e7c4..4fc2648 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/PushOp.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/PushOp.java
@@ -158,7 +158,7 @@
     // since the canceled flag would be set locking the queue.
     if (!canceled) {
       try {
-        db = repoManager.openRepository(projectName.get());
+        db = repoManager.openRepository(projectName);
         runImpl();
       } catch (RepositoryNotFoundException e) {
         log.error("Cannot replicate " + projectName + "; " + e.getMessage());
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/ChangeEmail.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/ChangeEmail.java
index 0377291..3725a3c 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/ChangeEmail.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/ChangeEmail.java
@@ -48,12 +48,11 @@
 /** Sends an email to one or more interested parties. */
 public abstract class ChangeEmail extends OutgoingEmail {
   protected final Change change;
-  protected String projectName;
   protected PatchSet patchSet;
   protected PatchSetInfo patchSetInfo;
   protected ChangeMessage changeMessage;
 
-  private ProjectState projectState;
+  protected ProjectState projectState;
   protected ChangeData changeData;
 
   protected ChangeEmail(EmailArguments ea, final Change c, final String mc) {
@@ -105,11 +104,8 @@
   protected void init() throws EmailException {
     if (args.projectCache != null) {
       projectState = args.projectCache.get(change.getProject());
-      projectName =
-          projectState != null ? projectState.getProject().getName() : null;
     } else {
       projectState = null;
-      projectName = null;
     }
 
     if (patchSet == null) {
@@ -399,7 +395,8 @@
     velocityContext.put("coverLetter", getCoverLetter());
     velocityContext.put("branch", change.getDest());
     velocityContext.put("fromName", getNameFor(fromId));
-    velocityContext.put("projectName", projectName);
+    velocityContext.put("projectName", //
+        projectState != null ? projectState.getProject().getName() : null);
     velocityContext.put("patchSet", patchSet);
     velocityContext.put("patchSetInfo", patchSetInfo);
   }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/CommentSender.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/CommentSender.java
index 0425121..062d14b 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/CommentSender.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/CommentSender.java
@@ -136,7 +136,7 @@
 
   private Repository getRepository() {
     try {
-      return args.server.openRepository(projectName);
+      return args.server.openRepository(projectState.getProject().getNameKey());
     } catch (RepositoryNotFoundException e) {
       return null;
     }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchListLoader.java b/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchListLoader.java
index d75aec6..44e2e89 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchListLoader.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchListLoader.java
@@ -58,7 +58,7 @@
 
   @Override
   public PatchList createEntry(final PatchListKey key) throws Exception {
-    final Repository repo = repoManager.openRepository(key.projectKey.get());
+    final Repository repo = repoManager.openRepository(key.projectKey);
     try {
       return readPatchList(key, repo);
     } finally {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchSetInfoFactory.java b/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchSetInfoFactory.java
index 840e76f..1c2c97d 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchSetInfoFactory.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchSetInfoFactory.java
@@ -76,8 +76,7 @@
       final PatchSet patchSet = db.patchSets().get(patchSetId);
       final Change change = db.changes().get(patchSet.getId().getParentKey());
       final Project.NameKey projectKey = change.getProject();
-      final String projectName = projectKey.get();
-      repo = repoManager.openRepository(projectName);
+      repo = repoManager.openRepository(projectKey);
       final RevWalk rw = new RevWalk(repo);
       try {
         final RevCommit src =
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/MessagePredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/MessagePredicate.java
index 0490127..20b777d 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/MessagePredicate.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/MessagePredicate.java
@@ -92,7 +92,7 @@
     }
 
     try {
-      final Repository repo = repoManager.openRepository(projectName.get());
+      final Repository repo = repoManager.openRepository(projectName);
       try {
         final RevWalk rw = new RevWalk(repo);
         try {
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/AbstractGitCommand.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/AbstractGitCommand.java
index eca28d8..a72b50e 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/AbstractGitCommand.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/AbstractGitCommand.java
@@ -93,11 +93,10 @@
   private void service() throws IOException, Failure {
     project = projectControl.getProjectState().getProject();
 
-    final String name = project.getName();
     try {
-      repo = repoManager.openRepository(name);
+      repo = repoManager.openRepository(project.getNameKey());
     } catch (RepositoryNotFoundException e) {
-      throw new Failure(1, "fatal: '" + name + "': not a git archive", e);
+      throw new Failure(1, "fatal: '" + project.getName() + "': not a git archive", e);
     }
 
     try {
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/CreateProject.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/CreateProject.java
index 5269e43..e353ba6 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/CreateProject.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/CreateProject.java
@@ -119,6 +119,8 @@
   @GerritPersonIdent
   private PersonIdent serverIdent;
 
+  private Project.NameKey nameKey;
+
   @Override
   public void start(final Environment env) {
     startThread(new CommandRunnable() {
@@ -130,9 +132,10 @@
 
         try {
           validateParameters();
+          nameKey = new Project.NameKey(projectName);
 
           if (!permissionsOnly) {
-            final Repository repo = repoManager.createRepository(projectName);
+            final Repository repo = repoManager.createRepository(nameKey);
             try {
               repo.create(true);
 
@@ -140,14 +143,12 @@
               u.disableRefLog();
               u.link(branch);
 
-              repoManager
-                  .setProjectDescription(projectName, projectDescription);
+              repoManager.setProjectDescription(nameKey, projectDescription);
 
-              final Project.NameKey project = new Project.NameKey(projectName);
-              rq.replicateNewProject(project, branch);
+              rq.replicateNewProject(nameKey, branch);
 
               if (createEmptyCommit) {
-                createEmptyCommit(repo, project, branch);
+                createEmptyCommit(repo, nameKey, branch);
               }
             } finally {
               repo.close();
@@ -198,12 +199,10 @@
   }
 
   private void createProject() throws OrmException {
-    final Project.NameKey newProjectNameKey = new Project.NameKey(projectName);
-
     List<RefRight> access = new ArrayList<RefRight>();
     for (AccountGroup.Id ownerId : ownerIds) {
       final RefRight.Key prk =
-          new RefRight.Key(newProjectNameKey, new RefRight.RefPattern(
+          new RefRight.Key(nameKey, new RefRight.RefPattern(
               RefRight.ALL), ApprovalCategory.OWN, ownerId);
       final RefRight pr = new RefRight(prk);
       pr.setMaxValue((short) 1);
@@ -212,7 +211,7 @@
     }
     db.refRights().insert(access);
 
-    final Project newProject = new Project(newProjectNameKey);
+    final Project newProject = new Project(nameKey);
     newProject.setDescription(projectDescription);
     newProject.setSubmitType(submitType);
     newProject.setUseContributorAgreements(contributorAgreements);
@@ -227,9 +226,9 @@
   }
 
   private void validateParameters() throws Failure {
-    if (projectName.endsWith(".git")) {
-      projectName =
-          projectName.substring(0, projectName.length() - ".git".length());
+    if (projectName.endsWith(Constants.DOT_GIT_EXT)) {
+      projectName = projectName.substring(0, //
+          projectName.length() - Constants.DOT_GIT_EXT.length());
     }
 
     if (!CollectionsUtil.isAnyIncludedIn(currentUser.getEffectiveGroups(), projectCreatorGroups)) {
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ListProjects.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ListProjects.java
index 7618432..bb04f7a 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ListProjects.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ListProjects.java
@@ -170,7 +170,7 @@
 
   private Ref getBranchRef(Project.NameKey projectName) {
     try {
-      final Repository r = repoManager.openRepository(projectName.get());
+      final Repository r = repoManager.openRepository(projectName);
       try {
         return r.getRef(showBranch);
       } finally {
