      */
     public function validationResultHandler(event:ValidationResultEvent):void
     {
+        if (errorObjectArray === null)
+        {
+            errorObjectArray = new Array();
+            errorArray = new Array();
+        }
+        
+    	var validatorIndex:int = errorObjectArray.indexOf(event.target);
         // If we are valid, then clear the error string
         if (event.type == ValidationResultEvent.VALID)
         {
-            if (errorString != "")
+            if (validatorIndex != -1)
             {
-                errorString = "";
-                dispatchEvent(new FlexEvent(FlexEvent.VALID));
+            	errorObjectArray.splice(validatorIndex, 1);
+            	errorArray.splice(validatorIndex, 1);
+                errorString = errorArray.join("\n");
+            	if (errorArray.length == 0)
+                	dispatchEvent(new FlexEvent(FlexEvent.VALID));
             }
         }
         else // If we get an invalid event


    /**
     *  @private
     *  Flag set when error string changes.
     */
    private var errorStringChanged:Boolean = false;

                msg = event.results[0].errorMessage;
            }

            if (msg && validatorIndex != -1 && errorArray[validatorIndex] != msg)
            {
                errorArray[validatorIndex] = msg;
                errorString = errorArray.join("\n");
                dispatchEvent(new FlexEvent(FlexEvent.INVALID));
            }
            else if (msg && validatorIndex == -1)
            {
            	errorObjectArray.push(event.target);
            	errorArray.push(msg);
                errorString = errorArray.join("\n");
                dispatchEvent(new FlexEvent(FlexEvent.INVALID));
            }
        }
