-////////////////////////////////////////////////////////////////////////////////
-//
-//  ADOBE SYSTEMS INCORPORATED
-//  Copyright 2003-2008 Adobe Systems Incorporated
-//  All Rights Reserved.
-//
-//  NOTICE: Adobe permits you to use, modify, and distribute this file
-//  in accordance with the terms of the license agreement accompanying it.
-//
-////////////////////////////////////////////////////////////////////////////////
-
 package mx.filters
 {
-import flash.events.Event;
-import flash.events.EventDispatcher;
 import flash.filters.BitmapFilter;
-import flash.filters.BitmapFilterQuality;
 import flash.filters.DropShadowFilter;
-import mx.filters.IFlexBitmapFilter;
+import mx.filters.BaseDimensionFilter;
+import mx.filters.IBitmapFilter;
 
-/**
- *  @review 
- *  Dispatched when a property value has changed. 
- */ 
-[Event(name="change", type="flash.events.Event")]
-
-/**
- *  @review 
- * 
- * 	The mx.filters.DropShadowFilter class is based on flash.filters.DropShadowFilter
- *  but adds support for dynamically updating property values. 
- *  When a property changes, it dispatches an event that tells the filter owner to
- *  reapply the filter. Use this class instead of flash.filters.DropShadowFilter if 
- *  you plan to dynamically change the filter property values.  
- * 
- *  @see flash.filters.DropShadowFilter
- */
-public class DropShadowFilter extends EventDispatcher implements IFlexBitmapFilter
+public class DropShadowFilter extends BaseDimensionFilter implements IBitmapFilter
 {
-	include "../core/Version.as";
-
-    //--------------------------------------------------------------------------
-    //
-    //  Constructor
-    //
-    //--------------------------------------------------------------------------
-    	
-	/**
-	 * @copy flash.filters.DropShadowFilter
-	 */ 	
 	public function DropShadowFilter(distance:Number = 4.0, angle:Number = 45, 
 									 color:uint = 0, alpha:Number = 1.0, 
 									 blurX:Number = 4.0, blurY:Number = 4.0, 

			notifyFilterChanged();
		}
	}
		
	//----------------------------------
    //  knockout
    //----------------------------------
	
	private var _knockout:Boolean = false;
	
	/**
	 *  Specifies whether the object has a knockout effect. A knockout effect
	 *  makes the object's fill transparent and reveals the background color 
	 *  of the document. The value true specifies a knockout effect; the 
	 *  default value is false (no knockout effect).
	 */
	public function get knockout():Boolean
	{
		return _knockout;
	}
	
	public function set knockout(value:Boolean):void
	{
		if (value != _knockout)
		{
			_knockout = value;
			notifyFilterChanged();
		}
	}
	
	//----------------------------------
    //  quality
    //----------------------------------
	
	private var _quality:int = BitmapFilterQuality.LOW;
	
	/**
	 *  The number of times to apply the filter. The default value is 
	 *  BitmapFilterQuality.LOW, which is equivalent to applying the filter 
	 *  once. The value BitmapFilterQuality.MEDIUM  applies the filter twice; 
	 *  the value BitmapFilterQuality.HIGH applies it three times. Filters 
	 *  with lower values are rendered more quickly. 
	 * 
	 *  For most applications, a quality value of low, medium, or high is 
	 *  sufficient. Although you can use additional numeric values up to 15 
	 *  to achieve different effects, higher values are rendered more slowly. 
	 *  Instead of increasing the value of quality, you can often get a similar 
	 *  effect, and with faster rendering, by simply increasing the values of 
	 *  the blurX and blurY properties.
	 */
	public function get quality():int
	{
		return _quality;
	}
	
	public function set quality(value:int):void
	{
		if (value != _quality)
		{
			_quality = value;
			notifyFilterChanged();
		}
	}
	
	//----------------------------------
    //  strength
    //----------------------------------
	
	private var _strength:Number = 1;
	
	/**
	 *  The strength of the imprint or spread. The higher the value, the more 
	 *  color is imprinted and the stronger the contrast between the glow and 
	 *  the background. Valid values are 0 to 255. A value of 0 means that the 
	 *  filter is not applied. The default value is 1. 
	 */
	public function get strength():Number
	{
		return _strength;
	}
	
	public function set strength(value:Number):void
	{
		if (value != _strength)
		{
			_strength = value;
			notifyFilterChanged();
		}
	}	

	//--------------------------------------------------------------------------
	//
	//  Methods
	//
	//--------------------------------------------------------------------------

   	/**
     * @private
     * Notify of a change to our filter, so that filter stack is ultimately 
     * re-applied by the framework.
     */ 
	private function notifyFilterChanged():void
	{
		dispatchEvent(new Event(Event.CHANGE));
	}

	//--------------------------------------------------------------------------
	//
	//  IFlexBitmapFilter 
	//
	//--------------------------------------------------------------------------
	
	/**
	 *  Creates a flash.filters.DropShadowFilter instance using the current 
	 *  property values. 
	 * 
	 *  @return flash.filters.DropShadowFilter instance
	 */		
	public function createBitmapFilter():BitmapFilter 
	{
		return new flash.filters.DropShadowFilter(distance, angle, color, alpha, blurX, 
												  blurY, strength, quality, inner, 

									 knockout:Boolean = false, 
									 hideObject:Boolean = false)
	 {
	 	this.distance = distance;
	 	this.angle = angle;
	 	this.color = color;
