diff -urp NetworkManager-0.9.7.0-4-pavbase/libnm-util/libnm-util.ver NetworkManager-0.9.7.0/libnm-util/libnm-util.ver
--- NetworkManager-0.9.7.0-4-pavbase/libnm-util/libnm-util.ver	2012-10-02 12:44:00.000000000 -0400
+++ NetworkManager-0.9.7.0/libnm-util/libnm-util.ver	2012-10-18 10:05:53.055989698 -0400
@@ -314,6 +314,7 @@ global:
 	nm_setting_ip6_config_error_get_type;
 	nm_setting_ip6_config_error_quark;
 	nm_setting_ip6_config_get_address;
+	nm_setting_ip6_config_get_dhcp_hostname;
 	nm_setting_ip6_config_get_dns;
 	nm_setting_ip6_config_get_dns_search;
 	nm_setting_ip6_config_get_ignore_auto_dns;
diff -urp NetworkManager-0.9.7.0-4-pavbase/libnm-util/nm-setting-ip6-config.c NetworkManager-0.9.7.0/libnm-util/nm-setting-ip6-config.c
--- NetworkManager-0.9.7.0-4-pavbase/libnm-util/nm-setting-ip6-config.c	2012-07-17 09:43:14.000000000 -0400
+++ NetworkManager-0.9.7.0/libnm-util/nm-setting-ip6-config.c	2012-10-18 10:05:53.057989688 -0400
@@ -66,6 +66,7 @@ G_DEFINE_TYPE (NMSettingIP6Config, nm_se
 
 typedef struct {
 	char *method;
+	char *dhcp_hostname;
 	GSList *dns;        /* array of struct in6_addr */
 	GSList *dns_search; /* list of strings */
 	GSList *addresses;  /* array of NMIP6Address */
@@ -81,6 +82,7 @@ typedef struct {
 enum {
 	PROP_0,
 	PROP_METHOD,
+	PROP_DHCP_HOSTNAME,
 	PROP_DNS,
 	PROP_DNS_SEARCH,
 	PROP_ADDRESSES,
@@ -122,6 +124,23 @@ nm_setting_ip6_config_get_method (NMSett
 }
 
 /**
+ * nm_setting_ip6_config_get_dhcp_hostname:
+ * @setting: the #NMSettingIP6Config
+ *
+ * Returns the value contained in the #NMSettingIP6Config:dhcp-hostname
+ * property.
+ *
+ * Returns: the configured hostname to send to the DHCP server
+ **/
+const char *
+nm_setting_ip6_config_get_dhcp_hostname (NMSettingIP6Config *setting)
+{
+	g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (setting), NULL);
+
+	return NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->dhcp_hostname;
+}
+
+/**
  * nm_setting_ip6_config_get_num_dns:
  * @setting: the #NMSettingIP6Config
  *
@@ -693,6 +712,14 @@ verify (NMSetting *setting, GSList *all_
 		return FALSE;
 	}
 
+	if (priv->dhcp_hostname && !strlen (priv->dhcp_hostname)) {
+		g_set_error (error,
+		             NM_SETTING_IP6_CONFIG_ERROR,
+		             NM_SETTING_IP6_CONFIG_ERROR_INVALID_PROPERTY,
+		             NM_SETTING_IP6_CONFIG_DHCP_HOSTNAME);
+		return FALSE;
+	}
+
 	return TRUE;
 }
 
@@ -751,6 +778,10 @@ set_property (GObject *object, guint pro
 	case PROP_IGNORE_AUTO_DNS:
 		priv->ignore_auto_dns = g_value_get_boolean (value);
 		break;
+	case PROP_DHCP_HOSTNAME:
+		g_free (priv->dhcp_hostname);
+		priv->dhcp_hostname = g_value_dup_string (value);
+		break;
 	case PROP_NEVER_DEFAULT:
 		priv->never_default = g_value_get_boolean (value);
 		break;
@@ -794,6 +825,9 @@ get_property (GObject *object, guint pro
 	case PROP_IGNORE_AUTO_DNS:
 		g_value_set_boolean (value, priv->ignore_auto_dns);
 		break;
+	case PROP_DHCP_HOSTNAME:
+		g_value_set_string (value, priv->dhcp_hostname);
+		break;
 	case PROP_NEVER_DEFAULT:
 		g_value_set_boolean (value, priv->never_default);
 		break;
@@ -860,6 +894,20 @@ nm_setting_ip6_config_class_init (NMSett
 						      G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
 
 	/**
+	 * NMSettingIP6Config:dhcp-hostname:
+	 *
+	 * The specified name will be sent to the DHCP server when acquiring a lease.
+	 **/
+	g_object_class_install_property
+		(object_class, PROP_DHCP_HOSTNAME,
+		 g_param_spec_string (NM_SETTING_IP6_CONFIG_DHCP_HOSTNAME,
+						   "DHCP Hostname",
+						   "The specified name will be sent to the DHCP server "
+						   "when acquiring a lease.",
+						   NULL,
+						   G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+
+	/**
 	 * NMSettingIP6Config:dns:
 	 *
 	 * Array of DNS servers, where each member of the array is a byte array
diff -urp NetworkManager-0.9.7.0-4-pavbase/libnm-util/nm-setting-ip6-config.h NetworkManager-0.9.7.0/libnm-util/nm-setting-ip6-config.h
--- NetworkManager-0.9.7.0-4-pavbase/libnm-util/nm-setting-ip6-config.h	2012-09-11 15:19:07.000000000 -0400
+++ NetworkManager-0.9.7.0/libnm-util/nm-setting-ip6-config.h	2012-10-18 10:05:53.057989688 -0400
@@ -69,6 +69,8 @@ GQuark nm_setting_ip6_config_error_quark
 #define NM_SETTING_IP6_CONFIG_NEVER_DEFAULT      "never-default"
 #define NM_SETTING_IP6_CONFIG_MAY_FAIL           "may-fail"
 #define NM_SETTING_IP6_CONFIG_IP6_PRIVACY        "ip6-privacy"
+#define NM_SETTING_IP6_CONFIG_DHCP_HOSTNAME      "dhcp-hostname"
+
 
 /**
  * NM_SETTING_IP6_CONFIG_METHOD_IGNORE:
@@ -239,6 +241,7 @@ void                   nm_setting_ip6_co
 gboolean               nm_setting_ip6_config_get_ignore_auto_routes (NMSettingIP6Config *setting);
 
 gboolean               nm_setting_ip6_config_get_ignore_auto_dns    (NMSettingIP6Config *setting);
+const char *           nm_setting_ip6_config_get_dhcp_hostname      (NMSettingIP6Config *setting);
 gboolean               nm_setting_ip6_config_get_never_default      (NMSettingIP6Config *setting);
 gboolean               nm_setting_ip6_config_get_may_fail           (NMSettingIP6Config *setting);
 NMSettingIP6ConfigPrivacy nm_setting_ip6_config_get_ip6_privacy (NMSettingIP6Config *setting);
diff -urp NetworkManager-0.9.7.0-4-pavbase/src/dhcp-manager/nm-dhcp-dhclient.c NetworkManager-0.9.7.0/src/dhcp-manager/nm-dhcp-dhclient.c
--- NetworkManager-0.9.7.0-4-pavbase/src/dhcp-manager/nm-dhcp-dhclient.c	2012-10-18 10:04:58.493237011 -0400
+++ NetworkManager-0.9.7.0/src/dhcp-manager/nm-dhcp-dhclient.c	2012-10-18 10:05:53.072989628 -0400
@@ -301,6 +301,7 @@ static gboolean
 merge_dhclient_config (const char *iface,
                        const char *conf_file,
                        NMSettingIP4Config *s_ip4,
+                       NMSettingIP6Config *s_ip6,
                        guint8 *anycast_addr,
                        const char *hostname,
                        const char *orig_path,
@@ -316,13 +317,15 @@ merge_dhclient_config (const char *iface
 		GError *read_error = NULL;
 
 		if (!g_file_get_contents (orig_path, &orig, NULL, &read_error)) {
-			nm_log_warn (LOGD_DHCP, "(%s): error reading dhclient configuration %s: %s",
-			             iface, orig_path, read_error->message);
+			nm_log_warn (LOGD_DHCP, "(%s): error reading dhclient%s configuration %s: %s",
+			             iface, s_ip6!=NULL ? "6" : "", 
+						 orig_path, read_error->message);
 			g_error_free (read_error);
 		}
 	}
 
-	new = nm_dhcp_dhclient_create_config (iface, s_ip4, anycast_addr, hostname, orig_path, orig);
+	new = nm_dhcp_dhclient_create_config (iface, s_ip4, s_ip6,
+				anycast_addr, hostname, orig_path, orig);
 	g_assert (new);
 	success = g_file_set_contents (conf_file, new, -1, error);
 	g_free (new);
@@ -398,6 +401,7 @@ get_dhclient_config (const char * iface,
 static char *
 create_dhclient_config (const char *iface,
                         NMSettingIP4Config *s_ip4,
+                        NMSettingIP6Config *s_ip6,
                         guint8 *dhcp_anycast_addr,
                         const char *hostname)
 {
@@ -407,15 +411,17 @@ create_dhclient_config (const char *ifac
 
 	g_return_val_if_fail (iface != NULL, NULL);
 
-	/* TODO: also support UUID */
-	orig = get_dhclient_config (iface, NULL, FALSE);
-	new = g_strdup_printf (NMSTATEDIR "/dhclient-%s.conf", iface);
+	new = g_strdup_printf (NMSTATEDIR "/dhclient%s-%s.conf", 
+			s_ip6!=NULL ? "6" : "", iface);
 
+	/* TODO: also support UUID */
+	orig = get_dhclient_config (iface, NULL, s_ip6!=NULL);
 	error = NULL;
-	success = merge_dhclient_config (iface, new, s_ip4, dhcp_anycast_addr, hostname, orig, &error);
+	success = merge_dhclient_config (iface, new, s_ip4, s_ip6,
+					dhcp_anycast_addr, hostname, orig, &error);
 	if (!success) {
-		nm_log_warn (LOGD_DHCP, "(%s): error creating dhclient configuration: %s",
-		             iface, error->message);
+		nm_log_warn (LOGD_DHCP, "(%s): error creating dhclient%s configuration: %s",
+		             iface, s_ip6!=NULL ? "6" : "", error->message);
 		g_error_free (error);
 	}
 
@@ -423,7 +429,6 @@ create_dhclient_config (const char *ifac
 	return new;
 }
 
-
 static void
 dhclient_child_setup (gpointer user_data G_GNUC_UNUSED)
 {
@@ -567,7 +572,8 @@ ip4_start (NMDHCPClient *client,
 
 	iface = nm_dhcp_client_get_iface (client);
 
-	priv->conf_file = create_dhclient_config (iface, s_ip4, dhcp_anycast_addr, hostname);
+	priv->conf_file = create_dhclient_config (iface, 
+			s_ip4, NULL, dhcp_anycast_addr, hostname);
 	if (!priv->conf_file) {
 		nm_log_warn (LOGD_DHCP4, "(%s): error creating dhclient configuration file.", iface);
 		return -1;
@@ -583,6 +589,18 @@ ip6_start (NMDHCPClient *client,
            const char *hostname,
            gboolean info_only)
 {
+	NMDHCPDhclientPrivate *priv = NM_DHCP_DHCLIENT_GET_PRIVATE (client);
+	const char *iface;
+
+	iface = nm_dhcp_client_get_iface (client);
+
+	priv->conf_file = create_dhclient_config (iface,
+			NULL, s_ip6, dhcp_anycast_addr, hostname);
+	if (!priv->conf_file) {
+		nm_log_warn (LOGD_DHCP6, "(%s): error creating dhclient6 configuration file.", iface);
+		return -1;
+	}
+
 	return dhclient_start (client, info_only ? "-S" : "-N", FALSE);
 }
 
diff -urp NetworkManager-0.9.7.0-4-pavbase/src/dhcp-manager/nm-dhcp-dhclient-utils.c NetworkManager-0.9.7.0/src/dhcp-manager/nm-dhcp-dhclient-utils.c
--- NetworkManager-0.9.7.0-4-pavbase/src/dhcp-manager/nm-dhcp-dhclient-utils.c	2012-10-02 12:44:00.000000000 -0400
+++ NetworkManager-0.9.7.0/src/dhcp-manager/nm-dhcp-dhclient-utils.c	2012-10-18 10:05:53.073989624 -0400
@@ -34,6 +34,17 @@
 
 #define ALSOREQ_TAG "also request "
 
+/* common things we need to send/request from the server */
+
+static char *ip6_data =
+            "send fqdn.encoded on;\n"
+            "send fqdn.no-client-update on;\n"
+            "send fqdn.server-update on;\n"
+            "also request dhcp6.name-servers;\n"
+            "also request dhcp6.domain-search;\n"
+            "also request dhcp6.client-id;\n"
+            "also request dhcp6.server-id;\n";
+
 static void
 add_also_request (GPtrArray *array, const char *item)
 {
@@ -49,6 +60,7 @@ add_also_request (GPtrArray *array, cons
 char *
 nm_dhcp_dhclient_create_config (const char *interface,
                                 NMSettingIP4Config *s_ip4,
+                                NMSettingIP6Config *s_ip6,
                                 guint8 *anycast_addr,
                                 const char *hostname,
                                 const char *orig_path,
@@ -135,7 +147,32 @@ nm_dhcp_dhclient_create_config (const ch
 	} else
 		g_string_append_c (new_contents, '\n');
 
-	/* Add NM options from connection */
+    /* OK, I know this is cheating a bit but after this
+     * it is all IPv4 related.  So lets just add our stuff
+     * and get out.
+     */
+	if (s_ip6!=NULL) {
+		if (hostname) {
+			char *plain_hostname, *dot;
+
+			plain_hostname = g_strdup (hostname);
+			dot = strchr (plain_hostname, '.');
+
+			/* get rid of the domain */
+			if (dot)
+				*dot = '\0';
+
+			g_string_append_printf (new_contents, "send fqdn.fqdn \"%s\"; \n",
+					plain_hostname);
+			g_free (plain_hostname);
+		}
+		/* OK, lets not get fancy; just send the stuff out */
+		g_string_append (new_contents, ip6_data);
+
+		return g_string_free (new_contents, FALSE);
+	}
+
+	/* Add IPV4 NM options from connection */
 	if (s_ip4) {
 		const char *tmp;
 		gboolean added = FALSE;
diff -urp NetworkManager-0.9.7.0-4-pavbase/src/dhcp-manager/nm-dhcp-dhclient-utils.h NetworkManager-0.9.7.0/src/dhcp-manager/nm-dhcp-dhclient-utils.h
--- NetworkManager-0.9.7.0-4-pavbase/src/dhcp-manager/nm-dhcp-dhclient-utils.h	2012-02-16 08:34:22.000000000 -0500
+++ NetworkManager-0.9.7.0/src/dhcp-manager/nm-dhcp-dhclient-utils.h	2012-10-18 10:05:53.074989620 -0400
@@ -23,9 +23,11 @@
 #include <glib-object.h>
 
 #include <nm-setting-ip4-config.h>
+#include <nm-setting-ip6-config.h>
 
 char *nm_dhcp_dhclient_create_config (const char *interface,
                                       NMSettingIP4Config *s_ip4,
+                                      NMSettingIP6Config *s_ip6,
                                       guint8 *anycast_addr,
                                       const char *hostname,
                                       const char *orig_path,
diff -urp NetworkManager-0.9.7.0-4-pavbase/src/dhcp-manager/nm-dhcp-manager.c NetworkManager-0.9.7.0/src/dhcp-manager/nm-dhcp-manager.c
--- NetworkManager-0.9.7.0-4-pavbase/src/dhcp-manager/nm-dhcp-manager.c	2012-10-18 10:04:58.495237003 -0400
+++ NetworkManager-0.9.7.0/src/dhcp-manager/nm-dhcp-manager.c	2012-10-18 10:05:53.061989676 -0400
@@ -424,6 +424,10 @@ client_start (NMDHCPManager *self,
 	g_return_val_if_fail (client != NULL, NULL);
 	add_client (self, client);
 
+	nm_log_dbg (LOGD_DHCP, "hostname is %s for start %s", 
+			hostname ? hostname : "NULL",
+			ipv6 ? "ipv6" : "ipv4");
+
 	if (ipv6)
 		success = nm_dhcp_client_start_ip6 (client, s_ip6, dhcp_anycast_addr, hostname, info_only);
 	else
@@ -498,7 +502,28 @@ nm_dhcp_manager_start_ip6 (NMDHCPManager
                            guint8 *dhcp_anycast_addr,
                            gboolean info_only)
 {
-	return client_start (self, iface, uuid, TRUE, NULL, s_ip6, timeout, dhcp_anycast_addr, NULL, info_only);
+	NMDHCPManagerPrivate *priv;
+	const char *hostname = NULL;
+
+	g_return_val_if_fail (self, NULL);
+	g_return_val_if_fail (NM_IS_DHCP_MANAGER (self), NULL);
+
+	priv = NM_DHCP_MANAGER_GET_PRIVATE (self);
+
+
+	hostname = nm_setting_ip6_config_get_dhcp_hostname (s_ip6);
+
+	if (hostname==NULL && priv->hostname_provider) {
+		nm_log_dbg (LOGD_DHCP6, 
+			"hostname is NULL from ip6_config_get, trying hostname_provider");
+		hostname = nm_hostname_provider_get_hostname (priv->hostname_provider);
+		if (   hostname
+		    && (!strcmp (hostname, "localhost.localdomain") ||
+		        !strcmp (hostname, "localhost6.localdomain6")))
+			hostname = NULL;
+	}
+
+	return client_start (self, iface, uuid, TRUE, NULL, s_ip6, timeout, dhcp_anycast_addr, hostname, info_only);
 }
 
 static void
diff -urp NetworkManager-0.9.7.0-4-pavbase/src/dhcp-manager/tests/test-dhcp-dhclient.c NetworkManager-0.9.7.0/src/dhcp-manager/tests/test-dhcp-dhclient.c
--- NetworkManager-0.9.7.0-4-pavbase/src/dhcp-manager/tests/test-dhcp-dhclient.c	2012-02-16 08:34:22.000000000 -0500
+++ NetworkManager-0.9.7.0/src/dhcp-manager/tests/test-dhcp-dhclient.c	2012-10-18 10:05:53.074989620 -0400
@@ -42,6 +42,7 @@ test_config (const char *orig,
 
 	new = nm_dhcp_dhclient_create_config (iface,
 	                                      s_ip4,
+										  NULL,
 	                                      anycast_addr,
 	                                      hostname,
 	                                      "/path/to/dhclient.conf",
diff -urp NetworkManager-0.9.7.0-4-pavbase/src/settings/plugins/ifcfg-rh/reader.c NetworkManager-0.9.7.0/src/settings/plugins/ifcfg-rh/reader.c
--- NetworkManager-0.9.7.0-4-pavbase/src/settings/plugins/ifcfg-rh/reader.c	2012-10-02 12:44:00.000000000 -0400
+++ NetworkManager-0.9.7.0/src/settings/plugins/ifcfg-rh/reader.c	2012-10-18 10:05:53.065989656 -0400
@@ -1316,6 +1316,8 @@ make_ip4_setting (shvarFile *ifcfg,
 		}
 	} else if (!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_AUTO)) {
 		value = svGetValue (ifcfg, "DHCP_HOSTNAME", FALSE);
+		PLUGIN_WARN (IFCFG_PLUGIN_NAME, "IPv4 hostname is '%s'", 
+			value ? value : "NULL");
 		if (value && strlen (value))
 			g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME, value, NULL);
 		g_free (value);
@@ -1571,6 +1573,8 @@ make_ip6_setting (shvarFile *ifcfg,
 	              NM_SETTING_IP6_CONFIG_IP6_PRIVACY, ip6_privacy_val,
 	              NULL);
 
+	PLUGIN_WARN (IFCFG_PLUGIN_NAME, "IPv6 method is '%s'",
+			method ? method : "NULL");
 	/* Don't bother to read IP, DNS and routes when IPv6 is disabled */
 	if (strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_IGNORE) == 0)
 		return NM_SETTING (s_ip6);
@@ -1606,7 +1610,16 @@ make_ip6_setting (shvarFile *ifcfg,
 		}
 		g_strfreev (list);
 	} else if (!strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_AUTO)) {
-		/* TODO - autoconf or DHCPv6 stuff goes here */
+		/* TODO - autoconf stuff goes here */
+	} else if (!strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_DHCP)) {
+		/* Handling DHCPv6 here */
+		PLUGIN_WARN (IFCFG_PLUGIN_NAME, "info: DHCPV6C specified");
+		value = svGetValue (ifcfg, "DHCP_HOSTNAME", FALSE);
+		PLUGIN_WARN (IFCFG_PLUGIN_NAME, "IPv6 hostname is '%s'", 
+			value ? value : "NULL");
+		if (value && strlen (value))
+			g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_DHCP_HOSTNAME, value, NULL);
+		g_free (value);
 	}
 
 	/* DNS servers
diff -urp NetworkManager-0.9.7.0-4-pavbase/src/settings/plugins/ifcfg-rh/writer.c NetworkManager-0.9.7.0/src/settings/plugins/ifcfg-rh/writer.c
--- NetworkManager-0.9.7.0-4-pavbase/src/settings/plugins/ifcfg-rh/writer.c	2012-10-02 12:44:00.000000000 -0400
+++ NetworkManager-0.9.7.0/src/settings/plugins/ifcfg-rh/writer.c	2012-10-18 10:05:53.067989649 -0400
@@ -1585,6 +1585,8 @@ write_ip4_setting (NMConnection *connect
 		            FALSE);
 
 		value = nm_setting_ip4_config_get_dhcp_hostname (s_ip4);
+		PLUGIN_WARN (IFCFG_PLUGIN_NAME, "Set IPv4 DHCP_HOSTNAME to %s",
+		             value ? value : "Not Set");
 		if (value)
 			svSetValue (ifcfg, "DHCP_HOSTNAME", value, FALSE);
 
@@ -1782,9 +1784,15 @@ write_ip6_setting (NMConnection *connect
 		svSetValue (ifcfg, "IPV6_AUTOCONF", "yes", FALSE);
 		svSetValue (ifcfg, "DHCPV6C", NULL, FALSE);
 	} else if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_DHCP)) {
+		const char *hostname;
 		svSetValue (ifcfg, "IPV6INIT", "yes", FALSE);
 		svSetValue (ifcfg, "IPV6_AUTOCONF", "no", FALSE);
 		svSetValue (ifcfg, "DHCPV6C", "yes", FALSE);
+		hostname = nm_setting_ip6_config_get_dhcp_hostname (s_ip6);
+		PLUGIN_WARN (IFCFG_PLUGIN_NAME, "Set IPv6 DHCP_HOSTNAME to %s",
+		             hostname ? hostname : "Not Set");
+		if (hostname)
+			svSetValue (ifcfg, "DHCP_HOSTNAME", hostname, FALSE);
 	} else if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_MANUAL)) {
 		svSetValue (ifcfg, "IPV6INIT", "yes", FALSE);
 		svSetValue (ifcfg, "IPV6_AUTOCONF", "no", FALSE);
