diff --git a/hshetl/__init__.py b/hshetl/__init__.py
index bd49b071a20e9e4986d6d783788aa2128d7212f6..d7c43e00df9034f35dc9faadaafb4dfe6ca5a66c 100644
--- a/hshetl/__init__.py
+++ b/hshetl/__init__.py
@@ -81,7 +81,7 @@ class ConfigurationArgumentMatcher(object):
             try:
                 return fn(*args, **kwargs)
             except TypeError, te:
-                possible, required = self.get_constructor_arguments(args[0].__class__)
+                possible, required, _ = self.get_constructor_arguments(args[0].__class__)
                 missed = required.difference(kwargs)
                 invalid = set(kwargs) - possible
                 msg = 'The class {} with yaml tag {} requires the following parameters:\n{}\nand has the optional parameters:\n{}\n'
@@ -108,6 +108,7 @@ class ConfigurationArgumentMatcher(object):
             '''
             possible_args = []
             required_args = []
+            default_values = {}
             mro = clas.__mro__
             for cls in mro:
                 init_fn = cls.__init__
@@ -120,13 +121,15 @@ class ConfigurationArgumentMatcher(object):
                 np_args, _, _, defaults = inspect.getargspec(init_fn)
                 if defaults:
                     nr_args = np_args[:-len(defaults)]
+                    for i, d in enumerate(defaults):
+                        default_values.setdefault(np_args[-(len(defaults) - i)], d)
                 else:
                     nr_args = np_args
                 required_args.extend(nr_args)
                 possible_args.extend(np_args)
                 if 'self' in possible_args: possible_args.remove('self')
                 if 'self' in required_args: required_args.remove('self')
-            return set(possible_args), set(required_args)
+            return set(possible_args), set(required_args), default_values
 
 
 class NameResolver(object):