diff --git a/APIChangeReport.html b/APIChangeReport.html
index 7a679c0..dde5c7b 100644
--- a/APIChangeReport.html
+++ b/APIChangeReport.html
@@ -4496,7 +4496,7 @@
 <a href="#_top">(jump back to top)</a>
 <hr>
 <p>
-<i><font size="-1">Contents generated by StableAPI tool on Tue Sep 16 04:14:38 EDT 2014<br>Copyright (C) 2014, International Business Machines Corporation, All Rights Reserved.</font></i>
+<i><font size="-1">Contents generated by StableAPI tool on Tue Sep 16 12:21:04 PDT 2014<br>Copyright (C) 2014, International Business Machines Corporation, All Rights Reserved.</font></i>
 </p>
 </body>
 </html>
diff --git a/source/test/cintltst/cdattst.c b/source/test/cintltst/cdattst.c
index 86e9db1..2abc310 100644
--- a/source/test/cintltst/cdattst.c
+++ b/source/test/cintltst/cdattst.c
@@ -1582,35 +1582,43 @@
     char bbuf2[kBbufMax];
     const char* localeString = "zh@numbers=hanidays";
     UDateFormat* fmt;
-    UNumberFormat* overrideFmt;
     const UNumberFormat* getter_result;
     int32_t i;
     unsigned j;
 
-    fmt=udat_open(UDAT_PATTERN, UDAT_PATTERN,"en_US",NULL,0,pattern, u_strlen(pattern), &status);
-    if (!assertSuccess("udat_open()", &status)) {
-        return;
-    }
-
-    overrideFmt = unum_open(UNUM_DEFAULT, NULL, 0, localeString, NULL, &status);
-    assertSuccess("unum_open()", &status);
-
     expected=(UChar*)malloc(sizeof(UChar) * 10);
     fields=(UChar*)malloc(sizeof(UChar) * 10);
     u_uastrcpy(fields, "d");
     u_uastrcpy(pattern,"MM d");
 
+    fmt=udat_open(UDAT_PATTERN, UDAT_PATTERN,"en_US",NULL,0,pattern, u_strlen(pattern), &status);
+    if (!assertSuccess("udat_open()", &status)) {
+        return;
+    }
+
 
     // loop 50 times to check getter/setter
-    for (i = 0; i < 50; i++){
+    for (i = 0; i < 5; i++){
+        UNumberFormat* overrideFmt;
+        overrideFmt = unum_open(UNUM_DEFAULT, NULL, 0, localeString, NULL, &status);
+        assertSuccess("unum_open()", &status);
+
         udat_adoptNumberFormatForFields(fmt, fields, overrideFmt, &status);
+        overrideFmt = NULL; // no longer valid
         assertSuccess("udat_setNumberFormatForField()", &status);
 
         getter_result = udat_getNumberFormatForField(fmt, 'd');
-        if (getter_result != overrideFmt) 
-            log_err("FAIL: udat_getNumberFormatForField does not work\n");
+        if(getter_result == NULL) {
+            log_err("FAIL: udat_getNumberFormatForField did not return a valid pointer\n");
+        }
     }
-    udat_setNumberFormat(fmt, overrideFmt); // test the same override NF will not crash
+
+    {
+      UNumberFormat* overrideFmt;
+      overrideFmt = unum_open(UNUM_DEFAULT, NULL, 0, localeString, NULL, &status);
+      assertSuccess("unum_open()", &status);
+      udat_setNumberFormat(fmt, overrideFmt); // test the same override NF will not crash
+    }
     udat_close(fmt);
     
     for (j=0; i<sizeof(overrideNumberFormat)/sizeof(overrideNumberFormat[0]); i++){
