     public function removeChild(client:ILayoutManagerClient, level:int=-1):Object
     {
         var priority:int = (level >= 0) ? level : client.nestLevel;
-        if (arrayOfDictionaries[priority] &&
-            arrayOfDictionaries[priority].items[client] != null)
-        {
-            delete arrayOfDictionaries[priority].items[client];
-            arrayOfDictionaries[priority].length--;
-            
-            // Update our changelist id since we've removed an item.
-            generation++;
-            
+        var bin:PriorityBin = priorityBins[priority];
+        if (bin && bin.items[client] != null)
+        {
+            delete bin.items[client];
+            bin.length--;
             return client;
         }
         return null;

        var i:int = Math.max(minPriority, level);
        for (; i <= maxPriority; i++)
        {
            var obj:Object = arrayOfDictionaries[i];
            if (obj)
            {
                var items:Dictionary = obj.items;

    /**
     *  @private
     */
    private var priorityBins:Array = [];

    /**
     *  @private
