         var targ:UIComponent = event.target as UIComponent;
         
         if (targ)
-            _invalidElements[targ] = targ.errorString;                    
+        {         
+            if (findInvalidElementIndex(targ) == -1)   
+            {
+                // Insert a new element into the array and re-sort
+                var position:Vector.<int> = getElementNestedPosition(targ, contentGroup);
+                var item:Object = {element:targ, position: position};
+                
+                _invalidElements.push(item);
+                _invalidElements.sort(compareNestedPosition);
+
+				// Listen for errorString == ""
+            	targ.addEventListener("errorStringChanged", errorStringChangedHandler);
+            }
+        }
         
         errorStateChanged = true;
         invalidateSkinState();

            var isEmpty:Boolean = true;
            var errMsg:String = "";
            
            // TODO (jszeto) Figure out how to do the proper ordering 
            for (key in invalidElements)
            {
                isEmpty = false;
                if (errMsg != "")

     *  @playerversion AIR 1.5
     *  @productversion Flex 4.5
     */
    public function get invalidElements():Array
    {
        return _invalidElements;
    }
