                 valueCopy.push(new CellPosition(cell.rowIndex, cell.columnIndex));
         }
         
-        // Append a deferred operation function that selects the specified cells
-        
-        var f:Function = function():void
+        // Defer the selection change if we haven't been initialized
+        
+        if (!initialized)
+        {        
+            // Append a deferred operation function that selects the specified cells
+            
+            var f:Function = function():void
+            {
+                clearSelection();
+                for each (cell in valueCopy)
+                    addSelectedCell(cell.rowIndex, cell.columnIndex);
+            }
+            deferredOperations.push(f);  // function f() to be called by commitProperties()
+            invalidateProperties();
+        }
+        else
         {
             clearSelection();
             for each (cell in valueCopy)
-                addSelectedCell(cell.rowIndex, cell.columnIndex);
-        }
-        deferredOperations.push(f);  // function f() to be called by commitProperties()
-        invalidateProperties();
+                addSelectedCell(cell.rowIndex, cell.columnIndex);            
+        }
     }          
 
     //----------------------------------

     *  event. When the user changes the selection programmatically, the 
     *  control dispatches the <code>valueCommit</code> event.</p>
     * 
     *  <p>Attempts to set this property are deferred until commitProperties()
     *  runs, and the dataProvider property has been set.  This property is not
     *  intended for programatic selection updates, it can be used to initialize the
     *  selection in MXML markup.  The setSelectedCell() method should be used
     *  for programatic selection updates, for example when writing a keyboard
     *  or mouse event handler. </p> 

     */
    public function set selectedIndex(value:int):void
    {
        // Defer the selection change if we haven't been initialized
        
        if (!initialized)
        {        
            // Append a deferred operation function that selects the specified index
            
            var f:Function = function():void
            {
                if (value != -1)
                    setSelectedIndex(value);
                else
                    clearSelection();
            }
            deferredOperations.push(f);  // function f() to be called by commitProperties()
            invalidateProperties();
        }
        else
        {
            if (value != -1)
                setSelectedIndex(value);
            else
                clearSelection();
        }
    }
    
    //----------------------------------
