   
   final private func internalTouchesBegan(touches: [UITouch], withEvent event: UIEvent) {
     for component in self.components { if component.isEnabled { component.touchesBegan?(touches, withEvent: event) } }
-//    for child in self.childNodes     { child.internalTouchesBegan(touches, withEvent: event) }
-    
-  }
-  
-   override public func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
+    //    for child in self.childNodes     { child.internalTouchesBegan(touches, withEvent: event) }
+    
+  }
+  
+  override public func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
     let touchesList:[UITouch] = touches.allObjects as [UITouch]
     self.internalTouchesBegan(touchesList, withEvent: event)
   }
-
+  
 }
 
 extension SKNode {

  public func didEndContact(contact: SKPhysicsContact) {
    super.internalDidEndContact(contact)
  }

  
  public func didMoveToView(view: SKView) {
    self.physicsWorld.contactDelegate = self
  }

  public func willMoveFromView(view: SKView) {
    
  }
  


}

extension SKNode {
  
  final private func internalUpdate(currentTime: NSTimeInterval) {
    for component in self.components { if component.isEnabled { component.didUpdate?(currentTime) } }
    for child in self.childNodes     { child.internalUpdate(currentTime) }
  }

  final private func internalDidEvaluateActions() {
    for component in self.components { if component.isEnabled { component.didEvaluateActions?() } }
    for child in self.childNodes     { child.internalDidEvaluateActions()  }
  }
  
  final private func internalDidSimulatePhysics() {
    for component in self.components { if component.isEnabled { component.didSimulatePhysics?() } }
    for child in self.childNodes     { child.internalDidSimulatePhysics()  }
  }
  
  /* Constraints
  
  */

  final private func internalDidFinishUpdate() {
    for component in self.components { if component.isEnabled  { component.didFinishUpdate?() } }
    for child in self.childNodes     { child.internalDidFinishUpdate()  }
    
  }

  final private func tupleForContact(contact: SKPhysicsContact) -> (allComponents: [Component], allNodes: [SKNode]) {
    let nodeA = contact.bodyA.node
    let nodeB = contact.bodyB.node

final private class SharedComponentManager {
  let mapTable:NSMapTable = NSMapTable(keyOptions: NSPointerFunctionsOpaquePersonality|NSPointerFunctionsWeakMemory, valueOptions: NSPointerFunctionsStrongMemory)
  class var sharedInstance : SharedComponentManager {
    struct Static {
      static var onceToken : dispatch_once_t = 0
      static var instance : SharedComponentManager? = nil
    }
    dispatch_once(&Static.onceToken) {
      
