 +                    else:
 +                        kwargs[k] = v
 +
-+                print(self, name, args, kwargs)
++                result = object.__getattribute__(self, "_result")
++                if result is not None:
++                    manager()
 +
 +                return getattr(object.__getattribute__(self, "_obj"),
 +                        name)(*args, **kwargs)
 +            return method
 +        
 +        namespace = {}
-+        for name in cls._special_names:
-+            if hasattr(theclass, name):
-+                namespace[name] = make_method(name)
++        for method in cls._special_methods:
++            if hasattr(theclass, method):
++                namespace[method] = make_method(method)
 +        return type("%s(%s)" % (cls.__name__, theclass.__name__), (cls,),
 +                namespace)
 +    
-+    def __new__(cls, obj, *args, **kwargs):
++    def __new__(cls, obj, manager=None, *args, **kwargs):
 +        """
 +        creates an proxy instance referencing `obj`. (obj, *args, **kwargs) are
 +        passed to this class" __init__, so deriving classes can define an 

     Manager to store the result(s) of an Event Handler's exeuction of some
     Event in the system.
 
@@ -39,90 +166,31 @@
     :param onSet: The channel used when triggering ValueChagned events.
     :type  onSet: A (channel, target) tuple.
 

+        print(instance)
+        print(value)
+
+        if isinstance(value, instance):
+            instance._parent = value
+
+        self._value = value
+
+        def notify(o, v):
+            if not isinstance(v, Result) and v is not None:
+                o.done = True
+                if o.manager is not None and o.onSet is not None:
+                    o.manager.fireEvent(ValueChanged(o), *o.onSet)
+            elif isinstance(v, Result):
+                o.done = v.done
+                o.errors = v.errors
+            if not o._parent == o:
+                o._parent.done = o.done
+                o._parent.errors = o.errors
+                notify(o._parent, v)
+        
+        notify(self, value)
+
+class Result(object):
+    """Create a new Result Object
