diff --git a/src/com/google/inject/BindingProcessor.java b/src/com/google/inject/BindingProcessor.java
index e3a6d38..0013d74 100644
--- a/src/com/google/inject/BindingProcessor.java
+++ b/src/com/google/inject/BindingProcessor.java
@@ -28,6 +28,7 @@
 import com.google.inject.internal.LinkedProviderBindingImpl;
 import com.google.inject.internal.Lists;
 import com.google.inject.internal.ProviderInstanceBindingImpl;
+import com.google.inject.internal.ProviderMethod;
 import com.google.inject.internal.Scoping;
 import com.google.inject.internal.UntargettedBindingImpl;
 import com.google.inject.spi.BindingTargetVisitor;
@@ -66,7 +67,12 @@
     final Object source = command.getSource();
 
     if (Void.class.equals(command.getKey().getRawType())) {
-      errors.missingConstantValues();
+      if (command instanceof ProviderInstanceBinding
+          && ((ProviderInstanceBinding) command).getProviderInstance() instanceof ProviderMethod) {
+        errors.voidProviderMethod();
+      } else {
+        errors.missingConstantValues();
+      }
       return true;
     }
 
diff --git a/src/com/google/inject/internal/Errors.java b/src/com/google/inject/internal/Errors.java
index fb1a10d..e2ac524 100644
--- a/src/com/google/inject/internal/Errors.java
+++ b/src/com/google/inject/internal/Errors.java
@@ -218,6 +218,10 @@
         annotationType, scope);
   }
 
+  public Errors voidProviderMethod() {
+    return addMessage("Provider methods must return a value. Do not return void.");
+  }
+
   public Errors missingConstantValues() {
     return addMessage("Missing constant value. Please call to(...).");
   }
diff --git a/test/com/google/inject/spi/ProviderMethodsTest.java b/test/com/google/inject/spi/ProviderMethodsTest.java
index 8d1da8f..81d6776 100644
--- a/test/com/google/inject/spi/ProviderMethodsTest.java
+++ b/test/com/google/inject/spi/ProviderMethodsTest.java
@@ -17,7 +17,7 @@
 package com.google.inject.spi;
 
 import com.google.inject.AbstractModule;
-import com.google.inject.Asserts;
+import static com.google.inject.Asserts.assertContains;
 import com.google.inject.Binder;
 import com.google.inject.BindingAnnotation;
 import com.google.inject.CreationException;
@@ -190,7 +190,7 @@
       });
       fail();
     } catch (CreationException expected) {
-      Asserts.assertContains(expected.getMessage(),
+      assertContains(expected.getMessage(),
           "more than one annotation annotated with @BindingAnnotation:", "Named", "Blue",
           "at " + getClass().getName(), ".provideString(ProviderMethodsTest.java:");
     }
@@ -353,4 +353,19 @@
     assertEquals(ProviderMethod.class, provider.getClass());
     assertEquals(methodsObject, ((ProviderMethod) provider).getInstance());
   }
+
+  public void testVoidProviderMethods() {
+    try {
+      Guice.createInjector(new AbstractModule() {
+        protected void configure() {}
+
+        @Provides void provideFoo() {}
+      });
+      fail();
+    } catch (CreationException expected) {
+      assertContains(expected.getMessage(), 
+          "1) Provider methods must return a value. Do not return void.",
+          getClass().getName(), ".provideFoo(ProviderMethodsTest.java:");
+    }
+  }
 }
\ No newline at end of file
