 -    private static <T> T withParams(Class<T> cls, Object... params) {
 +    private <T> T withOuterClass(Class<T> cls) {
          try {
--            //this is kind of overengineered because we don't need to support more params
--            //however, I know we will be needing it :)
+             //this is kind of overengineered because we don't need to support more params
+             //however, I know we will be needing it :)
 -            for (Constructor<?> constructor : cls.getDeclaredConstructors()) {
 -                Class<?>[] types = constructor.getParameterTypes();
 -                if (paramsMatch(types, params)) {

diff --git a/src/org/mockito/internal/creation/instance/ConstructorInstantiator.java b/src/org/mockito/internal/creation/instance/ConstructorInstantiator.java
index 9f0201a..f8c0d12 100644
--- a/src/org/mockito/internal/creation/instance/ConstructorInstantiator.java
+++ b/src/org/mockito/internal/creation/instance/ConstructorInstantiator.java
@@ -14,43 +14,20 @@ public class ConstructorInstantiator implements Instantiator {
         if (outerClassInstance == null) {
             return noArgConstructor(cls);
         }

+            Constructor<T> c = cls.getDeclaredConstructor(outerClassInstance.getClass());
+            return c.newInstance(outerClassInstance);
         } catch (Exception e) {
             throw paramsException(cls, e);
         }
-        throw paramsException(cls, null);
     }
 
     private static <T> InstantationException paramsException(Class<T> cls, Exception e) {
@@ -38,17 +33,6 @@ public class ConstructorInstantiator implements Instantiator {
                 + cls.getSimpleName() + "'.\nPlease ensure that the outer instance has correct type and that the target class has parameter-less constructor.", e);
     }
 
-    private static boolean paramsMatch(Class<?>[] types, Object[] params) {
-        if (params.length != types.length) {
-            return false;
