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 a38c463..2534d82 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/ArchiveServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/ArchiveServlet.java
@@ -64,7 +64,7 @@
 
     ArchiveFormat format = byExt.get(view.getExtension());
     String filename = getFilename(view, rev, view.getExtension());
-    setDownloadHeaders(req, res, filename, format.getMimeType());
+    setDownloadHeaders(res, filename, format.getMimeType());
     res.setStatus(SC_OK);
 
     try {
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 12efb2c..986689c 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
@@ -128,7 +128,7 @@
    * @param res in-progress response.
    */
   protected void doGetHtml(HttpServletRequest req, HttpServletResponse res)
-      throws IOException, ServletException {
+      throws IOException {
     res.sendError(SC_BAD_REQUEST);
   }
 
@@ -139,7 +139,7 @@
    * @param res in-progress response.
    */
   protected void doGetText(HttpServletRequest req, HttpServletResponse res)
-      throws IOException, ServletException {
+      throws IOException {
     res.sendError(SC_BAD_REQUEST);
   }
 
@@ -150,7 +150,7 @@
    * @param res in-progress response.
    */
   protected void doGetJson(HttpServletRequest req, HttpServletResponse res)
-      throws IOException, ServletException {
+      throws IOException {
     res.sendError(SC_BAD_REQUEST);
   }
 
@@ -175,16 +175,17 @@
    *
    * @param req in-progress request.
    * @param res in-progress response.
-   * @param key key.
    * @param templateName Soy template name; must be in one of the template files
-   *     defined in {@link Renderer#SOY_FILENAMES}.
+   *     defined in {@link Renderer}.
+   * @param soyData data for Soy.
+   * @throws IOException an error occurred during rendering.
    */
   protected void renderHtml(HttpServletRequest req, HttpServletResponse res, String templateName,
       Map<String, ?> soyData) throws IOException {
     try {
       res.setContentType(FormatType.HTML.getMimeType());
       res.setCharacterEncoding(Charsets.UTF_8.name());
-      setCacheHeaders(req, res);
+      setCacheHeaders(res);
 
       Map<String, Object> allData = getData(req);
       allData.putAll(soyData);
@@ -213,7 +214,7 @@
    */
   protected void renderJson(HttpServletRequest req, HttpServletResponse res, Object src,
       Type typeOfSrc) throws IOException {
-    setApiHeaders(req, res, JSON);
+    setApiHeaders(res, JSON);
     res.setStatus(SC_OK);
 
     PrintWriter writer = res.getWriter();
@@ -244,7 +245,7 @@
    */
   protected PrintWriter startRenderText(HttpServletRequest req, HttpServletResponse res)
       throws IOException {
-    setApiHeaders(req, res, TEXT);
+    setApiHeaders(res, TEXT);
     return res.getWriter();
   }
 
@@ -261,29 +262,28 @@
   protected void renderTextError(HttpServletRequest req, HttpServletResponse res, int statusCode,
       String message) throws IOException {
     res.setStatus(statusCode);
-    setApiHeaders(req, res, TEXT);
-    setCacheHeaders(req, res);
+    setApiHeaders(res, TEXT);
+    setCacheHeaders(res);
     PrintWriter out = res.getWriter();
     out.write(message);
     out.close();
   }
 
-  protected void setCacheHeaders(HttpServletRequest req, HttpServletResponse res) {
+  protected void setCacheHeaders(HttpServletResponse res) {
     setNotCacheable(res);
   }
 
-  protected void setApiHeaders(HttpServletRequest req, HttpServletResponse res, FormatType type) {
+  protected void setApiHeaders(HttpServletResponse res, FormatType type) {
     res.setContentType(type.getMimeType());
     res.setCharacterEncoding(Charsets.UTF_8.name());
     res.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment");
     res.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, "*");
-    setCacheHeaders(req, res);
+    setCacheHeaders(res);
   }
 
-  protected void setDownloadHeaders(HttpServletRequest req, HttpServletResponse res,
-      String filename, String contentType) {
+  protected void setDownloadHeaders(HttpServletResponse res, String filename, String contentType) {
     res.setContentType(contentType);
     res.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + filename);
-    setCacheHeaders(req, res);
+    setCacheHeaders(res);
   }
 }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java
index c34ef9f..565086c 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java
@@ -99,12 +99,12 @@
       res.setStatus(HttpServletResponse.SC_OK);
       res.setContentType(FormatType.HTML.getMimeType());
       res.setCharacterEncoding(Charsets.UTF_8.name());
-      setCacheHeaders(req, res);
+      setCacheHeaders(res);
 
       OutputStream out = res.getOutputStream();
       try {
         out.write(html[0].getBytes(Charsets.UTF_8));
-        formatHtmlDiff(out, repo, walk, oldTree, newTree, view.getPathPart());
+        formatHtmlDiff(out, repo, oldTree, newTree, view.getPathPart());
         out.write(html[1].getBytes(Charsets.UTF_8));
       } finally {
         out.close();
@@ -139,9 +139,8 @@
   }
 
   private void formatHtmlDiff(OutputStream out,
-      Repository repo, RevWalk walk,
-      AbstractTreeIterator oldTree, AbstractTreeIterator newTree,
-      String path)
+      Repository repo, AbstractTreeIterator oldTree,
+      AbstractTreeIterator newTree, String path)
       throws IOException {
     DiffFormatter diff = new HtmlDiffFormatter(renderer, out);
     try {
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 38ee7e6..3066462 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java
@@ -594,7 +594,7 @@
    * @return a list of maps with "text" and "url" keys for all file paths
    *     leading up to the path represented by this view. All URLs allow
    *     auto-diving into one-entry subtrees; see also
-   *     {@link #getBreadcrumbs(List<Boolean>)}.
+   *     {@link #getBreadcrumbs(List)}.
    */
   public List<Map<String, String>> getBreadcrumbs() {
     return getBreadcrumbs(null);
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 9debef2..8f060f6 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java
@@ -174,7 +174,7 @@
           showFile(req, res, rw, tw, hasSingleTree);
           break;
         case GITLINK:
-          showGitlink(req, res, rw, tw, root, hasSingleTree);
+          showGitlink(req, res, tw, root);
           break;
         default:
           log.error("Bad file type: {}", type);
@@ -189,7 +189,7 @@
   }
 
   private static class AutoDiveFilter extends TreeFilter {
-    /** @see GitilesView#getBreadcrumbs(List<Boolean>) */
+    /** @see GitilesView#getBreadcrumbs(List) */
     List<Boolean> hasSingleTree;
 
     private final byte[] pathRaw;
@@ -376,8 +376,8 @@
     }
   }
 
-  private void showGitlink(HttpServletRequest req, HttpServletResponse res, RevWalk rw,
-      TreeWalk tw, RevTree root, List<Boolean> hasSingleTree) throws IOException {
+  private void showGitlink(HttpServletRequest req, HttpServletResponse res, TreeWalk tw,
+      RevTree root) throws IOException {
     GitilesView view = ViewFilter.getView(req);
     SubmoduleWalk sw = SubmoduleWalk.forPath(ServletUtils.getRepository(req), root,
         view.getPathPart());
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/ViewFilter.java b/gitiles-servlet/src/main/java/com/google/gitiles/ViewFilter.java
index 8e41c06..582daca 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/ViewFilter.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/ViewFilter.java
@@ -132,19 +132,19 @@
     String path = getRegexGroup(req, 3);
 
     if (command.isEmpty()) {
-      return parseNoCommand(req, repoName, path);
+      return parseNoCommand(repoName);
     } else if (command.equals(CMD_ARCHIVE)) {
       return parseArchiveCommand(req, repoName, path);
     } else if (command.equals(CMD_AUTO)) {
       return parseAutoCommand(req, repoName, path);
     } else if (command.equals(CMD_DESCRIBE)) {
-      return parseDescribeCommand(req, repoName, path);
+      return parseDescribeCommand(repoName, path);
     } else if (command.equals(CMD_DIFF)) {
       return parseDiffCommand(req, repoName, path);
     } else if (command.equals(CMD_LOG)) {
       return parseLogCommand(req, repoName, path);
     } else if (command.equals(CMD_REFS)) {
-      return parseRefsCommand(req, repoName, path);
+      return parseRefsCommand(repoName, path);
     } else if (command.equals(CMD_SHOW)) {
       return parseShowCommand(req, repoName, path);
     } else {
@@ -152,8 +152,7 @@
     }
   }
 
-  private GitilesView.Builder parseNoCommand(
-      HttpServletRequest req, String repoName, String path) {
+  private GitilesView.Builder parseNoCommand(String repoName) {
     return GitilesView.repositoryIndex().setRepositoryName(repoName);
   }
 
@@ -198,8 +197,7 @@
     }
   }
 
-  private GitilesView.Builder parseDescribeCommand(
-      HttpServletRequest req, String repoName, String path) {
+  private GitilesView.Builder parseDescribeCommand(String repoName, String path) {
     if (isEmptyOrSlash(path)) {
       return null;
     }
@@ -241,8 +239,7 @@
         .setPathPart(result.getPath());
   }
 
-  private GitilesView.Builder parseRefsCommand(
-      HttpServletRequest req, String repoName, String path) {
+  private GitilesView.Builder parseRefsCommand(String repoName, String path) {
     return GitilesView.refs()
         .setRepositoryName(repoName)
         .setPathPart(path);
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/FakeHttpServletRequest.java b/gitiles-servlet/src/test/java/com/google/gitiles/FakeHttpServletRequest.java
index d073c80..bfb541b 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/FakeHttpServletRequest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/FakeHttpServletRequest.java
@@ -56,8 +56,7 @@
         URLS.getHostName(null),
         80,
         "",
-        SERVLET_PATH,
-        "");
+        SERVLET_PATH);
   }
 
   public static FakeHttpServletRequest newRequest(DfsRepository repo) {
@@ -76,8 +75,8 @@
   private String servletPath;
   private String path;
 
-  private FakeHttpServletRequest(String hostName, int port, String contextPath, String servletPath,
-      String path) {
+  private FakeHttpServletRequest(String hostName, int port, String contextPath,
+      String servletPath) {
     this.hostName = checkNotNull(hostName, "hostName");
     checkArgument(port > 0);
     this.port = port;
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/RefServletTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/RefServletTest.java
index bb9427d..d5f768d 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/RefServletTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/RefServletTest.java
@@ -29,7 +29,7 @@
 
 /** Tests for {@link Linkifier}. */
 public class RefServletTest extends TestCase {
-  private TestRepository<DfsRepository> repo;;
+  private TestRepository<DfsRepository> repo;
   private GitilesServlet servlet;
 
   @Override
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/TestGitilesServlet.java b/gitiles-servlet/src/test/java/com/google/gitiles/TestGitilesServlet.java
index 6b4579a..e7079d3 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/TestGitilesServlet.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/TestGitilesServlet.java
@@ -44,7 +44,7 @@
    * <p>
    * The servlet uses the same filter lists as a real servlet, but only knows
    * about a single repo, having the name returned by
-   * {@link org.eclipse.jgit.storage.dfs.DfsRepositoryDescription#getRepositoryName()}.
+   * {@link org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription#getRepositoryName()}.
    * Pass a {@link FakeHttpServletRequest} and {@link FakeHttpServletResponse}
    * to the servlet's {@code service} method to test.
    *
