diff --git a/src/xercesc/util/TransService.hpp b/src/xercesc/util/TransService.hpp
index dd4746e8d9ced56fbd3c576ec2224624b5699d49..5224f26c5041e3b14280388bb4b7f71573f1b8cf 100644
--- a/src/xercesc/util/TransService.hpp
+++ b/src/xercesc/util/TransService.hpp
@@ -56,8 +56,11 @@
 
 /*
  * $Log$
- * Revision 1.1  2002/02/01 22:22:13  peiyongz
- * Initial revision
+ * Revision 1.2  2002/04/09 15:44:00  knoaman
+ * Add lower case string support.
+ *
+ * Revision 1.1.1.1  2002/02/01 22:22:13  peiyongz
+ * sane_include
  *
  * Revision 1.14  2001/11/01 23:37:07  jasons
  * 2001-11-01  Jason E. Stewart  <jason@openinformatics.com>
@@ -211,6 +214,7 @@ public :
     virtual bool supportsSrcOfs() const = 0;
 
     virtual void upperCase(XMLCh* const toUpperCase) const = 0;
+    virtual void lowerCase(XMLCh* const toLowerCase) const = 0;
 
 	// -----------------------------------------------------------------------
     //	Allow users to add their own encodings to the intrinsinc mapping
diff --git a/src/xercesc/util/Transcoders/ICU/ICUTransService.cpp b/src/xercesc/util/Transcoders/ICU/ICUTransService.cpp
index 980b2fa866724b31937bccead5261df384103e3c..79cff29210352f7e8f22a617d88e7c8c72262d4c 100644
--- a/src/xercesc/util/Transcoders/ICU/ICUTransService.cpp
+++ b/src/xercesc/util/Transcoders/ICU/ICUTransService.cpp
@@ -301,6 +301,16 @@ void ICUTransService::upperCase(XMLCh* const toUpperCase) const
     }
 }
 
+void ICUTransService::lowerCase(XMLCh* const toLowerCase) const
+{
+    XMLCh* outPtr = toLowerCase;
+    while (*outPtr)
+    {
+        *outPtr = XMLCh(Unicode::toLowerCase(UChar(*outPtr)));
+        outPtr++;
+    }
+}
+
 
 
 // ---------------------------------------------------------------------------
diff --git a/src/xercesc/util/Transcoders/ICU/ICUTransService.hpp b/src/xercesc/util/Transcoders/ICU/ICUTransService.hpp
index 031fc63d2e81c8ce3b0f32aaeb757f151dd4ed10..89c086e3ef2c6af8f1cf46388c287bc264e2c70f 100644
--- a/src/xercesc/util/Transcoders/ICU/ICUTransService.hpp
+++ b/src/xercesc/util/Transcoders/ICU/ICUTransService.hpp
@@ -56,8 +56,11 @@
 
 /*
  * $Log$
- * Revision 1.1  2002/02/01 22:22:36  peiyongz
- * Initial revision
+ * Revision 1.2  2002/04/09 15:44:00  knoaman
+ * Add lower case string support.
+ *
+ * Revision 1.1.1.1  2002/02/01 22:22:36  peiyongz
+ * sane_include
  *
  * Revision 1.10  2000/03/18 00:00:03  roddey
  * Initial updates for two way transcoding support
@@ -142,6 +145,7 @@ public :
     virtual bool supportsSrcOfs() const;
 
     virtual void upperCase(XMLCh* const toUpperCase) const;
+    virtual void lowerCase(XMLCh* const toLowerCase) const;
 
 
 protected :
diff --git a/src/xercesc/util/Transcoders/Iconv/IconvTransService.cpp b/src/xercesc/util/Transcoders/Iconv/IconvTransService.cpp
index 442b5993695e834203c9bf63be0c569228a77b7e..5c71301badb6a2d1748d86fc2f237e6a900b16ab 100644
--- a/src/xercesc/util/Transcoders/Iconv/IconvTransService.cpp
+++ b/src/xercesc/util/Transcoders/Iconv/IconvTransService.cpp
@@ -227,6 +227,15 @@ void IconvTransService::upperCase(XMLCh* const toUpperCase) const
     }
 }
 
+void IconvTransService::lowerCase(XMLCh* const toLowerCase) const
+{
+    XMLCh* outPtr = toLowerCase;
+    while (*outPtr)
+    {
+        *outPtr = towlower(*outPtr);
+        outPtr++;
+    }
+}
 
 
 // ---------------------------------------------------------------------------
diff --git a/src/xercesc/util/Transcoders/Iconv/IconvTransService.hpp b/src/xercesc/util/Transcoders/Iconv/IconvTransService.hpp
index 7ac9a3c2ad69710a492eb8d6dd28463d4b754743..9121f8de2f45d89a1120a1928f92cdcb2689e85f 100644
--- a/src/xercesc/util/Transcoders/Iconv/IconvTransService.hpp
+++ b/src/xercesc/util/Transcoders/Iconv/IconvTransService.hpp
@@ -56,8 +56,11 @@
 
 /*
  * $Log$
- * Revision 1.1  2002/02/01 22:22:36  peiyongz
- * Initial revision
+ * Revision 1.2  2002/04/09 15:44:00  knoaman
+ * Add lower case string support.
+ *
+ * Revision 1.1.1.1  2002/02/01 22:22:36  peiyongz
+ * sane_include
  *
  * Revision 1.8  2000/03/02 19:55:35  roddey
  * This checkin includes many changes done while waiting for the
@@ -132,6 +135,7 @@ public :
     virtual bool supportsSrcOfs() const;
 
     virtual void upperCase(XMLCh* const toUpperCase) const;
+    virtual void lowerCase(XMLCh* const toLowerCase) const;
 
 protected :
     // -----------------------------------------------------------------------
diff --git a/src/xercesc/util/Transcoders/Iconv390/Iconv390TransService.cpp b/src/xercesc/util/Transcoders/Iconv390/Iconv390TransService.cpp
index 038c0f6fb04f50761e0f15750545d25066b42c6e..d0491c1521ffac8def8824824fc181786b73d108 100644
--- a/src/xercesc/util/Transcoders/Iconv390/Iconv390TransService.cpp
+++ b/src/xercesc/util/Transcoders/Iconv390/Iconv390TransService.cpp
@@ -334,6 +334,16 @@ void Iconv390TransService::upperCase(XMLCh* const toUpperCase) const
     }
 }
 
+void Iconv390TransService::lowerCase(XMLCh* const toLowerCase) const
+{
+    XMLCh* outPtr = toLowerCase;
+    while (*outPtr != 0) {
+	if ((*outPtr >= 0x41) && (*outPtr <= 0x5A))
+	    *outPtr = *outPtr + 0x20;
+	outPtr++;
+    }
+}
+
 // ---------------------------------------------------------------------------
 unsigned int Iconv390LCPTranscoder::calcRequiredSize(const char* const srcText)
 {
diff --git a/src/xercesc/util/Transcoders/Iconv390/Iconv390TransService.hpp b/src/xercesc/util/Transcoders/Iconv390/Iconv390TransService.hpp
index 30675d32758d0f3001947c382a17416abfcd515f..f0b7839a4456641c148a16dc319ef1fb7051efc9 100644
--- a/src/xercesc/util/Transcoders/Iconv390/Iconv390TransService.hpp
+++ b/src/xercesc/util/Transcoders/Iconv390/Iconv390TransService.hpp
@@ -56,8 +56,11 @@
 
 /*
  * $Log$
- * Revision 1.1  2002/02/01 22:22:36  peiyongz
- * Initial revision
+ * Revision 1.2  2002/04/09 15:44:00  knoaman
+ * Add lower case string support.
+ *
+ * Revision 1.1.1.1  2002/02/01 22:22:36  peiyongz
+ * sane_include
  *
  * Revision 1.3  2000/03/02 19:55:36  roddey
  * This checkin includes many changes done while waiting for the
@@ -125,6 +128,7 @@ public :
     virtual bool supportsSrcOfs() const;
 
     virtual void upperCase(XMLCh* const toUpperCase) const;
+    virtual void lowerCase(XMLCh* const toLowerCase) const;
 
 protected :
     // -----------------------------------------------------------------------
diff --git a/src/xercesc/util/Transcoders/Iconv400/Iconv400TransService.cpp b/src/xercesc/util/Transcoders/Iconv400/Iconv400TransService.cpp
index 83bdecbc1f218472aae539ed4489f72d3c5eb4b5..2b3b7e7b4c5d339235a2d1f7ead751d1eb876bcf 100644
--- a/src/xercesc/util/Transcoders/Iconv400/Iconv400TransService.cpp
+++ b/src/xercesc/util/Transcoders/Iconv400/Iconv400TransService.cpp
@@ -245,6 +245,11 @@ void Iconv400TransService::upperCase(XMLCh* const toUpperCase) const
     }
 }
 
+void Iconv400TransService::lowerCase(XMLCh* const toLowerCase) const
+{
+    //TO DO
+}
+
 // ---------------------------------------------------------------------------
 //  Iconv400TransService: The virtual transcoding service API
 // ---------------------------------------------------------------------------
diff --git a/src/xercesc/util/Transcoders/Iconv400/Iconv400TransService.hpp b/src/xercesc/util/Transcoders/Iconv400/Iconv400TransService.hpp
index 95e4b20173f2a9470b12400e3d745094c926ed06..7c87baaa69d799cfbd489760bb54a6d8564b5bff 100644
--- a/src/xercesc/util/Transcoders/Iconv400/Iconv400TransService.hpp
+++ b/src/xercesc/util/Transcoders/Iconv400/Iconv400TransService.hpp
@@ -107,6 +107,7 @@ public :
     virtual bool supportsSrcOfs() const;
 
     virtual void upperCase(XMLCh* const toUpperCase) const;
+    virtual void lowerCase(XMLCh* const toLowerCase) const;
 
 
 protected :
diff --git a/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp b/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp
index 39845b4786761bc8a5f4907ea44f31f2080822c8..68056fb077b74b0a5ec6d4a86f59dae095067400 100644
--- a/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp
+++ b/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.3  2002/04/09 15:44:00  knoaman
+ * Add lower case string support.
+ *
  * Revision 1.2  2002/03/18 13:39:11  tng
  * [Bug 7162 ] IconvFreeBSDTransService.cpp needs an #include statement fixed to use xercesc.
  *
@@ -830,6 +833,10 @@ void IconvFBSDTransService::upperCase(XMLCh* const toUpperCase) const
     }
 }
 
+void IconvFBSDTransService::lowerCase(XMLCh* const toLowerCase) const
+{
+    //TO DO
+}
 
 // ---------------------------------------------------------------------------
 //  IconvFBSDLCPTranscoder: The virtual transcoder API
diff --git a/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.hpp b/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.hpp
index 7e3983a1b3528b18843b904153fade75f9a2839d..550a81a15a2583449169caedb1e525c8e675bba0 100644
--- a/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.hpp
+++ b/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.hpp
@@ -56,8 +56,11 @@
 
 /*
  * $Log$
- * Revision 1.1  2002/02/01 22:22:36  peiyongz
- * Initial revision
+ * Revision 1.2  2002/04/09 15:44:00  knoaman
+ * Add lower case string support.
+ *
+ * Revision 1.1.1.1  2002/02/01 22:22:36  peiyongz
+ * sane_include
  *
  * Revision 1.3  2002/01/14 19:45:15  tng
  * Support IconvFBSD in multi-threading environment with all the possible combinations of threading and transcoding options.  By Max Gotlib.
@@ -237,6 +240,7 @@ public :
     virtual bool supportsSrcOfs() const;
 
     virtual void upperCase(XMLCh* const toUpperCase) const;
+    virtual void lowerCase(XMLCh* const toUpperCase) const;
 
 protected :
     // -----------------------------------------------------------------------
diff --git a/src/xercesc/util/Transcoders/MacOSUnicodeConverter/MacOSUnicodeConverter.cpp b/src/xercesc/util/Transcoders/MacOSUnicodeConverter/MacOSUnicodeConverter.cpp
index 16d714be5d68cda1231d4b8d895f572aecc69a04..06ed803c29f5b3874df4335c0e48d4079ad2b92b 100644
--- a/src/xercesc/util/Transcoders/MacOSUnicodeConverter/MacOSUnicodeConverter.cpp
+++ b/src/xercesc/util/Transcoders/MacOSUnicodeConverter/MacOSUnicodeConverter.cpp
@@ -492,6 +492,36 @@ void MacOSUnicodeConverter::upperCase(XMLCh* const toUpperCase) const
 #endif
 }
 
+void MacOSUnicodeConverter::lowerCase(XMLCh* const toLowerCase) const
+{
+	//	ะตะตะต TODO: Support CFString for this conversion
+#if defined(XML_METROWERKS)
+	// Use this if there's a reasonable c library available.
+	// Metrowerks does this reasonably
+	wchar_t * p = (wchar_t*) toLowerCase;
+	wchar_t c;
+	
+	while ((c = *p) != 0)
+		*p++ = std::towlower(c);
+#elif defined(XML_MACOSX) || true
+	// This might work, assuming we're on an ascii compiler.
+	// We'll use this under ProjectBuilder for now.
+	// Note that this only handles the ascii portion of the
+	// string, leaving all other characters in original case.
+	wchar_t * p = (wchar_t*)toLowerCase;
+	wchar_t c;
+	
+	while ((c = *p) != 0)
+	{
+		if (c >= 'A' && c <= 'Z')
+			c += 'a' - 'A';
+		*p++ = c;
+	}
+#else
+	#error Sorry, no support for lowerCase
+#endif
+}
+
 
 void
 MacOSUnicodeConverter::ConvertWideToNarrow(const XMLCh* wide, char* narrow, std::size_t maxChars)
diff --git a/src/xercesc/util/Transcoders/MacOSUnicodeConverter/MacOSUnicodeConverter.hpp b/src/xercesc/util/Transcoders/MacOSUnicodeConverter/MacOSUnicodeConverter.hpp
index 3d418f225d594849ab97c3f89a7974c24de87572..fe157e391ffea317ae2e80744eb3577c97f79837 100644
--- a/src/xercesc/util/Transcoders/MacOSUnicodeConverter/MacOSUnicodeConverter.hpp
+++ b/src/xercesc/util/Transcoders/MacOSUnicodeConverter/MacOSUnicodeConverter.hpp
@@ -111,7 +111,7 @@ public :
     virtual bool supportsSrcOfs() const;
 
     virtual void upperCase(XMLCh* const toUpperCase) const;
-
+    virtual void lowerCase(XMLCh* const toLowerCase) const;
 
 protected :
     // -----------------------------------------------------------------------
diff --git a/src/xercesc/util/Transcoders/Win32/Win32TransService.cpp b/src/xercesc/util/Transcoders/Win32/Win32TransService.cpp
index d4f063cdd68ab01b221f019180c38827b6b65223..b5556fb1f44ff6bad2d0e7de665eb43c51e8f55a 100644
--- a/src/xercesc/util/Transcoders/Win32/Win32TransService.cpp
+++ b/src/xercesc/util/Transcoders/Win32/Win32TransService.cpp
@@ -489,6 +489,10 @@ void Win32TransService::upperCase(XMLCh* const toUpperCase) const
     _wcsupr(toUpperCase);
 }
 
+void Win32TransService::lowerCase(XMLCh* const toLowerCase) const
+{
+    _wcslwr(toLowerCase);
+}
 
 bool Win32TransService::isAlias(const   HKEY            encodingKey
                     ,       char* const     aliasBuf 
diff --git a/src/xercesc/util/Transcoders/Win32/Win32TransService.hpp b/src/xercesc/util/Transcoders/Win32/Win32TransService.hpp
index 9d31d4946ac3723c5db8f8220e9efae5ec6c8ce1..788098f467aed57bab8dba1b1b327da2dee30ef4 100644
--- a/src/xercesc/util/Transcoders/Win32/Win32TransService.hpp
+++ b/src/xercesc/util/Transcoders/Win32/Win32TransService.hpp
@@ -56,8 +56,11 @@
 
 /*
  * $Log$
- * Revision 1.1  2002/02/01 22:22:37  peiyongz
- * Initial revision
+ * Revision 1.2  2002/04/09 15:44:00  knoaman
+ * Add lower case string support.
+ *
+ * Revision 1.1.1.1  2002/02/01 22:22:37  peiyongz
+ * sane_include
  *
  * Revision 1.10  2000/05/09 00:22:45  andyh
  * Memory Cleanup.  XMLPlatformUtils::Terminate() deletes all lazily
@@ -154,6 +157,7 @@ public :
     virtual bool supportsSrcOfs() const;
 
     virtual void upperCase(XMLCh* const toUpperCase) const;
+    virtual void lowerCase(XMLCh* const toLowerCase) const;
 
 
 protected :
diff --git a/src/xercesc/util/XMLString.cpp b/src/xercesc/util/XMLString.cpp
index 5bdeb439532b7d1a43be9c3d087228bc3b8c35a9..905fb1fa80bec1d5990b14cca54e091806dc3be7 100644
--- a/src/xercesc/util/XMLString.cpp
+++ b/src/xercesc/util/XMLString.cpp
@@ -1459,7 +1459,7 @@ void XMLString::upperCase(XMLCh* const toUpperCase)
 void XMLString::lowerCase(XMLCh* const toLowerCase)
 {
     // Refer this one to the transcoding service
-    //XMLPlatformUtils::fgTransService->lowerCase(toLowerCase);
+    XMLPlatformUtils::fgTransService->lowerCase(toLowerCase);
 }