             }
         }
         
+        private function parentContainerMoved(event:MoveEvent):void 
+        {
+            var parent:DisplayObjectContainer = (event.target as DisplayObjectContainer);
+            
+            // move all errors tips that are related to objects parented by this parent
+            // TODO: how to figure out which ones?
+            
+            // for now, just move everything
+            for (var target:* in errorTips)
+            {
+                positionErrorTip(errorTips[target], target);
+            }
+            
+        }
+            
         /**
          * When a target is hidden, then make sure the error tip is hidden too.
          */

                    while (parent) {
                        if (parent is DisplayObjectContainer) {
                            parent.removeEventListener(ScrollEvent.SCROLL, parentContainerScrolled);
                            if (containersToTargets[parent] is Array) {
                                var array:Array = (containersToTargets[parent] as Array);
                                var index:int = array.indexOf(obj);

    import flash.events.IEventDispatcher;
    import flash.geom.Point;
    import flash.geom.Rectangle;
    import flash.geom.Utils3D;
    import flash.utils.Dictionary;
    import flash.utils.clearTimeout;
    import flash.utils.setTimeout;
