diff --git a/doc/src/sgml/charset.sgml b/doc/src/sgml/charset.sgml
index aee43acfd113afff556ff127548b449151f993e4..c25f72a73ebcdf4315f9db1e03692e352a21a5b4 100644
--- a/doc/src/sgml/charset.sgml
+++ b/doc/src/sgml/charset.sgml
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/charset.sgml,v 2.75 2005/11/04 23:13:59 petere Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/charset.sgml,v 2.76 2006/02/18 16:15:21 petere Exp $ -->
 
 <chapter id="charset">
  <title>Localization</>
@@ -571,6 +571,27 @@ initdb --locale=sv_SE
          <entry>1</entry>
          <entry></entry>
         </row>
+	<row>
+	 <entry><literal>WIN1253</literal></entry>
+	 <entry>Windows CP1253</entry>
+	 <entry>Greek</entry>
+	 <entry>1</entry>
+         <entry></entry>
+        </row>
+	<row>
+	 <entry><literal>WIN1254</literal></entry>
+	 <entry>Windows CP1254</entry>
+	 <entry>Turkish</entry>
+	 <entry>1</entry>
+	 <entry></entry>
+	</row>
+	<row>
+	 <entry><literal>WIN1255</literal></entry>
+	 <entry>Windows CP1255</entry>
+	 <entry>Hebrew</entry>
+	 <entry>1</entry>
+	 <entry></entry>
+	</row>
         <row>
          <entry><literal>WIN1256</literal></entry>
          <entry>Windows CP1256</entry>
@@ -578,6 +599,13 @@ initdb --locale=sv_SE
          <entry>1</entry>
          <entry></entry>
         </row>
+	<row>
+	 <entry><literal>WIN1257</literal></entry>
+	 <entry>Windows CP1257</entry>
+	 <entry>Baltic</entry>
+	 <entry>1</entry>
+	 <entry></entry>
+	</row>
         <row>
          <entry><literal>WIN1258</literal></entry>
          <entry>Windows CP1258</entry>
@@ -952,12 +980,36 @@ $ <userinput>psql -l</userinput>
           <literal>UTF8</literal>
          </entry>
         </row>
+        <row>
+         <entry><literal>WIN1253</literal></entry>
+         <entry><emphasis>WIN1253</emphasis>,
+          <literal>UTF8</literal>
+         </entry>
+        </row>
+        <row>
+         <entry><literal>WIN1254</literal></entry>
+         <entry><emphasis>WIN1254</emphasis>,
+          <literal>UTF8</literal>
+         </entry>
+        </row>
+        <row>
+         <entry><literal>WIN1255</literal></entry>
+         <entry><emphasis>WIN1255</emphasis>,
+          <literal>UTF8</literal>
+         </entry>
+        </row>
         <row>
          <entry><literal>WIN1256</literal></entry>
          <entry><emphasis>WIN1256</emphasis>,
          <literal>UTF8</literal>
          </entry>
         </row>
+        <row>
+         <entry><literal>WIN1257</literal></entry>
+         <entry><emphasis>WIN1257</emphasis>,
+          <literal>UTF8</literal>
+         </entry>
+        </row>
         <row>
          <entry><literal>WIN1258</literal></entry>
          <entry><emphasis>WIN1258</emphasis>,
diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml
index 8ab070c7c6032369ded53b184347d29a1eb7e43e..8f0975af703b5d8ee27a87de7dd10d6827d1192f 100644
--- a/doc/src/sgml/func.sgml
+++ b/doc/src/sgml/func.sgml
@@ -1,5 +1,5 @@
 <!--
-$PostgreSQL: pgsql/doc/src/sgml/func.sgml,v 1.306 2006/02/12 04:44:15 momjian Exp $
+$PostgreSQL: pgsql/doc/src/sgml/func.sgml,v 1.307 2006/02/18 16:15:21 petere Exp $
 PostgreSQL documentation
 -->
 
@@ -2172,12 +2172,36 @@ PostgreSQL documentation
        <entry><literal>WIN1252</literal></entry>
       </row>
 
+      <row>
+       <entry><literal>utf8_to_windows_1253</literal></entry>
+       <entry><literal>UTF8</literal></entry>
+       <entry><literal>WIN1253</literal></entry>
+      </row>
+
+      <row>
+       <entry><literal>utf8_to_windows_1254</literal></entry>
+       <entry><literal>UTF8</literal></entry>
+       <entry><literal>WIN1254</literal></entry>
+      </row>
+
+      <row>
+       <entry><literal>utf8_to_windows_1255</literal></entry>
+       <entry><literal>UTF8</literal></entry>
+       <entry><literal>WIN1255</literal></entry>
+      </row>
+
       <row>
        <entry><literal>utf8_to_windows_1256</literal></entry>
        <entry><literal>UTF8</literal></entry>
        <entry><literal>WIN1256</literal></entry>
       </row>
 
+      <row>
+       <entry><literal>utf8_to_windows_1257</literal></entry>
+       <entry><literal>UTF8</literal></entry>
+       <entry><literal>WIN1257</literal></entry>
+      </row>
+
       <row>
        <entry><literal>utf8_to_windows_866</literal></entry>
        <entry><literal>UTF8</literal></entry>
diff --git a/src/backend/utils/mb/README b/src/backend/utils/mb/README
index 8ee732ca048a71bb11c73dbb4a56f994e2bd9a8b..d106b3120bcc9cfa343e7910b6559ca775d1b6a9 100644
--- a/src/backend/utils/mb/README
+++ b/src/backend/utils/mb/README
@@ -1,15 +1,11 @@
-common.c:	public functions for both the backend and the frontend.
-		requires conv.c and wchar.c
+encnames.c:	public functions for both the backend and the frontend.
 conv.c:		static functions and a public table for code conversion
 wchar.c:	mostly static functions and a public table for mb string and
 		multibyte conversion
-mbutilc.c:	public functions for the backend only.
+mbutils.c:	public functions for the backend only.
 		requires conv.c and wchar.c
 wstrcmp.c:	strcmp for mb
 wstrncmp.c:	strncmp for mb
-alt.c:		a tool to generate KOI8 <--> CP866 conversion table
+win866.c:	a tool to generate KOI8 <--> CP866 conversion table
 iso.c:		a tool to generate KOI8 <--> ISO8859-5 conversion table
-win.c:		a tool to generate KOI8 <--> CP1251 conversion table
-big5.c:		conversion between BIG5 and Mule Internal Code(CNS 116643-1992
-		plane 1 and plane 2).
-utftest.c:	test driver for utf2wchar()
+win1251.c:	a tool to generate KOI8 <--> CP1251 conversion table
diff --git a/src/backend/utils/mb/Unicode/Makefile b/src/backend/utils/mb/Unicode/Makefile
index ccf5ddedbdfb836354fa6f84201b2ec0a0b04891..b98b00d1f99a90acac1452f7bf615c5ad42393c0 100644
--- a/src/backend/utils/mb/Unicode/Makefile
+++ b/src/backend/utils/mb/Unicode/Makefile
@@ -4,7 +4,7 @@
 #
 # Copyright (c) 2001-2005, PostgreSQL Global Development Group
 #
-# $PostgreSQL: pgsql/src/backend/utils/mb/Unicode/Makefile,v 1.9 2005/03/07 04:30:52 momjian Exp $
+# $PostgreSQL: pgsql/src/backend/utils/mb/Unicode/Makefile,v 1.10 2006/02/18 16:15:22 petere Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -12,36 +12,64 @@ subdir = src/backend/utils/mb/Unicode
 top_builddir = ../../../../..
 include $(top_builddir)/src/Makefile.global
 
-ISO8859MAPS=iso8859_2_to_utf8.map iso8859_3_to_utf8.map \
-	iso8859_4_to_utf8.map iso8859_5_to_utf8.map \
-	utf8_to_iso8859_2.map utf8_to_iso8859_3.map \
-	utf8_to_iso8859_4.map utf8_to_iso8859_5.map 
-
-
-CYRILLICMAPS=koi8r_to_utf8.map win1251_to_utf8.map win866_to_utf8.map\
-             utf8_to_koi8r.map  utf8_to_win1251.map utf8_to_win866.map
-
-MAPS= $(ISO8859MAPS) $(CYRILLICMAPS)\
-	big5_to_utf8.map euc_cn_to_utf8.map euc_jp_to_utf8.map \
-	euc_kr_to_utf8.map euc_tw_to_utf8.map sjis_to_utf8.map \
-	utf8_to_big5.map utf8_to_euc_cn.map utf8_to_euc_jp.map \
-	utf8_to_euc_kr.map utf8_to_euc_tw.map utf8_to_iso8859_2.map \
-	utf8_to_sjis.map gb18030_to_utf8.map utf8_to_gb18030.map
-
-ISO8859TEXTS= 8859-2.TXT 8859-3.TXT 8859-4.TXT 8859-5.TXT
-CYRILLICTEXTS=cp866.txt cp1251.txt koi8-r.txt
-
-TEXTS=$(ISO8859TEXTS) $(CYRILLICTEXTS) \
-	BIG5.TXT CNS11643.TXT GB2312.TXT \
-	JIS0201.TXT JIS0208.TXT JIS0212.TXT \
-	OLD5601.TXT SHIFTJIS.TXT ISO10646-GB18030.TXT
+ISO8859MAPS = iso8859_2_to_utf8.map utf8_to_iso8859_2.map \
+	iso8859_3_to_utf8.map utf8_to_iso8859_3.map \
+	iso8859_4_to_utf8.map utf8_to_iso8859_4.map \
+	iso8859_5_to_utf8.map utf8_to_iso8859_5.map \
+	iso8859_6_to_utf8.map utf8_to_iso8859_6.map \
+	iso8859_7_to_utf8.map utf8_to_iso8859_7.map \
+	iso8859_8_to_utf8.map utf8_to_iso8859_8.map \
+	iso8859_9_to_utf8.map utf8_to_iso8859_9.map \
+	iso8859_10_to_utf8.map utf8_to_iso8859_10.map \
+	iso8859_13_to_utf8.map utf8_to_iso8859_13.map \
+	iso8859_14_to_utf8.map utf8_to_iso8859_14.map \
+	iso8859_15_to_utf8.map utf8_to_iso8859_15.map \
+	iso8859_16_to_utf8.map utf8_to_iso8859_16.map
+
+WINMAPS = win866_to_utf8.map utf8_to_win866.map \
+	win874_to_utf8.map utf8_to_win874.map \
+	win1250_to_utf8.map utf8_to_win1250.map \
+	win1251_to_utf8.map utf8_to_win1251.map \
+	win1252_to_utf8.map utf8_to_win1252.map \
+	win1253_to_utf8.map utf8_to_win1253.map \
+	win1254_to_utf8.map utf8_to_win1254.map \
+	win1255_to_utf8.map utf8_to_win1255.map \
+	win1256_to_utf8.map utf8_to_win1256.map \
+	win1257_to_utf8.map utf8_to_win1257.map \
+	win1258_to_utf8.map utf8_to_win1258.map
+
+GENERICMAPS = $(ISO8859MAPS) $(WINMAPS) \
+	big5_to_utf8.map utf8_to_big5.map \
+	johab_to_utf8.map utf8_to_johab.map \
+	uhc_to_utf8.map utf8_to_uhc.map \
+	gbk_to_utf8.map utf8_to_gbk.map \
+	koi8r_to_utf8.map utf8_to_koi8r.map
+
+SPECIALMAPS = euc_cn_to_utf8.map utf8_to_euc_cn.map \
+	euc_jp_to_utf8.map utf8_to_euc_jp.map \
+	euc_kr_to_utf8.map utf8_to_euc_kr.map \
+	euc_tw_to_utf8.map utf8_to_euc_tw.map \
+	sjis_to_utf8.map utf8_to_sjis.map \
+	gb18030_to_utf8.map utf8_to_gb18030.map
+
+MAPS = $(GENERICMAPS) $(SPECIALMAPS)
+
+ISO8859TEXTS = 8859-2.TXT 8859-3.TXT 8859-4.TXT 8859-5.TXT \
+	8859-6.TXT 8859-7.TXT 8859-8.TXT 8859-9.TXT \
+	8859-10.TXT 8859-13.TXT 8859-14.TXT 8859-15.TXT \
+	8859-16.TXT
+
+WINTEXTS = CP866.TXT CP874.TXT CP1250.TXT CP1251.TXT \
+	CP1252.TXT CP1253.TXT CP1254.TXT CP1255.TXT \
+	CP1256.TXT CP1257.TXT CP1258.TXT
+
+GENERICTEXTS = $(ISO8859TEXTS) $(WINTEXTS) \
+	KOI8-R.TXT CP936.TXT CP949.TXT JOHAB.TXT BIG5.TXT
 
 all: $(MAPS)
 
-$(ISO8859MAPS) : $(ISO8859TEXTS)
-	./UCS_to_8859.pl
-$(CYRILLICMAPS) : $(CYRILLICTEXTS)
-	./UCS_to_cyrillic.pl
+$(GENERICMAPS) : $(GENERICTEXTS)
+	./UCS_to_most.pl
 
 euc_jp_to_utf8.map utf8_to_euc_jp.map : JIS0201.TXT JIS0208.TXT JIS0212.TXT
 	./UCS_to_EUC_JP.pl
@@ -49,18 +77,15 @@ euc_jp_to_utf8.map utf8_to_euc_jp.map : JIS0201.TXT JIS0208.TXT JIS0212.TXT
 euc_cn_to_utf8.map utf8_to_euc_cn.map : GB2312.TXT
 	./UCS_to_EUC_CN.pl
 
-euc_kr_to_utf8.map utf8_to_euc_kr.map : OLD5601.TXT
+euc_kr_to_utf8.map utf8_to_euc_kr.map : KSX1001.TXT
 	./UCS_to_EUC_KR.pl
 
 euc_tw_to_utf8.map utf8_to_euc_tw.map : CNS11643.TXT
 	./UCS_to_EUC_TW.pl
 
-sjis_to_utf8.map utf8_to_sjis.map : SHIFTJIS.TXT
+sjis_to_utf8.map utf8_to_sjis.map : CP932.TXT
 	./UCS_to_SJIS.pl
 
-big5_to_utf8.map utf8_to_big5.map : BIG5.TXT
-	./UCS_to_BIG5.pl
-
 gb18030_to_utf8.map  utf8_to_gb18030.map : ISO10646-GB18030.TXT
 	./UCS_to_GB18030.pl
 clean:
diff --git a/src/backend/utils/mb/Unicode/UCS_to_8859.pl b/src/backend/utils/mb/Unicode/UCS_to_8859.pl
deleted file mode 100755
index 131b97129d5c1922201a912e9ea6ae34cba63be2..0000000000000000000000000000000000000000
--- a/src/backend/utils/mb/Unicode/UCS_to_8859.pl
+++ /dev/null
@@ -1,110 +0,0 @@
-#! /usr/bin/perl
-#
-# Copyright (c) 2001-2005, PostgreSQL Global Development Group
-#
-# $PostgreSQL: pgsql/src/backend/utils/mb/Unicode/UCS_to_8859.pl,v 1.8 2005/03/07 04:30:52 momjian Exp $
-#
-# Generate UTF-8 <--> ISO8859 code conversion tables from
-# map files provided by Unicode organization.
-# Unfortunately it is prohibited by the organization
-# to distribute the map files. So if you try to use this script,
-# you have to obtain "8859-[2-16].TXT" from the organization's ftp site.
-# We assume the file include three tab-separated columns:
-#		 ISO/IEC 8859 code in hex
-#		 UCS-2 code in hex
-#		 # and Unicode name (not used in this script)
-
-require "ucs2utf.pl";
-
-@charsets = (2,3,4,5,6,7,8,9,10,13,14,15,16);
-foreach $charset (@charsets) {
-
-#
-# first, generate UTF8->ISO8859 table
-#
-    $in_file = "8859-${charset}.TXT";
-
-    open( FILE, $in_file ) || die( "cannot open $in_file" );
-
-	reset 'array';
-
-    while( <FILE> ){
-		chop;
-		if( /^#/ ){
-			next;
-		}
-		( $c, $u, $rest ) = split;
-		$ucs = hex($u);
-		$code = hex($c);
-		if( $code >= 0x80){
-			$utf = &ucs2utf($ucs);
-			if( $array{ $utf } ne "" ){
-				printf STDERR "Warning: duplicate UTF8: %04x\n",$ucs;
-				next;
-			}
-			$count++;
-			$array{ $utf } = $code;
-		}
-	}
-    close( FILE );
-
-	$file = "utf8_to_iso8859_${charset}.map";
-    open( FILE, "> $file" ) || die( "cannot open $file" );
-	print FILE "static pg_utf_to_local ULmapISO8859_${charset}[ $count ] = {\n";
-
-	for $index ( sort {$a <=> $b} keys( %array ) ){
-		$code = $array{ $index };
-		$count--;
-		if( $count == 0 ){
-			printf FILE "  {0x%04x, 0x%04x}\n", $index, $code;
-		} else {
-			printf FILE "  {0x%04x, 0x%04x},\n", $index, $code;
-		}
-	}
-
-	print FILE "};\n";
-	close(FILE);
-
-#
-# then generate ISO885->UTF8 table
-#
-    open( FILE, $in_file ) || die( "cannot open $in_file" );
-
-	reset 'array';
-
-    while( <FILE> ){
-		chop;
-		if( /^#/ ){
-			next;
-		}
-		( $c, $u, $rest ) = split;
-		$ucs = hex($u);
-		$code = hex($c);
-		if($code >= 0x80){
-			$utf = &ucs2utf($ucs);
-			if( $array{ $utf } ne "" ){
-				printf STDERR "Warning: duplicate UTF8: %04x\n",$ucs;
-				next;
-			}
-			$count++;
-			$array{ $code } = $utf;
-		}
-	}
-    close( FILE );
-
-	$file = "iso8859_${charset}_to_utf8.map";
-    open( FILE, "> $file" ) || die( "cannot open $file" );
-	print FILE "static pg_local_to_utf LUmapISO8859_${charset}[ $count ] = {\n";
-	for $index ( sort {$a <=> $b} keys( %array ) ){
-		$utf = $array{ $index };
-		$count--;
-		if( $count == 0 ){
-			printf FILE "  {0x%04x, 0x%04x}\n", $index, $utf;
-		} else {
-			printf FILE "  {0x%04x, 0x%04x},\n", $index, $utf;
-		}
-	}
-
-	print FILE "};\n";
-	close(FILE);
-}
diff --git a/src/backend/utils/mb/Unicode/UCS_to_BIG5.pl b/src/backend/utils/mb/Unicode/UCS_to_BIG5.pl
deleted file mode 100755
index 72e9f2c7a6e5e8ea4386bebfea4629ec4f7b1795..0000000000000000000000000000000000000000
--- a/src/backend/utils/mb/Unicode/UCS_to_BIG5.pl
+++ /dev/null
@@ -1,111 +0,0 @@
-#! /usr/bin/perl
-#
-# Copyright (c) 2001-2005, PostgreSQL Global Development Group
-#
-# $PostgreSQL: pgsql/src/backend/utils/mb/Unicode/UCS_to_BIG5.pl,v 1.7 2005/03/07 04:30:52 momjian Exp $
-#
-# Generate UTF-8 <--> BIG5 code conversion tables from
-# map files provided by Unicode organization.
-# Unfortunately it is prohibited by the organization
-# to distribute the map files. So if you try to use this script,
-# you have to obtain OLD5601.TXT from 
-# the organization's ftp site.
-#
-# OLD5601.TXT format:
-#		 KSC5601 code in hex
-#		 UCS-2 code in hex
-#		 # and Unicode name (not used in this script)
-
-require "ucs2utf.pl";
-
-# first generate UTF-8 --> BIG5 table
-
-$in_file = "BIG5.TXT";
-
-open( FILE, $in_file ) || die( "cannot open $in_file" );
-
-while( <FILE> ){
-	chop;
-	if( /^#/ ){
-		next;
-	}
-	( $c, $u, $rest ) = split;
-	$ucs = hex($u);
-	$code = hex($c);
-	if( $code >= 0x80 && $ucs >= 0x0080 ){
-		$utf = &ucs2utf($ucs);
-		if( $array{ $utf } ne "" ){
-			printf STDERR "Warning: duplicate UTF8: %04x\n",$ucs;
-			next;
-		}
-		$count++;
-
-		$array{ $utf } = $code;
-	}
-}
-close( FILE );
-
-#
-# first, generate UTF8 --> BIG5 table
-#
-
-$file = "utf8_to_big5.map";
-open( FILE, "> $file" ) || die( "cannot open $file" );
-print FILE "static pg_utf_to_local ULmapBIG5[ $count ] = {\n";
-
-for $index ( sort {$a <=> $b} keys( %array ) ){
-	$code = $array{ $index };
-	$count--;
-	if( $count == 0 ){
-		printf FILE "  {0x%04x, 0x%04x}\n", $index, $code;
-	} else {
-		printf FILE "  {0x%04x, 0x%04x},\n", $index, $code;
-	}
-}
-
-print FILE "};\n";
-close(FILE);
-
-#
-# then generate EUC_JP --> UTF8 table
-#
-reset 'array';
-
-open( FILE, $in_file ) || die( "cannot open $in_file" );
-
-while( <FILE> ){
-	chop;
-	if( /^#/ ){
-		next;
-	}
-	( $c, $u, $rest ) = split;
-	$ucs = hex($u);
-	$code = hex($c);
-	if( $code >= 0x80 && $ucs >= 0x0080 ){
-		$utf = &ucs2utf($ucs);
-		if( $array{ $code } ne "" ){
-			printf STDERR "Warning: duplicate code: %04x\n",$ucs;
-			next;
-		}
-		$count++;
-
-		$array{ $code } = $utf;
-	}
-}
-close( FILE );
-
-$file = "big5_to_utf8.map";
-open( FILE, "> $file" ) || die( "cannot open $file" );
-print FILE "static pg_local_to_utf LUmapBIG5[ $count ] = {\n";
-for $index ( sort {$a <=> $b} keys( %array ) ){
-	$utf = $array{ $index };
-	$count--;
-	if( $count == 0 ){
-		printf FILE "  {0x%04x, 0x%04x}\n", $index, $utf;
-	} else {
-		printf FILE "  {0x%04x, 0x%04x},\n", $index, $utf;
-	}
-}
-
-print FILE "};\n";
-close(FILE);
diff --git a/src/backend/utils/mb/Unicode/UCS_to_GBK.pl b/src/backend/utils/mb/Unicode/UCS_to_GBK.pl
deleted file mode 100644
index b8bc7eaaf420a77228440d5b2bfaf1702f6cf785..0000000000000000000000000000000000000000
--- a/src/backend/utils/mb/Unicode/UCS_to_GBK.pl
+++ /dev/null
@@ -1,112 +0,0 @@
-#! /usr/bin/perl
-#
-# Copyright (c) 2001-2005, PostgreSQL Global Development Group
-#
-# $PostgreSQL: pgsql/src/backend/utils/mb/Unicode/UCS_to_GBK.pl,v 1.6 2005/03/07 04:30:52 momjian Exp $
-#
-#
-# Generate UTF-8 <--> GBK code conversion tables from
-# map files provided by Unicode organization.
-# Unfortunately it is prohibited by the organization
-# to distribute the map files. So if you try to use this script,
-# you have to obtain CP936.TXT from 
-# the organization's ftp site.
-#
-# CP936.TXT format:
-#		 GBK code in hex
-#		 UCS-2 code in hex
-#		 # and Unicode name (not used in this script)
-
-require "ucs2utf.pl";
-
-# first generate UTF-8 --> GBK table
-
-$in_file = "CP936.TXT";
-
-open( FILE, $in_file ) || die( "cannot open $in_file" );
-
-while( <FILE> ){
-	chop;
-	if( /^#/ ){
-		next;
-	}
-	( $c, $u, $rest ) = split;
-	$ucs = hex($u);
-	$code = hex($c);
-	if( $code >= 0x80 && $ucs >= 0x0080 ){
-		$utf = &ucs2utf($ucs);
-		if( $array{ $utf } ne "" ){
-			printf STDERR "Warning: duplicate UTF8: %04x\n",$ucs;
-			next;
-		}
-		$count++;
-
-		$array{ $utf } = $code;
-	}
-}
-close( FILE );
-
-#
-# first, generate UTF8 --> WIN949 table
-#
-
-$file = "utf8_to_gbk.map";
-open( FILE, "> $file" ) || die( "cannot open $file" );
-print FILE "static pg_utf_to_local ULmapGBK[ $count ] = {\n";
-
-for $index ( sort {$a <=> $b} keys( %array ) ){
-	$code = $array{ $index };
-	$count--;
-	if( $count == 0 ){
-		printf FILE "  {0x%04x, 0x%04x}\n", $index, $code;
-	} else {
-		printf FILE "  {0x%04x, 0x%04x},\n", $index, $code;
-	}
-}
-
-print FILE "};\n";
-close(FILE);
-
-#
-# then generate WIN936 --> UTF8 table
-#
-reset 'array';
-
-open( FILE, $in_file ) || die( "cannot open $in_file" );
-
-while( <FILE> ){
-	chop;
-	if( /^#/ ){
-		next;
-	}
-	( $c, $u, $rest ) = split;
-	$ucs = hex($u);
-	$code = hex($c);
-	if( $code >= 0x80 && $ucs >= 0x0080 ){
-		$utf = &ucs2utf($ucs);
-		if( $array{ $code } ne "" ){
-			printf STDERR "Warning: duplicate code: %04x\n",$ucs;
-			next;
-		}
-		$count++;
-
-		$array{ $code } = $utf;
-	}
-}
-close( FILE );
-
-$file = "gbk_to_utf8.map";
-open( FILE, "> $file" ) || die( "cannot open $file" );
-print FILE "static pg_local_to_utf LUmapGBK[ $count ] = {\n";
-for $index ( sort {$a <=> $b} keys( %array ) ){
-	$utf = $array{ $index };
-	$count--;
-	if( $count == 0 ){
-		printf FILE "  {0x%04x, 0x%04x}\n", $index, $utf;
-	} else {
-		printf FILE "  {0x%04x, 0x%04x},\n", $index, $utf;
-	}
-}
-
-print FILE "};\n";
-close(FILE);
diff --git a/src/backend/utils/mb/Unicode/UCS_to_JOHAB.pl b/src/backend/utils/mb/Unicode/UCS_to_JOHAB.pl
deleted file mode 100644
index 6dbc5174c090cd91f6639471e0d2fb6550d308b3..0000000000000000000000000000000000000000
--- a/src/backend/utils/mb/Unicode/UCS_to_JOHAB.pl
+++ /dev/null
@@ -1,111 +0,0 @@
-#! /usr/bin/perl
-#
-# Copyright (c) 2001-2005, PostgreSQL Global Development Group
-#
-# $PostgreSQL: pgsql/src/backend/utils/mb/Unicode/UCS_to_JOHAB.pl,v 1.6 2005/03/07 04:30:52 momjian Exp $
-#
-# Generate UTF-8 <--> JOHAB code conversion tables from
-# map files provided by Unicode organization.
-# Unfortunately it is prohibited by the organization
-# to distribute the map files. So if you try to use this script,
-# you have to obtain JOHAB.TXT from 
-# the organization's ftp site.
-#
-# JOHAB.TXT format:
-#		 JOHAB code in hex
-#		 UCS-2 code in hex
-#		 # and Unicode name (not used in this script)
-
-require "ucs2utf.pl";
-
-# first generate UTF-8 --> JOHAB table
-
-$in_file = "JOHAB.TXT";
-
-open( FILE, $in_file ) || die( "cannot open $in_file" );
-
-while( <FILE> ){
-	chop;
-	if( /^#/ ){
-		next;
-	}
-	( $c, $u, $rest ) = split;
-	$ucs = hex($u);
-	$code = hex($c);
-	if( $code >= 0x80 && $ucs >= 0x0080 ){
-		$utf = &ucs2utf($ucs);
-		if( $array{ $utf } ne "" ){
-			printf STDERR "Warning: duplicate UTF8: %04x\n",$ucs;
-			next;
-		}
-		$count++;
-
-		$array{ $utf } = $code;
-	}
-}
-close( FILE );
-
-#
-# first, generate UTF8 --> JOHAB table
-#
-
-$file = "utf8_to_johab.map";
-open( FILE, "> $file" ) || die( "cannot open $file" );
-print FILE "static pg_utf_to_local ULmapJOHAB[ $count ] = {\n";
-
-for $index ( sort {$a <=> $b} keys( %array ) ){
-	$code = $array{ $index };
-	$count--;
-	if( $count == 0 ){
-		printf FILE "  {0x%04x, 0x%04x}\n", $index, $code;
-	} else {
-		printf FILE "  {0x%04x, 0x%04x},\n", $index, $code;
-	}
-}
-
-print FILE "};\n";
-close(FILE);
-
-#
-# then generate JOHAB --> UTF8 table
-#
-reset 'array';
-
-open( FILE, $in_file ) || die( "cannot open $in_file" );
-
-while( <FILE> ){
-	chop;
-	if( /^#/ ){
-		next;
-	}
-	( $c, $u, $rest ) = split;
-	$ucs = hex($u);
-	$code = hex($c);
-	if( $code >= 0x80 && $ucs >= 0x0080 ){
-		$utf = &ucs2utf($ucs);
-		if( $array{ $code } ne "" ){
-			printf STDERR "Warning: duplicate code: %04x\n",$ucs;
-			next;
-		}
-		$count++;
-
-		$array{ $code } = $utf;
-	}
-}
-close( FILE );
-
-$file = "johab_to_utf8.map";
-open( FILE, "> $file" ) || die( "cannot open $file" );
-print FILE "static pg_local_to_utf LUmapJOHAB[ $count ] = {\n";
-for $index ( sort {$a <=> $b} keys( %array ) ){
-	$utf = $array{ $index };
-	$count--;
-	if( $count == 0 ){
-		printf FILE "  {0x%04x, 0x%04x}\n", $index, $utf;
-	} else {
-		printf FILE "  {0x%04x, 0x%04x},\n", $index, $utf;
-	}
-}
-
-print FILE "};\n";
-close(FILE);
diff --git a/src/backend/utils/mb/Unicode/UCS_to_UHC.pl b/src/backend/utils/mb/Unicode/UCS_to_UHC.pl
deleted file mode 100644
index de518c4676501b61e061a628c383028894a18cbf..0000000000000000000000000000000000000000
--- a/src/backend/utils/mb/Unicode/UCS_to_UHC.pl
+++ /dev/null
@@ -1,111 +0,0 @@
-#! /usr/bin/perl
-#
-# Copyright (c) 2001-2005, PostgreSQL Global Development Group
-#
-# $PostgreSQL: pgsql/src/backend/utils/mb/Unicode/UCS_to_UHC.pl,v 1.6 2005/03/07 04:30:52 momjian Exp $
-#
-# Generate UTF-8 <--> BIG5 code conversion tables from
-# map files provided by Unicode organization.
-# Unfortunately it is prohibited by the organization
-# to distribute the map files. So if you try to use this script,
-# you have to obtain OLD5601.TXT from 
-# the organization's ftp site.
-#
-# CP949.TXT format:
-#		 UHC code in hex
-#		 UCS-2 code in hex
-#		 # and Unicode name (not used in this script)
-
-require "ucs2utf.pl";
-
-# first generate UTF-8 --> WIN949 table
-
-$in_file = "CP949.TXT";
-
-open( FILE, $in_file ) || die( "cannot open $in_file" );
-
-while( <FILE> ){
-	chop;
-	if( /^#/ ){
-		next;
-	}
-	( $c, $u, $rest ) = split;
-	$ucs = hex($u);
-	$code = hex($c);
-	if( $code >= 0x80 && $ucs >= 0x0080 ){
-		$utf = &ucs2utf($ucs);
-		if( $array{ $utf } ne "" ){
-			printf STDERR "Warning: duplicate UTF8: %04x\n",$ucs;
-			next;
-		}
-		$count++;
-
-		$array{ $utf } = $code;
-	}
-}
-close( FILE );
-
-#
-# first, generate UTF8 --> UHC table
-#
-
-$file = "utf8_to_uhc.map";
-open( FILE, "> $file" ) || die( "cannot open $file" );
-print FILE "static pg_utf_to_local ULmapUHC[ $count ] = {\n";
-
-for $index ( sort {$a <=> $b} keys( %array ) ){
-	$code = $array{ $index };
-	$count--;
-	if( $count == 0 ){
-		printf FILE "  {0x%04x, 0x%04x}\n", $index, $code;
-	} else {
-		printf FILE "  {0x%04x, 0x%04x},\n", $index, $code;
-	}
-}
-
-print FILE "};\n";
-close(FILE);
-
-#
-# then generate UHC --> UTF8 table
-#
-reset 'array';
-
-open( FILE, $in_file ) || die( "cannot open $in_file" );
-
-while( <FILE> ){
-	chop;
-	if( /^#/ ){
-		next;
-	}
-	( $c, $u, $rest ) = split;
-	$ucs = hex($u);
-	$code = hex($c);
-	if( $code >= 0x80 && $ucs >= 0x0080 ){
-		$utf = &ucs2utf($ucs);
-		if( $array{ $code } ne "" ){
-			printf STDERR "Warning: duplicate code: %04x\n",$ucs;
-			next;
-		}
-		$count++;
-
-		$array{ $code } = $utf;
-	}
-}
-close( FILE );
-
-$file = "uhc_to_utf8.map";
-open( FILE, "> $file" ) || die( "cannot open $file" );
-print FILE "static pg_local_to_utf LUmapUHC[ $count ] = {\n";
-for $index ( sort {$a <=> $b} keys( %array ) ){
-	$utf = $array{ $index };
-	$count--;
-	if( $count == 0 ){
-		printf FILE "  {0x%04x, 0x%04x}\n", $index, $utf;
-	} else {
-		printf FILE "  {0x%04x, 0x%04x},\n", $index, $utf;
-	}
-}
-
-print FILE "};\n";
-close(FILE);
diff --git a/src/backend/utils/mb/Unicode/UCS_to_WIN874.pl b/src/backend/utils/mb/Unicode/UCS_to_WIN874.pl
deleted file mode 100644
index b53ca9f04803a13ca3a6ff0b7d1d6fe7f1eeb67d..0000000000000000000000000000000000000000
--- a/src/backend/utils/mb/Unicode/UCS_to_WIN874.pl
+++ /dev/null
@@ -1,111 +0,0 @@
-#! /usr/bin/perl
-#
-# Copyright (c) 2001-2005, PostgreSQL Global Development Group
-#
-# $PostgreSQL: pgsql/src/backend/utils/mb/Unicode/UCS_to_WIN874.pl,v 1.6 2005/03/07 04:30:52 momjian Exp $
-#
-# Generate UTF-8 <--> WIN874 code conversion tables from
-# map files provided by Unicode organization.
-# Unfortunately it is prohibited by the organization
-# to distribute the map files. So if you try to use this script,
-# you have to obtain OLD5601.TXT from 
-# the organization's ftp site.
-#
-# OLD5601.TXT format:
-#		 KSC5601 code in hex
-#		 UCS-2 code in hex
-#		 # and Unicode name (not used in this script)
-
-require "ucs2utf.pl";
-
-# first generate UTF-8 --> WIN949 table
-
-$in_file = "CP874.TXT";
-
-open( FILE, $in_file ) || die( "cannot open $in_file" );
-
-while( <FILE> ){
-	chop;
-	if( /^#/ ){
-		next;
-	}
-	( $c, $u, $rest ) = split;
-	$ucs = hex($u);
-	$code = hex($c);
-	if( $code >= 0x80 && $ucs >= 0x0080 ){
-		$utf = &ucs2utf($ucs);
-		if( $array{ $utf } ne "" ){
-			printf STDERR "Warning: duplicate UTF8: %04x\n",$ucs;
-			next;
-		}
-		$count++;
-
-		$array{ $utf } = $code;
-	}
-}
-close( FILE );
-
-#
-# first, generate UTF8 --> WIN874 table
-#
-
-$file = "utf8_to_win874.map";
-open( FILE, "> $file" ) || die( "cannot open $file" );
-print FILE "static pg_utf_to_local ULmapWIN874[ $count ] = {\n";
-
-for $index ( sort {$a <=> $b} keys( %array ) ){
-	$code = $array{ $index };
-	$count--;
-	if( $count == 0 ){
-		printf FILE "  {0x%04x, 0x%04x}\n", $index, $code;
-	} else {
-		printf FILE "  {0x%04x, 0x%04x},\n", $index, $code;
-	}
-}
-
-print FILE "};\n";
-close(FILE);
-
-#
-# then generate WIN874 --> UTF8 table
-#
-reset 'array';
-
-open( FILE, $in_file ) || die( "cannot open $in_file" );
-
-while( <FILE> ){
-	chop;
-	if( /^#/ ){
-		next;
-	}
-	( $c, $u, $rest ) = split;
-	$ucs = hex($u);
-	$code = hex($c);
-	if( $code >= 0x80 && $ucs >= 0x0080 ){
-		$utf = &ucs2utf($ucs);
-		if( $array{ $code } ne "" ){
-			printf STDERR "Warning: duplicate code: %04x\n",$ucs;
-			next;
-		}
-		$count++;
-
-		$array{ $code } = $utf;
-	}
-}
-close( FILE );
-
-$file = "win874_to_utf8.map";
-open( FILE, "> $file" ) || die( "cannot open $file" );
-print FILE "static pg_local_to_utf LUmapWIN874[ $count ] = {\n";
-for $index ( sort {$a <=> $b} keys( %array ) ){
-	$utf = $array{ $index };
-	$count--;
-	if( $count == 0 ){
-		printf FILE "  {0x%04x, 0x%04x}\n", $index, $utf;
-	} else {
-		printf FILE "  {0x%04x, 0x%04x},\n", $index, $utf;
-	}
-}
-
-print FILE "};\n";
-close(FILE);
diff --git a/src/backend/utils/mb/Unicode/UCS_to_cyrillic.pl b/src/backend/utils/mb/Unicode/UCS_to_cyrillic.pl
deleted file mode 100644
index f4969594482fc28e853aae0896f8d4a0ee0ea994..0000000000000000000000000000000000000000
--- a/src/backend/utils/mb/Unicode/UCS_to_cyrillic.pl
+++ /dev/null
@@ -1,112 +0,0 @@
-#! /usr/bin/perl
-#
-# Copyright (c) 2001-2005, PostgreSQL Global Development Group
-#
-# $PostgreSQL: pgsql/src/backend/utils/mb/Unicode/UCS_to_cyrillic.pl,v 1.7 2005/03/07 04:30:52 momjian Exp $
-#
-# Generate UTF-8 <--> ISO8859 code conversion tables from
-# map files provided by Unicode organization.
-# Unfortunately it is prohibited by the organization
-# to distribute the map files. So if you try to use this script,
-# you have to obtain "8859-[2-5].TXT" from the organization's ftp site.
-# We assume the file include three tab-separated columns:
-#		 ISO/IEC 8859 code in hex
-#		 UCS-2 code in hex
-#		 # and Unicode name (not used in this script)
-
-require "ucs2utf.pl";
-%filename = ('KOI8R'=>'koi8-r.txt',
-             'WIN1251'=>'cp1251.txt',
-             'WIN866'=>'cp866.txt');
-@charsets = ('KOI8R','WIN866','WIN1251');
-foreach $charset (@charsets) {
-
-#
-# first, generate UTF8->ISO8859 table
-#
-    $in_file = $filename{$charset};
-
-    open( FILE, $in_file ) || die( "cannot open $in_file" );
-
-	reset 'array';
-
-    while( <FILE> ){
-		chop;
-		if( /^#/ ){
-			next;
-		}
-		( $c, $u, $rest ) = split;
-		$ucs = hex($u);
-		$code = hex($c);
-		if( $code >= 0x80){
-			$utf = &ucs2utf($ucs);
-			if( $array{ $utf } ne "" ){
-				printf STDERR "Warning: duplicate UTF8: %04x\n",$ucs;
-				next;
-			}
-			$count++;
-			$array{ $utf } = $code;
-		}
-	}
-    close( FILE );
-
-	$file = "utf8_to_${charset}.map";
-    open( FILE, "> $file" ) || die( "cannot open $file" );
-	print FILE "static pg_utf_to_local ULmap_${charset}[ $count ] = {\n";
-
-	for $index ( sort {$a <=> $b} keys( %array ) ){
-		$code = $array{ $index };
-		$count--;
-		if( $count == 0 ){
-			printf FILE "  {0x%04x, 0x%04x}\n", $index, $code;
-		} else {
-			printf FILE "  {0x%04x, 0x%04x},\n", $index, $code;
-		}
-	}
-
-	print FILE "};\n";
-	close(FILE);
-
-#
-# then generate ISO885->UTF8 table
-#
-    open( FILE, $in_file ) || die( "cannot open $in_file" );
-
-	reset 'array';
-
-    while( <FILE> ){
-		chop;
-		if( /^#/ ){
-			next;
-		}
-		( $c, $u, $rest ) = split;
-		$ucs = hex($u);
-		$code = hex($c);
-		if($code >= 0x80){
-			$utf = &ucs2utf($ucs);
-			if( $array{ $utf } ne "" ){
-				printf STDERR "Warning: duplicate UTF8: %04x\n",$ucs;
-				next;
-			}
-			$count++;
-			$array{ $code } = $utf;
-		}
-	}
-    close( FILE );
-
-	$file = "${charset}_to_utf8.map";
-    open( FILE, "> $file" ) || die( "cannot open $file" );
-	print FILE "static pg_local_to_utf LUmap${charset}[ $count ] = {\n";
-	for $index ( sort {$a <=> $b} keys( %array ) ){
-		$utf = $array{ $index };
-		$count--;
-		if( $count == 0 ){
-			printf FILE "  {0x%04x, 0x%04x}\n", $index, $utf;
-		} else {
-			printf FILE "  {0x%04x, 0x%04x},\n", $index, $utf;
-		}
-	}
-
-	print FILE "};\n";
-	close(FILE);
-}
diff --git a/src/backend/utils/mb/Unicode/UCS_to_WINX.pl b/src/backend/utils/mb/Unicode/UCS_to_most.pl
similarity index 56%
rename from src/backend/utils/mb/Unicode/UCS_to_WINX.pl
rename to src/backend/utils/mb/Unicode/UCS_to_most.pl
index 156507ff55254b667d4964bc9ca7908e396f2a0c..b9c95d89a7560c8251553217b2a3ab2d5a649c38 100644
--- a/src/backend/utils/mb/Unicode/UCS_to_WINX.pl
+++ b/src/backend/utils/mb/Unicode/UCS_to_most.pl
@@ -2,28 +2,58 @@
 #
 # Copyright (c) 2001-2005, PostgreSQL Global Development Group
 #
-# $PostgreSQL: pgsql/src/backend/utils/mb/Unicode/UCS_to_WINX.pl,v 1.6 2005/03/07 04:30:52 momjian Exp $
+# $PostgreSQL: pgsql/src/backend/utils/mb/Unicode/UCS_to_most.pl,v 1.1 2006/02/18 16:15:22 petere Exp $
 #
-# Generate UTF-8 <--> WINX code conversion tables from
+# Generate UTF-8 <--> character code conversion tables from
 # map files provided by Unicode organization.
 # Unfortunately it is prohibited by the organization
 # to distribute the map files. So if you try to use this script,
-# you have to obtain "8859-[2-5].TXT" from the organization's ftp site.
+# you have to obtain the map files from the organization's ftp site.
+# ftp://www.unicode.org/Public/MAPPINGS/
 # We assume the file include three tab-separated columns:
-#		 ISO/IEC 8859 code in hex
+#		 source character set code in hex
 #		 UCS-2 code in hex
 #		 # and Unicode name (not used in this script)
 
 require "ucs2utf.pl";
-%filename = ('WIN1256'=>'CP1256.TXT',
-             'WIN1258'=>'CP1258.TXT',
-             'WIN874'=>'CP874.TXT',
-             'WIN1250'=>'CP1250.TXT');
-@charsets = ('WIN1256','WIN1258','WIN874','WIN1250');
+
+%filename = (
+	'WIN866' => 'CP866.TXT',
+	'WIN874' => 'CP874.TXT',
+	'WIN1250' => 'CP1250.TXT',
+	'WIN1251' => 'CP1251.TXT',
+	'WIN1252' => 'CP1252.TXT',
+	'WIN1253' => 'CP1253.TXT',
+	'WIN1254' => 'CP1254.TXT',
+	'WIN1255' => 'CP1255.TXT',
+	'WIN1256' => 'CP1256.TXT',
+	'WIN1257' => 'CP1257.TXT',
+	'WIN1258' => 'CP1258.TXT',
+	'ISO8859_2' => '8859-2.TXT',
+	'ISO8859_3' => '8859-3.TXT',
+	'ISO8859_4' => '8859-4.TXT',
+	'ISO8859_5' => '8859-5.TXT',
+	'ISO8859_6' => '8859-6.TXT',
+	'ISO8859_7' => '8859-7.TXT',
+	'ISO8859_8' => '8859-8.TXT',
+	'ISO8859_9' => '8859-9.TXT',
+	'ISO8859_10' => '8859-10.TXT',
+	'ISO8859_13' => '8859-13.TXT',
+	'ISO8859_14' => '8859-14.TXT',
+	'ISO8859_15' => '8859-15.TXT',
+	'ISO8859_16' => '8859-16.TXT',
+	'KOI8R' => 'KOI8-R.TXT',
+	'GBK' => 'CP936.TXT',
+	'UHC' => 'CP949.TXT',
+	'JOHAB' => 'JOHAB.TXT',
+	'BIG5' => 'BIG5.TXT',
+);
+
+@charsets = keys(filename);
 foreach $charset (@charsets) {
 
 #
-# first, generate UTF8->ISO8859 table
+# first, generate UTF8-> charset table
 #
     $in_file = $filename{$charset};
 
@@ -39,7 +69,7 @@ foreach $charset (@charsets) {
 		( $c, $u, $rest ) = split;
 		$ucs = hex($u);
 		$code = hex($c);
-		if( $code >= 0x80){
+		if( $code >= 0x80 && $ucs >= 0x0080){
 			$utf = &ucs2utf($ucs);
 			if( $array{ $utf } ne "" ){
 				printf STDERR "Warning: duplicate UTF8: %04x\n",$ucs;
@@ -51,9 +81,9 @@ foreach $charset (@charsets) {
 	}
     close( FILE );
 
-	$file = lower("utf8_to_${charset}.map");
+	$file = lc("utf8_to_${charset}.map");
     open( FILE, "> $file" ) || die( "cannot open $file" );
-	print FILE "static pg_utf_to_local ULmap_${charset}[ $count ] = {\n";
+	print FILE "static pg_utf_to_local ULmap${charset}[ $count ] = {\n";
 
 	for $index ( sort {$a <=> $b} keys( %array ) ){
 		$code = $array{ $index };
@@ -69,7 +99,7 @@ foreach $charset (@charsets) {
 	close(FILE);
 
 #
-# then generate ISO885->UTF8 table
+# then generate character set code ->UTF8 table
 #
     open( FILE, $in_file ) || die( "cannot open $in_file" );
 
@@ -83,9 +113,9 @@ foreach $charset (@charsets) {
 		( $c, $u, $rest ) = split;
 		$ucs = hex($u);
 		$code = hex($c);
-		if($code >= 0x80){
+		if($code >= 0x80 && $ucs >= 0x0080){
 			$utf = &ucs2utf($ucs);
-			if( $array{ $utf } ne "" ){
+			if( $array{ $code } ne "" ){
 				printf STDERR "Warning: duplicate UTF8: %04x\n",$ucs;
 				next;
 			}
@@ -95,7 +125,7 @@ foreach $charset (@charsets) {
 	}
     close( FILE );
 
-	$file = lower("${charset}_to_utf8.map");
+	$file = lc("${charset}_to_utf8.map");
     open( FILE, "> $file" ) || die( "cannot open $file" );
 	print FILE "static pg_local_to_utf LUmap${charset}[ $count ] = {\n";
 	for $index ( sort {$a <=> $b} keys( %array ) ){
diff --git a/src/backend/utils/mb/Unicode/iso8859_7_to_utf8.map b/src/backend/utils/mb/Unicode/iso8859_7_to_utf8.map
index 36b966dca4b6b7d2a295dbb5f507378d1dc0b9ca..9f2db13fb2c6ae1d49a267ba08cc7ed283f2d72a 100644
--- a/src/backend/utils/mb/Unicode/iso8859_7_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/iso8859_7_to_utf8.map
@@ -1,4 +1,4 @@
-static pg_local_to_utf LUmapISO8859_7[ 122 ] = {
+static pg_local_to_utf LUmapISO8859_7[ 125 ] = {
   {0x0080, 0xc280},
   {0x0081, 0xc281},
   {0x0082, 0xc282},
@@ -35,10 +35,13 @@ static pg_local_to_utf LUmapISO8859_7[ 122 ] = {
   {0x00a1, 0xe28098},
   {0x00a2, 0xe28099},
   {0x00a3, 0xc2a3},
+  {0x00a4, 0xe282ac},
+  {0x00a5, 0xe282af},
   {0x00a6, 0xc2a6},
   {0x00a7, 0xc2a7},
   {0x00a8, 0xc2a8},
   {0x00a9, 0xc2a9},
+  {0x00aa, 0xcdba},
   {0x00ab, 0xc2ab},
   {0x00ac, 0xc2ac},
   {0x00ad, 0xc2ad},
diff --git a/src/backend/utils/mb/Unicode/koi8r_to_utf8.map b/src/backend/utils/mb/Unicode/koi8r_to_utf8.map
index e8eaa7095f247687c63a51a27f749dc9f2a7d79b..c02aec45fcb784134fca020ff0e37cccd50fd417 100644
--- a/src/backend/utils/mb/Unicode/koi8r_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/koi8r_to_utf8.map
@@ -35,32 +35,32 @@ static pg_local_to_utf LUmapKOI8R[ 128 ] = {
   {0x00a1, 0xe29591},
   {0x00a2, 0xe29592},
   {0x00a3, 0xd191},
-  {0x00a4, 0xd194},
+  {0x00a4, 0xe29593},
   {0x00a5, 0xe29594},
-  {0x00a6, 0xd196},
-  {0x00a7, 0xd197},
+  {0x00a6, 0xe29595},
+  {0x00a7, 0xe29596},
   {0x00a8, 0xe29597},
   {0x00a9, 0xe29598},
   {0x00aa, 0xe29599},
   {0x00ab, 0xe2959a},
   {0x00ac, 0xe2959b},
-  {0x00ad, 0xd291},
+  {0x00ad, 0xe2959c},
   {0x00ae, 0xe2959d},
   {0x00af, 0xe2959e},
   {0x00b0, 0xe2959f},
   {0x00b1, 0xe295a0},
   {0x00b2, 0xe295a1},
   {0x00b3, 0xd081},
-  {0x00b4, 0xd084},
+  {0x00b4, 0xe295a2},
   {0x00b5, 0xe295a3},
-  {0x00b6, 0xd086},
-  {0x00b7, 0xd087},
+  {0x00b6, 0xe295a4},
+  {0x00b7, 0xe295a5},
   {0x00b8, 0xe295a6},
   {0x00b9, 0xe295a7},
   {0x00ba, 0xe295a8},
   {0x00bb, 0xe295a9},
   {0x00bc, 0xe295aa},
-  {0x00bd, 0xd290},
+  {0x00bd, 0xe295ab},
   {0x00be, 0xe295ac},
   {0x00bf, 0xc2a9},
   {0x00c0, 0xd18e},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_iso8859_7.map b/src/backend/utils/mb/Unicode/utf8_to_iso8859_7.map
index e46ebe18b031babecf72540c8c594b87e4019b54..8e4b7d0eb00d817f159eaf2c0dd3660ada0ef191 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_iso8859_7.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_iso8859_7.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapISO8859_7[ 122 ] = {
+static pg_utf_to_local ULmapISO8859_7[ 125 ] = {
   {0xc280, 0x0080},
   {0xc281, 0x0081},
   {0xc282, 0x0082},
@@ -47,6 +47,7 @@ static pg_utf_to_local ULmapISO8859_7[ 122 ] = {
   {0xc2b7, 0x00b7},
   {0xc2bb, 0x00bb},
   {0xc2bd, 0x00bd},
+  {0xcdba, 0x00aa},
   {0xce84, 0x00b4},
   {0xce85, 0x00b5},
   {0xce86, 0x00b6},
@@ -120,5 +121,7 @@ static pg_utf_to_local ULmapISO8859_7[ 122 ] = {
   {0xcf8e, 0x00fe},
   {0xe28095, 0x00af},
   {0xe28098, 0x00a1},
-  {0xe28099, 0x00a2}
+  {0xe28099, 0x00a2},
+  {0xe282ac, 0x00a4},
+  {0xe282af, 0x00a5}
 };
diff --git a/src/backend/utils/mb/Unicode/utf8_to_koi8r.map b/src/backend/utils/mb/Unicode/utf8_to_koi8r.map
index 2134ec280f18d3802bb6fb5f272b5cc972aed90e..97ab485e195f957e618f883263fd2c6333a6f943 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_koi8r.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_koi8r.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmap_KOI8R[ 128 ] = {
+static pg_utf_to_local ULmapKOI8R[ 128 ] = {
   {0xc2a0, 0x009a},
   {0xc2a9, 0x00bf},
   {0xc2b0, 0x009c},
@@ -6,9 +6,6 @@ static pg_utf_to_local ULmap_KOI8R[ 128 ] = {
   {0xc2b7, 0x009e},
   {0xc3b7, 0x009f},
   {0xd081, 0x00b3},
-  {0xd084, 0x00b4},
-  {0xd086, 0x00b6},
-  {0xd087, 0x00b7},
   {0xd090, 0x00e1},
   {0xd091, 0x00e2},
   {0xd092, 0x00f7},
@@ -74,11 +71,6 @@ static pg_utf_to_local ULmap_KOI8R[ 128 ] = {
   {0xd18e, 0x00c0},
   {0xd18f, 0x00d1},
   {0xd191, 0x00a3},
-  {0xd194, 0x00a4},
-  {0xd196, 0x00a6},
-  {0xd197, 0x00a7},
-  {0xd290, 0x00bd},
-  {0xd291, 0x00ad},
   {0xe28899, 0x0095},
   {0xe2889a, 0x0096},
   {0xe28988, 0x0097},
@@ -100,23 +92,31 @@ static pg_utf_to_local ULmap_KOI8R[ 128 ] = {
   {0xe29590, 0x00a0},
   {0xe29591, 0x00a1},
   {0xe29592, 0x00a2},
+  {0xe29593, 0x00a4},
   {0xe29594, 0x00a5},
+  {0xe29595, 0x00a6},
+  {0xe29596, 0x00a7},
   {0xe29597, 0x00a8},
   {0xe29598, 0x00a9},
   {0xe29599, 0x00aa},
   {0xe2959a, 0x00ab},
   {0xe2959b, 0x00ac},
+  {0xe2959c, 0x00ad},
   {0xe2959d, 0x00ae},
   {0xe2959e, 0x00af},
   {0xe2959f, 0x00b0},
   {0xe295a0, 0x00b1},
   {0xe295a1, 0x00b2},
+  {0xe295a2, 0x00b4},
   {0xe295a3, 0x00b5},
+  {0xe295a4, 0x00b6},
+  {0xe295a5, 0x00b7},
   {0xe295a6, 0x00b8},
   {0xe295a7, 0x00b9},
   {0xe295a8, 0x00ba},
   {0xe295a9, 0x00bb},
   {0xe295aa, 0x00bc},
+  {0xe295ab, 0x00bd},
   {0xe295ac, 0x00be},
   {0xe29680, 0x008b},
   {0xe29684, 0x008c},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_win1250.map b/src/backend/utils/mb/Unicode/utf8_to_win1250.map
index 3c6f432098173fd42beb4d7f478004d980da0848..ef0381dc4342148735813f9470f9a7bb5cb235bc 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_win1250.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_win1250.map
@@ -1,5 +1,4 @@
-static pg_utf_to_local ULmapWIN1250[ 124 ] = {
-  {0x0000, 0x0081},
+static pg_utf_to_local ULmapWIN1250[ 123 ] = {
   {0xc2a0, 0x00a0},
   {0xc2a4, 0x00a4},
   {0xc2a6, 0x00a6},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_win1251.map b/src/backend/utils/mb/Unicode/utf8_to_win1251.map
index 434c3f88f613c5506991987b87611ebb478f7261..e69fd6573e2fe0aef49bb99dfdbf4bafe942517b 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_win1251.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_win1251.map
@@ -1,5 +1,4 @@
-static pg_utf_to_local ULmap_WIN1251[ 127 ] = {
-  {0x0000, 0x0088},
+static pg_utf_to_local ULmapWIN1251[ 127 ] = {
   {0xc2a0, 0x00a0},
   {0xc2a4, 0x00a4},
   {0xc2a6, 0x00a6},
@@ -124,6 +123,7 @@ static pg_utf_to_local ULmap_WIN1251[ 127 ] = {
   {0xe280b0, 0x0089},
   {0xe280b9, 0x008b},
   {0xe280ba, 0x009b},
+  {0xe282ac, 0x0088},
   {0xe28496, 0x00b9},
   {0xe284a2, 0x0099}
 };
diff --git a/src/backend/utils/mb/Unicode/utf8_to_win1252.map b/src/backend/utils/mb/Unicode/utf8_to_win1252.map
index 6dc3c6c07e973bf58061ebb46d61ea5dcc740b15..ba9594b74cfbf2d436a347fb60d056837bbec422 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_win1252.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_win1252.map
@@ -1,5 +1,4 @@
-static pg_utf_to_local ULmapWIN1252[ 124 ] = {
-  {0x0000, 0x0081},
+static pg_utf_to_local ULmapWIN1252[ 123 ] = {
   {0xc2a0, 0x00a0},
   {0xc2a1, 0x00a1},
   {0xc2a2, 0x00a2},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_win1253.map b/src/backend/utils/mb/Unicode/utf8_to_win1253.map
new file mode 100644
index 0000000000000000000000000000000000000000..a7961e95f12798ed53e8c2b04086f0501ecd909c
--- /dev/null
+++ b/src/backend/utils/mb/Unicode/utf8_to_win1253.map
@@ -0,0 +1,113 @@
+static pg_utf_to_local ULmapWIN1253[ 111 ] = {
+  {0xc2a0, 0x00a0},
+  {0xc2a3, 0x00a3},
+  {0xc2a4, 0x00a4},
+  {0xc2a5, 0x00a5},
+  {0xc2a6, 0x00a6},
+  {0xc2a7, 0x00a7},
+  {0xc2a8, 0x00a8},
+  {0xc2a9, 0x00a9},
+  {0xc2ab, 0x00ab},
+  {0xc2ac, 0x00ac},
+  {0xc2ad, 0x00ad},
+  {0xc2ae, 0x00ae},
+  {0xc2b0, 0x00b0},
+  {0xc2b1, 0x00b1},
+  {0xc2b2, 0x00b2},
+  {0xc2b3, 0x00b3},
+  {0xc2b5, 0x00b5},
+  {0xc2b6, 0x00b6},
+  {0xc2b7, 0x00b7},
+  {0xc2bb, 0x00bb},
+  {0xc2bd, 0x00bd},
+  {0xc692, 0x0083},
+  {0xce84, 0x00b4},
+  {0xce85, 0x00a1},
+  {0xce86, 0x00a2},
+  {0xce88, 0x00b8},
+  {0xce89, 0x00b9},
+  {0xce8a, 0x00ba},
+  {0xce8c, 0x00bc},
+  {0xce8e, 0x00be},
+  {0xce8f, 0x00bf},
+  {0xce90, 0x00c0},
+  {0xce91, 0x00c1},
+  {0xce92, 0x00c2},
+  {0xce93, 0x00c3},
+  {0xce94, 0x00c4},
+  {0xce95, 0x00c5},
+  {0xce96, 0x00c6},
+  {0xce97, 0x00c7},
+  {0xce98, 0x00c8},
+  {0xce99, 0x00c9},
+  {0xce9a, 0x00ca},
+  {0xce9b, 0x00cb},
+  {0xce9c, 0x00cc},
+  {0xce9d, 0x00cd},
+  {0xce9e, 0x00ce},
+  {0xce9f, 0x00cf},
+  {0xcea0, 0x00d0},
+  {0xcea1, 0x00d1},
+  {0xcea3, 0x00d3},
+  {0xcea4, 0x00d4},
+  {0xcea5, 0x00d5},
+  {0xcea6, 0x00d6},
+  {0xcea7, 0x00d7},
+  {0xcea8, 0x00d8},
+  {0xcea9, 0x00d9},
+  {0xceaa, 0x00da},
+  {0xceab, 0x00db},
+  {0xceac, 0x00dc},
+  {0xcead, 0x00dd},
+  {0xceae, 0x00de},
+  {0xceaf, 0x00df},
+  {0xceb0, 0x00e0},
+  {0xceb1, 0x00e1},
+  {0xceb2, 0x00e2},
+  {0xceb3, 0x00e3},
+  {0xceb4, 0x00e4},
+  {0xceb5, 0x00e5},
+  {0xceb6, 0x00e6},
+  {0xceb7, 0x00e7},
+  {0xceb8, 0x00e8},
+  {0xceb9, 0x00e9},
+  {0xceba, 0x00ea},
+  {0xcebb, 0x00eb},
+  {0xcebc, 0x00ec},
+  {0xcebd, 0x00ed},
+  {0xcebe, 0x00ee},
+  {0xcebf, 0x00ef},
+  {0xcf80, 0x00f0},
+  {0xcf81, 0x00f1},
+  {0xcf82, 0x00f2},
+  {0xcf83, 0x00f3},
+  {0xcf84, 0x00f4},
+  {0xcf85, 0x00f5},
+  {0xcf86, 0x00f6},
+  {0xcf87, 0x00f7},
+  {0xcf88, 0x00f8},
+  {0xcf89, 0x00f9},
+  {0xcf8a, 0x00fa},
+  {0xcf8b, 0x00fb},
+  {0xcf8c, 0x00fc},
+  {0xcf8d, 0x00fd},
+  {0xcf8e, 0x00fe},
+  {0xe28093, 0x0096},
+  {0xe28094, 0x0097},
+  {0xe28095, 0x00af},
+  {0xe28098, 0x0091},
+  {0xe28099, 0x0092},
+  {0xe2809a, 0x0082},
+  {0xe2809c, 0x0093},
+  {0xe2809d, 0x0094},
+  {0xe2809e, 0x0084},
+  {0xe280a0, 0x0086},
+  {0xe280a1, 0x0087},
+  {0xe280a2, 0x0095},
+  {0xe280a6, 0x0085},
+  {0xe280b0, 0x0089},
+  {0xe280b9, 0x008b},
+  {0xe280ba, 0x009b},
+  {0xe282ac, 0x0080},
+  {0xe284a2, 0x0099}
+};
diff --git a/src/backend/utils/mb/Unicode/utf8_to_win1254.map b/src/backend/utils/mb/Unicode/utf8_to_win1254.map
new file mode 100644
index 0000000000000000000000000000000000000000..e1afbe8f40d7abe17fef5c86c461833314c4d709
--- /dev/null
+++ b/src/backend/utils/mb/Unicode/utf8_to_win1254.map
@@ -0,0 +1,123 @@
+static pg_utf_to_local ULmapWIN1254[ 121 ] = {
+  {0xc2a0, 0x00a0},
+  {0xc2a1, 0x00a1},
+  {0xc2a2, 0x00a2},
+  {0xc2a3, 0x00a3},
+  {0xc2a4, 0x00a4},
+  {0xc2a5, 0x00a5},
+  {0xc2a6, 0x00a6},
+  {0xc2a7, 0x00a7},
+  {0xc2a8, 0x00a8},
+  {0xc2a9, 0x00a9},
+  {0xc2aa, 0x00aa},
+  {0xc2ab, 0x00ab},
+  {0xc2ac, 0x00ac},
+  {0xc2ad, 0x00ad},
+  {0xc2ae, 0x00ae},
+  {0xc2af, 0x00af},
+  {0xc2b0, 0x00b0},
+  {0xc2b1, 0x00b1},
+  {0xc2b2, 0x00b2},
+  {0xc2b3, 0x00b3},
+  {0xc2b4, 0x00b4},
+  {0xc2b5, 0x00b5},
+  {0xc2b6, 0x00b6},
+  {0xc2b7, 0x00b7},
+  {0xc2b8, 0x00b8},
+  {0xc2b9, 0x00b9},
+  {0xc2ba, 0x00ba},
+  {0xc2bb, 0x00bb},
+  {0xc2bc, 0x00bc},
+  {0xc2bd, 0x00bd},
+  {0xc2be, 0x00be},
+  {0xc2bf, 0x00bf},
+  {0xc380, 0x00c0},
+  {0xc381, 0x00c1},
+  {0xc382, 0x00c2},
+  {0xc383, 0x00c3},
+  {0xc384, 0x00c4},
+  {0xc385, 0x00c5},
+  {0xc386, 0x00c6},
+  {0xc387, 0x00c7},
+  {0xc388, 0x00c8},
+  {0xc389, 0x00c9},
+  {0xc38a, 0x00ca},
+  {0xc38b, 0x00cb},
+  {0xc38c, 0x00cc},
+  {0xc38d, 0x00cd},
+  {0xc38e, 0x00ce},
+  {0xc38f, 0x00cf},
+  {0xc391, 0x00d1},
+  {0xc392, 0x00d2},
+  {0xc393, 0x00d3},
+  {0xc394, 0x00d4},
+  {0xc395, 0x00d5},
+  {0xc396, 0x00d6},
+  {0xc397, 0x00d7},
+  {0xc398, 0x00d8},
+  {0xc399, 0x00d9},
+  {0xc39a, 0x00da},
+  {0xc39b, 0x00db},
+  {0xc39c, 0x00dc},
+  {0xc39f, 0x00df},
+  {0xc3a0, 0x00e0},
+  {0xc3a1, 0x00e1},
+  {0xc3a2, 0x00e2},
+  {0xc3a3, 0x00e3},
+  {0xc3a4, 0x00e4},
+  {0xc3a5, 0x00e5},
+  {0xc3a6, 0x00e6},
+  {0xc3a7, 0x00e7},
+  {0xc3a8, 0x00e8},
+  {0xc3a9, 0x00e9},
+  {0xc3aa, 0x00ea},
+  {0xc3ab, 0x00eb},
+  {0xc3ac, 0x00ec},
+  {0xc3ad, 0x00ed},
+  {0xc3ae, 0x00ee},
+  {0xc3af, 0x00ef},
+  {0xc3b1, 0x00f1},
+  {0xc3b2, 0x00f2},
+  {0xc3b3, 0x00f3},
+  {0xc3b4, 0x00f4},
+  {0xc3b5, 0x00f5},
+  {0xc3b6, 0x00f6},
+  {0xc3b7, 0x00f7},
+  {0xc3b8, 0x00f8},
+  {0xc3b9, 0x00f9},
+  {0xc3ba, 0x00fa},
+  {0xc3bb, 0x00fb},
+  {0xc3bc, 0x00fc},
+  {0xc3bf, 0x00ff},
+  {0xc49e, 0x00d0},
+  {0xc49f, 0x00f0},
+  {0xc4b0, 0x00dd},
+  {0xc4b1, 0x00fd},
+  {0xc592, 0x008c},
+  {0xc593, 0x009c},
+  {0xc59e, 0x00de},
+  {0xc59f, 0x00fe},
+  {0xc5a0, 0x008a},
+  {0xc5a1, 0x009a},
+  {0xc5b8, 0x009f},
+  {0xc692, 0x0083},
+  {0xcb86, 0x0088},
+  {0xcb9c, 0x0098},
+  {0xe28093, 0x0096},
+  {0xe28094, 0x0097},
+  {0xe28098, 0x0091},
+  {0xe28099, 0x0092},
+  {0xe2809a, 0x0082},
+  {0xe2809c, 0x0093},
+  {0xe2809d, 0x0094},
+  {0xe2809e, 0x0084},
+  {0xe280a0, 0x0086},
+  {0xe280a1, 0x0087},
+  {0xe280a2, 0x0095},
+  {0xe280a6, 0x0085},
+  {0xe280b0, 0x0089},
+  {0xe280b9, 0x008b},
+  {0xe280ba, 0x009b},
+  {0xe282ac, 0x0080},
+  {0xe284a2, 0x0099}
+};
diff --git a/src/backend/utils/mb/Unicode/utf8_to_win1255.map b/src/backend/utils/mb/Unicode/utf8_to_win1255.map
new file mode 100644
index 0000000000000000000000000000000000000000..9071fe0a61b00311f038ee26317080cc07d170d5
--- /dev/null
+++ b/src/backend/utils/mb/Unicode/utf8_to_win1255.map
@@ -0,0 +1,107 @@
+static pg_utf_to_local ULmapWIN1255[ 105 ] = {
+  {0xc2a0, 0x00a0},
+  {0xc2a1, 0x00a1},
+  {0xc2a2, 0x00a2},
+  {0xc2a3, 0x00a3},
+  {0xc2a5, 0x00a5},
+  {0xc2a6, 0x00a6},
+  {0xc2a7, 0x00a7},
+  {0xc2a8, 0x00a8},
+  {0xc2a9, 0x00a9},
+  {0xc2ab, 0x00ab},
+  {0xc2ac, 0x00ac},
+  {0xc2ad, 0x00ad},
+  {0xc2ae, 0x00ae},
+  {0xc2af, 0x00af},
+  {0xc2b0, 0x00b0},
+  {0xc2b1, 0x00b1},
+  {0xc2b2, 0x00b2},
+  {0xc2b3, 0x00b3},
+  {0xc2b4, 0x00b4},
+  {0xc2b5, 0x00b5},
+  {0xc2b6, 0x00b6},
+  {0xc2b7, 0x00b7},
+  {0xc2b8, 0x00b8},
+  {0xc2b9, 0x00b9},
+  {0xc2bb, 0x00bb},
+  {0xc2bc, 0x00bc},
+  {0xc2bd, 0x00bd},
+  {0xc2be, 0x00be},
+  {0xc2bf, 0x00bf},
+  {0xc397, 0x00aa},
+  {0xc3b7, 0x00ba},
+  {0xc692, 0x0083},
+  {0xcb86, 0x0088},
+  {0xcb9c, 0x0098},
+  {0xd6b0, 0x00c0},
+  {0xd6b1, 0x00c1},
+  {0xd6b2, 0x00c2},
+  {0xd6b3, 0x00c3},
+  {0xd6b4, 0x00c4},
+  {0xd6b5, 0x00c5},
+  {0xd6b6, 0x00c6},
+  {0xd6b7, 0x00c7},
+  {0xd6b8, 0x00c8},
+  {0xd6b9, 0x00c9},
+  {0xd6bb, 0x00cb},
+  {0xd6bc, 0x00cc},
+  {0xd6bd, 0x00cd},
+  {0xd6be, 0x00ce},
+  {0xd6bf, 0x00cf},
+  {0xd780, 0x00d0},
+  {0xd781, 0x00d1},
+  {0xd782, 0x00d2},
+  {0xd783, 0x00d3},
+  {0xd790, 0x00e0},
+  {0xd791, 0x00e1},
+  {0xd792, 0x00e2},
+  {0xd793, 0x00e3},
+  {0xd794, 0x00e4},
+  {0xd795, 0x00e5},
+  {0xd796, 0x00e6},
+  {0xd797, 0x00e7},
+  {0xd798, 0x00e8},
+  {0xd799, 0x00e9},
+  {0xd79a, 0x00ea},
+  {0xd79b, 0x00eb},
+  {0xd79c, 0x00ec},
+  {0xd79d, 0x00ed},
+  {0xd79e, 0x00ee},
+  {0xd79f, 0x00ef},
+  {0xd7a0, 0x00f0},
+  {0xd7a1, 0x00f1},
+  {0xd7a2, 0x00f2},
+  {0xd7a3, 0x00f3},
+  {0xd7a4, 0x00f4},
+  {0xd7a5, 0x00f5},
+  {0xd7a6, 0x00f6},
+  {0xd7a7, 0x00f7},
+  {0xd7a8, 0x00f8},
+  {0xd7a9, 0x00f9},
+  {0xd7aa, 0x00fa},
+  {0xd7b0, 0x00d4},
+  {0xd7b1, 0x00d5},
+  {0xd7b2, 0x00d6},
+  {0xd7b3, 0x00d7},
+  {0xd7b4, 0x00d8},
+  {0xe2808e, 0x00fd},
+  {0xe2808f, 0x00fe},
+  {0xe28093, 0x0096},
+  {0xe28094, 0x0097},
+  {0xe28098, 0x0091},
+  {0xe28099, 0x0092},
+  {0xe2809a, 0x0082},
+  {0xe2809c, 0x0093},
+  {0xe2809d, 0x0094},
+  {0xe2809e, 0x0084},
+  {0xe280a0, 0x0086},
+  {0xe280a1, 0x0087},
+  {0xe280a2, 0x0095},
+  {0xe280a6, 0x0085},
+  {0xe280b0, 0x0089},
+  {0xe280b9, 0x008b},
+  {0xe280ba, 0x009b},
+  {0xe282aa, 0x00a4},
+  {0xe282ac, 0x0080},
+  {0xe284a2, 0x0099}
+};
diff --git a/src/backend/utils/mb/Unicode/utf8_to_win1257.map b/src/backend/utils/mb/Unicode/utf8_to_win1257.map
new file mode 100644
index 0000000000000000000000000000000000000000..562678119e9d178c5801c506cb7db01a5c37293b
--- /dev/null
+++ b/src/backend/utils/mb/Unicode/utf8_to_win1257.map
@@ -0,0 +1,118 @@
+static pg_utf_to_local ULmapWIN1257[ 116 ] = {
+  {0xc2a0, 0x00a0},
+  {0xc2a2, 0x00a2},
+  {0xc2a3, 0x00a3},
+  {0xc2a4, 0x00a4},
+  {0xc2a6, 0x00a6},
+  {0xc2a7, 0x00a7},
+  {0xc2a8, 0x008d},
+  {0xc2a9, 0x00a9},
+  {0xc2ab, 0x00ab},
+  {0xc2ac, 0x00ac},
+  {0xc2ad, 0x00ad},
+  {0xc2ae, 0x00ae},
+  {0xc2af, 0x009d},
+  {0xc2b0, 0x00b0},
+  {0xc2b1, 0x00b1},
+  {0xc2b2, 0x00b2},
+  {0xc2b3, 0x00b3},
+  {0xc2b4, 0x00b4},
+  {0xc2b5, 0x00b5},
+  {0xc2b6, 0x00b6},
+  {0xc2b7, 0x00b7},
+  {0xc2b8, 0x008f},
+  {0xc2b9, 0x00b9},
+  {0xc2bb, 0x00bb},
+  {0xc2bc, 0x00bc},
+  {0xc2bd, 0x00bd},
+  {0xc2be, 0x00be},
+  {0xc384, 0x00c4},
+  {0xc385, 0x00c5},
+  {0xc386, 0x00af},
+  {0xc389, 0x00c9},
+  {0xc393, 0x00d3},
+  {0xc395, 0x00d5},
+  {0xc396, 0x00d6},
+  {0xc397, 0x00d7},
+  {0xc398, 0x00a8},
+  {0xc39c, 0x00dc},
+  {0xc39f, 0x00df},
+  {0xc3a4, 0x00e4},
+  {0xc3a5, 0x00e5},
+  {0xc3a6, 0x00bf},
+  {0xc3a9, 0x00e9},
+  {0xc3b3, 0x00f3},
+  {0xc3b5, 0x00f5},
+  {0xc3b6, 0x00f6},
+  {0xc3b7, 0x00f7},
+  {0xc3b8, 0x00b8},
+  {0xc3bc, 0x00fc},
+  {0xc480, 0x00c2},
+  {0xc481, 0x00e2},
+  {0xc484, 0x00c0},
+  {0xc485, 0x00e0},
+  {0xc486, 0x00c3},
+  {0xc487, 0x00e3},
+  {0xc48c, 0x00c8},
+  {0xc48d, 0x00e8},
+  {0xc492, 0x00c7},
+  {0xc493, 0x00e7},
+  {0xc496, 0x00cb},
+  {0xc497, 0x00eb},
+  {0xc498, 0x00c6},
+  {0xc499, 0x00e6},
+  {0xc4a2, 0x00cc},
+  {0xc4a3, 0x00ec},
+  {0xc4aa, 0x00ce},
+  {0xc4ab, 0x00ee},
+  {0xc4ae, 0x00c1},
+  {0xc4af, 0x00e1},
+  {0xc4b6, 0x00cd},
+  {0xc4b7, 0x00ed},
+  {0xc4bb, 0x00cf},
+  {0xc4bc, 0x00ef},
+  {0xc581, 0x00d9},
+  {0xc582, 0x00f9},
+  {0xc583, 0x00d1},
+  {0xc584, 0x00f1},
+  {0xc585, 0x00d2},
+  {0xc586, 0x00f2},
+  {0xc58c, 0x00d4},
+  {0xc58d, 0x00f4},
+  {0xc596, 0x00aa},
+  {0xc597, 0x00ba},
+  {0xc59a, 0x00da},
+  {0xc59b, 0x00fa},
+  {0xc5a0, 0x00d0},
+  {0xc5a1, 0x00f0},
+  {0xc5aa, 0x00db},
+  {0xc5ab, 0x00fb},
+  {0xc5b2, 0x00d8},
+  {0xc5b3, 0x00f8},
+  {0xc5b9, 0x00ca},
+  {0xc5ba, 0x00ea},
+  {0xc5bb, 0x00dd},
+  {0xc5bc, 0x00fd},
+  {0xc5bd, 0x00de},
+  {0xc5be, 0x00fe},
+  {0xcb87, 0x008e},
+  {0xcb99, 0x00ff},
+  {0xcb9b, 0x009e},
+  {0xe28093, 0x0096},
+  {0xe28094, 0x0097},
+  {0xe28098, 0x0091},
+  {0xe28099, 0x0092},
+  {0xe2809a, 0x0082},
+  {0xe2809c, 0x0093},
+  {0xe2809d, 0x0094},
+  {0xe2809e, 0x0084},
+  {0xe280a0, 0x0086},
+  {0xe280a1, 0x0087},
+  {0xe280a2, 0x0095},
+  {0xe280a6, 0x0085},
+  {0xe280b0, 0x0089},
+  {0xe280b9, 0x008b},
+  {0xe280ba, 0x009b},
+  {0xe282ac, 0x0080},
+  {0xe284a2, 0x0099}
+};
diff --git a/src/backend/utils/mb/Unicode/utf8_to_win1258.map b/src/backend/utils/mb/Unicode/utf8_to_win1258.map
index 84cefd91f3f27c011fa1a0fc5b9db75faa08dfce..7c4629ff91fce3de9290ad27695ec9eab9240bec 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_win1258.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_win1258.map
@@ -1,5 +1,4 @@
-static pg_utf_to_local ULmapWIN1258[ 120 ] = {
-  {0x0000, 0x0081},
+static pg_utf_to_local ULmapWIN1258[ 119 ] = {
   {0xc2a0, 0x00a0},
   {0xc2a1, 0x00a1},
   {0xc2a2, 0x00a2},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_win866.map b/src/backend/utils/mb/Unicode/utf8_to_win866.map
index cac06a82edd3fac1608910b5fcd01a3d92c54d9b..e5767e09307781c1c039dbab65989b7356c03aaf 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_win866.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_win866.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmap_WIN866[ 128 ] = {
+static pg_utf_to_local ULmapWIN866[ 128 ] = {
   {0xc2a0, 0x00ff},
   {0xc2a4, 0x00fd},
   {0xc2b0, 0x00f8},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_win874.map b/src/backend/utils/mb/Unicode/utf8_to_win874.map
index cf0629f5ec8146debdab8b69641a7ff4eb16762e..d765744461fffdfabe2c5ff3d7f57c238905c991 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_win874.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_win874.map
@@ -1,5 +1,4 @@
-static pg_utf_to_local ULmapWIN874[ 98 ] = {
-  {0x0000, 0x0081},
+static pg_utf_to_local ULmapWIN874[ 97 ] = {
   {0xc2a0, 0x00a0},
   {0xe0b881, 0x00a1},
   {0xe0b882, 0x00a2},
diff --git a/src/backend/utils/mb/Unicode/win1250_to_utf8.map b/src/backend/utils/mb/Unicode/win1250_to_utf8.map
index c66f61f48f7ff00a1d857e47ce2fa6ba1d0dfe1c..22f44b7f58ac5ecd6cc71a56b1f93dd3ef090ddd 100644
--- a/src/backend/utils/mb/Unicode/win1250_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/win1250_to_utf8.map
@@ -1,13 +1,10 @@
-static pg_local_to_utf LUmapWIN1250[ 128 ] = {
+static pg_local_to_utf LUmapWIN1250[ 123 ] = {
   {0x0080, 0xe282ac},
-  {0x0081, 0x0000},
   {0x0082, 0xe2809a},
-  {0x0083, 0x0000},
   {0x0084, 0xe2809e},
   {0x0085, 0xe280a6},
   {0x0086, 0xe280a0},
   {0x0087, 0xe280a1},
-  {0x0088, 0x0000},
   {0x0089, 0xe280b0},
   {0x008a, 0xc5a0},
   {0x008b, 0xe280b9},
@@ -15,7 +12,6 @@ static pg_local_to_utf LUmapWIN1250[ 128 ] = {
   {0x008d, 0xc5a4},
   {0x008e, 0xc5bd},
   {0x008f, 0xc5b9},
-  {0x0090, 0x0000},
   {0x0091, 0xe28098},
   {0x0092, 0xe28099},
   {0x0093, 0xe2809c},
@@ -23,7 +19,6 @@ static pg_local_to_utf LUmapWIN1250[ 128 ] = {
   {0x0095, 0xe280a2},
   {0x0096, 0xe28093},
   {0x0097, 0xe28094},
-  {0x0098, 0x0000},
   {0x0099, 0xe284a2},
   {0x009a, 0xc5a1},
   {0x009b, 0xe280ba},
diff --git a/src/backend/utils/mb/Unicode/win1251_to_utf8.map b/src/backend/utils/mb/Unicode/win1251_to_utf8.map
index 855575cd51500698a720cacc8e3072d53d987aaa..cdea6fe4459c48a588d68585542497c5ef0b952d 100644
--- a/src/backend/utils/mb/Unicode/win1251_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/win1251_to_utf8.map
@@ -1,4 +1,4 @@
-static pg_local_to_utf LUmapWIN1251[ 128 ] = {
+static pg_local_to_utf LUmapWIN1251[ 127 ] = {
   {0x0080, 0xd082},
   {0x0081, 0xd083},
   {0x0082, 0xe2809a},
@@ -7,7 +7,7 @@ static pg_local_to_utf LUmapWIN1251[ 128 ] = {
   {0x0085, 0xe280a6},
   {0x0086, 0xe280a0},
   {0x0087, 0xe280a1},
-  {0x0088, 0x0000},
+  {0x0088, 0xe282ac},
   {0x0089, 0xe280b0},
   {0x008a, 0xd089},
   {0x008b, 0xe280b9},
@@ -23,7 +23,6 @@ static pg_local_to_utf LUmapWIN1251[ 128 ] = {
   {0x0095, 0xe280a2},
   {0x0096, 0xe28093},
   {0x0097, 0xe28094},
-  {0x0098, 0x0000},
   {0x0099, 0xe284a2},
   {0x009a, 0xd199},
   {0x009b, 0xe280ba},
diff --git a/src/backend/utils/mb/Unicode/win1252_to_utf8.map b/src/backend/utils/mb/Unicode/win1252_to_utf8.map
index 636baf859f0e5bb5ec40b989ed6ccfbab185c321..ad849ee011dd98349e2a7593f718532b054da0f8 100644
--- a/src/backend/utils/mb/Unicode/win1252_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/win1252_to_utf8.map
@@ -1,6 +1,5 @@
-static pg_local_to_utf LUmapWIN1252[ 128 ] = {
+static pg_local_to_utf LUmapWIN1252[ 123 ] = {
   {0x0080, 0xe282ac},
-  {0x0081, 0x0000},
   {0x0082, 0xe2809a},
   {0x0083, 0xc692},
   {0x0084, 0xe2809e},
@@ -12,10 +11,7 @@ static pg_local_to_utf LUmapWIN1252[ 128 ] = {
   {0x008a, 0xc5a0},
   {0x008b, 0xe280b9},
   {0x008c, 0xc592},
-  {0x008d, 0x0000},
   {0x008e, 0xc5bd},
-  {0x008f, 0x0000},
-  {0x0090, 0x0000},
   {0x0091, 0xe28098},
   {0x0092, 0xe28099},
   {0x0093, 0xe2809c},
@@ -28,7 +24,6 @@ static pg_local_to_utf LUmapWIN1252[ 128 ] = {
   {0x009a, 0xc5a1},
   {0x009b, 0xe280ba},
   {0x009c, 0xc593},
-  {0x009d, 0x0000},
   {0x009e, 0xc5be},
   {0x009f, 0xc5b8},
   {0x00a0, 0xc2a0},
diff --git a/src/backend/utils/mb/Unicode/win1253_to_utf8.map b/src/backend/utils/mb/Unicode/win1253_to_utf8.map
new file mode 100644
index 0000000000000000000000000000000000000000..519a435d7507a0054b411b46f2a2f3d223c5eae9
--- /dev/null
+++ b/src/backend/utils/mb/Unicode/win1253_to_utf8.map
@@ -0,0 +1,113 @@
+static pg_local_to_utf LUmapWIN1253[ 111 ] = {
+  {0x0080, 0xe282ac},
+  {0x0082, 0xe2809a},
+  {0x0083, 0xc692},
+  {0x0084, 0xe2809e},
+  {0x0085, 0xe280a6},
+  {0x0086, 0xe280a0},
+  {0x0087, 0xe280a1},
+  {0x0089, 0xe280b0},
+  {0x008b, 0xe280b9},
+  {0x0091, 0xe28098},
+  {0x0092, 0xe28099},
+  {0x0093, 0xe2809c},
+  {0x0094, 0xe2809d},
+  {0x0095, 0xe280a2},
+  {0x0096, 0xe28093},
+  {0x0097, 0xe28094},
+  {0x0099, 0xe284a2},
+  {0x009b, 0xe280ba},
+  {0x00a0, 0xc2a0},
+  {0x00a1, 0xce85},
+  {0x00a2, 0xce86},
+  {0x00a3, 0xc2a3},
+  {0x00a4, 0xc2a4},
+  {0x00a5, 0xc2a5},
+  {0x00a6, 0xc2a6},
+  {0x00a7, 0xc2a7},
+  {0x00a8, 0xc2a8},
+  {0x00a9, 0xc2a9},
+  {0x00ab, 0xc2ab},
+  {0x00ac, 0xc2ac},
+  {0x00ad, 0xc2ad},
+  {0x00ae, 0xc2ae},
+  {0x00af, 0xe28095},
+  {0x00b0, 0xc2b0},
+  {0x00b1, 0xc2b1},
+  {0x00b2, 0xc2b2},
+  {0x00b3, 0xc2b3},
+  {0x00b4, 0xce84},
+  {0x00b5, 0xc2b5},
+  {0x00b6, 0xc2b6},
+  {0x00b7, 0xc2b7},
+  {0x00b8, 0xce88},
+  {0x00b9, 0xce89},
+  {0x00ba, 0xce8a},
+  {0x00bb, 0xc2bb},
+  {0x00bc, 0xce8c},
+  {0x00bd, 0xc2bd},
+  {0x00be, 0xce8e},
+  {0x00bf, 0xce8f},
+  {0x00c0, 0xce90},
+  {0x00c1, 0xce91},
+  {0x00c2, 0xce92},
+  {0x00c3, 0xce93},
+  {0x00c4, 0xce94},
+  {0x00c5, 0xce95},
+  {0x00c6, 0xce96},
+  {0x00c7, 0xce97},
+  {0x00c8, 0xce98},
+  {0x00c9, 0xce99},
+  {0x00ca, 0xce9a},
+  {0x00cb, 0xce9b},
+  {0x00cc, 0xce9c},
+  {0x00cd, 0xce9d},
+  {0x00ce, 0xce9e},
+  {0x00cf, 0xce9f},
+  {0x00d0, 0xcea0},
+  {0x00d1, 0xcea1},
+  {0x00d3, 0xcea3},
+  {0x00d4, 0xcea4},
+  {0x00d5, 0xcea5},
+  {0x00d6, 0xcea6},
+  {0x00d7, 0xcea7},
+  {0x00d8, 0xcea8},
+  {0x00d9, 0xcea9},
+  {0x00da, 0xceaa},
+  {0x00db, 0xceab},
+  {0x00dc, 0xceac},
+  {0x00dd, 0xcead},
+  {0x00de, 0xceae},
+  {0x00df, 0xceaf},
+  {0x00e0, 0xceb0},
+  {0x00e1, 0xceb1},
+  {0x00e2, 0xceb2},
+  {0x00e3, 0xceb3},
+  {0x00e4, 0xceb4},
+  {0x00e5, 0xceb5},
+  {0x00e6, 0xceb6},
+  {0x00e7, 0xceb7},
+  {0x00e8, 0xceb8},
+  {0x00e9, 0xceb9},
+  {0x00ea, 0xceba},
+  {0x00eb, 0xcebb},
+  {0x00ec, 0xcebc},
+  {0x00ed, 0xcebd},
+  {0x00ee, 0xcebe},
+  {0x00ef, 0xcebf},
+  {0x00f0, 0xcf80},
+  {0x00f1, 0xcf81},
+  {0x00f2, 0xcf82},
+  {0x00f3, 0xcf83},
+  {0x00f4, 0xcf84},
+  {0x00f5, 0xcf85},
+  {0x00f6, 0xcf86},
+  {0x00f7, 0xcf87},
+  {0x00f8, 0xcf88},
+  {0x00f9, 0xcf89},
+  {0x00fa, 0xcf8a},
+  {0x00fb, 0xcf8b},
+  {0x00fc, 0xcf8c},
+  {0x00fd, 0xcf8d},
+  {0x00fe, 0xcf8e}
+};
diff --git a/src/backend/utils/mb/Unicode/win1254_to_utf8.map b/src/backend/utils/mb/Unicode/win1254_to_utf8.map
new file mode 100644
index 0000000000000000000000000000000000000000..370e4bc910100b77721534c19b9df2d1af5d4f82
--- /dev/null
+++ b/src/backend/utils/mb/Unicode/win1254_to_utf8.map
@@ -0,0 +1,123 @@
+static pg_local_to_utf LUmapWIN1254[ 121 ] = {
+  {0x0080, 0xe282ac},
+  {0x0082, 0xe2809a},
+  {0x0083, 0xc692},
+  {0x0084, 0xe2809e},
+  {0x0085, 0xe280a6},
+  {0x0086, 0xe280a0},
+  {0x0087, 0xe280a1},
+  {0x0088, 0xcb86},
+  {0x0089, 0xe280b0},
+  {0x008a, 0xc5a0},
+  {0x008b, 0xe280b9},
+  {0x008c, 0xc592},
+  {0x0091, 0xe28098},
+  {0x0092, 0xe28099},
+  {0x0093, 0xe2809c},
+  {0x0094, 0xe2809d},
+  {0x0095, 0xe280a2},
+  {0x0096, 0xe28093},
+  {0x0097, 0xe28094},
+  {0x0098, 0xcb9c},
+  {0x0099, 0xe284a2},
+  {0x009a, 0xc5a1},
+  {0x009b, 0xe280ba},
+  {0x009c, 0xc593},
+  {0x009f, 0xc5b8},
+  {0x00a0, 0xc2a0},
+  {0x00a1, 0xc2a1},
+  {0x00a2, 0xc2a2},
+  {0x00a3, 0xc2a3},
+  {0x00a4, 0xc2a4},
+  {0x00a5, 0xc2a5},
+  {0x00a6, 0xc2a6},
+  {0x00a7, 0xc2a7},
+  {0x00a8, 0xc2a8},
+  {0x00a9, 0xc2a9},
+  {0x00aa, 0xc2aa},
+  {0x00ab, 0xc2ab},
+  {0x00ac, 0xc2ac},
+  {0x00ad, 0xc2ad},
+  {0x00ae, 0xc2ae},
+  {0x00af, 0xc2af},
+  {0x00b0, 0xc2b0},
+  {0x00b1, 0xc2b1},
+  {0x00b2, 0xc2b2},
+  {0x00b3, 0xc2b3},
+  {0x00b4, 0xc2b4},
+  {0x00b5, 0xc2b5},
+  {0x00b6, 0xc2b6},
+  {0x00b7, 0xc2b7},
+  {0x00b8, 0xc2b8},
+  {0x00b9, 0xc2b9},
+  {0x00ba, 0xc2ba},
+  {0x00bb, 0xc2bb},
+  {0x00bc, 0xc2bc},
+  {0x00bd, 0xc2bd},
+  {0x00be, 0xc2be},
+  {0x00bf, 0xc2bf},
+  {0x00c0, 0xc380},
+  {0x00c1, 0xc381},
+  {0x00c2, 0xc382},
+  {0x00c3, 0xc383},
+  {0x00c4, 0xc384},
+  {0x00c5, 0xc385},
+  {0x00c6, 0xc386},
+  {0x00c7, 0xc387},
+  {0x00c8, 0xc388},
+  {0x00c9, 0xc389},
+  {0x00ca, 0xc38a},
+  {0x00cb, 0xc38b},
+  {0x00cc, 0xc38c},
+  {0x00cd, 0xc38d},
+  {0x00ce, 0xc38e},
+  {0x00cf, 0xc38f},
+  {0x00d0, 0xc49e},
+  {0x00d1, 0xc391},
+  {0x00d2, 0xc392},
+  {0x00d3, 0xc393},
+  {0x00d4, 0xc394},
+  {0x00d5, 0xc395},
+  {0x00d6, 0xc396},
+  {0x00d7, 0xc397},
+  {0x00d8, 0xc398},
+  {0x00d9, 0xc399},
+  {0x00da, 0xc39a},
+  {0x00db, 0xc39b},
+  {0x00dc, 0xc39c},
+  {0x00dd, 0xc4b0},
+  {0x00de, 0xc59e},
+  {0x00df, 0xc39f},
+  {0x00e0, 0xc3a0},
+  {0x00e1, 0xc3a1},
+  {0x00e2, 0xc3a2},
+  {0x00e3, 0xc3a3},
+  {0x00e4, 0xc3a4},
+  {0x00e5, 0xc3a5},
+  {0x00e6, 0xc3a6},
+  {0x00e7, 0xc3a7},
+  {0x00e8, 0xc3a8},
+  {0x00e9, 0xc3a9},
+  {0x00ea, 0xc3aa},
+  {0x00eb, 0xc3ab},
+  {0x00ec, 0xc3ac},
+  {0x00ed, 0xc3ad},
+  {0x00ee, 0xc3ae},
+  {0x00ef, 0xc3af},
+  {0x00f0, 0xc49f},
+  {0x00f1, 0xc3b1},
+  {0x00f2, 0xc3b2},
+  {0x00f3, 0xc3b3},
+  {0x00f4, 0xc3b4},
+  {0x00f5, 0xc3b5},
+  {0x00f6, 0xc3b6},
+  {0x00f7, 0xc3b7},
+  {0x00f8, 0xc3b8},
+  {0x00f9, 0xc3b9},
+  {0x00fa, 0xc3ba},
+  {0x00fb, 0xc3bb},
+  {0x00fc, 0xc3bc},
+  {0x00fd, 0xc4b1},
+  {0x00fe, 0xc59f},
+  {0x00ff, 0xc3bf}
+};
diff --git a/src/backend/utils/mb/Unicode/win1255_to_utf8.map b/src/backend/utils/mb/Unicode/win1255_to_utf8.map
new file mode 100644
index 0000000000000000000000000000000000000000..f5d7454c29f8bbd38e2da21751cc1d0a9c7c2acd
--- /dev/null
+++ b/src/backend/utils/mb/Unicode/win1255_to_utf8.map
@@ -0,0 +1,107 @@
+static pg_local_to_utf LUmapWIN1255[ 105 ] = {
+  {0x0080, 0xe282ac},
+  {0x0082, 0xe2809a},
+  {0x0083, 0xc692},
+  {0x0084, 0xe2809e},
+  {0x0085, 0xe280a6},
+  {0x0086, 0xe280a0},
+  {0x0087, 0xe280a1},
+  {0x0088, 0xcb86},
+  {0x0089, 0xe280b0},
+  {0x008b, 0xe280b9},
+  {0x0091, 0xe28098},
+  {0x0092, 0xe28099},
+  {0x0093, 0xe2809c},
+  {0x0094, 0xe2809d},
+  {0x0095, 0xe280a2},
+  {0x0096, 0xe28093},
+  {0x0097, 0xe28094},
+  {0x0098, 0xcb9c},
+  {0x0099, 0xe284a2},
+  {0x009b, 0xe280ba},
+  {0x00a0, 0xc2a0},
+  {0x00a1, 0xc2a1},
+  {0x00a2, 0xc2a2},
+  {0x00a3, 0xc2a3},
+  {0x00a4, 0xe282aa},
+  {0x00a5, 0xc2a5},
+  {0x00a6, 0xc2a6},
+  {0x00a7, 0xc2a7},
+  {0x00a8, 0xc2a8},
+  {0x00a9, 0xc2a9},
+  {0x00aa, 0xc397},
+  {0x00ab, 0xc2ab},
+  {0x00ac, 0xc2ac},
+  {0x00ad, 0xc2ad},
+  {0x00ae, 0xc2ae},
+  {0x00af, 0xc2af},
+  {0x00b0, 0xc2b0},
+  {0x00b1, 0xc2b1},
+  {0x00b2, 0xc2b2},
+  {0x00b3, 0xc2b3},
+  {0x00b4, 0xc2b4},
+  {0x00b5, 0xc2b5},
+  {0x00b6, 0xc2b6},
+  {0x00b7, 0xc2b7},
+  {0x00b8, 0xc2b8},
+  {0x00b9, 0xc2b9},
+  {0x00ba, 0xc3b7},
+  {0x00bb, 0xc2bb},
+  {0x00bc, 0xc2bc},
+  {0x00bd, 0xc2bd},
+  {0x00be, 0xc2be},
+  {0x00bf, 0xc2bf},
+  {0x00c0, 0xd6b0},
+  {0x00c1, 0xd6b1},
+  {0x00c2, 0xd6b2},
+  {0x00c3, 0xd6b3},
+  {0x00c4, 0xd6b4},
+  {0x00c5, 0xd6b5},
+  {0x00c6, 0xd6b6},
+  {0x00c7, 0xd6b7},
+  {0x00c8, 0xd6b8},
+  {0x00c9, 0xd6b9},
+  {0x00cb, 0xd6bb},
+  {0x00cc, 0xd6bc},
+  {0x00cd, 0xd6bd},
+  {0x00ce, 0xd6be},
+  {0x00cf, 0xd6bf},
+  {0x00d0, 0xd780},
+  {0x00d1, 0xd781},
+  {0x00d2, 0xd782},
+  {0x00d3, 0xd783},
+  {0x00d4, 0xd7b0},
+  {0x00d5, 0xd7b1},
+  {0x00d6, 0xd7b2},
+  {0x00d7, 0xd7b3},
+  {0x00d8, 0xd7b4},
+  {0x00e0, 0xd790},
+  {0x00e1, 0xd791},
+  {0x00e2, 0xd792},
+  {0x00e3, 0xd793},
+  {0x00e4, 0xd794},
+  {0x00e5, 0xd795},
+  {0x00e6, 0xd796},
+  {0x00e7, 0xd797},
+  {0x00e8, 0xd798},
+  {0x00e9, 0xd799},
+  {0x00ea, 0xd79a},
+  {0x00eb, 0xd79b},
+  {0x00ec, 0xd79c},
+  {0x00ed, 0xd79d},
+  {0x00ee, 0xd79e},
+  {0x00ef, 0xd79f},
+  {0x00f0, 0xd7a0},
+  {0x00f1, 0xd7a1},
+  {0x00f2, 0xd7a2},
+  {0x00f3, 0xd7a3},
+  {0x00f4, 0xd7a4},
+  {0x00f5, 0xd7a5},
+  {0x00f6, 0xd7a6},
+  {0x00f7, 0xd7a7},
+  {0x00f8, 0xd7a8},
+  {0x00f9, 0xd7a9},
+  {0x00fa, 0xd7aa},
+  {0x00fd, 0xe2808e},
+  {0x00fe, 0xe2808f}
+};
diff --git a/src/backend/utils/mb/Unicode/win1257_to_utf8.map b/src/backend/utils/mb/Unicode/win1257_to_utf8.map
new file mode 100644
index 0000000000000000000000000000000000000000..45d946d57c9c6f585a6b5e357d4814eb45778c3b
--- /dev/null
+++ b/src/backend/utils/mb/Unicode/win1257_to_utf8.map
@@ -0,0 +1,118 @@
+static pg_local_to_utf LUmapWIN1257[ 116 ] = {
+  {0x0080, 0xe282ac},
+  {0x0082, 0xe2809a},
+  {0x0084, 0xe2809e},
+  {0x0085, 0xe280a6},
+  {0x0086, 0xe280a0},
+  {0x0087, 0xe280a1},
+  {0x0089, 0xe280b0},
+  {0x008b, 0xe280b9},
+  {0x008d, 0xc2a8},
+  {0x008e, 0xcb87},
+  {0x008f, 0xc2b8},
+  {0x0091, 0xe28098},
+  {0x0092, 0xe28099},
+  {0x0093, 0xe2809c},
+  {0x0094, 0xe2809d},
+  {0x0095, 0xe280a2},
+  {0x0096, 0xe28093},
+  {0x0097, 0xe28094},
+  {0x0099, 0xe284a2},
+  {0x009b, 0xe280ba},
+  {0x009d, 0xc2af},
+  {0x009e, 0xcb9b},
+  {0x00a0, 0xc2a0},
+  {0x00a2, 0xc2a2},
+  {0x00a3, 0xc2a3},
+  {0x00a4, 0xc2a4},
+  {0x00a6, 0xc2a6},
+  {0x00a7, 0xc2a7},
+  {0x00a8, 0xc398},
+  {0x00a9, 0xc2a9},
+  {0x00aa, 0xc596},
+  {0x00ab, 0xc2ab},
+  {0x00ac, 0xc2ac},
+  {0x00ad, 0xc2ad},
+  {0x00ae, 0xc2ae},
+  {0x00af, 0xc386},
+  {0x00b0, 0xc2b0},
+  {0x00b1, 0xc2b1},
+  {0x00b2, 0xc2b2},
+  {0x00b3, 0xc2b3},
+  {0x00b4, 0xc2b4},
+  {0x00b5, 0xc2b5},
+  {0x00b6, 0xc2b6},
+  {0x00b7, 0xc2b7},
+  {0x00b8, 0xc3b8},
+  {0x00b9, 0xc2b9},
+  {0x00ba, 0xc597},
+  {0x00bb, 0xc2bb},
+  {0x00bc, 0xc2bc},
+  {0x00bd, 0xc2bd},
+  {0x00be, 0xc2be},
+  {0x00bf, 0xc3a6},
+  {0x00c0, 0xc484},
+  {0x00c1, 0xc4ae},
+  {0x00c2, 0xc480},
+  {0x00c3, 0xc486},
+  {0x00c4, 0xc384},
+  {0x00c5, 0xc385},
+  {0x00c6, 0xc498},
+  {0x00c7, 0xc492},
+  {0x00c8, 0xc48c},
+  {0x00c9, 0xc389},
+  {0x00ca, 0xc5b9},
+  {0x00cb, 0xc496},
+  {0x00cc, 0xc4a2},
+  {0x00cd, 0xc4b6},
+  {0x00ce, 0xc4aa},
+  {0x00cf, 0xc4bb},
+  {0x00d0, 0xc5a0},
+  {0x00d1, 0xc583},
+  {0x00d2, 0xc585},
+  {0x00d3, 0xc393},
+  {0x00d4, 0xc58c},
+  {0x00d5, 0xc395},
+  {0x00d6, 0xc396},
+  {0x00d7, 0xc397},
+  {0x00d8, 0xc5b2},
+  {0x00d9, 0xc581},
+  {0x00da, 0xc59a},
+  {0x00db, 0xc5aa},
+  {0x00dc, 0xc39c},
+  {0x00dd, 0xc5bb},
+  {0x00de, 0xc5bd},
+  {0x00df, 0xc39f},
+  {0x00e0, 0xc485},
+  {0x00e1, 0xc4af},
+  {0x00e2, 0xc481},
+  {0x00e3, 0xc487},
+  {0x00e4, 0xc3a4},
+  {0x00e5, 0xc3a5},
+  {0x00e6, 0xc499},
+  {0x00e7, 0xc493},
+  {0x00e8, 0xc48d},
+  {0x00e9, 0xc3a9},
+  {0x00ea, 0xc5ba},
+  {0x00eb, 0xc497},
+  {0x00ec, 0xc4a3},
+  {0x00ed, 0xc4b7},
+  {0x00ee, 0xc4ab},
+  {0x00ef, 0xc4bc},
+  {0x00f0, 0xc5a1},
+  {0x00f1, 0xc584},
+  {0x00f2, 0xc586},
+  {0x00f3, 0xc3b3},
+  {0x00f4, 0xc58d},
+  {0x00f5, 0xc3b5},
+  {0x00f6, 0xc3b6},
+  {0x00f7, 0xc3b7},
+  {0x00f8, 0xc5b3},
+  {0x00f9, 0xc582},
+  {0x00fa, 0xc59b},
+  {0x00fb, 0xc5ab},
+  {0x00fc, 0xc3bc},
+  {0x00fd, 0xc5bc},
+  {0x00fe, 0xc5be},
+  {0x00ff, 0xcb99}
+};
diff --git a/src/backend/utils/mb/Unicode/win1258_to_utf8.map b/src/backend/utils/mb/Unicode/win1258_to_utf8.map
index 0596d8ba4ff2f800ce585a63daa943c5ff942b85..ed8a9146fc1812c52a48387fbda114c5eac3e8b8 100644
--- a/src/backend/utils/mb/Unicode/win1258_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/win1258_to_utf8.map
@@ -1,6 +1,5 @@
-static pg_local_to_utf LUmapWIN1258[ 128 ] = {
+static pg_local_to_utf LUmapWIN1258[ 119 ] = {
   {0x0080, 0xe282ac},
-  {0x0081, 0x0000},
   {0x0082, 0xe2809a},
   {0x0083, 0xc692},
   {0x0084, 0xe2809e},
@@ -9,13 +8,8 @@ static pg_local_to_utf LUmapWIN1258[ 128 ] = {
   {0x0087, 0xe280a1},
   {0x0088, 0xcb86},
   {0x0089, 0xe280b0},
-  {0x008a, 0x0000},
   {0x008b, 0xe280b9},
   {0x008c, 0xc592},
-  {0x008d, 0x0000},
-  {0x008e, 0x0000},
-  {0x008f, 0x0000},
-  {0x0090, 0x0000},
   {0x0091, 0xe28098},
   {0x0092, 0xe28099},
   {0x0093, 0xe2809c},
@@ -25,11 +19,8 @@ static pg_local_to_utf LUmapWIN1258[ 128 ] = {
   {0x0097, 0xe28094},
   {0x0098, 0xcb9c},
   {0x0099, 0xe284a2},
-  {0x009a, 0x0000},
   {0x009b, 0xe280ba},
   {0x009c, 0xc593},
-  {0x009d, 0x0000},
-  {0x009e, 0x0000},
   {0x009f, 0xc5b8},
   {0x00a0, 0xc2a0},
   {0x00a1, 0xc2a1},
diff --git a/src/backend/utils/mb/Unicode/win874_to_utf8.map b/src/backend/utils/mb/Unicode/win874_to_utf8.map
index 694a51bb430c585a58dfec1a217b542e242357c4..bd4eadbbb6a54654f034ebd96145f706f0e6efbc 100644
--- a/src/backend/utils/mb/Unicode/win874_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/win874_to_utf8.map
@@ -1,21 +1,6 @@
-static pg_local_to_utf LUmapWIN874[ 128 ] = {
+static pg_local_to_utf LUmapWIN874[ 97 ] = {
   {0x0080, 0xe282ac},
-  {0x0081, 0x0000},
-  {0x0082, 0x0000},
-  {0x0083, 0x0000},
-  {0x0084, 0x0000},
   {0x0085, 0xe280a6},
-  {0x0086, 0x0000},
-  {0x0087, 0x0000},
-  {0x0088, 0x0000},
-  {0x0089, 0x0000},
-  {0x008a, 0x0000},
-  {0x008b, 0x0000},
-  {0x008c, 0x0000},
-  {0x008d, 0x0000},
-  {0x008e, 0x0000},
-  {0x008f, 0x0000},
-  {0x0090, 0x0000},
   {0x0091, 0xe28098},
   {0x0092, 0xe28099},
   {0x0093, 0xe2809c},
@@ -23,14 +8,6 @@ static pg_local_to_utf LUmapWIN874[ 128 ] = {
   {0x0095, 0xe280a2},
   {0x0096, 0xe28093},
   {0x0097, 0xe28094},
-  {0x0098, 0x0000},
-  {0x0099, 0x0000},
-  {0x009a, 0x0000},
-  {0x009b, 0x0000},
-  {0x009c, 0x0000},
-  {0x009d, 0x0000},
-  {0x009e, 0x0000},
-  {0x009f, 0x0000},
   {0x00a0, 0xc2a0},
   {0x00a1, 0xe0b881},
   {0x00a2, 0xe0b882},
@@ -90,10 +67,6 @@ static pg_local_to_utf LUmapWIN874[ 128 ] = {
   {0x00d8, 0xe0b8b8},
   {0x00d9, 0xe0b8b9},
   {0x00da, 0xe0b8ba},
-  {0x00db, 0x0000},
-  {0x00dc, 0x0000},
-  {0x00dd, 0x0000},
-  {0x00de, 0x0000},
   {0x00df, 0xe0b8bf},
   {0x00e0, 0xe0b980},
   {0x00e1, 0xe0b981},
@@ -122,9 +95,5 @@ static pg_local_to_utf LUmapWIN874[ 128 ] = {
   {0x00f8, 0xe0b998},
   {0x00f9, 0xe0b999},
   {0x00fa, 0xe0b99a},
-  {0x00fb, 0xe0b99b},
-  {0x00fc, 0x0000},
-  {0x00fd, 0x0000},
-  {0x00fe, 0x0000},
-  {0x00ff, 0x0000}
+  {0x00fb, 0xe0b99b}
 };
diff --git a/src/backend/utils/mb/conversion_procs/Makefile b/src/backend/utils/mb/conversion_procs/Makefile
index 40425f1df6f5ff3b9afe26538445a08c5107872c..cf07f42560b036f34d58ae488d4534c64927cff6 100644
--- a/src/backend/utils/mb/conversion_procs/Makefile
+++ b/src/backend/utils/mb/conversion_procs/Makefile
@@ -4,7 +4,7 @@
 #    Makefile for utils/mb/conversion_procs
 #
 # IDENTIFICATION
-#    $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/Makefile,v 1.15 2005/12/09 21:19:35 petere Exp $
+#    $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/Makefile,v 1.16 2006/02/18 16:15:22 petere Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -23,8 +23,7 @@ DIRS = \
 	utf8_and_ascii utf8_and_big5 utf8_and_cyrillic utf8_and_euc_cn \
 	utf8_and_euc_jp utf8_and_euc_kr utf8_and_euc_tw utf8_and_gb18030 \
 	utf8_and_gbk utf8_and_iso8859 utf8_and_iso8859_1 utf8_and_johab \
-	utf8_and_sjis utf8_and_win1258 utf8_and_uhc utf8_and_win1250 \
-	utf8_and_win1252 utf8_and_win1256 utf8_and_win874
+	utf8_and_sjis utf8_and_win utf8_and_uhc
 
 # conversion_name source_encoding destination_encoding function object
 CONVERSIONS = \
@@ -84,12 +83,28 @@ CONVERSIONS = \
 		utf8_to_big5 UTF8 BIG5 utf8_to_big5 utf8_and_big5 \
 		utf8_to_koi8_r	UTF8 KOI8R utf8_to_koi8r utf8_and_cyrillic \
 		koi8_r_to_utf8	KOI8R UTF8 koi8r_to_utf8 utf8_and_cyrillic \
-		utf8_to_windows_1251	UTF8 WIN1251 utf8_to_win1251 utf8_and_cyrillic \
-		windows_1251_to_utf8	WIN1251 UTF8 win1251_to_utf8 utf8_and_cyrillic \
-		utf8_to_windows_1252	UTF8 WIN1252 utf8_to_win1252 utf8_and_win1252 \
-		windows_1252_to_utf8	WIN1252 UTF8 win1252_to_utf8 utf8_and_win1252 \
-		utf8_to_windows_866	UTF8 WIN866 utf8_to_win866 utf8_and_cyrillic \
-		windows_866_to_utf8	WIN866 UTF8 win866_to_utf8 utf8_and_cyrillic \
+		utf8_to_windows_866 UTF8 WIN866 utf8_to_win utf8_and_win \
+		windows_866_to_utf8 WIN866 UTF8 win_to_utf8 utf8_and_win \
+		utf8_to_windows_874 UTF8 WIN874 utf8_to_win utf8_and_win \
+		windows_874_to_utf8 WIN874 UTF8 win_to_utf8 utf8_and_win \
+		utf8_to_windows_1250 UTF8 WIN1250 utf8_to_win utf8_and_win \
+		windows_1250_to_utf8 WIN1250 UTF8 win_to_utf8 utf8_and_win \
+		utf8_to_windows_1251 UTF8 WIN1251 utf8_to_win utf8_and_win \
+		windows_1251_to_utf8 WIN1251 UTF8 win_to_utf8 utf8_and_win \
+		utf8_to_windows_1252 UTF8 WIN1252 utf8_to_win utf8_and_win \
+		windows_1252_to_utf8 WIN1252 UTF8 win_to_utf8 utf8_and_win \
+		utf8_to_windows_1253 UTF8 WIN1253 utf8_to_win utf8_and_win \
+		windows_1253_to_utf8 WIN1253 UTF8 win_to_utf8 utf8_and_win \
+		utf8_to_windows_1254 UTF8 WIN1254 utf8_to_win utf8_and_win \
+		windows_1254_to_utf8 WIN1254 UTF8 win_to_utf8 utf8_and_win \
+		utf8_to_windows_1255 UTF8 WIN1255 utf8_to_win utf8_and_win \
+		windows_1255_to_utf8 WIN1255 UTF8 win_to_utf8 utf8_and_win \
+		utf8_to_windows_1256 UTF8 WIN1256 utf8_to_win utf8_and_win \
+		windows_1256_to_utf8 WIN1256 UTF8 win_to_utf8 utf8_and_win \
+		utf8_to_windows_1257 UTF8 WIN1257 utf8_to_win utf8_and_win \
+		windows_1257_to_utf8 WIN1257 UTF8 win_to_utf8 utf8_and_win \
+		utf8_to_windows_1258 UTF8 WIN1258 utf8_to_win utf8_and_win \
+		windows_1258_to_utf8 WIN1258 UTF8 win_to_utf8 utf8_and_win \
 		euc_cn_to_utf8 EUC_CN UTF8 euc_cn_to_utf8 utf8_and_euc_cn \
 		utf8_to_euc_cn UTF8 EUC_CN utf8_to_euc_cn utf8_and_euc_cn \
 		euc_jp_to_utf8 EUC_JP UTF8 euc_jp_to_utf8 utf8_and_euc_jp \
@@ -134,16 +149,9 @@ CONVERSIONS = \
 		utf8_to_johab UTF8 JOHAB utf8_to_johab utf8_and_johab \
 		sjis_to_utf8 SJIS UTF8 sjis_to_utf8 utf8_and_sjis \
 		utf8_to_sjis UTF8 SJIS utf8_to_sjis utf8_and_sjis \
-		win1258_to_utf8 WIN1258 UTF8 win1258_to_utf8 utf8_and_win1258 \
-		utf8_to_win1258 UTF8 WIN1258 utf8_to_win1258 utf8_and_win1258 \
 		uhc_to_utf8 UHC UTF8 uhc_to_utf8 utf8_and_uhc \
-		utf8_to_uhc UTF8 UHC utf8_to_uhc utf8_and_uhc \
-		utf8_to_windows_1250  UTF8 WIN1250 utf8_to_win1250 utf8_and_win1250 \
-		windows_1250_to_utf8  WIN1250 UTF8 win1250_to_utf8 utf8_and_win1250 \
-		utf8_to_windows_1256  UTF8 WIN1256 utf8_to_win1256 utf8_and_win1256 \
-		windows_1256_to_utf8  WIN1256 UTF8 win1256_to_utf8 utf8_and_win1256 \
-		utf8_to_windows_874  UTF8 WIN874 utf8_to_win874 utf8_and_win874 \
-		windows_874_to_utf8  WIN874 UTF8 win874_to_utf8 utf8_and_win874
+		utf8_to_uhc UTF8 UHC utf8_to_uhc utf8_and_uhc
+
 
 all: $(SQLSCRIPT)
 	@for dir in $(DIRS); do $(MAKE) -C $$dir $@ || exit; done
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/utf8_and_cyrillic.c b/src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/utf8_and_cyrillic.c
index efab622c94f25c4d8cfa4d7e0ef79ee7aaa27191..f732cce720e71cd305dc804a1fa987ceb32ed611 100644
--- a/src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/utf8_and_cyrillic.c
+++ b/src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/utf8_and_cyrillic.c
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/utf8_and_cyrillic.c,v 1.12 2005/10/15 02:49:34 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/utf8_and_cyrillic.c,v 1.13 2006/02/18 16:15:22 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -16,24 +16,12 @@
 #include "mb/pg_wchar.h"
 #include "../../Unicode/utf8_to_koi8r.map"
 #include "../../Unicode/koi8r_to_utf8.map"
-#include "../../Unicode/utf8_to_win1251.map"
-#include "../../Unicode/win1251_to_utf8.map"
-#include "../../Unicode/utf8_to_win866.map"
-#include "../../Unicode/win866_to_utf8.map"
 
 PG_FUNCTION_INFO_V1(utf8_to_koi8r);
 PG_FUNCTION_INFO_V1(koi8r_to_utf8);
-PG_FUNCTION_INFO_V1(utf8_to_win1251);
-PG_FUNCTION_INFO_V1(win1251_to_utf8);
-PG_FUNCTION_INFO_V1(utf8_to_win866);
-PG_FUNCTION_INFO_V1(win866_to_utf8);
 
 extern Datum utf8_to_koi8r(PG_FUNCTION_ARGS);
 extern Datum koi8r_to_utf8(PG_FUNCTION_ARGS);
-extern Datum utf8_to_win1251(PG_FUNCTION_ARGS);
-extern Datum win1251_to_utf8(PG_FUNCTION_ARGS);
-extern Datum utf8_to_win866(PG_FUNCTION_ARGS);
-extern Datum win866_to_utf8(PG_FUNCTION_ARGS);
 
 /* ----------
  * conv_proc(
@@ -57,8 +45,8 @@ utf8_to_koi8r(PG_FUNCTION_ARGS)
 	Assert(PG_GETARG_INT32(1) == PG_KOI8R);
 	Assert(len >= 0);
 
-	UtfToLocal(src, dest, ULmap_KOI8R,
-			   sizeof(ULmap_KOI8R) / sizeof(pg_utf_to_local), len);
+	UtfToLocal(src, dest, ULmapKOI8R,
+			   sizeof(ULmapKOI8R) / sizeof(pg_utf_to_local), len);
 
 	PG_RETURN_VOID();
 }
@@ -80,70 +68,3 @@ koi8r_to_utf8(PG_FUNCTION_ARGS)
 	PG_RETURN_VOID();
 }
 
-Datum
-utf8_to_win1251(PG_FUNCTION_ARGS)
-{
-	unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
-	unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
-	int			len = PG_GETARG_INT32(4);
-
-	Assert(PG_GETARG_INT32(0) == PG_UTF8);
-	Assert(PG_GETARG_INT32(1) == PG_WIN1251);
-	Assert(len >= 0);
-
-	UtfToLocal(src, dest, ULmap_WIN1251,
-			   sizeof(ULmap_WIN1251) / sizeof(pg_utf_to_local), len);
-
-	PG_RETURN_VOID();
-}
-
-Datum
-win1251_to_utf8(PG_FUNCTION_ARGS)
-{
-	unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
-	unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
-	int			len = PG_GETARG_INT32(4);
-
-	Assert(PG_GETARG_INT32(0) == PG_WIN1251);
-	Assert(PG_GETARG_INT32(1) == PG_UTF8);
-	Assert(len >= 0);
-
-	LocalToUtf(src, dest, LUmapWIN1251,
-			sizeof(LUmapWIN1251) / sizeof(pg_local_to_utf), PG_WIN1251, len);
-
-	PG_RETURN_VOID();
-}
-
-Datum
-utf8_to_win866(PG_FUNCTION_ARGS)
-{
-	unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
-	unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
-	int			len = PG_GETARG_INT32(4);
-
-	Assert(PG_GETARG_INT32(0) == PG_UTF8);
-	Assert(PG_GETARG_INT32(1) == PG_WIN866);
-	Assert(len >= 0);
-
-	UtfToLocal(src, dest, ULmap_WIN866,
-			   sizeof(ULmap_WIN866) / sizeof(pg_utf_to_local), len);
-
-	PG_RETURN_VOID();
-}
-
-Datum
-win866_to_utf8(PG_FUNCTION_ARGS)
-{
-	unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
-	unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
-	int			len = PG_GETARG_INT32(4);
-
-	Assert(PG_GETARG_INT32(0) == PG_WIN866);
-	Assert(PG_GETARG_INT32(1) == PG_UTF8);
-	Assert(len >= 0);
-
-	LocalToUtf(src, dest, LUmapWIN866,
-			   sizeof(LUmapWIN866) / sizeof(pg_local_to_utf), PG_WIN866, len);
-
-	PG_RETURN_VOID();
-}
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_win874/Makefile b/src/backend/utils/mb/conversion_procs/utf8_and_win/Makefile
similarity index 69%
rename from src/backend/utils/mb/conversion_procs/utf8_and_win874/Makefile
rename to src/backend/utils/mb/conversion_procs/utf8_and_win/Makefile
index 0ec317ac5c1adc39a3ba6034be7771242e68d201..c7c6f18cdd1e2d97b9243ef9f3c7d469f9122869 100644
--- a/src/backend/utils/mb/conversion_procs/utf8_and_win874/Makefile
+++ b/src/backend/utils/mb/conversion_procs/utf8_and_win/Makefile
@@ -1,12 +1,12 @@
 #-------------------------------------------------------------------------
 #
-# $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_win874/Makefile,v 1.3 2003/11/29 22:40:43 pgsql Exp $
+# $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_win/Makefile,v 1.1 2006/02/18 16:15:22 petere Exp $
 #
 #-------------------------------------------------------------------------
-subdir = src/backend/utils/mb/conversion_procs/utf8_and_win874
+subdir = src/backend/utils/mb/conversion_procs/utf8_and_win
 top_builddir = ../../../../../..
 include $(top_builddir)/src/Makefile.global
 
-NAME		:= utf8_and_win874
+NAME		:= utf8_and_win
 
 include $(srcdir)/../proc.mk
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c b/src/backend/utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c
new file mode 100644
index 0000000000000000000000000000000000000000..43f878ee0f754d0d634c282cf22a6a8c43badb01
--- /dev/null
+++ b/src/backend/utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c
@@ -0,0 +1,156 @@
+/*-------------------------------------------------------------------------
+ *
+ *	  WIN <--> UTF8
+ *
+ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * IDENTIFICATION
+ *	  $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c,v 1.1 2006/02/18 16:15:22 petere Exp $
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#include "postgres.h"
+#include "fmgr.h"
+#include "mb/pg_wchar.h"
+#include "../../Unicode/utf8_to_win866.map"
+#include "../../Unicode/utf8_to_win874.map"
+#include "../../Unicode/utf8_to_win1250.map"
+#include "../../Unicode/utf8_to_win1251.map"
+#include "../../Unicode/utf8_to_win1252.map"
+#include "../../Unicode/utf8_to_win1253.map"
+#include "../../Unicode/utf8_to_win1254.map"
+#include "../../Unicode/utf8_to_win1255.map"
+#include "../../Unicode/utf8_to_win1256.map"
+#include "../../Unicode/utf8_to_win1257.map"
+#include "../../Unicode/utf8_to_win1258.map"
+#include "../../Unicode/win866_to_utf8.map"
+#include "../../Unicode/win874_to_utf8.map"
+#include "../../Unicode/win1250_to_utf8.map"
+#include "../../Unicode/win1251_to_utf8.map"
+#include "../../Unicode/win1252_to_utf8.map"
+#include "../../Unicode/win1253_to_utf8.map"
+#include "../../Unicode/win1254_to_utf8.map"
+#include "../../Unicode/win1255_to_utf8.map"
+#include "../../Unicode/win1256_to_utf8.map"
+#include "../../Unicode/win1257_to_utf8.map"
+#include "../../Unicode/win1258_to_utf8.map"
+
+PG_FUNCTION_INFO_V1(win_to_utf8);
+PG_FUNCTION_INFO_V1(utf8_to_win);
+
+extern Datum win_to_utf8(PG_FUNCTION_ARGS);
+extern Datum utf8_to_win(PG_FUNCTION_ARGS);
+
+/* ----------
+ * conv_proc(
+ *		INTEGER,	-- source encoding id
+ *		INTEGER,	-- destination encoding id
+ *		CSTRING,	-- source string (null terminated C string)
+ *		CSTRING,	-- destination string (null terminated C string)
+ *		INTEGER		-- source string length
+ * ) returns VOID;
+ * ----------
+ */
+
+typedef struct
+{
+	pg_enc		encoding;
+	pg_local_to_utf *map1;		/* to UTF8 map name */
+	pg_utf_to_local *map2;		/* from UTF8 map name */
+	int			size1;			/* size of map1 */
+	int			size2;			/* size of map2 */
+} pg_conv_map;
+
+static pg_conv_map maps[] = {
+	{PG_WIN866, LUmapWIN866, ULmapWIN866,
+		sizeof(LUmapWIN866) / sizeof(pg_local_to_utf),
+		sizeof(ULmapWIN866) / sizeof(pg_utf_to_local)},
+	{PG_WIN874, LUmapWIN874, ULmapWIN874,
+		sizeof(LUmapWIN874) / sizeof(pg_local_to_utf),
+		sizeof(ULmapWIN874) / sizeof(pg_utf_to_local)},
+	{PG_WIN1250, LUmapWIN1250, ULmapWIN1250,
+		sizeof(LUmapWIN1250) / sizeof(pg_local_to_utf),
+		sizeof(ULmapWIN1250) / sizeof(pg_utf_to_local)},
+	{PG_WIN1251, LUmapWIN1251, ULmapWIN1251,
+		sizeof(LUmapWIN1251) / sizeof(pg_local_to_utf),
+		sizeof(ULmapWIN1251) / sizeof(pg_utf_to_local)},
+	{PG_WIN1252, LUmapWIN1252, ULmapWIN1252,
+		sizeof(LUmapWIN1252) / sizeof(pg_local_to_utf),
+		sizeof(ULmapWIN1252) / sizeof(pg_utf_to_local)},
+	{PG_WIN1253, LUmapWIN1253, ULmapWIN1253,
+		sizeof(LUmapWIN1253) / sizeof(pg_local_to_utf),
+		sizeof(ULmapWIN1253) / sizeof(pg_utf_to_local)},
+	{PG_WIN1254, LUmapWIN1254, ULmapWIN1254,
+		sizeof(LUmapWIN1254) / sizeof(pg_local_to_utf),
+		sizeof(ULmapWIN1254) / sizeof(pg_utf_to_local)},
+	{PG_WIN1255, LUmapWIN1255, ULmapWIN1255,
+		sizeof(LUmapWIN1255) / sizeof(pg_local_to_utf),
+		sizeof(ULmapWIN1255) / sizeof(pg_utf_to_local)},
+	{PG_WIN1256, LUmapWIN1256, ULmapWIN1256,
+		sizeof(LUmapWIN1256) / sizeof(pg_local_to_utf),
+		sizeof(ULmapWIN1256) / sizeof(pg_utf_to_local)},
+	{PG_WIN1257, LUmapWIN1257, ULmapWIN1257,
+		sizeof(LUmapWIN1257) / sizeof(pg_local_to_utf),
+		sizeof(ULmapWIN1257) / sizeof(pg_utf_to_local)},
+	{PG_WIN1258, LUmapWIN1258, ULmapWIN1258,
+		sizeof(LUmapWIN1258) / sizeof(pg_local_to_utf),
+		sizeof(ULmapWIN1258) / sizeof(pg_utf_to_local)},
+};
+
+Datum
+win_to_utf8(PG_FUNCTION_ARGS)
+{
+	int			encoding = PG_GETARG_INT32(0);
+	unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
+	unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
+	int			len = PG_GETARG_INT32(4);
+	int	i;
+
+	Assert(PG_GETARG_INT32(1) == PG_UTF8);
+	Assert(len >= 0);
+
+	for (i=0;i<sizeof(maps)/sizeof(pg_conv_map);i++)
+	{
+		if (encoding == maps[i].encoding)
+		{
+			LocalToUtf(src, dest, maps[i].map1, maps[i].size1, encoding, len);
+			PG_RETURN_VOID();
+		}
+	}
+
+	ereport(ERROR,
+			(errcode(ERRCODE_INTERNAL_ERROR),
+			 errmsg("unexpected encoding id %d for WIN charsets", encoding)));
+
+	PG_RETURN_VOID();
+}
+
+Datum
+utf8_to_win(PG_FUNCTION_ARGS)
+{
+	int			encoding = PG_GETARG_INT32(1);
+	unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
+	unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
+	int			len = PG_GETARG_INT32(4);
+	int	i;
+
+	Assert(PG_GETARG_INT32(0) == PG_UTF8);
+	Assert(len >= 0);
+
+	for (i=0;i<sizeof(maps)/sizeof(pg_conv_map);i++)
+	{
+		if (encoding == maps[i].encoding)
+		{
+			UtfToLocal(src, dest, maps[i].map2, maps[i].size2, len);
+			PG_RETURN_VOID();
+		}
+	}
+
+	ereport(ERROR,
+			(errcode(ERRCODE_INTERNAL_ERROR),
+			 errmsg("unexpected encoding id %d for WIN charsets", encoding)));
+
+	PG_RETURN_VOID();
+}
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_win1250/Makefile b/src/backend/utils/mb/conversion_procs/utf8_and_win1250/Makefile
deleted file mode 100644
index 67ca71d3868bda7b236f5894a091e14cda4fcc78..0000000000000000000000000000000000000000
--- a/src/backend/utils/mb/conversion_procs/utf8_and_win1250/Makefile
+++ /dev/null
@@ -1,12 +0,0 @@
-#-------------------------------------------------------------------------
-#
-# $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_win1250/Makefile,v 1.3 2003/11/29 22:40:41 pgsql Exp $
-#
-#-------------------------------------------------------------------------
-subdir = src/backend/utils/mb/conversion_procs/utf8_and_win1250
-top_builddir = ../../../../../..
-include $(top_builddir)/src/Makefile.global
-
-NAME		:= utf8_and_win1250
-
-include $(srcdir)/../proc.mk
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_win1250/utf8_and_win1250.c b/src/backend/utils/mb/conversion_procs/utf8_and_win1250/utf8_and_win1250.c
deleted file mode 100644
index 6789ca7aaa5c9dc31dd9d0550ffcba5f30576d92..0000000000000000000000000000000000000000
--- a/src/backend/utils/mb/conversion_procs/utf8_and_win1250/utf8_and_win1250.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- *	  WIN1250 and UTF8
- *
- * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
- * Portions Copyright (c) 1994, Regents of the University of California
- *
- * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_win1250/utf8_and_win1250.c,v 1.13 2005/10/15 02:49:35 momjian Exp $
- *
- *-------------------------------------------------------------------------
- */
-
-#include "postgres.h"
-#include "fmgr.h"
-#include "mb/pg_wchar.h"
-#include "../../Unicode/utf8_to_win1250.map"
-#include "../../Unicode/win1250_to_utf8.map"
-
-PG_FUNCTION_INFO_V1(utf8_to_win1250);
-PG_FUNCTION_INFO_V1(win1250_to_utf8);
-
-extern Datum utf8_to_win1250(PG_FUNCTION_ARGS);
-extern Datum win1250_to_utf8(PG_FUNCTION_ARGS);
-
-/* ----------
- * conv_proc(
- *		INTEGER,	-- source encoding id
- *		INTEGER,	-- destination encoding id
- *		CSTRING,	-- source string (null terminated C string)
- *		CSTRING,	-- destination string (null terminated C string)
- *		INTEGER		-- source string length
- * ) returns VOID;
- * ----------
- */
-
-Datum
-utf8_to_win1250(PG_FUNCTION_ARGS)
-{
-	unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
-	unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
-	int			len = PG_GETARG_INT32(4);
-
-	Assert(PG_GETARG_INT32(0) == PG_UTF8);
-	Assert(PG_GETARG_INT32(1) == PG_WIN1250);
-	Assert(len >= 0);
-
-	UtfToLocal(src, dest, ULmapWIN1250,
-			   sizeof(ULmapWIN1250) / sizeof(pg_utf_to_local), len);
-
-	PG_RETURN_VOID();
-}
-
-Datum
-win1250_to_utf8(PG_FUNCTION_ARGS)
-{
-	unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
-	unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
-	int			len = PG_GETARG_INT32(4);
-
-	Assert(PG_GETARG_INT32(0) == PG_WIN1250);
-	Assert(PG_GETARG_INT32(1) == PG_UTF8);
-	Assert(len >= 0);
-
-	LocalToUtf(src, dest, LUmapWIN1250,
-			sizeof(LUmapWIN1250) / sizeof(pg_local_to_utf), PG_WIN1250, len);
-
-	PG_RETURN_VOID();
-}
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_win1252/Makefile b/src/backend/utils/mb/conversion_procs/utf8_and_win1252/Makefile
deleted file mode 100644
index 06c85a390d197ec67eb798500c25d1f86997247d..0000000000000000000000000000000000000000
--- a/src/backend/utils/mb/conversion_procs/utf8_and_win1252/Makefile
+++ /dev/null
@@ -1,12 +0,0 @@
-#-------------------------------------------------------------------------
-#
-# $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_win1252/Makefile,v 1.3 2005/03/14 18:31:22 momjian Exp $
-#
-#-------------------------------------------------------------------------
-subdir = src/backend/utils/mb/conversion_procs/utf8_and_win1252
-top_builddir = ../../../../../..
-include $(top_builddir)/src/Makefile.global
-
-NAME		:= utf8_and_win1252
-
-include $(srcdir)/../proc.mk
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_win1252/utf8_and_win1252.c b/src/backend/utils/mb/conversion_procs/utf8_and_win1252/utf8_and_win1252.c
deleted file mode 100644
index b4d2b2375a96bc7399b8a40640fa3d3f48f35b2d..0000000000000000000000000000000000000000
--- a/src/backend/utils/mb/conversion_procs/utf8_and_win1252/utf8_and_win1252.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- *	  WIN1252 and UTF8
- *
- * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
- * Portions Copyright (c) 1994, Regents of the University of California
- *
- * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_win1252/utf8_and_win1252.c,v 1.5 2005/10/15 02:49:35 momjian Exp $
- *
- *-------------------------------------------------------------------------
- */
-
-#include "postgres.h"
-#include "fmgr.h"
-#include "mb/pg_wchar.h"
-#include "../../Unicode/utf8_to_win1252.map"
-#include "../../Unicode/win1252_to_utf8.map"
-
-PG_FUNCTION_INFO_V1(utf8_to_win1252);
-PG_FUNCTION_INFO_V1(win1252_to_utf8);
-
-extern Datum utf8_to_win1252(PG_FUNCTION_ARGS);
-extern Datum win1252_to_utf8(PG_FUNCTION_ARGS);
-
-/* ----------
- * conv_proc(
- *		INTEGER,	-- source encoding id
- *		INTEGER,	-- destination encoding id
- *		CSTRING,	-- source string (null terminated C string)
- *		CSTRING,	-- destination string (null terminated C string)
- *		INTEGER		-- source string length
- * ) returns VOID;
- * ----------
- */
-
-Datum
-utf8_to_win1252(PG_FUNCTION_ARGS)
-{
-	unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
-	unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
-	int			len = PG_GETARG_INT32(4);
-
-	Assert(PG_GETARG_INT32(0) == PG_UTF8);
-	Assert(PG_GETARG_INT32(1) == PG_WIN1252);
-	Assert(len >= 0);
-
-	UtfToLocal(src, dest, ULmapWIN1252,
-			   sizeof(ULmapWIN1252) / sizeof(pg_utf_to_local), len);
-
-	PG_RETURN_VOID();
-}
-
-Datum
-win1252_to_utf8(PG_FUNCTION_ARGS)
-{
-	unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
-	unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
-	int			len = PG_GETARG_INT32(4);
-
-	Assert(PG_GETARG_INT32(0) == PG_WIN1252);
-	Assert(PG_GETARG_INT32(1) == PG_UTF8);
-	Assert(len >= 0);
-
-	LocalToUtf(src, dest, LUmapWIN1252,
-			sizeof(LUmapWIN1252) / sizeof(pg_local_to_utf), PG_WIN1252, len);
-
-	PG_RETURN_VOID();
-}
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_win1256/Makefile b/src/backend/utils/mb/conversion_procs/utf8_and_win1256/Makefile
deleted file mode 100644
index afefc2c3123e75c3e04c3a39af052e92ba412181..0000000000000000000000000000000000000000
--- a/src/backend/utils/mb/conversion_procs/utf8_and_win1256/Makefile
+++ /dev/null
@@ -1,12 +0,0 @@
-#-------------------------------------------------------------------------
-#
-# $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_win1256/Makefile,v 1.3 2003/11/29 22:40:42 pgsql Exp $
-#
-#-------------------------------------------------------------------------
-subdir = src/backend/utils/mb/conversion_procs/utf8_and_win1256
-top_builddir = ../../../../../..
-include $(top_builddir)/src/Makefile.global
-
-NAME		:= utf8_and_win1256
-
-include $(srcdir)/../proc.mk
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_win1256/utf8_and_win1256.c b/src/backend/utils/mb/conversion_procs/utf8_and_win1256/utf8_and_win1256.c
deleted file mode 100644
index d6b83d8f8373f343783a34d08ac2db9e3ed1f28c..0000000000000000000000000000000000000000
--- a/src/backend/utils/mb/conversion_procs/utf8_and_win1256/utf8_and_win1256.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- *	  WIN1256 and UTF8
- *
- * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
- * Portions Copyright (c) 1994, Regents of the University of California
- *
- * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_win1256/utf8_and_win1256.c,v 1.13 2005/10/15 02:49:35 momjian Exp $
- *
- *-------------------------------------------------------------------------
- */
-
-#include "postgres.h"
-#include "fmgr.h"
-#include "mb/pg_wchar.h"
-#include "../../Unicode/utf8_to_win1256.map"
-#include "../../Unicode/win1256_to_utf8.map"
-
-PG_FUNCTION_INFO_V1(utf8_to_win1256);
-PG_FUNCTION_INFO_V1(win1256_to_utf8);
-
-extern Datum utf8_to_win1256(PG_FUNCTION_ARGS);
-extern Datum win1256_to_utf8(PG_FUNCTION_ARGS);
-
-/* ----------
- * conv_proc(
- *		INTEGER,	-- source encoding id
- *		INTEGER,	-- destination encoding id
- *		CSTRING,	-- source string (null terminated C string)
- *		CSTRING,	-- destination string (null terminated C string)
- *		INTEGER		-- source string length
- * ) returns VOID;
- * ----------
- */
-
-Datum
-utf8_to_win1256(PG_FUNCTION_ARGS)
-{
-	unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
-	unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
-	int			len = PG_GETARG_INT32(4);
-
-	Assert(PG_GETARG_INT32(0) == PG_UTF8);
-	Assert(PG_GETARG_INT32(1) == PG_WIN1256);
-	Assert(len >= 0);
-
-	UtfToLocal(src, dest, ULmapWIN1256,
-			   sizeof(ULmapWIN1256) / sizeof(pg_utf_to_local), len);
-
-	PG_RETURN_VOID();
-}
-
-Datum
-win1256_to_utf8(PG_FUNCTION_ARGS)
-{
-	unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
-	unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
-	int			len = PG_GETARG_INT32(4);
-
-	Assert(PG_GETARG_INT32(0) == PG_WIN1256);
-	Assert(PG_GETARG_INT32(1) == PG_UTF8);
-	Assert(len >= 0);
-
-	LocalToUtf(src, dest, LUmapWIN1256,
-			sizeof(LUmapWIN1256) / sizeof(pg_local_to_utf), PG_WIN1256, len);
-
-	PG_RETURN_VOID();
-}
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_win1258/Makefile b/src/backend/utils/mb/conversion_procs/utf8_and_win1258/Makefile
deleted file mode 100644
index 53c65f414c7ba991f2b7c64f7e5623dcdf0447b0..0000000000000000000000000000000000000000
--- a/src/backend/utils/mb/conversion_procs/utf8_and_win1258/Makefile
+++ /dev/null
@@ -1,12 +0,0 @@
-#-------------------------------------------------------------------------
-#
-# $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_win1258/Makefile,v 1.2 2005/03/07 23:18:06 neilc Exp $
-#
-#-------------------------------------------------------------------------
-subdir = src/backend/utils/mb/conversion_procs/utf8_and_win1258
-top_builddir = ../../../../../..
-include $(top_builddir)/src/Makefile.global
-
-NAME		:= utf8_and_win1258
-
-include $(srcdir)/../proc.mk
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_win1258/utf8_and_win1258.c b/src/backend/utils/mb/conversion_procs/utf8_and_win1258/utf8_and_win1258.c
deleted file mode 100644
index 7cdcfd3c120e94975864f1411a60dd88149694f6..0000000000000000000000000000000000000000
--- a/src/backend/utils/mb/conversion_procs/utf8_and_win1258/utf8_and_win1258.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- *	  WIN1258 <--> UTF8
- *
- * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
- * Portions Copyright (c) 1994, Regents of the University of California
- *
- * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_win1258/utf8_and_win1258.c,v 1.3 2005/10/15 02:49:35 momjian Exp $
- *
- *-------------------------------------------------------------------------
- */
-
-#include "postgres.h"
-#include "fmgr.h"
-#include "mb/pg_wchar.h"
-#include "../../Unicode/win1258_to_utf8.map"
-#include "../../Unicode/utf8_to_win1258.map"
-
-PG_FUNCTION_INFO_V1(win1258_to_utf8);
-PG_FUNCTION_INFO_V1(utf8_to_win1258);
-
-extern Datum win1258_to_utf8(PG_FUNCTION_ARGS);
-extern Datum utf8_to_win1258(PG_FUNCTION_ARGS);
-
-/* ----------
- * conv_proc(
- *		INTEGER,	-- source encoding id
- *		INTEGER,	-- destination encoding id
- *		CSTRING,	-- source string (null terminated C string)
- *		CSTRING,	-- destination string (null terminated C string)
- *		INTEGER		-- source string length
- * ) returns VOID;
- * ----------
- */
-Datum
-win1258_to_utf8(PG_FUNCTION_ARGS)
-{
-	unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
-	unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
-	int			len = PG_GETARG_INT32(4);
-
-	Assert(PG_GETARG_INT32(0) == PG_WIN1258);
-	Assert(PG_GETARG_INT32(1) == PG_UTF8);
-	Assert(len >= 0);
-
-	LocalToUtf(src, dest, LUmapWIN1258,
-			sizeof(LUmapWIN1258) / sizeof(pg_local_to_utf), PG_WIN1258, len);
-
-	PG_RETURN_VOID();
-}
-
-Datum
-utf8_to_win1258(PG_FUNCTION_ARGS)
-{
-	unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
-	unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
-	int			len = PG_GETARG_INT32(4);
-
-	Assert(PG_GETARG_INT32(0) == PG_UTF8);
-	Assert(PG_GETARG_INT32(1) == PG_WIN1258);
-	Assert(len >= 0);
-
-	UtfToLocal(src, dest, ULmapWIN1258,
-			   sizeof(ULmapWIN1258) / sizeof(pg_utf_to_local), len);
-
-	PG_RETURN_VOID();
-}
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_win874/utf8_and_win874.c b/src/backend/utils/mb/conversion_procs/utf8_and_win874/utf8_and_win874.c
deleted file mode 100644
index 7eda096a9beea268efdfe93029a167234be9fb59..0000000000000000000000000000000000000000
--- a/src/backend/utils/mb/conversion_procs/utf8_and_win874/utf8_and_win874.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- *	  WIN874 and UTF8
- *
- * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
- * Portions Copyright (c) 1994, Regents of the University of California
- *
- * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_win874/utf8_and_win874.c,v 1.13 2005/10/15 02:49:35 momjian Exp $
- *
- *-------------------------------------------------------------------------
- */
-
-#include "postgres.h"
-#include "fmgr.h"
-#include "mb/pg_wchar.h"
-#include "../../Unicode/utf8_to_win874.map"
-#include "../../Unicode/win874_to_utf8.map"
-
-PG_FUNCTION_INFO_V1(utf8_to_win874);
-PG_FUNCTION_INFO_V1(win874_to_utf8);
-
-extern Datum utf8_to_win874(PG_FUNCTION_ARGS);
-extern Datum win874_to_utf8(PG_FUNCTION_ARGS);
-
-/* ----------
- * conv_proc(
- *		INTEGER,	-- source encoding id
- *		INTEGER,	-- destination encoding id
- *		CSTRING,	-- source string (null terminated C string)
- *		CSTRING,	-- destination string (null terminated C string)
- *		INTEGER		-- source string length
- * ) returns VOID;
- * ----------
- */
-
-Datum
-utf8_to_win874(PG_FUNCTION_ARGS)
-{
-	unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
-	unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
-	int			len = PG_GETARG_INT32(4);
-
-	Assert(PG_GETARG_INT32(0) == PG_UTF8);
-	Assert(PG_GETARG_INT32(1) == PG_WIN874);
-	Assert(len >= 0);
-
-	UtfToLocal(src, dest, ULmapWIN874,
-			   sizeof(ULmapWIN874) / sizeof(pg_utf_to_local), len);
-
-	PG_RETURN_VOID();
-}
-
-Datum
-win874_to_utf8(PG_FUNCTION_ARGS)
-{
-	unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
-	unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
-	int			len = PG_GETARG_INT32(4);
-
-	Assert(PG_GETARG_INT32(0) == PG_WIN874);
-	Assert(PG_GETARG_INT32(1) == PG_UTF8);
-	Assert(len >= 0);
-
-	LocalToUtf(src, dest, LUmapWIN874,
-			   sizeof(LUmapWIN874) / sizeof(pg_local_to_utf), PG_WIN874, len);
-
-	PG_RETURN_VOID();
-}
diff --git a/src/backend/utils/mb/encnames.c b/src/backend/utils/mb/encnames.c
index 45427768132e52d4b52c0475dac2081135c5835c..f628fcd679e0cca69d902b7e2032e31bfc1e39df 100644
--- a/src/backend/utils/mb/encnames.c
+++ b/src/backend/utils/mb/encnames.c
@@ -2,7 +2,7 @@
  * Encoding names and routines for work with it. All
  * in this file is shared bedween FE and BE.
  *
- * $PostgreSQL: pgsql/src/backend/utils/mb/encnames.c,v 1.28 2006/02/12 22:32:42 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/mb/encnames.c,v 1.29 2006/02/18 16:15:22 petere Exp $
  */
 #ifdef FRONTEND
 #include "postgres_fe.h"
@@ -196,9 +196,21 @@ pg_encname	pg_encname_tbl[] =
 	{
 		"win1252", PG_WIN1252
 	},							/* alias for Windows-1252 */
+	{
+		"win1253", PG_WIN1253
+	},							/* alias for Windows-1253 */
+	{
+		"win1254", PG_WIN1254
+	},							/* alias for Windows-1254 */
+	{
+		"win1255", PG_WIN1255
+	},							/* alias for Windows-1255 */
 	{
 		"win1256", PG_WIN1256
 	},							/* alias for Windows-1256 */
+	{
+		"win1257", PG_WIN1257
+	},							/* alias for Windows-1257 */
 	{
 		"win1258", PG_WIN1258
 	},							/* alias for Windows-1258 */
@@ -229,9 +241,21 @@ pg_encname	pg_encname_tbl[] =
 	{
 		"windows1252", PG_WIN1252
 	},							/* Windows-1252; Microsoft */
+	{
+		"windows1253", PG_WIN1253
+	},							/* Windows-1253; Microsoft */
+	{
+		"windows1254", PG_WIN1254
+	},							/* Windows-1254; Microsoft */
+	{
+		"windows1255", PG_WIN1255
+	},							/* Windows-1255; Microsoft */
 	{
 		"windows1256", PG_WIN1256
 	},							/* Windows-1256; Microsoft */
+	{
+		"windows1257", PG_WIN1257
+	},							/* Windows-1257; Microsoft */
 	{
 		"windows1258", PG_WIN1258
 	},							/* Windows-1258; Microsoft */
@@ -358,6 +382,18 @@ pg_enc2name pg_enc2name_tbl[] =
 	{
 		"WIN1250", PG_WIN1250
 	},
+	{
+		"WIN1253", PG_WIN1253
+	},
+	{
+		"WIN1254", PG_WIN1254
+	},
+	{
+		"WIN1255", PG_WIN1255
+	},
+	{
+		"WIN1257", PG_WIN1257
+	},
 	{
 		"SJIS", PG_SJIS
 	},
diff --git a/src/backend/utils/mb/wchar.c b/src/backend/utils/mb/wchar.c
index 2f0725363cc2e7ffff843aa781add0dcc5799d3f..d996b6c826b18f222508f49c9bb8e6d1e6cb698d 100644
--- a/src/backend/utils/mb/wchar.c
+++ b/src/backend/utils/mb/wchar.c
@@ -1,7 +1,7 @@
 /*
  * conversion functions between pg_wchar and multibyte streams.
  * Tatsuo Ishii
- * $PostgreSQL: pgsql/src/backend/utils/mb/wchar.c,v 1.53 2006/02/10 00:39:04 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/mb/wchar.c,v 1.54 2006/02/18 16:15:22 petere Exp $
  *
  * WIN1250 client encoding updated by Pavel Behal
  *
@@ -892,11 +892,15 @@ pg_wchar_tbl pg_wchar_table[] = {
 	{pg_latin12wchar_with_len, pg_latin1_mblen, pg_latin1_dsplen, 1},	/* 26; ISO-8859-7 */
 	{pg_latin12wchar_with_len, pg_latin1_mblen, pg_latin1_dsplen, 1},	/* 27; ISO-8859-8 */
 	{pg_latin12wchar_with_len, pg_latin1_mblen, pg_latin1_dsplen, 1},	/* 28; PG_WIN1250 */
-	{0, pg_sjis_mblen, pg_sjis_dsplen, 2},		/* 29; PG_SJIS */
-	{0, pg_big5_mblen, pg_big5_dsplen, 2},		/* 30; PG_BIG5 */
-	{0, pg_gbk_mblen, pg_gbk_dsplen, 2},		/* 31; PG_GBK */
-	{0, pg_uhc_mblen, pg_uhc_dsplen, 2},		/* 32; PG_UHC */
-	{0, pg_gb18030_mblen, pg_gb18030_dsplen, 2} /* 33; PG_GB18030 */
+	{pg_latin12wchar_with_len, pg_latin1_mblen, pg_latin1_dsplen, 1},	/* 29; PG_WIN1253 */
+	{pg_latin12wchar_with_len, pg_latin1_mblen, pg_latin1_dsplen, 1},	/* 30; PG_WIN1254 */
+	{pg_latin12wchar_with_len, pg_latin1_mblen, pg_latin1_dsplen, 1},	/* 31; PG_WIN1255 */
+	{pg_latin12wchar_with_len, pg_latin1_mblen, pg_latin1_dsplen, 1},	/* 32; PG_WIN1257 */
+	{0, pg_sjis_mblen, pg_sjis_dsplen, 2},		/* 33; PG_SJIS */
+	{0, pg_big5_mblen, pg_big5_dsplen, 2},		/* 34; PG_BIG5 */
+	{0, pg_gbk_mblen, pg_gbk_dsplen, 2},		/* 35; PG_GBK */
+	{0, pg_uhc_mblen, pg_uhc_dsplen, 2},		/* 36; PG_UHC */
+	{0, pg_gb18030_mblen, pg_gb18030_dsplen, 2} /* 37; PG_GB18030 */
 };
 
 /* returns the byte length of a word for mule internal code */
diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c
index e1c7ad30ce8c03dd19fedcd81eb5546774d1ca33..9b35151640c328d42dc04fefc35a8fed9e8daf7b 100644
--- a/src/bin/initdb/initdb.c
+++ b/src/bin/initdb/initdb.c
@@ -42,7 +42,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  * Portions taken from FreeBSD.
  *
- * $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.109 2006/02/12 03:22:18 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.110 2006/02/18 16:15:23 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -779,7 +779,11 @@ struct encoding_match encoding_match_list[] = {
 	{PG_LATIN10, "iso885916"},
 
 	{PG_WIN1252, "CP1252"},
+	{PG_WIN1253, "CP1253"},
+	{PG_WIN1254, "CP1254"},
+	{PG_WIN1255, "CP1255"},
 	{PG_WIN1256, "CP1256"},
+	{PG_WIN1257, "CP1257"},
 	{PG_WIN1258, "CP1258"},
 #ifdef NOT_VERIFIED
 	{PG_WIN874, "???"},
diff --git a/src/include/mb/pg_wchar.h b/src/include/mb/pg_wchar.h
index 71cb50386f06ad02e9d71d1a9dd59bc5da911199..d049f4ecfc37c747bebd820d6dcf4d14bcd601c0 100644
--- a/src/include/mb/pg_wchar.h
+++ b/src/include/mb/pg_wchar.h
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/src/include/mb/pg_wchar.h,v 1.66 2005/12/24 18:23:02 momjian Exp $ */
+/* $PostgreSQL: pgsql/src/include/mb/pg_wchar.h,v 1.67 2006/02/18 16:15:23 petere Exp $ */
 
 #ifndef PG_WCHAR_H
 #define PG_WCHAR_H
@@ -177,6 +177,10 @@ typedef enum pg_enc
 	PG_ISO_8859_7,				/* ISO-8859-7 */
 	PG_ISO_8859_8,				/* ISO-8859-8 */
 	PG_WIN1250,					/* windows-1250 */
+	PG_WIN1253,					/* windows-1253 */
+	PG_WIN1254,					/* windows-1254 */
+	PG_WIN1255,					/* windows-1255 */
+	PG_WIN1257,					/* windows-1257 */
 	/* PG_ENCODING_BE_LAST points to the above entry */
 	
 	/* followings are for client encoding only */
@@ -189,7 +193,7 @@ typedef enum pg_enc
 
 } pg_enc;
 
-#define PG_ENCODING_BE_LAST PG_WIN1250
+#define PG_ENCODING_BE_LAST PG_WIN1257
 
 /*
  * Please use these tests before access to pg_encconv_tbl[]
diff --git a/src/test/regress/expected/conversion.out b/src/test/regress/expected/conversion.out
index 1130d127faad1bdeadd35bc5d07dc1292b5699a9..00a1ecf63807f7de8711710188a2fb3187bdda6b 100644
--- a/src/test/regress/expected/conversion.out
+++ b/src/test/regress/expected/conversion.out
@@ -1409,7 +1409,7 @@ SELECT CONVERT('foo', 'UTF8', 'SJIS');
 (1 row)
 
 -- WIN1258 --> UTF8
-SELECT CONVERT('foo' USING win1258_to_utf8);
+SELECT CONVERT('foo' USING windows_1258_to_utf8);
  convert_using 
 ---------------
  foo
@@ -1422,7 +1422,7 @@ SELECT CONVERT('foo', 'WIN1258', 'UTF8');
 (1 row)
 
 -- UTF8 --> WIN1258
-SELECT CONVERT('foo' USING utf8_to_win1258);
+SELECT CONVERT('foo' USING utf8_to_windows_1258);
  convert_using 
 ---------------
  foo
@@ -1538,6 +1538,110 @@ SELECT CONVERT('foo', 'WIN874', 'UTF8');
  foo
 (1 row)
 
+-- UTF8 --> WIN1253
+SELECT CONVERT('foo' USING utf8_to_windows_1253);
+ convert_using 
+---------------
+ foo
+(1 row)
+
+SELECT CONVERT('foo', 'UTF8', 'WIN1253');
+ convert 
+---------
+ foo
+(1 row)
+
+-- WIN1253 --> UTF8
+SELECT CONVERT('foo' USING windows_1253_to_utf8);
+ convert_using 
+---------------
+ foo
+(1 row)
+
+SELECT CONVERT('foo', 'WIN1253', 'UTF8');
+ convert 
+---------
+ foo
+(1 row)
+
+-- UTF8 --> WIN1254
+SELECT CONVERT('foo' USING utf8_to_windows_1254);
+ convert_using 
+---------------
+ foo
+(1 row)
+
+SELECT CONVERT('foo', 'UTF8', 'WIN1254');
+ convert 
+---------
+ foo
+(1 row)
+
+-- WIN1254 --> UTF8
+SELECT CONVERT('foo' USING windows_1254_to_utf8);
+ convert_using 
+---------------
+ foo
+(1 row)
+
+SELECT CONVERT('foo', 'WIN1254', 'UTF8');
+ convert 
+---------
+ foo
+(1 row)
+
+-- UTF8 --> WIN1255
+SELECT CONVERT('foo' USING utf8_to_windows_1255);
+ convert_using 
+---------------
+ foo
+(1 row)
+
+SELECT CONVERT('foo', 'UTF8', 'WIN1255');
+ convert 
+---------
+ foo
+(1 row)
+
+-- WIN1255 --> UTF8
+SELECT CONVERT('foo' USING windows_1255_to_utf8);
+ convert_using 
+---------------
+ foo
+(1 row)
+
+SELECT CONVERT('foo', 'WIN1255', 'UTF8');
+ convert 
+---------
+ foo
+(1 row)
+
+-- UTF8 --> WIN1257
+SELECT CONVERT('foo' USING utf8_to_windows_1257);
+ convert_using 
+---------------
+ foo
+(1 row)
+
+SELECT CONVERT('foo', 'UTF8', 'WIN1257');
+ convert 
+---------
+ foo
+(1 row)
+
+-- WIN1257 --> UTF8
+SELECT CONVERT('foo' USING windows_1257_to_utf8);
+ convert_using 
+---------------
+ foo
+(1 row)
+
+SELECT CONVERT('foo', 'WIN1257', 'UTF8');
+ convert 
+---------
+ foo
+(1 row)
+
 --
 -- return to the super user
 --
diff --git a/src/test/regress/sql/conversion.sql b/src/test/regress/sql/conversion.sql
index b172d764ad001d973241dd7d6726c6f72b0060de..64a4ca5650cbfee317a69166c3adb040bcb208a3 100644
--- a/src/test/regress/sql/conversion.sql
+++ b/src/test/regress/sql/conversion.sql
@@ -346,10 +346,10 @@ SELECT CONVERT('foo', 'SJIS', 'UTF8');
 SELECT CONVERT('foo' USING utf8_to_sjis);
 SELECT CONVERT('foo', 'UTF8', 'SJIS');
 -- WIN1258 --> UTF8
-SELECT CONVERT('foo' USING win1258_to_utf8);
+SELECT CONVERT('foo' USING windows_1258_to_utf8);
 SELECT CONVERT('foo', 'WIN1258', 'UTF8');
 -- UTF8 --> WIN1258
-SELECT CONVERT('foo' USING utf8_to_win1258);
+SELECT CONVERT('foo' USING utf8_to_windows_1258);
 SELECT CONVERT('foo', 'UTF8', 'WIN1258');
 -- UHC --> UTF8
 SELECT CONVERT('foo' USING uhc_to_utf8);
@@ -375,6 +375,30 @@ SELECT CONVERT('foo', 'UTF8', 'WIN874');
 -- WIN874 --> UTF8
 SELECT CONVERT('foo' USING windows_874_to_utf8);
 SELECT CONVERT('foo', 'WIN874', 'UTF8');
+-- UTF8 --> WIN1253
+SELECT CONVERT('foo' USING utf8_to_windows_1253);
+SELECT CONVERT('foo', 'UTF8', 'WIN1253');
+-- WIN1253 --> UTF8
+SELECT CONVERT('foo' USING windows_1253_to_utf8);
+SELECT CONVERT('foo', 'WIN1253', 'UTF8');
+-- UTF8 --> WIN1254
+SELECT CONVERT('foo' USING utf8_to_windows_1254);
+SELECT CONVERT('foo', 'UTF8', 'WIN1254');
+-- WIN1254 --> UTF8
+SELECT CONVERT('foo' USING windows_1254_to_utf8);
+SELECT CONVERT('foo', 'WIN1254', 'UTF8');
+-- UTF8 --> WIN1255
+SELECT CONVERT('foo' USING utf8_to_windows_1255);
+SELECT CONVERT('foo', 'UTF8', 'WIN1255');
+-- WIN1255 --> UTF8
+SELECT CONVERT('foo' USING windows_1255_to_utf8);
+SELECT CONVERT('foo', 'WIN1255', 'UTF8');
+-- UTF8 --> WIN1257
+SELECT CONVERT('foo' USING utf8_to_windows_1257);
+SELECT CONVERT('foo', 'UTF8', 'WIN1257');
+-- WIN1257 --> UTF8
+SELECT CONVERT('foo' USING windows_1257_to_utf8);
+SELECT CONVERT('foo', 'WIN1257', 'UTF8');
 --
 -- return to the super user
 --