diff --git a/extensions/servlet/src/com/google/inject/servlet/FiltersModuleBuilder.java b/extensions/servlet/src/com/google/inject/servlet/FiltersModuleBuilder.java
index d7f0e06..b593a12 100755
--- a/extensions/servlet/src/com/google/inject/servlet/FiltersModuleBuilder.java
+++ b/extensions/servlet/src/com/google/inject/servlet/FiltersModuleBuilder.java
@@ -91,32 +91,32 @@
     }
 
     public void through(Class<? extends Filter> filterKey,
-        Map<String, String> contextParams) {
+        Map<String, String> initParams) {
       
       // Careful you don't accidentally make this method recursive, thank you IntelliJ IDEA!
-      through(Key.get(filterKey), contextParams);
+      through(Key.get(filterKey), initParams);
     }
 
     public void through(Key<? extends Filter> filterKey,
-        Map<String, String> contextParams) {
-      through(filterKey, contextParams, null);
+        Map<String, String> initParams) {
+      through(filterKey, initParams, null);
     }
     
     private void through(Key<? extends Filter> filterKey,
-        Map<String, String> contextParams,
+        Map<String, String> initParams,
         Filter filterInstance) {
       for (String pattern : uriPatterns) {
         filterDefinitions.add(
             new FilterDefinition(pattern, filterKey, UriPatternType.get(uriPatternType, pattern),
-                contextParams, filterInstance));
+                initParams, filterInstance));
       }
     }
 
     public void through(Filter filter,
-        Map<String, String> contextParams) {
+        Map<String, String> initParams) {
       Key<Filter> filterKey = Key.get(Filter.class, UniqueAnnotations.create());
       filterInstanceEntries.add(new FilterInstanceBindingEntry(filterKey, filter));
-      through(filterKey, contextParams, filter);
+      through(filterKey, initParams, filter);
     }
   }
 }
diff --git a/extensions/servlet/src/com/google/inject/servlet/ServletModule.java b/extensions/servlet/src/com/google/inject/servlet/ServletModule.java
index f75659f..cba529d 100644
--- a/extensions/servlet/src/com/google/inject/servlet/ServletModule.java
+++ b/extensions/servlet/src/com/google/inject/servlet/ServletModule.java
@@ -273,9 +273,9 @@
     void through(Class<? extends Filter> filterKey);
     void through(Key<? extends Filter> filterKey);
     void through(Filter filter);
-    void through(Class<? extends Filter> dummyFilterClass, Map<String, String> contextParams);
-    void through(Key<? extends Filter> dummyFilterClass, Map<String, String> contextParams);
-    void through(Filter filter, Map<String, String> contextParams);
+    void through(Class<? extends Filter> filterKey, Map<String, String> initParams);
+    void through(Key<? extends Filter> filterKey, Map<String, String> initParams);
+    void through(Filter filter, Map<String, String> initParams);
   }
 
   /**
@@ -287,8 +287,8 @@
     void with(Class<? extends HttpServlet> servletKey);
     void with(Key<? extends HttpServlet> servletKey);
     void with(HttpServlet servlet);
-    void with(Class<? extends HttpServlet> servletKey, Map<String, String> contextParams);
-    void with(Key<? extends HttpServlet> servletKey, Map<String, String> contextParams);
-    void with(HttpServlet servlet, Map<String, String> contextParams);
+    void with(Class<? extends HttpServlet> servletKey, Map<String, String> initParams);
+    void with(Key<? extends HttpServlet> servletKey, Map<String, String> initParams);
+    void with(HttpServlet servlet, Map<String, String> initParams);
   }
 }
diff --git a/extensions/servlet/src/com/google/inject/servlet/ServletsModuleBuilder.java b/extensions/servlet/src/com/google/inject/servlet/ServletsModuleBuilder.java
index 7e125dc..3c14237 100755
--- a/extensions/servlet/src/com/google/inject/servlet/ServletsModuleBuilder.java
+++ b/extensions/servlet/src/com/google/inject/servlet/ServletsModuleBuilder.java
@@ -101,30 +101,30 @@
     }
 
     public void with(Class<? extends HttpServlet> servletKey,
-        Map<String, String> contextParams) {
-      with(Key.get(servletKey), contextParams);
+        Map<String, String> initParams) {
+      with(Key.get(servletKey), initParams);
     }
 
     public void with(Key<? extends HttpServlet> servletKey,
-        Map<String, String> contextParams) {
-      with(servletKey, contextParams, null);
+        Map<String, String> initParams) {
+      with(servletKey, initParams, null);
     }
     
     private void with(Key<? extends HttpServlet> servletKey,
-        Map<String, String> contextParams,
+        Map<String, String> initParams,
         HttpServlet servletInstance) {
       for (String pattern : uriPatterns) {
         servletDefinitions.add(
             new ServletDefinition(pattern, servletKey, UriPatternType.get(uriPatternType, pattern),
-                contextParams, servletInstance));
+                initParams, servletInstance));
       }
     }
 
     public void with(HttpServlet servlet,
-        Map<String, String> contextParams) {
+        Map<String, String> initParams) {
       Key<HttpServlet> servletKey = Key.get(HttpServlet.class, UniqueAnnotations.create());
       servletInstanceEntries.add(new ServletInstanceBindingEntry(servletKey, servlet));
-      with(servletKey, contextParams, servlet);
+      with(servletKey, initParams, servlet);
     }
   }
 }
