Index: src/FluentNHibernate/AutoMap/AutoPersistenceModel.cs
===================================================================
--- src/FluentNHibernate/AutoMap/AutoPersistenceModel.cs	(revision 66)
+++ src/FluentNHibernate/AutoMap/AutoPersistenceModel.cs	(working copy)
@@ -41,35 +41,47 @@
             if (assemblyContainingMaps != null)
                 addMappingsFromAssembly(assemblyContainingMaps);
 
-            foreach (var obj in entityAssembly.GetTypes())
+            foreach (var type in entityAssembly.GetTypes())
             {
-                if (shouldIncludeType.Invoke(obj))
+                if (shouldIncludeType.Invoke(type))
                 {
-                    // Find the map that already exists
-                    var findMapMethod = typeof(AutoPersistenceModel).GetMethod("FindMapping");
-                    var genericFindMapMethod = findMapMethod.MakeGenericMethod(obj);
-                    var mapping = genericFindMapMethod.Invoke(this, null);
+                    var mapping = FindMapping(type);
 
                     if (mapping != null)
-                    {
-                        // Merge Mappings together
-                        var findAutoMapMethod = typeof(AutoMapper).GetMethod("MergeMap");
-                        var genericfindAutoMapMethod = findAutoMapMethod.MakeGenericMethod(obj);
-                        genericfindAutoMapMethod.Invoke(autoMap, new[] { mapping });
-                    }
+                        MergeMap(type, mapping);
                     else
-                    {
-                        //Auto magically map the entity
-                        var findAutoMapMethod = typeof(AutoMapper).GetMethod("Map", new Type[0]);
-                        var genericfindAutoMapMethod = findAutoMapMethod.MakeGenericMethod(obj);
-                        addMapping((IMapping)genericfindAutoMapMethod.Invoke(autoMap, null));
-                    }
+                        AddMapping(type);
                 }
             }
 
             base.Configure(configuration);
         }
 
+        #region Configuation Helpers
+
+        private object AddMapping(Type type)
+        {
+            var mapping = InvocationHelper.InvokeGenericMethodWithDynamicTypeArguments(
+                autoMap, a => a.Map<object>(), null, type);
+            addMapping((IMapping)mapping);
+            return mapping;
+        }
+
+        private void MergeMap(Type type, object mapping)
+        {
+            InvocationHelper.InvokeGenericMethodWithDynamicTypeArguments(
+                autoMap, a => a.MergeMap<object>(null), new[] { mapping }, type);
+        }
+
+        private object FindMapping(Type type)
+        {
+            var mapping = InvocationHelper.InvokeGenericMethodWithDynamicTypeArguments(
+                this, a => a.FindMapping<object>(), null, type);
+            return mapping;
+        }
+
+        #endregion
+
         public AutoPersistenceModel()
         {
             autoMap = new AutoMapper(Conventions);
Index: src/FluentNHibernate/ReflectionHelper.cs
===================================================================
--- src/FluentNHibernate/ReflectionHelper.cs	(revision 66)
+++ src/FluentNHibernate/ReflectionHelper.cs	(working copy)
@@ -89,5 +89,31 @@
 			return methodCall.Method;
 		}
 
+        public static MethodInfo GetMethod(Expression<Func<object>> expression)
+        {
+            MethodCallExpression methodCall = (MethodCallExpression)expression.Body;
+            return methodCall.Method;
+        }
 	}
+
+    public static class InvocationHelper
+    {
+        public static object InvokeGenericMethodWithDynamicTypeArguments<T>(T target, Expression<Func<T, object>> expression, object[] methodArguments, params Type[] typeArguments)
+        {
+            var methodInfo = ReflectionHelper.GetMethod(expression);
+            if (methodInfo.GetGenericArguments().Length != typeArguments.Length)
+                throw new ArgumentException(
+                    string.Format("The method '{0}' has {1} type argument(s) but {2} type argument(s) were passed. The amounts must be equal.",
+                    methodInfo.Name,
+                    methodInfo.GetGenericArguments().Length,
+                    typeArguments.Length));
+
+            return methodInfo
+                .GetGenericMethodDefinition()
+                .MakeGenericMethod(typeArguments)
+                .Invoke(target, methodArguments);
+        }
+    }
+
+    
 }
