         }
         
         // calculate the velocity using a weighted average
-        var velocities:Vector.<Point> = calculateVelocity(mouseEventCoordinatesHistory, mouseEventTimeHistory);
-        var velocityWeights:Vector.<Number> = Vector.<Number>([1,1.33,1.66,2]);
-        var throwVelocity:Point = averagePoints(velocities, velocityWeights);
+        var throwVelocity:Point = calculateThrowVelocity();
         
         // use ratio of how far they scrolled to scale the velocity
         throwVelocity.x *= movedRatio.x;

        
        // calculate average time b/w events and see if the last two (mouseMove and this mouseUp) 
        // were far apart.  If they were, then don't do anything if the velocity of them is small.
        var averageTime:Number = 0;
        var len:int = mouseEventTimeHistory.length;
        
        // gauranteed to have 2 mouse events b/c atleast a mousedown and a mousemove 
        // because if there was no mousemove, we definitely would not be scrolling and 
        // would have exited this function earlier
        for (var i:int = 0; i < len - 2; i++)
        {
            averageTime += mouseEventTimeHistory[i+1] - mouseEventTimeHistory[i];
        }
        averageTime /= len-2;
        
        // use the amount they've used as well as the velocity to denote how far to throw the list.
        // to do this, we multiply by the ratio of how far they moved with respect to the screen size 

     *  the delta scrolled to be calculated from the mouseDowned point 
     *  because that would look jerky the first time a scroll occurred.</p>
     */
    private var scrollGestureAnchorPoint:Point;
    
    /**
     *  @private
     *  The time the scroll started
     */
    private var startTime:Number;
    
    /**
     *  @private
