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 031b667..52b4ea8 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java
@@ -98,7 +98,7 @@
 
       if (!view.getRevision().nameIsId()) {
         List<Map<String, Object>> tags = Lists.newArrayListWithExpectedSize(1);
-        for (RevObject o : RevisionServlet.listObjects(walk, view.getRevision().getId())) {
+        for (RevObject o : RevisionServlet.listObjects(walk, view.getRevision())) {
           if (o instanceof RevTag) {
             tags.add(new TagSoyData(linkifier, req).toSoyData((RevTag) o));
           }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java
index e4d0300..0c5f97f 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java
@@ -70,7 +70,7 @@
       String name = ref.getName().substring(prefix.length());
       boolean needPrefix = !ref.getName().equals(refdb.getRef(name).getName());
       result.add(ImmutableMap.of(
-          "url", GitilesView.log().copyFrom(req).setRevision(
+          "url", GitilesView.revision().copyFrom(req).setRevision(
               Revision.unpeeled(needPrefix ? ref.getName() : name, ref.getObjectId())).toUrl(),
           "name", name));
     }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RevisionServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/RevisionServlet.java
index ac5cd8f..345f7d2 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/RevisionServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/RevisionServlet.java
@@ -64,7 +64,7 @@
 
     RevWalk walk = new RevWalk(repo);
     try {
-      List<RevObject> objects = listObjects(walk, view.getRevision().getId());
+      List<RevObject> objects = listObjects(walk, view.getRevision());
       List<Map<String, ?>> soyObjects = Lists.newArrayListWithCapacity(objects.size());
       boolean hasBlob = false;
 
@@ -120,17 +120,21 @@
   }
 
   // TODO(dborowitz): Extract this.
-  static List<RevObject> listObjects(RevWalk walk, ObjectId id)
+  static List<RevObject> listObjects(RevWalk walk, Revision rev)
       throws MissingObjectException, IOException {
     List<RevObject> objects = Lists.newArrayListWithExpectedSize(1);
+    ObjectId id = rev.getId();
+    RevObject cur;
     while (true) {
-      RevObject cur = walk.parseAny(id);
+      cur = walk.parseAny(id);
       objects.add(cur);
-      if (cur.getType() == Constants.OBJ_TAG) {
-        id = ((RevTag) cur).getObject();
-      } else {
+      if (cur.getType() != Constants.OBJ_TAG) {
         break;
       }
+      id = ((RevTag) cur).getObject();
+    }
+    if (cur.getType() == Constants.OBJ_COMMIT) {
+      objects.add(walk.parseTree(((RevCommit) cur).getTree()));
     }
     return objects;
   }
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 6cbf541..66aa207 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/TreeSoyData.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/TreeSoyData.java
@@ -19,6 +19,7 @@
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Charsets;
+import com.google.common.base.Objects;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.io.Files;
@@ -56,7 +57,8 @@
 
     // simplifyPath() normalizes "a/../../" to "a", so manually check whether
     // the path leads above the git root.
-    int depth = new StringTokenizer(view.getTreePath(), "/").countTokens();
+    String path = Objects.firstNonNull(view.getTreePath(), "");
+    int depth = new StringTokenizer(path, "/").countTokens();
     for (String part : PATH_SPLITTER.split(target)) {
       if (part.equals("..")) {
         depth--;
@@ -68,7 +70,7 @@
       }
     }
 
-    String path = Files.simplifyPath(view.getTreePath() + "/" + target);
+    path = Files.simplifyPath(view.getTreePath() + "/" + target);
     return GitilesView.path()
         .copyFrom(view)
         .setTreePath(!path.equals(".") ? path : "")
