diff --git a/.cvsignore b/.cvsignore
new file mode 100644
index 0000000..b0eab7a
--- /dev/null
+++ b/.cvsignore
@@ -0,0 +1,14 @@
+apriconv.vcproj
+libapriconv.vcproj
+config.cache
+config.log
+config.nice
+config.status
+configure
+libtool
+shlibtool
+Debug
+Release
+LibD
+LibR
+*.plg
diff --git a/CHANGES b/CHANGES
new file mode 100644
index 0000000..7f8f068
--- /dev/null
+++ b/CHANGES
@@ -0,0 +1,16 @@
+Changes with APR-ICONV a15
+
+  *) A second pass at a working build system - now builds on linux,
+     some namespace protection added.
+     [jean-frederic clere <jfrederic.clere@fujitsu-siemens.com>]
+
+  *) A first blush at a working build system.
+     [jean-frederic clere <jfrederic.clere@fujitsu-siemens.com>]
+
+  *) First set of changes for APR compatibility (eliminated __inline).
+     [jean-frederic clere <jfrederic.clere@fujitsu-siemens.com>]
+
+Changes with APR-ICONV a9
+
+  *) Source moved from the apr library into it's own repository
+     due to size concerns.  Still requires portability overhaul.
\ No newline at end of file
diff --git a/Makefile b/Makefile
index 6907d93..e2cc986 100644
--- a/Makefile
+++ b/Makefile
@@ -1,3 +1,3 @@
-SUBDIR=	ccs ces
+SUBDIR= lib ccs ces util
 
 .include <bsd.subdir.mk>
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..0d3c273
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,78 @@
+#
+# Top-level Makefile for APRICONV
+#
+TARGET_LIB = lib/libapriconv.la
+TARGET_EXPORTS = lib/apriconv.exports
+
+TARGETS = delete-lib $(TARGET_LIB) delete-exports $(TARGET_EXPORTS)
+
+# bring in rules.mk for standard functionality
+@INCLUDE_RULES@
+
+SUBDIRS = lib ccs ces util
+CLEAN_SUBDIRS = . lib ccs ces util
+
+CLEAN_TARGETS = $(TARGET_EXPORTS)
+DISTCLEAN_TARGETS = config.cache config.log config.status \
+	export_vars.sh
+EXTRACLEAN_TARGETS = configure libtool aclocal.m4
+
+### install location
+prefix=@prefix@
+exec_prefix=@prefix@/bin
+lib_prefix=@prefix@/lib
+libdir=@iconv_libdir@
+includedir=@includedir@
+
+
+delete-lib:
+	@if test -f $(TARGET_LIB); then \
+	    objects="`find $(SUBDIRS) -name '*.lo' -a -newer $(TARGET_LIB)`" ; \
+	    if test -n "$$objects"; then \
+		echo Found newer objects. Will relink $(TARGET_LIB). ; \
+		echo $(RM) -f $(TARGET_LIB) ; \
+		$(RM) -f $(TARGET_LIB) ; \
+	    fi \
+	fi
+
+install: $(TARGET_LIB)
+	if [ ! -d $(includedir) ]; then \
+	    @APR_SOURCE_DIR@/build/mkdir.sh $(includedir); \
+	fi; \
+	cp lib/*.h $(includedir); \
+	if [ ! -d $(lib_prefix) ]; then \
+	    @APR_SOURCE_DIR@/build/mkdir.sh $(lib_prefix); \
+	fi; \
+	$(LIBTOOL) --mode=install cp $(TARGET_LIB) $(lib_prefix)
+	if [ ! -d $(libdir) ]; then \
+	    @APR_SOURCE_DIR@/build/mkdir.sh $(libdir); \
+	fi; \
+	(cd ccs; $(LIBTOOL) --mode=install cp *.la $(libdir))
+	(cd ces; $(LIBTOOL) --mode=install cp *.la $(libdir))
+	if [ ! -d $(exec_prefix) ]; then \
+	    @APR_SOURCE_DIR@/build/mkdir.sh $(exec_prefix); \
+	fi; \
+	(cd util/.libs; $(LIBTOOL) --mode=install cp iconv $(exec_prefix))
+
+$(TARGET_LIB):
+	(cd lib; make)
+
+delete-exports:
+	@if test -f $(TARGET_EXPORTS); then \
+	    headers="`find lib/*.h -newer $(TARGET_EXPORTS)`" ; \
+	    if test -n "$$headers"; then \
+		echo Found newer headers. Will rebuild $(TARGET_EXPORTS). ; \
+		echo $(RM) -f $(TARGET_EXPORTS) ; \
+		$(RM) -f $(TARGET_EXPORTS) ; \
+	    fi \
+	fi
+
+$(TARGET_EXPORTS):
+	$(AWK) -f @APR_SOURCE_DIR@/build/make_export.awk lib/*.h > $@ ;
+
+docs:
+	mkdir ./docs
+	perl @APR_SOURCE_DIR@/build/scandoc.pl -i./build/default.pl -p./docs/ ./lib/*.h
+
+
+.PHONY: delete-lib delete-exports
diff --git a/Makefile.new b/Makefile.new
new file mode 100644
index 0000000..6907d93
--- /dev/null
+++ b/Makefile.new
@@ -0,0 +1,3 @@
+SUBDIR=	ccs ces
+
+.include <bsd.subdir.mk>
diff --git a/STATUS b/STATUS
new file mode 100644
index 0000000..7430e39
--- /dev/null
+++ b/STATUS
@@ -0,0 +1,31 @@
+APR-ICONV LIBRARY STATUS:
+Last modified at [$Date: 2000/12/10 18:34:56 $]
+
+Release:
+
+RELEASE SHOWSTOPPERS:
+
+    * Determine the package's relationship to apr/i18n/unix
+      and integrate into the apr build.
+
+RELEASE NON-SHOWSTOPPERS BUT WOULD BE REAL NICE TO WRAP THESE UP:
+
+    * Drop modules.c code and replace much functionality with the
+      apr dso methods, etc.
+
+Other bugs that need fixing:
+
+
+Other features that need writing:
+
+
+Documentation that needs writing:
+
+    * API documentation
+        Status:
+
+
+Available Patches:
+
+
+Open Issues:
diff --git a/apriconv.dsp b/apriconv.dsp
new file mode 100644
index 0000000..2a4d97e
--- /dev/null
+++ b/apriconv.dsp
@@ -0,0 +1,129 @@
+# Microsoft Developer Studio Project File - Name="apriconv" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=apriconv - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "apriconv.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "apriconv.mak" CFG="apriconv - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "apriconv - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "apriconv - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "apriconv - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "LibR"
+# PROP BASE Intermediate_Dir "LibR"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "LibR"
+# PROP Intermediate_Dir "LibR"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../apr/include" /D "NDEBUG" /D "APR_DECLARE_STATIC" /D "API_DECLARE_STATIC" /D "WIN32" /D "_WINDOWS" /Fd"LibR\apriconv" /FD /c
+# ADD BASE RSC /l 0x409
+# ADD RSC /l 0x409
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF  "$(CFG)" == "apriconv - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "LibD"
+# PROP BASE Intermediate_Dir "LibD"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "LibD"
+# PROP Intermediate_Dir "LibD"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../apr/include" /D "_DEBUG" /D "APR_DECLARE_STATIC" /D "API_DECLARE_STATIC" /D "WIN32" /D "_WINDOWS" /Fd"LibD\apriconv" /FD /c
+# ADD BASE RSC /l 0x409
+# ADD RSC /l 0x409
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ENDIF 
+
+# Begin Target
+
+# Name "apriconv - Win32 Release"
+# Name "apriconv - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter ".c"
+# Begin Group "lib"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\lib\iconv.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\lib\iconv_ces.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\lib\iconv_ces_euc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\lib\iconv_ces_iso2022.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\lib\iconv_int.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\lib\iconv_module.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\lib\iconv_uc.c
+# End Source File
+# End Group
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter ".h"
+# Begin Source File
+
+SOURCE=.\lib\iconv.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/build/.cvsignore b/build/.cvsignore
new file mode 100644
index 0000000..29d51bb
--- /dev/null
+++ b/build/.cvsignore
@@ -0,0 +1 @@
+rules.mk
diff --git a/build/apr-iconv.m4 b/build/apr-iconv.m4
new file mode 100644
index 0000000..60af3ba
--- /dev/null
+++ b/build/apr-iconv.m4
@@ -0,0 +1,43 @@
+
+dnl
+dnl custom autoconf rules for APRICONV
+dnl
+
+dnl
+dnl APU_FIND_APR: figure out where APR is located
+dnl that a copy from apr-util...
+dnl
+AC_DEFUN(APU_FIND_APR,[
+
+AC_MSG_CHECKING(for APR)
+AC_ARG_WITH(apr,
+[  --with-apr=DIR          path to APR source or the APR includes],
+[
+    if test "$withval" = "yes"; then
+        AC_MSG_ERROR(You need to specify a directory with --with-apr)
+    fi
+    absdir="`cd $withval ; pwd`"
+    if test -f "$absdir/apr_pools.h"; then
+	APR_INCLUDES="$absdir"
+    elif test -f "$absdir/include/apr_pools.h"; then
+	APR_SOURCE_DIR="$absdir"
+    fi
+],[
+    dnl see if we can find APR
+    if test -f "$srcdir/apr/include/apr_pools.h"; then
+	APR_SOURCE_DIR="$srcdir/apr"
+    elif test -f "$srcdir/../apr/include/apr_pools.h"; then
+	APR_SOURCE_DIR="`cd $srcdir/../apr ; pwd`"
+    fi
+])
+if test -n "$APR_SOURCE_DIR"; then
+    APR_INCLUDES="$APR_SOURCE_DIR/include"
+fi
+if test -z "$APR_INCLUDES"; then
+    AC_MSG_RESULT(not found)
+    AC_MSG_ERROR(APR could not be located. Please use the --with-apr option.)
+fi
+AC_MSG_RESULT($APR_INCLUDES)
+
+AC_SUBST(APR_SOURCE_DIR)
+])
diff --git a/build/rules.mk.in b/build/rules.mk.in
new file mode 100644
index 0000000..02f36e8
--- /dev/null
+++ b/build/rules.mk.in
@@ -0,0 +1,175 @@
+# ====================================================================
+# The Apache Software License, Version 1.1
+#
+# Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
+# reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in
+#    the documentation and/or other materials provided with the
+#    distribution.
+#
+# 3. The end-user documentation included with the redistribution,
+#    if any, must include the following acknowledgment:
+#       "This product includes software developed by the
+#        Apache Software Foundation (http://www.apache.org/)."
+#    Alternately, this acknowledgment may appear in the software itself,
+#    if and wherever such third-party acknowledgments normally appear.
+#
+# 4. The names "Apache" and "Apache Software Foundation" must
+#    not be used to endorse or promote products derived from this
+#    software without prior written permission. For written
+#    permission, please contact apache@apache.org.
+#
+# 5. Products derived from this software may not be called "Apache",
+#    nor may "Apache" appear in their name, without prior written
+#    permission of the Apache Software Foundation.
+#
+# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+# ====================================================================
+#
+# This software consists of voluntary contributions made by many
+# individuals on behalf of the Apache Software Foundation.  For more
+# information on the Apache Software Foundation, please see
+# <http://www.apache.org/>.
+#
+
+#
+# rules.mk: standard rules for APRICONV
+#
+
+#
+# Configuration variables
+#
+top_builddir=@top_builddir@
+APR_SOURCE_DIR=@APR_SOURCE_DIR@
+
+CC=@CC@
+AWK=@AWK@
+LIBTOOL=@LIBTOOL@
+
+CFLAGS=@CFLAGS@
+LIBS=@LIBS@
+LDFLAGS=@LDFLAGS@
+
+RM=@RM@
+SHELL=@SHELL@
+
+### make LTFLAGS somewhat variable?
+LTFLAGS = --silent
+
+#
+# Basic macro setup
+#
+COMPILE      = $(CC) $(CFLAGS)
+LT_COMPILE   = $(LIBTOOL) --mode=compile $(LTFLAGS) $(COMPILE) -c $< && touch $@
+
+LINK         = $(LIBTOOL) --mode=link $(LTFLAGS) $(COMPILE) $(LDFLAGS) -o $@
+
+SH_LIBTOOL = $(SHELL) $(top_builddir)/shlibtool --silent
+SH_COMPILE = $(SH_LIBTOOL) --mode=compile $(COMPILE) -c $< && touch $@
+SH_LINK  = $(SH_LIBTOOL) --mode=link $(COMPILE) $(LTFLAGS) $(LDFLAGS) $(NOTEST_LDFLAGS) -o $@
+# To be arranged...
+libexecdir = /usr/local/lib
+
+MKEXPORT     = $(AWK) -f $(APR_SOURCE_DIR)/build/make_export.awk
+SCANDOC      = $(APR_SOURCE_DIR)/build/scandoc.pl
+
+#
+# Standard build rules
+#
+all: all-recursive
+depend: depend-recursive
+clean: clean-recursive
+distclean: distclean-recursive
+extraclean: extraclean-recursive
+
+install: all-recursive
+
+
+all-recursive depend-recursive clean-recursive distclean-recursive \
+  extraclean-recursive:
+	@otarget=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; \
+	ttarget=`echo $otarget | sed s/.*clean.*/clean/`; \
+	if test x"$ttarget" = "xclean"; then \
+	    list='$(SUBDIRS) $(CLEAN_SUBDIRS)'; \
+	fi; \
+	for i in $$list; do \
+	    if test -d "$$i"; then \
+		target="$$otarget"; \
+		echo "Making $$target in $$i"; \
+		if test "$$i" = "."; then \
+		    made_local=yes; \
+		    target="local-$$target"; \
+		fi; \
+		(cd $$i && $(MAKE) $$target) || exit 1; \
+	    fi; \
+	done; \
+        if test "$$otarget" = "all" && test -z "$(TARGETS)"; then \
+	    made_local=n/a; \
+	fi; \
+	if test -z "$$made_local"; then \
+	    $(MAKE) "local-$$otarget" || exit 1; \
+	fi
+
+local-clean:
+	$(RM) -f *.o *.lo *.a *.la *.so *.slo $(CLEAN_TARGETS) $(PROGRAMS)
+	$(RM) -rf .libs
+
+local-distclean: local-clean
+	$(RM) -f Makefile $(DISTCLEAN_TARGETS)
+
+local-extraclean: local-distclean
+	@if test -n "$(EXTRACLEAN_TARGETS)"; then \
+	    echo $(RM) -f $(EXTRACLEAN_TARGETS) ; \
+	    $(RM) -f $(EXTRACLEAN_TARGETS) ; \
+	fi
+
+local-all: $(TARGETS)
+
+local-depend:
+### need something here
+
+
+#
+# Implicit rules for creating outputs from input files
+#
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .la .slo
+
+.c.o:
+	$(COMPILE) -c $<
+
+.c.lo:
+	$(LT_COMPILE)
+
+.c.slo:
+	$(SH_COMPILE)
+
+.c.la:
+	$(MAKE) $*.slo
+	$(SH_LINK) -rpath $(libexecdir) -module -avoid-version  $*.lo
+
+.PHONY: all depend clean distclean extraclean install \
+	all-recursive depend-recursive clean-recursive distclean-recursive \
+	extraclean-recursive
+	local-all local-depend local-clean local-distclean local-extraclean
diff --git a/buildconf.sh b/buildconf.sh
new file mode 100644
index 0000000..f646fef
--- /dev/null
+++ b/buildconf.sh
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+#
+# Build aclocal.m4 from libtool's libtool.m4 and our own M4 files.
+#
+### we may need to get smarter with these two lines (e.g. PrintPath)
+ltpath=`../apr/build/PrintPath libtoolize`
+ltpath=`dirname $ltpath`
+ltfile=`cd $ltpath/../share/aclocal ; pwd`/libtool.m4
+echo "Incorporating $ltfile into aclocal.m4 ..."
+echo "dnl THIS FILE IS AUTOMATICALLY GENERATED BY buildconf.sh" > aclocal.m4
+echo "dnl edits here will be lost" >> aclocal.m4
+cat build/apr-iconv.m4 >> aclocal.m4
+cat $ltfile >> aclocal.m4
+
+#
+# Create the libtool helper files
+#
+# Note: we always replace the files, and we copy (rather than link) them.
+#
+echo "Copying libtool helper files ..."
+$ltpath/libtoolize --force --copy
+
+#
+# Generate the autoconf header (include/apu_config.h) and ./configure
+#
+echo "Creating include/private/apu_config.h ..."
+autoheader
+
+echo "Creating configure ..."
+### do some work to toss config.cache?
+autoconf
diff --git a/ccs/.cvsignore b/ccs/.cvsignore
new file mode 100644
index 0000000..2cbb2f1
--- /dev/null
+++ b/ccs/.cvsignore
@@ -0,0 +1,4 @@
+.libs
+*.la
+*.lo
+*.slo
diff --git a/ccs/Makefile b/ccs/Makefile
index 8c07c3e..6cb07d9 100644
--- a/ccs/Makefile
+++ b/ccs/Makefile
@@ -1,18 +1,76 @@
-MODULES = iso-8859-3.so iso-8859-6.so iso-8859-7.so iso-8859-8.so \
-          iso-8859-9.so iso-8859-10.so iso-8859-13.so iso-8859-14.so \
-	  koi8-ru.so gb12345.so johab.so \
-          adobe-stdenc.so adobe-symbol.so adobe-zdingbats.so \
-          mac-ce.so mac-croatian.so mac-cyrillic.so mac-dingbats.so \
-          mac-greek.so mac-iceland.so mac-japan.so mac-roman.so \
-          mac-romania.so mac-thai.so mac-turkish.so mac-ukraine.so \
-          cp424.so cp500.so cp856.so cp1006.so \
-          cp437.so cp737.so cp857.so cp860.so cp861.so cp862.so cp863.so \
-          cp864.so cp865.so cp869.so cp874.so \
-          cp932.so cp936.so cp949.so cp950.so \
-          windows-1250.so windows-1251.so windows-1252.so \
-          windows-1253.so windows-1254.so windows-1255.so \
-          windows-1256.so windows-1257.so windows-1258.so \
-          cp037.so cp875.so cp1026.so \
-          cp10000.so cp10006.so cp10007.so cp10029.so cp10079.so cp10081.so
-
 .include "../Makefile.inc"
+
+CHARSETS_ISO8859 = iso-8859-1.so iso-8859-2.so iso-8859-4.so iso-8859-5.so \
+                   iso-8859-15.so
+CHARSETS_PC =      cp775.so cp850.so cp852.so cp855.so cp866.so
+CHARSETS_KOI =     koi8-r.so koi8-u.so
+CHARSETS_SB =      $(CHARSETS_ISO8859) $(CHARSETS_PC) $(CHARSETS_CJK) \
+                   $(CHARSETS_KOI) us-ascii.so
+CHARSETS_CJK =     big5.so cns11643-plane1.so cns11643-plane2.so \
+                   cns11643-plane14.so gb_2312-80.so jis_x0201.so \
+                   jis_x0208-1983.so jis_x0212-1990.so ksx1001.so shift_jis.so
+CHARSETS_ALL =     ${CHARSETS_SB} ${CHARSETS_CJK}
+EXTRA_ISO8859 =    iso-8859-3.so iso-8859-6.so iso-8859-7.so iso-8859-8.so \
+                   iso-8859-9.so iso-8859-10.so iso-8859-13.so iso-8859-14.so
+EXTRA_KOI =        koi8-ru.so 
+EXTRA_MISC =       gb12345.so johab.so adobe-stdenc.so adobe-symbol.so \
+                   adobe-zdingbats.so mac-ce.so mac-croatian.so mac-cyrillic.so \
+                   mac-dingbats.so mac-greek.so mac-iceland.so mac-japan.so \
+                   mac-roman.so mac-romania.so mac-thai.so mac-turkish.so \
+                   mac-ukraine.so
+EXTRA_PC =         cp424.so cp500.so cp856.so cp1006.so cp437.so cp737.so cp857.so \
+                   cp860.so cp861.so cp862.so cp863.so cp864.so cp865.so cp869.so \
+                   cp874.so cp932.so cp936.so cp949.so cp950.so \
+                   windows-1250.so windows-1251.so windows-1252.so windows-1253.so \
+                   windows-1254.so windows-1255.so windows-1256.so windows-1257.so \
+                   windows-1258.so cp037.so cp875.so cp1026.so \
+                   cp10000.so cp10006.so cp10007.so cp10029.so cp10079.so cp10081.so
+EXTRA_ALL =        ${EXTRA_ISO8859} ${EXTRA_KOI} ${EXTRA_MISC} ${EXTRA_PC}
+RFC1345_PC =       cp851.so cp868.so cp038.so cp273.so cp274.so cp275.so cp277.so \
+                   cp278.so cp280.so cp281.so cp284.so cp285.so cp290.so cp297.so \
+                   cp420.so cp423.so cp870.so cp871.so cp880.so cp891.so \
+                   cp903.so cp904.so cp905.so cp918.so
+RFC1345_EBCDIC =   ebcdic-at-de.so ebcdic-at-de-a.so ebcdic-ca-fr.so \
+                   ebcdic-dk-no.so ebcdic-dk-no-a.so ebcdic-es.so ebcdic-es-a.so \
+                   ebcdic-es-s.so ebcdic-fi-se.so ebcdic-fi-se-a.so ebcdic-fr.so \
+                   ebcdic-it.so ebcdic-pt.so ebcdic-uk.so ebcdic-us.so
+RFC1345_IR =       iso-ir-2.so iso-ir-4.so iso-ir-8-1.so iso-ir-8-2.so \
+                   iso-ir-9-1.so iso-ir-9-2.so iso-ir-10.so iso-ir-11.so \
+                   iso-ir-13.so iso-ir-14.so iso-ir-15.so iso-ir-16.so \
+                   iso-ir-17.so iso-ir-18.so iso-ir-19.so iso-ir-21.so \
+                   iso-ir-25.so iso-ir-27.so iso-ir-37.so iso-ir-47.so \
+                   iso-ir-49.so iso-ir-50.so iso-ir-51.so iso-ir-54.so \
+                   iso-ir-55.so iso-ir-57.so iso-ir-60.so iso-ir-61.so \
+                   iso-ir-69.so iso-ir-70.so iso-ir-84.so iso-ir-85.so \
+                   iso-ir-86.so iso-ir-88.so iso-ir-89.so iso-ir-90.so \
+                   iso-ir-91.so iso-ir-92.so iso-ir-93.so iso-ir-94.so \
+                   iso-ir-95.so iso-ir-96.so iso-ir-98.so iso-ir-99.so \
+                   iso-ir-102.so iso-ir-103.so iso-ir-111.so iso-ir-121.so \
+                   iso-ir-122.so iso-ir-123.so iso-ir-128.so iso-ir-139.so \
+                   iso-ir-141.so iso-ir-142.so iso-ir-143.so iso-ir-146.so \
+                   iso-ir-147.so iso-ir-150.so iso-ir-151.so iso-ir-152.so \
+                   iso-ir-153.so iso-ir-154.so iso-ir-155.so iso-ir-158.so
+RFC1345_MISC =     dec-mcs.so hp-roman8.so iso646-dk.so iso646-kr.so macintosh.so
+RFC1345_ALL =      ${RFC1345_PC} ${RFC1345_EBCDIC} ${RFC1345_IR} ${RFC1345_MISC}
+
+MODULES =          ${CHARSETS_ALL} ${EXTRA_ALL} ${RFC1345_ALL}
+
+all:            ${MODULES}
+
+LDADD=          -L${.CURDIR}/../lib -liconv
+
+INTERNALLIB=
+SYMLINKS !=     ../cs-aliases -p ${MODULEDIR} charset.aliases
+
+NOMAN=
+
+beforeinstall:
+                @mkdir -p ${MODULEDIR}
+                ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
+                ${INSTALLFLAGS} ${SHLINSTALLFLAGS} ${MODULES} \
+                ${DESTDIR}${MODULEDIR}
+
+CLEANFILES=     ${MODULES} *.So
+
+.include <bsd.lib.mk>
+.SUFFIXES:      .so .c
diff --git a/ccs/Makefile.in b/ccs/Makefile.in
new file mode 100644
index 0000000..6754e30
--- /dev/null
+++ b/ccs/Makefile.in
@@ -0,0 +1,59 @@
+CHARSETS_ISO8859 = iso-8859-1.la iso-8859-2.la iso-8859-4.la iso-8859-5.la \
+                   iso-8859-15.la
+CHARSETS_PC =      cp775.la cp850.la cp852.la cp855.la cp866.la
+CHARSETS_KOI =     koi8-r.la koi8-u.la
+CHARSETS_SB =      $(CHARSETS_ISO8859) $(CHARSETS_PC) $(CHARSETS_CJK) \
+                   $(CHARSETS_KOI) us-ascii.la
+CHARSETS_CJK =     big5.la cns11643-plane1.la cns11643-plane2.la \
+                   cns11643-plane14.la gb_2312-80.la jis_x0201.la \
+                   jis_x0208-1983.la jis_x0212-1990.la ksx1001.la shift_jis.la
+CHARSETS_ALL =     ${CHARSETS_SB} ${CHARSETS_CJK}
+EXTRA_ISO8859 =    iso-8859-3.la iso-8859-6.la iso-8859-7.la iso-8859-8.la \
+                   iso-8859-9.la iso-8859-10.la iso-8859-13.la iso-8859-14.la
+EXTRA_KOI =        koi8-ru.la 
+EXTRA_MISC =       gb12345.la johab.la adobe-stdenc.la adobe-symbol.la \
+                   adobe-zdingbats.la mac-ce.la mac-croatian.la mac-cyrillic.la \
+                   mac-dingbats.la mac-greek.la mac-iceland.la mac-japan.la \
+                   mac-roman.la mac-romania.la mac-thai.la mac-turkish.la \
+                   mac-ukraine.la
+EXTRA_PC =         cp424.la cp500.la cp856.la cp1006.la cp437.la cp737.la cp857.la \
+                   cp860.la cp861.la cp862.la cp863.la cp864.la cp865.la cp869.la \
+                   cp874.la cp932.la cp936.la cp949.la cp950.la \
+                   windows-1250.la windows-1251.la windows-1252.la windows-1253.la \
+                   windows-1254.la windows-1255.la windows-1256.la windows-1257.la \
+                   windows-1258.la cp037.la cp875.la cp1026.la \
+                   cp10000.la cp10006.la cp10007.la cp10029.la cp10079.la cp10081.la
+EXTRA_ALL =        ${EXTRA_ISO8859} ${EXTRA_KOI} ${EXTRA_MISC} ${EXTRA_PC}
+RFC1345_PC =       cp851.la cp868.la cp038.la cp273.la cp274.la cp275.la cp277.la \
+                   cp278.la cp280.la cp281.la cp284.la cp285.la cp290.la cp297.la \
+                   cp420.la cp423.la cp870.la cp871.la cp880.la cp891.la \
+                   cp903.la cp904.la cp905.la cp918.la
+RFC1345_EBCDIC =   ebcdic-at-de.la ebcdic-at-de-a.la ebcdic-ca-fr.la \
+                   ebcdic-dk-no.la ebcdic-dk-no-a.la ebcdic-es.la ebcdic-es-a.la \
+                   ebcdic-es-s.la ebcdic-fi-se.la ebcdic-fi-se-a.la ebcdic-fr.la \
+                   ebcdic-it.la ebcdic-pt.la ebcdic-uk.la ebcdic-us.la
+RFC1345_IR =       iso-ir-2.la iso-ir-4.la iso-ir-8-1.la iso-ir-8-2.la \
+                   iso-ir-9-1.la iso-ir-9-2.la iso-ir-10.la iso-ir-11.la \
+                   iso-ir-13.la iso-ir-14.la iso-ir-15.la iso-ir-16.la \
+                   iso-ir-17.la iso-ir-18.la iso-ir-19.la iso-ir-21.la \
+                   iso-ir-25.la iso-ir-27.la iso-ir-37.la iso-ir-47.la \
+                   iso-ir-49.la iso-ir-50.la iso-ir-51.la iso-ir-54.la \
+                   iso-ir-55.la iso-ir-57.la iso-ir-60.la iso-ir-61.la \
+                   iso-ir-69.la iso-ir-70.la iso-ir-84.la iso-ir-85.la \
+                   iso-ir-86.la iso-ir-88.la iso-ir-89.la iso-ir-90.la \
+                   iso-ir-91.la iso-ir-92.la iso-ir-93.la iso-ir-94.la \
+                   iso-ir-95.la iso-ir-96.la iso-ir-98.la iso-ir-99.la \
+                   iso-ir-102.la iso-ir-103.la iso-ir-111.la iso-ir-121.la \
+                   iso-ir-122.la iso-ir-123.la iso-ir-128.la iso-ir-139.la \
+                   iso-ir-141.la iso-ir-142.la iso-ir-143.la iso-ir-146.la \
+                   iso-ir-147.la iso-ir-150.la iso-ir-151.la iso-ir-152.la \
+                   iso-ir-153.la iso-ir-154.la iso-ir-155.la iso-ir-158.la
+RFC1345_MISC =     dec-mcs.la hp-roman8.la iso646-dk.la iso646-kr.la macintosh.la
+RFC1345_ALL =      ${RFC1345_PC} ${RFC1345_EBCDIC} ${RFC1345_IR} ${RFC1345_MISC}
+
+MODULES =          ${CHARSETS_ALL} ${EXTRA_ALL} ${RFC1345_ALL}
+
+all:            ${MODULES}
+
+# bring in rules.mk for standard functionality
+@INCLUDE_RULES@
diff --git a/ccs/Makefile.new b/ccs/Makefile.new
new file mode 100644
index 0000000..8c07c3e
--- /dev/null
+++ b/ccs/Makefile.new
@@ -0,0 +1,18 @@
+MODULES = iso-8859-3.so iso-8859-6.so iso-8859-7.so iso-8859-8.so \
+          iso-8859-9.so iso-8859-10.so iso-8859-13.so iso-8859-14.so \
+	  koi8-ru.so gb12345.so johab.so \
+          adobe-stdenc.so adobe-symbol.so adobe-zdingbats.so \
+          mac-ce.so mac-croatian.so mac-cyrillic.so mac-dingbats.so \
+          mac-greek.so mac-iceland.so mac-japan.so mac-roman.so \
+          mac-romania.so mac-thai.so mac-turkish.so mac-ukraine.so \
+          cp424.so cp500.so cp856.so cp1006.so \
+          cp437.so cp737.so cp857.so cp860.so cp861.so cp862.so cp863.so \
+          cp864.so cp865.so cp869.so cp874.so \
+          cp932.so cp936.so cp949.so cp950.so \
+          windows-1250.so windows-1251.so windows-1252.so \
+          windows-1253.so windows-1254.so windows-1255.so \
+          windows-1256.so windows-1257.so windows-1258.so \
+          cp037.so cp875.so cp1026.so \
+          cp10000.so cp10006.so cp10007.so cp10029.so cp10079.so cp10081.so
+
+.include "../Makefile.inc"
diff --git a/ccs/charset.aliases b/ccs/charset.aliases
index 1c61413..2eb4e33 100644
--- a/ccs/charset.aliases
+++ b/ccs/charset.aliases
@@ -1,18 +1,165 @@
-big5		csBig5
-cp775		IBM775 csPC775Baltic
-cp850		IBM850 850 csPC850Multilingual
-cp852		IBM852 852 csPCp852
-cp855		IBM855 855 csIBM855
-cp866		IBM866 866 csIBM866
-gb_2312-80	iso-ir-58 chinese
-iso-8859-1	ISO_8859-1:1987 iso-ir-100 ISO_8859-1 latin1 l1 IBM819 CP819 csISOLatin1
-iso-8859-2	ISO_8859-2:1987 iso-ir-101 ISO_8859-2 latin2 l2 csISOLatin2
-iso-8859-4	ISO_8859-4:1988 iso-ir-110 ISO_8859-4 latin4 l4 csISOLatin4
-iso-8859-5	ISO_8859-5:1988 iso-ir-144 ISO_8859-5 cyrillic csISOLatinCyrillic
-iso-8859-15	ISO_8859-15:1998 ISO_8859-15
-jis_x0201	X0201 csHalfWidthKatakana
-jis_x0208-1983	JIS_C6226-1983 iso-ir-87 x0208
-koi8-r		csKOI8R
-ksx1001		KS_X_1001
-shift_jis	MS_Kanji csShiftJIS
-us-ascii	ANSI_X3.4-1968 ANSI_X3.4-1986 ISO_646.irv:1991 ASCII ISO646-US us IBM367 cp367 csASCII
+adobe-stdenc
+adobe-symbol
+adobe-zdingbats
+big5            csBig5
+cp037           IBM037 ebcdic-cp-us ebcdic-cp-ca ebcdic-cp-wt ebcdic-cp-nl cp037_IBMUSCanada
+cp038           IBM038 EBCDIC-INT
+cp10000         cp10000_MacRoman
+cp10006         cp10006_MacGreek
+cp10007         cp10007_MacCyrillic
+cp10029         cp10029_MacLatin2
+cp10079         cp10079_MacIcelandic
+cp10081         cp10081_MacTurkish
+cp1026          IBM1026 csIBM1026
+cp273           IBM273
+cp274           IBM274 EBCDIC-BE
+cp275           IBM275 EBCDIC-BR
+cp277           IBM277 EBCDIC-CP-DK EBCDIC-CP-NO
+cp278           IBM278 ebcdic-cp-fi ebcdic-cp-se
+cp280           IBM280 ebcdic-cp-it
+cp281           IBM281 EBCDIC-JP-E
+cp284           IBM284 ebcdic-cp-es
+cp285           IBM285 ebcdic-cp-gb
+cp290           IBM290 EBCDIC-JP-kana
+cp297           IBM297 ebcdic-cp-fr
+cp420           IBM420 ebcdic-cp-ar1
+cp423           IBM423 ebcdic-cp-gr
+cp424           IBM424 424 ebcdic-cp-he csIBM424
+cp437           IBM437 437 csPC8CodePage437
+cp500           IBM500 ebcdic-cp-be ebcdic-cp-ch csIBM500
+cp737           IBM737 cp737LatinGreek
+cp775           IBM775 csPC775Baltic
+cp850           IBM850 850 csPC850Multilingual
+cp851           IBM851 851
+cp852           IBM852 852 csPCp852
+cp855           IBM855 855 csIBM855
+cp856           cp856_Hebrew_PC
+cp857           IBM857 857 csIBM857
+cp860           IBM860 860 csIBM860
+cp861           IBM861 861 cp-is csIBM861
+cp862           IBM862 862 csPC862LatinHebrew
+cp863           IBM863 863 csIBM863
+cp864           IBM864 csIBM864
+cp865           IBM865 865 csIBM865
+cp866           IBM866 866 csIBM866
+cp868           IBM868 cp-ar
+cp869           IBM869 869 cp-gr csIBM869
+cp870           IBM870 ebcdic-cp-roece ebcdic-cp-yu
+cp871           IBM871 ebcdic-cp-is
+cp874           IBM874
+cp875           cp875_IBMGreek
+cp880           IBM880 EBCDIC-Cyrillic
+cp891           IBM891
+cp903           IBM903
+cp904           IBM904 904
+cp905           IBM905 ebcdic-cp-tr
+cp918           IBM918 ebcdic-cp-ar2
+dec-mcs         dec
+gb_2312-80      iso-ir-58 chinese
+hp-roman8       roman8 r8
+iso-8859-1      ISO_8859-1:1987 iso-ir-100 ISO_8859-1 latin1 l1 IBM819 CP819 csISOLatin1
+iso-8859-10     ISO_8859-10:1992 iso-ir-157 ISO_8859-10 latin6 l6 csISOLatin6
+iso-8859-13     ISO_8859-13:1998 ISO_8859-13
+iso-8859-14     ISO_8859-14:1998 ISO_8859-14
+iso-8859-15     ISO_8859-15:1998 ISO_8859-15
+iso-8859-2      ISO_8859-2:1987 iso-ir-101 ISO_8859-2 latin2 l2 csISOLatin2
+iso-8859-3      ISO_8859-3:1988 iso-ir-109 ISO_8859-3 latin3 l3 csISOLatin3
+iso-8859-4      ISO_8859-4:1988 iso-ir-110 ISO_8859-4 latin4 l4 csISOLatin4
+iso-8859-5      ISO_8859-5:1988 iso-ir-144 ISO_8859-5 cyrillic csISOLatinCyrillic
+iso-8859-6      ISO_8859-6:1987 iso-ir-127 ISO_8859-6 ECMA-114 ASMO-708 arabic csISOLatinArabic
+iso-8859-7      ISO_8859-7:1987 iso-ir-126 ISO_8859-7 ELOT_928 ECMA-118 greek greek8 csISOLatinGreek
+iso-8859-8      ISO_8859-8:1988 iso-ir-138 ISO_8859-8 hebrew csISOLatinHebrew
+iso-8859-9      ISO_8859-9:1989 iso-ir-148 ISO_8859-9 latin5 l5 csISOLatin5
+iso-ir-10       SEN_850200_B FI ISO646-FI ISO646-SE se
+iso-ir-102      T.61-7bit
+iso-ir-103      T.61-8bit T.61
+iso-ir-11       SEN_850200_C ISO646-SE2 se2
+iso-ir-111      ECMA-cyrillic
+iso-ir-121      CSA_Z243.4-1985-1 ISO646-CA csa7-1 ca
+iso-ir-122      CSA_Z243.4-1985-2 ISO646-CA2 csa7-2
+iso-ir-123      CSA_Z243.4-1985-gr
+iso-ir-128      T.101-G2
+iso-ir-13       JIS_C6220-1969-jp JIS_C6220-1969 katakana x0201-7
+iso-ir-139      CSN_369103
+iso-ir-14       JIS_C6220-1969-ro jp ISO646-JP
+iso-ir-141      JUS_I.B1.002 ISO646-YU js yu
+iso-ir-142      ISO_6937-2-add
+iso-ir-143      IEC_P27-1
+iso-ir-146      JUS_I.B1.003-serb serbian
+iso-ir-147      JUS_I.B1.003-mac macedonian
+iso-ir-15       IT ISO646-IT
+iso-ir-150      greek-ccitt
+iso-ir-151      NC_NC00-10:81 cuba ISO646-CU
+iso-ir-152      ISO_6937-2-25
+iso-ir-153      GOST_19768-74 ST_SEV_358-88
+iso-ir-154      ISO_8859-supp latin1-2-5
+iso-ir-155      ISO_10367-box
+iso-ir-158      latin-lap lap
+iso-ir-16       PT ISO646-PT
+iso-ir-17       ES ISO646-ES
+iso-ir-18       greek7-old
+iso-ir-19       latin-greek
+iso-ir-2        ISO_646.irv:1983 irv
+iso-ir-21       DIN_66003 de ISO646-DE
+iso-ir-25       NF_Z_62-010_\(1973\) ISO646-FR1
+iso-ir-27       Latin-greek-1
+iso-ir-37       ISO_5427
+iso-ir-4        BS_4730 ISO646-GB gb uk
+iso-ir-47       BS_viewdata
+iso-ir-49       INIS
+iso-ir-50       INIS-8
+iso-ir-51       INIS-cyrillic
+iso-ir-54       ISO_5427:1981
+iso-ir-55       ISO_5428:1980
+iso-ir-57       GB_1988-80
+iso-ir-60       NS_4551-1 ISO646-NO no
+iso-ir-61       NS_4551-2 ISO646-NO2 no2
+iso-ir-69       NF_Z_62-010 ISO646-FR fr
+iso-ir-70       videotex-suppl
+iso-ir-8-1      NATS-SEFI
+iso-ir-8-2      NATS-SEFI-ADD
+iso-ir-84       PT2 ISO646-PT2
+iso-ir-85       ES2 ISO646-ES2
+iso-ir-86       MSZ_7795.3 ISO646-HU hu
+iso-ir-88       greek7
+iso-ir-89       ASMO_449 ISO_9036 arabic7
+iso-ir-9-1      NATS-DANO
+iso-ir-9-2      NATS-DANO-ADD
+iso-ir-91       JIS_C6229-1984-a ISO646-JP-OCR-A jp-ocr-a
+iso-ir-92       JIS_C6229-1984-b ISO646-JP-OCR-B jp-ocr-b
+iso-ir-93       JIS_C6229-1984-b-add jp-ocr-b-add
+iso-ir-94       JIS_C6229-1984-hand jp-ocr-hand
+iso-ir-95       JIS_C6229-1984-hand-add jp-ocr-hand-add
+iso-ir-96       JIS_C6229-1984-kana
+iso-ir-98       ISO_2033-1983 e13b
+iso-ir-99       ANSI_X3.110-1983 CSA_T500-1983 NAPLPS
+iso646-dk       DS_2089 DS2089 dk
+iso646-kr       KSC5636
+jis_x0201       X0201 csHalfWidthKatakana
+jis_x0208-1983  JIS_C6226-1983 iso-ir-87 x0208
+koi8-r          csKOI8R
+koi8-ru
+ksx1001         KS_X_1001
+mac-ce          macCentEuro
+mac-croatian    macCroatian
+mac-cyrillic    macCyrillic
+mac-dingbats    macDingbats
+mac-greek       macGreek
+mac-iceland     macIceland
+mac-roman       macRoman
+mac-romania     macRomania
+mac-thai        macThai
+mac-turkish     macTurkish
+mac-ukraine     macUkraine
+macintosh       mac
+shift_jis       MS_Kanji csShiftJIS
+us-ascii        ANSI_X3.4-1968 ANSI_X3.4-1986 ISO_646.irv:1991 ASCII ISO646-US us IBM367 cp367 csASCII
+windows-1250    cp1250
+windows-1251    cp1251
+windows-1252    cp1252
+windows-1253    cp1253
+windows-1254    cp1254
+windows-1255    cp1255
+windows-1256    cp1256
+windows-1257    cp1257
+windows-1258    cp1258
diff --git a/ccs/extra.aliases b/ccs/extra.aliases
deleted file mode 100644
index 2963e68..0000000
--- a/ccs/extra.aliases
+++ /dev/null
@@ -1,55 +0,0 @@
-adobe-stdenc
-adobe-symbol
-adobe-zdingbats
-cp037		IBM037 ebcdic-cp-us ebcdic-cp-ca ebcdic-cp-wt ebcdic-cp-nl cp037_IBMUSCanada
-cp424		IBM424 424 ebcdic-cp-he csIBM424
-cp437		IBM437 437 csPC8CodePage437
-cp500		IBM500 ebcdic-cp-be ebcdic-cp-ch csIBM500
-cp737		IBM737 cp737LatinGreek
-cp856		cp856_Hebrew_PC
-cp857		IBM857 857 csIBM857
-cp860		IBM860 860 csIBM860
-cp861		IBM861 861 cp-is csIBM861
-cp862		IBM862 862 csPC862LatinHebrew
-cp863		IBM863 863 csIBM863
-cp864		IBM864 csIBM864
-cp865		IBM865 865 csIBM865
-cp869		IBM869 869 cp-gr csIBM869
-cp874		IBM874
-cp875		cp875_IBMGreek
-cp1026		IBM1026 csIBM1026
-cp10000		cp10000_MacRoman
-cp10006		cp10006_MacGreek
-cp10007		cp10007_MacCyrillic
-cp10029		cp10029_MacLatin2
-cp10079		cp10079_MacIcelandic
-cp10081		cp10081_MacTurkish
-iso-8859-3	ISO_8859-3:1988 iso-ir-109 ISO_8859-3 latin3 l3 csISOLatin3
-iso-8859-6	ISO_8859-6:1987 iso-ir-127 ISO_8859-6 ECMA-114 ASMO-708 arabic csISOLatinArabic
-iso-8859-7	ISO_8859-7:1987 iso-ir-126 ISO_8859-7 ELOT_928 ECMA-118 greek greek8 csISOLatinGreek
-iso-8859-8	ISO_8859-8:1988 iso-ir-138 ISO_8859-8 hebrew csISOLatinHebrew
-iso-8859-9	ISO_8859-9:1989 iso-ir-148 ISO_8859-9 latin5 l5 csISOLatin5
-iso-8859-10	ISO_8859-10:1992 iso-ir-157 ISO_8859-10 latin6 l6 csISOLatin6
-iso-8859-13	ISO_8859-13:1998 ISO_8859-13
-iso-8859-14	ISO_8859-14:1998 ISO_8859-14
-koi8-ru
-mac-ce		macCentEuro
-mac-croatian	macCroatian
-mac-cyrillic	macCyrillic
-mac-dingbats	macDingbats
-mac-greek	macGreek
-mac-iceland	macIceland
-mac-roman	macRoman
-mac-romania	macRomania
-mac-thai	macThai
-mac-turkish	macTurkish
-mac-ukraine	macUkraine
-windows-1250	cp1250
-windows-1251	cp1251
-windows-1252	cp1252
-windows-1253	cp1253
-windows-1254	cp1254
-windows-1255	cp1255
-windows-1256	cp1256
-windows-1257	cp1257
-windows-1258	cp1258
diff --git a/ccs/rfc1345.aliases b/ccs/rfc1345.aliases
deleted file mode 100644
index e721e3b..0000000
--- a/ccs/rfc1345.aliases
+++ /dev/null
@@ -1,92 +0,0 @@
-cp038		IBM038 EBCDIC-INT
-cp273		IBM273
-cp274		IBM274 EBCDIC-BE
-cp275		IBM275 EBCDIC-BR
-cp277		IBM277 EBCDIC-CP-DK EBCDIC-CP-NO
-cp278		IBM278 ebcdic-cp-fi ebcdic-cp-se
-cp280		IBM280 ebcdic-cp-it
-cp281		IBM281 EBCDIC-JP-E
-cp284		IBM284 ebcdic-cp-es
-cp285		IBM285 ebcdic-cp-gb
-cp290		IBM290 EBCDIC-JP-kana
-cp297		IBM297 ebcdic-cp-fr
-cp420		IBM420 ebcdic-cp-ar1
-cp423		IBM423 ebcdic-cp-gr
-cp851		IBM851 851
-cp868		IBM868 cp-ar
-cp870		IBM870 ebcdic-cp-roece ebcdic-cp-yu
-cp871		IBM871 ebcdic-cp-is
-cp880		IBM880 EBCDIC-Cyrillic
-cp891		IBM891
-cp903		IBM903
-cp904		IBM904 904
-cp905		IBM905 ebcdic-cp-tr
-cp918		IBM918 ebcdic-cp-ar2
-dec-mcs		dec
-hp-roman8	roman8 r8
-iso646-dk	DS_2089 DS2089 dk
-iso646-kr	KSC5636
-iso-ir-2	ISO_646.irv:1983 irv
-iso-ir-4	BS_4730 ISO646-GB gb uk
-iso-ir-8-1	NATS-SEFI
-iso-ir-8-2	NATS-SEFI-ADD
-iso-ir-9-1	NATS-DANO
-iso-ir-9-2	NATS-DANO-ADD
-iso-ir-10	SEN_850200_B FI ISO646-FI ISO646-SE se
-iso-ir-11	SEN_850200_C ISO646-SE2 se2
-iso-ir-13	JIS_C6220-1969-jp JIS_C6220-1969 katakana x0201-7
-iso-ir-14	JIS_C6220-1969-ro jp ISO646-JP
-iso-ir-15	IT ISO646-IT
-iso-ir-16	PT ISO646-PT
-iso-ir-17	ES ISO646-ES
-iso-ir-18	greek7-old
-iso-ir-19	latin-greek
-iso-ir-21	DIN_66003 de ISO646-DE
-iso-ir-25	NF_Z_62-010_\(1973\) ISO646-FR1
-iso-ir-27	Latin-greek-1
-iso-ir-37	ISO_5427
-iso-ir-47	BS_viewdata
-iso-ir-49	INIS
-iso-ir-50	INIS-8
-iso-ir-51	INIS-cyrillic
-iso-ir-54	ISO_5427:1981
-iso-ir-55	ISO_5428:1980
-iso-ir-57	GB_1988-80
-iso-ir-60	NS_4551-1 ISO646-NO no
-iso-ir-61	NS_4551-2 ISO646-NO2 no2
-iso-ir-69	NF_Z_62-010 ISO646-FR fr
-iso-ir-70	videotex-suppl
-iso-ir-84	PT2 ISO646-PT2
-iso-ir-85	ES2 ISO646-ES2
-iso-ir-86	MSZ_7795.3 ISO646-HU hu
-iso-ir-88	greek7
-iso-ir-89	ASMO_449 ISO_9036 arabic7
-iso-ir-91	JIS_C6229-1984-a ISO646-JP-OCR-A jp-ocr-a
-iso-ir-92	JIS_C6229-1984-b ISO646-JP-OCR-B jp-ocr-b
-iso-ir-93	JIS_C6229-1984-b-add jp-ocr-b-add
-iso-ir-94	JIS_C6229-1984-hand jp-ocr-hand
-iso-ir-95	JIS_C6229-1984-hand-add jp-ocr-hand-add
-iso-ir-96	JIS_C6229-1984-kana
-iso-ir-98	ISO_2033-1983 e13b
-iso-ir-99	ANSI_X3.110-1983 CSA_T500-1983 NAPLPS
-iso-ir-102	T.61-7bit
-iso-ir-103	T.61-8bit T.61
-iso-ir-111	ECMA-cyrillic
-iso-ir-121	CSA_Z243.4-1985-1 ISO646-CA csa7-1 ca
-iso-ir-122	CSA_Z243.4-1985-2 ISO646-CA2 csa7-2
-iso-ir-123	CSA_Z243.4-1985-gr
-iso-ir-128	T.101-G2
-iso-ir-139	CSN_369103
-iso-ir-141	JUS_I.B1.002 ISO646-YU js yu
-iso-ir-142	ISO_6937-2-add
-iso-ir-143	IEC_P27-1
-iso-ir-146	JUS_I.B1.003-serb serbian
-iso-ir-147	JUS_I.B1.003-mac macedonian
-iso-ir-150	greek-ccitt
-iso-ir-151	NC_NC00-10:81 cuba ISO646-CU
-iso-ir-152	ISO_6937-2-25
-iso-ir-153	GOST_19768-74 ST_SEV_358-88
-iso-ir-154	ISO_8859-supp latin1-2-5
-iso-ir-155	ISO_10367-box
-iso-ir-158	latin-lap lap
-macintosh	mac
diff --git a/ces/.cvsignore b/ces/.cvsignore
new file mode 100644
index 0000000..2cbb2f1
--- /dev/null
+++ b/ces/.cvsignore
@@ -0,0 +1,4 @@
+.libs
+*.la
+*.lo
+*.slo
diff --git a/ces/Makefile b/ces/Makefile
index d9e499c..938ff74 100644
--- a/ces/Makefile
+++ b/ces/Makefile
@@ -1,4 +1,30 @@
-MODULES = unicode-1-1-utf-7.so iso-2022-cn.so iso-2022-jp.so \
-	  iso-2022-jp-2.so iso-2022-kr.so
-
 .include "../Makefile.inc"
+
+MODULES_CORE=   _tbl_simple.so euc-jp.so euc-kr.so euc-tw.so gb2312.so \
+                iso-10646-ucs-2.so iso-10646-ucs-4.so \
+                ucs2-internal.so ucs4-internal.so utf-8.so utf-16.so
+
+MODULES_EXTRA = unicode-1-1-utf-7.so iso-2022-cn.so iso-2022-jp.so \
+                iso-2022-jp-2.so iso-2022-kr.so
+
+MODULES =       ${MODULES_CORE} ${MODULES_EXTRA}
+
+all:    ${MODULES}
+
+LDADD=          -L${.CURDIR}/../lib -liconv
+
+INTERNALLIB=
+SYMLINKS !=     ../cs-aliases -p ${MODULEDIR} charset.aliases
+
+NOMAN=
+
+beforeinstall:
+                @mkdir -p ${MODULEDIR}
+                ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
+                ${INSTALLFLAGS} ${SHLINSTALLFLAGS} ${MODULES} \
+                ${DESTDIR}${MODULEDIR}
+
+CLEANFILES=     ${MODULES} *.So
+
+.include <bsd.lib.mk>
+.SUFFIXES:      .so
diff --git a/ces/Makefile.in b/ces/Makefile.in
new file mode 100644
index 0000000..2d6fa81
--- /dev/null
+++ b/ces/Makefile.in
@@ -0,0 +1,13 @@
+MODULES_CORE=   _tbl_simple.la euc-jp.la euc-kr.la euc-tw.la gb2312.la \
+                iso-10646-ucs-2.la iso-10646-ucs-4.la \
+                ucs2-internal.la ucs4-internal.la utf-8.la utf-16.la
+
+MODULES_EXTRA = unicode-1-1-utf-7.la iso-2022-cn.la iso-2022-jp.la \
+                iso-2022-jp-2.la iso-2022-kr.la
+
+MODULES =       ${MODULES_CORE} ${MODULES_EXTRA}
+
+all:    ${MODULES}
+
+# bring in rules.mk for standard functionality
+@INCLUDE_RULES@
diff --git a/ces/Makefile.new b/ces/Makefile.new
new file mode 100644
index 0000000..d9e499c
--- /dev/null
+++ b/ces/Makefile.new
@@ -0,0 +1,4 @@
+MODULES = unicode-1-1-utf-7.so iso-2022-cn.so iso-2022-jp.so \
+	  iso-2022-jp-2.so iso-2022-kr.so
+
+.include "../Makefile.inc"
diff --git a/ces/_tbl_simple.c b/ces/_tbl_simple.c
index 3269952..d5e106e 100644
--- a/ces/_tbl_simple.c
+++ b/ces/_tbl_simple.c
@@ -30,12 +30,13 @@
  *	iconv (Charset Conversion Library) v1.0
  */
 
+#include "apr.h"
+
 #define ICONV_INTERNAL
-#include <iconv.h>
-#include <errno.h>
+#include "iconv.h"
 
 static int
-table_open(struct iconv_ces *ces)
+table_open(struct iconv_ces *ces, apr_pool_t *ctx)
 {
 	ces->data = (void *)(ces->mod->im_deplist->im_desc->imd_data);
 	return 0;
@@ -47,7 +48,7 @@
 	return ((struct iconv_ccs_desc *)(ces->data))->names;
 }
 
-static __inline int
+static APR_INLINE int
 table_nbits(struct iconv_ces *ces)
 {
 	return ((struct iconv_ccs_desc *)(ces->data))->nbits;
@@ -71,13 +72,13 @@
 	return res == 16 ? 0 : (res > 8 ? 2 : 1);
 }
 
-static ssize_t
+static apr_ssize_t
 convert_from_ucs(struct iconv_ces *ces, ucs_t in,
-	unsigned char **outbuf, size_t *outbytesleft)
+	unsigned char **outbuf, apr_size_t *outbytesleft)
 {
 	struct iconv_ccs_desc *ccsd = ces->data;
 	ucs_t res;
-	size_t bytes;
+	apr_size_t bytes;
 
 	if (in == UCS_CHAR_NONE)
 		return 1;	/* No state reinitialization for table charsets */
@@ -98,12 +99,12 @@
 
 static ucs_t
 convert_to_ucs(struct iconv_ces *ces, const unsigned char **inbuf,
-	size_t *inbytesleft)
+	apr_size_t *inbytesleft)
 {
 	struct iconv_ccs_desc *ccsd = ces->data;
 	unsigned char byte = *(*inbuf);
 	ucs_t res = ICONV_CCS_CONVERT_TO_UCS(ccsd, byte);
-	size_t bytes = (res == UCS_CHAR_INVALID && table_nbits(ces) > 8) ? 2 : 1;
+	apr_size_t bytes = (res == UCS_CHAR_INVALID && table_nbits(ces) > 8) ? 2 : 1;
 
 	if (*inbytesleft < bytes)
 		return UCS_CHAR_NONE;	/* Not enough bytes in the input buffer */
@@ -115,35 +116,35 @@
 	return res;
 }
 
-static int
-table_load_ccs(struct iconv_module *mod)
+static apr_status_t
+table_load_ccs(struct iconv_module *mod, apr_pool_t *ctx)
 {
 	struct iconv_module *ccsmod;
 	int error;
 
 	if (mod->im_args == NULL)
-		return EINVAL;
-	error = iconv_mod_load(mod->im_args, ICMOD_UC_CCS, NULL, &ccsmod);
+		return APR_EINVAL;
+	error = iconv_mod_load(mod->im_args, ICMOD_UC_CCS, NULL, &ccsmod, ctx);
 	if (error)
 		return error;
 	ccsmod->im_next = mod->im_deplist;
 	mod->im_deplist = ccsmod;
-	return 0;
+	return APR_SUCCESS;
 }
 
-static int
-table_event(struct iconv_module *mod, int event)
+static apr_status_t
+table_event(struct iconv_module *mod, int event, apr_pool_t *ctx)
 {
 	switch (event) {
 	    case ICMODEV_LOAD:
 	    case ICMODEV_UNLOAD:
 		break;
 	    case ICMODEV_DYNDEPS:
-		return table_load_ccs(mod);
+		return table_load_ccs(mod,ctx);
 	    default:
-		return EINVAL;
+		return APR_EINVAL;
 	}
-	return 0;
+	return APR_SUCCESS;
 }
 
 static const struct iconv_ces_desc iconv_ces_desc = {
diff --git a/ces/euc-jp.c b/ces/euc-jp.c
index 0e7ba44..9032c4d 100644
--- a/ces/euc-jp.c
+++ b/ces/euc-jp.c
@@ -58,7 +58,7 @@
 	{ICMOD_UC_CCS, "jis_x0208-1983", ccsattr + 1},
 	{ICMOD_UC_CCS, "jis_x0201", ccsattr + 2},
 	{ICMOD_UC_CCS, "jis_x0212-1990", ccsattr + 3},
-	{}
+	NULL
 };
 
 static const struct iconv_ces_desc iconv_ces_desc = {
diff --git a/ces/euc-kr.c b/ces/euc-kr.c
index e839b32..223ad90 100644
--- a/ces/euc-kr.c
+++ b/ces/euc-kr.c
@@ -51,7 +51,7 @@
 static const struct iconv_module_depend iconv_module_depend[] = {
 	{ICMOD_UC_CCS, "us-ascii", ccsattr + 0},
 	{ICMOD_UC_CCS, "ksx1001", ccsattr + 1},
-	{}
+	NULL
 };
 
 static const struct iconv_ces_desc iconv_ces_desc =  {
diff --git a/ces/euc-tw.c b/ces/euc-tw.c
index fa89563..5c40c1d 100644
--- a/ces/euc-tw.c
+++ b/ces/euc-tw.c
@@ -55,7 +55,7 @@
 	{ICMOD_UC_CCS, "cns11643-plane1", ccsattr + 1},
 	{ICMOD_UC_CCS, "cns11643-plane2", ccsattr + 2},
 	{ICMOD_UC_CCS, "cns11643-plane14", ccsattr + 3},
-	{}
+	NULL
 };
 
 static const struct iconv_ces_desc iconv_ces_desc = {
diff --git a/ces/gb2312.c b/ces/gb2312.c
index c1a5f79..4981abd 100644
--- a/ces/gb2312.c
+++ b/ces/gb2312.c
@@ -51,7 +51,7 @@
 static const struct iconv_module_depend iconv_module_depend[] = {
 	{ICMOD_UC_CCS, "us-ascii", ccsattr + 0},
 	{ICMOD_UC_CCS, "gb_2312-80", ccsattr + 1},
-	{}
+	NULL
 };
 
 static const struct iconv_ces_desc iconv_ces_desc = {
diff --git a/ces/iso-10646-ucs-2.c b/ces/iso-10646-ucs-2.c
index f0100be..3dd9c0a 100644
--- a/ces/iso-10646-ucs-2.c
+++ b/ces/iso-10646-ucs-2.c
@@ -45,11 +45,11 @@
 	return names;
 }
 
-static ssize_t
+static apr_ssize_t
 convert_from_ucs(struct iconv_ces *ces, ucs_t in,
-	unsigned char **outbuf, size_t *outbytesleft)
+	unsigned char **outbuf, apr_size_t *outbytesleft)
 {
-	size_t bytes;
+	apr_size_t bytes;
 	int *state = ces->data;
 
 	if (in == UCS_CHAR_NONE)
@@ -70,7 +70,7 @@
 	return 1;
 }
 
-static __inline ucs_t
+static APR_INLINE ucs_t
 msb(const unsigned char *buf)
 {
 	return (buf[0] << 8) | buf[1];
@@ -78,7 +78,7 @@
 
 static ucs_t 
 convert_to_ucs(struct iconv_ces *ces, const unsigned char **inbuf,
-	size_t *inbytesleft)
+	apr_size_t *inbytesleft)
 {
 	ucs_t res;
 	int *state = ces->data;
diff --git a/ces/iso-10646-ucs-4.c b/ces/iso-10646-ucs-4.c
index 51c4608..608f4e5 100644
--- a/ces/iso-10646-ucs-4.c
+++ b/ces/iso-10646-ucs-4.c
@@ -45,9 +45,9 @@
 	return names;
 }
 
-static ssize_t
+static apr_ssize_t
 convert_from_ucs(struct iconv_ces *ces, ucs_t in,
-	unsigned char **outbuf, size_t *outbytesleft)
+	unsigned char **outbuf, apr_size_t *outbytesleft)
 {
 	int *state = (int*)ces->data;
 	int bytes;
@@ -72,7 +72,7 @@
 	return 1;
 }
 
-static __inline ucs_t
+static APR_INLINE ucs_t
 msb(const unsigned char *buf)
 {
 	return (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
@@ -80,7 +80,7 @@
 
 static ucs_t
 convert_to_ucs(struct iconv_ces *ces,
-	const unsigned char **inbuf, size_t *inbytesleft)
+	const unsigned char **inbuf, apr_size_t *inbytesleft)
 {
 	ucs_t res;
 	int *state = (int*)ces->data;
diff --git a/ces/iso-2022-cn.c b/ces/iso-2022-cn.c
index 9b5f6b4..1087107 100644
--- a/ces/iso-2022-cn.c
+++ b/ces/iso-2022-cn.c
@@ -57,7 +57,7 @@
 	{ICMOD_UC_CCS, "gb_2312-80", ccsattr + 1},
 	{ICMOD_UC_CCS, "cns11643-plane1", ccsattr + 2},
 	{ICMOD_UC_CCS, "cns11643-plane2", ccsattr + 3},
-	{}
+	NULL
 };
 
 static const struct iconv_ces_desc iconv_ces_desc = {
diff --git a/ces/iso-2022-jp-2.c b/ces/iso-2022-jp-2.c
index 25238e1..1260209 100644
--- a/ces/iso-2022-jp-2.c
+++ b/ces/iso-2022-jp-2.c
@@ -69,7 +69,7 @@
 	{ICMOD_UC_CCS, "jis_x0212-1990", ccsattr + 6 },
 	{ICMOD_UC_CCS, "iso-8859-1",     ccsattr + 7 },
 	{ICMOD_UC_CCS, "iso-8859-7",     ccsattr + 8 },
-	{}
+	NULL
 };
 
 static const struct iconv_ces_desc iconv_ces_desc = {
diff --git a/ces/iso-2022-jp.c b/ces/iso-2022-jp.c
index 7ccf020..73c9c62 100644
--- a/ces/iso-2022-jp.c
+++ b/ces/iso-2022-jp.c
@@ -59,7 +59,7 @@
 	{ICMOD_UC_CCS, "jis_x0201", ccsattr + 1},
 	{ICMOD_UC_CCS, "jis_x0208-1983", ccsattr + 2},
 	{ICMOD_UC_CCS, "jis_x0208-1983", ccsattr + 3},
-	{}
+	NULL
 };
 
 static const struct iconv_ces_desc iconv_ces_desc = {
diff --git a/ces/ucs2-internal.c b/ces/ucs2-internal.c
index 75f6896..666364d 100644
--- a/ces/ucs2-internal.c
+++ b/ces/ucs2-internal.c
@@ -43,15 +43,15 @@
 	return names;
 }
 
-static __inline int
+static APR_INLINE int
 ucs2_nbytes(struct iconv_ces *ces)
 {
 	return sizeof(ucs2_t);
 }
 
-static ssize_t
+static apr_ssize_t
 convert_from_ucs(struct iconv_ces *ces, ucs_t in,
-	unsigned char **outbuf, size_t *outbytesleft)
+	unsigned char **outbuf, apr_size_t *outbytesleft)
 {
 	if (in == UCS_CHAR_NONE)
 		return 1;	/* No state reinitialization for table charsets */
@@ -66,7 +66,7 @@
 
 static ucs_t
 convert_to_ucs(struct iconv_ces *ces,
-	const unsigned char **inbuf, size_t *inbytesleft)
+	const unsigned char **inbuf, apr_size_t *inbytesleft)
 {
 	if (*inbytesleft < sizeof(ucs2_t))
 		return UCS_CHAR_NONE;	/* Not enough bytes in the input buffer */
diff --git a/ces/ucs4-internal.c b/ces/ucs4-internal.c
index f500d5f..6e3b432 100644
--- a/ces/ucs4-internal.c
+++ b/ces/ucs4-internal.c
@@ -43,15 +43,15 @@
 	return names;
 }
 
-static __inline int
+static APR_INLINE int
 ucs4_nbytes(struct iconv_ces *ces)
 {
 	return sizeof(ucs4_t);
 }
 
-static ssize_t
+static apr_ssize_t
 convert_from_ucs(struct iconv_ces *ces, ucs_t in,
-	unsigned char **outbuf, size_t *outbytesleft)
+	unsigned char **outbuf, apr_size_t *outbytesleft)
 {
 	if (in == UCS_CHAR_NONE)
 		return 1;	/* No state reinitialization for table charsets */
@@ -64,7 +64,7 @@
 
 static ucs_t
 convert_to_ucs(struct iconv_ces *ces,
-	const unsigned char **inbuf, size_t *inbytesleft)
+	const unsigned char **inbuf, apr_size_t *inbytesleft)
 {
 	if (*inbytesleft < sizeof(ucs4_t))
 		return UCS_CHAR_NONE;	/* Not enough bytes in the input buffer */
diff --git a/ces/unicode-1-1-utf-7.c b/ces/unicode-1-1-utf-7.c
index 68067b3..cd52c62 100644
--- a/ces/unicode-1-1-utf-7.c
+++ b/ces/unicode-1-1-utf-7.c
@@ -47,8 +47,8 @@
 	return names;
 }
 
-static inline int
-lackofbytes(int bytes, size_t *bytesleft)
+static APR_INLINE int
+lackofbytes(int bytes, apr_size_t *bytesleft)
 {
 	if (bytes > *bytesleft)
 	    return 1;
@@ -62,7 +62,7 @@
 
 #define base64(ch) (base64_str[(ch) & 0x3F])
 
-static inline int output(char ch, unsigned char **outbuf)
+static APR_INLINE int output(char ch, unsigned char **outbuf)
 {
 	*(*outbuf)++ = ch;
 	return 1;
@@ -120,9 +120,9 @@
 			utf7_encoded;
 }
 
-static ssize_t
+static apr_ssize_t
 convert_from_ucs(struct iconv_ces *module, ucs_t in,
-                 unsigned char **outbuf, size_t *outbytesleft)
+                 unsigned char **outbuf, apr_size_t *outbytesleft)
 {
 #define utf7_state ((char *)(module->data))
     int ch = char_type(in), needbytes = 3;
@@ -229,7 +229,7 @@
 }
 
 static ucs_t convert_to_ucs(struct iconv_ces *module,
-                            const unsigned char **inbuf, size_t *inbytesleft)
+                            const unsigned char **inbuf, apr_size_t *inbytesleft)
 {
 #define utf7_state ((char *)(module->data))
     int ch = char_type(*(unsigned char *)*inbuf), needbytes = 0;
diff --git a/ces/utf-16.c b/ces/utf-16.c
index 6519e6d..85262ef 100644
--- a/ces/utf-16.c
+++ b/ces/utf-16.c
@@ -30,9 +30,6 @@
  *	iconv (Charset Conversion Library) v1.0
  */
 
-#include <errno.h>
-#include <stdlib.h>	/* free, malloc */
-
 #define ICONV_INTERNAL
 #include <iconv.h>
 
@@ -46,9 +43,9 @@
 	return names;
 }
 
-static ssize_t
+static apr_ssize_t
 convert_from_ucs(struct iconv_ces *ces, ucs_t in,
-	    unsigned char **outbuf, size_t *outbytesleft)
+	    unsigned char **outbuf, apr_size_t *outbytesleft)
 {
 	unsigned char *cp;
 	int *state = (int *)ces->data;
@@ -81,7 +78,7 @@
 	return 1;
 }
 
-static __inline ucs_t
+static APR_INLINE ucs_t
 msb(const unsigned char *buf)
 {
 	return (buf[0] << 8) | buf[1];
@@ -89,7 +86,7 @@
 
 static ucs_t
 convert_to_ucs(struct iconv_ces *ces,
-	const unsigned char **inbuf, size_t *inbytesleft)
+	const unsigned char **inbuf, apr_size_t *inbytesleft)
 {
 	ucs_t res, res2;
 	int *state = (int *)ces->data;
diff --git a/ces/utf-8.c b/ces/utf-8.c
index a190635..2eb0358 100644
--- a/ces/utf-8.c
+++ b/ces/utf-8.c
@@ -46,9 +46,9 @@
 
 #define cont_byte(b) (((b) & 0x3F) | 0x80)
 
-static ssize_t
+static apr_ssize_t
 convert_from_ucs(struct iconv_ces *ces, ucs_t in,
-	unsigned char **outbuf, size_t *outbytesleft)
+	unsigned char **outbuf, apr_size_t *outbytesleft)
 {
 	unsigned char *cp;
 	int n;
@@ -64,7 +64,6 @@
 		n = 4;
 	} else
 		return -1;
-iconv_warnx("ch=%08X, n=%d, left=%d", in, n, *outbytesleft);
 	if (*outbytesleft < n)
 		return 0;
 	cp = *outbuf;
@@ -95,7 +94,7 @@
 
 static ucs_t
 convert_to_ucs(struct iconv_ces *ces,
-	const unsigned char **inbuf, size_t *inbytesleft)
+	const unsigned char **inbuf, apr_size_t *inbytesleft)
 {
 	const unsigned char *in = *inbuf;
 	unsigned char byte = *in++;
diff --git a/configure.in b/configure.in
new file mode 100644
index 0000000..b10dbd1
--- /dev/null
+++ b/configure.in
@@ -0,0 +1,90 @@
+dnl
+dnl Process this file with autoconf to produce a configure script
+dnl
+
+AC_PREREQ(2.13)
+AC_INIT(build/rules.mk.in)
+
+AC_CONFIG_AUX_DIR(../apr/build)
+AC_CONFIG_HEADER(lib/apr_iconv_private.h)
+AC_PREFIX_DEFAULT(/usr/local/apache2)
+#test "$prefix" = "NONE" && prefix='/usr/local/apache2'
+
+AC_PROG_CC
+AC_PROG_AWK
+AC_CHECK_PROG(RM, rm, rm)
+
+dnl
+dnl compute the top directory of the build
+dnl note: this is needed for LIBTOOL
+dnl
+top_builddir="`cd $srcdir ; pwd`"
+AC_SUBST(top_builddir)
+
+dnl check for APR
+APU_FIND_APR
+aprbuild=$APR_SOURCE_DIR/build
+
+dnl
+dnl set up the compilation flags and stuff
+dnl
+INCLUDES="$INCLUDES -I\$(top_builddir)/lib"
+
+INCLUDES="$INCLUDES -I$APR_INCLUDES"
+
+dnl
+dnl prep libtool
+dnl
+echo "performing libtool configuration..."
+AC_PROG_LIBTOOL
+
+$SHELL $aprbuild/ltconfig --output=shlibtool --disable-static --srcdir=$aprbuild --cache-file=./config.cache $aprbuild/ltmain.sh
+dnl
+dnl grab flags from APR.
+dnl ### APR doesn't have "nice" names for its exports (yet), but it isn't
+dnl ### a problem to deal with them right here
+dnl
+
+. "$APR_SOURCE_DIR/APRVARS"
+APR_EXPORT_CPPFLAGS="$EXTRA_CPPFLAGS"
+APR_EXPORT_CFLAGS="$EXTRA_CFLAGS"
+APR_EXPORT_LIBS="$EXTRA_LIBS"
+
+dnl
+dnl Prep all the flags and stuff for compilation and export to other builds
+dnl
+CFLAGS="$CFLAGS $INCLUDES $APR_EXPORT_CFLAGS $APR_EXPORT_CPPFLAGS"
+LIBS="$LIBS $APR_EXPORT_LIBS"
+
+AC_SUBST(APRUTIL_EXPORT_LIBS)
+
+#
+# Adds in config *.h file
+AC_DEFINE_UNQUOTED(ICONV_DEFAULT_PATH,"$prefix/lib/iconv",
+	[ Directory where the *.so tables are stored ] )
+iconv_libdir=$prefix/lib/iconv
+AC_SUBST(iconv_libdir)
+
+dnl
+dnl BSD/OS (BSDi) needs to use a different include syntax in the Makefiles
+dnl
+case "$host_alias" in
+*bsdi*)
+    INCLUDE_RULES=".include \"$top_builddir/build/rules.mk\""
+    ;;
+*)
+    INCLUDE_RULES="include $top_builddir/build/rules.mk"
+    ;;
+esac
+AC_SUBST(INCLUDE_RULES)
+
+dnl
+dnl everthing is done. 
+AC_OUTPUT([
+	Makefile
+	ccs/Makefile
+	ces/Makefile
+	lib/Makefile
+	util/Makefile
+	build/rules.mk
+	])
diff --git a/include/apr_iconv.h b/include/apr_iconv.h
new file mode 100644
index 0000000..35d8ad2
--- /dev/null
+++ b/include/apr_iconv.h
@@ -0,0 +1,396 @@
+/*-
+ * Copyright (c) 1999,2000
+ *	Konstantin Chuguev.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *	This product includes software developed by Konstantin Chuguev
+ *	and its contributors.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+
+#ifndef _ICONV_H_
+#define _ICONV_H_
+
+#include "apr.h"
+#include "apr_pools.h"
+#ifdef WIN32
+#define ICONV_DEFAULT_PATH "iconv"
+#else
+#include "apr_iconv_private.h" /* contains ICONV_DEFAULT_PATH */
+#endif
+
+#include <stddef.h>
+
+/* apr additions */
+#define issetugid() 0
+/* apr additions */
+
+/**
+ * APR_DECLARE_EXPORT is defined when building the APR dynamic library,
+ * so that all public symbols are exported.
+ *
+ * APR_DECLARE_STATIC is defined when including the APR public headers,
+ * to provide static linkage when the dynamic library may be unavailable.
+ *
+ * APR_DECLARE_STATIC and APR_DECLARE_EXPORT are left undefined when
+ * including the APR public headers, to import and link the symbols from the 
+ * dynamic APR library and assure appropriate indirection and calling 
+ * conventions at compile time.
+ */
+
+#if !defined(WIN32)
+/**
+ * The public APR functions are declared with APR_DECLARE(), so they may
+ * use the most appropriate calling convention.  Public APR functions with 
+ * variable arguments must use APR_DECLARE_NONSTD().
+ *
+ * @deffunc APR_DECLARE(rettype) apr_func(args);
+ */
+#define API_DECLARE(type)            type
+/**
+ * The public APR variables are declared with AP_MODULE_DECLARE_DATA.
+ * This assures the appropriate indirection is invoked at compile time.
+ *
+ * @deffunc APR_DECLARE_DATA type apr_variable;
+ * @tip extern APR_DECLARE_DATA type apr_variable; syntax is required for
+ * declarations within headers to properly import the variable.
+ */
+#define API_DECLARE_DATA
+#elif defined(API_DECLARE_STATIC)
+#define API_DECLARE(type)            type __stdcall
+#define API_DECLARE_DATA
+#elif defined(API_DECLARE_EXPORT)
+#define API_DECLARE(type)            __declspec(dllexport) type __stdcall
+#define API_DECLARE_DATA             __declspec(dllexport)
+#else
+#define API_DECLARE(type)            __declspec(dllimport) type __stdcall
+#define API_DECLARE_DATA             __declspec(dllimport)
+#endif
+
+/*
+ * iconv_t:	charset conversion descriptor type
+ */
+typedef void *iconv_t;
+
+/* __BEGIN_DECLS */
+
+API_DECLARE(apr_status_t) apr_iconv_open(const char *, const char *, apr_pool_t *, iconv_t *);
+API_DECLARE(apr_status_t) apr_iconv(iconv_t, const char **, apr_size_t *, char **, apr_size_t *, apr_size_t *);
+API_DECLARE(apr_status_t) apr_iconv_close(iconv_t, apr_pool_t *);
+
+/* __END_DECLS */
+
+
+#ifdef ICONV_INTERNAL
+
+/*
+ * iconv module types
+ */
+#define	ICMOD_ANY	0
+#define	ICMOD_LIB	1
+#define	ICMOD_UC_CCS	0x100	/* UC - CCS for CES */
+#define	ICMOD_UC_CES	0x101	/* UC - CES */
+
+/*
+ * iconv module flags
+ */
+#define	ICMODF_LOADED	0x8000
+
+/*
+ * iconv module handler events
+ */
+#define	ICMODEV_LOAD	1	/* module load. after dependencies resolved */
+#define	ICMODEV_UNLOAD	2	/* module unload */
+#define	ICMODEV_DYNDEPS	3	/* load dynamic dependencies */
+
+struct iconv_module_depend {
+	int		md_type;
+	const char *	md_name;
+	const void *	md_data;
+};
+
+struct iconv_module;
+
+/* _tbl_simple.c table_load_ccs() calls iconv_mod_load(...ctx) */
+
+typedef int iconv_mod_event_t(struct iconv_module *, int, apr_pool_t *ctx);
+
+struct iconv_module_desc {
+	int		imd_type;
+	iconv_mod_event_t *imd_event;
+	const struct iconv_module_depend *imd_depend;
+	const void *	imd_data;
+};
+
+#define	ICONV_MODULE(type,data)	struct iconv_module_desc iconv_module \
+				    {(type), (data)}
+
+struct iconv_module {
+	int		im_flags;
+	void *		im_handle;
+	struct iconv_module_desc *im_desc;
+	struct iconv_module *im_next;
+	struct iconv_module *im_deplist;
+	int		im_depcnt;
+	const void *	im_methods;
+	void *		im_data;
+	const void *	im_depdata;	/* data if module loaded from dependency */
+	const void *	im_args;
+};
+
+#define	ICONV_MOD_LOAD(mod,ctx)	(mod)->im_desc->imd_event(mod, ICMODEV_LOAD,ctx)
+#define	ICONV_MOD_UNLOAD(mod,ctx)	(mod)->im_desc->imd_event(mod, ICMODEV_UNLOAD,ctx)
+#define	ICONV_MOD_DYNDEPS(mod,ctx)	(mod)->im_desc->imd_event(mod, ICMODEV_DYNDEPS,ctx)
+
+/*
+ * iconv converter definitions.
+ */
+typedef int iconv_open_t(const char *, const char *, void **, apr_pool_t *);
+typedef int iconv_close_t(void *, apr_pool_t *);
+typedef apr_status_t iconv_conv_t(void *, const unsigned char **, apr_size_t *,
+	unsigned char **, apr_size_t *, apr_size_t *);
+
+struct iconv_converter_desc {
+	iconv_open_t *	icd_open;
+	iconv_close_t *	icd_close;
+	iconv_conv_t *	icd_conv;
+};
+
+struct iconv_converter {
+	struct iconv_converter_desc *ic_desc;
+	void *		ic_data;
+};
+
+/*
+ * internal data types and functions used by charset conversion modules
+ */
+
+#define UCS_CHAR_ZERO_WIDTH_NBSP 0xFEFF
+#define UCS_CHAR_INVALID	 0xFFFE
+#define UCS_CHAR_NONE		 0xFFFF
+
+typedef apr_uint16_t ucs2_t;	/* Unicode character [D5] */
+typedef apr_uint32_t ucs4_t;	/* Unicode scalar character [D28] */
+#define ucs_t    ucs4_t
+
+/*
+ * one-level coded character set conversion tables
+ */
+typedef struct {
+	apr_uint16_t	data[128];
+} iconv_ccs_convtable_7bit;	/* 7-bit charset to Unicode */
+
+typedef struct {
+	apr_uint16_t	data[256];
+} iconv_ccs_convtable_8bit;	/* 8-bit charset to Unicode */
+
+/*
+ * two-level coded character set conversion tables
+ */
+typedef struct {
+	const iconv_ccs_convtable_7bit	*data[128];
+} iconv_ccs_convtable_14bit;	/* 14-bit charset to Unicode */
+
+typedef struct {
+	const iconv_ccs_convtable_8bit	*data[256];
+} iconv_ccs_convtable_16bit;	/* 16-bit charset to Unicode;
+				 * Unicode to any charset */
+
+/*
+ * abstract coded character set conversion table
+ */
+typedef union {
+	iconv_ccs_convtable_7bit	_7bit;
+	iconv_ccs_convtable_8bit	_8bit;
+	iconv_ccs_convtable_14bit	_14bit;
+	iconv_ccs_convtable_16bit	_16bit;
+} iconv_ccs_convtable;
+
+/*
+ * function for table-driven conversion
+ */
+typedef ucs2_t iconv_ccs_converter_t (ucs2_t ch);
+
+/*
+ * charset conversion module descriptor
+ */
+struct iconv_ccs_desc {
+	const char * const *		names;
+	int				nbits;
+	const iconv_ccs_convtable *	from_ucs;
+	const iconv_ccs_convtable *	to_ucs;
+	iconv_ccs_converter_t *		convert_from_ucs;
+	iconv_ccs_converter_t *		convert_to_ucs;
+};
+
+/*
+ * inline functions for use in charset conversion modules
+ */
+static APR_INLINE ucs2_t
+iconv_ccs_convert_7bit(const iconv_ccs_convtable *table, ucs2_t ch)
+{
+	return ch & 0x80 ? UCS_CHAR_INVALID : table->_7bit.data[ch];
+}
+
+static APR_INLINE ucs2_t
+iconv_ccs_convert_8bit(const iconv_ccs_convtable *table, ucs2_t ch)
+{
+	return table->_8bit.data[ch];
+}
+
+static APR_INLINE ucs2_t
+iconv_ccs_convert_14bit(const iconv_ccs_convtable *table, ucs2_t ch)
+{
+	const iconv_ccs_convtable_7bit *sub_table;
+
+	sub_table =  ch & 0x8080 ? NULL : table->_14bit.data[ch >> 8];
+	return sub_table ? sub_table->data[ch & 0x7F] : UCS_CHAR_INVALID;
+}
+
+static APR_INLINE ucs2_t
+iconv_ccs_convert_16bit(const iconv_ccs_convtable *table, ucs2_t ch)
+{
+	const iconv_ccs_convtable_8bit *sub_table;
+
+	sub_table = table->_16bit.data[ch >> 8];
+	return sub_table ? sub_table->data[ch & 0xFF] : UCS_CHAR_INVALID;
+}
+
+#define ICONV_CCS_CONVERT_FROM_UCS(ccsd, ch) \
+        ((ccsd)->convert_from_ucs(ch))
+#define ICONV_CCS_CONVERT_TO_UCS(ccsd, ch) \
+        ((ccsd)->convert_to_ucs(ch))
+
+/*
+ * generic character encoding schemes and functions
+ */
+struct iconv_ces;
+
+typedef int  iconv_ces_open_t(struct iconv_ces *, apr_pool_t *);
+typedef	int  iconv_ces_close_t(struct iconv_ces *);
+typedef	void iconv_ces_reset_t(struct iconv_ces *);
+typedef	const char * const *iconv_ces_names_t(struct iconv_ces *);
+typedef	int  iconv_ces_nbits_t(struct iconv_ces *);
+typedef	int  iconv_ces_nbytes_t(struct iconv_ces *);
+
+typedef apr_ssize_t iconv_ces_convert_from_ucs_t
+    (struct iconv_ces *data, ucs_t in,
+    unsigned char **outbuf, apr_size_t *outbytesleft);
+
+typedef ucs_t iconv_ces_convert_to_ucs_t
+    (struct iconv_ces *data,
+    const unsigned char **inbuf, apr_size_t *inbytesleft);
+
+struct iconv_ces_desc {
+	iconv_ces_open_t *	open;
+	iconv_ces_close_t *	close;
+	iconv_ces_reset_t *	reset;
+	iconv_ces_names_t *	names;
+	iconv_ces_nbits_t *	nbits;
+	iconv_ces_nbytes_t *	nbytes;
+	iconv_ces_convert_from_ucs_t * convert_from_ucs;
+	iconv_ces_convert_to_ucs_t * convert_to_ucs;
+	const void *data;
+};
+
+struct iconv_ces {
+	struct iconv_ces_desc *	desc;
+	void *			data;
+	struct iconv_module *	mod;
+};
+
+int  iconv_ces_open(const char *ces_name, struct iconv_ces **cespp, apr_pool_t *ctx);
+int  iconv_ces_close(struct iconv_ces *ces, apr_pool_t *ctx);
+int  iconv_ces_open_func(struct iconv_ces *ces);
+int  iconv_ces_close_func(struct iconv_ces *ces);
+void iconv_ces_reset_func(struct iconv_ces *ces);
+void iconv_ces_no_func(struct iconv_ces *ces);
+int  iconv_ces_nbits7(struct iconv_ces *ces);
+int  iconv_ces_nbits8(struct iconv_ces *ces);
+int  iconv_ces_zero(struct iconv_ces *ces);
+
+#define iconv_char32bit(ch)	((ch) & 0xFFFF0000)
+
+#define	ICONV_CES_OPEN(ces,ctx)	(ces)->desc->open(ces,ctx)
+#define	ICONV_CES_CLOSE(ces)	(ces)->desc->close(ces)
+#define ICONV_CES_RESET(ces)	(ces)->desc->reset(ces)
+#define ICONV_CES_CONVERT_FROM_UCS(cesd, in, outbuf, outbytes) \
+	    ((cesd)->desc->convert_from_ucs((cesd), (in), (outbuf), (outbytes)))
+#define ICONV_CES_CONVERT_TO_UCS(cesd, inbuf, inbytes) \
+	    ((cesd)->desc->convert_to_ucs((cesd), (inbuf), (inbytes)))
+
+#define ICONV_CES_DRIVER_DECL(name) \
+		iconv_ces_open_t iconv_##name##_open; \
+		iconv_ces_close_t iconv_##name##_close; \
+		iconv_ces_reset_t iconv_##name##_reset; \
+		iconv_ces_nbits_t iconv_##name##_nbits; \
+		iconv_ces_convert_from_ucs_t iconv_##name##_convert_from_ucs; \
+		iconv_ces_convert_to_ucs_t iconv_##name##_convert_to_ucs
+
+/*
+ ************************************************
+ * EUC character encoding schemes and functions *
+ ************************************************
+ */
+
+typedef struct iconv_ces_euc_ccs {
+	const char	*prefix;
+	apr_size_t		prefixlen;
+} iconv_ces_euc_ccs_t;
+
+ICONV_CES_DRIVER_DECL(euc);
+
+/*
+ * ISO-2022 character encoding schemes and functions
+ */
+enum { ICONV_SHIFT_SI = 0, ICONV_SHIFT_SO, ICONV_SHIFT_SS2, ICONV_SHIFT_SS3 };
+
+typedef struct iconv_ces_iso2022_ccs {
+	int		shift;
+	const char *	designator;
+	apr_size_t		designatorlen;
+} iconv_ces_iso2022_ccs_t;
+
+typedef struct {
+	const int *	shift_tab;
+	int		nccs;
+	const struct iconv_ces_iso2022_ccs *ccs;
+} iconv_ces_iso2022_data;
+
+ICONV_CES_DRIVER_DECL(iso2022);
+
+
+int  iconv_mod_load(const char *, int, const void *, struct iconv_module **, apr_pool_t *);
+int  iconv_mod_unload(struct iconv_module *,apr_pool_t *ctx);
+iconv_mod_event_t iconv_mod_noevent;
+
+iconv_mod_event_t iconv_ccs_event;
+
+int  iconv_malloc(apr_size_t size, void **pp);
+
+extern struct iconv_converter_desc iconv_uc_desc;
+
+#endif /* ICONV_INTERNAL */
+
+#endif /* _ICONV_H_ */
diff --git a/lib/.cvsignore b/lib/.cvsignore
new file mode 100644
index 0000000..e4614ad
--- /dev/null
+++ b/lib/.cvsignore
@@ -0,0 +1,7 @@
+.libs
+*.la
+*.lo
+*.slo
+apriconv.exports
+apr_iconv_private.h.in
+apr_iconv_private.h
diff --git a/lib/Makefile.in b/lib/Makefile.in
new file mode 100644
index 0000000..75f8700
--- /dev/null
+++ b/lib/Makefile.in
@@ -0,0 +1,14 @@
+# Generated automatically from Makefile.in by configure.
+libdir = /usr/local/lib
+TARGET_LIB = libapriconv.la
+TARGET_EXPORTS = apriconv.exports
+OBJECTS=        iconv_module.lo iconv.lo iconv_int.lo iconv_uc.lo \
+                iconv_ces.lo iconv_ces_euc.lo iconv_ces_iso2022.lo
+
+$(TARGET_LIB):	$(OBJECTS)
+	$(LINK) -rpath $(libdir) $(OBJECTS)                                     
+
+all:		$(TARGET_LIB)
+ 
+# bring in rules.mk for standard functionality                                  
+@INCLUDE_RULES@
diff --git a/lib/Makefile.new b/lib/Makefile.new
new file mode 100644
index 0000000..b999b47
--- /dev/null
+++ b/lib/Makefile.new
@@ -0,0 +1,24 @@
+LIB=		iconv
+SHLIB_MAJOR=	1
+SHLIB_MINOR=	0
+SRCS=		iconv_module.c iconv.c iconv_int.c iconv_uc.c \
+		iconv_ces.c iconv_ces_euc.c iconv_ces_iso2022.c
+
+LIBDIR=		${PREFIX}/lib
+
+INCDIR=		${PREFIX}/include
+INCS=		iconv.h
+
+CFLAGS+=	-DICONV_DEFAULT_PATH=\"${MODULEDIR}\"
+MAN3=		iconv.3 iconv_open.3 iconv_close.3
+
+iconv.3:	iconv.3.in
+		sed "s|@@MODULE_DIR@@|${MODULEDIR}|" ${.ALLSRC} > ${.TARGET}
+
+iconv_open.3:	iconv_open.3.in
+		sed "s|@@MODULE_DIR@@|${MODULEDIR}|" ${.ALLSRC} > ${.TARGET}
+
+CLEANFILES=	lib${LIB}.a ${SHLIB_NAME} ${SHLIB_LINK} ${SOBJS} ${OBJS} \
+		iconv.3 iconv_open.3
+
+.include <bsd.lib.mk>
diff --git a/lib/iconv.c b/lib/iconv.c
index d703f18..839bce0 100644
--- a/lib/iconv.c
+++ b/lib/iconv.c
@@ -30,13 +30,13 @@
  *	iconv (Charset Conversion Library) v1.0
  */
 
-#include <err.h>	/* warnx */
-#include <errno.h>	/* errno */
+#ifndef HAVE_ICONV
+
 #include <stdlib.h>	/* free, malloc */
 #include <string.h>
 
 #define ICONV_INTERNAL
-#include <iconv.h>
+#include "iconv.h"
 
 static struct iconv_converter_desc *converters[] = {
 	&iconv_uc_desc,		/* CS1-UNICODE-CS2 converter */
@@ -44,71 +44,105 @@
 	NULL
 };
 
-size_t
-iconv(iconv_t cd, const char **inbuf, size_t *inbytesleft,
-	char **outbuf, size_t *outbytesleft)
+/* 
+ * apr_size_t *result is what the iconv() returns but it is cleaner to return
+ * a status.
+ * APR_EBADF:   cd is not valid.
+ * APR_BADARG: The ouput arguments are not valid.
+ */
+
+API_DECLARE(apr_status_t)
+apr_iconv(iconv_t cd, const char **inbuf, apr_size_t *inbytesleft,
+	char **outbuf, apr_size_t *outbytesleft, apr_size_t *result)
 {
 	struct iconv_converter *icp = (struct iconv_converter *)cd;
-	ssize_t res = -1;
 
 	if (icp == NULL) {
-		iconv_warnx("iconv: invalid open conversion descriptor");
-		errno = EBADF;
-		return (size_t)(-1);
+		*result = (apr_size_t) -1;
+		return(APR_EBADF);
 	}
 	if (outbytesleft == NULL || *outbytesleft == 0 ||
 	    outbuf == NULL || *outbuf == 0) {
-		iconv_warnx("iconv: lack of space in the output buffer");
-		errno = E2BIG;
-		return (size_t)(-1);
+		*result = (apr_size_t) -1;
+		return(APR_BADARG);
 	}
-	res = icp->ic_desc->icd_conv(icp->ic_data,
+	return ( icp->ic_desc->icd_conv(icp->ic_data,
 	    (const unsigned char**)inbuf, inbytesleft,
-	    (unsigned char**)outbuf, outbytesleft);
-	return (size_t)res;
+	    (unsigned char**)outbuf, outbytesleft, result));
 }
 
-iconv_t
-iconv_open(const char *to, const char *from)
+API_DECLARE(apr_status_t)
+apr_iconv_open(const char *to, const char *from, apr_pool_t *ctx, iconv_t *res)
 {
 	struct iconv_converter_desc **idesc;
 	struct iconv_converter *icp;
 	void *data;
-	int error;
+	apr_status_t error;
 
+	*res = (iconv_t)-1;
 	icp = malloc(sizeof(*icp));
 	if (icp == NULL)
-		return (iconv_t)(-1);
-	error = EINVAL;
+		return (APR_ENOMEM);
+	error = APR_EINVAL;
 	for (idesc = converters; *idesc; idesc++) {
-		error = (*idesc)->icd_open(to, from, &data);
-		if (error == 0)
+		error = (*idesc)->icd_open(to, from, &data, ctx);
+		if (error == APR_SUCCESS)
 			break;
 	}
 	if (error) {
 		free(icp);
-		errno = error;
-		return (iconv_t)(-1);
+		return (error);
 	}
 	icp->ic_desc = *idesc;
 	icp->ic_data = data;
-	return (iconv_t)icp;
+	*res = icp;
+	return(APR_SUCCESS);
 }
 
-int
-iconv_close(iconv_t cd)
+API_DECLARE(apr_status_t)
+apr_iconv_close(iconv_t cd, apr_pool_t *ctx)
 {
 	struct iconv_converter *icp = (struct iconv_converter *)cd;
 	int error = 0;
 
-	if (icp == NULL) {
-		iconv_warnx("iconv_close: invalid handle");
-		errno = EBADF;
-		return -1;
-	}
+	if (icp == NULL)
+		return(APR_EBADF);
+
 	if (icp->ic_desc)
-		error = icp->ic_desc->icd_close(icp->ic_data);
+		error = icp->ic_desc->icd_close(icp->ic_data, ctx);
 		
 	free(icp);
 	return error;
 }
+
+#else
+
+#include <iconv.h>
+
+apr_status_t apr_iconv_open(const char *to_charset,
+            const char *from_charset, apr_pool_t *ctx, iconv_t **res)
+{
+	*res = iconv_open(to_charset, from_charset);
+	if (*res == (apr_size_t) -1)
+		return apr_get_os_error();
+	return APR_SUCCESS;
+}
+
+apr_status_t apr_iconv(iconv_t cd, const char **inbuf,
+            apr_size_t *inbytesleft, char **outbuf,
+            apr_size_t *outbytesleft, apr_size_t *result)
+{
+	*result = iconv(cd , inbuf, inbytesleft, outbuf, outbytesleft);
+	if (*result == (apr_size_t) -1)
+		return apr_get_os_error();
+	return APR_SUCCESS;
+}
+apr_status_t apr_iconv_close(iconv_t cd)
+{
+	int status;
+	if (iconv_close(cd))
+		return apr_get_os_error();
+	return APR_SUCCESS;
+}
+
+#endif /* !defined(HAVE_ICONV) */
diff --git a/lib/iconv.h b/lib/iconv.h
index ae963d2..35d8ad2 100644
--- a/lib/iconv.h
+++ b/lib/iconv.h
@@ -32,21 +32,74 @@
 #ifndef _ICONV_H_
 #define _ICONV_H_
 
-#include <sys/types.h>	/* size_t */
-#include <stddef.h>	/* NULL */
+#include "apr.h"
+#include "apr_pools.h"
+#ifdef WIN32
+#define ICONV_DEFAULT_PATH "iconv"
+#else
+#include "apr_iconv_private.h" /* contains ICONV_DEFAULT_PATH */
+#endif
+
+#include <stddef.h>
+
+/* apr additions */
+#define issetugid() 0
+/* apr additions */
+
+/**
+ * APR_DECLARE_EXPORT is defined when building the APR dynamic library,
+ * so that all public symbols are exported.
+ *
+ * APR_DECLARE_STATIC is defined when including the APR public headers,
+ * to provide static linkage when the dynamic library may be unavailable.
+ *
+ * APR_DECLARE_STATIC and APR_DECLARE_EXPORT are left undefined when
+ * including the APR public headers, to import and link the symbols from the 
+ * dynamic APR library and assure appropriate indirection and calling 
+ * conventions at compile time.
+ */
+
+#if !defined(WIN32)
+/**
+ * The public APR functions are declared with APR_DECLARE(), so they may
+ * use the most appropriate calling convention.  Public APR functions with 
+ * variable arguments must use APR_DECLARE_NONSTD().
+ *
+ * @deffunc APR_DECLARE(rettype) apr_func(args);
+ */
+#define API_DECLARE(type)            type
+/**
+ * The public APR variables are declared with AP_MODULE_DECLARE_DATA.
+ * This assures the appropriate indirection is invoked at compile time.
+ *
+ * @deffunc APR_DECLARE_DATA type apr_variable;
+ * @tip extern APR_DECLARE_DATA type apr_variable; syntax is required for
+ * declarations within headers to properly import the variable.
+ */
+#define API_DECLARE_DATA
+#elif defined(API_DECLARE_STATIC)
+#define API_DECLARE(type)            type __stdcall
+#define API_DECLARE_DATA
+#elif defined(API_DECLARE_EXPORT)
+#define API_DECLARE(type)            __declspec(dllexport) type __stdcall
+#define API_DECLARE_DATA             __declspec(dllexport)
+#else
+#define API_DECLARE(type)            __declspec(dllimport) type __stdcall
+#define API_DECLARE_DATA             __declspec(dllimport)
+#endif
 
 /*
  * iconv_t:	charset conversion descriptor type
  */
 typedef void *iconv_t;
 
-__BEGIN_DECLS
+/* __BEGIN_DECLS */
 
-iconv_t	iconv_open(const char *, const char *);
-size_t	iconv(iconv_t, const char **, size_t *, char **, size_t *);
-int	iconv_close(iconv_t);
+API_DECLARE(apr_status_t) apr_iconv_open(const char *, const char *, apr_pool_t *, iconv_t *);
+API_DECLARE(apr_status_t) apr_iconv(iconv_t, const char **, apr_size_t *, char **, apr_size_t *, apr_size_t *);
+API_DECLARE(apr_status_t) apr_iconv_close(iconv_t, apr_pool_t *);
 
-__END_DECLS
+/* __END_DECLS */
 
 
 #ifdef ICONV_INTERNAL
@@ -79,7 +132,9 @@
 
 struct iconv_module;
 
-typedef int iconv_mod_event_t(struct iconv_module *, int);
+/* _tbl_simple.c table_load_ccs() calls iconv_mod_load(...ctx) */
+
+typedef int iconv_mod_event_t(struct iconv_module *, int, apr_pool_t *ctx);
 
 struct iconv_module_desc {
 	int		imd_type;
@@ -104,17 +159,17 @@
 	const void *	im_args;
 };
 
-#define	ICONV_MOD_LOAD(mod)	(mod)->im_desc->imd_event(mod, ICMODEV_LOAD)
-#define	ICONV_MOD_UNLOAD(mod)	(mod)->im_desc->imd_event(mod, ICMODEV_UNLOAD)
-#define	ICONV_MOD_DYNDEPS(mod)	(mod)->im_desc->imd_event(mod, ICMODEV_DYNDEPS)
+#define	ICONV_MOD_LOAD(mod,ctx)	(mod)->im_desc->imd_event(mod, ICMODEV_LOAD,ctx)
+#define	ICONV_MOD_UNLOAD(mod,ctx)	(mod)->im_desc->imd_event(mod, ICMODEV_UNLOAD,ctx)
+#define	ICONV_MOD_DYNDEPS(mod,ctx)	(mod)->im_desc->imd_event(mod, ICMODEV_DYNDEPS,ctx)
 
 /*
  * iconv converter definitions.
  */
-typedef int iconv_open_t(const char *, const char *, void **);
-typedef int iconv_close_t(void *);
-typedef size_t iconv_conv_t(void *, const unsigned char **, size_t *,
-	unsigned char **, size_t *);
+typedef int iconv_open_t(const char *, const char *, void **, apr_pool_t *);
+typedef int iconv_close_t(void *, apr_pool_t *);
+typedef apr_status_t iconv_conv_t(void *, const unsigned char **, apr_size_t *,
+	unsigned char **, apr_size_t *, apr_size_t *);
 
 struct iconv_converter_desc {
 	iconv_open_t *	icd_open;
@@ -135,19 +190,19 @@
 #define UCS_CHAR_INVALID	 0xFFFE
 #define UCS_CHAR_NONE		 0xFFFF
 
-typedef uint16_t ucs2_t;	/* Unicode character [D5] */
-typedef uint32_t ucs4_t;	/* Unicode scalar character [D28] */
+typedef apr_uint16_t ucs2_t;	/* Unicode character [D5] */
+typedef apr_uint32_t ucs4_t;	/* Unicode scalar character [D28] */
 #define ucs_t    ucs4_t
 
 /*
  * one-level coded character set conversion tables
  */
 typedef struct {
-	uint16_t	data[128];
+	apr_uint16_t	data[128];
 } iconv_ccs_convtable_7bit;	/* 7-bit charset to Unicode */
 
 typedef struct {
-	uint16_t	data[256];
+	apr_uint16_t	data[256];
 } iconv_ccs_convtable_8bit;	/* 8-bit charset to Unicode */
 
 /*
@@ -192,19 +247,19 @@
 /*
  * inline functions for use in charset conversion modules
  */
-static __inline ucs2_t
+static APR_INLINE ucs2_t
 iconv_ccs_convert_7bit(const iconv_ccs_convtable *table, ucs2_t ch)
 {
 	return ch & 0x80 ? UCS_CHAR_INVALID : table->_7bit.data[ch];
 }
 
-static __inline ucs2_t
+static APR_INLINE ucs2_t
 iconv_ccs_convert_8bit(const iconv_ccs_convtable *table, ucs2_t ch)
 {
 	return table->_8bit.data[ch];
 }
 
-static __inline ucs2_t
+static APR_INLINE ucs2_t
 iconv_ccs_convert_14bit(const iconv_ccs_convtable *table, ucs2_t ch)
 {
 	const iconv_ccs_convtable_7bit *sub_table;
@@ -213,7 +268,7 @@
 	return sub_table ? sub_table->data[ch & 0x7F] : UCS_CHAR_INVALID;
 }
 
-static __inline ucs2_t
+static APR_INLINE ucs2_t
 iconv_ccs_convert_16bit(const iconv_ccs_convtable *table, ucs2_t ch)
 {
 	const iconv_ccs_convtable_8bit *sub_table;
@@ -232,20 +287,20 @@
  */
 struct iconv_ces;
 
-typedef int  iconv_ces_open_t(struct iconv_ces *);
+typedef int  iconv_ces_open_t(struct iconv_ces *, apr_pool_t *);
 typedef	int  iconv_ces_close_t(struct iconv_ces *);
 typedef	void iconv_ces_reset_t(struct iconv_ces *);
 typedef	const char * const *iconv_ces_names_t(struct iconv_ces *);
 typedef	int  iconv_ces_nbits_t(struct iconv_ces *);
 typedef	int  iconv_ces_nbytes_t(struct iconv_ces *);
 
-typedef ssize_t iconv_ces_convert_from_ucs_t
+typedef apr_ssize_t iconv_ces_convert_from_ucs_t
     (struct iconv_ces *data, ucs_t in,
-    unsigned char **outbuf, size_t *outbytesleft);
+    unsigned char **outbuf, apr_size_t *outbytesleft);
 
 typedef ucs_t iconv_ces_convert_to_ucs_t
     (struct iconv_ces *data,
-    const unsigned char **inbuf, size_t *inbytesleft);
+    const unsigned char **inbuf, apr_size_t *inbytesleft);
 
 struct iconv_ces_desc {
 	iconv_ces_open_t *	open;
@@ -265,8 +320,8 @@
 	struct iconv_module *	mod;
 };
 
-int  iconv_ces_open(const char *ces_name, struct iconv_ces **cespp);
-int  iconv_ces_close(struct iconv_ces *ces);
+int  iconv_ces_open(const char *ces_name, struct iconv_ces **cespp, apr_pool_t *ctx);
+int  iconv_ces_close(struct iconv_ces *ces, apr_pool_t *ctx);
 int  iconv_ces_open_func(struct iconv_ces *ces);
 int  iconv_ces_close_func(struct iconv_ces *ces);
 void iconv_ces_reset_func(struct iconv_ces *ces);
@@ -277,7 +332,7 @@
 
 #define iconv_char32bit(ch)	((ch) & 0xFFFF0000)
 
-#define	ICONV_CES_OPEN(ces)	(ces)->desc->open(ces)
+#define	ICONV_CES_OPEN(ces,ctx)	(ces)->desc->open(ces,ctx)
 #define	ICONV_CES_CLOSE(ces)	(ces)->desc->close(ces)
 #define ICONV_CES_RESET(ces)	(ces)->desc->reset(ces)
 #define ICONV_CES_CONVERT_FROM_UCS(cesd, in, outbuf, outbytes) \
@@ -301,7 +356,7 @@
 
 typedef struct iconv_ces_euc_ccs {
 	const char	*prefix;
-	size_t		prefixlen;
+	apr_size_t		prefixlen;
 } iconv_ces_euc_ccs_t;
 
 ICONV_CES_DRIVER_DECL(euc);
@@ -314,7 +369,7 @@
 typedef struct iconv_ces_iso2022_ccs {
 	int		shift;
 	const char *	designator;
-	size_t		designatorlen;
+	apr_size_t		designatorlen;
 } iconv_ces_iso2022_ccs_t;
 
 typedef struct {
@@ -326,26 +381,13 @@
 ICONV_CES_DRIVER_DECL(iso2022);
 
 
-#ifdef ICONV_DEBUG
-void iconv_debug(const char *file, int line, const char *function,
-	const char *format, ...);
-#define idebug(format, args...) \
-		iconv_debug(__FILE__, __LINE__, __FUNCTION__, format , ## args)
-#include <err.h>
-#define iconv_warnx(format, args...) \
-		warnx(__FUNCTION__ # format , ## args)
-#else
-#define idebug(format, args...)
-#define iconv_warnx(format, args...)
-#endif
-
-int  iconv_mod_load(const char *, int, const void *, struct iconv_module **);
-int  iconv_mod_unload(struct iconv_module *);
+int  iconv_mod_load(const char *, int, const void *, struct iconv_module **, apr_pool_t *);
+int  iconv_mod_unload(struct iconv_module *,apr_pool_t *ctx);
 iconv_mod_event_t iconv_mod_noevent;
 
 iconv_mod_event_t iconv_ccs_event;
 
-int  iconv_malloc(size_t size, void **pp);
+int  iconv_malloc(apr_size_t size, void **pp);
 
 extern struct iconv_converter_desc iconv_uc_desc;
 
diff --git a/lib/iconv_ccs.c b/lib/iconv_ccs.c
index 3cbcdf5..cebb13b 100644
--- a/lib/iconv_ccs.c
+++ b/lib/iconv_ccs.c
@@ -30,16 +30,11 @@
  *	iconv (Charset Conversion Library) v1.0
  */
 
-#include <err.h>	/* warnx */
-#include <errno.h>	/* errno */
-#include <stdlib.h>	/* free, malloc */
-#include <string.h>
-
 #define ICONV_INTERNAL
-#include <iconv.h>	/* iconv_ccs_desc, iconv_ccs_module */
+#include "iconv.h"	/* iconv_ccs_desc, iconv_ccs_module */
 
-int
-iconv_ccs_event(struct iconv_module *mod, int event)
+apr_status_t
+iconv_ccs_event(struct iconv_module *mod, int event, apr_pool_t *ctx)
 {
 /*	struct iconv_ccs_desc *desc =
 	    (struct iconv_ccs_desc *)mod->im_desc->imd_data;*/
@@ -47,14 +42,14 @@
 	switch (event) {
 	    case ICMODEV_LOAD:
 		if (mod->im_deplist == NULL)
-			return EINVAL;
+			return APR_EINVAL;
 		mod->im_methods = mod->im_deplist->im_desc->imd_data;
 		mod->im_data = mod->im_desc->imd_data;
 		break;
 	    case ICMODEV_UNLOAD:
 		break;
 	    default:
-		return EINVAL;
+		return APR_EINVAL;
 	}
-	return 0;
+	return APR_SUCCESS;
 }
diff --git a/lib/iconv_ces.c b/lib/iconv_ces.c
index 590249f..cac600a 100644
--- a/lib/iconv_ces.c
+++ b/lib/iconv_ces.c
@@ -30,48 +30,46 @@
  *	iconv (Charset Conversion Library) v1.0
  */
 
-#include <err.h>	/* warnx */
-#include <errno.h>	/* errno */
 #include <limits.h>	/* PATH_MAX */
 #include <stdlib.h>	/* free, malloc */
 #include <string.h>
 
 #define ICONV_INTERNAL
-#include <iconv.h>	/* iconv_ccs_desc, iconv_ccs */
+#include "iconv.h"	/* iconv_ccs_desc, iconv_ccs */
 
-int
-iconv_ces_open(const char *cesname, struct iconv_ces **cespp)
+apr_status_t
+iconv_ces_open(const char *cesname, struct iconv_ces **cespp, apr_pool_t *ctx)
 {
 	struct iconv_module *mod;
 	struct iconv_ces *ces;
-	int error;
+	apr_status_t error;
 
-	error = iconv_mod_load(cesname, ICMOD_UC_CES, NULL, &mod);
-	if (error == EFTYPE)
-		error = iconv_mod_load("_tbl_simple", ICMOD_UC_CES, cesname, &mod);
-	if (error)
-		return (error == EFTYPE) ? EINVAL : error;
+	error = iconv_mod_load(cesname, ICMOD_UC_CES, NULL, &mod, ctx);
+	if (APR_STATUS_IS_EFTYPE(error))
+		error = iconv_mod_load("_tbl_simple", ICMOD_UC_CES, cesname, &mod, ctx);
+	if (error != APR_SUCCESS)
+		return (APR_STATUS_IS_EFTYPE(error)) ? APR_EINVAL : error;
 	ces = malloc(sizeof(*ces));
 	if (ces == NULL) {
-		iconv_mod_unload(mod);
-		return ENOMEM;
+		iconv_mod_unload(mod, ctx);
+		return APR_ENOMEM;
 	}
-	bzero(ces, sizeof(*ces));
+	memset(ces,0, sizeof(*ces));
 	ces->desc = (struct iconv_ces_desc*)mod->im_desc->imd_data;
 	ces->data = mod->im_data;
 	ces->mod = mod;
-	error = ICONV_CES_OPEN(ces);
-	if (error) {
+	error = ICONV_CES_OPEN(ces,ctx);
+	if (error != APR_SUCCESS) {
 		free(ces);
-		iconv_mod_unload(mod);
+		iconv_mod_unload(mod, ctx);
 		return error;
 	}
 	*cespp = ces;
-	return 0;
+	return APR_SUCCESS;
 }
 
 int
-iconv_ces_close(struct iconv_ces *ces)
+iconv_ces_close(struct iconv_ces *ces, apr_pool_t *ctx)
 {
 	int res;
 
@@ -79,7 +77,7 @@
 		return -1;
 	res = ICONV_CES_CLOSE(ces);
 	if (ces->mod != NULL)
-		iconv_mod_unload(ces->mod);
+		iconv_mod_unload(ces->mod, ctx);
 	free(ces);
 	return res;
 }
@@ -100,7 +98,7 @@
 void
 iconv_ces_reset_func(struct iconv_ces *ces)
 {
-	bzero(ces->data, sizeof(int));
+	memset(ces->data, 0, sizeof(int));
 }
 
 /*ARGSUSED*/
diff --git a/lib/iconv_ces_euc.c b/lib/iconv_ces_euc.c
index 1a137b1..3d29944 100644
--- a/lib/iconv_ces_euc.c
+++ b/lib/iconv_ces_euc.c
@@ -30,12 +30,11 @@
  *	iconv (Charset Conversion Library) v1.0
  */
 
-#include <errno.h>
 #include <stdlib.h>	/* free, malloc */
 #include <string.h>
 
 #define ICONV_INTERNAL
-#include <iconv.h>
+#include "iconv.h"
 
 #define	CESTOSTATE(ces)		((iconv_ces_euc_state_t *)(ces)->data)
 #define	MODTOCCS(mod)		((struct iconv_ccs_desc *)(mod)->im_desc->imd_data)
@@ -46,46 +45,46 @@
 	const struct iconv_module *ccs[1];
 } iconv_ces_euc_state_t;
 
-int
-iconv_euc_open(struct iconv_ces *ces)
+apr_status_t
+iconv_euc_open(struct iconv_ces *ces, apr_pool_t *ctx)
 {
 	struct iconv_module *depmod = ces->mod->im_deplist;
 	iconv_ces_euc_state_t *state;
-	size_t stsz;
+	apr_size_t stsz;
 	int i;
 
 	stsz = sizeof(iconv_ces_euc_state_t) +
 	    sizeof(struct iconv_module *) * (ces->mod->im_depcnt - 1);
 	state = (iconv_ces_euc_state_t *)malloc(stsz);
 	if (state == NULL)
-		return errno;
-	bzero(state, stsz);
+		return APR_ENOMEM;
+	memset(state, 0, stsz);
 	state->nccs = ces->mod->im_depcnt;
 	for (i = ces->mod->im_depcnt; i; i--, depmod = depmod->im_next)
 		state->ccs[i - 1] = depmod;
 	CESTOSTATE(ces) = state;
-	return 0;
+	return APR_SUCCESS;
 }
 
-int
+apr_status_t
 iconv_euc_close(struct iconv_ces *ces)
 {
 	free(CESTOSTATE(ces));
-	return 0;
+	return APR_SUCCESS;
 }
 
 #define is_7_14bit(data) ((data)->nbits & 7)
 #define is_7bit(data) ((data)->nbits & 1)
 
-ssize_t
+apr_ssize_t
 iconv_euc_convert_from_ucs(struct iconv_ces *ces, ucs_t in,
-	unsigned char **outbuf, size_t *outbytesleft)
+	unsigned char **outbuf, apr_size_t *outbytesleft)
 {
 	iconv_ces_euc_state_t *euc_state = CESTOSTATE(ces);
 	const iconv_ces_euc_ccs_t *ccsattr;
 	const struct iconv_ccs_desc *ccs;
 	ucs_t res;
-	size_t bytes;
+	apr_size_t bytes;
 	int i;
 
 	if (in == UCS_CHAR_NONE)
@@ -124,9 +123,9 @@
 
 static ucs_t
 cvt2ucs(const struct iconv_ccs_desc *ccs, const unsigned char *inbuf,
-	size_t inbytesleft, int hi_plane, const unsigned char **bufptr)
+	apr_size_t inbytesleft, int hi_plane, const unsigned char **bufptr)
 {
-	size_t bytes = ccs->nbits > 8 ? 2 : 1;
+	apr_size_t bytes = ccs->nbits > 8 ? 2 : 1;
 	ucs_t ch = *(const unsigned char *)inbuf++;
 
 	if (inbytesleft < bytes)
@@ -146,7 +145,7 @@
 
 ucs_t
 iconv_euc_convert_to_ucs(struct iconv_ces *ces,
-	const unsigned char **inbuf, size_t *inbytesleft)
+	const unsigned char **inbuf, apr_size_t *inbytesleft)
 {
 	iconv_ces_euc_state_t *euc_state = CESTOSTATE(ces);
 	const iconv_ces_euc_ccs_t *ccsattr;
diff --git a/lib/iconv_ces_iso2022.c b/lib/iconv_ces_iso2022.c
index 9b70519..e085374 100644
--- a/lib/iconv_ces_iso2022.c
+++ b/lib/iconv_ces_iso2022.c
@@ -30,16 +30,15 @@
  *	iconv (Charset Conversion Library) v1.0
  */
 
-#include <errno.h>
 #include <stdlib.h>	/* free, malloc */
-#include <string.h>	/* bzero, memcmp, memcpy */
+#include <string.h>	/* memset, memcmp, memcpy */
 
 #define ICONV_INTERNAL
-#include <iconv.h>
+#include "iconv.h"
 
 typedef struct {
 	const char	*sequence;
-	size_t		length;
+	apr_size_t	length;
 	int		prefix_type;
 } iconv_ces_iso2022_shift;
 
@@ -67,14 +66,14 @@
 	const struct iconv_module *ccsmod[1];
 } iconv_ces_iso2022_state_t;
 
-int
-iconv_iso2022_open(struct iconv_ces *ces)
+apr_status_t
+iconv_iso2022_open(struct iconv_ces *ces, apr_pool_t *ctx)
 {
 	const iconv_ces_iso2022_ccs_t *ccsattr;
 	const struct iconv_ccs_desc *ccs;
 	iconv_ces_iso2022_state_t *state;
 	struct iconv_module *depmod;
-	size_t stsz, shiftsz;
+	apr_size_t stsz, shiftsz;
 	int i;
 
 	shiftsz = SHIFT_LEN;
@@ -82,8 +81,8 @@
 	    sizeof(struct iconv_module *) * (ces->mod->im_depcnt - 1);
 	state = (iconv_ces_iso2022_state_t *)malloc(stsz + shiftsz);
 	if (state == NULL)
-		return errno;
-	bzero(state, stsz + shiftsz);
+		return APR_ENOMEM;
+	memset(state, 0, stsz + shiftsz);
 	ces->data = state;
 	state->shift_tab = (int*)((char*)state + stsz);
 	state->org_shift_tab = ces->desc->data;
@@ -99,7 +98,7 @@
 		if (ccsattr->shift >= 0)
 			state->prefix[(int)(iso_shift[ccsattr->shift].sequence[0])] = 1;
 	}
-	return 0;
+	return APR_SUCCESS;
 }
 
 int
@@ -129,7 +128,7 @@
 update_shift_state(const struct iconv_ces *ces, ucs_t ch)
 {
 	struct iconv_ces_iso2022_state *iso_state = CESTOSTATE(ces);
-	size_t i;
+	apr_size_t i;
 
 	if (ch == '\n' && iso_state->previous_char == '\r') {
 		for (i = 0; i < shift_num; i ++) {
@@ -142,15 +141,15 @@
 
 #define is_7_14bit(ccs) ((ccs)->nbits & 7)
 
-static ssize_t
+static apr_ssize_t
 cvt_ucs2iso(const struct iconv_ces *ces, ucs_t in,
-	unsigned char **outbuf, size_t *outbytesleft, int cs)
+	unsigned char **outbuf, apr_size_t *outbytesleft, int cs)
 {
 	struct iconv_ces_iso2022_state *iso_state = CESTOSTATE(ces);
 	const struct iconv_ces_iso2022_ccs *ccsattr;
 	const struct iconv_ccs_desc *ccs;
 	ucs_t res;
-	size_t len = 0;
+	apr_size_t len = 0;
 	int need_designator, need_shift;
 
 	ccs = MODTOCCS(iso_state->ccsmod[cs]);
@@ -199,12 +198,12 @@
 	return 1;
 }
 
-ssize_t
+apr_ssize_t
 iconv_iso2022_convert_from_ucs(struct iconv_ces *ces,
-	ucs_t in, unsigned char **outbuf, size_t *outbytesleft)
+	ucs_t in, unsigned char **outbuf, apr_size_t *outbytesleft)
 {
 	struct iconv_ces_iso2022_state *iso_state = CESTOSTATE(ces);
-	ssize_t res;
+	apr_ssize_t res;
 	int cs, i;
 
 	if (in == UCS_CHAR_NONE)
@@ -227,9 +226,9 @@
 
 static ucs_t
 cvt_iso2ucs(const struct iconv_ccs_desc *ccs, const unsigned char **inbuf,
-	size_t *inbytesleft, int prefix_type)
+	apr_size_t *inbytesleft, int prefix_type)
 {
-	size_t bytes = ccs->nbits > 8 ? 2 : 1;
+	apr_size_t bytes = ccs->nbits > 8 ? 2 : 1;
 	ucs_t ch = **inbuf;
 
 	if (*inbytesleft < bytes)
@@ -247,14 +246,14 @@
 
 ucs_t
 iconv_iso2022_convert_to_ucs(struct iconv_ces *ces,
-	const unsigned char **inbuf, size_t *inbytesleft)
+	const unsigned char **inbuf, apr_size_t *inbytesleft)
 {
 	struct iconv_ces_iso2022_state *iso_state = CESTOSTATE(ces);
 	const struct iconv_ces_iso2022_ccs *ccsattr;
 	ucs_t res;
 	const unsigned char *ptr = *inbuf;
 	unsigned char byte;
-	size_t len, left = *inbytesleft;
+	apr_size_t len, left = *inbytesleft;
 	int i;
 
 	while (left) {
diff --git a/lib/iconv_int.c b/lib/iconv_int.c
index 417d356..ad8373d 100644
--- a/lib/iconv_int.c
+++ b/lib/iconv_int.c
@@ -31,24 +31,23 @@
  */
 
 #include <ctype.h>	/* tolower */
-#include <errno.h>	/* errno */
 #include <stdio.h>	/* snprintf */
 #include <stdlib.h>
 #include <string.h>	/* strdup, strlen */
 
 #define ICONV_INTERNAL
-#include <iconv.h>
+#include "iconv.h"
 
-int
-iconv_malloc(size_t size, void **pp)
+apr_status_t
+iconv_malloc(apr_size_t size, void **pp)
 {
 	void *p = malloc(size);
 
 	if (p == NULL)
-		return errno;
-	bzero(p, size);
+		return APR_ENOMEM;
+	memset(p, 0, size);
 	*pp = p;
-	return 0;
+	return APR_SUCCESS;
 }
 
 #ifdef ICONV_DEBUG
diff --git a/lib/iconv_module.c b/lib/iconv_module.c
index f06faee..657ae25 100644
--- a/lib/iconv_module.c
+++ b/lib/iconv_module.c
@@ -28,40 +28,40 @@
  *
  */
 
-#include <sys/types.h>	/* sys/stat.h */
-#include <sys/stat.h>	/* struct stat */
-
-#include <ctype.h>	/* tolower */
-#include <dlfcn.h>
-#include <err.h>
-#include <errno.h>
-#include <limits.h>
-#include <stdio.h>	/* snprintf */
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>	/* issetugid */
-
 #define ICONV_INTERNAL
-#include <iconv.h>
 
-static int
-iconv_getpathname(char *buffer, const char *dir, const char *name)
+#include "iconv.h"
+#include "apr_file_io.h"
+#include "apr_pools.h"
+#include "apr_dso.h"
+#include "apr_strings.h"
+
+#include <string.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+static apr_status_t
+iconv_getpathname(char *buffer, const char *dir, const char *name, apr_pool_t *ctx)
 {
-	struct stat sb;
+        apr_status_t rv;
+	apr_finfo_t sb;
 
-	snprintf(buffer, PATH_MAX, "%s/%s", dir, name);
-	return (stat(buffer, &sb) || ! S_ISREG(sb.st_mode)) ? EINVAL : 0;
+	apr_snprintf(buffer, APR_PATH_MAX, "%s/%s", dir, name);
+        if (rv = apr_stat(&sb, buffer, APR_FINFO_TYPE, ctx))
+            return rv;
+	return ((sb.filetype != APR_REG) ? APR_EINVAL : 0);
 }
 
-static int
-iconv_getpath(char *buf, const char *name)
+static apr_status_t
+iconv_getpath(char *buf, const char *name, apr_pool_t *ctx)
 {
-	char buffer[PATH_MAX];
+	char buffer[APR_PATH_MAX];
 	char *ptr;
 
 	if (tolower(name[0]) == 'x' && name[1] == '-')
 		name += 2;
-	snprintf(buffer, sizeof(buffer), "%s.so", name);
+	apr_snprintf(buffer, sizeof(buffer), "%s.so", name);
 	ptr = buffer + strlen(buffer) - 4 - strlen(name);
 	while (* ++ptr)
 		*ptr = tolower(*ptr);
@@ -73,63 +73,64 @@
 			if (p == NULL)
 				return ENOMEM;
 			for (ptr = p; (dir = strtok(p, ":")); p = NULL) {
-				if (iconv_getpathname(buf, dir, buffer) == 0) {
+				if (iconv_getpathname(buf, dir, buffer, ctx) == 0) {
 					free(ptr);
 					return 0;
 				}
 			}
+			free(ptr); /* otherwise memory leak */
 		}
 	}
-	return iconv_getpathname(buf, ICONV_DEFAULT_PATH, buffer);
+	return iconv_getpathname(buf, ICONV_DEFAULT_PATH, buffer, ctx);
 }
 
 static int
-iconv_dlopen(const char *name, const char *symbol, void **hpp, void **dpp)
+iconv_dlopen(const char *name, const char *symbol, void **hpp, void **dpp, apr_pool_t *ctx)
 {
-	void *handle, *data;
+	apr_dso_handle_t *handle;
+	void *data;
 
-	handle = dlopen(name, RTLD_LAZY);
-	if (handle == NULL) {
-		warnx("cannot dlopen file %s: %s", name, dlerror());
+	/* dlopen */
+	if (apr_dso_load(&handle, name, ctx) != APR_SUCCESS) {
 		return EINVAL;
 	}
-	data = dlsym(handle, symbol);
-	if (data != NULL) {
+	/* dlsym */
+	if ( apr_dso_sym(&data, handle, symbol) == APR_SUCCESS) {
 		*hpp = handle;
 		*dpp = data;
 		return 0;
 	}
-	dlclose(handle);
-	iconv_warnx("invalid file %s: no external symbol %s", name, symbol);
+	apr_dso_unload(handle);
 	return EINVAL;
 }
 
 int
 iconv_mod_load(const char *modname, int modtype, const void *args,
-	struct iconv_module **modpp)
+	struct iconv_module **modpp, apr_pool_t *ctx)
 {
 	struct iconv_module_desc *mdesc;
 	struct iconv_module *mod, *depmod;
 	const struct iconv_module_depend *depend;
-	char buffer[PATH_MAX];
+	char buffer[APR_PATH_MAX];
 	void *handle;
 	int error;
 
-	if (iconv_getpath(buffer, modname) != 0)
+	if (iconv_getpath(buffer, modname, ctx) != 0)
 		return EINVAL;
-	error = iconv_dlopen(buffer, "iconv_module", &handle, (void**)&mdesc);
+
+	error = iconv_dlopen(buffer, "iconv_module", &handle, (void**)&mdesc, ctx);
 	if (error)
 		return error;
 	if (modtype != ICMOD_ANY && mdesc->imd_type != modtype) {
-		dlclose(handle);
-		return EFTYPE;
+		apr_dso_unload(handle);
+		return APR_EFTYPE;
 	}
 	mod = malloc(sizeof(*mod));
 	if (mod == NULL) {
-		dlclose(handle);
+		apr_dso_unload(handle);
 		return ENOMEM;
 	}
-	bzero(mod, sizeof(*mod));
+	memset(mod, 0, sizeof(*mod));
 	mod->im_handle = handle;
 	mod->im_desc = mdesc;
 	mod->im_args = args;
@@ -137,7 +138,7 @@
 	if (depend) {
 		while (depend->md_name) {
 			error = iconv_mod_load(depend->md_name, 
-			    depend->md_type, NULL, &depmod);
+			    depend->md_type, NULL, &depmod, ctx);
 			if (error)
 				goto bad;
 			depmod->im_depdata = depend->md_data;
@@ -146,7 +147,7 @@
 			depend++;
 		}
 	}
-	error = ICONV_MOD_DYNDEPS(mod);
+	error = ICONV_MOD_DYNDEPS(mod,ctx);
 	if (error)
 		goto bad;
 	depmod = mod->im_deplist;
@@ -154,19 +155,19 @@
 		mod->im_depcnt++;
 		depmod = depmod->im_next;
 	}
-	error = ICONV_MOD_LOAD(mod);
+	error = ICONV_MOD_LOAD(mod,ctx);
 	if (error)
 		goto bad;
 	mod->im_flags |= ICMODF_LOADED;
 	*modpp = mod;
 	return 0;
 bad:
-	iconv_mod_unload(mod);
+	iconv_mod_unload(mod,ctx);
 	return error;
 }
 
 int
-iconv_mod_unload(struct iconv_module *mod)
+iconv_mod_unload(struct iconv_module *mod, apr_pool_t *ctx)
 {
 	struct iconv_module *deplist, *tmp;
 	int error = 0;
@@ -174,22 +175,22 @@
 	if (mod == NULL)
 		return -1;
 	if (mod->im_flags & ICMODF_LOADED)
-		error = ICONV_MOD_UNLOAD(mod);
+		error = ICONV_MOD_UNLOAD(mod,ctx);
 	deplist = mod->im_deplist;
 	while (deplist) {
 		tmp = deplist->im_next;
-		iconv_mod_unload(deplist);
+		iconv_mod_unload(deplist,ctx);
 		deplist = tmp;
 	}
 	if (mod->im_handle != NULL)
-		if (dlclose(mod->im_handle) != 0)
+		if (apr_dso_unload(mod->im_handle) != APR_SUCCESS)
 			error = EINVAL;
 	free(mod);
 	return error;
 }
 
 int
-iconv_mod_noevent(struct iconv_module *mod, int event)
+iconv_mod_noevent(struct iconv_module *mod, int event, apr_pool_t *ctx)
 {
 	switch (event) {
 	    case ICMODEV_LOAD:
diff --git a/lib/iconv_uc.c b/lib/iconv_uc.c
index 818844a..5309013 100644
--- a/lib/iconv_uc.c
+++ b/lib/iconv_uc.c
@@ -1,11 +1,9 @@
-#include <err.h>
-#include <errno.h>
+#define ICONV_INTERNAL
+#include "iconv.h"
+
 #include <stdlib.h>
 #include <string.h>
 
-#define ICONV_INTERNAL
-#include <iconv.h>
-
 struct iconv_uc {
 	struct iconv_ces *	from;
 	struct iconv_ces *	to;
@@ -23,86 +21,89 @@
 	iconv_uc_conv
 };
 
-int
-iconv_uc_open(const char *to, const char *from, void **data)
+/*
+ * It is call by apr_iconv_open: (*idesc)->icd_open()
+ */
+apr_status_t
+iconv_uc_open(const char *to, const char *from, void **data, apr_pool_t *ctx)
 {
 	struct iconv_uc *ic;
 	int error;
 
 	ic = malloc(sizeof(*ic));
 	if (ic == NULL)
-		return ENOMEM;
-	bzero(ic, sizeof(*ic));
-	error = iconv_ces_open(from, &ic->from);
-	if (error)
+		return APR_ENOMEM;
+	memset(ic, 0, sizeof(*ic));
+	error = iconv_ces_open(from, &ic->from, ctx);
+	if (error!=APR_SUCCESS) {
 		goto bad;
-	error = iconv_ces_open(to, &ic->to);
-	if (error)
+	}
+	error = iconv_ces_open(to, &ic->to, ctx);
+	if (error!=APR_SUCCESS) {
 		goto bad;
+	}
 	ic->ignore_ilseq = 0;
 	ic->missing = '_';
 	*data = (void*)ic;
-	return 0;
+	return APR_SUCCESS;
 bad:
-	iconv_uc_close(ic);
+	iconv_uc_close(ic,ctx);
 	return error;
 }
 
-int
-iconv_uc_close(void *data)
+apr_status_t
+iconv_uc_close(void *data, apr_pool_t *ctx)
 {
 	struct iconv_uc *ic = (struct iconv_uc *)data;
 
 	if (ic == NULL)
-		return EBADF;
+		return APR_EBADF;
 	if (ic->from)
-		iconv_ces_close(ic->from);
+		iconv_ces_close(ic->from, ctx);
 	if (ic->to)
-		iconv_ces_close(ic->to);
+		iconv_ces_close(ic->to, ctx);
 	free(ic);
-	return 0;
+	return APR_SUCCESS;
 }
 
-size_t
-iconv_uc_conv(void *data, const unsigned char **inbuf, size_t *inbytesleft,
-	unsigned char **outbuf, size_t *outbytesleft)
+apr_status_t
+iconv_uc_conv(void *data, const unsigned char **inbuf, apr_size_t *inbytesleft,
+	unsigned char **outbuf, apr_size_t *outbytesleft, apr_size_t *res)
 {
 	struct iconv_uc *ic = (struct iconv_uc *)data;
 	const unsigned char *ptr;
 	ucs_t ch;
-        ssize_t size;
-	size_t res = 0;
+        apr_ssize_t size;
 
+	*res = (apr_size_t)(0);
 	if (data == NULL) {
-		errno = EBADF;
-		return (size_t)(-1);
+		*res = (apr_size_t) -1;
+		return APR_EBADF;
 	}
+
 	if (inbuf == NULL || *inbuf == NULL) {
 		if (ICONV_CES_CONVERT_FROM_UCS(ic->to, UCS_CHAR_NONE,
 		    outbuf, outbytesleft) <= 0) {
-			errno = E2BIG;
-			return (size_t)(-1);
+			*res = (apr_size_t) -1;
+			return APR_BADARG; /* too big */
 		}
 		ICONV_CES_RESET(ic->from);
 		ICONV_CES_RESET(ic->to);
-		return res;
+		return APR_SUCCESS;
 	}
 	if (inbytesleft == NULL || *inbytesleft == 0)
-		return 0;
+		return APR_SUCCESS;
 	while (*inbytesleft > 0 && *outbytesleft > 0) {
 		ptr = *inbuf;
 		ch = ICONV_CES_CONVERT_TO_UCS(ic->from, inbuf, inbytesleft);
-		if (ch == UCS_CHAR_NONE) {
-			errno = EINVAL;
-			return res;
-		}
+		if (ch == UCS_CHAR_NONE)
+			return APR_EINVAL;
 		if (ch == UCS_CHAR_INVALID) { /* Invalid character in source buffer */
 			if (ic->ignore_ilseq)
 				continue;
 			*inbytesleft += *inbuf - ptr;
 			*inbuf = ptr;
-			errno = EILSEQ;
-			return res;
+			return APR_BADCH; /* eilseq invalid */
 		}
 		size = ICONV_CES_CONVERT_FROM_UCS(ic->to, ch,
 		    outbuf, outbytesleft);
@@ -110,16 +111,15 @@
 			size = ICONV_CES_CONVERT_FROM_UCS(ic->to, ic->missing,
 			    outbuf, outbytesleft);
 			if (size)
-				res ++;
+				*res ++;
 		}
 		if (!size) {		 /* No space to write to */
 			*inbytesleft += *inbuf - ptr;
 			*inbuf = ptr; 
-			errno = E2BIG;
-			return res;
+			return APR_BADARG; /* too big */
 		}
 	}
-	return res;
+	return APR_SUCCESS;
 }
 
 #if 0
diff --git a/libapriconv.dsp b/libapriconv.dsp
new file mode 100644
index 0000000..e6de017
--- /dev/null
+++ b/libapriconv.dsp
@@ -0,0 +1,169 @@
+# Microsoft Developer Studio Project File - Name="libapriconv" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=libapriconv - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libapriconv.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libapriconv.mak" CFG="libapriconv - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libapriconv - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libapriconv - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libapriconv - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../apr/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "API_DECLARE_EXPORT" /Fd"Release\apriconv" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
+# ADD BASE RSC /l 0x409
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib advapi32.lib /nologo /base:"0x6EC0000" /subsystem:windows /dll /map /machine:I386
+# ADD LINK32 kernel32.lib advapi32.lib /nologo /base:"0x6EC0000" /subsystem:windows /dll /map /machine:I386
+
+!ELSEIF  "$(CFG)" == "libapriconv - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../apr/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "API_DECLARE_EXPORT" /Fd"Debug\apriconv" /FD /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib advapi32.lib /nologo /base:"0x6EC0000" /subsystem:windows /dll /incremental:no /map /debug /machine:I386
+# ADD LINK32 kernel32.lib advapi32.lib /nologo /base:"0x6EC00000" /subsystem:windows /dll /incremental:no /map /debug /machine:I386
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libapriconv - Win32 Release"
+# Name "libapriconv - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter ".c"
+# Begin Group "lib"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\lib\iconv.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\lib\iconv_ces.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\lib\iconv_ces_euc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\lib\iconv_ces_iso2022.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\lib\iconv_int.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\lib\iconv_module.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\lib\iconv_uc.c
+# End Source File
+# End Group
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter ".h"
+# Begin Source File
+
+SOURCE=.\lib\iconv.h
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=.\libapriconv.rc
+# End Source File
+# Begin Source File
+
+SOURCE=..\apr\build\win32ver.awk
+
+!IF  "$(CFG)" == "libapriconv - Win32 Release"
+
+# PROP Ignore_Default_Tool 1
+# Begin Custom Build - Creating Version Resource
+InputPath=..\apr\build\win32ver.awk
+
+".\libapriconv.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+	awk -f ../apr/build/win32ver.awk libapriconv "Apache APR I18N Conversion Library"  ../../include/ap_release.h > .\libapriconv.rc
+
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "libapriconv - Win32 Debug"
+
+# PROP Ignore_Default_Tool 1
+# Begin Custom Build - Creating Version Resource
+InputPath=..\apr\build\win32ver.awk
+
+".\libapriconv.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+	awk -f ../apr/build/win32ver.awk libapriconv "Apache APR I18N Conversion Library"  ../../include/ap_release.h > .\libapriconv.rc
+
+# End Custom Build
+
+!ENDIF 
+
+# End Source File
+# End Target
+# End Project
diff --git a/util/.cvsignore b/util/.cvsignore
new file mode 100644
index 0000000..97ec5c8
--- /dev/null
+++ b/util/.cvsignore
@@ -0,0 +1,3 @@
+.libs
+*.lo
+iconv                                                                    
diff --git a/util/Makefile.in b/util/Makefile.in
new file mode 100644
index 0000000..fd6a9ed
--- /dev/null
+++ b/util/Makefile.in
@@ -0,0 +1,13 @@
+TARGETS  =
+PROGRAMS = iconv
+
+# bring in rules.mk for standard functionality                                  
+@INCLUDE_RULES@
+
+all: $(PROGRAMS)
+
+iconv_OBJECTS = iconv.lo iconv_stream.lo
+iconv_LDADD   = ../lib/libapriconv.la ../../apr/libapr.la
+
+iconv:	$(iconv_OBJECTS) $(iconv_LDADD)
+	$(LINK) $(iconv_OBJECTS) $(iconv_LDADD) $(LIBS)
diff --git a/util/Makefile.new b/util/Makefile.new
new file mode 100644
index 0000000..2dc3e26
--- /dev/null
+++ b/util/Makefile.new
@@ -0,0 +1,11 @@
+PROG=		iconv
+SRCS=		iconv.c iconv_stream.c
+
+LDADD=		-L../lib -liconv
+DPADD+=		../lib/libiconv.a
+
+BINDIR=		${PREFIX}/bin
+
+MAN1=		iconv.1
+
+.include <bsd.prog.mk>
diff --git a/util/iconv.c b/util/iconv.c
index 6f401fe..bfc68f1 100644
--- a/util/iconv.c
+++ b/util/iconv.c
@@ -30,7 +30,8 @@
  *	iconv (Charset Conversion Library) v0.3
  */
 
-#include <err.h>	/* err, errx, warn */
+#include "apr.h"
+
 #include <stdarg.h>	/* va_end, va_list, va_start */
 #include <stdio.h>	/* FILE, fclose, ferror, fopen, fread, stdin,
                            vfprintf */
@@ -43,14 +44,18 @@
 convert_stream(FILE *in, iconv_stream *out)
 {
 	static char buffer[4096];
-	size_t size;
+	apr_size_t size;
 
 	while ((size = fread(buffer, 1, sizeof(buffer), in))) {
-    		if (iconv_bwrite(out, buffer, size) <= 0)
-			errx(2, "convert_stream: conversion stream writing error");
+    		if (iconv_bwrite(out, buffer, size) <= 0) {
+			fprintf(stderr, "convert_stream: conversion stream writing error\n");
+			exit(2);
+		}
 	}
-	if (ferror(in))
-		err(1, "convert_stream: input file reading error");
+	if (ferror(in)) {
+		fprintf(stderr, "convert_stream: input file reading error\n");
+		exit(1);
+	}
 }
 
 static void
@@ -60,7 +65,7 @@
 	FILE *fp = std ? stdin : fopen(name, "r");
 
 	if (fp == NULL) {
-		warn("cannot open file %s", name);
+		fprintf(stderr, "cannot open file %s\n", name);
 		return;
 	}
 	convert_stream(fp, is);
@@ -68,6 +73,11 @@
     		fclose(fp);
 }
 
+static void closeapr(void)
+{
+    apr_terminate();
+}
+
 int
 main(int argc, char * const *argv)
 {
@@ -75,6 +85,8 @@
 	iconv_stream *is;
 	char *from = NULL, *to = NULL, *input = NULL;
 	int opt;
+	apr_pool_t *ctx; 
+	apr_status_t status;
 
 	while ((opt = getopt(argc, argv, "f:s:t:")) > 0) {
 		switch (opt) {
@@ -88,15 +100,31 @@
 			input = optarg;
 		}
 	}
-	if (from == NULL)
-		errx(4, "missing source charset (-f <name>)");
-	if (to == NULL)
-		errx(5, "missing destination charset (-t <name>)");
-	cd = iconv_open(to, from);
-	if ((int)cd < 0)
-		err(6, "unable to open specified convertor");
+	if (from == NULL) {
+		fprintf(stderr, "missing source charset (-f <name>)\n");
+		exit(4);
+	}
+	if (to == NULL) {
+		fprintf(stderr, "missing destination charset (-t <name>)\n");
+		exit(5);
+	}
+
+	/* Initialize APR */
+	apr_initialize();
+	atexit(closeapr);
+	if (apr_pool_create(&ctx, NULL) != APR_SUCCESS) {
+		fprintf(stderr, "Couldn't allocate context.\n");
+		exit(-1);
+	}
+
+	/* Use it */
+	status = apr_iconv_open(to, from,ctx, &cd);
+	if (status) {
+		fprintf(stderr, "unable to open specified convertor\n");
+		exit(6);
+		}
 	if (!(is = iconv_ostream_fopen(cd, stdout))) {
-		iconv_close(cd);
+		apr_iconv_close(cd,ctx);
 		exit(7);
 	}
 	if (input) {
@@ -110,6 +138,6 @@
 	if (iconv_write(is, NULL, 0) < 0)
 		exit(9);
 	iconv_stream_close(is);
-	iconv_close(cd);
+	apr_iconv_close(cd,ctx);
 	return 0;
 }
diff --git a/util/iconv_stream.c b/util/iconv_stream.c
index 2c21345..239ee9e 100644
--- a/util/iconv_stream.c
+++ b/util/iconv_stream.c
@@ -30,7 +30,6 @@
  *	iconv (Charset Conversion Library) v1.0
  */
 
-#include <err.h>	/* warnx */
 #include <errno.h>	/* E2BIG, EINVAL, errno */
 #include <stdio.h>	/* FILE, ferror, fwrite */
 #include <stdlib.h>	/* free, malloc */
@@ -63,23 +62,25 @@
     free(stream);
 }
 
-ssize_t iconv_write(void *handle, const void *buf, size_t insize)
+apr_ssize_t iconv_write(void *handle, const void *buf, apr_size_t insize)
 {
 #define stream ((iconv_stream *)handle)
     char buffer[4096];
-    size_t outsize = sizeof(buffer), size;
+    apr_size_t outsize = sizeof(buffer), size;
     char *outbuf = buffer;
     const char *inbuf = buf;
-    size_t chars;
+    apr_size_t chars;
+    apr_status_t status;
+
     if (!buf)
         insize = 0;
-    chars = iconv(stream->cd, (const char **)&buf, &insize, &outbuf, &outsize);
+    status = apr_iconv(stream->cd, (const char **)&buf, &insize, &outbuf, &outsize, &chars);
     if ((int)chars < 0)
         return -1;
     stream->chars += chars;
     size = outbuf - buffer;
     if (size) {
-        ssize_t r;
+        apr_ssize_t r;
         outbuf = buffer;
         while ((r = stream->method(stream->handle, outbuf, size)) < size) {
             if (r < 0)
@@ -96,18 +97,17 @@
 #undef stream
 }
 
-ssize_t iconv_bwrite(void *handle, const void *buf, size_t insize)
+apr_ssize_t iconv_bwrite(void *handle, const void *buf, apr_size_t insize)
 {
 #define stream ((iconv_stream *)handle)
-    ssize_t res = 0;
-    size_t left, size = insize;
+    apr_ssize_t res = 0;
+    apr_size_t left, size = insize;
     if (!buf)
         return iconv_write(handle, NULL, 0);
     if (stream->buffer && stream->buf_ptr > stream->buffer) {
         do {
             left = stream->buffer + buf_size - stream->buf_ptr;
             if (!left) {
-        	warnx("iconv_bwrite: lack of space in the output buffer");
         	errno = E2BIG;
                 return -1;
             }
@@ -158,9 +158,9 @@
 #undef stream
 }
 
-static ssize_t fwrite_wrapper(void *handle, void *buf, size_t size)
+static apr_ssize_t fwrite_wrapper(void *handle, void *buf, apr_size_t size)
 {
-    size_t res = fwrite(buf, 1, size, (FILE *)handle);
+    apr_size_t res = fwrite(buf, 1, size, (FILE *)handle);
     return (res && !ferror((FILE *)handle)) ? res : -1;
 }
 
diff --git a/util/iconv_stream.h b/util/iconv_stream.h
index 2e61156..7c8f05a 100644
--- a/util/iconv_stream.h
+++ b/util/iconv_stream.h
@@ -1,17 +1,16 @@
 #ifndef _ICONV_STREAM_H_
 #define _ICONV_STREAM_H_
 
-#include <sys/types.h>	/* size_t, ssize_t */
 #include <stdio.h>	/* FILE */
-#include <iconv.h>	/* iconv_t */
+#include "iconv.h"	/* iconv_t */
 
-typedef ssize_t (*iconv_stream_func)(void *d, void *buf, size_t nbytes);
+typedef apr_ssize_t (*iconv_stream_func)(void *d, void *buf, apr_size_t nbytes);
 
 typedef struct {
 	iconv_t		cd;
-	size_t		chars;
-	size_t		in_bytes;
-	size_t		out_bytes;
+	apr_size_t	chars;
+	apr_size_t	in_bytes;
+	apr_size_t	out_bytes;
 	char *		buffer;
 	char *		buf_ptr;
 	void *		handle;
@@ -24,7 +23,7 @@
 
 iconv_stream *iconv_ostream_fopen(iconv_t cd, FILE *handle);
 
-ssize_t iconv_write(void *stream, const void *buf, size_t nbytes);
-ssize_t iconv_bwrite(void *stream, const void *buf, size_t nbytes);
+apr_ssize_t iconv_write(void *stream, const void *buf, apr_size_t nbytes);
+apr_ssize_t iconv_bwrite(void *stream, const void *buf, apr_size_t nbytes);
 
 #endif /*_ICONV_STREAM_H_*/
