         maxCellHeight = max;
         return changed;
     }
+    
+    /**
+     *  Returns the cell height at the specified index.
+     *  
+     *  @return the cell height at the given index. NaN if index
+     *  is out of bounds.
+     */
+    public function getCellHeight(index:int):Number
+    {
+        if (index < 0 || index >= cellHeights.length)
+            return NaN;
+        return cellHeights[index];
+    }
+    
+    /**
+     *  Updates the height at the specified column.
+     * 
+     *  @return true if max height has changed.
+     */
+    public function setCellHeight(index:int, value:Number):Boolean
+    {
+        if (cellHeights[index] == value)
+            return false;
+        
+        cellHeights[index] = value;
+        
+        return updateMaxHeight();
+    }
+    
     
     public function toString():String
     {

            for (var i:int = value - _numColumns; i < value; i++)
                cellHeights[i] = 0;
        }
        
        _numColumns = value;
    }

     * 
     *  @return true if changed
     */
    private function updateMaxHeight():Boolean
    {
        // FIXME (klin): use max heap? might not be worth the overhead.
        var max:Number = 0;
