diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/CommitSoyData.java b/gitiles-servlet/src/main/java/com/google/gitiles/CommitSoyData.java
index dee229b..73be524 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/CommitSoyData.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/CommitSoyData.java
@@ -134,14 +134,14 @@
           .copyFrom(view)
           .setRevision(rev.getId().equals(commit) ? rev.getName() : commit.name(), commit)
           .setOldRevision(Revision.NULL)
-          .setTreePath(null);
+          .setPathPart(null);
       data.put("logUrl", logView.toUrl());
     }
     if (keys.keys.contains("tree")) {
       data.put("tree", ObjectId.toString(commit.getTree()));
     }
     if (keys.keys.contains("treeUrl")) {
-      data.put("treeUrl", GitilesView.path().copyFrom(view).setTreePath("/").toUrl());
+      data.put("treeUrl", GitilesView.path().copyFrom(view).setPathPart("/").toUrl());
     }
     if (keys.keys.contains("parents")) {
       data.put("parents", toSoyData(view, commit.getParents()));
@@ -191,7 +191,7 @@
     // viewing a diff against one of the parents.
     for (RevCommit parent : parents) {
       String name = parent.name();
-      GitilesView.Builder diff = GitilesView.diff().copyFrom(view).setTreePath("");
+      GitilesView.Builder diff = GitilesView.diff().copyFrom(view).setPathPart("");
       String parentName;
       if (parents.length == 1) {
         parentName = view.getRevision().getName() + "^";
@@ -218,7 +218,7 @@
   private Object computeDiffTree(RevCommit commit) throws IOException {
     AbstractTreeIterator oldTree;
     GitilesView.Builder diffUrl = GitilesView.diff().copyFrom(view)
-        .setTreePath("");
+        .setPathPart("");
     Revision oldRevision;
     switch (commit.getParentCount()) {
       case 0:
@@ -249,14 +249,14 @@
           entry.put("path", e.getNewPath());
           entry.put("url", GitilesView.path()
               .copyFrom(view)
-              .setTreePath(e.getNewPath())
+              .setPathPart(e.getNewPath())
               .toUrl());
         } else {
           entry.put("path", e.getOldPath());
           entry.put("url", GitilesView.path()
               .copyFrom(view)
               .setRevision(oldRevision)
-              .setTreePath(e.getOldPath())
+              .setPathPart(e.getOldPath())
               .toUrl());
         }
         entry.put("diffUrl", diffUrl.setAnchor("F" + result.size()).toUrl());
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java
index ba661e8..a8fdeec 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java
@@ -98,7 +98,7 @@
       OutputStream out = res.getOutputStream();
       try {
         out.write(html[0].getBytes(Charsets.UTF_8));
-        formatHtmlDiff(out, repo, walk, oldTree, newTree, view.getTreePath());
+        formatHtmlDiff(out, repo, walk, oldTree, newTree, view.getPathPart());
         out.write(html[1].getBytes(Charsets.UTF_8));
       } finally {
         out.close();
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java
index ca6315e..16f5a54 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java
@@ -198,7 +198,7 @@
       return revision;
     }
 
-    public Builder setTreePath(String path) {
+    public Builder setPathPart(String path) {
       switch (type) {
         case PATH:
         case DIFF:
@@ -213,7 +213,7 @@
       }
     }
 
-    public String getTreePath() {
+    public String getPathPart() {
       return path;
     }
 
@@ -425,7 +425,7 @@
     }
   }
 
-  public String getTreePath() {
+  public String getPathPart() {
     return path;
   }
 
@@ -535,15 +535,15 @@
     if (type == Type.DIFF) {
       // TODO(dborowitz): Tweak the breadcrumbs template to allow us to render
       // separate links in "old..new".
-      breadcrumbs.add(breadcrumb(getRevisionRange(), diff().copyFrom(this).setTreePath("")));
+      breadcrumbs.add(breadcrumb(getRevisionRange(), diff().copyFrom(this).setPathPart("")));
     } else if (type == Type.LOG) {
       if (revision != Revision.NULL) {
         // TODO(dborowitz): Add something in the navigation area (probably not
         // a breadcrumb) to allow switching between /+log/ and /+/.
         if (oldRevision == Revision.NULL) {
-          breadcrumbs.add(breadcrumb(revision.getName(), log().copyFrom(this).setTreePath(null)));
+          breadcrumbs.add(breadcrumb(revision.getName(), log().copyFrom(this).setPathPart(null)));
         } else {
-          breadcrumbs.add(breadcrumb(getRevisionRange(), log().copyFrom(this).setTreePath(null)));
+          breadcrumbs.add(breadcrumb(getRevisionRange(), log().copyFrom(this).setPathPart(null)));
         }
       } else {
         breadcrumbs.add(breadcrumb(Constants.HEAD, log().copyFrom(this)));
@@ -555,7 +555,7 @@
     if (path != null) {
       if (type != Type.LOG && type != Type.REFS) {
         // The "." breadcrumb would be no different for LOG or REFS.
-        breadcrumbs.add(breadcrumb(".", copyWithPath().setTreePath("")));
+        breadcrumbs.add(breadcrumb(".", copyWithPath().setPathPart("")));
       }
       StringBuilder cur = new StringBuilder();
       List<String> parts = ImmutableList.copyOf(Paths.SPLITTER.omitEmptyStrings().split(path));
@@ -567,7 +567,7 @@
         String part = parts.get(i);
         cur.append(part).append('/');
         String curPath = cur.toString();
-        Builder builder = copyWithPath().setTreePath(curPath);
+        Builder builder = copyWithPath().setPathPart(curPath);
         if (hasSingleTree != null && i < parts.size() - 1 && hasSingleTree.get(i)) {
           builder.replaceParam(PathServlet.AUTODIVE_PARAM, PathServlet.NO_AUTODIVE_VALUE);
         }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/GitwebRedirectFilter.java b/gitiles-servlet/src/main/java/com/google/gitiles/GitwebRedirectFilter.java
index 8942438..470e3b6 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/GitwebRedirectFilter.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitwebRedirectFilter.java
@@ -102,27 +102,27 @@
     } else if ("tree".equals(action)) {
       view = GitilesView.path()
           .setRevision(Objects.firstNonNull(hashBase, Revision.HEAD))
-          .setTreePath(path);
+          .setPathPart(path);
     } else if (("blob".equals(action) || "blob_plain".equals(action))
         && hashBase != null && !path.isEmpty()) {
       view = GitilesView.path()
           .setRevision(hashBase)
-          .setTreePath(path);
+          .setPathPart(path);
     } else if ("commitdiff".equals(action) && hash != null) {
       view = GitilesView.diff()
           .setOldRevision(Objects.firstNonNull(hashParent, Revision.NULL))
           .setRevision(hash)
-          .setTreePath("");
+          .setPathPart("");
     } else if ("blobdiff".equals(action) && !path.isEmpty()
         && hashParentBase != null && hashBase != null) {
       view = GitilesView.diff()
           .setOldRevision(hashParentBase)
           .setRevision(hashBase)
-          .setTreePath(path);
+          .setPathPart(path);
     } else if ("history".equals(action) && !path.isEmpty()) {
       view = GitilesView.log()
           .setRevision(Objects.firstNonNull(hashBase, Revision.HEAD))
-          .setTreePath(path);
+          .setPathPart(path);
     } else {
       // Gitiles does not provide an RSS feed (a=rss,atom,opml)
       // Any other URL is out of date and not valid anymore.
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java
index f3dcc43..4915ba2 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java
@@ -180,8 +180,8 @@
     if (view.getOldRevision() != Revision.NULL) {
       walk.markUninteresting(walk.parseCommit(view.getOldRevision().getId()));
     }
-    if (!Strings.isNullOrEmpty(view.getTreePath())) {
-      walk.setTreeFilter(FollowFilter.create(view.getTreePath()));
+    if (!Strings.isNullOrEmpty(view.getPathPart())) {
+      walk.setTreeFilter(FollowFilter.create(view.getPathPart()));
     }
     return walk;
   }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java
index e52cdf6..9debef2 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java
@@ -139,7 +139,7 @@
       tw.addTree(root);
       tw.setRecursive(false);
       FileType type;
-      String path = view.getTreePath();
+      String path = view.getPathPart();
       List<Boolean> hasSingleTree;
 
       if (path.isEmpty()) {
@@ -270,7 +270,7 @@
     GitilesView view = ViewFilter.getView(req);
     List<String> autodive = view.getParameters().get(AUTODIVE_PARAM);
     if (autodive.size() != 1 || !NO_AUTODIVE_VALUE.equals(autodive.get(0))) {
-      byte[] path = Constants.encode(view.getTreePath());
+      byte[] path = Constants.encode(view.getPathPart());
       CanonicalTreeParser child = getOnlyChildSubtree(rw, id, path);
       if (child != null) {
         while (true) {
@@ -283,7 +283,7 @@
           child = next;
         }
         res.sendRedirect(GitilesView.path().copyFrom(view)
-            .setTreePath(
+            .setPathPart(
                 RawParseUtils.decode(child.getEntryPathBuffer(), 0, child.getEntryPathLength()))
             .toUrl());
         return;
@@ -291,7 +291,7 @@
     }
     // TODO(sop): Allow caching trees by SHA-1 when no S cookie is sent.
     renderHtml(req, res, "gitiles.pathDetail", ImmutableMap.of(
-        "title", !view.getTreePath().isEmpty() ? view.getTreePath() : "/",
+        "title", !view.getPathPart().isEmpty() ? view.getPathPart() : "/",
         "breadcrumbs", view.getBreadcrumbs(hasSingleTree),
         "type", FileType.TREE.toString(),
         "data", new TreeSoyData(rw, view).toSoyData(id, tw)));
@@ -312,7 +312,7 @@
     GitilesView view = ViewFilter.getView(req);
     // TODO(sop): Allow caching files by SHA-1 when no S cookie is sent.
     renderHtml(req, res, "gitiles.pathDetail", ImmutableMap.of(
-        "title", ViewFilter.getView(req).getTreePath(),
+        "title", ViewFilter.getView(req).getPathPart(),
         "breadcrumbs", view.getBreadcrumbs(hasSingleTree),
         "type", FileType.forEntry(tw).toString(),
         "data", new BlobSoyData(rw, view).toSoyData(tw.getPathString(), tw.getObjectId(0))));
@@ -335,7 +335,7 @@
       data.put("data", null);
       data.put("size", Long.toString(loader.getSize()));
       renderHtml(req, res, "gitiles.pathDetail", ImmutableMap.of(
-          "title", ViewFilter.getView(req).getTreePath(),
+          "title", ViewFilter.getView(req).getPathPart(),
           "breadcrumbs", view.getBreadcrumbs(hasSingleTree),
           "type", FileType.REGULAR_FILE.toString(),
           "data", data));
@@ -345,10 +345,10 @@
     String url = resolveTargetUrl(
         GitilesView.path()
             .copyFrom(view)
-            .setTreePath(dirname(view.getTreePath()))
+            .setPathPart(dirname(view.getPathPart()))
             .build(),
         target);
-    data.put("title", view.getTreePath());
+    data.put("title", view.getPathPart());
     data.put("target", target);
     if (url != null) {
       data.put("targetUrl", url);
@@ -356,7 +356,7 @@
 
     // TODO(sop): Allow caching files by SHA-1 when no S cookie is sent.
     renderHtml(req, res, "gitiles.pathDetail", ImmutableMap.of(
-        "title", ViewFilter.getView(req).getTreePath(),
+        "title", ViewFilter.getView(req).getPathPart(),
         "breadcrumbs", view.getBreadcrumbs(hasSingleTree),
         "type", FileType.SYMLINK.toString(),
         "data", data));
@@ -380,7 +380,7 @@
       TreeWalk tw, RevTree root, List<Boolean> hasSingleTree) throws IOException {
     GitilesView view = ViewFilter.getView(req);
     SubmoduleWalk sw = SubmoduleWalk.forPath(ServletUtils.getRepository(req), root,
-        view.getTreePath());
+        view.getPathPart());
 
     String modulesUrl;
     String remoteUrl = null;
@@ -412,7 +412,7 @@
 
     // TODO(sop): Allow caching links by SHA-1 when no S cookie is sent.
     renderHtml(req, res, "gitiles.pathDetail", ImmutableMap.of(
-        "title", view.getTreePath(),
+        "title", view.getPathPart(),
         "type", FileType.GITLINK.toString(),
         "data", data));
   }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java
index fd5e793..ba52d37 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java
@@ -57,7 +57,7 @@
   @Override
   protected void doGetHtml(HttpServletRequest req, HttpServletResponse res)
       throws IOException {
-    if (!ViewFilter.getView(req).getTreePath().isEmpty()) {
+    if (!ViewFilter.getView(req).getPathPart().isEmpty()) {
       res.setStatus(SC_NOT_FOUND);
       return;
     }
@@ -77,7 +77,7 @@
       throws IOException {
     GitilesView view = ViewFilter.getView(req);
     Map<String, Ref> refs = getRefs(ServletUtils.getRepository(req).getRefDatabase(),
-        view.getTreePath());
+        view.getPathPart());
     TextRefAdvertiser adv = new TextRefAdvertiser(startRenderText(req, res));
     adv.setDerefTags(true);
     adv.send(refs);
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/TreeSoyData.java b/gitiles-servlet/src/main/java/com/google/gitiles/TreeSoyData.java
index 4893208..6c7ec06 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/TreeSoyData.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/TreeSoyData.java
@@ -47,13 +47,13 @@
   static final int MAX_SYMLINK_SIZE = 16 << 10;
 
   static String resolveTargetUrl(GitilesView view, String target) {
-    String resolved = Paths.simplifyPathUpToRoot(target, view.getTreePath());
+    String resolved = Paths.simplifyPathUpToRoot(target, view.getPathPart());
     if (resolved == null) {
       return null;
     }
     return GitilesView.path()
         .copyFrom(view)
-        .setTreePath(resolved)
+        .setPathPart(resolved)
         .toUrl();
   }
 
@@ -86,11 +86,11 @@
 
       switch (view.getType()) {
         case PATH:
-          urlBuilder.setTreePath(view.getTreePath() + "/" + name);
+          urlBuilder.setPathPart(view.getPathPart() + "/" + name);
           break;
         case REVISION:
           // Got here from a tag pointing at a tree.
-          urlBuilder.setTreePath(name);
+          urlBuilder.setPathPart(name);
           break;
         default:
           throw new IllegalStateException(String.format(
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/ViewFilter.java b/gitiles-servlet/src/main/java/com/google/gitiles/ViewFilter.java
index c24b4f0..6dd167c 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/ViewFilter.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/ViewFilter.java
@@ -103,7 +103,7 @@
     if (repoName.isEmpty()) {
       return GitilesView.hostIndex();
     } else if (command.equals(CMD_REFS)) {
-      return GitilesView.refs().setRepositoryName(repoName).setTreePath(path);
+      return GitilesView.refs().setRepositoryName(repoName).setPathPart(path);
     } else if (command.equals(CMD_LOG) && (path.isEmpty() || path.equals("/"))) {
       return GitilesView.log().setRepositoryName(repoName);
     } else if (command.isEmpty()) {
@@ -124,15 +124,15 @@
     command = getCommand(command, result, path);
     GitilesView.Builder view;
     if (CMD_LOG.equals(command)) {
-      view = GitilesView.log().setTreePath(path);
+      view = GitilesView.log().setPathPart(path);
     } else if (CMD_SHOW.equals(command)) {
       if (path.isEmpty()) {
         view = GitilesView.revision();
       } else {
-        view = GitilesView.path().setTreePath(path);
+        view = GitilesView.path().setPathPart(path);
       }
     } else if (CMD_DIFF.equals(command)) {
-      view = GitilesView.diff().setTreePath(path);
+      view = GitilesView.diff().setPathPart(path);
     } else if (CMD_REFS.equals(command)) {
       view = GitilesView.repositoryIndex();
     } else {
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/GitilesViewTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/GitilesViewTest.java
index e3794de..49d8405 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/GitilesViewTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/GitilesViewTest.java
@@ -40,7 +40,7 @@
     assertEquals("host", view.getHostName());
     assertNull(view.getRepositoryName());
     assertEquals(Revision.NULL, view.getRevision());
-    assertNull(view.getTreePath());
+    assertNull(view.getPathPart());
     assertTrue(HOST.getParameters().isEmpty());
 
     assertEquals("/?format=HTML", view.toUrl());
@@ -54,7 +54,7 @@
     assertEquals("host", HOST.getHostName());
     assertNull(HOST.getRepositoryName());
     assertEquals(Revision.NULL, HOST.getRevision());
-    assertNull(HOST.getTreePath());
+    assertNull(HOST.getPathPart());
     assertTrue(HOST.getParameters().isEmpty());
 
     assertEquals("/b/?format=HTML", HOST.toUrl());
@@ -73,7 +73,7 @@
     assertEquals("host", view.getHostName());
     assertNull(view.getRepositoryName());
     assertEquals(Revision.NULL, view.getRevision());
-    assertNull(view.getTreePath());
+    assertNull(view.getPathPart());
     assertEquals(
         ImmutableListMultimap.of(
             "foo", "foovalue",
@@ -106,7 +106,7 @@
     assertEquals("host", view.getHostName());
     assertEquals("foo/bar", view.getRepositoryName());
     assertEquals(Revision.NULL, view.getRevision());
-    assertNull(view.getTreePath());
+    assertNull(view.getPathPart());
     assertTrue(HOST.getParameters().isEmpty());
 
     assertEquals("/b/foo/bar/", view.toUrl());
@@ -128,7 +128,7 @@
     assertEquals("host", view.getHostName());
     assertEquals("foo/bar", view.getRepositoryName());
     assertEquals(Revision.NULL, view.getRevision());
-    assertNull(view.getTreePath());
+    assertNull(view.getPathPart());
     assertTrue(HOST.getParameters().isEmpty());
 
     assertEquals("/b/foo/bar/+refs", view.toUrl());
@@ -153,7 +153,7 @@
     assertEquals("foo/bar", view.getRepositoryName());
     assertEquals(id, view.getRevision().getId());
     assertEquals("master", view.getRevision().getName());
-    assertNull(view.getTreePath());
+    assertNull(view.getPathPart());
     assertTrue(HOST.getParameters().isEmpty());
 
     assertEquals("/b/foo/bar/+/master", view.toUrl());
@@ -171,7 +171,7 @@
         .copyFrom(HOST)
         .setRepositoryName("foo/bar")
         .setRevision(Revision.unpeeled("master", id))
-        .setTreePath("/")
+        .setPathPart("/")
         .build();
 
     assertEquals("/b", view.getServletPath());
@@ -180,7 +180,7 @@
     assertEquals("foo/bar", view.getRepositoryName());
     assertEquals(id, view.getRevision().getId());
     assertEquals("master", view.getRevision().getName());
-    assertEquals("", view.getTreePath());
+    assertEquals("", view.getPathPart());
     assertTrue(HOST.getParameters().isEmpty());
 
     assertEquals("/b/foo/bar/+/master/", view.toUrl());
@@ -199,7 +199,7 @@
         .copyFrom(HOST)
         .setRepositoryName("foo/bar")
         .setRevision(Revision.unpeeled("master", id))
-        .setTreePath("/file")
+        .setPathPart("/file")
         .build();
 
     assertEquals("/b", view.getServletPath());
@@ -208,7 +208,7 @@
     assertEquals("foo/bar", view.getRepositoryName());
     assertEquals(id, view.getRevision().getId());
     assertEquals("master", view.getRevision().getName());
-    assertEquals("file", view.getTreePath());
+    assertEquals("file", view.getPathPart());
     assertTrue(HOST.getParameters().isEmpty());
 
     assertEquals("/b/foo/bar/+/master/file", view.toUrl());
@@ -228,7 +228,7 @@
         .copyFrom(HOST)
         .setRepositoryName("foo/bar")
         .setRevision(Revision.unpeeled("master", id))
-        .setTreePath("/path/to/a/file")
+        .setPathPart("/path/to/a/file")
         .build();
 
     assertEquals("/b", view.getServletPath());
@@ -237,7 +237,7 @@
     assertEquals("foo/bar", view.getRepositoryName());
     assertEquals(id, view.getRevision().getId());
     assertEquals("master", view.getRevision().getName());
-    assertEquals("path/to/a/file", view.getTreePath());
+    assertEquals("path/to/a/file", view.getPathPart());
     assertTrue(HOST.getParameters().isEmpty());
 
     assertEquals("/b/foo/bar/+/master/path/to/a/file", view.toUrl());
@@ -262,7 +262,7 @@
         .setRepositoryName("foo/bar")
         .setRevision(Revision.unpeeled("master", id))
         .setOldRevision(Revision.unpeeled("master^", parent))
-        .setTreePath("/path/to/a/file")
+        .setPathPart("/path/to/a/file")
         .build();
 
     assertEquals("/b", view.getServletPath());
@@ -272,7 +272,7 @@
     assertEquals(id, view.getRevision().getId());
     assertEquals("master", view.getRevision().getName());
     assertEquals("master^", view.getOldRevision().getName());
-    assertEquals("path/to/a/file", view.getTreePath());
+    assertEquals("path/to/a/file", view.getPathPart());
     assertTrue(HOST.getParameters().isEmpty());
 
     assertEquals("/b/foo/bar/+/master%5E%21/path/to/a/file", view.toUrl());
@@ -295,7 +295,7 @@
         .copyFrom(HOST)
         .setRepositoryName("foo/bar")
         .setRevision(Revision.unpeeled("master", id))
-        .setTreePath("/path/to/a/file")
+        .setPathPart("/path/to/a/file")
         .build();
 
     assertEquals("/b", view.getServletPath());
@@ -305,7 +305,7 @@
     assertEquals(id, view.getRevision().getId());
     assertEquals("master", view.getRevision().getName());
     assertEquals(Revision.NULL, view.getOldRevision());
-    assertEquals("path/to/a/file", view.getTreePath());
+    assertEquals("path/to/a/file", view.getPathPart());
     assertTrue(HOST.getParameters().isEmpty());
 
     assertEquals("/b/foo/bar/+/master%5E%21/path/to/a/file", view.toUrl());
@@ -330,7 +330,7 @@
         .setRepositoryName("foo/bar")
         .setRevision(Revision.unpeeled("master", id))
         .setOldRevision(Revision.unpeeled("efab5678", other))
-        .setTreePath("/path/to/a/file")
+        .setPathPart("/path/to/a/file")
         .build();
 
     assertEquals("/b", view.getServletPath());
@@ -340,7 +340,7 @@
     assertEquals(id, view.getRevision().getId());
     assertEquals("master", view.getRevision().getName());
     assertEquals("efab5678", view.getOldRevision().getName());
-    assertEquals("path/to/a/file", view.getTreePath());
+    assertEquals("path/to/a/file", view.getPathPart());
     assertTrue(HOST.getParameters().isEmpty());
 
     assertEquals("/b/foo/bar/+/efab5678..master/path/to/a/file", view.toUrl());
@@ -372,7 +372,7 @@
     assertEquals(id, view.getRevision().getId());
     assertEquals("master", view.getRevision().getName());
     assertEquals(Revision.NULL, view.getOldRevision());
-    assertNull(view.getTreePath());
+    assertNull(view.getPathPart());
     assertTrue(HOST.getParameters().isEmpty());
 
     assertEquals("/b/foo/bar/+log/master", view.toUrl());
@@ -399,7 +399,7 @@
     assertEquals(id, view.getRevision().getId());
     assertEquals("abcd1234", view.getRevision().getName());
     assertEquals(Revision.NULL, view.getOldRevision());
-    assertNull(view.getTreePath());
+    assertNull(view.getPathPart());
     assertTrue(HOST.getParameters().isEmpty());
 
     assertEquals("/b/foo/bar/+log/abcd1234", view.toUrl());
@@ -417,7 +417,7 @@
         .copyFrom(HOST)
         .setRepositoryName("foo/bar")
         .setRevision(Revision.unpeeled("master", id))
-        .setTreePath("/path/to/a/file")
+        .setPathPart("/path/to/a/file")
         .build();
 
     assertEquals("/b", view.getServletPath());
@@ -427,7 +427,7 @@
     assertEquals(id, view.getRevision().getId());
     assertEquals("master", view.getRevision().getName());
     assertEquals(Revision.NULL, view.getOldRevision());
-    assertEquals("path/to/a/file", view.getTreePath());
+    assertEquals("path/to/a/file", view.getPathPart());
     assertTrue(HOST.getParameters().isEmpty());
 
     assertEquals("/b/foo/bar/+log/master/path/to/a/file", view.toUrl());
@@ -451,7 +451,7 @@
         .setRepositoryName("foo/bar")
         .setRevision(Revision.unpeeled("master", id))
         .setOldRevision(Revision.unpeeled("master^", parent))
-        .setTreePath("/path/to/a/file")
+        .setPathPart("/path/to/a/file")
         .build();
 
     assertEquals("/b", view.getServletPath());
@@ -461,7 +461,7 @@
     assertEquals(id, view.getRevision().getId());
     assertEquals("master", view.getRevision().getName());
     assertEquals("master^", view.getOldRevision().getName());
-    assertEquals("path/to/a/file", view.getTreePath());
+    assertEquals("path/to/a/file", view.getPathPart());
     assertTrue(HOST.getParameters().isEmpty());
 
     assertEquals("/b/foo/bar/+log/master%5E..master/path/to/a/file", view.toUrl());
@@ -509,7 +509,7 @@
         .setRepositoryName("foo?bar")
         .setRevision(Revision.unpeeled("ba/d#name", id))
         .setOldRevision(Revision.unpeeled("other\"na/me", parent))
-        .setTreePath("we ird/pa'th/name")
+        .setPathPart("we ird/pa'th/name")
         .putParam("k e y", "val/ue")
         .setAnchor("anc#hor")
         .build();
@@ -523,7 +523,7 @@
     assertEquals("ba/d#name", view.getRevision().getName());
     assertEquals(parent, view.getOldRevision().getId());
     assertEquals("other\"na/me", view.getOldRevision().getName());
-    assertEquals("we ird/pa'th/name", view.getTreePath());
+    assertEquals("we ird/pa'th/name", view.getPathPart());
     assertEquals(ImmutableListMultimap.<String, String> of("k e y", "val/ue"),
         view.getParameters());
 
@@ -549,7 +549,7 @@
         .copyFrom(HOST)
         .setRepositoryName("foo/bar")
         .setRevision(Revision.unpeeled("master", id))
-        .setTreePath("/path/to/a/file")
+        .setPathPart("/path/to/a/file")
         .build();
 
     assertEquals("/b/foo/bar/+/master/path/to/a/file", view.toUrl());
@@ -583,7 +583,7 @@
         .copyFrom(HOST)
         .setRepositoryName("foo/bar")
         .setRevision(Revision.unpeeled("master", id))
-        .setTreePath("")
+        .setPathPart("")
         .build();
 
     assertEquals("/b/foo/bar/+/master/", view.toUrl());
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/TreeSoyDataTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/TreeSoyDataTest.java
index 85423d9..a0fa78a 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/TreeSoyDataTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/TreeSoyDataTest.java
@@ -45,7 +45,7 @@
         .setHostName("host")
         .setRepositoryName("repo")
         .setRevision(Revision.unpeeled("m", id))
-        .setTreePath("a/b/c")
+        .setPathPart("a/b/c")
         .build();
     assertNull(resolveTargetUrl(view, "/foo"));
     assertEquals("/x/repo/+/m/a", resolveTargetUrl(view, "../../"));
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/ViewFilterTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/ViewFilterTest.java
index 712ddf5..fdb291c 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/ViewFilterTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/ViewFilterTest.java
@@ -84,7 +84,7 @@
     assertNull(view.getRepositoryName());
     assertEquals(Revision.NULL, view.getRevision());
     assertEquals(Revision.NULL, view.getOldRevision());
-    assertNull(view.getTreePath());
+    assertNull(view.getPathPart());
   }
 
   public void testRepositoryIndex() throws Exception {
@@ -93,7 +93,7 @@
     assertEquals("repo", view.getRepositoryName());
     assertEquals(Revision.NULL, view.getRevision());
     assertEquals(Revision.NULL, view.getOldRevision());
-    assertNull(view.getTreePath());
+    assertNull(view.getPathPart());
   }
 
   public void testRefs() throws Exception {
@@ -104,35 +104,35 @@
     assertEquals("repo", view.getRepositoryName());
     assertEquals(Revision.NULL, view.getRevision());
     assertEquals(Revision.NULL, view.getOldRevision());
-    assertEquals("", view.getTreePath());
+    assertEquals("", view.getPathPart());
 
     view = getView("/repo/+refs/");
     assertEquals(Type.REFS, view.getType());
     assertEquals("repo", view.getRepositoryName());
     assertEquals(Revision.NULL, view.getRevision());
     assertEquals(Revision.NULL, view.getOldRevision());
-    assertEquals("", view.getTreePath());
+    assertEquals("", view.getPathPart());
 
     view = getView("/repo/+refs/heads");
     assertEquals(Type.REFS, view.getType());
     assertEquals("repo", view.getRepositoryName());
     assertEquals(Revision.NULL, view.getRevision());
     assertEquals(Revision.NULL, view.getOldRevision());
-    assertEquals("heads", view.getTreePath());
+    assertEquals("heads", view.getPathPart());
 
     view = getView("/repo/+refs/heads/");
     assertEquals(Type.REFS, view.getType());
     assertEquals("repo", view.getRepositoryName());
     assertEquals(Revision.NULL, view.getRevision());
     assertEquals(Revision.NULL, view.getOldRevision());
-    assertEquals("heads", view.getTreePath());
+    assertEquals("heads", view.getPathPart());
 
     view = getView("/repo/+refs/heads/master");
     assertEquals(Type.REFS, view.getType());
     assertEquals("repo", view.getRepositoryName());
     assertEquals(Revision.NULL, view.getRevision());
     assertEquals(Revision.NULL, view.getOldRevision());
-    assertEquals("heads/master", view.getTreePath());
+    assertEquals("heads/master", view.getPathPart());
   }
 
   public void testBranches() throws Exception {
@@ -144,25 +144,25 @@
     assertEquals(Type.REVISION, view.getType());
     assertEquals("master", view.getRevision().getName());
     assertEquals(master, view.getRevision().getId());
-    assertNull(view.getTreePath());
+    assertNull(view.getPathPart());
 
     view = getView("/repo/+show/heads/master");
     assertEquals(Type.REVISION, view.getType());
     assertEquals("heads/master", view.getRevision().getName());
     assertEquals(master, view.getRevision().getId());
-    assertNull(view.getTreePath());
+    assertNull(view.getPathPart());
 
     view = getView("/repo/+show/refs/heads/master");
     assertEquals(Type.REVISION, view.getType());
     assertEquals("refs/heads/master", view.getRevision().getName());
     assertEquals(master, view.getRevision().getId());
-    assertNull(view.getTreePath());
+    assertNull(view.getPathPart());
 
     view = getView("/repo/+show/stable");
     assertEquals(Type.REVISION, view.getType());
     assertEquals("stable", view.getRevision().getName());
     assertEquals(stable, view.getRevision().getId());
-    assertNull(view.getTreePath());
+    assertNull(view.getPathPart());
   }
 
   public void testAmbiguousBranchAndTag() throws Exception {
@@ -174,31 +174,31 @@
     assertEquals(Type.REVISION, view.getType());
     assertEquals("name", view.getRevision().getName());
     assertEquals(tag, view.getRevision().getId());
-    assertNull(view.getTreePath());
+    assertNull(view.getPathPart());
 
     view = getView("/repo/+show/heads/name");
     assertEquals(Type.REVISION, view.getType());
     assertEquals("heads/name", view.getRevision().getName());
     assertEquals(branch, view.getRevision().getId());
-    assertNull(view.getTreePath());
+    assertNull(view.getPathPart());
 
     view = getView("/repo/+show/refs/heads/name");
     assertEquals(Type.REVISION, view.getType());
     assertEquals("refs/heads/name", view.getRevision().getName());
     assertEquals(branch, view.getRevision().getId());
-    assertNull(view.getTreePath());
+    assertNull(view.getPathPart());
 
     view = getView("/repo/+show/tags/name");
     assertEquals(Type.REVISION, view.getType());
     assertEquals("tags/name", view.getRevision().getName());
     assertEquals(tag, view.getRevision().getId());
-    assertNull(view.getTreePath());
+    assertNull(view.getPathPart());
 
     view = getView("/repo/+show/refs/tags/name");
     assertEquals(Type.REVISION, view.getType());
     assertEquals("refs/tags/name", view.getRevision().getName());
     assertEquals(tag, view.getRevision().getId());
-    assertNull(view.getTreePath());
+    assertNull(view.getPathPart());
   }
 
   public void testPath() throws Exception {
@@ -208,22 +208,22 @@
     view = getView("/repo/+show/master/");
     assertEquals(Type.PATH, view.getType());
     assertEquals(master, view.getRevision().getId());
-    assertEquals("", view.getTreePath());
+    assertEquals("", view.getPathPart());
 
     view = getView("/repo/+show/master/foo");
     assertEquals(Type.PATH, view.getType());
     assertEquals(master, view.getRevision().getId());
-    assertEquals("foo", view.getTreePath());
+    assertEquals("foo", view.getPathPart());
 
     view = getView("/repo/+show/master/foo/");
     assertEquals(Type.PATH, view.getType());
     assertEquals(master, view.getRevision().getId());
-    assertEquals("foo", view.getTreePath());
+    assertEquals("foo", view.getPathPart());
 
     view = getView("/repo/+show/master/foo/bar");
     assertEquals(Type.PATH, view.getType());
     assertEquals(master, view.getRevision().getId());
-    assertEquals("foo/bar", view.getTreePath());
+    assertEquals("foo/bar", view.getPathPart());
   }
 
   public void testMultipleSlashes() throws Exception {
@@ -248,7 +248,7 @@
     assertEquals(master, view.getRevision().getId());
     assertEquals("master^", view.getOldRevision().getName());
     assertEquals(parent, view.getOldRevision().getId());
-    assertEquals("", view.getTreePath());
+    assertEquals("", view.getPathPart());
 
     view = getView("/repo/+diff/master^..master/");
     assertEquals(Type.DIFF, view.getType());
@@ -256,7 +256,7 @@
     assertEquals(master, view.getRevision().getId());
     assertEquals("master^", view.getOldRevision().getName());
     assertEquals(parent, view.getOldRevision().getId());
-    assertEquals("", view.getTreePath());
+    assertEquals("", view.getPathPart());
 
     view = getView("/repo/+diff/master^..master/foo");
     assertEquals(Type.DIFF, view.getType());
@@ -264,7 +264,7 @@
     assertEquals(master, view.getRevision().getId());
     assertEquals("master^", view.getOldRevision().getName());
     assertEquals(parent, view.getOldRevision().getId());
-    assertEquals("foo", view.getTreePath());
+    assertEquals("foo", view.getPathPart());
 
     view = getView("/repo/+diff/refs/heads/master^..refs/heads/master");
     assertEquals(Type.DIFF, view.getType());
@@ -272,7 +272,7 @@
     assertEquals(master, view.getRevision().getId());
     assertEquals("refs/heads/master^", view.getOldRevision().getName());
     assertEquals(parent, view.getOldRevision().getId());
-    assertEquals("", view.getTreePath());
+    assertEquals("", view.getPathPart());
   }
 
   public void testDiffAgainstEmptyCommit() throws Exception {
@@ -282,7 +282,7 @@
     assertEquals("master", view.getRevision().getName());
     assertEquals(master, view.getRevision().getId());
     assertEquals(Revision.NULL, view.getOldRevision());
-    assertEquals("", view.getTreePath());
+    assertEquals("", view.getPathPart());
   }
 
   public void testLog() throws Exception {
@@ -293,33 +293,33 @@
     view = getView("/repo/+log");
     assertEquals(Type.LOG, view.getType());
     assertEquals(Revision.NULL, view.getRevision());
-    assertNull(view.getTreePath());
+    assertNull(view.getPathPart());
 
     view = getView("/repo/+log/");
     assertEquals(Type.LOG, view.getType());
     assertEquals(Revision.NULL, view.getRevision());
-    assertNull(view.getTreePath());
+    assertNull(view.getPathPart());
 
     view = getView("/repo/+log/master");
     assertEquals(Type.LOG, view.getType());
     assertEquals("master", view.getRevision().getName());
     assertEquals(master, view.getRevision().getId());
     assertEquals(Revision.NULL, view.getOldRevision());
-    assertEquals("", view.getTreePath());
+    assertEquals("", view.getPathPart());
 
     view = getView("/repo/+log/master/");
     assertEquals(Type.LOG, view.getType());
     assertEquals("master", view.getRevision().getName());
     assertEquals(master, view.getRevision().getId());
     assertEquals(Revision.NULL, view.getOldRevision());
-    assertEquals("", view.getTreePath());
+    assertEquals("", view.getPathPart());
 
     view = getView("/repo/+log/master/foo");
     assertEquals(Type.LOG, view.getType());
     assertEquals("master", view.getRevision().getName());
     assertEquals(master, view.getRevision().getId());
     assertEquals(Revision.NULL, view.getOldRevision());
-    assertEquals("foo", view.getTreePath());
+    assertEquals("foo", view.getPathPart());
 
     view = getView("/repo/+log/master^..master");
     assertEquals(Type.LOG, view.getType());
@@ -327,7 +327,7 @@
     assertEquals(master, view.getRevision().getId());
     assertEquals("master^", view.getOldRevision().getName());
     assertEquals(parent, view.getOldRevision().getId());
-    assertEquals("", view.getTreePath());
+    assertEquals("", view.getPathPart());
 
     view = getView("/repo/+log/master^..master/");
     assertEquals(Type.LOG, view.getType());
@@ -335,7 +335,7 @@
     assertEquals(master, view.getRevision().getId());
     assertEquals("master^", view.getOldRevision().getName());
     assertEquals(parent, view.getOldRevision().getId());
-    assertEquals("", view.getTreePath());
+    assertEquals("", view.getPathPart());
 
     view = getView("/repo/+log/master^..master/foo");
     assertEquals(Type.LOG, view.getType());
@@ -343,7 +343,7 @@
     assertEquals(master, view.getRevision().getId());
     assertEquals("master^", view.getOldRevision().getName());
     assertEquals(parent, view.getOldRevision().getId());
-    assertEquals("foo", view.getTreePath());
+    assertEquals("foo", view.getPathPart());
 
     view = getView("/repo/+log/refs/heads/master^..refs/heads/master");
     assertEquals(Type.LOG, view.getType());
@@ -351,7 +351,7 @@
     assertEquals(master, view.getRevision().getId());
     assertEquals("refs/heads/master^", view.getOldRevision().getName());
     assertEquals(parent, view.getOldRevision().getId());
-    assertEquals("", view.getTreePath());
+    assertEquals("", view.getPathPart());
   }
 
   private GitilesView getView(String pathAndQuery) throws ServletException, IOException {
