     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;
    }
        
    /**

        
        if (stepSizeChanged)
        {
            // Only modify stepSize if snapInterval was explicitly set.
            // Otherwise, snapInterval defaults to stepSize and we set
            // the value to respect the new snapInterval.
            if (_explicitSnapInterval)
            {
                _stepSize = nearestValidSize(_stepSize);
            }
            else
            {
                _snapInterval = _stepSize;
                setValue(nearestValidValue(_value, snapInterval));
            }
            
            stepSizeChanged = false;
        }
    }
