   final func internalAddChild(node:SKNode!) {
     if node.parent != self {
       node.removeFromParent()
+      self.addedChild(node);
       self.internalAddChild(node)
-      self.addedChild(node);
     }
     
   }

      component.node = self
      component.isEnabled = true
      component.internalDidAddToNode()
      if self.scene != nil { component.behaviour.didAddNodeToScene?() }
      return true
    }
    else { return false }

  
  final private func setupSubscribers() {
    NSNotificationCenter.defaultCenter().removeObserver(self)
    let center = NSNotificationCenter.defaultCenter()
    
    if self.behaviour.didUpdate? != nil {
      center.addObserver(self, selector: "notificationDidUpdate:", name: "notificationDidUpdate", object: self.node?.scene)
    }
    if self.behaviour.didEvaluateActions? != nil {
      center.addObserver(self, selector: "notificationDidEvaluateActions:", name: "notificationDidEvaluateActions", object: self.node?.scene)
    }
    if self.behaviour.didSimulatePhysics? != nil {
      center.addObserver(self, selector: "notificationDidSimulatePhysics:", name: "notificationDidSimulatePhysics", object: self.node?.scene)
    }
    if self.behaviour.didFinishUpdate? != nil {
      center.addObserver(self, selector: "notificationDidFinishUpdate:", name: "notificationDidFinishUpdate", object: self.node?.scene)
    }
    if self.behaviour.didBeginContact? != nil {
      center.addObserver(self, selector: "notificationDidBeginContact:", name: "notificationDidBeginContact", object: self.node?.scene)
    }
    if self.behaviour.didEndContact? != nil {
      center.addObserver(self, selector: "notificationDidEndContact:", name: "notificationDidEndContact", object: self.node?.scene)
    }
    
    if self.behaviour.didBeginContactWithNode? != nil {
      center.addObserver(self, selector: "notificationDidBeginContactWithNode:", name: "notificationDidBeginContactWithNode", object: self.node)
    }
    if self.behaviour.didEndContactWithNode? != nil {
      center.addObserver(self, selector: "notificationDidBeginContactWithNode:", name: "notificationDidEndContact", object: self.node)
    }


  }
  
  final private func internalDidAddToNode() {
    self.behaviour.didAddToNode?()
  }
  final private func internalDidRemoveFromNode() {
    self.cleanup()
    self.behaviour.didRemoveNodeFromScene?()
  }
  final private func internalDidAddNodeToScene() {
    self.setupSubscribers()
    self.behaviour.didAddNodeToScene?()
  }
  final private func internalDidRemoveNodeFromScene() {
    self.cleanup()
    self.behaviour.didRemoveNodeFromScene?()
  }
  final private func cleanup() {
    NSNotificationCenter.defaultCenter().removeObserver(self)
  }
  
  deinit {
    self.cleanup()
  }
  
}
