             var keyRectangles:Array = [];
 
             keyRectangles["headerRectangles"] = generateHeaderRectangles(keyPoints, dimensions);
+            keyRectangles["headerRectangle"] = generateVisibleHeaderRectangle(keyPoints, dimensions);
 
             return keyRectangles;
         }
 
+        private function generateVisibleHeaderRectangle(keyPoints:Array, dimensions:Array):Rectangle
+        {
+            const topLeftCorner:Point = keyPoints["b"];
+            return new Rectangle(topLeftCorner.x, topLeftCorner.y, getHeaderWidthFromKeyPoints(keyPoints), getHeaderHeightFromKeyPoints(keyPoints));
+        }
         private function generateHeaderRectangles(keyPoints:Array, dimensions:Array):Array
         {
             var headerRectangles:Array = [];

            _keyPoints = null;
        }

        /*[Ignore]
        [Test]
        public function test_global_coordinates_over_header_view(globalPoint:Array, expectedHeaderIndex:int):void
        {
            //given
            var pointOverAHeaderView:Boolean = expectedHeaderIndex != -1;

            //when
            var doesHeaderContainThisPoint:Boolean = _sut.areCoordinatesOverAHeaderView(new Point(globalPoint[0], globalPoint[1]));

            //then
            assertEquals(pointOverAHeaderView, doesHeaderContainThisPoint);
        }

        [Ignore]
        [Test]
        public function test_column_index(globalPoint:Array, expectedColumnIndex:int):void

                    + "\n DEBUG INFO: headerRectangles=" + headerRectangles);
        }

        private function getHeaderContainsPointErrorMessage(pointName:String, direction:Matrix, transformedPoint:Point, shouldBeContainedInHeader:Boolean, isActuallyContainedInHeader:Boolean):String
        {
            return "The point " + pointName + " transformed with Matrix " + direction + " (resulting in " + transformedPoint + ") should be "
                    + (shouldBeContainedInHeader ? "within " : "outside ") + "header bounds"
                    + " but was mistakenly found to be "
                    + (isActuallyContainedInHeader ? "within" : "outside")
                    + "\n DEBUG INFO: headerRectangle=" + headerRectangle;
        }

        private function getHeaderIndexAtGlobalPoint(globalPoint:Point):int
        {
            var localPoint:Point = _sut.globalToLocal(globalPoint);
            return _sut.getHeaderIndexAt(localPoint.x, localPoint.y);
        }

        private function getHeaderContainsPointAssumption(point:Point):Boolean
        {
            return rectangleContainsPoint(headerRectangle, point);
        }

        private function getHeaderIndexAssumption(point:Point):int
