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 {
diff --git a/resources/com/google/gitiles/templates/LogDetail.soy b/resources/com/google/gitiles/templates/LogDetail.soy
index c09c9f6..5a90b86 100644
--- a/resources/com/google/gitiles/templates/LogDetail.soy
+++ b/resources/com/google/gitiles/templates/LogDetail.soy
@@ -74,12 +74,13 @@
  * Footer for the list of log entries.
  *
  * @param? nextUrl URL for the next page of results.
+ * @param? nextText text for next page link.
  */
 {template .logEntriesFooter stricthtml="false"}
 </ol>
 {if $nextUrl}
   <nav class="LogNav">
-    <a class="LogNav-next" href="{$nextUrl}">{msg desc="text for next URL"}Next &raquo;{/msg}</a>
+    <a class="LogNav-next" href="{$nextUrl}">{$nextText} &raquo;</a>
   </nav>
 {/if}
 {/template}
