diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/TimeCache.java b/gitiles-servlet/src/main/java/com/google/gitiles/TimeCache.java
index 9e78479..efdff6e 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/TimeCache.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/TimeCache.java
@@ -38,14 +38,14 @@
  * rather than searching for occurrences in the entire repository.
  */
 public class TimeCache {
-  public static CacheBuilder<Object, Object> newBuilder() {
+  public static CacheBuilder<Object, Object> defaultBuilder() {
     return CacheBuilder.newBuilder().maximumSize(10 << 10);
   }
 
   private final Cache<ObjectId, Long> cache;
 
   public TimeCache() {
-    this(newBuilder());
+    this(defaultBuilder());
   }
 
   public TimeCache(CacheBuilder<Object, Object> builder) {
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/VisibilityCache.java b/gitiles-servlet/src/main/java/com/google/gitiles/VisibilityCache.java
index b1cea90..55cae63 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/VisibilityCache.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/VisibilityCache.java
@@ -90,14 +90,14 @@
   private final Cache<Key, Boolean> cache;
   private final boolean topoSort;
 
-  public static CacheBuilder<Object, Object> newBuilder() {
+  public static CacheBuilder<Object, Object> defaultBuilder() {
     return CacheBuilder.newBuilder()
         .maximumSize(1 << 10)
         .expireAfterWrite(30, TimeUnit.MINUTES);
   }
 
   public VisibilityCache(boolean topoSort) {
-    this(topoSort, newBuilder());
+    this(topoSort, defaultBuilder());
   }
 
   public VisibilityCache(boolean topoSort, CacheBuilder<Object, Object> builder) {
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/blame/BlameCacheImpl.java b/gitiles-servlet/src/main/java/com/google/gitiles/blame/BlameCacheImpl.java
index 4cbe60c..614da2a 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/blame/BlameCacheImpl.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/blame/BlameCacheImpl.java
@@ -34,13 +34,18 @@
 
 /** Guava implementation of BlameCache, weighted by number of blame regions. */
 public class BlameCacheImpl implements BlameCache {
-  public static CacheBuilder<Key, List<Region>> newBuilder() {
-    return CacheBuilder.newBuilder().weigher(new Weigher<Key, List<Region>>() {
+  public static CacheBuilder<Key, List<Region>> defaultBuilder() {
+    return weigher(CacheBuilder.newBuilder()).maximumWeight(10 << 10);
+  }
+
+  public static CacheBuilder<Key, List<Region>> weigher(
+      CacheBuilder<? super Key, ? super List<Region>> builder) {
+    return builder.weigher(new Weigher<Key, List<Region>>() {
       @Override
       public int weigh(Key key, List<Region> value) {
         return value.size();
       }
-    }).maximumWeight(10 << 10);
+    });
   }
 
   public static class Key {
@@ -81,7 +86,7 @@
   private final LoadingCache<Key, List<Region>> cache;
 
   public BlameCacheImpl() {
-    this(newBuilder());
+    this(defaultBuilder());
   }
 
   public LoadingCache<Key, List<Region>> getCache() {
