diff --git a/java/com/google/gitiles/LogServlet.java b/java/com/google/gitiles/LogServlet.java
index b4a8e03..5d06ae5 100644
--- a/java/com/google/gitiles/LogServlet.java
+++ b/java/com/google/gitiles/LogServlet.java
@@ -129,7 +129,8 @@
 
       try (OutputStream out = startRenderStreamingHtml(req, res, "gitiles.logDetail", data)) {
         Writer w = newWriter(out, res);
-        new LogSoyData(req, access, pretty).renderStreaming(paginator, null, renderer, w, df);
+        new LogSoyData(req, access, pretty)
+            .renderStreaming(paginator, null, renderer, w, df, LogSoyData.FooterBehavior.NEXT);
         w.flush();
       }
     } catch (RevWalkException e) {
diff --git a/java/com/google/gitiles/LogSoyData.java b/java/com/google/gitiles/LogSoyData.java
index 56ddb8f..2f906fe 100644
--- a/java/com/google/gitiles/LogSoyData.java
+++ b/java/com/google/gitiles/LogSoyData.java
@@ -49,6 +49,15 @@
           Field.TAGS);
   private static final ImmutableSet<Field> VERBOSE_FIELDS = Field.setOf(FIELDS, Field.DIFF_TREE);
 
+  /** Behavior for the footer link when rendering streaming log data. */
+  public enum FooterBehavior {
+    /** "Next" link that skips commits in the current view. */
+    NEXT,
+
+    /** "More" link that starts from HEAD. */
+    LOG_HEAD;
+  }
+
   private final HttpServletRequest req;
   private final GitilesView view;
   private final Set<Field> fields;
@@ -70,7 +79,8 @@
       @Nullable String revision,
       Renderer renderer,
       Writer out,
-      DateFormatter df)
+      DateFormatter df,
+      FooterBehavior footerBehavior)
       throws IOException {
     renderer
         .newRenderer("gitiles.logEntriesHeader")
@@ -91,7 +101,7 @@
 
     renderer
         .newRenderer("gitiles.logEntriesFooter")
-        .setData(toFooterSoyData(paginator, revision))
+        .setData(toFooterSoyData(paginator, revision, footerBehavior))
         .render(out);
   }
 
@@ -139,17 +149,28 @@
         "score", entry.getScore());
   }
 
-  private Map<String, Object> toFooterSoyData(Paginator paginator, @Nullable String revision) {
-    Map<String, Object> data = Maps.newHashMapWithExpectedSize(1);
-    ObjectId next = paginator.getNextStart();
-    if (next != null) {
-      data.put(
-          "nextUrl",
-          copyAndCanonicalizeView(revision)
-              .replaceParam(LogServlet.START_PARAM, next.name())
-              .toUrl());
+  private Map<String, Object> toFooterSoyData(
+      Paginator paginator, @Nullable String revision, FooterBehavior behavior) {
+    switch (behavior) {
+      case NEXT:
+        ObjectId next = paginator.getNextStart();
+        if (next == null) {
+          return ImmutableMap.of();
+        }
+        return ImmutableMap.of(
+            "nextUrl",
+            copyAndCanonicalizeView(revision)
+                .replaceParam(LogServlet.START_PARAM, next.name())
+                .toUrl(),
+            "nextText",
+            "Next");
+
+      case LOG_HEAD:
+        return ImmutableMap.of(
+            "nextUrl", GitilesView.log().copyFrom(view).toUrl(), "nextText", "More");
+      default:
+        throw new IllegalStateException("unknown footer behavior: " + behavior);
     }
-    return data;
   }
 
   private GitilesView.Builder copyAndCanonicalizeView(String revision) {
diff --git a/java/com/google/gitiles/RepositoryIndexServlet.java b/java/com/google/gitiles/RepositoryIndexServlet.java
index 51bc42d..7d7ac36 100644
--- a/java/com/google/gitiles/RepositoryIndexServlet.java
+++ b/java/com/google/gitiles/RepositoryIndexServlet.java
@@ -134,7 +134,8 @@
             startRenderStreamingHtml(req, res, "gitiles.repositoryIndex", data)) {
           Writer w = newWriter(out, res);
           new LogSoyData(req, access, "oneline")
-              .renderStreaming(paginator, "HEAD", renderer, w, df);
+              .renderStreaming(
+                  paginator, "HEAD", renderer, w, df, LogSoyData.FooterBehavior.LOG_HEAD);
           w.flush();
         }
       } else {
