         const minimumResizeWidth:Number = minWidth ? minWidth : 200;
         const minimumResizeHeight:Number = minHeight ? minHeight : 100;
 
-        var nextWidth:Number = stage.stageWidth - (stage.mouseX + parent.x);
-        var nextHeight:Number = (stage.mouseY - parent.y);
-
         if (stage.mouseX > 20 && (stage.mouseY < stage.height - 20))
         {
-            if (nextWidth > minimumResizeWidth)
-            {
-                width = nextWidth;
-            }
-            if (nextHeight > minimumResizeHeight)
-            {
-                height = nextHeight;
+            var deltaX:Number = xResizeEnd - xResizeStart;
+            var deltaY:Number = yResizeEnd - yResizeStart;
+
+            var calculatedWidth:Number = widgetWidth + deltaX;
+            var calculatedHeight:Number = widgetHeight + deltaY;
+
+            if (calculatedWidth > minimumResizeWidth)
+            {
+                width = calculatedWidth;
+            }
+            if (calculatedHeight > minimumResizeHeight)
+            {
+                height = calculatedHeight;
             }
         }
     }

    {
        if (_resizable)
        {
            /*TODO: for now, it can't be resized when is not basic layout*/
            stage.addEventListener(MouseEvent.MOUSE_MOVE, resize_moveHandler);
            stage.addEventListener(MouseEvent.MOUSE_UP, resize_upHandler);

    }

    private var widgetMoveStarted:Boolean = false;
    private var xResizeStart:Number;
    private var yResizeStart:Number;
    private var xResizeEnd:Number;
    private var yResizeEnd:Number;

    private function mouse_moveHandler(event:MouseEvent):void
    {
