diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/DocServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/DocServlet.java
index 0ef13bd..b6a1b82 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/DocServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/DocServlet.java
@@ -168,7 +168,7 @@
     Map<String, Object> data = new HashMap<>();
     data.putAll(Navbar.bannerSoyData(view, nav));
     data.put("pageTitle", MoreObjects.firstNonNull(
-        MarkdownHelper.getTitle(doc),
+        MarkdownUtil.getTitle(doc),
         view.getPathPart()));
     data.put("sourceUrl", GitilesView.path().copyFrom(view).toUrl());
     data.put("logUrl", GitilesView.log().copyFrom(view).toUrl());
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/GitilesMarkdown.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/GitilesMarkdown.java
index 512d320..e47434a 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/GitilesMarkdown.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/GitilesMarkdown.java
@@ -32,7 +32,7 @@
 
 /** Parses Gitiles extensions to markdown. */
 class GitilesMarkdown extends Parser implements BlockPluginParser {
-  private static final Logger log = LoggerFactory.getLogger(MarkdownHelper.class);
+  private static final Logger log = LoggerFactory.getLogger(MarkdownUtil.class);
 
   // SUPPRESS_ALL_HTML is enabled to permit hosting arbitrary user content
   // while avoiding XSS style HTML, CSS and JavaScript injection attacks.
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownToHtml.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownToHtml.java
index a11c0e2..c1c7d4f 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownToHtml.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownToHtml.java
@@ -15,7 +15,7 @@
 package com.google.gitiles.doc;
 
 import static com.google.common.base.Preconditions.checkState;
-import static com.google.gitiles.doc.MarkdownHelper.getInnerText;
+import static com.google.gitiles.doc.MarkdownUtil.getInnerText;
 
 import com.google.gitiles.GitilesView;
 import com.google.gitiles.doc.html.HtmlBuilder;
@@ -260,7 +260,7 @@
   }
 
   private String href(String url) {
-    if (MarkdownHelper.isAbsolutePathToMarkdown(url)) {
+    if (MarkdownUtil.isAbsolutePathToMarkdown(url)) {
       return GitilesView.doc().copyFrom(view).setPathPart(url).build().toUrl();
     }
     return url;
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownHelper.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownUtil.java
similarity index 91%
rename from gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownHelper.java
rename to gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownUtil.java
index e7566f5..e6a0f00 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownHelper.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownUtil.java
@@ -20,16 +20,16 @@
 import org.pegdown.ast.Node;
 import org.pegdown.ast.TextNode;
 
-public class MarkdownHelper {
+class MarkdownUtil {
   /** Check if anchor URL is like {@code /top.md}. */
-  public static boolean isAbsolutePathToMarkdown(String url) {
+  static boolean isAbsolutePathToMarkdown(String url) {
     return url.length() >= 5
         && url.charAt(0) == '/' && url.charAt(1) != '/'
         && url.endsWith(".md");
   }
 
   /** Combine child nodes as string; this must be escaped for HTML. */
-  public static String getInnerText(Node node) {
+  static String getInnerText(Node node) {
     if (node == null || node.getChildren().isEmpty()) {
       return null;
     }
@@ -66,6 +66,6 @@
     return null;
   }
 
-  private MarkdownHelper() {
+  private MarkdownUtil() {
   }
 }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/Navbar.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/Navbar.java
index 784f990..1f54845 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/Navbar.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/Navbar.java
@@ -43,7 +43,7 @@
       if (n instanceof HeaderNode) {
         HeaderNode h = (HeaderNode) n;
         if (h.getLevel() == 1) {
-          data.put("siteTitle", MarkdownHelper.getInnerText(h));
+          data.put("siteTitle", MarkdownUtil.getInnerText(h));
           i.remove();
           break;
         }
@@ -51,7 +51,7 @@
     }
 
     for (ReferenceNode r : nav.getReferences()) {
-      String key = MarkdownHelper.getInnerText(r);
+      String key = MarkdownUtil.getInnerText(r);
       String url = r.getUrl();
       if ("logo".equalsIgnoreCase(key)) {
         Object src;
@@ -62,7 +62,7 @@
         }
         data.put("logoUrl", src);
       } else if ("home".equalsIgnoreCase(key)) {
-        if (MarkdownHelper.isAbsolutePathToMarkdown(url)) {
+        if (MarkdownUtil.isAbsolutePathToMarkdown(url)) {
           url = GitilesView.doc().copyFrom(view).setPathPart(url).toUrl();
         }
         data.put("homeUrl", url);
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/ReferenceMap.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/ReferenceMap.java
index 65fe86e..4a58ea2 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/ReferenceMap.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/ReferenceMap.java
@@ -14,7 +14,7 @@
 
 package com.google.gitiles.doc;
 
-import static com.google.gitiles.doc.MarkdownHelper.getInnerText;
+import static com.google.gitiles.doc.MarkdownUtil.getInnerText;
 
 import org.pegdown.ast.ReferenceNode;
 import org.pegdown.ast.RootNode;
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/TocFormatter.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/TocFormatter.java
index 5dcfc77..9acf08b 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/TocFormatter.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/TocFormatter.java
@@ -53,7 +53,7 @@
   }
 
   String idFromHeader(HeaderNode header) {
-    String t = MarkdownHelper.getInnerText(header);
+    String t = MarkdownUtil.getInnerText(header);
     return t != null ? idFromTitle(t) : null;
   }
 
@@ -93,7 +93,7 @@
       return;
     }
 
-    String title = MarkdownHelper.getInnerText(h);
+    String title = MarkdownUtil.getInnerText(h);
     if (title == null) {
       return;
     }
