diff --git a/VERSION b/VERSION
index f69acc1..421b8d9 100644
--- a/VERSION
+++ b/VERSION
@@ -4,4 +4,4 @@
 # we currently have no stable releases, we use the "build number" scheme
 # described at:
 # http://mojo.codehaus.org/versions-maven-plugin/version-rules.html
-GITILES_VERSION = '0.1-4'
+GITILES_VERSION = '0.1-5'
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
index 5c9fd36..240a3a7 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
@@ -58,7 +58,7 @@
   static void setNotCacheable(HttpServletResponse res) {
     res.setHeader(HttpHeaders.CACHE_CONTROL, "no-cache, no-store, max-age=0, must-revalidate");
     res.setHeader(HttpHeaders.PRAGMA, "no-cache");
-    res.setHeader(HttpHeaders.EXPIRES, "Fri, 01 Jan 1990 00:00:00 GMT");
+    res.setHeader(HttpHeaders.EXPIRES, "Mon, 01 Jan 1990 00:00:00 GMT");
     res.setDateHeader(HttpHeaders.DATE, new Instant().getMillis());
   }
 
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 733da0a..9e5a9fe 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/CommitSoyData.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/CommitSoyData.java
@@ -56,6 +56,7 @@
 
   private Linkifier linkifier;
   private RevWalk walk;
+  private CommitData.Builder cdb;
   private ArchiveFormat archiveFormat;
 
   CommitSoyData setLinkifier(@Nullable Linkifier linkifier) {
@@ -76,7 +77,11 @@
   Map<String, Object> toSoyData(HttpServletRequest req, RevCommit c, Set<Field> fs,
       DateFormatter df) throws IOException {
     GitilesView view = ViewFilter.getView(req);
-    CommitData cd = new CommitData.Builder()
+    if (cdb == null) {
+      cdb = new CommitData.Builder();
+    }
+
+    CommitData cd = cdb
         .setRevWalk(walk)
         .setArchiveFormat(archiveFormat)
         .build(req, c, fs);
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/LogSoyData.java b/gitiles-servlet/src/main/java/com/google/gitiles/LogSoyData.java
index 244bbc8..0508561 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/LogSoyData.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/LogSoyData.java
@@ -47,6 +47,7 @@
   private final Set<Field> fields;
   private final String pretty;
   private final String variant;
+  private CommitSoyData csd;
 
   public LogSoyData(HttpServletRequest req, GitilesAccess access, String pretty)
       throws IOException {
@@ -97,7 +98,11 @@
 
   private Map<String, Object> toEntrySoyData(Paginator paginator, RevCommit c, DateFormatter df,
       boolean first) throws IOException {
-    Map<String, Object> entry = new CommitSoyData().setRevWalk(paginator.getWalk())
+    if (csd == null) {
+      csd = new CommitSoyData();
+    }
+
+    Map<String, Object> entry = csd.setRevWalk(paginator.getWalk())
         .toSoyData(req, c, fields, df);
     return ImmutableMap.of(
         "firstWithPrevious", first && paginator.getPreviousStart() != null,
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 2965923..32359db 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java
@@ -130,8 +130,8 @@
     return list.size() > REF_LIMIT ? list.subList(0, REF_LIMIT) : list;
   }
 
-  private Map<String, Object> renderReadme(RevWalk walk, GitilesView view,
-      Config cfg, RevObject head) throws IOException {
+  private static Map<String, Object> renderReadme(RevWalk walk,
+      GitilesView view, Config cfg, RevObject head) throws IOException {
     RevTree rootTree;
     try {
       rootTree = walk.parseTree(head);
diff --git a/lib/jgit/BUCK b/lib/jgit/BUCK
index 3df8752..bced6fb 100644
--- a/lib/jgit/BUCK
+++ b/lib/jgit/BUCK
@@ -1,10 +1,10 @@
-REPO = GERRIT
-VERS = '4.0.0.201505191015-rc1.19-g1773002'
+REPO = MAVEN_CENTRAL
+VERS = '4.0.1.201506240215-r'
 
 maven_jar(
   name = 'jgit',
   id = 'org.eclipse.jgit:org.eclipse.jgit:' + VERS,
-  sha1 = '4db24b39dab8dc0e889807383728032945f461be',
+  sha1 = '3bdf2d666df1a5373f7ad291c075ab1329560afd',
   repository = REPO,
   unsign = True,
   deps = [':ewah'],
@@ -18,7 +18,7 @@
 maven_jar(
   name = 'jgit-servlet',
   id = 'org.eclipse.jgit:org.eclipse.jgit.http.server:' + VERS,
-  sha1 = '7bfdbddea56a87f3f2687ae6abf2c5bdae649f0c',
+  sha1 = '8c73719477224802eda2a2da65bce8946d0fac6f',
   repository = REPO,
   deps = [':jgit'],
   unsign = True,
@@ -41,7 +41,7 @@
 maven_jar(
   name = 'jgit-archive_library',
   id = 'org.eclipse.jgit:org.eclipse.jgit.archive:' + VERS,
-  sha1 = '08fce6b89f6d1e78f99869d542d70899f3be9c9f',
+  sha1 = '124e353f51adbbc1af12b143012cc1ebfa2c1012',
   repository = REPO,
   deps = [':jgit'],
   unsign = True,
@@ -54,7 +54,7 @@
 maven_jar(
   name = 'junit',
   id = 'org.eclipse.jgit:org.eclipse.jgit.junit:' + VERS,
-  sha1 = 'a54c16076e6cbdb9113565a82cffa5f268ae8e3b',
+  sha1 = 'bddb62b8f532b6d46ac832d909fa46b73c40a126',
   repository = REPO,
   unsign = True,
   deps = [':jgit'],
