diff --git a/java/com/google/gitiles/DescribeServlet.java b/java/com/google/gitiles/DescribeServlet.java
index c3b178e..ffe143b 100644
--- a/java/com/google/gitiles/DescribeServlet.java
+++ b/java/com/google/gitiles/DescribeServlet.java
@@ -81,7 +81,7 @@
     try {
       return repo.resolve(rev);
     } catch (RevisionSyntaxException e) {
-      throw new GitilesRequestFailureException(FailureReason.INCORECT_PARAMETER, e)
+      throw new GitilesRequestFailureException(FailureReason.INCORRECT_PARAMETER, e)
           .withPublicErrorMessage(
               "Invalid revision syntax: %s", RefServlet.sanitizeRefForText(rev));
     } catch (AmbiguousObjectException e) {
@@ -95,7 +95,7 @@
   private @Nullable String describe(Repository repo, GitilesView view, HttpServletRequest req)
       throws IOException {
     if (!getBooleanParam(view, CONTAINS_PARAM)) {
-      throw new GitilesRequestFailureException(FailureReason.INCORECT_PARAMETER);
+      throw new GitilesRequestFailureException(FailureReason.INCORRECT_PARAMETER);
     }
     ObjectId id = resolve(repo, view);
     if (id == null) {
diff --git a/java/com/google/gitiles/GitilesRequestFailureException.java b/java/com/google/gitiles/GitilesRequestFailureException.java
index c4fd48a..407c5e8 100644
--- a/java/com/google/gitiles/GitilesRequestFailureException.java
+++ b/java/com/google/gitiles/GitilesRequestFailureException.java
@@ -131,7 +131,7 @@
     /** Cannot parse URL as a Gitiles URL. */
     CANNOT_PARSE_GITILES_VIEW(SC_NOT_FOUND, "Cannot parse URL as a Gitiles URL"),
     /** URL parameters are not valid. */
-    INCORECT_PARAMETER(SC_BAD_REQUEST, "URL parameters are not valid"),
+    INCORRECT_PARAMETER(SC_BAD_REQUEST, "URL parameters are not valid"),
     /**
      * The object specified by the URL is not suitable for the view (e.g. trying to show a blob as a
      * tree).
diff --git a/java/com/google/gitiles/RefServlet.java b/java/com/google/gitiles/RefServlet.java
index 0df7323..1352971 100644
--- a/java/com/google/gitiles/RefServlet.java
+++ b/java/com/google/gitiles/RefServlet.java
@@ -59,7 +59,7 @@
   @Override
   protected void doGetHtml(HttpServletRequest req, HttpServletResponse res) throws IOException {
     if (!ViewFilter.getView(req).getPathPart().isEmpty()) {
-      throw new GitilesRequestFailureException(FailureReason.INCORECT_PARAMETER);
+      throw new GitilesRequestFailureException(FailureReason.INCORRECT_PARAMETER);
     }
     List<Map<String, Object>> tags;
     try (RevWalk walk = new RevWalk(ServletUtils.getRepository(req))) {
diff --git a/javatests/com/google/gitiles/DefaultErrorHandlingFilterTest.java b/javatests/com/google/gitiles/DefaultErrorHandlingFilterTest.java
index 0dc152a..81d11db 100644
--- a/javatests/com/google/gitiles/DefaultErrorHandlingFilterTest.java
+++ b/javatests/com/google/gitiles/DefaultErrorHandlingFilterTest.java
@@ -38,7 +38,7 @@
 
     assertThat(resp.getStatus()).isEqualTo(SC_BAD_REQUEST);
     assertThat(resp.getHeader(DefaultErrorHandlingFilter.GITILES_ERROR))
-        .isEqualTo("INCORECT_PARAMETER");
+        .isEqualTo("INCORRECT_PARAMETER");
   }
 
   private static class TestServlet extends HttpServlet {
@@ -46,7 +46,7 @@
 
     @Override
     protected void doGet(HttpServletRequest req, HttpServletResponse res) {
-      throw new GitilesRequestFailureException(FailureReason.INCORECT_PARAMETER);
+      throw new GitilesRequestFailureException(FailureReason.INCORRECT_PARAMETER);
     }
   }
 }
