diff --git a/java/com/google/gitiles/CommitData.java b/java/com/google/gitiles/CommitData.java
index 576de87..ef2ff95 100644
--- a/java/com/google/gitiles/CommitData.java
+++ b/java/com/google/gitiles/CommitData.java
@@ -81,23 +81,19 @@
   }
 
   static class Builder {
-    private RevWalk walk;
     private ArchiveFormat archiveFormat;
     private Map<AnyObjectId, Set<Ref>> refsById;
 
-    Builder setRevWalk(@Nullable RevWalk walk) {
-      this.walk = walk;
-      return this;
-    }
-
     Builder setArchiveFormat(@Nullable ArchiveFormat archiveFormat) {
       this.archiveFormat = archiveFormat;
       return this;
     }
 
-    CommitData build(HttpServletRequest req, RevCommit c, Set<Field> fs) throws IOException {
+    CommitData build(HttpServletRequest req, RevWalk walk, RevCommit c, Set<Field> fs)
+        throws IOException {
       checkFields(fs);
       checkNotNull(req, "request");
+      checkNotNull(walk, "walk");
       Repository repo = ServletUtils.getRepository(req);
       GitilesView view = ViewFilter.getView(req);
 
@@ -165,14 +161,13 @@
         result.shortMessage = msg;
       }
       if (fs.contains(Field.DIFF_TREE)) {
-        result.diffEntries = computeDiffEntries(repo, view, c);
+        result.diffEntries = computeDiffEntries(repo, view, walk, c);
       }
 
       return result;
     }
 
     private void checkFields(Set<Field> fs) {
-      checkState(!fs.contains(Field.DIFF_TREE) || walk != null, "RevWalk required for diffTree");
       if (fs.contains(Field.ARCHIVE_URL) || fs.contains(Field.ARCHIVE_TYPE)) {
         checkState(archiveFormat != null, "archive format required");
       }
@@ -203,14 +198,15 @@
           .collect(toList());
     }
 
-    private AbstractTreeIterator getTreeIterator(RevCommit commit) throws IOException {
+    private AbstractTreeIterator getTreeIterator(RevWalk walk, RevCommit commit)
+        throws IOException {
       CanonicalTreeParser p = new CanonicalTreeParser();
       p.reset(walk.getObjectReader(), walk.parseTree(walk.parseCommit(commit).getTree()));
       return p;
     }
 
-    private DiffList computeDiffEntries(Repository repo, GitilesView view, RevCommit commit)
-        throws IOException {
+    private DiffList computeDiffEntries(
+        Repository repo, GitilesView view, RevWalk walk, RevCommit commit) throws IOException {
       DiffList result = new DiffList();
       result.revision =
           view.getRevision().matches(commit)
@@ -226,13 +222,13 @@
         case 1:
           result.oldRevision =
               Revision.peeled(result.revision.getName() + "^", commit.getParent(0));
-          oldTree = getTreeIterator(commit.getParent(0));
+          oldTree = getTreeIterator(walk, commit.getParent(0));
           break;
         default:
           // TODO(dborowitz): handle merges
           return result;
       }
-      AbstractTreeIterator newTree = getTreeIterator(commit);
+      AbstractTreeIterator newTree = getTreeIterator(walk, commit);
 
       try (DiffFormatter diff = new DiffFormatter(NullOutputStream.INSTANCE)) {
         diff.setRepository(repo);
diff --git a/java/com/google/gitiles/CommitJsonData.java b/java/com/google/gitiles/CommitJsonData.java
index 96f7f2f..953c19c 100644
--- a/java/com/google/gitiles/CommitJsonData.java
+++ b/java/com/google/gitiles/CommitJsonData.java
@@ -23,7 +23,6 @@
 import java.io.IOException;
 import java.util.List;
 import java.util.Set;
-import javax.annotation.Nullable;
 import javax.servlet.http.HttpServletRequest;
 import org.eclipse.jgit.diff.DiffEntry;
 import org.eclipse.jgit.lib.PersonIdent;
@@ -70,20 +69,15 @@
     Integer score;
   }
 
-  private RevWalk walk;
-
-  CommitJsonData setRevWalk(@Nullable RevWalk walk) {
-    this.walk = walk;
-    return this;
-  }
-
-  Commit toJsonData(HttpServletRequest req, RevCommit c, DateFormatter df) throws IOException {
-    return toJsonData(req, c, DEFAULT_FIELDS, df);
-  }
-
-  Commit toJsonData(HttpServletRequest req, RevCommit c, Set<Field> fs, DateFormatter df)
+  Commit toJsonData(HttpServletRequest req, RevWalk walk, RevCommit c, DateFormatter df)
       throws IOException {
-    CommitData cd = new CommitData.Builder().setRevWalk(walk).build(req, c, fs);
+    return toJsonData(req, walk, c, DEFAULT_FIELDS, df);
+  }
+
+  Commit toJsonData(
+      HttpServletRequest req, RevWalk walk, RevCommit c, Set<Field> fs, DateFormatter df)
+      throws IOException {
+    CommitData cd = new CommitData.Builder().build(req, walk, c, fs);
 
     Commit result = new Commit();
     if (cd.sha != null) {
diff --git a/java/com/google/gitiles/CommitSoyData.java b/java/com/google/gitiles/CommitSoyData.java
index 40c5f74..c4087a6 100644
--- a/java/com/google/gitiles/CommitSoyData.java
+++ b/java/com/google/gitiles/CommitSoyData.java
@@ -61,7 +61,6 @@
       Sets.immutableEnumSet(Field.PARENT_BLAME_URL);
 
   private Linkifier linkifier;
-  private RevWalk walk;
   private CommitData.Builder cdb;
   private ArchiveFormat archiveFormat;
 
@@ -70,24 +69,20 @@
     return this;
   }
 
-  CommitSoyData setRevWalk(@Nullable RevWalk walk) {
-    this.walk = walk;
-    return this;
-  }
-
   CommitSoyData setArchiveFormat(@Nullable ArchiveFormat archiveFormat) {
     this.archiveFormat = archiveFormat;
     return this;
   }
 
   Map<String, Object> toSoyData(
-      HttpServletRequest req, RevCommit c, Set<Field> fs, DateFormatter df) throws IOException {
+      HttpServletRequest req, RevWalk walk, RevCommit c, Set<Field> fs, DateFormatter df)
+      throws IOException {
     GitilesView view = ViewFilter.getView(req);
     if (cdb == null) {
       cdb = new CommitData.Builder();
     }
 
-    CommitData cd = cdb.setRevWalk(walk).setArchiveFormat(archiveFormat).build(req, c, fs);
+    CommitData cd = cdb.setArchiveFormat(archiveFormat).build(req, walk, c, fs);
 
     Map<String, Object> data = Maps.newHashMapWithExpectedSize(fs.size());
     if (cd.author != null) {
@@ -150,9 +145,9 @@
     return data;
   }
 
-  Map<String, Object> toSoyData(HttpServletRequest req, RevCommit commit, DateFormatter df)
-      throws IOException {
-    return toSoyData(req, commit, DEFAULT_FIELDS, df);
+  Map<String, Object> toSoyData(
+      HttpServletRequest req, RevWalk walk, RevCommit commit, DateFormatter df) throws IOException {
+    return toSoyData(req, walk, commit, DEFAULT_FIELDS, df);
   }
 
   // TODO(dborowitz): Extract this.
diff --git a/java/com/google/gitiles/DiffServlet.java b/java/com/google/gitiles/DiffServlet.java
index 657edf8..d0e4409 100644
--- a/java/com/google/gitiles/DiffServlet.java
+++ b/java/com/google/gitiles/DiffServlet.java
@@ -96,7 +96,7 @@
             new CommitSoyData()
                 .setLinkifier(linkifier)
                 .setArchiveFormat(getArchiveFormat(access))
-                .toSoyData(req, walk.parseCommit(view.getRevision().getId()), fs, df));
+                .toSoyData(req, walk, walk.parseCommit(view.getRevision().getId()), fs, df));
       }
       if (!data.containsKey("repositoryName") && (view.getRepositoryName() != null)) {
         data.put("repositoryName", view.getRepositoryName());
diff --git a/java/com/google/gitiles/LogServlet.java b/java/com/google/gitiles/LogServlet.java
index 5d06ae5..0dd00f3 100644
--- a/java/com/google/gitiles/LogServlet.java
+++ b/java/com/google/gitiles/LogServlet.java
@@ -168,8 +168,7 @@
       List<CommitJsonData.Commit> entries = Lists.newArrayListWithCapacity(paginator.getLimit());
       for (RevCommit c : paginator) {
         paginator.getWalk().parseBody(c);
-        entries.add(
-            new CommitJsonData().setRevWalk(paginator.getWalk()).toJsonData(req, c, fs, df));
+        entries.add(new CommitJsonData().toJsonData(req, paginator.getWalk(), c, fs, df));
       }
       result.log = entries;
       if (paginator.getPreviousStart() != null) {
diff --git a/java/com/google/gitiles/LogSoyData.java b/java/com/google/gitiles/LogSoyData.java
index 6a27782..8bc243f 100644
--- a/java/com/google/gitiles/LogSoyData.java
+++ b/java/com/google/gitiles/LogSoyData.java
@@ -124,7 +124,7 @@
       csd = new CommitSoyData();
     }
 
-    Map<String, Object> entry = csd.setRevWalk(paginator.getWalk()).toSoyData(req, c, fields, df);
+    Map<String, Object> entry = csd.toSoyData(req, paginator.getWalk(), c, fields, df);
     DiffEntry rename = paginator.getRename(c);
     if (rename != null) {
       entry.put("rename", toRenameSoyData(rename));
diff --git a/java/com/google/gitiles/RevisionServlet.java b/java/com/google/gitiles/RevisionServlet.java
index a126c7e..17ad143 100644
--- a/java/com/google/gitiles/RevisionServlet.java
+++ b/java/com/google/gitiles/RevisionServlet.java
@@ -96,9 +96,8 @@
                       "data",
                       new CommitSoyData()
                           .setLinkifier(linkifier)
-                          .setRevWalk(walk)
                           .setArchiveFormat(getArchiveFormat(access))
-                          .toSoyData(req, (RevCommit) obj, COMMIT_SOY_FIELDS, df)));
+                          .toSoyData(req, walk, (RevCommit) obj, COMMIT_SOY_FIELDS, df)));
               break;
             case OBJ_TREE:
               Map<String, Object> tree =
@@ -184,9 +183,7 @@
           renderJson(
               req,
               res,
-              new CommitJsonData()
-                  .setRevWalk(walk)
-                  .toJsonData(req, (RevCommit) obj, COMMIT_JSON_FIELDS, df),
+              new CommitJsonData().toJsonData(req, walk, (RevCommit) obj, COMMIT_JSON_FIELDS, df),
               Commit.class);
           break;
         default:
