             scroller.addEventListener(TouchScrollEvent.TOUCH_SCROLL_THROW_ANIMATION_END, scroller_touchScrollThrowAnimationEnd);
             scroller.dispatchEvent(scrollEndAndThrowEvent);
         }
+        else
+        {
+            isScrolling = false;
+
+            // don't do anything
+            scrollEndEvent = new TouchScrollEvent(TouchScrollEvent.TOUCH_SCROLL_END);
+            scrollEndEvent.scrollingObject = scroller;
+            scroller.dispatchEvent(scrollEndEvent);
+        }
         
         // if we own this user gesture, don't let others see this event
 //        if (isScrolling)

            isScrolling = false;
            
            // don't do anything
            var scrollEndEvent:TouchScrollEvent = new TouchScrollEvent(TouchScrollEvent.TOUCH_SCROLL_END);
            scrollEndEvent.scrollingObject = scroller;
            scroller.dispatchEvent(scrollEndEvent);
            return;
        }
        
        
        var velocities:Vector.<Point> = calculateVelocity(clickHistory, timeHistory);
        
        var velocityWeights:Vector.<Number> = Vector.<Number>([1,1.33,1.66,2]);

        lastVelocity.x /= lastTime;
        lastVelocity.y /= lastTime;
        
        var scrollEndEvent:TouchScrollEvent;
        
        // FIXME (rfrishbe): should be minXVelocity, minYVelocity, minDiagonalVelocity
        // FIXME (rfrishbe): this should be parameterized better
        if ( (lastTime >= 3*averageTime) &&
