diff --git a/configure.ac b/configure.ac
index bca57e69347eff56c4590db205af81650086ae2b..c4289c9dd4b07515341886d1ea42f25e8fa5d148 100644
--- a/configure.ac
+++ b/configure.ac
@@ -180,6 +180,25 @@ AC_COMPILE_IFELSE(  [AC_LANG_PROGRAM([[#include <wchar.h>]],
                     ]
                  )
 
+AC_MSG_CHECKING([if iconv uses const pointers])
+AC_COMPILE_IFELSE(  [AC_LANG_PROGRAM([[#include <iconv.h>]],
+                                     [[
+                                       const char *fromPtr=0;
+                                       size_t     fromLen=0;
+                                       const char *toPtr=0;
+                                       size_t     toLen=0;
+                                       iconv_t    cv=0;
+                                       iconv(cv, &tmpPtr, &fromLen, &toPtr, &toLen);
+                                      ]])],
+                    [
+                      AC_MSG_RESULT([yes])
+                      AC_DEFINE_UNQUOTED([ICONV_USES_CONST_POINTER], 1, [Define to 1 if you have to use const char* with iconv, to 0 if you must use char*.])
+                    ],
+                    [
+                      AC_MSG_RESULT([no])
+                      AC_DEFINE_UNQUOTED([ICONV_USES_CONST_POINTER], 0, [Define to 1 if you have to use const char* with iconv, to 0 if you must use char*.])
+                    ]
+                 )
 
 AC_SUBST([SHREXT], [$shrext_cmds])
 
diff --git a/src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.cpp b/src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.cpp
index 9ab5f0e48386be4362bd0c42d60a1475861a799e..544953d4e91558dd62b0247e4bf41f35079a4fbb 100644
--- a/src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.cpp
+++ b/src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.cpp
@@ -242,7 +242,11 @@ XMLCh IconvGNUWrapper::toUpper (const XMLCh ch)
     xmlChToMbc (ch, wcbuf);
 
     char    tmpArr[4];
+#if ICONV_USES_CONST_POINTER
     const char* ptr = wcbuf;
+#else
+    char* ptr = wcbuf;
+#endif
     size_t    len = fUChSize;
     char    *pTmpArr = tmpArr;
     size_t    bLen = 2;
@@ -271,7 +275,11 @@ XMLCh IconvGNUWrapper::toLower (const XMLCh ch)
     xmlChToMbc (ch, wcbuf);
 
     char    tmpArr[4];
+#if ICONV_USES_CONST_POINTER
     const char* ptr = wcbuf;
+#else
+    char* ptr = wcbuf;
+#endif
     size_t    len = fUChSize;
     char    *pTmpArr = tmpArr;
     size_t    bLen = 2;
@@ -372,7 +380,11 @@ size_t    IconvGNUWrapper::iconvFrom ( const char    *fromPtr,
                  char        **toPtr,
                  size_t        toLen )
 {
+#if ICONV_USES_CONST_POINTER
     const char ** tmpPtr = &fromPtr;
+#else
+    char ** tmpPtr = (char**)&fromPtr;
+#endif
     return ::iconv (fCDFrom, tmpPtr, fromLen, toPtr, &toLen);
 }
 
@@ -381,7 +393,11 @@ size_t    IconvGNUWrapper::iconvTo ( const char    *fromPtr,
                    char        **toPtr,
                    size_t        toLen )
 {
+#if ICONV_USES_CONST_POINTER
     const char ** tmpPtr = &fromPtr;
+#else
+    char ** tmpPtr = (char**)&fromPtr;
+#endif
     return ::iconv (fCDTo, tmpPtr, fromLen, toPtr, &toLen);
 }