             bottomHolder = row.y + row.height;
         }
 
-        
         // available width
         availableWidth = Math.round(rightHolder - leftHolder);
         availableHeight = Math.round(bottomHolder - topHolder);
         
         // set width
-        if (!isNaN(left) && !isNaN(right))
+        if (!isNaN(percentWidth))
+        {
+            if (!isNaN(left))
+                availableWidth -= left;
+            if (!isNaN(right))
+                availableWidth -= right;
+            
+            elementWidth = Math.round(availableWidth * Math.min(percentWidth * 0.01, 1));
+            elementMaxWidth = Math.min(layoutElement.getMaxBoundsWidth(),
+                maxSizeToFitIn(unscaledWidth, left, right, layoutElement.getLayoutBoundsX()));
+        }
+        else if (!isNaN(left) && !isNaN(right))
         {
             elementWidth = availableWidth - left - right;
         }
+        
         // set height
+        if (!isNaN(percentHeight))
+        {
+            if (!isNaN(top))
+                availableHeight -= top;
+            if (!isNaN(bottom))
+                availableHeight -= bottom;    
+            
+            elementHeight = Math.round(availableHeight * Math.min(percentHeight * 0.01, 1));
+            elementMaxHeight = Math.min(layoutElement.getMaxBoundsHeight(),
+                maxSizeToFitIn(unscaledHeight, top, bottom, layoutElement.getLayoutBoundsY()));
+        }
         if (!isNaN(top) && !isNaN(bottom))
         {
             elementHeight = availableHeight - top - bottom;

        var topBoundary:String = elementInfo.topBoundary;
        var bottomBoundary:String = elementInfo.bottomBoundary;
        
        var availableWidth:Number;
        var availableHeight:Number;
        

        var minHeight:Number = 0;
        var count:int = otherElements.length;
        
        // TODO: Add baseline
        
        for (var i:int = 0; i < count; i++)
        {
            var elementInfo:ElementConstraintInfo = otherElements[i];
