         super.touchesCancelled(touches, withEvent: event)
 
         if inProgress {
-            currentTouches.removeAll()
-            relativeForces = nil
             state = .Cancelled
         } else {
             currentTouches.subtractInPlace(touches)

    public override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent) {
        super.touchesBegan(touches, withEvent: event)

        relativeForces = nil

        currentTouches.unionInPlace(touches)
        
        //We only start recognizing if *exactly* numberOfTouchesRequired of touches begin simultaneously

        super.touchesEnded(touches, withEvent: event)

        if inProgress {
            state = .Cancelled
        } else {
            currentTouches.subtractInPlace(touches)
        }
    }
    
    public override func reset() {
        currentTouches.removeAll()
        relativeForces = nil
    }
}