 				
 				unbind(passInstance, drawCall, meshBindings);
 			}
+            
+            delete _meshBindingsUsageCount[meshBindings];
 			
 			// update indexes
 			delete _meshToDrawCalls[mesh];
-			delete _meshBindingsToMesh[meshBindings];
 			
 			var meshesWithSameEffect : Vector.<Mesh> = _effectToMeshes[effect];
 

    				var flags	: uint		= signature.getFlags(i);
    				
    				if (flags & Signature.SOURCE_MESH)
    					meshBindings.removeCallback(key, bindingsPropertyChangedHandler);
    				else
    					sceneBindings.removeCallback(key, bindingsPropertyChangedHandler);
    			}
    			
    			// release the shader

			
			// iterate on meshEffect passes
			var drawCalls : Vector.<DrawCall>	= new <DrawCall>[];
            
            _meshBindingsUsageCount[meshBindings] = {};
			
			for (var i : uint = 0; i < numPasses; ++i)
			{
