     
     override protected function measure():void
     {
-        measuredHeight = Math.max(Math.max(navigationGroup.getExplicitOrMeasuredHeight(), 
-            titleGroup.getExplicitOrMeasuredHeight()),
-            actionGroup.getExplicitOrMeasuredHeight());
+        var titleComponent:UIComponent = (titleGroup.numElements > 0) ? titleGroup : titleDisplay;
+        
+        measuredMinWidth = measuredWidth =
+            navigationGroup.getPreferredBoundsWidth()
+            + titleComponent.getPreferredBoundsWidth()
+            + actionGroup.getPreferredBoundsWidth();
+        
+        measuredMinHeight = measuredHeight =
+            Math.max(navigationGroup.getPreferredBoundsHeight(), 
+                actionGroup.getPreferredBoundsHeight(),
+                titleComponent.getPreferredBoundsHeight());
     }
     
     override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
     {
-        highlight.width = unscaledWidth;
-        highlight.height = unscaledHeight;
+        highlight.setLayoutBoundsSize(unscaledWidth, unscaledHeight);
+        highlight.setLayoutBoundsPosition(0, 0);
         
         var left:Number = 0;
         var right:Number = unscaledWidth;
         
-        // Position groups
-        // FIXME (chiedozi): Prevent measurements from being negative.  Figure out
-        // minimums for each group.
-        // FIXME (jasonsj): Why are we checking includeInLayout
+        // position groups, overlap of navigation and action groups is allowed
+        // when overlap occurs, title group is not visible (width = 0)
         if (navigationGroup.numElements > 0 && navigationGroup.includeInLayout)
         {
-            left += navigationGroup.measuredWidth;
+            left += navigationGroup.getPreferredBoundsWidth();
             navigationGroup.setLayoutBoundsSize(left, unscaledHeight);
         }
         
         if (actionGroup.numElements > 0 && actionGroup.includeInLayout)
         {
-            right -= actionGroup.measuredWidth;
+            var actionGroupWidth:Number = actionGroup.getPreferredBoundsWidth();
+            right -= actionGroupWidth;
+            actionGroup.setLayoutBoundsSize(actionGroupWidth, unscaledHeight);
+            
+            // actionGroup x position can be negative
             actionGroup.setLayoutBoundsPosition(right, 0);
-            actionGroup.setLayoutBoundsSize(unscaledWidth - right, unscaledHeight);
         }
         
         var titleGroupWidth:Number = right - left;
         if (titleGroupWidth < 0)
-        	titleGroupWidth = 0;
-		
+            titleGroupWidth = 0;
+        
+        titleGroup.setLayoutBoundsSize(titleGroupWidth, unscaledHeight);
         titleGroup.setLayoutBoundsPosition(left, 0);
-        titleGroup.setLayoutBoundsSize(titleGroupWidth, unscaledHeight);
         
         // Draw background
         var g:Graphics = backgroundFill.graphics;

        hLayout.horizontalAlign = HorizontalAlign.LEFT;
        hLayout.verticalAlign = VerticalAlign.MIDDLE;
        hLayout.gap = 0;
        hLayout.paddingLeft = hLayout.paddingTop = hLayout.paddingRight = hLayout.paddingBottom = 10;
        titleGroup.layout = hLayout;
        addChild(titleGroup);
        

        hLayout.horizontalAlign = HorizontalAlign.LEFT;
        hLayout.verticalAlign = VerticalAlign.MIDDLE;
        hLayout.gap = 0;
        hLayout.paddingLeft = hLayout.paddingTop = hLayout.paddingRight = hLayout.paddingBottom = 10; // TODO (jasonsj): 15 for 240dpi
        navigationGroup.layout = hLayout;
        addChild(navigationGroup);
        
