diff --git a/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp b/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp
index 6d2f227bb6f9ee14fdf262e224652afe57fa71b7..32847cfb7c2a259efe95174c08d004b9e708395e 100644
--- a/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp
+++ b/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.5  2002/07/04 18:20:18  tng
+ * [Bug 10253] Bugfix for the IconvFBSD transcoder.   Patch from Max Gotlib.
+ *
  * Revision 1.4  2002/04/11 15:38:05  knoaman
  * String lower case support for FreeBSD by Max Gotlib
  *
@@ -105,12 +108,14 @@ typedef struct __IconvFBSDEncoding {
 
 static const IconvFBSDEncoding	gIconvFBSDEncodings[] = {
     { "ucs-2-internal",		2,	LITTLE_ENDIAN },
+    { "ucs2-internal",		2,	LITTLE_ENDIAN },
     { "ucs-4-internal",		4,	LITTLE_ENDIAN },
+    { "ucs4-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 },
+    /* { "iso-10646-utf-16",	2,	BIG_ENDIAN }, */
     { NULL, 0, 	0 }
 };
 
@@ -451,6 +456,7 @@ bool	IconvFBSDCD::isSpace(const XMLCh toCheck) const
 {
     if (toCheck <= 0x7F)
 	return isspace(toCheck);
+
     char	wcbuf[fUChSize * 2];
     char	tmpArr[4];
 
@@ -924,8 +930,10 @@ IconvFBSDLCPTranscoder::calcRequiredSize (const char* const srcText)
 	char		*pTmpArr = tmpWideArr;
 	const char	*ptr = srcText + srcLen - len;
 	size_t	rc = iconvFrom(ptr, &len, &pTmpArr, gTempBuffArraySize);
-	if (rc == (size_t) -1 && errno != E2BIG)
-	    return 0;
+	if (rc == (size_t) -1 && errno != E2BIG) {
+	    ThrowXML(TranscodingException, XMLExcepts::Trans_BadSrcSeq);
+	    /* return 0; */
+	}
 	rc = pTmpArr - (char *) tmpWideArr;
 	totalLen += rc;
 	if (rc == 0 || len == 0)
@@ -998,7 +1006,8 @@ IconvFBSDLCPTranscoder::calcRequiredSize(const XMLCh* const srcText)
 	if (rc == (size_t) -1 && errno != E2BIG) {
 	    if (wBufPtr)
 		delete [] wBufPtr;
-	    return 0;
+	    ThrowXML(TranscodingException, XMLExcepts::Trans_BadSrcSeq);
+	    /* return 0; */
 	}
 	rc = pTmpArr - tmpBuff;
 	totalLen += rc;
@@ -1454,12 +1463,11 @@ unsigned int	IconvFBSDTranscoder::transcodeFrom
     for (size_t cnt = 0; cnt < maxChars && srcLen; cnt++) {
 	size_t	rc = iconvFrom(startSrc, &srcLen, &orgTarget, uChSize());
 	if (rc == (size_t)-1) {
-	    if (errno != E2BIG) {
+	    if (errno != E2BIG || prevSrcLen == srcLen) {
 		if (wBufPtr)
 		    delete [] wBufPtr;
 		ThrowXML(TranscodingException, XMLExcepts::Trans_BadSrcSeq);
 	    }
-	    break;
 	}
 	charSizes[cnt] = prevSrcLen - srcLen;
 	prevSrcLen = srcLen;