             }
         }
 
-        drawWidth = width;
-        drawHeight = height;
-
+        if (_width != width || _height != height)
+        {
+            _width = width;
+            _height = height;
+            invalidateDisplayList();
+        }
+
+        // TODO EGeorgie: move to commit properties
         // Finally, apply the transforms to the object
         commitScaleAndRotation();
         return actualSize;
     }
-    
+
     private function beginCommitTransformProps():void
 	{
         if (_mask && isMaskInElementSpace)
         {
             var maskMatrix:Matrix = _mask.transform.matrix;
             var dispObjMatrix:Matrix = displayObject.transform.matrix.clone();
-            
+
             dispObjMatrix.invert();
             maskMatrix.concat(dispObjMatrix);
             _mask.transform.matrix = maskMatrix;
             isMaskInElementSpace = false;
         }
 	}
-	
+
 	private function endCommitTransformProps():void
 	{
         if (_mask && !isMaskInElementSpace)

	{
		return _x;
	}
	
	public function set x(value:Number):void
	{
		
		if (value != _x)
		{
			var oldValue:Number = _x;
			_x = value;
			dispatchPropertyChangeEvent("x", oldValue, value);	
			
			xChanged = true;	
			notifyElementChanged();	
		}	
	}
	
	//----------------------------------
	//  y
	//----------------------------------
	// TODO!!! Change to NaN and integrate Rect/Ellipse bounds/draw functions
	private var _y:Number = 0;
	private var yChanged:Boolean;
	
	[Bindable("propertyChange")]
	[Inspectable(category="General")]
	/**

        {
        	// Calculate the vector from pre-transform top-left to
        	// post-transform top-left:
	        var vec:Point = new Point();
	        TransformUtil.transformBounds(new Point(_width, _height), m, vec);

            // Add it to (x,y):
	        x += vec.x;
	        y += vec.y;
        }

        // Take stroke into account:
        // TODO EGeorgie: We assume that the stroke extents are even on both sides.
        // and that's not necessarily true.
