 						m_marginLeft - m_marginRight - 
 						m_paddingLeft - m_paddingRight - 
 						m_borderLeftWidth - m_borderRightWidth;
-				}
-				else if (!m_positionInFlow)
-				{
-					m_width = m_currentStyles.width = parentW - 
-						m_left - m_right - 
-						m_marginLeft - m_marginRight - 
-						m_paddingLeft - m_paddingRight - 
-						m_borderLeftWidth - m_borderRightWidth;
+					m_autoFlags.width = false;
+				}
+				else 
+				{
+					m_autoFlags.width = true;
+					if (!m_positionInFlow)
+					{
+						m_width = m_currentStyles.width = parentW - 
+							m_left - m_right - 
+							m_marginLeft - m_marginRight - 
+							m_paddingLeft - m_paddingRight - 
+							m_borderLeftWidth - m_borderRightWidth;
+					}
+					else
+					{
+						m_width = m_currentStyles.width = parentW - 
+							m_marginLeft - m_marginRight - 
+							m_paddingLeft - m_paddingRight - 
+							m_borderLeftWidth - m_borderRightWidth;
+					}
+				}
+			}
+			else
+			{
+				m_autoFlags.width = false;
+				if (wProp.isRelativeValue())
+				{
+					var relevantWidth : Number = parentW;
+					if (m_positioningType == 'absolute')
+					{
+						relevantWidth = m_containingBlock.calculateContentWidth() + 
+							m_containingBlock.m_paddingLeft + 
+							m_containingBlock.m_paddingRight;
+					}
+					m_width = m_currentStyles.width = 
+						wProp.resolveRelativeValueTo(relevantWidth);
 				}
 				else
 				{
-					m_width = m_currentStyles.width = parentW - 
-						m_marginLeft - m_marginRight - 
-						m_paddingLeft - m_paddingRight - 
-						m_borderLeftWidth - m_borderRightWidth;
-				}
-			}
-			else if (wProp.isRelativeValue())
-			{
-				var relevantWidth : Number = parentW;
-				if (m_positioningType == 'absolute')
-				{
-					relevantWidth = m_containingBlock.calculateContentWidth() + 
-						m_containingBlock.m_paddingLeft + 
-						m_containingBlock.m_paddingRight;
-				}
-				m_width = m_currentStyles.width = 
-					wProp.resolveRelativeValueTo(relevantWidth);
-			}
-			else
-			{
-				m_width = m_currentStyles.width || 0;
-			}
-			
-			var propsResolvableToOwnWidth:Array = 
-			[
-				'borderTopLeftRadius',
-				'borderTopRightRadius',
-				'borderBottomLeftRadius',
-				'borderBottomRightRadius'
-			];
+					m_width = m_currentStyles.width || 0;
+				}
+			}
 			//TODO: verify that we should really resolve the border-radii this way
-			resolvePropsToValue(styles, propsResolvableToOwnWidth, 
+			resolvePropsToValue(styles, OWN_WIDTH_RELATIVE_PROPERTIES, 
 				m_width + m_borderTopWidth);
 			
 			if (hProp.specifiedValue() == 'auto')

			if (wProp.specifiedValue() == 'auto')
			{
				var outerWidthProp : CSSProperty = styles.getStyle('outerWidth');
				if (outerWidthProp != null && 
					outerWidthProp.specifiedValue() != 'auto')
				{
					var specOuterWidth : Number;
					if (outerWidthProp.isRelativeValue())
					{
						specOuterWidth = Math.round(
							outerWidthProp.resolveRelativeValueTo(parentW));
					}
					else
					{

					absolutePosition.x -= child.x;
					absolutePosition.y -= child.y;
					
					if (!child.m_autoFlags.left)
					{
						if (!child.m_autoFlags.right && 
							child.m_autoFlags.marginLeft && child.m_autoFlags.marginRight)
						{
							//center horizontally if margin-left and margin-right 
							//are both auto and left and right have values.
