diff --git a/src/backend/utils/adt/xml.c b/src/backend/utils/adt/xml.c
index c4960bcecfbf3659feff0622cbd0c81b243776c2..ce1e4a4fdde61ee1cc1a999392da8082bf8f39bb 100644
--- a/src/backend/utils/adt/xml.c
+++ b/src/backend/utils/adt/xml.c
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/backend/utils/adt/xml.c,v 1.71 2008/03/25 22:42:44 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/adt/xml.c,v 1.72 2008/04/04 08:33:15 mha Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -86,8 +86,8 @@
 
 
 /* GUC variables */
-XmlBinaryType xmlbinary;
-XmlOptionType xmloption;
+int xmlbinary;
+int xmloption;
 
 #ifdef USE_LIBXML
 
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index 04934abd306baffc5521e45c40cd808039262117..63615a885a52df7488e9ab4c7643b5b4e02d9430 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -10,7 +10,7 @@
  * Written by Peter Eisentraut <peter_e@gmx.net>.
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.443 2008/04/03 13:25:02 mha Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.444 2008/04/04 08:33:15 mha Exp $
  *
  *--------------------------------------------------------------------
  */
@@ -155,8 +155,6 @@ static bool assign_transaction_read_only(bool newval, bool doit, GucSource sourc
 static const char *assign_canonical_path(const char *newval, bool doit, GucSource source);
 static const char *assign_backslash_quote(const char *newval, bool doit, GucSource source);
 static const char *assign_timezone_abbreviations(const char *newval, bool doit, GucSource source);
-static const char *assign_xmlbinary(const char *newval, bool doit, GucSource source);
-static const char *assign_xmloption(const char *newval, bool doit, GucSource source);
 static const char *show_archive_command(void);
 static bool assign_tcp_keepalives_idle(int newval, bool doit, GucSource source);
 static bool assign_tcp_keepalives_interval(int newval, bool doit, GucSource source);
@@ -243,6 +241,17 @@ static const struct config_enum_entry syslog_facility_options[] = {
 };
 #endif
 
+static const struct config_enum_entry xmlbinary_options[] = {
+	{"base64", XMLBINARY_BASE64},
+	{"hex", XMLBINARY_HEX},
+	{NULL, 0}
+};
+
+static const struct config_enum_entry xmloption_options[] = {
+	{"content", XMLOPTION_CONTENT},
+	{"document", XMLOPTION_DOCUMENT},
+	{NULL, 0}
+};
 
 /*
  * GUC option variables that are exported from this module
@@ -316,8 +325,6 @@ static char *timezone_abbreviations_string;
 static char *XactIsoLevel_string;
 static char *data_directory;
 static char *custom_variable_classes;
-static char *xmlbinary_string;
-static char *xmloption_string;
 static int	max_function_args;
 static int	max_index_keys;
 static int	max_identifier_length;
@@ -2382,25 +2389,6 @@ static struct config_string ConfigureNamesString[] =
 		NULL, assign_canonical_path, NULL
 	},
 
-	{
-		{"xmlbinary", PGC_USERSET, CLIENT_CONN_STATEMENT,
-			gettext_noop("Sets how binary values are to be encoded in XML."),
-			gettext_noop("Valid values are BASE64 and HEX.")
-		},
-		&xmlbinary_string,
-		"base64", assign_xmlbinary, NULL
-	},
-
-	{
-		{"xmloption", PGC_USERSET, CLIENT_CONN_STATEMENT,
-			gettext_noop("Sets whether XML data in implicit parsing and serialization "
-						 "operations is to be considered as documents or content fragments."),
-			gettext_noop("Valid values are DOCUMENT and CONTENT.")
-		},
-		&xmloption_string,
-		"content", assign_xmloption, NULL
-	},
-
 	{
 		{"default_text_search_config", PGC_USERSET, CLIENT_CONN_LOCALE,
 			gettext_noop("Sets default text search configuration."),
@@ -2524,6 +2512,25 @@ static struct config_enum ConfigureNamesEnum[] =
 		assign_session_replication_role, NULL
 	},
 
+	{
+		{"xmlbinary", PGC_USERSET, CLIENT_CONN_STATEMENT,
+			gettext_noop("Sets how binary values are to be encoded in XML."),
+			gettext_noop("Valid values are BASE64 and HEX.")
+		},
+		&xmlbinary,
+		XMLBINARY_BASE64, xmlbinary_options, NULL, NULL
+	},
+
+	{
+		{"xmloption", PGC_USERSET, CLIENT_CONN_STATEMENT,
+			gettext_noop("Sets whether XML data in implicit parsing and serialization "
+						 "operations is to be considered as documents or content fragments."),
+			gettext_noop("Valid values are DOCUMENT and CONTENT.")
+		},
+		&xmloption,
+		XMLOPTION_CONTENT, xmloption_options, NULL, NULL
+	},
+
 
 	/* End-of-list marker */
 	{
@@ -7172,42 +7179,6 @@ pg_timezone_abbrev_initialize(void)
 	}
 }
 
-static const char *
-assign_xmlbinary(const char *newval, bool doit, GucSource source)
-{
-	XmlBinaryType xb;
-
-	if (pg_strcasecmp(newval, "base64") == 0)
-		xb = XMLBINARY_BASE64;
-	else if (pg_strcasecmp(newval, "hex") == 0)
-		xb = XMLBINARY_HEX;
-	else
-		return NULL;			/* reject */
-
-	if (doit)
-		xmlbinary = xb;
-
-	return newval;
-}
-
-static const char *
-assign_xmloption(const char *newval, bool doit, GucSource source)
-{
-	XmlOptionType xo;
-
-	if (pg_strcasecmp(newval, "document") == 0)
-		xo = XMLOPTION_DOCUMENT;
-	else if (pg_strcasecmp(newval, "content") == 0)
-		xo = XMLOPTION_CONTENT;
-	else
-		return NULL;			/* reject */
-
-	if (doit)
-		xmloption = xo;
-
-	return newval;
-}
-
 static const char *
 show_archive_command(void)
 {
diff --git a/src/include/utils/xml.h b/src/include/utils/xml.h
index 99a46f8ef765fa9d8cbd50321fd50bd7962b35d0..0111bd3e082720abe4380316523579f37779c6f3 100644
--- a/src/include/utils/xml.h
+++ b/src/include/utils/xml.h
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/utils/xml.h,v 1.23 2008/01/15 18:57:00 tgl Exp $
+ * $PostgreSQL: pgsql/src/include/utils/xml.h,v 1.24 2008/04/04 08:33:15 mha Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -83,8 +83,8 @@ typedef enum
 	XMLBINARY_HEX
 } XmlBinaryType;
 
-extern XmlBinaryType xmlbinary;
+extern int xmlbinary; /* XmlBinaryType, but int for guc enum */
 
-extern XmlOptionType xmloption;
+extern int xmloption; /* XmlOptionType, but int for guc enum */
 
 #endif   /* XML_H */