Index: source/i18n/windtfmt.h
diff --git a/source/i18n/windtfmt.h b/source/i18n/windtfmt.h
index 0c182f54e649d0a234eff428856c436c90623d23..3f6d666574ffd9e3dedb423f53609005f3d5d2cd 100644
--- a/source/i18n/windtfmt.h
+++ b/source/i18n/windtfmt.h
@@ -52,8 +52,6 @@ public:
 
     UnicodeString &format(Calendar &cal, UnicodeString &appendTo, FieldPosition &pos) const;
 
-    UnicodeString& format(UDate date, UnicodeString& appendTo) const;
-
     void parse(const UnicodeString& text, Calendar& cal, ParsePosition& pos) const;
 
     /**
@@ -127,10 +125,6 @@ private:
     TIME_ZONE_INFORMATION *fTZI;
 };
 
-inline UnicodeString &Win32DateFormat::format(UDate date, UnicodeString& appendTo) const {
-    return DateFormat::format(date, appendTo);
-}
-
 U_NAMESPACE_END
 
 #endif /* #if !UCONFIG_NO_FORMATTING */
Index: source/i18n/winnmfmt.cpp
diff --git a/source/i18n/winnmfmt.cpp b/source/i18n/winnmfmt.cpp
index 58e2a497b194bc281a817d9ced39372efab0bfee..d5ea8bde07acea3c0fa3b48aa63c07e054fecbc1 100644
--- a/source/i18n/winnmfmt.cpp
+++ b/source/i18n/winnmfmt.cpp
@@ -209,17 +209,17 @@ Format *Win32NumberFormat::clone(void) const
 
 UnicodeString& Win32NumberFormat::format(double number, UnicodeString& appendTo, FieldPosition& pos) const
 {
-    return format(getMaximumFractionDigits(), appendTo, L"%.16f", number);
+    return variadicFormat(getMaximumFractionDigits(), appendTo, L"%.16f", number);
 }
 
 UnicodeString& Win32NumberFormat::format(int32_t number, UnicodeString& appendTo, FieldPosition& pos) const
 {
-    return format(getMinimumFractionDigits(), appendTo, L"%I32d", number);
+    return variadicFormat(getMinimumFractionDigits(), appendTo, L"%I32d", number);
 }
 
 UnicodeString& Win32NumberFormat::format(int64_t number, UnicodeString& appendTo, FieldPosition& pos) const
 {
-    return format(getMinimumFractionDigits(), appendTo, L"%I64d", number);
+    return variadicFormat(getMinimumFractionDigits(), appendTo, L"%I64d", number);
 }
 
 void Win32NumberFormat::parse(const UnicodeString& text, Formattable& result, ParsePosition& parsePosition) const
@@ -242,7 +242,7 @@ void Win32NumberFormat::setMinimumFractionDigits(int32_t newValue)
     NumberFormat::setMinimumFractionDigits(newValue);
 }
 
-UnicodeString &Win32NumberFormat::format(int32_t numDigits, UnicodeString &appendTo, const wchar_t *fmt, ...) const
+UnicodeString &Win32NumberFormat::variadicFormat(int32_t numDigits, UnicodeString &appendTo, const wchar_t *fmt, ...) const
 {
     wchar_t nStackBuffer[STACK_BUFFER_SIZE];
     wchar_t *nBuffer = nStackBuffer;
Index: source/i18n/winnmfmt.h
diff --git a/source/i18n/winnmfmt.h b/source/i18n/winnmfmt.h
index 5421a454e148b3c6bf747b559a67712b9331c1b8..d4ef66e36a655d9cdb6a15a32ce18277f34fef50 100644
--- a/source/i18n/winnmfmt.h
+++ b/source/i18n/winnmfmt.h
@@ -143,7 +143,7 @@ public:
     virtual UClassID getDynamicClassID(void) const;
 
 private:
-    UnicodeString &format(int32_t numDigits, UnicodeString &appendTo, const wchar_t *format, ...) const;
+    UnicodeString &variadicFormat(int32_t numDigits, UnicodeString &appendTo, const wchar_t *format, ...) const;
 
     UBool fCurrency;
     Locale fLocale;
