 		 */
 		override public function removeChildByID (id:String):INode
 		{
-			invalidateScene();
-			return super.removeChildByID(id);
+			var child:INode = super.removeChildByID(id);
+			child.removeEventListener(IsoEvent.INVALIDATE, child_invalidateHandler);
+			
+			_isInvalidated = true;
+			
+			return child;
 		}
 		
 		/**
 		 * @inheritDoc
 		 */
 		override public function removeAllChildren ():void
-		{
+		{			
+			var child:INode
+			for each (child in children)
+				child.removeEventListener(IsoEvent.INVALIDATE, child_invalidateHandler);
+			
 			super.removeAllChildren();
-			invalidateScene();
-		}
-		
-		///////////////////////////////////////////////////////////////////////////////
-		//	DEPTH SORT
+			_isInvalidated = true;
+		}
+		
+		/**
+		 * Renders the scene as invalidated if a child object is invalidated.
+		 * 
+		 * @param evt The IsoEvent dispatched from the invalidated child.
+		 */
+		protected function child_invalidateHandler (evt:IsoEvent):void
+		{
+			var child:INode = INode(evt.target);
+			if (invalidatedChildren.indexOf(child) == -1)
+				invalidatedChildren.push(child);
+			
+			_isInvalidated = true;
+		}
+		
+		///////////////////////////////////////////////////////////////////////////////
+		//	LAYOUT RENDERER
 		///////////////////////////////////////////////////////////////////////////////
 		
 		/**

			if (child is IIsoDisplayObject)
			{
				super.addChildAt(child, index);
				invalidateScene();
			}
				
			else

		private var _isInvalidated:Boolean = false;
		
		/**
		 * Flag indicating if the scene is invalidated.  If true, validation will occur during the next render pass.
		 */
		public function get isInvalidated ():Boolean
		{
