diff --git a/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp b/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp
index 68056fb077b74b0a5ec6d4a86f59dae095067400..6d2f227bb6f9ee14fdf262e224652afe57fa71b7 100644
--- a/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp
+++ b/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.4  2002/04/11 15:38:05  knoaman
+ * String lower case support for FreeBSD by Max Gotlib
+ *
  * Revision 1.3  2002/04/09 15:44:00  knoaman
  * Add lower case string support.
  *
@@ -103,6 +106,8 @@ typedef struct __IconvFBSDEncoding {
 static const IconvFBSDEncoding	gIconvFBSDEncodings[] = {
     { "ucs-2-internal",		2,	LITTLE_ENDIAN },
     { "ucs-4-internal",		4,	LITTLE_ENDIAN },
+    { "UNICODELITTLE",		2,	LITTLE_ENDIAN },
+    { "UNICODEBIG",		2,	BIG_ENDIAN },
     { "iso-10646-ucs-2",	4,	BIG_ENDIAN },
     { "iso-10646-ucs-4",	4,	BIG_ENDIAN },
     { "iso-10646-utf-16",	2,	BIG_ENDIAN },
@@ -277,12 +282,22 @@ static wint_t fbsd_towupper(wint_t ch)
 {
     if (ch <= 0x7F)
 	return toupper(ch);
-    char	buf[16];
+    unsigned char	buf[16];
     wchar_t	wc = wchar_t(ch);
-    wcstombs(buf, &wc, 16);
+    wcstombs((char*)buf, &wc, 16);
     return toupper(*buf);
 }
 
+static wint_t fbsd_towlower(wint_t ch)
+{
+    if (ch <= 0x7F)
+	return tolower(ch);
+    unsigned char	buf[16];
+    wchar_t	wc = wchar_t(ch);
+    wcstombs((char *)buf, &wc, 16);
+    return tolower(*buf);
+}
+
 #else /* XML_USE_LIBICONV */
 
 #if !defined(APP_NO_THREADS)
@@ -386,7 +401,39 @@ XMLCh	IconvFBSDCD::toUpper (const XMLCh ch) const
     if (::iconv (fCDTo, (const char**) &ptr, &len,
 		 &pTmpArr, &bLen) == (size_t) -1)
 	return 0;
-    tmpArr[1] = toupper (*tmpArr);
+    tmpArr[1] = toupper (*((unsigned char *)tmpArr));
+    *tmpArr = tmpArr[1];
+    len = 1;
+    pTmpArr = wcbuf;
+    bLen = fUChSize;
+    ptr = tmpArr;
+    if (::iconv (fCDFrom, (const char **)&ptr, &len,
+		 &pTmpArr, &bLen) == (size_t) -1)
+	return 0;
+    mbcToXMLCh (wcbuf, (XMLCh*) &ch);
+    return ch;
+}
+
+// Return lowercase equivalent for XMLCh
+XMLCh	IconvFBSDCD::toLower (const XMLCh ch) const
+{
+    if (ch <= 0x7F)
+	return tolower(ch);
+
+    char	wcbuf[fUChSize * 2];
+    xmlChToMbc (ch, wcbuf);
+
+    char	tmpArr[4];
+    char*	ptr = wcbuf;
+    size_t	len = fUChSize;
+    char	*pTmpArr = tmpArr;
+    size_t	bLen = 2;
+
+    ICONV_LOCK;
+    if (::iconv (fCDTo, (const char**) &ptr, &len,
+		 &pTmpArr, &bLen) == (size_t) -1)
+	return 0;
+    tmpArr[1] = tolower (*((unsigned char*)tmpArr));
     *tmpArr = tmpArr[1];
     len = 1;
     pTmpArr = wcbuf;
@@ -835,7 +882,16 @@ void IconvFBSDTransService::upperCase(XMLCh* const toUpperCase) const
 
 void IconvFBSDTransService::lowerCase(XMLCh* const toLowerCase) const
 {
-    //TO DO
+    XMLCh* outPtr = toLowerCase;
+    while (*outPtr)
+    {
+#ifndef XML_USE_LIBICONV
+        *outPtr = fbsd_towlower(*outPtr);
+#else /* XML_USE_LIBICONV */
+	*outPtr = toLower(*outPtr);
+#endif /* !XML_USE_LIBICONV */
+        outPtr++;
+    }
 }
 
 // ---------------------------------------------------------------------------
diff --git a/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.hpp b/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.hpp
index 550a81a15a2583449169caedb1e525c8e675bba0..bec82b503efd10917834fe61ad11a06f4e7cc59d 100644
--- a/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.hpp
+++ b/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.hpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.3  2002/04/11 15:38:05  knoaman
+ * String lower case support for FreeBSD by Max Gotlib
+ *
  * Revision 1.2  2002/04/09 15:44:00  knoaman
  * Add lower case string support.
  *
@@ -111,6 +114,9 @@ public:
     // Return uppercase equivalent for XMLCh
     XMLCh 	toUpper (const XMLCh ch) const;
 
+    // Return uppercase equivalent for XMLCh
+    XMLCh 	toLower (const XMLCh ch) const;
+
     // Check if passed characters belongs to the :space: class
     virtual bool isSpace(const XMLCh toCheck) const;