diff --git a/java/com/google/gitiles/LogServlet.java b/java/com/google/gitiles/LogServlet.java
index 0dd00f3..6982e0a 100644
--- a/java/com/google/gitiles/LogServlet.java
+++ b/java/com/google/gitiles/LogServlet.java
@@ -110,7 +110,7 @@
         List<Map<String, Object>> tags = Lists.newArrayListWithExpectedSize(1);
         for (RevObject o : RevisionServlet.listObjects(paginator.getWalk(), view.getRevision())) {
           if (o instanceof RevTag) {
-            tags.add(new TagSoyData(linkifier, req).toSoyData((RevTag) o, df));
+            tags.add(new TagSoyData(linkifier, req).toSoyData(paginator.getWalk(), (RevTag) o, df));
           }
         }
         if (!tags.isEmpty()) {
diff --git a/java/com/google/gitiles/RevisionServlet.java b/java/com/google/gitiles/RevisionServlet.java
index 17ad143..597c053 100644
--- a/java/com/google/gitiles/RevisionServlet.java
+++ b/java/com/google/gitiles/RevisionServlet.java
@@ -122,7 +122,7 @@
                       "type",
                       Constants.TYPE_TAG,
                       "data",
-                      new TagSoyData(linkifier, req).toSoyData((RevTag) obj, df)));
+                      new TagSoyData(linkifier, req).toSoyData(walk, (RevTag) obj, df)));
               break;
             default:
               log.warn("Bad object type for {}: {}", ObjectId.toString(obj.getId()), obj.getType());
diff --git a/java/com/google/gitiles/TagSoyData.java b/java/com/google/gitiles/TagSoyData.java
index 831cb8e..32b319a 100644
--- a/java/com/google/gitiles/TagSoyData.java
+++ b/java/com/google/gitiles/TagSoyData.java
@@ -15,10 +15,13 @@
 package com.google.gitiles;
 
 import com.google.common.collect.Maps;
+import java.io.IOException;
 import java.util.Map;
 import javax.servlet.http.HttpServletRequest;
+import org.eclipse.jgit.errors.MissingObjectException;
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.revwalk.RevTag;
+import org.eclipse.jgit.revwalk.RevWalk;
 
 /** Soy data converter for git tags. */
 public class TagSoyData {
@@ -30,7 +33,10 @@
     this.req = req;
   }
 
-  public Map<String, Object> toSoyData(RevTag tag, DateFormatter df) {
+  public Map<String, Object> toSoyData(RevWalk walk, RevTag tag, DateFormatter df)
+      throws MissingObjectException, IOException {
+    walk.parseBody(tag);
+
     Map<String, Object> data = Maps.newHashMapWithExpectedSize(4);
     data.put("sha", ObjectId.toString(tag));
     if (tag.getTaggerIdent() != null) {
diff --git a/java/com/google/gitiles/TimeCache.java b/java/com/google/gitiles/TimeCache.java
index a019d0f..e1e55ce 100644
--- a/java/com/google/gitiles/TimeCache.java
+++ b/java/com/google/gitiles/TimeCache.java
@@ -60,6 +60,8 @@
           () -> {
             RevObject o = walk.parseAny(id);
             while (o instanceof RevTag) {
+              walk.parseBody(o);
+
               RevTag tag = (RevTag) o;
               PersonIdent ident = tag.getTaggerIdent();
               if (ident != null) {
