diff --git a/extensions/servlet/src/com/google/inject/servlet/InternalServletModule.java b/extensions/servlet/src/com/google/inject/servlet/InternalServletModule.java
index cbbc912..c0a9669 100644
--- a/extensions/servlet/src/com/google/inject/servlet/InternalServletModule.java
+++ b/extensions/servlet/src/com/google/inject/servlet/InternalServletModule.java
@@ -91,6 +91,7 @@
     bind(FilterPipeline.class).to(ManagedFilterPipeline.class).asEagerSingleton();
 
     bind(ServletContext.class).toProvider(BackwardsCompatibleServletContextProvider.class);
+    bind(BackwardsCompatibleServletContextProvider.class);
   }
 
   @Provides @RequestScoped HttpServletRequest provideHttpServletRequest() {
diff --git a/extensions/servlet/test/com/google/inject/servlet/ExtensionSpiTest.java b/extensions/servlet/test/com/google/inject/servlet/ExtensionSpiTest.java
index 2e5c693..e6ca1cf 100644
--- a/extensions/servlet/test/com/google/inject/servlet/ExtensionSpiTest.java
+++ b/extensions/servlet/test/com/google/inject/servlet/ExtensionSpiTest.java
@@ -37,22 +37,22 @@
 
 /**
  * A very basic test that servletmodule works with bindings.
- * 
+ *
  * @author sameb@google.com (Sam Berlin)
  */
 public class ExtensionSpiTest extends TestCase {
-  
+
   private DummyFilterImpl dummyFilter1 = new DummyFilterImpl();
   private DummyFilterImpl dummyFilter2 = new DummyFilterImpl();
   private DummyFilterImpl dummyFilter3 = new DummyFilterImpl();
   private DummyFilterImpl dummyFilter4 = new DummyFilterImpl();
-  
+
   private DummyServlet dummyServlet1 = new DummyServlet();
   private DummyServlet dummyServlet2 = new DummyServlet();
   private DummyServlet dummyServlet3 = new DummyServlet();
   private DummyServlet dummyServlet4 = new DummyServlet();
-  
-  public final void testSpiOnElements() {    
+
+  public final void testSpiOnElements() {
     ServletSpiVisitor visitor = new ServletSpiVisitor(false);
     int count = 0;
     for(Element element : Elements.getElements(new Module())) {
@@ -62,7 +62,7 @@
     }
     validateVisitor(visitor);
   }
-  
+
   public final void testSpiOnInjector() {
     ServletSpiVisitor visitor = new ServletSpiVisitor(true);
     int count = 0;
@@ -72,10 +72,10 @@
     }
     validateVisitor(visitor);
   }
-  
+
   private void validateVisitor(ServletSpiVisitor visitor) {
     assertEquals(48, visitor.currentCount - visitor.otherCount);
-    
+
     // This is the expected param list, in order..
     List<Params> expected = ImmutableList.of(
         new Params("/class", Key.get(DummyFilterImpl.class), ImmutableMap.of(), SERVLET),
@@ -90,7 +90,7 @@
         new Params("/key/keyvalues/2", Key.get(DummyFilterImpl.class, Names.named("foo")), ImmutableMap.of("key", "value"), SERVLET),
         new Params("/instance/keyvalues", dummyFilter2, ImmutableMap.of("key", "value"), SERVLET),
         new Params("/instance/keyvalues/2", dummyFilter2, ImmutableMap.of("key", "value"), SERVLET),
-        
+
         new Params("/class[0-9]", Key.get(DummyFilterImpl.class), ImmutableMap.of(), REGEX),
         new Params("/class[0-9]/2", Key.get(DummyFilterImpl.class), ImmutableMap.of(), REGEX),
         new Params("/key[0-9]", Key.get(DummyFilterImpl.class, Names.named("foo")), ImmutableMap.of(), REGEX),
@@ -103,7 +103,7 @@
         new Params("/key[0-9]/keyvalues/2", Key.get(DummyFilterImpl.class, Names.named("foo")), ImmutableMap.of("key", "value"), REGEX),
         new Params("/instance[0-9]/keyvalues", dummyFilter4, ImmutableMap.of("key", "value"), REGEX),
         new Params("/instance[0-9]/keyvalues/2", dummyFilter4, ImmutableMap.of("key", "value"), REGEX),
-        
+
         new Params("/class", Key.get(DummyServlet.class), ImmutableMap.of(), SERVLET),
         new Params("/class/2", Key.get(DummyServlet.class), ImmutableMap.of(), SERVLET),
         new Params("/key", Key.get(DummyServlet.class, Names.named("foo")), ImmutableMap.of(), SERVLET),
@@ -116,7 +116,7 @@
         new Params("/key/keyvalues/2", Key.get(DummyServlet.class, Names.named("foo")), ImmutableMap.of("key", "value"), SERVLET),
         new Params("/instance/keyvalues", dummyServlet2, ImmutableMap.of("key", "value"), SERVLET),
         new Params("/instance/keyvalues/2", dummyServlet2, ImmutableMap.of("key", "value"), SERVLET),
-        
+
         new Params("/class[0-9]", Key.get(DummyServlet.class), ImmutableMap.of(), REGEX),
         new Params("/class[0-9]/2", Key.get(DummyServlet.class), ImmutableMap.of(), REGEX),
         new Params("/key[0-9]", Key.get(DummyServlet.class, Names.named("foo")), ImmutableMap.of(), REGEX),
@@ -130,7 +130,7 @@
         new Params("/instance[0-9]/keyvalues", dummyServlet4, ImmutableMap.of("key", "value"), REGEX),
         new Params("/instance[0-9]/keyvalues/2", dummyServlet4, ImmutableMap.of("key", "value"), REGEX)
     );
-    
+
     assertEquals(expected.size(), visitor.actual.size());
     Iterator<Params> actualIterator = visitor.actual.iterator();
     int i = 0;
@@ -142,6 +142,8 @@
   private class Module extends ServletModule {
     @Override
     protected void configureServlets() {
+      binder().requireExplicitBindings();
+
       filter("/class", "/class/2").through(DummyFilterImpl.class);
       filter("/key", "/key/2").through(
           Key.get(DummyFilterImpl.class, Names.named("foo")));
@@ -186,6 +188,5 @@
       serveRegex("/instance[0-9]/keyvalues", "/instance[0-9]/keyvalues/2").with(
           dummyServlet4, ImmutableMap.of("key", "value"));
     }
-  };
-  
+  }
 }
diff --git a/extensions/servlet/test/com/google/inject/servlet/ServletSpiVisitor.java b/extensions/servlet/test/com/google/inject/servlet/ServletSpiVisitor.java
index c155cf3..cddb85d 100644
--- a/extensions/servlet/test/com/google/inject/servlet/ServletSpiVisitor.java
+++ b/extensions/servlet/test/com/google/inject/servlet/ServletSpiVisitor.java
@@ -42,49 +42,50 @@
 
 /**
  * A visitor for testing the servlet SPI extension.
- * 
+ *
  * @author sameb@google.com (Sam Berlin)
  */
 class ServletSpiVisitor
     extends DefaultBindingTargetVisitor<Object, Integer>
     implements ServletModuleTargetVisitor<Object, Integer> {
-  
+
   int otherCount = 0;
   int currentCount = 0;
   List<Params> actual = Lists.newArrayList();
-  
+
   /* The set of classes that are allowed to be "other" bindings. */
   Set<Class> allowedClasses;
-  
+
   ServletSpiVisitor(boolean forInjector) {
     ImmutableSet.Builder<Class> builder = ImmutableSet.builder();
     // always ignore these things...
     builder.add(ServletRequest.class,
         ServletResponse.class, ManagedFilterPipeline.class, ManagedServletPipeline.class,
         FilterPipeline.class, ServletContext.class, HttpServletRequest.class, Filter.class,
-        HttpServletResponse.class, HttpSession.class, Map.class, HttpServlet.class);
+        HttpServletResponse.class, HttpSession.class, Map.class, HttpServlet.class,
+        InternalServletModule.BackwardsCompatibleServletContextProvider.class);
     if(forInjector) {
       // only ignore these if this is for the live injector, any other time it'd be an error!
       builder.add(Injector.class, Stage.class, Logger.class);
     }
     this.allowedClasses = builder.build();
   }
-  
+
   public Integer visit(InstanceFilterBinding binding) {
     actual.add(new Params(binding, binding.getFilterInstance()));
     return currentCount++;
   }
-  
+
   public Integer visit(InstanceServletBinding binding) {
     actual.add(new Params(binding, binding.getServletInstance()));
     return currentCount++;
   }
-  
+
   public Integer visit(LinkedFilterBinding binding) {
     actual.add(new Params(binding, binding.getLinkedKey()));
     return currentCount++;
   }
-  
+
   public Integer visit(LinkedServletBinding binding) {
     actual.add(new Params(binding, binding.getLinkedKey()));
     return currentCount++;
@@ -98,27 +99,27 @@
     otherCount++;
     return currentCount++;
   }
-  
+
   static class Params {
     private final String pattern;
     private final Object keyOrInstance;
     private final Map<String, String> params;
     private final UriPatternType patternType;
-    
+
     Params(ServletModuleBinding binding, Object keyOrInstance) {
       this.pattern = binding.getPattern();
       this.keyOrInstance = keyOrInstance;
       this.params = binding.getInitParams();
       this.patternType = binding.getUriPatternType();
     }
-    
+
     Params(String pattern, Object keyOrInstance, Map params, UriPatternType patternType) {
       this.pattern = pattern;
       this.keyOrInstance = keyOrInstance;
       this.params = params;
       this.patternType = patternType;
     }
-    
+
     @Override
     public boolean equals(Object obj) {
       if(obj instanceof Params) {
@@ -136,7 +137,7 @@
     public int hashCode() {
       return Objects.hashCode(pattern, keyOrInstance, params, patternType);
     }
-    
+
     @Override
     public String toString() {
       return Objects.toStringHelper(Params.class)
