                 // assign num to year or month or day or sec.
                 else if (punctuation.hasOwnProperty(letter) && punctuation[letter].date)
                 {
-					// FIXME assumes month come before day ie US style
-					// dates MM/DD/YYYY or year first dates YYYY/MM/DD
-					if (mon < 0)
+					var monthFirst:Boolean = year != -1;
+					
+					if (format)
+						monthFirst = monthFirst || format.search("M") < format.search("D");
+							
+					if (monthFirst && mon < 0)
                         mon = (num - 1);
 					else if (day < 0)
 						day = num;
+					else if (!monthFirst && mon < 0)
+						mon = (num -1);
 					else if (sec < 0)
 						sec = num;
 					else if (milli < 0)

     *  @playerversion AIR 1.1
     *  @productversion Flex 3
     */
    public static function parseDateString (str:String):Date
    {
        if (!str || str == "")
            return null;


        if (value is String)
        {
            value = DateFormatter.parseDateString(String(value), formatString);
            if (!value)
            {
                error = defaultInvalidValueError;
