                 msg = event.results[0].errorMessage;
             }
 
-            if (msg && errorString != msg)
+            if (msg && validatorIndex != -1 && errorArray[validatorIndex] != msg)
             {
-                errorString = 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));
             }
         }


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

     */
    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 (validatorIndex != -1)
            {
            	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
