      */
     public function removeAll():void
     {
-        arrayOfDictionaries.splice(0);
+        priorityBins.length = 0;
         minPriority = 0;
         maxPriority = -1;
-        generation += 1;
     }
 
     /**


        if (minPriority <= maxPriority)
        {
            while (!arrayOfDictionaries[minPriority] || 
                   arrayOfDictionaries[minPriority].length == 0)
            {
                minPriority++;
                if (minPriority > maxPriority)
                    return null;
            }           

            // Remove the item with smallest priority from our priority queue.
            // Must use a for loop here since we're removing a specific item
            // from a 'Dictionary' (no means of directly indexing).
            for (var key:Object in arrayOfDictionaries[minPriority].items )
            {
                obj = key;
                removeChild(ILayoutManagerClient(key),minPriority);
                break;
            }

            // Update minPriority if applicable.
            while (!arrayOfDictionaries[minPriority] || 
                   arrayOfDictionaries[minPriority].length == 0)
            {
                minPriority++;
                if (minPriority > maxPriority)
                    break;
            }           
        }


    public function removeChild(client:ILayoutManagerClient, level:int=-1):Object
    {
        var priority:int = (level >= 0) ? level : client.nestLevel;
        var bin:PriorityBin = priorityBins[priority];
        if (bin && bin.items[client] != null)
        {
            delete bin.items[client];
            bin.length--;
            return client;
        }
        return null;
