diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocCache.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocCache.java
index f84efd7..8c03eb9 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocCache.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocCache.java
@@ -17,47 +17,33 @@
 import com.google.common.cache.LoadingCache;
 import com.google.gerrit.httpd.resources.Resource;
 import com.google.gerrit.reviewdb.client.Project;
-import com.google.gerrit.reviewdb.client.RefNames;
-import com.google.gerrit.server.git.GitRepositoryManager;
+import com.google.gerrit.server.project.ProjectCache;
+import com.google.gerrit.server.project.ProjectState;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 import com.google.inject.name.Named;
 
-import com.googlesource.gerrit.plugins.xdocs.XDocLoader;
 import com.googlesource.gerrit.plugins.xdocs.formatter.Formatters.FormatterProvider;
 
 import org.eclipse.jgit.lib.ObjectId;
-import org.eclipse.jgit.lib.Repository;
-
-import java.io.IOException;
 
 @Singleton
 public class XDocCache {
   private final LoadingCache<String, Resource> cache;
-  private final GitRepositoryManager repoManager;
+  private final ProjectCache projectCache;
 
   @Inject
   XDocCache(
       @Named(XDocLoader.Module.X_DOC_RESOURCES) LoadingCache<String, Resource> cache,
-      GitRepositoryManager repoManager) {
+      ProjectCache projectCache) {
     this.cache = cache;
-    this.repoManager = repoManager;
+    this.projectCache = projectCache;
   }
 
   public Resource get(FormatterProvider formatter, Project.NameKey project,
       String file, ObjectId revId) {
-    ObjectId metaConfigRevId;
-    try {
-      Repository repo = repoManager.openRepository(project);
-      try {
-        metaConfigRevId = repo.resolve(RefNames.REFS_CONFIG);
-      } finally {
-        repo.close();
-      }
-    } catch (IOException e) {
-      return null;
-    }
-
+    ProjectState p = projectCache.get(project);
+    ObjectId metaConfigRevId = p != null ? p.getConfig().getRevision() : null;
     return cache.getUnchecked((new XDocResourceKey(formatter.getName(),
         project, file, revId, metaConfigRevId)).asString());
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocLoader.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocLoader.java
index e6dd9f7..cf0971c 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocLoader.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocLoader.java
@@ -108,18 +108,20 @@
           ObjectId objectId = tw.getObjectId(0);
           ObjectLoader loader = repo.open(objectId);
           byte[] bytes = loader.getBytes(Integer.MAX_VALUE);
-          if (formatter.getName().equals(Formatters.RAW_FORMATTER)
-              && RawText.isBinary(bytes)) {
+          boolean isBinary = RawText.isBinary(bytes);
+          if (formatter.getName().equals(Formatters.RAW_FORMATTER) && isBinary) {
             return Resources.METHOD_NOT_ALLOWED;
           }
           ObjectReader reader = repo.newObjectReader();
           try {
             String abbrRevId = reader.abbreviate(revId).name();
+            String raw = new String(bytes, UTF_8);
+            if (!isBinary) {
+              raw = replaceMacros(repo, key.getProject(), revId, abbrRevId, raw);
+            }
             String html =
                 formatter.get().format(key.getProject().get(),
-                    abbrRevId, formatterCfg,
-                    replaceMacros(repo, key.getProject(), revId,
-                        abbrRevId, bytes));
+                    abbrRevId, formatterCfg, raw);
             return getAsHtmlResource(html, commit.getCommitTime());
           } finally {
             reader.release();
@@ -136,7 +138,7 @@
   }
 
   private String replaceMacros(Repository repo, Project.NameKey project,
-      ObjectId revId, String abbrRevId, byte[] raw) throws GitAPIException,
+      ObjectId revId, String abbrRevId, String raw) throws GitAPIException,
       IOException {
     Map<String, String> macros = Maps.newHashMap();
 
@@ -153,8 +155,7 @@
         (new Git(repo)).describe().setTarget(revId).call(), abbrRevId));
 
 
-    Matcher m = Pattern.compile("(\\\\)?@([A-Z_]+)@")
-        .matcher(new String(raw, UTF_8));
+    Matcher m = Pattern.compile("(\\\\)?@([A-Z_]+)@").matcher(raw);
     StringBuffer sb = new StringBuffer();
     while (m.find()) {
       String key = m.group(2);
