      */
     public function getCellsAt(x:Number, y:Number, w:Number, h:Number):Vector.<CellPosition>
     { 
-        // TODO(hmuller)
-        return new Vector.<Object>;
+        var cells:Vector.<CellPosition> = new Vector.<CellPosition>;
+		
+		if (w <= 0 || h <= 0)
+			return cells;
+		
+		// Get the row/column indexes of the corners of the region.
+		var topLeft:CellPosition = getCellAt(x, y);
+		var bottomRight:CellPosition = getCellAt(x + w, y + h);
+		if (!topLeft || !bottomRight)
+			return cells;
+		
+		for (var rowIndex:int = topLeft.rowIndex; 
+			 rowIndex <= bottomRight.rowIndex; rowIndex++)
+		{
+			for (var columnIndex:int = topLeft.columnIndex; 
+				 columnIndex <= bottomRight.columnIndex; columnIndex++)
+			{
+				cells.push(new CellPosition(rowIndex, columnIndex));
+			}
+		}
+		
+        return cells;
     }
     
     /**

        }
        else
        {
            visibleItemRenderersBounds.x = 0;
            visibleItemRenderersBounds.y = 0;
            visibleItemRenderersBounds.width = 0;
            visibleItemRenderersBounds.height = 0;
        }
        
        // Update visibleItemRenderers et al

     */
    private const visibleItemRenderersBounds:Rectangle = new Rectangle();
    
	/**
     *  @private
     *  The viewport's bounding rectangle; often smaller then visibleItemRenderersBounds.
     *  Initialized by updateDisplayList with the current scrollPosition, and grid.width,Height.
