diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/ArchiveServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/ArchiveServlet.java
index 40777a0..dbbb28f 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/ArchiveServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/ArchiveServlet.java
@@ -99,7 +99,7 @@
 
   private String getFilename(GitilesView view, Revision rev, String ext) {
     StringBuilder sb = new StringBuilder()
-        .append(Paths.basename(view.getRepositoryName()))
+        .append(PathUtil.basename(view.getRepositoryName()))
         .append('-')
         .append(rev.getName());
     if (view.getPathPart() != null) {
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 b6223f4..a6df07a 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java
@@ -722,7 +722,7 @@
         breadcrumbs.add(breadcrumb(".", copyWithPath(false).setPathPart("")));
       }
       StringBuilder cur = new StringBuilder();
-      List<String> parts = Paths.SPLITTER.omitEmptyStrings().splitToList(path);
+      List<String> parts = PathUtil.SPLITTER.omitEmptyStrings().splitToList(path);
       checkArgument(hasSingleTree == null
           || (parts.isEmpty() && hasSingleTree.isEmpty())
           || hasSingleTree.size() == parts.size() - 1,
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java
index 6d54991..7e9df71 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java
@@ -542,7 +542,7 @@
     try {
       modulesUrl = sw.getModulesUrl();
       if (modulesUrl != null && (modulesUrl.startsWith("./") || modulesUrl.startsWith("../"))) {
-        String moduleRepo = Paths.simplifyPathUpToRoot(modulesUrl, view.getRepositoryName());
+        String moduleRepo = PathUtil.simplifyPathUpToRoot(modulesUrl, view.getRepositoryName());
         if (moduleRepo != null) {
           modulesUrl = urls.getBaseGitUrl(req) + moduleRepo;
         }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/Paths.java b/gitiles-servlet/src/main/java/com/google/gitiles/PathUtil.java
similarity index 97%
rename from gitiles-servlet/src/main/java/com/google/gitiles/Paths.java
rename to gitiles-servlet/src/main/java/com/google/gitiles/PathUtil.java
index f69995b..e55b77d 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/Paths.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/PathUtil.java
@@ -22,7 +22,7 @@
 import java.util.StringTokenizer;
 
 /** Static utilities for dealing with pathnames. */
-class Paths {
+class PathUtil {
   private static final CharMatcher MATCHER = CharMatcher.is('/');
   static final Splitter SPLITTER = Splitter.on(MATCHER);
 
@@ -59,6 +59,6 @@
     return path.substring(slash + 1);
   }
 
-  private Paths() {
+  private PathUtil() {
   }
 }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RevisionParser.java b/gitiles-servlet/src/main/java/com/google/gitiles/RevisionParser.java
index 5010dd5..3e3448e 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/RevisionParser.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/RevisionParser.java
@@ -115,7 +115,7 @@
 
       StringBuilder b = new StringBuilder();
       boolean first = true;
-      for (String part : Paths.SPLITTER.split(path)) {
+      for (String part : PathUtil.SPLITTER.split(path)) {
         if (part.isEmpty()) {
           return null; // No valid revision contains empty segments.
         }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/TreeSoyData.java b/gitiles-servlet/src/main/java/com/google/gitiles/TreeSoyData.java
index 0b275e0..4bef0f8 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/TreeSoyData.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/TreeSoyData.java
@@ -62,7 +62,7 @@
   static final int MAX_SYMLINK_SIZE = 16 << 10;
 
   static String resolveTargetUrl(GitilesView view, String target) {
-    String resolved = Paths.simplifyPathUpToRoot(target, view.getPathPart());
+    String resolved = PathUtil.simplifyPathUpToRoot(target, view.getPathPart());
     if (resolved == null) {
       return null;
     }
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/PathsTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/PathsTest.java
index 4e566e2..11725ae 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/PathsTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/PathsTest.java
@@ -14,7 +14,7 @@
 
 package com.google.gitiles;
 
-import static com.google.gitiles.Paths.simplifyPathUpToRoot;
+import static com.google.gitiles.PathUtil.simplifyPathUpToRoot;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
 
@@ -22,7 +22,7 @@
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
-/** Tests for {@link Paths}. */
+/** Tests for {@link PathUtil}. */
 @RunWith(JUnit4.class)
 public class PathsTest {
   @Test
