diff --git a/core/src/com/google/inject/util/Modules.java b/core/src/com/google/inject/util/Modules.java
index adb4ee4..c166b8e 100644
--- a/core/src/com/google/inject/util/Modules.java
+++ b/core/src/com/google/inject/util/Modules.java
@@ -171,7 +171,7 @@
     @Override
     public void configure() {
       Binder baseBinder = binder();
-      List<Element> baseElements = Elements.getElements(baseModules);
+      List<Element> baseElements = Elements.getElements(currentStage(), baseModules);
 
       // If the sole element was a PrivateElements, we want to override
       // the private elements within that -- so refocus our elements
@@ -191,7 +191,7 @@
       
       final Binder binder = baseBinder.skipSources(this.getClass());
       final LinkedHashSet<Element> elements = new LinkedHashSet<Element>(baseElements);
-      final List<Element> overrideElements = Elements.getElements(overrides);
+      final List<Element> overrideElements = Elements.getElements(currentStage(), overrides);
 
       final Set<Key<?>> overriddenKeys = Sets.newHashSet();
       final Map<Class<? extends Annotation>, ScopeBinding> overridesScopeAnnotations =
diff --git a/core/test/com/google/inject/util/OverrideModuleTest.java b/core/test/com/google/inject/util/OverrideModuleTest.java
index 8de76aa..3b8e05b 100644
--- a/core/test/com/google/inject/util/OverrideModuleTest.java
+++ b/core/test/com/google/inject/util/OverrideModuleTest.java
@@ -37,6 +37,7 @@
 import com.google.inject.Provides;
 import com.google.inject.Scope;
 import com.google.inject.ScopeAnnotation;
+import com.google.inject.Stage;
 import com.google.inject.name.Named;
 import com.google.inject.util.Modules;
 
@@ -657,5 +658,24 @@
       return new Object();
     }
   }
-    
+
+  public void testCorrectStage() {
+    final Stage stage = Stage.PRODUCTION;
+    Module module = Modules.override(new AbstractModule() {
+      @Override
+      protected void configure() {
+        if (currentStage() != Stage.PRODUCTION) {
+          addError("Wronge stage in overridden module:" + currentStage());
+        }
+      }
+    }).with(new AbstractModule() {
+      @Override
+      protected void configure() {
+        if (currentStage() != Stage.PRODUCTION) {
+          addError("Wronge stage in overriding module:" + currentStage());
+        }
+      }
+    });
+    Guice.createInjector(stage, module);
+  }
 }
