         // FIXME (rfrishbe): this should be parameterized better and the heuristic should 
         // be documented better
         if ( (lastDt >= 3*averageDt) &&
-            (lastVelocity.length <= MIN_START_VELOCITY))
+            (lastVelocity.length <= minVelocityPixels))
         {
             isScrolling = false;
             

        // calculate the velocity using a weighted average
        var throwVelocity:Point = calculateThrowVelocity();
        
        // use ratio of how far they scrolled to scale the velocity
        throwVelocity.x *= movedRatio.x;
        throwVelocity.y *= movedRatio.y;
        
        // if the velocity is greater than the minimum velocity, start throwing
        if (throwVelocity.length > MIN_START_VELOCITY)
        {
            scroller.performThrow(throwVelocity.x, throwVelocity.y);
        }
        else
        {

            var vspToUse:Number = Math.min(Math.max(finalVSP,0), maxHeight);
            
            // since easing function is f(t) = start + (final - start) * e(t)
            // e(t) = Math.pow(1 - t/throwEffectTime, 4)
            // We want to solve for t when e(t) = vspToUse
            // t = throwEffectTime*(1-(Math.pow(1-((vspToUse-vsp)/(finalVSP-vsp)),.25)));
            if (finalVSP == vspToUse)
                timeToReachVSP = throwEffectTime;
            else
                timeToReachVSP = throwEffectTime*(1-(Math.pow(1-((vspToUse-vsp)/(finalVSP-vsp)),.25)));
            
            verticalMP.keyframes = Vector.<Keyframe>([new Keyframe(0, null), new Keyframe(timeToReachVSP, vspToUse)]);
            throwEffectMotionPaths.push(verticalMP);
