diff --git a/src/util/Transcoders/ICU/ICUTransService.cpp b/src/util/Transcoders/ICU/ICUTransService.cpp
index 5112df88d7b9927c1375a05f708dc138ff3935ab..5bb3d1dd623932753b62c62f734e9a24e5485cf5 100644
--- a/src/util/Transcoders/ICU/ICUTransService.cpp
+++ b/src/util/Transcoders/ICU/ICUTransService.cpp
@@ -56,6 +56,9 @@
 
 /**
  * $Log$
+ * Revision 1.6  1999/12/18 00:22:32  roddey
+ * Changes to support the new, completely orthagonal, transcoder architecture.
+ *
  * Revision 1.5  1999/12/15 19:43:45  roddey
  * Now implements the new transcoding abstractions, with separate interface
  * classes for XML transcoders and local code page transcoders.
@@ -211,8 +214,23 @@ XMLLCPTranscoder* ICUTransService::makeNewLCPTranscoder()
 }
 
 
+void ICUTransService::upperCase(XMLCh* const toUpperCase) const
+{
+    XMLCh* outPtr = toUpperCase;
+    while (*outPtr)
+    {
+        *outPtr = Unicode::toUpperCase(*outPtr);
+        outPtr++;
+    }
+}
+
+
+
+// ---------------------------------------------------------------------------
+//  ICUTransService: The protected virtual transcoding service API
+// ---------------------------------------------------------------------------
 XMLTranscoder*
-ICUTransService::makeNewTranscoderFor(  const   XMLCh* const            encodingName
+ICUTransService::makeNewXMLTranscoder(  const   XMLCh* const            encodingName
                                         ,       XMLTransService::Codes& resValue
                                         , const unsigned int            blockSize)
 {
diff --git a/src/util/Transcoders/ICU/ICUTransService.hpp b/src/util/Transcoders/ICU/ICUTransService.hpp
index 4db46689b7963f5b2f7ded7c19bc842ded9e7714..b4d608b8e446e7e0d314136190251ccaf83c4d6c 100644
--- a/src/util/Transcoders/ICU/ICUTransService.hpp
+++ b/src/util/Transcoders/ICU/ICUTransService.hpp
@@ -56,6 +56,9 @@
 
 /**
  * $Log$
+ * Revision 1.3  1999/12/18 00:22:32  roddey
+ * Changes to support the new, completely orthagonal, transcoder architecture.
+ *
  * Revision 1.2  1999/12/15 19:43:45  roddey
  * Now implements the new transcoding abstractions, with separate interface
  * classes for XML transcoders and local code page transcoders.
@@ -112,7 +115,14 @@ public :
 
     virtual XMLLCPTranscoder* makeNewLCPTranscoder();
 
-    virtual XMLTranscoder* makeNewTranscoderFor
+    virtual void upperCase(XMLCh* const toUpperCase) const;
+
+
+protected :
+    // -----------------------------------------------------------------------
+    //  Protected virtual methods
+    // -----------------------------------------------------------------------
+    virtual XMLTranscoder* makeNewXMLTranscoder
     (
         const   XMLCh* const            encodingName
         ,       XMLTransService::Codes& resValue
diff --git a/src/util/Transcoders/Iconv/IconvTransService.cpp b/src/util/Transcoders/Iconv/IconvTransService.cpp
index 0aecc59e3e62c7985cf0d6b2dbcc3bb213998a73..0ac99778f91ceaed236557e35db2ec9f0cc88b33 100644
--- a/src/util/Transcoders/Iconv/IconvTransService.cpp
+++ b/src/util/Transcoders/Iconv/IconvTransService.cpp
@@ -56,6 +56,9 @@
 
 /**
  * $Log$
+ * Revision 1.6  1999/12/18 00:22:32  roddey
+ * Changes to support the new, completely orthagonal, transcoder architecture.
+ *
  * Revision 1.5  1999/12/14 23:53:35  rahulj
  * Removed the offending Ctrl-M's from the commit message
  * logs which was giving packaging problems.
@@ -128,6 +131,7 @@ IconvTransService::~IconvTransService()
 {
 }
 
+
 // ---------------------------------------------------------------------------
 //  IconvTransService: The virtual transcoding service API
 // ---------------------------------------------------------------------------
@@ -184,22 +188,24 @@ bool IconvTransService::isSpace(const XMLCh toCheck) const
 }
 
 
-XMLTranscoder* IconvTransService::makeNewDefTranscoder()
+XMLTranscoder* IconvTransService::makeNewLCPTranscoder()
 {
     // Just allocate a new transcoder of our type
-    return new IconvTranscoder;
+    return new IconvLCPTranscoder;
 }
 
 
+// ---------------------------------------------------------------------------
+//  IconvTransService: The protected virtual transcoding service API
+// ---------------------------------------------------------------------------
 XMLTranscoder*
-IconvTransService::makeNewTranscoderFor(const   XMLCh* const            encodingName
+IconvTransService::makeNewXMLTranscoder(const   XMLCh* const            encodingName
                                         ,       XMLTransService::Codes& resValue
                                         , const unsigned int            )
 {
     //
     //  NOTE: We don't use the block size here
     //
-    //
     //  This is a minimalist transcoding service, that only supports a local
     //  default transcoder. All named encodings return zero as a failure,
     //  which means that only the intrinsic encodings supported by the parser
@@ -209,14 +215,16 @@ IconvTransService::makeNewTranscoderFor(const   XMLCh* const            encoding
     return 0;
 }
 
+
+
 // ---------------------------------------------------------------------------
-//  IconvTranscoder: Constructors and Destructor
+//  IconvLCPTranscoder: Constructors and Destructor
 // ---------------------------------------------------------------------------
-IconvTranscoder::IconvTranscoder()
+IconvLCPTranscoder::IconvLCPTranscoder()
 {
 }
 
-IconvTranscoder::~IconvTranscoder()
+IconvLCPTranscoder::~IconvLCPTranscoder()
 {
 }
 
@@ -224,7 +232,7 @@ IconvTranscoder::~IconvTranscoder()
 // ---------------------------------------------------------------------------
 //  IconvTranscoder: The virtual transcoder API
 // ---------------------------------------------------------------------------
-unsigned int IconvTranscoder::calcRequiredSize(const char* const srcText)
+unsigned int IconvLCPTranscoder::calcRequiredSize(const char* const srcText)
 {
     if (!srcText)
         return 0;
@@ -237,7 +245,7 @@ unsigned int IconvTranscoder::calcRequiredSize(const char* const srcText)
 }
 
 
-unsigned int IconvTranscoder::calcRequiredSize(const XMLCh* const srcText)
+unsigned int IconvLCPTranscoder::calcRequiredSize(const XMLCh* const srcText)
 {
     if (!srcText)
         return 0;
@@ -268,26 +276,7 @@ unsigned int IconvTranscoder::calcRequiredSize(const XMLCh* const srcText)
 
 
 
-XMLCh IconvTranscoder::transcodeOne(const   char* const     srcData
-                                    , const unsigned int    srcBytes
-                                    ,       unsigned int&   bytesEaten)
-{
-    wchar_t  toFill;
-    int eaten = ::mbtowc(&toFill, srcData, srcBytes);
-    if (eaten == -1)
-    {
-        bytesEaten = 0;
-        return 0;
-    }
-
-    // Return the bytes we ate and the resulting char.
-    bytesEaten = eaten;
-    return toFill;
-}
-
-
-
-char* IconvTranscoder::transcode(const XMLCh* const toTranscode)
+char* IconvLCPTranscoder::transcode(const XMLCh* const toTranscode)
 {
     if (!toTranscode)
         return 0;
@@ -334,9 +323,9 @@ char* IconvTranscoder::transcode(const XMLCh* const toTranscode)
 }
 
 
-bool IconvTranscoder::transcode(const   XMLCh* const    toTranscode
-                                ,       char* const     toFill
-                                , const unsigned int    maxBytes)
+bool IconvLCPTranscoder::transcode( const   XMLCh* const    toTranscode
+                                    ,       char* const     toFill
+                                    , const unsigned int    maxBytes)
 {
     // Watch for a couple of pyscho corner cases
     if (!toTranscode || !maxBytes)
@@ -367,8 +356,6 @@ bool IconvTranscoder::transcode(const   XMLCh* const    toTranscode
     wideCharBuf[maxBytes] = 0x00;
 
     // Ok, go ahead and try the transcoding. If it fails, then ...
-    //
-
     if (::wcstombs(toFill, wideCharBuf, maxBytes) == -1)
     {
         delete [] allocatedArray;
@@ -383,7 +370,7 @@ bool IconvTranscoder::transcode(const   XMLCh* const    toTranscode
 
 
 
-XMLCh* IconvTranscoder::transcode(const char* const toTranscode)
+XMLCh* IconvLCPTranscoder::transcode(const char* const toTranscode)
 {
     XMLCh* retVal = 0;
     if (toTranscode)
@@ -419,9 +406,9 @@ XMLCh* IconvTranscoder::transcode(const char* const toTranscode)
 }
 
 
-bool IconvTranscoder::transcode(const   char* const     toTranscode
-                                ,       XMLCh* const    toFill
-                                , const unsigned int    maxChars)
+bool IconvLCPTranscoder::transcode( const   char* const     toTranscode
+                                    ,       XMLCh* const    toFill
+                                    , const unsigned int    maxChars)
 {
     // Check for a couple of psycho corner cases
     if (!toTranscode || !maxChars)
@@ -461,6 +448,40 @@ bool IconvTranscoder::transcode(const   char* const     toTranscode
 }
 
 
+
+// ---------------------------------------------------------------------------
+//  IconvTranscoder: Constructors and Destructor
+// ---------------------------------------------------------------------------
+IconvTranscoder::IconvTranscoder()
+{
+}
+
+IconvTranscoder::~IconvTranscoder()
+{
+}
+
+
+// ---------------------------------------------------------------------------
+//  IconvTranscoder: Implementation of the virtual transcoder API
+// ---------------------------------------------------------------------------
+XMLCh IconvTranscoder::transcodeOne(const   char* const     srcData
+                                    , const unsigned int    srcBytes
+                                    ,       unsigned int&   bytesEaten)
+{
+    wchar_t  toFill;
+    int eaten = ::mbtowc(&toFill, srcData, srcBytes);
+    if (eaten == -1)
+    {
+        bytesEaten = 0;
+        return 0;
+    }
+
+    // Return the bytes we ate and the resulting char.
+    bytesEaten = eaten;
+    return toFill;
+}
+
+
 unsigned int
 IconvTranscoder::transcodeXML(  const   char* const             srcData
                                 , const unsigned int            srcCount
@@ -492,3 +513,6 @@ IconvTranscoder::transcodeXML(  const   char* const             srcData
     bytesEaten = countIn;
     return countOut;
 }
+
+
+
diff --git a/src/util/Transcoders/Iconv/IconvTransService.hpp b/src/util/Transcoders/Iconv/IconvTransService.hpp
index ba3769c3a6ea04f1597172625ea3bc312d7506ae..7b83fcfb81f87accd4c8288ff9cf3e9f14a68ad6 100644
--- a/src/util/Transcoders/Iconv/IconvTransService.hpp
+++ b/src/util/Transcoders/Iconv/IconvTransService.hpp
@@ -56,8 +56,11 @@
 
 /**
  * $Log$
- * Revision 1.1  1999/11/09 01:06:10  twl
- * Initial revision
+ * Revision 1.2  1999/12/18 00:22:32  roddey
+ * Changes to support the new, completely orthagonal, transcoder architecture.
+ *
+ * Revision 1.1.1.1  1999/11/09 01:06:10  twl
+ * Initial checkin
  *
  * Revision 1.2  1999/11/08 20:45:34  rahul
  * Swat for adding in Product name and CVS comment log variable.
@@ -97,9 +100,14 @@ public :
 
     virtual bool isSpace(const XMLCh toCheck) const;
 
-    virtual XMLTranscoder* makeNewDefTranscoder();
+    virtual XMLTranscoder* makeNewLCPTranscoder();
+
 
-    virtual XMLTranscoder* makeNewTranscoderFor
+protected :
+    // -----------------------------------------------------------------------
+    //  Protected virtual methods
+    // -----------------------------------------------------------------------
+    virtual XMLTranscoder* makeNewXMLTranscoder
     (
         const   XMLCh* const            encodingName
         ,       XMLTransService::Codes& resValue
@@ -131,10 +139,6 @@ public :
     // -----------------------------------------------------------------------
     //  Implementation of the virtual transcoder interface
     // -----------------------------------------------------------------------
-    virtual unsigned int calcRequiredSize(const char* const srcText);
-
-    virtual unsigned int calcRequiredSize(const XMLCh* const srcText);
-
     virtual XMLCh transcodeOne
     (
         const   char* const     srcData
@@ -142,6 +146,43 @@ public :
         ,       unsigned int&   bytesEaten
     );
 
+    virtual unsigned int transcodeXML
+    (
+        const   char* const             srcData
+        , const unsigned int            srcCount
+        ,       XMLCh* const            toFill
+        , const unsigned int            maxChars
+        ,       unsigned int&           bytesEaten
+    );
+
+
+private :
+    // -----------------------------------------------------------------------
+    //  Unimplemented constructors and operators
+    // -----------------------------------------------------------------------
+    IconvTranscoder(const IconvTranscoder&);
+    void operator=(const IconvTranscoder&);
+};
+
+
+
+class XMLUTIL_EXPORT IconvLCPTranscoder : public XMLLCPTranscoder
+{
+public :
+    // -----------------------------------------------------------------------
+    //  Constructors and Destructor
+    // -----------------------------------------------------------------------
+    IconvTranscoder();
+    ~IconvTranscoder();
+
+
+    // -----------------------------------------------------------------------
+    //  Implementation of the virtual transcoder interface
+    // -----------------------------------------------------------------------
+    virtual unsigned int calcRequiredSize(const char* const srcText);
+
+    virtual unsigned int calcRequiredSize(const XMLCh* const srcText);
+
     virtual char* transcode(const XMLCh* const toTranscode);
 
     virtual bool transcode
@@ -160,22 +201,13 @@ public :
         , const unsigned int    maxChars
     );
 
-    virtual unsigned int transcodeXML
-    (
-        const   char* const             srcData
-        , const unsigned int            srcCount
-        ,       XMLCh* const            toFill
-        , const unsigned int            maxChars
-        ,       unsigned int&           bytesEaten
-    );
-
 
 private :
     // -----------------------------------------------------------------------
     //  Unimplemented constructors and operators
     // -----------------------------------------------------------------------
-    IconvTranscoder(const IconvTranscoder&);
-    void operator=(const IconvTranscoder&);
+    IconvLCPTranscoder(const IconvLCPTranscoder&);
+    void operator=(const IconvLCPTranscoder&);
 };
 
 #endif
diff --git a/src/util/Transcoders/Win32/Win32TransService.cpp b/src/util/Transcoders/Win32/Win32TransService.cpp
index 95e9bc47a18fa6429ae6fc1591760db5e64b72f7..d6409651f6ce8fbc619e4b4f91f15fbfafda2ef5 100644
--- a/src/util/Transcoders/Win32/Win32TransService.cpp
+++ b/src/util/Transcoders/Win32/Win32TransService.cpp
@@ -56,6 +56,9 @@
 
 /**
  * $Log$
+ * Revision 1.4  1999/12/18 00:22:33  roddey
+ * Changes to support the new, completely orthagonal, transcoder architecture.
+ *
  * Revision 1.3  1999/12/15 19:44:02  roddey
  * Now implements the new transcoding abstractions, with separate interface
  * classes for XML transcoders and local code page transcoders.
@@ -121,8 +124,19 @@ XMLLCPTranscoder* Win32TransService::makeNewLCPTranscoder()
     return new Win32LCPTranscoder;
 }
 
+
+void Win32TransService::upperCase(XMLCh* const toUpperCase) const
+{
+    wcsupr(toUpperCase);
+}
+
+
+
+// ---------------------------------------------------------------------------
+//  Win32TransService: The protected virtual transcoding service API
+// ---------------------------------------------------------------------------
 XMLTranscoder*
-Win32TransService::makeNewTranscoderFor(const   XMLCh* const
+Win32TransService::makeNewXMLTranscoder(const   XMLCh* const
                                         ,       XMLTransService::Codes& resValue
                                         , const unsigned int)
 {
diff --git a/src/util/Transcoders/Win32/Win32TransService.hpp b/src/util/Transcoders/Win32/Win32TransService.hpp
index 63c5531c73d6ba8116b38b7ec2e2f3da7974f8b7..f304229a470e35eca091cd654d7bbd9a780f3009 100644
--- a/src/util/Transcoders/Win32/Win32TransService.hpp
+++ b/src/util/Transcoders/Win32/Win32TransService.hpp
@@ -56,6 +56,9 @@
 
 /**
  * $Log$
+ * Revision 1.3  1999/12/18 00:22:33  roddey
+ * Changes to support the new, completely orthagonal, transcoder architecture.
+ *
  * Revision 1.2  1999/12/15 19:44:02  roddey
  * Now implements the new transcoding abstractions, with separate interface
  * classes for XML transcoders and local code page transcoders.
@@ -103,7 +106,14 @@ public :
 
     virtual XMLLCPTranscoder* makeNewLCPTranscoder();
 
-    virtual XMLTranscoder* makeNewTranscoderFor
+    virtual void upperCase(XMLCh* const toUpperCase) const;
+
+
+protected :
+    // -----------------------------------------------------------------------
+    //  Protected virtual methods
+    // -----------------------------------------------------------------------
+    virtual XMLTranscoder* makeNewXMLTranscoder
     (
         const   XMLCh* const            encodingName
         ,       XMLTransService::Codes& resValue