     public function get length():int
     {
         normalizeMinMax();
-        return (_maximum - _minimum) / stepSize + 1;
+        return (_maximum - _minimum) / Math.abs(stepSize) + 1;
     }
     
     //----------------------------------

        var scale:Number = 1;
        var value:Number;
        var scaledStepSize:Number = stepSize;
        
        // If stepSize isn't an integer, there's a possibility that the floating point 
        // approximation of value will be slightly larger or smaller 

        // Calculate the index by subtracting the item from the minimum and
        // dividing by the stepSize. Make sure the index is between
        // 0 and length - 1.
        var baseValue:Number = stepSize > 0 ? minimum : maximum;
        
        return Math.max(Math.min((Number(item) - baseValue) / stepSize, length - 1), 0);
    }
    
    /**
