     private var _snapInterval:Number = 1;
 
     private var snapIntervalChanged:Boolean = false;
-
-    /**
-     *  If nonzero, valid values must be an integer multiple of this property,
-     *  or equal to the minimum or the maximum.
+    private var _explicitSnapInterval:Boolean = false;
+
+    /**
+     *  If nonzero, valid values are the sum of the minimum with integer multiples
+     *  of this property and less than or equal to the maximum.
      *  
      *  <p>If the value of this property is zero, then valid values are only constrained
      *  to be between minimum and maximum inclusive.</p>
      * 
-     *  <p>This property also constrains valid values for the stepSize property.</p>
+     *  <p>This property also constrains valid values for the stepSize property when set.
+     *  If this property is not explicitly set and stepSize is set, then snapInterval
+     *  will default to stepSize.</p>
      *  
      *  @default 1
      *  @see #nearestValidValue

        if (interval != Math.round(interval)) 
        { 
            const parts:Array = (new String(1 + interval)).split("."); 
            scale = Math.pow(10, parts[1].length); 
            minValue *= scale;
            maxValue *= scale;
            value = Math.round(value * scale);
            interval = Math.round(interval * scale);
        }   
        
        var lower:Number = Math.max(minValue, Math.floor(value / interval) * interval);
        var upper:Number = Math.min(maxValue, Math.floor((value + interval) / interval) * interval);
        var validValue:Number = ((value - lower) >= ((upper - lower) / 2)) ? upper : lower;

        return validValue / scale;
    }
        
    /**


    public function set snapInterval(value:Number):void
    {
        // snapInterval defaults to stepSize if snapInterval is not
        // explicitly set.
        _explicitSnapInterval = true;
        
        if (value == _snapInterval)
            return;

        // NaN effectively clears the snapInterval and resets it to 1.
        if (isNaN(value))
        {
            _snapInterval = 1;
            _explicitSnapInterval = false;
        }
        else
        {
            _snapInterval = value;
        }
        
        snapIntervalChanged = true;
        stepSizeChanged = true;
        
        invalidateProperties();
