       hasChild: (c) ->
         this._childs.has(c)
 
+      newRoot: () ->
+        trait = THIS.trait(null)
+        leaf  = Object.create this.proto, trait
+        leaf
+
       newChild: () ->
-        child = Object.create Object.prototype, THIS.trait(this)
-        this._childs.add child
-        child
+        trait = THIS.trait(this)
+        leaf  = Object.create this.proto, trait
+        this._childs.add leaf
+        leaf
+    }
+    result.proto   = {
+      enumerable: false,
+      get: () ->
+        proto
     }
     result.root    = {
       enumerable: false



module.exports = T.object {
  trait: (parent, childs) ->
    THIS   = this
    result = T {
      _childs: objset.create childs
      _parent: parent

      isBelow: (other) ->
        p = this.parent

    result.childs = { enumerable: false, get: () -> this._childs.elems }
    result

  create: (childs = []) ->
    trait = this.trait(null, childs)
    Object.create trait.proto.get(), trait
}


