diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesUrls.java b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesUrls.java
index 2d07c49..27d4a4b 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesUrls.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesUrls.java
@@ -16,7 +16,6 @@
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 
-import com.google.common.base.Function;
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
 import javax.servlet.http.HttpServletRequest;
@@ -32,22 +31,18 @@
    * character that should not be encoded, while almost any other non-alpha, non-numeric character
    * will be encoded using URL style encoding.
    */
-  Function<String, String> NAME_ESCAPER =
-      new Function<String, String>() {
-        @Override
-        public String apply(String s) {
-          try {
-            return URLEncoder.encode(s, UTF_8.name())
-                .replace("%2F", "/")
-                .replace("%2f", "/")
-                .replace("+", "%20")
-                .replace("%2B", "+")
-                .replace("%2b", "+");
-          } catch (UnsupportedEncodingException e) {
-            throw new IllegalStateException(e);
-          }
-        }
-      };
+  static String escapeName(String name) {
+    try {
+      return URLEncoder.encode(name, UTF_8.name())
+          .replace("%2F", "/")
+          .replace("%2f", "/")
+          .replace("+", "%20")
+          .replace("%2B", "+")
+          .replace("%2b", "+");
+    } catch (UnsupportedEncodingException e) {
+      throw new IllegalStateException(e);
+    }
+  }
 
   /**
    * Return the name of the host from the request.
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java
index c792634..3468303 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java
@@ -19,7 +19,7 @@
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkState;
-import static com.google.gitiles.GitilesUrls.NAME_ESCAPER;
+import static com.google.gitiles.GitilesUrls.escapeName;
 import static java.nio.charset.StandardCharsets.UTF_8;
 
 import com.google.common.annotations.VisibleForTesting;
@@ -714,13 +714,13 @@
       default:
         throw new IllegalStateException("Unknown view type: " + type);
     }
-    String baseUrl = NAME_ESCAPER.apply(url.toString());
+    String baseUrl = escapeName(url.toString());
     url = new StringBuilder();
     if (!params.isEmpty()) {
       url.append('?').append(paramsToString(params));
     }
     if (!Strings.isNullOrEmpty(anchor)) {
-      url.append('#').append(NAME_ESCAPER.apply(anchor));
+      url.append('#').append(escapeName(anchor));
     }
     return baseUrl + url;
   }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/HostIndexServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/HostIndexServlet.java
index 4b107c3..d10060b 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/HostIndexServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/HostIndexServlet.java
@@ -187,7 +187,7 @@
           writer.write(ref);
           writer.write(' ');
         }
-        writer.write(GitilesUrls.NAME_ESCAPER.apply(stripPrefix(prefix, repo.name)));
+        writer.write(GitilesUrls.escapeName(stripPrefix(prefix, repo.name)));
         writer.write('\n');
       }
     }
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/GitilesUrlsTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/GitilesUrlsTest.java
index 4f85bc2..c8c6cfc 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/GitilesUrlsTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/GitilesUrlsTest.java
@@ -15,7 +15,7 @@
 package com.google.gitiles;
 
 import static com.google.common.truth.Truth.assertThat;
-import static com.google.gitiles.GitilesUrls.NAME_ESCAPER;
+import static com.google.gitiles.GitilesUrls.escapeName;
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -26,31 +26,31 @@
 public class GitilesUrlsTest {
   @Test
   public void nameEscaperEscapesAppropriateSpecialCharacters() throws Exception {
-    assertThat(NAME_ESCAPER.apply("foo_bar")).isEqualTo("foo_bar");
-    assertThat(NAME_ESCAPER.apply("foo-bar")).isEqualTo("foo-bar");
-    assertThat(NAME_ESCAPER.apply("foo%bar")).isEqualTo("foo%25bar");
-    assertThat(NAME_ESCAPER.apply("foo&bar")).isEqualTo("foo%26bar");
-    assertThat(NAME_ESCAPER.apply("foo(bar")).isEqualTo("foo%28bar");
-    assertThat(NAME_ESCAPER.apply("foo)bar")).isEqualTo("foo%29bar");
-    assertThat(NAME_ESCAPER.apply("foo:bar")).isEqualTo("foo%3Abar");
-    assertThat(NAME_ESCAPER.apply("foo;bar")).isEqualTo("foo%3Bbar");
-    assertThat(NAME_ESCAPER.apply("foo=bar")).isEqualTo("foo%3Dbar");
-    assertThat(NAME_ESCAPER.apply("foo?bar")).isEqualTo("foo%3Fbar");
-    assertThat(NAME_ESCAPER.apply("foo[bar")).isEqualTo("foo%5Bbar");
-    assertThat(NAME_ESCAPER.apply("foo]bar")).isEqualTo("foo%5Dbar");
-    assertThat(NAME_ESCAPER.apply("foo{bar")).isEqualTo("foo%7Bbar");
-    assertThat(NAME_ESCAPER.apply("foo}bar")).isEqualTo("foo%7Dbar");
+    assertThat(escapeName("foo_bar")).isEqualTo("foo_bar");
+    assertThat(escapeName("foo-bar")).isEqualTo("foo-bar");
+    assertThat(escapeName("foo%bar")).isEqualTo("foo%25bar");
+    assertThat(escapeName("foo&bar")).isEqualTo("foo%26bar");
+    assertThat(escapeName("foo(bar")).isEqualTo("foo%28bar");
+    assertThat(escapeName("foo)bar")).isEqualTo("foo%29bar");
+    assertThat(escapeName("foo:bar")).isEqualTo("foo%3Abar");
+    assertThat(escapeName("foo;bar")).isEqualTo("foo%3Bbar");
+    assertThat(escapeName("foo=bar")).isEqualTo("foo%3Dbar");
+    assertThat(escapeName("foo?bar")).isEqualTo("foo%3Fbar");
+    assertThat(escapeName("foo[bar")).isEqualTo("foo%5Bbar");
+    assertThat(escapeName("foo]bar")).isEqualTo("foo%5Dbar");
+    assertThat(escapeName("foo{bar")).isEqualTo("foo%7Bbar");
+    assertThat(escapeName("foo}bar")).isEqualTo("foo%7Dbar");
   }
 
   @Test
   public void nameEscaperDoesNotEscapeSlashes() throws Exception {
-    assertThat(NAME_ESCAPER.apply("foo/bar")).isEqualTo("foo/bar");
+    assertThat(escapeName("foo/bar")).isEqualTo("foo/bar");
   }
 
   @Test
   public void nameEscaperEscapesSpacesWithPercentInsteadOfPlus() throws Exception {
-    assertThat(NAME_ESCAPER.apply("foo+bar")).isEqualTo("foo+bar");
-    assertThat(NAME_ESCAPER.apply("foo bar")).isEqualTo("foo%20bar");
-    assertThat(NAME_ESCAPER.apply("foo%20bar")).isEqualTo("foo%2520bar");
+    assertThat(escapeName("foo+bar")).isEqualTo("foo+bar");
+    assertThat(escapeName("foo bar")).isEqualTo("foo%20bar");
+    assertThat(escapeName("foo%20bar")).isEqualTo("foo%2520bar");
   }
 }
