diff --git a/src/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp b/src/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp
index 46ad95bc3f4b04300ddaf35cdd0a4a4cfbd7984e..c59e30ca611650d66f08592847cc2cbbc7c81b9c 100644
--- a/src/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp
+++ b/src/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.3  2001/12/12 14:48:16  tng
+ * More bug fixes in IconvFBSD Transcoder.  By Max Gotlib.
+ *
  * Revision 1.2  2001/12/11 15:10:14  tng
  * More changes to IconvFBSDTransService.  Allow using "old" TransServece implementation (via '-t native' option to runConfigure) or
  * to employ libiconv (it is a part of FreeBSD ports-collection) services.  By Max Gotlib.
@@ -259,11 +262,11 @@ static size_t fbsd_mbstowcs(wchar_t *dest, const char *src, size_t n)
 
 static wint_t fbsd_towupper(wint_t ch)
 {
-    if (ch < 0x7F)
+    if (ch <= 0x7F)
 	return toupper(ch);
     char	buf[16];
     wchar_t	wc = wchar_t(ch);
-    wcstombs(buf, &wc, 1);
+    wcstombs(buf, &wc, 16);
     return toupper(*buf);
 }
 
@@ -348,7 +351,7 @@ void	IconvFBSDCD::xmlChToMbc (XMLCh xch, char *mbc) const
 // Return uppercase equivalent for XMLCh
 XMLCh	IconvFBSDCD::toUpper (const XMLCh ch) const
 {
-    if (ch < 0x7F)
+    if (ch <= 0x7F)
 	return toupper(ch);
     
     char	wcbuf[fUChSize * 2];
@@ -365,7 +368,7 @@ 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 (*tmpArr);
 	*tmpArr = tmpArr[1]; 
 	len = 1;
 	pTmpArr = wcbuf;
@@ -382,8 +385,8 @@ XMLCh	IconvFBSDCD::toUpper (const XMLCh ch) const
 // Check if passed characters belongs to the :space: class
 bool	IconvFBSDCD::isSpace(const XMLCh toCheck) const
 {
-    if (toCheck < 0x7F)
-	return toupper(toCheck);
+    if (toCheck <= 0x7F)
+	return isspace(toCheck);
     char	wcbuf[fUChSize * 2];
     char	tmpArr[4];
     xmlChToMbc (toCheck, wcbuf);
@@ -655,15 +658,16 @@ int IconvFBSDTransService::compareIString(const XMLCh* const	comp1
 
 #else /* XML_USE_LIBICONV */
 
-    XMLCh	c1 = 0;
-    XMLCh	c2 = 0;
+    XMLCh	c1 = toUpper(*cptr1);
+    XMLCh	c2 = toUpper(*cptr2);
     while ( (*cptr1 != 0) && (*cptr2 != 0) ) {
-	c1 = toUpper(*cptr1);
-	c2 = toUpper(*cptr2);
         if (c1 != c2)
             break;
         cptr1++;
-        cptr2++;
+        cptr2++;  
+	c1 = toUpper(*(++cptr1));
+	c2 = toUpper(*(++cptr2));
+
     }    
     return (int) ( c1 - c2 );
     
@@ -744,11 +748,11 @@ const XMLCh* IconvFBSDTransService::getId() const
 bool IconvFBSDTransService::isSpace(const XMLCh toCheck) const
 {
 #ifndef XML_USE_LIBICONV
-    if (toCheck < 0x7F)
-	return toupper(toCheck);
+    if (toCheck <= 0x7F)
+	return isspace(toCheck);
     char buf[16];
     wchar_t	wc = wchar_t(toCheck);
-    mbstowcs( &wc, buf, 1 );
+    wcstombs( buf, &wc, 16 );
     return (isspace(*buf) != 0);
 #else /* XML_USE_LIBICONV */
     return IconvFBSDCD::isSpace(toCheck);