diff --git a/src/os_mac.h b/src/os_mac.h
index 05b572d..cf575dd 100644
--- a/src/os_mac.h
+++ b/src/os_mac.h
@@ -299,15 +299,3 @@
 
 /* A Mac constant causing big problem to syntax highlighting */
 #define UNKNOWN_CREATOR '\?\?\?\?'
-
-/*
- * for debugging
- */
-#ifdef MACOS_X
-# ifdef _DEBUG
-#  define TRACE			Trace
-   void Trace(char *fmt, ...);
-# else
-#  define TRACE			1 ? (void)0 : printf
-# endif
-#endif
diff --git a/src/os_macosx.m b/src/os_macosx.m
index 619e86d..34a7012 100644
--- a/src/os_macosx.m
+++ b/src/os_macosx.m
@@ -19,533 +19,12 @@
 #import <Cocoa/Cocoa.h>
 
 
-NSString *VimPboardType = @"VimPboardType";
-
-
-#ifdef _DEBUG
-    void
-Trace(char* fmt, ...)
-{
-    char buf[2048];
-    va_list args;
-
-    va_start(args, fmt);
-    /* vsnprintf(buf, sizeof(buf), fmt, args);*/
-    fprintf(stderr, "%s", buf);
-    va_end(args);
-}
-#endif
-
-#ifdef MACOS_X_ICONVEMU
-/*
- * Libiconv emulation layer
- */
-
-struct _iconv_t
-{
-    TECObjectRef tec;
-    TECObjectRef tecReverse;
-    TECSnifferObjectRef sniff;
-    TextEncoding from;
-    TextEncoding to;
-};
-/* typedef struct _iconv_t *iconv_t; */
-
-
-static int last_errno = 0;
-
-/*
- * Get TextEncoding from iconv's encoding name
- */
-    static TextEncoding
-get_textencoding(const char* encodename)
-{
-    static struct {
-	const char* name;
-	TextEncoding encode;
-    } encodetable[] = {
-	/* ISO-8859 encodings family */
-	{"latin1", kTextEncodingISOLatin1},
-	{"latin2", kTextEncodingISOLatin2},
-	{"latin3", kTextEncodingISOLatin3},
-	{"latin4", kTextEncodingISOLatin4},
-	{"latin5", kTextEncodingISOLatin5},
-	{"latin6", kTextEncodingISOLatin6},
-	{"latin7", kTextEncodingISOLatin7},
-	{"latin8", kTextEncodingISOLatin8},
-	{"latin9", kTextEncodingISOLatin9},
-	{"iso-8859-1", kTextEncodingISOLatin1},
-	{"iso-8859-2", kTextEncodingISOLatin2},
-	{"iso-8859-3", kTextEncodingISOLatin3},
-	{"iso-8859-4", kTextEncodingISOLatin4},
-	{"iso-8859-5", kTextEncodingISOLatinCyrillic},
-	{"iso-8859-6", kTextEncodingISOLatinArabic},
-	{"iso-8859-7", kTextEncodingISOLatinGreek},
-	{"iso-8859-8", kTextEncodingISOLatinHebrew},
-	{"iso-8859-9", kTextEncodingISOLatin5},
-	{"iso-8859-10", kTextEncodingISOLatin6},
-	{"iso-8859-15", kTextEncodingISOLatin9},
-
-	/* Unicode encodings. */
-	/* TODO: Add other type of unicode */
-	{"ucs-2", kTextEncodingMacUnicode},
-
-	/* Japanese encoding aliases */
-	{"cp932", kTextEncodingShiftJIS},
-	{"shift-jis", kTextEncodingShiftJIS},
-	{"euc-jp", kTextEncodingEUC_JP},
-	{"iso-2022-jp", kTextEncodingISO_2022_JP},
-	{"iso-2022-jp-1", kTextEncodingISO_2022_JP_1},
-	{"iso-2022-jp-2", kTextEncodingISO_2022_JP_2},
-	{"iso-2022-jp-3", kTextEncodingISO_2022_JP_3},
-
-	/* Other aliases. These aliases in this block are just guessed. */
-	/* TODO: Must be verified. */
-	{"gb2312", kTextEncodingGB_2312_80},
-	{"cp936", kTextEncodingMacChineseSimp},
-	{"euc-cn", kTextEncodingEUC_CN},
-	{"cp950", kTextEncodingMacChineseTrad},
-	{"euc-tw", kTextEncodingEUC_TW},
-	{"cp949", kTextEncodingMacKorean},
-	{"euc-kr", kTextEncodingEUC_KR},
-
-	/*
-	 * All encodings supported by Macintosh.  You can find these values
-	 * in a file:
-	 *  /System/Library/Frameworks/CoreServices.framework/Versions/A/
-	 *    Frameworks/CarbonCore.framework/Versions/A/Headers/TextCommon.h
-	 */
-	{"MacRoman", kTextEncodingMacRoman},
-	{"MacJapanese", kTextEncodingMacJapanese},
-	{"MacChineseTrad", kTextEncodingMacChineseTrad},
-	{"MacKorean", kTextEncodingMacKorean},
-	{"MacArabic", kTextEncodingMacArabic},
-	{"MacHebrew", kTextEncodingMacHebrew},
-	{"MacGreek", kTextEncodingMacGreek},
-	{"MacCyrillic", kTextEncodingMacCyrillic},
-	{"MacDevanagari", kTextEncodingMacDevanagari},
-	{"MacGurmukhi", kTextEncodingMacGurmukhi},
-	{"MacGujarati", kTextEncodingMacGujarati},
-	{"MacOriya", kTextEncodingMacOriya},
-	{"MacBengali", kTextEncodingMacBengali},
-	{"MacTamil", kTextEncodingMacTamil},
-	{"MacTelugu", kTextEncodingMacTelugu},
-	{"MacKannada", kTextEncodingMacKannada},
-	{"MacMalayalam", kTextEncodingMacMalayalam},
-	{"MacSinhalese", kTextEncodingMacSinhalese},
-	{"MacBurmese", kTextEncodingMacBurmese},
-	{"MacKhmer", kTextEncodingMacKhmer},
-	{"MacThai", kTextEncodingMacThai},
-	{"MacLaotian", kTextEncodingMacLaotian},
-	{"MacGeorgian", kTextEncodingMacGeorgian},
-	{"MacArmenian", kTextEncodingMacArmenian},
-	{"MacChineseSimp", kTextEncodingMacChineseSimp},
-	{"MacTibetan", kTextEncodingMacTibetan},
-	{"MacMongolian", kTextEncodingMacMongolian},
-	{"MacEthiopic", kTextEncodingMacEthiopic},
-	{"MacCentralEurRoman", kTextEncodingMacCentralEurRoman},
-	{"MacVietnamese", kTextEncodingMacVietnamese},
-	{"MacExtArabic", kTextEncodingMacExtArabic},
-	{"MacSymbol", kTextEncodingMacSymbol},
-	{"MacDingbats", kTextEncodingMacDingbats},
-	{"MacTurkish", kTextEncodingMacTurkish},
-	{"MacCroatian", kTextEncodingMacCroatian},
-	{"MacIcelandic", kTextEncodingMacIcelandic},
-	{"MacRomanian", kTextEncodingMacRomanian},
-	{"MacCeltic", kTextEncodingMacCeltic},
-	{"MacGaelic", kTextEncodingMacGaelic},
-	{"MacKeyboardGlyphs", kTextEncodingMacKeyboardGlyphs},
-	{"MacTradChinese", kTextEncodingMacTradChinese},
-	{"MacRSymbol", kTextEncodingMacRSymbol},
-	{"MacSimpChinese", kTextEncodingMacSimpChinese},
-	{"MacGeez", kTextEncodingMacGeez},
-	{"MacEastEurRoman", kTextEncodingMacEastEurRoman},
-	{"MacUninterp", kTextEncodingMacUninterp},
-	{"MacUnicode", kTextEncodingMacUnicode},
-	{"MacFarsi", kTextEncodingMacFarsi},
-	{"MacUkrainian", kTextEncodingMacUkrainian},
-	{"MacInuit", kTextEncodingMacInuit},
-	{"MacVT100", kTextEncodingMacVT100},
-	{"MacHFS", kTextEncodingMacHFS},
-	{"UnicodeDefault", kTextEncodingUnicodeDefault},
-	{"UnicodeV1_1", kTextEncodingUnicodeV1_1},
-	{"ISO10646_1993", kTextEncodingISO10646_1993},
-	{"UnicodeV2_0", kTextEncodingUnicodeV2_0},
-	{"UnicodeV2_1", kTextEncodingUnicodeV2_1},
-	{"UnicodeV3_0", kTextEncodingUnicodeV3_0},
-	{"UnicodeV3_1", kTextEncodingUnicodeV3_1},
-	{"UnicodeV3_2", kTextEncodingUnicodeV3_2},
-	{"ISOLatin1", kTextEncodingISOLatin1},
-	{"ISOLatin2", kTextEncodingISOLatin2},
-	{"ISOLatin3", kTextEncodingISOLatin3},
-	{"ISOLatin4", kTextEncodingISOLatin4},
-	{"ISOLatinCyrillic", kTextEncodingISOLatinCyrillic},
-	{"ISOLatinArabic", kTextEncodingISOLatinArabic},
-	{"ISOLatinGreek", kTextEncodingISOLatinGreek},
-	{"ISOLatinHebrew", kTextEncodingISOLatinHebrew},
-	{"ISOLatin5", kTextEncodingISOLatin5},
-	{"ISOLatin6", kTextEncodingISOLatin6},
-	{"ISOLatin7", kTextEncodingISOLatin7},
-	{"ISOLatin8", kTextEncodingISOLatin8},
-	{"ISOLatin9", kTextEncodingISOLatin9},
-	{"DOSLatinUS", kTextEncodingDOSLatinUS},
-	{"DOSGreek", kTextEncodingDOSGreek},
-	{"DOSBalticRim", kTextEncodingDOSBalticRim},
-	{"DOSLatin1", kTextEncodingDOSLatin1},
-	{"DOSGreek1", kTextEncodingDOSGreek1},
-	{"DOSLatin2", kTextEncodingDOSLatin2},
-	{"DOSCyrillic", kTextEncodingDOSCyrillic},
-	{"DOSTurkish", kTextEncodingDOSTurkish},
-	{"DOSPortuguese", kTextEncodingDOSPortuguese},
-	{"DOSIcelandic", kTextEncodingDOSIcelandic},
-	{"DOSHebrew", kTextEncodingDOSHebrew},
-	{"DOSCanadianFrench", kTextEncodingDOSCanadianFrench},
-	{"DOSArabic", kTextEncodingDOSArabic},
-	{"DOSNordic", kTextEncodingDOSNordic},
-	{"DOSRussian", kTextEncodingDOSRussian},
-	{"DOSGreek2", kTextEncodingDOSGreek2},
-	{"DOSThai", kTextEncodingDOSThai},
-	{"DOSJapanese", kTextEncodingDOSJapanese},
-	{"DOSChineseSimplif", kTextEncodingDOSChineseSimplif},
-	{"DOSKorean", kTextEncodingDOSKorean},
-	{"DOSChineseTrad", kTextEncodingDOSChineseTrad},
-	{"WindowsLatin1", kTextEncodingWindowsLatin1},
-	{"WindowsANSI", kTextEncodingWindowsANSI},
-	{"WindowsLatin2", kTextEncodingWindowsLatin2},
-	{"WindowsCyrillic", kTextEncodingWindowsCyrillic},
-	{"WindowsGreek", kTextEncodingWindowsGreek},
-	{"WindowsLatin5", kTextEncodingWindowsLatin5},
-	{"WindowsHebrew", kTextEncodingWindowsHebrew},
-	{"WindowsArabic", kTextEncodingWindowsArabic},
-	{"WindowsBalticRim", kTextEncodingWindowsBalticRim},
-	{"WindowsVietnamese", kTextEncodingWindowsVietnamese},
-	{"WindowsKoreanJohab", kTextEncodingWindowsKoreanJohab},
-	{"US_ASCII", kTextEncodingUS_ASCII},
-	{"JIS_X0201_76", kTextEncodingJIS_X0201_76},
-	{"JIS_X0208_83", kTextEncodingJIS_X0208_83},
-	{"JIS_X0208_90", kTextEncodingJIS_X0208_90},
-	{"JIS_X0212_90", kTextEncodingJIS_X0212_90},
-	{"JIS_C6226_78", kTextEncodingJIS_C6226_78},
-	{"ShiftJIS_X0213_00", kTextEncodingShiftJIS_X0213_00},
-	{"GB_2312_80", kTextEncodingGB_2312_80},
-	{"GBK_95", kTextEncodingGBK_95},
-	{"GB_18030_2000", kTextEncodingGB_18030_2000},
-	{"KSC_5601_87", kTextEncodingKSC_5601_87},
-	{"KSC_5601_92_Johab", kTextEncodingKSC_5601_92_Johab},
-	{"CNS_11643_92_P1", kTextEncodingCNS_11643_92_P1},
-	{"CNS_11643_92_P2", kTextEncodingCNS_11643_92_P2},
-	{"CNS_11643_92_P3", kTextEncodingCNS_11643_92_P3},
-	{"ISO_2022_JP", kTextEncodingISO_2022_JP},
-	{"ISO_2022_JP_2", kTextEncodingISO_2022_JP_2},
-	{"ISO_2022_JP_1", kTextEncodingISO_2022_JP_1},
-	{"ISO_2022_JP_3", kTextEncodingISO_2022_JP_3},
-	{"ISO_2022_CN", kTextEncodingISO_2022_CN},
-	{"ISO_2022_CN_EXT", kTextEncodingISO_2022_CN_EXT},
-	{"ISO_2022_KR", kTextEncodingISO_2022_KR},
-	{"EUC_JP", kTextEncodingEUC_JP},
-	{"EUC_CN", kTextEncodingEUC_CN},
-	{"EUC_TW", kTextEncodingEUC_TW},
-	{"EUC_KR", kTextEncodingEUC_KR},
-	{"ShiftJIS", kTextEncodingShiftJIS},
-	{"KOI8_R", kTextEncodingKOI8_R},
-	{"Big5", kTextEncodingBig5},
-	{"MacRomanLatin1", kTextEncodingMacRomanLatin1},
-	{"HZ_GB_2312", kTextEncodingHZ_GB_2312},
-	{"Big5_HKSCS_1999", kTextEncodingBig5_HKSCS_1999},
-	{"NextStepLatin", kTextEncodingNextStepLatin},
-	{"EBCDIC_US", kTextEncodingEBCDIC_US},
-	{"EBCDIC_CP037", kTextEncodingEBCDIC_CP037},
-	{"MultiRun", kTextEncodingMultiRun},
-
-	/* Terminator */
-	{NULL, -1},
-    };
-    int i;
-
-    i = 0;
-    for (i = 0; encodetable[i].name != NULL; ++i)
-    {
-	if (STRICMP(encodename, encodetable[i].name) == 0)
-	    break;
-    }
-    return encodetable[i].encode;
-}
-
-/*
- * iconv interfaces
- */
-
-    iconv_t
-iconv_open(const char* tocode, const char* fromcode)
-{
-    TextEncoding toEnc, fromEnc;
-    iconv_t cd = NULL;
-    OSStatus st;
-
-    /* Verify to/from encoding name */
-    toEnc = get_textencoding(tocode);
-    fromEnc = get_textencoding(fromcode);
-    if (toEnc < 0 || fromEnc < 0)
-	goto ICONV_OPEN_ERR;
-
-    /* Allocate memory to object */
-    cd = (iconv_t)alloc(sizeof(struct _iconv_t));
-    if (!cd)
-	goto ICONV_OPEN_ERR;
-    vim_memset(cd, 0, sizeof(struct _iconv_t));
-
-    /* Create converter */
-    if (fromEnc != toEnc)
-    {
-	TRACE("*** fromEnc=%d toEnc=%d\n", (int)fromEnc, (int)toEnc);
-	st = TECCreateConverter(&cd->tec, fromEnc, toEnc);
-	if (st != 0)
-	{
-	    TRACE("*** TECCreateConverter()=%d\n", (int)st);
-	    goto ICONV_OPEN_ERR;
-	}
-	/* Create reverse converter */
-	st = TECCreateConverter(&cd->tecReverse, toEnc, fromEnc);
-	if (st != 0)
-	{
-	    TRACE("*** TECCreateConverter()=%d (reverse)\n", (int)st);
-	    goto ICONV_OPEN_ERR;
-	}
-	/* Create Sniffer */
-	st = TECCreateSniffer(&cd->sniff, &fromEnc, 1);
-	if (st != 0)
-	{
-	    TRACE("*** TECCreateSniffer()=%d\n", (int)st);
-	    goto ICONV_OPEN_ERR;
-	}
-    }
-
-    cd->from = fromEnc;
-    cd->to = toEnc;
-    last_errno = 0;
-    return cd;
-
-ICONV_OPEN_ERR:
-    if (cd)
-	iconv_close(cd);
-    last_errno = EINVAL;
-    return (iconv_t)-1;
-}
-
-/*
- * Used when there are same value in 'from encoding' and 'to encoding'.
- * TEC doesn't support conversion between same encodings, and
- * TECCreateConverter() failed.
- */
-    static size_t
-null_conv(iconv_t cd, const char **inbuf, size_t *inbytesleft,
-	char **outbuf, size_t *outbytesleft)
-{
-    const char* buf_in = inbuf && *inbuf ? *inbuf : NULL;
-    char* buf_out = outbuf && *outbuf ? *outbuf : NULL;
-
-    if (buf_in)
-    {
-	int in_len = inbytesleft ? *inbytesleft : 0;
-	int out_len = outbytesleft ? *outbytesleft : 0;
-
-	if (!buf_out || out_len <= 0)
-	{
-	    last_errno = E2BIG;
-	    return -1;
-	}
-	else if (in_len > 0)
-	{
-	    int len = in_len < out_len ? in_len : out_len;
-
-	    memcpy (buf_out, buf_in, len);
-	    *inbuf += len;
-	    *outbuf += len;
-	    *inbytesleft -= len;
-	    *outbytesleft -= len;
-	    if (*outbytesleft <= 0)
-	    {
-		last_errno = E2BIG;
-		return -1;
-	    }
-	}
-    }
-    last_errno = 0;
-    return 0;
-}
-
-    size_t
-iconv(iconv_t cd, const char **inbuf, size_t *inbytesleft,
-	char **outbuf, size_t *outbytesleft)
-{
-    ConstTextPtr    buf_in;
-    TextPtr	    buf_out;
-    ByteCount	    out_len, out_true;
-    ByteCount	    in_len, in_true;
-    OSStatus	    st;
-
-    if (!cd)
-    {
-	last_errno = ENOENT; /* TODO: Another error code should be set */
-	return -1;
-    }
-    if (cd->from == cd->to)
-	return null_conv(cd, inbuf, inbytesleft, outbuf, outbytesleft) ;
-
-    buf_in = (TextPtr) inbuf ;
-    buf_out = (TextPtr) outbuf ;
-    out_len = out_true = -1;
-    in_len = in_true = -1;
-
-    if (buf_in && buf_out)
-    {
-	ItemCount error, feature;
-
-	/* Normal convert mode */
-	if (!inbytesleft || !outbytesleft)
-	{
-	    last_errno = EFAULT;
-	    return -1;
-	}
-	in_len = *inbytesleft;
-	out_len = *outbytesleft;
-
-	/* Check stream is form in expected encoding or not */
-	st = TECSniffTextEncoding(cd->sniff, (TextPtr)buf_in, in_len,
-		&cd->from, 1, &error, 1, &feature, 1);
-	TRACE("TECSniffTextEncoding()=%d error=%d feature=%d\n",
-		(int)st, (int)error, (int)feature);
-	if ((error != 0 || feature == 0)
-		&& !(error == 0xffffffff && feature == 0xffffffff))
-	    /* Not expected encoding */
-	    st = kTECUnmappableElementErr;
-	else
-	{
-	    /* Do convert */
-	    st = TECConvertText(cd->tec,
-		    buf_in, in_len, &in_true,
-		    buf_out, out_len, &out_true);
-	    /* Verify converted text.  Compare original text with reverse
-	     * converted text.  If not match, there is some problem on
-	     * converting. */
-	    if (st == 0 && in_true > 0)
-	    {
-		ByteCount rev_in, rev_out;
-		TextPtr buf_rev = (TextPtr)alloc(in_true);
-
-		if (buf_rev)
-		{
-		    st = TECConvertText(cd->tecReverse,
-			    buf_out, out_true, &rev_in,
-			    buf_rev, in_true, &rev_out);
-		    if (st != 0 || rev_in != out_true || rev_out != in_true
-			    || memcmp(buf_rev, buf_in, rev_out) != 0)
-		    {
-#ifdef ICONVOSX_DEBUG
-			fprintf(stderr, "  reverse conversion failed.\n");
-#endif
-			st = kTECUnmappableElementErr;
-		    }
-		    vim_free(buf_rev);
-		}
-		else
-		    st = kTECUnmappableElementErr;
-	    }
-	}
-    }
-    else if (!buf_in && buf_out)
-    {
-	/* Flush all buffered strings to buffer, and reset status */
-	if (!outbytesleft)
-	{
-	    last_errno = EFAULT;
-	    return -1;
-	}
-	out_len = *outbytesleft;
-	st = TECFlushText(cd->tec,
-		buf_out, out_len, &out_true);
-    }
-    else if (!buf_in && !buf_out)
-    {
-	/* Reset cd's status and cancel buffered strings */
-	unsigned char tmp_out[256];
-
-	buf_out = tmp_out;
-	out_len = sizeof(tmp_out);
-	st = TECFlushText(cd->tec,
-		buf_out, out_len, &out_true);
-    }
-    else
-    {
-	last_errno = EFAULT;
-	return -1;
-    }
-    TRACE("st=%d, buf_in=%p, in_len=%d, in_true=%d\n"
-	    "  buf_out=%p, out_len=%d, out_true=%d\n", (int)st,
-	    buf_in, (int)in_len, (int)in_true,
-	    buf_out, (int)out_len, (int)out_true);
-
-    switch (st)
-    {
-	case 0:
-	    /* No error */
-	    if (inbytesleft)
-		*inbytesleft -= in_true;
-	    if (outbytesleft)
-		*outbytesleft -= out_true;
-	    if (inbuf && *inbuf)
-		*inbuf += in_true;
-	    if (outbuf && *outbuf)
-		*outbuf += out_true;
-	    last_errno = 0;
-	    return 0; /* No error */
-	case kTECUnmappableElementErr:
-	    last_errno = EILSEQ;
-	case kTECIncompleteElementErr:
-	    last_errno = EINVAL;
-	case kTECOutputBufferFullStatus:
-	    last_errno = E2BIG;
-	    return -1;
-	default:
-	    TRACE("iconv(%p, %p, %p, %p, %p) failed. (%d)\n",
-		    cd, inbuf, inbytesleft, outbuf, outbytesleft, (int)st);
-	    last_errno = EFAULT;
-	    return -1;
-    }
-}
-
-    int
-iconv_close(iconv_t cd)
-{
-    if (cd)
-    {
-	/* Free all elements of iconv_t */
-	if (cd->tec)
-	    TECDisposeConverter(cd->tec);
-	if (cd->tecReverse)
-	    TECDisposeConverter(cd->tecReverse);
-	if (cd->sniff)
-	    TECDisposeSniffer(cd->sniff);
-	vim_free(cd);
-	last_errno = 0;
-	return 0;
-    }
-    else
-    {
-	last_errno = EINVAL;
-	return -1;
-    }
-}
-
-    int *
-iconv_errno()
-{
-    return &last_errno;
-}
-#endif /* MACOS_X_ICONVEMU */
-
 #ifdef FEAT_CLIPBOARD
 
+/* Used to identify clipboard data copied from Vim. */
+
+NSString *VimPboardType = @"VimPboardType";
+
     void
 clip_mch_lose_selection(VimClipboard *cbd)
 {
