about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2011-04-21 10:43:09 +0200
committerMichael Biebl <biebl@debian.org>2011-04-21 10:43:09 +0200
commit8aefc77115a9b89e96ff224e659e2271912a8295 (patch)
tree2aeaf38cdc77553c0bf417fb632c2a3d5e7adbc7
parent2fbd59597fe985d6feb382bf35145dcf2f481060 (diff)
parent8baa1aca8dfd35e3190d7d5655eb83b5b901e263 (diff)
Merge commit 'upstream/0.8.4.0'
-rw-r--r--NEWS10
-rwxr-xr-xconfigure24
-rw-r--r--configure.ac4
-rw-r--r--docs/libnm-glib/html/NMAccessPoint.html2
-rw-r--r--docs/libnm-glib/html/NMActiveConnection.html2
-rw-r--r--docs/libnm-glib/html/NMCdmaDevice.html2
-rw-r--r--docs/libnm-glib/html/NMClient.html2
-rw-r--r--docs/libnm-glib/html/NMDHCP4Config.html2
-rw-r--r--docs/libnm-glib/html/NMDHCP6Config.html2
-rw-r--r--docs/libnm-glib/html/NMDevice.html2
-rw-r--r--docs/libnm-glib/html/NMDeviceBt.html2
-rw-r--r--docs/libnm-glib/html/NMDeviceEthernet.html2
-rw-r--r--docs/libnm-glib/html/NMDeviceWifi.html2
-rw-r--r--docs/libnm-glib/html/NMExportedConnection.html2
-rw-r--r--docs/libnm-glib/html/NMGsmDevice.html2
-rw-r--r--docs/libnm-glib/html/NMIP4Config.html2
-rw-r--r--docs/libnm-glib/html/NMIP6Config.html2
-rw-r--r--docs/libnm-glib/html/NMObject.html2
-rw-r--r--docs/libnm-glib/html/NMRemoteConnection.html2
-rw-r--r--docs/libnm-glib/html/NMRemoteSettings.html2
-rw-r--r--docs/libnm-glib/html/NMSerialDevice.html2
-rw-r--r--docs/libnm-glib/html/NMVPNConnection.html2
-rw-r--r--docs/libnm-glib/html/ch01.html4
-rw-r--r--docs/libnm-glib/html/index.html2
-rw-r--r--docs/libnm-glib/html/libnm-glib-NMRemoteSettingsSystem.html2
-rw-r--r--docs/libnm-glib/html/libnm-glib-NMSettings.html2
-rw-r--r--docs/libnm-glib/html/libnm-glib-NMSettingsConnection.html2
-rw-r--r--docs/libnm-glib/html/libnm-glib-NMSettingsService.html2
-rw-r--r--docs/libnm-glib/html/libnm-glib-NMSettingsSystem.html2
-rw-r--r--docs/libnm-glib/html/libnm-glib-NMVPNPlugin.html2
-rw-r--r--docs/libnm-glib/html/libnm-glib-NMVpnPluginUi.html2
-rw-r--r--docs/libnm-glib/html/libnm-glib-nm-types.html2
-rw-r--r--docs/libnm-glib/libnm-glib-sections.txt61
-rw-r--r--docs/libnm-glib/tmpl/nm-device-modem-bindings.sgml31
-rw-r--r--docs/libnm-glib/tmpl/nm-device-wimax-bindings.sgml71
-rw-r--r--docs/libnm-glib/tmpl/nm-secret-agent-glue.sgml236
-rw-r--r--docs/libnm-glib/tmpl/nm-settings-connection-bindings.sgml164
-rw-r--r--docs/libnm-util/html/NMConnection.html2
-rw-r--r--docs/libnm-util/html/NMSetting.html2
-rw-r--r--docs/libnm-util/html/NMSetting8021x.html2
-rw-r--r--docs/libnm-util/html/NMSettingBluetooth.html2
-rw-r--r--docs/libnm-util/html/NMSettingCdma.html2
-rw-r--r--docs/libnm-util/html/NMSettingConnection.html2
-rw-r--r--docs/libnm-util/html/NMSettingGsm.html2
-rw-r--r--docs/libnm-util/html/NMSettingIP4Config.html2
-rw-r--r--docs/libnm-util/html/NMSettingIP6Config.html2
-rw-r--r--docs/libnm-util/html/NMSettingOlpcMesh.html2
-rw-r--r--docs/libnm-util/html/NMSettingPPP.html2
-rw-r--r--docs/libnm-util/html/NMSettingPPPOE.html2
-rw-r--r--docs/libnm-util/html/NMSettingSerial.html2
-rw-r--r--docs/libnm-util/html/NMSettingVPN.html2
-rw-r--r--docs/libnm-util/html/NMSettingWired.html4
-rw-r--r--docs/libnm-util/html/NMSettingWireless.html2
-rw-r--r--docs/libnm-util/html/NMSettingWirelessSecurity.html2
-rw-r--r--docs/libnm-util/html/annotation-glossary.html2
-rw-r--r--docs/libnm-util/html/api-index-full.html2
-rw-r--r--docs/libnm-util/html/ch01.html4
-rw-r--r--docs/libnm-util/html/index.html2
-rw-r--r--docs/libnm-util/html/libnm-util-nm-utils.html2
-rw-r--r--docs/libnm-util/html/object-tree.html2
-rw-r--r--docs/settings-spec.html2
-rw-r--r--include/nm-version.h2
-rw-r--r--libnm-glib/Makefile.am2
-rw-r--r--libnm-glib/Makefile.in2
-rw-r--r--libnm-util/nm-connection.c4
-rw-r--r--libnm-util/nm-setting-wired.c6
-rw-r--r--src/bluez-manager/Makefile.am3
-rw-r--r--src/bluez-manager/Makefile.in3
-rw-r--r--src/dns-manager/nm-dns-manager.c49
-rw-r--r--src/dns-manager/nm-dns-manager.h2
-rw-r--r--src/ip6-manager/nm-ip6-manager.c19
-rw-r--r--src/main.c110
-rw-r--r--src/modem-manager/nm-modem.c17
-rw-r--r--src/modem-manager/nm-modem.h1
-rw-r--r--src/nm-device.c2
-rw-r--r--src/nm-manager.c162
-rw-r--r--src/nm-system.c4
-rw-r--r--src/nm-udev-manager.c46
-rw-r--r--src/ppp-manager/nm-ppp-manager.c33
-rw-r--r--src/ppp-manager/nm-ppp-manager.h2
-rw-r--r--src/vpn-manager/nm-vpn-connection.c11
-rw-r--r--src/vpn-manager/nm-vpn-connection.h5
-rw-r--r--src/vpn-manager/nm-vpn-manager.c4
-rw-r--r--src/vpn-manager/nm-vpn-manager.h3
-rw-r--r--src/vpn-manager/nm-vpn-service.c4
-rw-r--r--src/vpn-manager/nm-vpn-service.h2
-rw-r--r--system-settings/plugins/ifcfg-rh/reader.c81
-rw-r--r--system-settings/plugins/ifcfg-rh/shvar.c4
-rw-r--r--system-settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am5
-rw-r--r--system-settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.in5
-rw-r--r--system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-ctc-static12
-rw-r--r--system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-ipv4-manual-112
-rw-r--r--system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-ipv4-manual-214
-rw-r--r--system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-ipv4-manual-311
-rw-r--r--system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-ipv4-manual-411
-rw-r--r--system-settings/plugins/ifcfg-rh/tests/test-ifcfg-rh-utils.c11
-rw-r--r--system-settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c819
-rw-r--r--system-settings/plugins/ifcfg-rh/writer.c86
98 files changed, 1383 insertions, 899 deletions
diff --git a/NEWS b/NEWS
index 951482e4..ef442071 100644
--- a/NEWS
+++ b/NEWS
@@ -10,14 +10,22 @@ This is a new stable release of NetworkManager.  Notable changes include:
 * Ensure removed devices are cleaned up
 * Fix potential 64-bit crash updating timestamps
 * IPv6 setup, routing, and compliance fixes
+* Fix WWAN enable/disable handling
 * Handle reverse DNS lookups with local caching nameserver configurations
+* Ensure usable DNS configuration is written when NetworkManager quits
 * No longer updates /etc/hosts when hostname changes
 * Request WPAD option from DHCP servers
-* Shutdown crash fixes
+* Allow use of paths for certificates and keys in connection keyfiles
+* Allow operation without any DHCP client installed
+* Fix operation with newer versions of dnsmasq
 * nmcli support for WWAN connections
 * Persistent hostname sent to DHCP servers by default
 * Allow disabing PPP support at build time
+* Red Hat/Fedora ifcfg plugin fixes for handling S390 CTC device configuration
+* Red Hat/Fedora ifcfg plugin fixes for handling IPADDR config items
+* Shutdown crash fixes
 * Memory leak fixes
+* Documentation fixes and updates
 * and much more...
 
 ==============================================
diff --git a/configure b/configure
index c176ff90..70d04a2b 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.66 for NetworkManager 0.8.3.999.
+# Generated by GNU Autoconf 2.66 for NetworkManager 0.8.4.0.
 #
 # Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=NetworkManager>.
 #
@@ -563,8 +563,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='NetworkManager'
 PACKAGE_TARNAME='NetworkManager'
-PACKAGE_VERSION='0.8.3.999'
-PACKAGE_STRING='NetworkManager 0.8.3.999'
+PACKAGE_VERSION='0.8.4.0'
+PACKAGE_STRING='NetworkManager 0.8.4.0'
 PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=NetworkManager'
 PACKAGE_URL=''
 
@@ -1464,7 +1464,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures NetworkManager 0.8.3.999 to adapt to many kinds of systems.
+\`configure' configures NetworkManager 0.8.4.0 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1534,7 +1534,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of NetworkManager 0.8.3.999:";;
+     short | recursive ) echo "Configuration of NetworkManager 0.8.4.0:";;
    esac
   cat <<\_ACEOF
 
@@ -1704,7 +1704,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-NetworkManager configure 0.8.3.999
+NetworkManager configure 0.8.4.0
 generated by GNU Autoconf 2.66
 
 Copyright (C) 2010 Free Software Foundation, Inc.
@@ -2127,7 +2127,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by NetworkManager $as_me 0.8.3.999, which was
+It was created by NetworkManager $as_me 0.8.4.0, which was
 generated by GNU Autoconf 2.66.  Invocation command line was
 
   $ $0 $@
@@ -2942,7 +2942,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='NetworkManager'
- VERSION='0.8.3.999'
+ VERSION='0.8.4.0'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -11843,8 +11843,8 @@ fi
 
 NM_MAJOR_VERSION=0
 NM_MINOR_VERSION=8
-NM_MICRO_VERSION=3
-NM_VERSION=0.8.3.999
+NM_MICRO_VERSION=4
+NM_VERSION=0.8.4.0
 
 
 
@@ -16989,7 +16989,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by NetworkManager $as_me 0.8.3.999, which was
+This file was extended by NetworkManager $as_me 0.8.4.0, which was
 generated by GNU Autoconf 2.66.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -17055,7 +17055,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-NetworkManager config.status 0.8.3.999
+NetworkManager config.status 0.8.4.0
 configured by $0, generated by GNU Autoconf 2.66,
   with options \\"\$ac_cs_config\\"
 
diff --git a/configure.ac b/configure.ac
index dbf720cf..d8a266ed 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3,8 +3,8 @@ AC_PREREQ(2.52)
 dnl The NM version number
 m4_define([nm_major_version], [0])
 m4_define([nm_minor_version], [8])
-m4_define([nm_micro_version], [3])
-m4_define([nm_nano_version],  [999])
+m4_define([nm_micro_version], [4])
+m4_define([nm_nano_version],  [0])
 m4_define([nm_version],
           [nm_major_version.nm_minor_version.nm_micro_version.nm_nano_version])
 
diff --git a/docs/libnm-glib/html/NMAccessPoint.html b/docs/libnm-glib/html/NMAccessPoint.html
index 71c134c9..e26a0515 100644
--- a/docs/libnm-glib/html/NMAccessPoint.html
+++ b/docs/libnm-glib/html/NMAccessPoint.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMAccessPoint</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-glib Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-glib Objects">
 <link rel="prev" href="NMDeviceBt.html" title="NMDeviceBt">
diff --git a/docs/libnm-glib/html/NMActiveConnection.html b/docs/libnm-glib/html/NMActiveConnection.html
index bf28b0a5..5aa96a21 100644
--- a/docs/libnm-glib/html/NMActiveConnection.html
+++ b/docs/libnm-glib/html/NMActiveConnection.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMActiveConnection</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-glib Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-glib Objects">
 <link rel="prev" href="NMClient.html" title="NMClient">
diff --git a/docs/libnm-glib/html/NMCdmaDevice.html b/docs/libnm-glib/html/NMCdmaDevice.html
index 3bea2397..c96dc1bc 100644
--- a/docs/libnm-glib/html/NMCdmaDevice.html
+++ b/docs/libnm-glib/html/NMCdmaDevice.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMCdmaDevice</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-glib Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-glib Objects">
 <link rel="prev" href="NMGsmDevice.html" title="NMGsmDevice">
diff --git a/docs/libnm-glib/html/NMClient.html b/docs/libnm-glib/html/NMClient.html
index f2e61adb..e9087cf0 100644
--- a/docs/libnm-glib/html/NMClient.html
+++ b/docs/libnm-glib/html/NMClient.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMClient</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-glib Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-glib Objects">
 <link rel="prev" href="ch01.html" title="libnm-glib Objects">
diff --git a/docs/libnm-glib/html/NMDHCP4Config.html b/docs/libnm-glib/html/NMDHCP4Config.html
index 233b1047..fb2e06de 100644
--- a/docs/libnm-glib/html/NMDHCP4Config.html
+++ b/docs/libnm-glib/html/NMDHCP4Config.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMDHCP4Config</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-glib Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-glib Objects">
 <link rel="prev" href="NMIP6Config.html" title="NMIP6Config">
diff --git a/docs/libnm-glib/html/NMDHCP6Config.html b/docs/libnm-glib/html/NMDHCP6Config.html
index 4dd32c33..36f91a24 100644
--- a/docs/libnm-glib/html/NMDHCP6Config.html
+++ b/docs/libnm-glib/html/NMDHCP6Config.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMDHCP6Config</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-glib Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-glib Objects">
 <link rel="prev" href="NMDHCP4Config.html" title="NMDHCP4Config">
diff --git a/docs/libnm-glib/html/NMDevice.html b/docs/libnm-glib/html/NMDevice.html
index 31672ab6..da61cfdc 100644
--- a/docs/libnm-glib/html/NMDevice.html
+++ b/docs/libnm-glib/html/NMDevice.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMDevice</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-glib Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-glib Objects">
 <link rel="prev" href="NMActiveConnection.html" title="NMActiveConnection">
diff --git a/docs/libnm-glib/html/NMDeviceBt.html b/docs/libnm-glib/html/NMDeviceBt.html
index 3893c367..d15fc7b6 100644
--- a/docs/libnm-glib/html/NMDeviceBt.html
+++ b/docs/libnm-glib/html/NMDeviceBt.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMDeviceBt</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-glib Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-glib Objects">
 <link rel="prev" href="NMCdmaDevice.html" title="NMCdmaDevice">
diff --git a/docs/libnm-glib/html/NMDeviceEthernet.html b/docs/libnm-glib/html/NMDeviceEthernet.html
index ff725116..736f532a 100644
--- a/docs/libnm-glib/html/NMDeviceEthernet.html
+++ b/docs/libnm-glib/html/NMDeviceEthernet.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMDeviceEthernet</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-glib Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-glib Objects">
 <link rel="prev" href="NMDevice.html" title="NMDevice">
diff --git a/docs/libnm-glib/html/NMDeviceWifi.html b/docs/libnm-glib/html/NMDeviceWifi.html
index c08e9cd1..b4078b37 100644
--- a/docs/libnm-glib/html/NMDeviceWifi.html
+++ b/docs/libnm-glib/html/NMDeviceWifi.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMDeviceWifi</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-glib Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-glib Objects">
 <link rel="prev" href="NMDeviceEthernet.html" title="NMDeviceEthernet">
diff --git a/docs/libnm-glib/html/NMExportedConnection.html b/docs/libnm-glib/html/NMExportedConnection.html
index 9cd9ee73..e4aa1a45 100644
--- a/docs/libnm-glib/html/NMExportedConnection.html
+++ b/docs/libnm-glib/html/NMExportedConnection.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMExportedConnection</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-glib Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-glib Objects">
 <link rel="prev" href="NMDHCP6Config.html" title="NMDHCP6Config">
diff --git a/docs/libnm-glib/html/NMGsmDevice.html b/docs/libnm-glib/html/NMGsmDevice.html
index bad58c50..d6ef1e0f 100644
--- a/docs/libnm-glib/html/NMGsmDevice.html
+++ b/docs/libnm-glib/html/NMGsmDevice.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMGsmDevice</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-glib Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-glib Objects">
 <link rel="prev" href="NMSerialDevice.html" title="NMSerialDevice">
diff --git a/docs/libnm-glib/html/NMIP4Config.html b/docs/libnm-glib/html/NMIP4Config.html
index 63f441c3..748cce11 100644
--- a/docs/libnm-glib/html/NMIP4Config.html
+++ b/docs/libnm-glib/html/NMIP4Config.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMIP4Config</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-glib Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-glib Objects">
 <link rel="prev" href="NMAccessPoint.html" title="NMAccessPoint">
diff --git a/docs/libnm-glib/html/NMIP6Config.html b/docs/libnm-glib/html/NMIP6Config.html
index b8de4edf..2be20459 100644
--- a/docs/libnm-glib/html/NMIP6Config.html
+++ b/docs/libnm-glib/html/NMIP6Config.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMIP6Config</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-glib Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-glib Objects">
 <link rel="prev" href="NMIP4Config.html" title="NMIP4Config">
diff --git a/docs/libnm-glib/html/NMObject.html b/docs/libnm-glib/html/NMObject.html
index b21facc5..d0bac52b 100644
--- a/docs/libnm-glib/html/NMObject.html
+++ b/docs/libnm-glib/html/NMObject.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMObject</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-glib Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-glib Objects">
 <link rel="prev" href="NMExportedConnection.html" title="NMExportedConnection">
diff --git a/docs/libnm-glib/html/NMRemoteConnection.html b/docs/libnm-glib/html/NMRemoteConnection.html
index be3b10b0..adf04941 100644
--- a/docs/libnm-glib/html/NMRemoteConnection.html
+++ b/docs/libnm-glib/html/NMRemoteConnection.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMRemoteConnection</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-glib Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-glib Objects">
 <link rel="prev" href="NMObject.html" title="NMObject">
diff --git a/docs/libnm-glib/html/NMRemoteSettings.html b/docs/libnm-glib/html/NMRemoteSettings.html
index d37f1883..259a5b3d 100644
--- a/docs/libnm-glib/html/NMRemoteSettings.html
+++ b/docs/libnm-glib/html/NMRemoteSettings.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMRemoteSettings</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-glib Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-glib Objects">
 <link rel="prev" href="NMRemoteConnection.html" title="NMRemoteConnection">
diff --git a/docs/libnm-glib/html/NMSerialDevice.html b/docs/libnm-glib/html/NMSerialDevice.html
index 1b749ed7..3d968eb1 100644
--- a/docs/libnm-glib/html/NMSerialDevice.html
+++ b/docs/libnm-glib/html/NMSerialDevice.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMSerialDevice</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-glib Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-glib Objects">
 <link rel="prev" href="NMDeviceWifi.html" title="NMDeviceWifi">
diff --git a/docs/libnm-glib/html/NMVPNConnection.html b/docs/libnm-glib/html/NMVPNConnection.html
index fa9961a5..ed46f644 100644
--- a/docs/libnm-glib/html/NMVPNConnection.html
+++ b/docs/libnm-glib/html/NMVPNConnection.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMVPNConnection</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-glib Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-glib Objects">
 <link rel="prev" href="libnm-glib-nm-types.html" title="nm-types">
diff --git a/docs/libnm-glib/html/ch01.html b/docs/libnm-glib/html/ch01.html
index 8a1a05e0..df7fcc7e 100644
--- a/docs/libnm-glib/html/ch01.html
+++ b/docs/libnm-glib/html/ch01.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>libnm-glib Objects</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-glib Reference Manual">
 <link rel="up" href="index.html" title="libnm-glib Reference Manual">
 <link rel="prev" href="index.html" title="libnm-glib Reference Manual">
@@ -21,7 +21,7 @@
 </tr></table>
 <div class="chapter" title="libnm-glib Objects">
 <div class="titlepage"><div><div><h2 class="title">
-<a name="id2910172"></a>libnm-glib Objects</h2></div></div></div>
+<a name="id2846112"></a>libnm-glib Objects</h2></div></div></div>
 <div class="toc"><dl>
 <dt>
 <span class="refentrytitle"><a href="NMClient.html">NMClient</a></span><span class="refpurpose"></span>
diff --git a/docs/libnm-glib/html/index.html b/docs/libnm-glib/html/index.html
index 02d33be8..53f21016 100644
--- a/docs/libnm-glib/html/index.html
+++ b/docs/libnm-glib/html/index.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>libnm-glib Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-glib Reference Manual">
 <link rel="next" href="ch01.html" title="libnm-glib Objects">
 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
diff --git a/docs/libnm-glib/html/libnm-glib-NMRemoteSettingsSystem.html b/docs/libnm-glib/html/libnm-glib-NMRemoteSettingsSystem.html
index d87a2fd2..e2762112 100644
--- a/docs/libnm-glib/html/libnm-glib-NMRemoteSettingsSystem.html
+++ b/docs/libnm-glib/html/libnm-glib-NMRemoteSettingsSystem.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMRemoteSettingsSystem</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-glib Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-glib Objects">
 <link rel="prev" href="NMRemoteSettings.html" title="NMRemoteSettings">
diff --git a/docs/libnm-glib/html/libnm-glib-NMSettings.html b/docs/libnm-glib/html/libnm-glib-NMSettings.html
index e56ab8fc..160eaca6 100644
--- a/docs/libnm-glib/html/libnm-glib-NMSettings.html
+++ b/docs/libnm-glib/html/libnm-glib-NMSettings.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMSettings</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-glib Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-glib Objects">
 <link rel="prev" href="libnm-glib-NMSettingsConnection.html" title="NMSettingsConnection">
diff --git a/docs/libnm-glib/html/libnm-glib-NMSettingsConnection.html b/docs/libnm-glib/html/libnm-glib-NMSettingsConnection.html
index dc4e4ffa..c5ed0d3c 100644
--- a/docs/libnm-glib/html/libnm-glib-NMSettingsConnection.html
+++ b/docs/libnm-glib/html/libnm-glib-NMSettingsConnection.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMSettingsConnection</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-glib Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-glib Objects">
 <link rel="prev" href="libnm-glib-NMRemoteSettingsSystem.html" title="NMRemoteSettingsSystem">
diff --git a/docs/libnm-glib/html/libnm-glib-NMSettingsService.html b/docs/libnm-glib/html/libnm-glib-NMSettingsService.html
index 85c51a6b..aca35d28 100644
--- a/docs/libnm-glib/html/libnm-glib-NMSettingsService.html
+++ b/docs/libnm-glib/html/libnm-glib-NMSettingsService.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMSettingsService</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-glib Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-glib Objects">
 <link rel="prev" href="libnm-glib-NMSettings.html" title="NMSettings">
diff --git a/docs/libnm-glib/html/libnm-glib-NMSettingsSystem.html b/docs/libnm-glib/html/libnm-glib-NMSettingsSystem.html
index 1be498be..1f096d90 100644
--- a/docs/libnm-glib/html/libnm-glib-NMSettingsSystem.html
+++ b/docs/libnm-glib/html/libnm-glib-NMSettingsSystem.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMSettingsSystem</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-glib Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-glib Objects">
 <link rel="prev" href="libnm-glib-NMSettingsService.html" title="NMSettingsService">
diff --git a/docs/libnm-glib/html/libnm-glib-NMVPNPlugin.html b/docs/libnm-glib/html/libnm-glib-NMVPNPlugin.html
index f085a2be..136ad832 100644
--- a/docs/libnm-glib/html/libnm-glib-NMVPNPlugin.html
+++ b/docs/libnm-glib/html/libnm-glib-NMVPNPlugin.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMVPNPlugin</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-glib Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-glib Objects">
 <link rel="prev" href="NMVPNConnection.html" title="NMVPNConnection">
diff --git a/docs/libnm-glib/html/libnm-glib-NMVpnPluginUi.html b/docs/libnm-glib/html/libnm-glib-NMVpnPluginUi.html
index 30017061..4716294e 100644
--- a/docs/libnm-glib/html/libnm-glib-NMVpnPluginUi.html
+++ b/docs/libnm-glib/html/libnm-glib-NMVpnPluginUi.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMVpnPluginUi</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-glib Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-glib Objects">
 <link rel="prev" href="libnm-glib-NMVPNPlugin.html" title="NMVPNPlugin">
diff --git a/docs/libnm-glib/html/libnm-glib-nm-types.html b/docs/libnm-glib/html/libnm-glib-nm-types.html
index ec303a29..51dcdb01 100644
--- a/docs/libnm-glib/html/libnm-glib-nm-types.html
+++ b/docs/libnm-glib/html/libnm-glib-nm-types.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>nm-types</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-glib Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-glib Objects">
 <link rel="prev" href="libnm-glib-NMSettingsSystem.html" title="NMSettingsSystem">
diff --git a/docs/libnm-glib/libnm-glib-sections.txt b/docs/libnm-glib/libnm-glib-sections.txt
index f20c39de..a585d42c 100644
--- a/docs/libnm-glib/libnm-glib-sections.txt
+++ b/docs/libnm-glib/libnm-glib-sections.txt
@@ -624,62 +624,6 @@ NM_SETTINGS_INTERFACE_GET_INTERFACE
 </SECTION>
 
 <SECTION>
-<FILE>nm-device-wimax-bindings</FILE>
-DBUS_GLIB_CLIENT_WRAPPERS_org_freedesktop_NetworkManager_Device_WiMax
-org_freedesktop_NetworkManager_Device_WiMax_get_nsp_list
-org_freedesktop_NetworkManager_Device_WiMax_get_nsp_list_reply
-org_freedesktop_NetworkManager_Device_WiMax_get_nsp_list_async
-dbus_g_proxy_begin_call
-</SECTION>
-
-<SECTION>
-<FILE>nm-settings-connection-bindings</FILE>
-DBUS_GLIB_CLIENT_WRAPPERS_org_freedesktop_NetworkManager_Settings_Connection
-org_freedesktop_NetworkManager_Settings_Connection_update
-org_freedesktop_NetworkManager_Settings_Connection_update_reply
-org_freedesktop_NetworkManager_Settings_Connection_update_async
-dbus_g_proxy_begin_call
-org_freedesktop_NetworkManager_Settings_Connection_delete
-org_freedesktop_NetworkManager_Settings_Connection_delete_reply
-org_freedesktop_NetworkManager_Settings_Connection_delete_async
-org_freedesktop_NetworkManager_Settings_Connection_get_settings
-org_freedesktop_NetworkManager_Settings_Connection_get_settings_reply
-org_freedesktop_NetworkManager_Settings_Connection_get_settings_async
-org_freedesktop_NetworkManager_Settings_Connection_get_secrets
-org_freedesktop_NetworkManager_Settings_Connection_get_secrets_reply
-org_freedesktop_NetworkManager_Settings_Connection_get_secrets_async
-</SECTION>
-
-<SECTION>
-<FILE>nm-secret-agent-glue</FILE>
-g_marshal_value_peek_boolean
-g_marshal_value_peek_char
-g_marshal_value_peek_uchar
-g_marshal_value_peek_int
-g_marshal_value_peek_uint
-g_marshal_value_peek_long
-g_marshal_value_peek_ulong
-g_marshal_value_peek_int64
-g_marshal_value_peek_uint64
-g_marshal_value_peek_enum
-g_marshal_value_peek_flags
-g_marshal_value_peek_float
-g_marshal_value_peek_double
-g_marshal_value_peek_string
-g_marshal_value_peek_param
-g_marshal_value_peek_boxed
-g_marshal_value_peek_pointer
-g_marshal_value_peek_object
-g_marshal_value_peek_variant
-dbus_glib_marshal_nm_secret_agent_VOID__BOXED_STRING_POINTER
-dbus_glib_marshal_nm_secret_agent_NONE__BOXED_STRING_POINTER
-dbus_glib_marshal_nm_secret_agent_VOID__BOXED_BOXED_STRING_BOXED_UINT_POINTER
-dbus_glib_marshal_nm_secret_agent_NONE__BOXED_BOXED_STRING_BOXED_UINT_POINTER
-dbus_glib_marshal_nm_secret_agent_VOID__BOXED_BOXED_POINTER
-dbus_glib_marshal_nm_secret_agent_NONE__BOXED_BOXED_POINTER
-</SECTION>
-
-<SECTION>
 <FILE>nm-types</FILE>
 NM_TYPE_SSID
 nm_ssid_get_type
@@ -697,8 +641,3 @@ NM_TYPE_IP6_ROUTE_OBJECT_ARRAY
 nm_ip6_route_object_array_get_type
 </SECTION>
 
-<SECTION>
-<FILE>nm-device-modem-bindings</FILE>
-DBUS_GLIB_CLIENT_WRAPPERS_org_freedesktop_NetworkManager_Device_Modem
-</SECTION>
-
diff --git a/docs/libnm-glib/tmpl/nm-device-modem-bindings.sgml b/docs/libnm-glib/tmpl/nm-device-modem-bindings.sgml
deleted file mode 100644
index b01b1734..00000000
--- a/docs/libnm-glib/tmpl/nm-device-modem-bindings.sgml
+++ /dev/null
@@ -1,31 +0,0 @@
-<!-- ##### SECTION Title ##### -->
-nm-device-modem-bindings
-
-<!-- ##### SECTION Short_Description ##### -->
-
-
-<!-- ##### SECTION Long_Description ##### -->
-<para>
-
-</para>
-
-
-<!-- ##### SECTION See_Also ##### -->
-<para>
-
-</para>
-
-
-<!-- ##### SECTION Stability_Level ##### -->
-
-
-<!-- ##### SECTION Image ##### -->
-
-
-<!-- ##### MACRO DBUS_GLIB_CLIENT_WRAPPERS_org_freedesktop_NetworkManager_Device_Modem ##### -->
-<para>
-
-</para>
-
-
-
diff --git a/docs/libnm-glib/tmpl/nm-device-wimax-bindings.sgml b/docs/libnm-glib/tmpl/nm-device-wimax-bindings.sgml
deleted file mode 100644
index 8b79e1c1..00000000
--- a/docs/libnm-glib/tmpl/nm-device-wimax-bindings.sgml
+++ /dev/null
@@ -1,71 +0,0 @@
-<!-- ##### SECTION Title ##### -->
-nm-device-wimax-bindings
-
-<!-- ##### SECTION Short_Description ##### -->
-
-
-<!-- ##### SECTION Long_Description ##### -->
-<para>
-
-</para>
-
-
-<!-- ##### SECTION See_Also ##### -->
-<para>
-
-</para>
-
-
-<!-- ##### SECTION Stability_Level ##### -->
-
-
-<!-- ##### SECTION Image ##### -->
-
-
-<!-- ##### MACRO DBUS_GLIB_CLIENT_WRAPPERS_org_freedesktop_NetworkManager_Device_WiMax ##### -->
-<para>
-
-</para>
-
-
-
-<!-- ##### FUNCTION org_freedesktop_NetworkManager_Device_WiMax_get_nsp_list ##### -->
-<para>
-
-</para>
-
-@proxy: 
-@OUT_nsps: 
-@Returns: 
-
-
-<!-- ##### USER_FUNCTION org_freedesktop_NetworkManager_Device_WiMax_get_nsp_list_reply ##### -->
-<para>
-
-</para>
-
-@proxy: 
-@OUT_nsps: 
-@error: 
-@userdata: 
-
-
-<!-- ##### FUNCTION org_freedesktop_NetworkManager_Device_WiMax_get_nsp_list_async ##### -->
-<para>
-
-</para>
-
-@proxy: 
-@callback: 
-@Returns: 
-
-
-<!-- ##### FUNCTION dbus_g_proxy_begin_call ##### -->
-<para>
-
-</para>
-
-@Param1: 
-@Returns: 
-
-
diff --git a/docs/libnm-glib/tmpl/nm-secret-agent-glue.sgml b/docs/libnm-glib/tmpl/nm-secret-agent-glue.sgml
deleted file mode 100644
index 932de41e..00000000
--- a/docs/libnm-glib/tmpl/nm-secret-agent-glue.sgml
+++ /dev/null
@@ -1,236 +0,0 @@
-<!-- ##### SECTION Title ##### -->
-nm-secret-agent-glue
-
-<!-- ##### SECTION Short_Description ##### -->
-
-
-<!-- ##### SECTION Long_Description ##### -->
-<para>
-
-</para>
-
-
-<!-- ##### SECTION See_Also ##### -->
-<para>
-
-</para>
-
-
-<!-- ##### SECTION Stability_Level ##### -->
-
-
-<!-- ##### SECTION Image ##### -->
-
-
-<!-- ##### MACRO g_marshal_value_peek_boolean ##### -->
-<para>
-
-</para>
-
-@v: 
-
-
-<!-- ##### MACRO g_marshal_value_peek_char ##### -->
-<para>
-
-</para>
-
-@v: 
-
-
-<!-- ##### MACRO g_marshal_value_peek_uchar ##### -->
-<para>
-
-</para>
-
-@v: 
-
-
-<!-- ##### MACRO g_marshal_value_peek_int ##### -->
-<para>
-
-</para>
-
-@v: 
-
-
-<!-- ##### MACRO g_marshal_value_peek_uint ##### -->
-<para>
-
-</para>
-
-@v: 
-
-
-<!-- ##### MACRO g_marshal_value_peek_long ##### -->
-<para>
-
-</para>
-
-@v: 
-
-
-<!-- ##### MACRO g_marshal_value_peek_ulong ##### -->
-<para>
-
-</para>
-
-@v: 
-
-
-<!-- ##### MACRO g_marshal_value_peek_int64 ##### -->
-<para>
-
-</para>
-
-@v: 
-
-
-<!-- ##### MACRO g_marshal_value_peek_uint64 ##### -->
-<para>
-
-</para>
-
-@v: 
-
-
-<!-- ##### MACRO g_marshal_value_peek_enum ##### -->
-<para>
-
-</para>
-
-@v: 
-
-
-<!-- ##### MACRO g_marshal_value_peek_flags ##### -->
-<para>
-
-</para>
-
-@v: 
-
-
-<!-- ##### MACRO g_marshal_value_peek_float ##### -->
-<para>
-
-</para>
-
-@v: 
-
-
-<!-- ##### MACRO g_marshal_value_peek_double ##### -->
-<para>
-
-</para>
-
-@v: 
-
-
-<!-- ##### MACRO g_marshal_value_peek_string ##### -->
-<para>
-
-</para>
-
-@v: 
-
-
-<!-- ##### MACRO g_marshal_value_peek_param ##### -->
-<para>
-
-</para>
-
-@v: 
-
-
-<!-- ##### MACRO g_marshal_value_peek_boxed ##### -->
-<para>
-
-</para>
-
-@v: 
-
-
-<!-- ##### MACRO g_marshal_value_peek_pointer ##### -->
-<para>
-
-</para>
-
-@v: 
-
-
-<!-- ##### MACRO g_marshal_value_peek_object ##### -->
-<para>
-
-</para>
-
-@v: 
-
-
-<!-- ##### MACRO g_marshal_value_peek_variant ##### -->
-<para>
-
-</para>
-
-@v: 
-
-
-<!-- ##### FUNCTION dbus_glib_marshal_nm_secret_agent_VOID__BOXED_STRING_POINTER ##### -->
-<para>
-
-</para>
-
-@closure: 
-@return_value: 
-@n_param_values: 
-@param_values: 
-@invocation_hint: 
-@marshal_data: 
-
-
-<!-- ##### MACRO dbus_glib_marshal_nm_secret_agent_NONE__BOXED_STRING_POINTER ##### -->
-<para>
-
-</para>
-
-
-
-<!-- ##### FUNCTION dbus_glib_marshal_nm_secret_agent_VOID__BOXED_BOXED_STRING_BOXED_UINT_POINTER ##### -->
-<para>
-
-</para>
-
-@closure: 
-@return_value: 
-@n_param_values: 
-@param_values: 
-@invocation_hint: 
-@marshal_data: 
-
-
-<!-- ##### MACRO dbus_glib_marshal_nm_secret_agent_NONE__BOXED_BOXED_STRING_BOXED_UINT_POINTER ##### -->
-<para>
-
-</para>
-
-
-
-<!-- ##### FUNCTION dbus_glib_marshal_nm_secret_agent_VOID__BOXED_BOXED_POINTER ##### -->
-<para>
-
-</para>
-
-@closure: 
-@return_value: 
-@n_param_values: 
-@param_values: 
-@invocation_hint: 
-@marshal_data: 
-
-
-<!-- ##### MACRO dbus_glib_marshal_nm_secret_agent_NONE__BOXED_BOXED_POINTER ##### -->
-<para>
-
-</para>
-
-
-
diff --git a/docs/libnm-glib/tmpl/nm-settings-connection-bindings.sgml b/docs/libnm-glib/tmpl/nm-settings-connection-bindings.sgml
deleted file mode 100644
index f6333a4f..00000000
--- a/docs/libnm-glib/tmpl/nm-settings-connection-bindings.sgml
+++ /dev/null
@@ -1,164 +0,0 @@
-<!-- ##### SECTION Title ##### -->
-nm-settings-connection-bindings
-
-<!-- ##### SECTION Short_Description ##### -->
-
-
-<!-- ##### SECTION Long_Description ##### -->
-<para>
-
-</para>
-
-
-<!-- ##### SECTION See_Also ##### -->
-<para>
-
-</para>
-
-
-<!-- ##### SECTION Stability_Level ##### -->
-
-
-<!-- ##### SECTION Image ##### -->
-
-
-<!-- ##### MACRO DBUS_GLIB_CLIENT_WRAPPERS_org_freedesktop_NetworkManager_Settings_Connection ##### -->
-<para>
-
-</para>
-
-
-
-<!-- ##### FUNCTION org_freedesktop_NetworkManager_Settings_Connection_update ##### -->
-<para>
-
-</para>
-
-@proxy: 
-@IN_properties: 
-@Returns: 
-
-
-<!-- ##### USER_FUNCTION org_freedesktop_NetworkManager_Settings_Connection_update_reply ##### -->
-<para>
-
-</para>
-
-@proxy: 
-@error: 
-@userdata: 
-
-
-<!-- ##### FUNCTION org_freedesktop_NetworkManager_Settings_Connection_update_async ##### -->
-<para>
-
-</para>
-
-@proxy: 
-@IN_properties: 
-@callback: 
-@Returns: 
-
-
-<!-- ##### FUNCTION dbus_g_proxy_begin_call ##### -->
-<para>
-
-</para>
-
-@Param1: 
-@Returns: 
-
-
-<!-- ##### FUNCTION org_freedesktop_NetworkManager_Settings_Connection_delete ##### -->
-<para>
-
-</para>
-
-@proxy: 
-@Returns: 
-
-
-<!-- ##### USER_FUNCTION org_freedesktop_NetworkManager_Settings_Connection_delete_reply ##### -->
-<para>
-
-</para>
-
-@proxy: 
-@error: 
-@userdata: 
-
-
-<!-- ##### FUNCTION org_freedesktop_NetworkManager_Settings_Connection_delete_async ##### -->
-<para>
-
-</para>
-
-@proxy: 
-@callback: 
-@Returns: 
-
-
-<!-- ##### FUNCTION org_freedesktop_NetworkManager_Settings_Connection_get_settings ##### -->
-<para>
-
-</para>
-
-@proxy: 
-@OUT_settings: 
-@Returns: 
-
-
-<!-- ##### USER_FUNCTION org_freedesktop_NetworkManager_Settings_Connection_get_settings_reply ##### -->
-<para>
-
-</para>
-
-@proxy: 
-@OUT_settings: 
-@error: 
-@userdata: 
-
-
-<!-- ##### FUNCTION org_freedesktop_NetworkManager_Settings_Connection_get_settings_async ##### -->
-<para>
-
-</para>
-
-@proxy: 
-@callback: 
-@Returns: 
-
-
-<!-- ##### FUNCTION org_freedesktop_NetworkManager_Settings_Connection_get_secrets ##### -->
-<para>
-
-</para>
-
-@proxy: 
-@IN_setting_name: 
-@OUT_secrets: 
-@Returns: 
-
-
-<!-- ##### USER_FUNCTION org_freedesktop_NetworkManager_Settings_Connection_get_secrets_reply ##### -->
-<para>
-
-</para>
-
-@proxy: 
-@OUT_secrets: 
-@error: 
-@userdata: 
-
-
-<!-- ##### FUNCTION org_freedesktop_NetworkManager_Settings_Connection_get_secrets_async ##### -->
-<para>
-
-</para>
-
-@proxy: 
-@IN_setting_name: 
-@callback: 
-@Returns: 
-
-
diff --git a/docs/libnm-util/html/NMConnection.html b/docs/libnm-util/html/NMConnection.html
index 7d660012..3ff24b7e 100644
--- a/docs/libnm-util/html/NMConnection.html
+++ b/docs/libnm-util/html/NMConnection.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMConnection</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-util Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-util API Reference">
 <link rel="prev" href="ch01.html" title="libnm-util API Reference">
diff --git a/docs/libnm-util/html/NMSetting.html b/docs/libnm-util/html/NMSetting.html
index a31c80d4..77129d21 100644
--- a/docs/libnm-util/html/NMSetting.html
+++ b/docs/libnm-util/html/NMSetting.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMSetting</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-util Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-util API Reference">
 <link rel="prev" href="NMConnection.html" title="NMConnection">
diff --git a/docs/libnm-util/html/NMSetting8021x.html b/docs/libnm-util/html/NMSetting8021x.html
index 7b25578e..aec1b96e 100644
--- a/docs/libnm-util/html/NMSetting8021x.html
+++ b/docs/libnm-util/html/NMSetting8021x.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMSetting8021x</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-util Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-util API Reference">
 <link rel="prev" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh">
diff --git a/docs/libnm-util/html/NMSettingBluetooth.html b/docs/libnm-util/html/NMSettingBluetooth.html
index 068c5e83..0dabd239 100644
--- a/docs/libnm-util/html/NMSettingBluetooth.html
+++ b/docs/libnm-util/html/NMSettingBluetooth.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMSettingBluetooth</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-util Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-util API Reference">
 <link rel="prev" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">
diff --git a/docs/libnm-util/html/NMSettingCdma.html b/docs/libnm-util/html/NMSettingCdma.html
index 6ee02f0d..1704380c 100644
--- a/docs/libnm-util/html/NMSettingCdma.html
+++ b/docs/libnm-util/html/NMSettingCdma.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMSettingCdma</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-util Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-util API Reference">
 <link rel="prev" href="NMSettingSerial.html" title="NMSettingSerial">
diff --git a/docs/libnm-util/html/NMSettingConnection.html b/docs/libnm-util/html/NMSettingConnection.html
index f70fdb95..b84ed1bf 100644
--- a/docs/libnm-util/html/NMSettingConnection.html
+++ b/docs/libnm-util/html/NMSettingConnection.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMSettingConnection</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-util Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-util API Reference">
 <link rel="prev" href="NMSetting.html" title="NMSetting">
diff --git a/docs/libnm-util/html/NMSettingGsm.html b/docs/libnm-util/html/NMSettingGsm.html
index c3f8c318..47af8253 100644
--- a/docs/libnm-util/html/NMSettingGsm.html
+++ b/docs/libnm-util/html/NMSettingGsm.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMSettingGsm</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-util Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-util API Reference">
 <link rel="prev" href="NMSettingCdma.html" title="NMSettingCdma">
diff --git a/docs/libnm-util/html/NMSettingIP4Config.html b/docs/libnm-util/html/NMSettingIP4Config.html
index 7f0eef80..d4b1422f 100644
--- a/docs/libnm-util/html/NMSettingIP4Config.html
+++ b/docs/libnm-util/html/NMSettingIP4Config.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMSettingIP4Config</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-util Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-util API Reference">
 <link rel="prev" href="NMSetting8021x.html" title="NMSetting8021x">
diff --git a/docs/libnm-util/html/NMSettingIP6Config.html b/docs/libnm-util/html/NMSettingIP6Config.html
index 4e80d905..6946c47d 100644
--- a/docs/libnm-util/html/NMSettingIP6Config.html
+++ b/docs/libnm-util/html/NMSettingIP6Config.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMSettingIP6Config</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-util Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-util API Reference">
 <link rel="prev" href="NMSettingIP4Config.html" title="NMSettingIP4Config">
diff --git a/docs/libnm-util/html/NMSettingOlpcMesh.html b/docs/libnm-util/html/NMSettingOlpcMesh.html
index 4543a907..d77036ac 100644
--- a/docs/libnm-util/html/NMSettingOlpcMesh.html
+++ b/docs/libnm-util/html/NMSettingOlpcMesh.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMSettingOlpcMesh</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-util Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-util API Reference">
 <link rel="prev" href="NMSettingGsm.html" title="NMSettingGsm">
diff --git a/docs/libnm-util/html/NMSettingPPP.html b/docs/libnm-util/html/NMSettingPPP.html
index 435c5b96..6488a3f0 100644
--- a/docs/libnm-util/html/NMSettingPPP.html
+++ b/docs/libnm-util/html/NMSettingPPP.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMSettingPPP</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-util Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-util API Reference">
 <link rel="prev" href="NMSettingIP6Config.html" title="NMSettingIP6Config">
diff --git a/docs/libnm-util/html/NMSettingPPPOE.html b/docs/libnm-util/html/NMSettingPPPOE.html
index a94012fd..46c551bb 100644
--- a/docs/libnm-util/html/NMSettingPPPOE.html
+++ b/docs/libnm-util/html/NMSettingPPPOE.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMSettingPPPOE</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-util Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-util API Reference">
 <link rel="prev" href="NMSettingPPP.html" title="NMSettingPPP">
diff --git a/docs/libnm-util/html/NMSettingSerial.html b/docs/libnm-util/html/NMSettingSerial.html
index 33a60860..9d8082bd 100644
--- a/docs/libnm-util/html/NMSettingSerial.html
+++ b/docs/libnm-util/html/NMSettingSerial.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMSettingSerial</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-util Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-util API Reference">
 <link rel="prev" href="NMSettingBluetooth.html" title="NMSettingBluetooth">
diff --git a/docs/libnm-util/html/NMSettingVPN.html b/docs/libnm-util/html/NMSettingVPN.html
index 16df44cb..311f1008 100644
--- a/docs/libnm-util/html/NMSettingVPN.html
+++ b/docs/libnm-util/html/NMSettingVPN.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMSettingVPN</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-util Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-util API Reference">
 <link rel="prev" href="NMSettingPPPOE.html" title="NMSettingPPPOE">
diff --git a/docs/libnm-util/html/NMSettingWired.html b/docs/libnm-util/html/NMSettingWired.html
index f9333d3e..19b43451 100644
--- a/docs/libnm-util/html/NMSettingWired.html
+++ b/docs/libnm-util/html/NMSettingWired.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMSettingWired</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-util Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-util API Reference">
 <link rel="prev" href="NMSettingConnection.html" title="NMSettingConnection">
@@ -489,7 +489,7 @@ s390 device uses to communicate to the host.
 <pre class="programlisting">const <span class="returnvalue">char</span> *        nm_setting_wired_get_s390_nettype   (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>);</pre>
 <p>
 Returns the s390 device type this connection should apply to.  Will be one
-of 'qeth', 'lcs', or 'ctcm'.
+of 'qeth', 'lcs', or 'ctc'.
 </p>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
diff --git a/docs/libnm-util/html/NMSettingWireless.html b/docs/libnm-util/html/NMSettingWireless.html
index 368d455d..34d1341b 100644
--- a/docs/libnm-util/html/NMSettingWireless.html
+++ b/docs/libnm-util/html/NMSettingWireless.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMSettingWireless</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-util Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-util API Reference">
 <link rel="prev" href="NMSettingWired.html" title="NMSettingWired">
diff --git a/docs/libnm-util/html/NMSettingWirelessSecurity.html b/docs/libnm-util/html/NMSettingWirelessSecurity.html
index 6e90df86..9642f812 100644
--- a/docs/libnm-util/html/NMSettingWirelessSecurity.html
+++ b/docs/libnm-util/html/NMSettingWirelessSecurity.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NMSettingWirelessSecurity</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-util Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-util API Reference">
 <link rel="prev" href="NMSettingWireless.html" title="NMSettingWireless">
diff --git a/docs/libnm-util/html/annotation-glossary.html b/docs/libnm-util/html/annotation-glossary.html
index 68c91a18..563fa60f 100644
--- a/docs/libnm-util/html/annotation-glossary.html
+++ b/docs/libnm-util/html/annotation-glossary.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Annotation Glossary</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-util Reference Manual">
 <link rel="up" href="index.html" title="libnm-util Reference Manual">
 <link rel="prev" href="api-index-full.html" title="API Index">
diff --git a/docs/libnm-util/html/api-index-full.html b/docs/libnm-util/html/api-index-full.html
index 73178ec7..195b24d9 100644
--- a/docs/libnm-util/html/api-index-full.html
+++ b/docs/libnm-util/html/api-index-full.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>API Index</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-util Reference Manual">
 <link rel="up" href="index.html" title="libnm-util Reference Manual">
 <link rel="prev" href="object-tree.html" title="Object Hierarchy">
diff --git a/docs/libnm-util/html/ch01.html b/docs/libnm-util/html/ch01.html
index 7159dcc5..545175e7 100644
--- a/docs/libnm-util/html/ch01.html
+++ b/docs/libnm-util/html/ch01.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>libnm-util API Reference</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-util Reference Manual">
 <link rel="up" href="index.html" title="libnm-util Reference Manual">
 <link rel="prev" href="index.html" title="libnm-util Reference Manual">
@@ -21,7 +21,7 @@
 </tr></table>
 <div class="chapter" title="libnm-util API Reference">
 <div class="titlepage"><div><div><h2 class="title">
-<a name="id2992775"></a>libnm-util API Reference</h2></div></div></div>
+<a name="id2699944"></a>libnm-util API Reference</h2></div></div></div>
 <div class="toc"><dl>
 <dt>
 <span class="refentrytitle"><a href="NMConnection.html">NMConnection</a></span><span class="refpurpose"> — Describes a connection to specific network or provider</span>
diff --git a/docs/libnm-util/html/index.html b/docs/libnm-util/html/index.html
index 88c9e994..69dc2827 100644
--- a/docs/libnm-util/html/index.html
+++ b/docs/libnm-util/html/index.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>libnm-util Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-util Reference Manual">
 <link rel="next" href="ch01.html" title="libnm-util API Reference">
 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
diff --git a/docs/libnm-util/html/libnm-util-nm-utils.html b/docs/libnm-util/html/libnm-util-nm-utils.html
index 7226a31c..ccf9ab5e 100644
--- a/docs/libnm-util/html/libnm-util-nm-utils.html
+++ b/docs/libnm-util/html/libnm-util-nm-utils.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>nm-utils</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-util Reference Manual">
 <link rel="up" href="ch01.html" title="libnm-util API Reference">
 <link rel="prev" href="NMSettingVPN.html" title="NMSettingVPN">
diff --git a/docs/libnm-util/html/object-tree.html b/docs/libnm-util/html/object-tree.html
index b6a18ffe..11904962 100644
--- a/docs/libnm-util/html/object-tree.html
+++ b/docs/libnm-util/html/object-tree.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Object Hierarchy</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
 <link rel="home" href="index.html" title="libnm-util Reference Manual">
 <link rel="up" href="index.html" title="libnm-util Reference Manual">
 <link rel="prev" href="libnm-util-nm-utils.html" title="nm-utils">
diff --git a/docs/settings-spec.html b/docs/settings-spec.html
index f2f01032..eba3b1e9 100644
--- a/docs/settings-spec.html
+++ b/docs/settings-spec.html
@@ -1,6 +1,6 @@
 <html>
 <head>
-<title>NetworkManager 0.8.3.999 Settings Specification</title></head>
+<title>NetworkManager 0.8.4.0 Settings Specification</title></head>
 <body>
 <p><h2>Setting name: '802-1x'</h2></p>
 <table cellspacing=10 border=0 cellpadding=2>
diff --git a/include/nm-version.h b/include/nm-version.h
index 3abab46e..1867e054 100644
--- a/include/nm-version.h
+++ b/include/nm-version.h
@@ -43,7 +43,7 @@
  * Evaluates to the micro version number of NetworkManager which this source
  * compiled against.
  */
-#define NM_MICRO_VERSION (3)
+#define NM_MICRO_VERSION (4)
 
 /**
  * NM_CHECK_VERSION:
diff --git a/libnm-glib/Makefile.am b/libnm-glib/Makefile.am
index 165977cf..7e9f08c1 100644
--- a/libnm-glib/Makefile.am
+++ b/libnm-glib/Makefile.am
@@ -209,7 +209,7 @@ DISTCLEANFILES = libnm-glib.pc libnm-glib.pc
 
 EXTRA_DIST = libnm-glib.pc.in libnm-glib-vpn.pc.in libnm-glib.ver libnm-glib-vpn.ver
 
-CLEANFILES = $(BUILT_SOURCES)
+CLEANFILES = $(BUILT_SOURCES) *-bindings.h *-glue.h
 
 if WITH_TESTS
 
diff --git a/libnm-glib/Makefile.in b/libnm-glib/Makefile.in
index be259d7e..a03248e2 100644
--- a/libnm-glib/Makefile.in
+++ b/libnm-glib/Makefile.in
@@ -508,7 +508,7 @@ pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = libnm-glib.pc libnm-glib-vpn.pc
 DISTCLEANFILES = libnm-glib.pc libnm-glib.pc
 EXTRA_DIST = libnm-glib.pc.in libnm-glib-vpn.pc.in libnm-glib.ver libnm-glib-vpn.ver
-CLEANFILES = $(BUILT_SOURCES)
+CLEANFILES = $(BUILT_SOURCES) *-bindings.h *-glue.h
 all: $(BUILT_SOURCES)
 	$(MAKE) $(AM_MAKEFLAGS) all-am
 
diff --git a/libnm-util/nm-connection.c b/libnm-util/nm-connection.c
index 3f339dbc..82e44b7b 100644
--- a/libnm-util/nm-connection.c
+++ b/libnm-util/nm-connection.c
@@ -796,7 +796,7 @@ nm_connection_need_secrets (NMConnection *connection,
 	NMConnectionPrivate *priv;
 	GSList *settings = NULL;
 	GSList *iter;
-	char *name = NULL;
+	const char *name = NULL;
 
 	g_return_val_if_fail (connection != NULL, NULL);
 	g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
@@ -822,7 +822,7 @@ nm_connection_need_secrets (NMConnection *connection,
 			else
 				g_ptr_array_free (secrets, TRUE);
 
-			name = (char *) nm_setting_get_name (setting);
+			name = nm_setting_get_name (setting);
 			break;
 		}
 	}
diff --git a/libnm-util/nm-setting-wired.c b/libnm-util/nm-setting-wired.c
index ad47ac94..8691aeee 100644
--- a/libnm-util/nm-setting-wired.c
+++ b/libnm-util/nm-setting-wired.c
@@ -107,7 +107,7 @@ static const char *valid_s390_opts[] = {
 	"route6", "fake_broadcast", "broadcast_mode", "canonical_macaddr",
 	"checksumming", "sniffer", "large_send", "ipato_enable", "ipato_invert4",
 	"ipato_add4", "ipato_invert6", "ipato_add6", "vipa_add4", "vipa_add6",
-	"rxip_add4", "rxip_add6", "lancmd_timeout",
+	"rxip_add4", "rxip_add6", "lancmd_timeout", "ctcprot",
 	NULL
 };
 
@@ -197,7 +197,7 @@ nm_setting_wired_get_s390_subchannels (NMSettingWired *setting)
  * @setting: the #NMSettingWired
  *
  * Returns the s390 device type this connection should apply to.  Will be one
- * of 'qeth', 'lcs', or 'ctcm'.
+ * of 'qeth', 'lcs', or 'ctc'.
  *
  * Returns: the s390 device type
  **/
@@ -361,7 +361,7 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
 	NMSettingWiredPrivate *priv = NM_SETTING_WIRED_GET_PRIVATE (setting);
 	const char *valid_ports[] = { "tp", "aui", "bnc", "mii", NULL };
 	const char *valid_duplex[] = { "half", "full", NULL };
-	const char *valid_nettype[] = { "qeth", "lcs", "ctcm", NULL };
+	const char *valid_nettype[] = { "qeth", "lcs", "ctc", NULL };
 	GHashTableIter iter;
 	const char *key, *value;
 
diff --git a/src/bluez-manager/Makefile.am b/src/bluez-manager/Makefile.am
index 6c199e8c..623c1060 100644
--- a/src/bluez-manager/Makefile.am
+++ b/src/bluez-manager/Makefile.am
@@ -4,8 +4,7 @@ INCLUDES = \
 	-I${top_srcdir}/libnm-util \
 	-I${top_srcdir}/src \
 	-I${top_srcdir}/src/logging \
-	-I${top_builddir}/marshallers \
-	-I$(top_srcdir)/src/nm-bluez-manager
+	-I${top_builddir}/marshallers
 
 noinst_LTLIBRARIES = libbluez-manager.la
 
diff --git a/src/bluez-manager/Makefile.in b/src/bluez-manager/Makefile.in
index fad2ec6e..369028c7 100644
--- a/src/bluez-manager/Makefile.in
+++ b/src/bluez-manager/Makefile.in
@@ -286,8 +286,7 @@ INCLUDES = \
 	-I${top_srcdir}/libnm-util \
 	-I${top_srcdir}/src \
 	-I${top_srcdir}/src/logging \
-	-I${top_builddir}/marshallers \
-	-I$(top_srcdir)/src/nm-bluez-manager
+	-I${top_builddir}/marshallers
 
 noinst_LTLIBRARIES = libbluez-manager.la
 libbluez_manager_la_SOURCES = \
diff --git a/src/dns-manager/nm-dns-manager.c b/src/dns-manager/nm-dns-manager.c
index 32800d0b..fc582327 100644
--- a/src/dns-manager/nm-dns-manager.c
+++ b/src/dns-manager/nm-dns-manager.c
@@ -61,7 +61,9 @@ G_DEFINE_TYPE(NMDnsManager, nm_dns_manager, G_TYPE_OBJECT)
                                        NM_TYPE_DNS_MANAGER, \
                                        NMDnsManagerPrivate))
 
-struct NMDnsManagerPrivate {
+typedef struct {
+	gboolean disposed;
+
 	NMIP4Config *ip4_vpn_config;
 	NMIP4Config *ip4_device_config;
 	NMIP6Config *ip6_vpn_config;
@@ -84,7 +86,7 @@ struct NMDnsManagerPrivate {
 	 * associated with a network interface (like hostnames).
 	 */
 	char *last_iface;
-};
+} NMDnsManagerPrivate;
 
 
 typedef struct {
@@ -1074,18 +1076,46 @@ nm_dns_manager_init (NMDnsManager *mgr)
 }
 
 static void
-nm_dns_manager_finalize (GObject *object)
+dispose (GObject *object)
+{
+	NMDnsManager *self = NM_DNS_MANAGER (object);
+	NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (self);
+	GError *error = NULL;
+
+	if (priv->disposed == FALSE) {
+		priv->disposed = TRUE;
+
+		g_slist_foreach (priv->plugins, (GFunc) g_object_unref, NULL);
+		g_slist_free (priv->plugins);
+		priv->plugins = NULL;
+
+		/* If we're quitting leave a valid resolv.conf in place, not one
+		 * pointing to 127.0.0.1 if any plugins were active.  Thus update
+		 * DNS after disposing of all plugins.
+		 */
+		if (!update_dns (self, priv->last_iface, TRUE, &error)) {
+			nm_log_warn (LOGD_DNS, "could not commit DNS changes on shutdown: (%d) %s",
+					     error ? error->code : -1,
+					     error && error->message ? error->message : "(unknown)");
+			g_clear_error (&error);
+		}
+
+		g_slist_foreach (priv->configs, (GFunc) g_object_unref, NULL);
+		g_slist_free (priv->configs);
+		priv->configs = NULL;
+	}
+
+	G_OBJECT_CLASS (nm_dns_manager_parent_class)->dispose (object);
+}
+
+static void
+finalize (GObject *object)
 {
 	NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (object);
 
-	g_slist_foreach (priv->configs, (GFunc) g_object_unref, NULL);
-	g_slist_free (priv->configs);
 	g_free (priv->hostname);
 	g_free (priv->last_iface);
 
-	g_slist_foreach (priv->plugins, (GFunc) g_object_unref, NULL);
-	g_slist_free (priv->plugins);
-
 	G_OBJECT_CLASS (nm_dns_manager_parent_class)->finalize (object);
 }
 
@@ -1094,7 +1124,8 @@ nm_dns_manager_class_init (NMDnsManagerClass *klass)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-	object_class->finalize = nm_dns_manager_finalize;
+	object_class->dispose = dispose;
+	object_class->finalize = finalize;
 
 	g_type_class_add_private (object_class, sizeof (NMDnsManagerPrivate));
 }
diff --git a/src/dns-manager/nm-dns-manager.h b/src/dns-manager/nm-dns-manager.h
index eb1c73a7..a48130b2 100644
--- a/src/dns-manager/nm-dns-manager.h
+++ b/src/dns-manager/nm-dns-manager.h
@@ -55,8 +55,6 @@ G_BEGIN_DECLS
 #define NM_IS_DNS_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), NM_TYPE_DNS_MANAGER))
 #define NM_DNS_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), NM_TYPE_DNS_MANAGER, NMDnsManagerClass)) 
 
-typedef struct NMDnsManagerPrivate NMDnsManagerPrivate;
-
 typedef struct {
 	GObject parent;
 } NMDnsManager;
diff --git a/src/ip6-manager/nm-ip6-manager.c b/src/ip6-manager/nm-ip6-manager.c
index 0eb40302..4a5dee58 100644
--- a/src/ip6-manager/nm-ip6-manager.c
+++ b/src/ip6-manager/nm-ip6-manager.c
@@ -30,7 +30,6 @@
 #include "NetworkManagerUtils.h"
 #include "nm-marshal.h"
 #include "nm-logging.h"
-#include "nm-system.h"
 
 /* Pre-DHCP addrconf timeout, in seconds */
 #define NM_IP6_TIMEOUT 20
@@ -261,7 +260,7 @@ static gboolean
 rdnss_expired (gpointer user_data)
 {
 	NMIP6Device *device = user_data;
-	CallbackInfo info = { device, IP6_DHCP_OPT_NONE };
+	CallbackInfo info = { device, IP6_DHCP_OPT_NONE, FALSE };
 
 	nm_log_dbg (LOGD_IP6, "(%s): IPv6 RDNSS information expired", device->iface);
 
@@ -308,9 +307,9 @@ set_rdnss_timeout (NMIP6Device *device)
 	}
 
 	if (expires) {
-		device->rdnss_timeout_id = g_timeout_add_seconds (expires - now,
-														  rdnss_expired,
-														  device);
+		device->rdnss_timeout_id = g_timeout_add_seconds (MIN (expires - now, G_MAXUINT32 - 1),
+		                                                  rdnss_expired,
+		                                                  device);
 	}
 }
 
@@ -363,7 +362,7 @@ set_dnssl_timeout (NMIP6Device *device)
 	}
 
 	if (expires) {
-		device->dnssl_timeout_id = g_timeout_add_seconds (expires - now,
+		device->dnssl_timeout_id = g_timeout_add_seconds (MIN (expires - now, G_MAXUINT32 - 1),
 		                                                  dnssl_expired,
 		                                                  device);
 	}
@@ -689,9 +688,12 @@ process_nduseropt_rdnss (NMIP6Device *device, struct nd_opt_hdr *opt)
 	for (addr = (struct in6_addr *) (rdnss_opt + 1); opt_len >= 2; addr++, opt_len -= 2) {
 		char buf[INET6_ADDRSTRLEN + 1];
 
-		if (!inet_ntop (AF_INET6, addr, buf, sizeof (buf)))
-			strcpy(buf, "[invalid]");
+		if (!inet_ntop (AF_INET6, addr, buf, sizeof (buf))) {
+			nm_log_warn (LOGD_IP6, "(%s): received invalid RA-provided nameserver", device->iface);
+			continue;
+		}
 
+		/* Update the cached timeout if we already saw this server */
 		for (i = 0; i < device->rdnss_servers->len; i++) {
 			cur_server = &(g_array_index (device->rdnss_servers, NMIP6RDNSS, i));
 
@@ -834,6 +836,7 @@ process_nduseropt_dnssl (NMIP6Device *device, struct nd_opt_hdr *opt)
 		if (domain_str[0] == '\0')
 			continue;
 
+		/* Update cached domain information if we've seen this domain before */
 		for (i = 0; i < device->dnssl_domains->len; i++) {
 			cur_domain = &(g_array_index (device->dnssl_domains, NMIP6DNSSL, i));
 
diff --git a/src/main.c b/src/main.c
index b22c769d..da63930b 100644
--- a/src/main.c
+++ b/src/main.c
@@ -65,6 +65,7 @@
  */
 static NMManager *manager = NULL;
 static GMainLoop *main_loop = NULL;
+static int quit_pipe[2] = { -1, -1 };
 
 typedef struct {
 	time_t time;
@@ -145,62 +146,62 @@ static gboolean quit_early = FALSE;
 static void
 nm_signal_handler (int signo)
 {
-	static int in_fatal = 0;
+	static int in_fatal = 0, x;
 
 	/* avoid loops */
 	if (in_fatal > 0)
 		return;
 	++in_fatal;
 
-	switch (signo)
-	{
-		case SIGSEGV:
-		case SIGBUS:
-		case SIGILL:
-		case SIGABRT:
-			nm_log_warn (LOGD_CORE, "caught signal %d. Generating backtrace...", signo);
-			nm_logging_backtrace ();
-			exit (1);
-			break;
-
-		case SIGFPE:
-		case SIGPIPE:
-			/* let the fatal signals interrupt us */
-			--in_fatal;
-
-			nm_log_warn (LOGD_CORE, "caught signal %d, shutting down abnormally. Generating backtrace...", signo);
-			nm_logging_backtrace ();
-			g_main_loop_quit (main_loop);
-			break;
-
-		case SIGINT:
-		case SIGTERM:
-			/* let the fatal signals interrupt us */
-			--in_fatal;
-
-			nm_log_info (LOGD_CORE, "caught signal %d, shutting down normally.", signo);
-			quit_early = TRUE;
-			g_main_loop_quit (main_loop);
-			break;
-
-		case SIGHUP:
-			--in_fatal;
-			/* FIXME:
-			 * Reread config stuff like system config files, VPN service files, etc
-			 */
-			break;
-
-		case SIGUSR1:
-			--in_fatal;
-			/* FIXME:
-			 * Play with log levels or something
-			 */
-			break;
-
-		default:
-			signal (signo, nm_signal_handler);
-			break;
+	switch (signo) {
+	case SIGSEGV:
+	case SIGBUS:
+	case SIGILL:
+	case SIGABRT:
+		nm_log_warn (LOGD_CORE, "caught signal %d. Generating backtrace...", signo);
+		nm_logging_backtrace ();
+		exit (1);
+		break;
+	case SIGFPE:
+	case SIGPIPE:
+		/* let the fatal signals interrupt us */
+		--in_fatal;
+		nm_log_warn (LOGD_CORE, "caught signal %d, shutting down abnormally. Generating backtrace...", signo);
+		nm_logging_backtrace ();
+		x = write (quit_pipe[1], "X", 1);
+		break;
+	case SIGINT:
+	case SIGTERM:
+		/* let the fatal signals interrupt us */
+		--in_fatal;
+		nm_log_info (LOGD_CORE, "caught signal %d, shutting down normally.", signo);
+		quit_early = TRUE;
+		x = write (quit_pipe[1], "X", 1);
+		break;
+	case SIGHUP:
+		--in_fatal;
+		/* Reread config stuff like system config files, VPN service files, etc */
+		break;
+	case SIGUSR1:
+		--in_fatal;
+		/* Play with log levels or something */
+		break;
+	default:
+		signal (signo, nm_signal_handler);
+		break;
+	}
+}
+
+static gboolean
+quit_watch (GIOChannel *src, GIOCondition condition, gpointer user_data)
+{
+
+	if (condition & G_IO_IN) {
+		nm_log_warn (LOGD_CORE, "quit request received, terminating...");
+		g_main_loop_quit (main_loop);
 	}
+
+	return FALSE;
 }
 
 static void
@@ -208,6 +209,17 @@ setup_signals (void)
 {
 	struct sigaction action;
 	sigset_t mask;
+	GIOChannel *quit_channel;
+
+	/* Set up our quit pipe */
+	if (pipe (quit_pipe) < 0) {
+		fprintf (stderr, "Failed to initialze SIGTERM pipe: %d", errno);
+		exit (1);
+	}
+	fcntl (quit_pipe[1], F_SETFL, O_NONBLOCK | fcntl (quit_pipe[1], F_GETFL));
+
+	quit_channel = g_io_channel_unix_new (quit_pipe[0]);
+	g_io_add_watch_full (quit_channel, G_PRIORITY_HIGH, G_IO_IN | G_IO_ERR, quit_watch, NULL, NULL);
 
 	sigemptyset (&mask);
 	action.sa_handler = nm_signal_handler;
diff --git a/src/modem-manager/nm-modem.c b/src/modem-manager/nm-modem.c
index b3f7eaa1..9471ef87 100644
--- a/src/modem-manager/nm-modem.c
+++ b/src/modem-manager/nm-modem.c
@@ -85,14 +85,6 @@ enum {
 
 static guint signals[LAST_SIGNAL] = { 0 };
 
-NMPPPManager *
-nm_modem_get_ppp_manager (NMModem *self)
-{
-	g_return_val_if_fail (NM_IS_MODEM (self), NULL);
-
-	return NM_MODEM_GET_PRIVATE (self)->ppp_manager;
-}
-
 gboolean
 nm_modem_get_mm_enabled (NMModem *self)
 {
@@ -651,12 +643,13 @@ real_deactivate_quickly (NMModem *self, NMDevice *device)
 
 	priv->in_bytes = priv->out_bytes = 0;
 
+	if (priv->ppp_manager) {
+		g_object_unref (priv->ppp_manager);
+		priv->ppp_manager = NULL;
+	}
+
 	switch (priv->ip_method) {
 	case MM_MODEM_IP_METHOD_PPP:
-		if (priv->ppp_manager) {
-			g_object_unref (priv->ppp_manager);
-			priv->ppp_manager = NULL;
-		}
 		break;
 	case MM_MODEM_IP_METHOD_STATIC:
 	case MM_MODEM_IP_METHOD_DHCP:
diff --git a/src/modem-manager/nm-modem.h b/src/modem-manager/nm-modem.h
index a2aed57e..6e47c903 100644
--- a/src/modem-manager/nm-modem.h
+++ b/src/modem-manager/nm-modem.h
@@ -97,7 +97,6 @@ GType nm_modem_get_type (void);
 
 /* Protected */
 
-NMPPPManager *nm_modem_get_ppp_manager (NMModem *modem);
 DBusGProxy *  nm_modem_get_proxy       (NMModem *modem, const char *interface);
 const char *  nm_modem_get_iface       (NMModem *modem);
 const char *  nm_modem_get_path        (NMModem *modem);
diff --git a/src/nm-device.c b/src/nm-device.c
index 9c771c2a..8675bf62 100644
--- a/src/nm-device.c
+++ b/src/nm-device.c
@@ -1617,7 +1617,7 @@ dhcp6_start (NMDevice *self,
 	 */
 	err = nm_system_set_ip6_route (priv->ip_iface ? priv->ip_ifindex : priv->ifindex,
 	                               &dest, 8, NULL, 256, 0, RTPROT_BOOT, RT_TABLE_LOCAL, NULL);
-	if (err) {
+	if (err && (nl_get_errno () != EEXIST)) {
 		nm_log_err (LOGD_DEVICE | LOGD_IP6,
 		            "(%s): failed to add IPv6 multicast route: %s",
 		            priv->ip_iface ? priv->ip_iface : priv->iface, nl_geterror ());
diff --git a/src/nm-manager.c b/src/nm-manager.c
index 8b24aa51..e34e9014 100644
--- a/src/nm-manager.c
+++ b/src/nm-manager.c
@@ -188,6 +188,7 @@ struct PendingActivation {
 
 typedef struct {
 	gboolean user_enabled;
+	gboolean daemon_enabled;
 	gboolean sw_enabled;
 	gboolean hw_enabled;
 	RfKillType rtype;
@@ -196,6 +197,7 @@ typedef struct {
 	const char *prop;
 	const char *hw_prop;
 	RfKillState (*other_enabled_func) (NMManager *);
+	RfKillState (*daemon_enabled_func) (NMManager *);
 } RadioState;
 
 typedef struct {
@@ -917,7 +919,6 @@ static GPtrArray *
 get_active_connections (NMManager *manager, NMConnection *filter)
 {
 	NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
-	NMVPNManager *vpn_manager;
 	GPtrArray *active;
 	GSList *iter;
 
@@ -939,9 +940,7 @@ get_active_connections (NMManager *manager, NMConnection *filter)
 	}
 
 	/* Add active VPN connections */
-	vpn_manager = nm_vpn_manager_get ();
-	nm_vpn_manager_add_active_connections (vpn_manager, filter, active);
-	g_object_unref (vpn_manager);
+	nm_vpn_manager_add_active_connections (priv->vpn_manager, filter, active);
 
 	return active;
 }
@@ -1651,21 +1650,28 @@ write_value_to_state_file (const char *filename,
 }
 
 static gboolean
-radio_enabled_for_rstate (RadioState *rstate)
+radio_enabled_for_rstate (RadioState *rstate, gboolean check_daemon_enabled)
 {
-	return rstate->user_enabled && rstate->sw_enabled && rstate->hw_enabled;
+	gboolean enabled;
+
+	enabled = rstate->user_enabled && rstate->sw_enabled && rstate->hw_enabled;
+	if (rstate->daemon_enabled_func && check_daemon_enabled)
+		enabled &= rstate->daemon_enabled;
+	return enabled;
 }
 
 static gboolean
-radio_enabled_for_type (NMManager *self, RfKillType rtype)
+radio_enabled_for_type (NMManager *self, RfKillType rtype, gboolean check_daemon_enabled)
 {
 	NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
 
-	return radio_enabled_for_rstate (&priv->radio_states[rtype]);
+	return radio_enabled_for_rstate (&priv->radio_states[rtype], check_daemon_enabled);
 }
 
 static void
-manager_update_radio_enabled (NMManager *self, RadioState *rstate)
+manager_update_radio_enabled (NMManager *self,
+                              RadioState *rstate,
+                              gboolean enabled)
 {
 	NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
 	GSList *iter;
@@ -1683,7 +1689,6 @@ manager_update_radio_enabled (NMManager *self, RadioState *rstate)
 	/* enable/disable wireless devices as required */
 	for (iter = priv->devices; iter; iter = iter->next) {
 		RfKillType devtype = RFKILL_TYPE_UNKNOWN;
-		gboolean enabled = radio_enabled_for_rstate (rstate);
 
 		g_object_get (G_OBJECT (iter->data), NM_DEVICE_INTERFACE_RFKILL_TYPE, &devtype, NULL);
 		if (devtype == rstate->rtype) {
@@ -1830,9 +1835,9 @@ manager_rfkill_update_one_type (NMManager *self,
 	RfKillState other_state = RFKILL_UNBLOCKED;
 	RfKillState composite;
 	gboolean old_enabled, new_enabled, old_rfkilled, new_rfkilled;
-	gboolean old_hwe;
+	gboolean old_hwe, old_daemon_enabled = FALSE;
 
-	old_enabled = radio_enabled_for_rstate (rstate);
+	old_enabled = radio_enabled_for_rstate (rstate, TRUE);
 	old_rfkilled = rstate->hw_enabled && rstate->sw_enabled;
 	old_hwe = rstate->hw_enabled;
 
@@ -1851,9 +1856,26 @@ manager_rfkill_update_one_type (NMManager *self,
 
 	update_rstate_from_rfkill (rstate, composite);
 
+	/* If the device has a management daemon that can affect enabled state, check that now */
+	if (rstate->daemon_enabled_func) {
+		old_daemon_enabled = rstate->daemon_enabled;
+		rstate->daemon_enabled = (rstate->daemon_enabled_func (self) == RFKILL_UNBLOCKED);
+		if (old_daemon_enabled != rstate->daemon_enabled) {
+			nm_log_info (LOGD_RFKILL, "%s now %s by management service",
+				         rstate->desc,
+				         rstate->daemon_enabled ? "enabled" : "disabled");
+		}
+	}
+
+	/* Print out all states affecting device enablement */
 	if (rstate->desc) {
-		nm_log_dbg (LOGD_RFKILL, "%s hw-enabled %d sw-enabled %d",
-		            rstate->desc, rstate->hw_enabled, rstate->sw_enabled);
+		if (rstate->daemon_enabled_func) {
+			nm_log_dbg (LOGD_RFKILL, "%s hw-enabled %d sw-enabled %d daemon-enabled %d",
+			            rstate->desc, rstate->hw_enabled, rstate->sw_enabled, rstate->daemon_enabled);
+		} else {
+			nm_log_dbg (LOGD_RFKILL, "%s hw-enabled %d sw-enabled %d",
+			            rstate->desc, rstate->hw_enabled, rstate->sw_enabled);
+		}
 	}
 
 	/* Log new killswitch state */
@@ -1870,10 +1892,14 @@ manager_rfkill_update_one_type (NMManager *self,
 			g_object_notify (G_OBJECT (self), rstate->hw_prop);
 	}
 
-	/* And finally update the actual device radio state itself */
-	new_enabled = radio_enabled_for_rstate (rstate);
+	/* And finally update the actual device radio state itself; respect the
+	 * daemon state here because this is never called from user-triggered
+	 * radio changes and we only want to ignore the daemon enabled state when
+	 * handling user radio change requests.
+	 */
+	new_enabled = radio_enabled_for_rstate (rstate, TRUE);
 	if (new_enabled != old_enabled)
-		manager_update_radio_enabled (self, rstate);
+		manager_update_radio_enabled (self, rstate, new_enabled);
 }
 
 static void
@@ -1882,14 +1908,13 @@ nm_manager_rfkill_update (NMManager *self, RfKillType rtype)
 	NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
 	guint i;
 
-	if (rtype != RFKILL_TYPE_UNKNOWN) {
+	if (rtype != RFKILL_TYPE_UNKNOWN)
 		manager_rfkill_update_one_type (self, &priv->radio_states[rtype], rtype);
-		return;
+	else {
+		/* Otherwise sync all radio types */
+		for (i = 0; i < RFKILL_TYPE_MAX; i++)
+			manager_rfkill_update_one_type (self, &priv->radio_states[i], i);
 	}
-
-	/* Otherwise sync all radio types */
-	for (i = 0; i < RFKILL_TYPE_MAX; i++)
-		manager_rfkill_update_one_type (self, &priv->radio_states[i], i);
 }
 
 static void
@@ -2084,6 +2109,7 @@ add_device (NMManager *self, NMDevice *device)
 	GHashTableIter iter;
 	gpointer value;
 	gboolean managed = FALSE, enabled = FALSE;
+	RfKillType rtype = RFKILL_TYPE_UNKNOWN;
 
 	iface = nm_device_get_ip_iface (device);
 	g_assert (iface);
@@ -2117,26 +2143,21 @@ add_device (NMManager *self, NMDevice *device)
 		g_signal_connect (device, "notify::" NM_DEVICE_WIFI_IPW_RFKILL_STATE,
 		                  G_CALLBACK (manager_ipw_rfkill_state_changed),
 		                  self);
-
-		/* Update global rfkill state with this device's rfkill state, and
-		 * then set this device's rfkill state based on the global state.
-		 */
-		nm_manager_rfkill_update (self, RFKILL_TYPE_WLAN);
-		enabled = radio_enabled_for_type (self, RFKILL_TYPE_WLAN);
-		nm_device_interface_set_enabled (NM_DEVICE_INTERFACE (device), enabled);
+		rtype = RFKILL_TYPE_WLAN;
 	} else if (NM_IS_DEVICE_MODEM (device)) {
 		g_signal_connect (device, NM_DEVICE_MODEM_ENABLE_CHANGED,
 		                  G_CALLBACK (manager_modem_enabled_changed),
 		                  self);
+		rtype = RFKILL_TYPE_WWAN;
+	}
 
-		nm_manager_rfkill_update (self, RFKILL_TYPE_WWAN);
-		enabled = radio_enabled_for_type (self, RFKILL_TYPE_WWAN);
-		/* Until we start respecting WWAN rfkill switches the modem itself
-		 * is the source of the enabled/disabled state, so the manager shouldn't
-		 * touch it here.
-		nm_device_interface_set_enabled (NM_DEVICE_INTERFACE (device),
-		                                 priv->radio_states[RFKILL_TYPE_WWAN].enabled);
-		*/
+	if (rtype != RFKILL_TYPE_UNKNOWN) {
+		/* Update global rfkill state with this device's rfkill state, and
+		 * then set this device's rfkill state based on the global state.
+		 */
+		nm_manager_rfkill_update (self, rtype);
+		enabled = radio_enabled_for_type (self, rtype, TRUE);
+		nm_device_interface_set_enabled (NM_DEVICE_INTERFACE (device), enabled);
 	}
 
 	type_desc = nm_device_get_type_desc (device);
@@ -2597,6 +2618,7 @@ user_get_secrets_cb (DBusGProxy *proxy,
                      gpointer user_data)
 {
 	GetSecretsInfo *info = (GetSecretsInfo *) user_data;
+	NMManagerPrivate *priv;
 	GHashTable *settings = NULL;
 	GError *error = NULL;
 	GObject *provider;
@@ -2605,6 +2627,15 @@ user_get_secrets_cb (DBusGProxy *proxy,
 	g_return_if_fail (info->provider);
 	g_return_if_fail (info->setting_name);
 
+	/* Remove the GetSecretsInfo from our internal list just in case
+	 * calling the secrets provider's get_secrets_result() function tries
+	 * to cancel the secrets request, which would cause us to double-free
+	 * the GetSecretsInfo.  We know we're going to free it at the end here,
+	 * so there's no need to track it anymore.
+	 */
+	priv = NM_MANAGER_GET_PRIVATE (info->manager);
+	priv->secrets_calls = g_slist_remove (priv->secrets_calls, info);
+
 	provider = g_object_ref (info->provider);
 
 	if (dbus_g_proxy_end_call (proxy, call, &error,
@@ -2905,10 +2936,8 @@ nm_manager_activate_connection (NMManager *manager,
 
 	if (!strcmp (nm_setting_connection_get_connection_type (s_con), NM_SETTING_VPN_SETTING_NAME)) {
 		NMActRequest *req = NULL;
-		NMVPNManager *vpn_manager;
 
 		/* VPN connection */
-
 		if (specific_object) {
 			/* Find the specifc connection the client requested we use */
 			req = nm_manager_get_act_request_by_path (manager, specific_object, &device);
@@ -2942,10 +2971,8 @@ nm_manager_activate_connection (NMManager *manager,
 			return NULL;
 		}
 
-		vpn_manager = nm_vpn_manager_get ();
-		vpn_connection = nm_vpn_manager_activate_connection (vpn_manager,
+		vpn_connection = nm_vpn_manager_activate_connection (priv->vpn_manager,
 		                                                     connection,
-		                                                     req,
 		                                                     device,
 		                                                     error);
 		if (vpn_connection) {
@@ -2955,7 +2982,6 @@ nm_manager_activate_connection (NMManager *manager,
 			                  G_CALLBACK (provider_cancel_secrets), manager);
 			path = nm_vpn_connection_get_active_connection_path (vpn_connection);
 		}
-		g_object_unref (vpn_manager);
 	} else {
 		NMDeviceState state;
 
@@ -3136,7 +3162,6 @@ nm_manager_deactivate_connection (NMManager *manager,
                                   GError **error)
 {
 	NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
-	NMVPNManager *vpn_manager;
 	GSList *iter;
 	gboolean success = FALSE;
 	NMVPNConnectionStateReason vpn_reason = NM_VPN_CONNECTION_STATE_REASON_USER_DISCONNECTED;
@@ -3160,17 +3185,15 @@ nm_manager_deactivate_connection (NMManager *manager,
 	}
 
 	/* Check for VPN connections next */
-	vpn_manager = nm_vpn_manager_get ();
 	if (reason == NM_DEVICE_STATE_REASON_CONNECTION_REMOVED)
 		vpn_reason = NM_VPN_CONNECTION_STATE_REASON_CONNECTION_REMOVED;
-	if (nm_vpn_manager_deactivate_connection (vpn_manager, connection_path, vpn_reason)) {
+	if (nm_vpn_manager_deactivate_connection (priv->vpn_manager, connection_path, vpn_reason)) {
 		success = TRUE;
 	} else {
 		g_set_error (error,
 		             NM_MANAGER_ERROR, NM_MANAGER_ERROR_CONNECTION_NOT_ACTIVE,
 		             "%s", "The connection was not active.");
 	}
-	g_object_unref (vpn_manager);
 
 done:
 	g_object_notify (G_OBJECT (manager), NM_MANAGER_ACTIVE_CONNECTIONS);
@@ -3383,7 +3406,7 @@ do_sleep_wake (NMManager *self)
 			 */
 			for (i = 0; i < RFKILL_TYPE_MAX; i++) {
 				RadioState *rstate = &priv->radio_states[i];
-				gboolean enabled = radio_enabled_for_rstate (rstate);
+				gboolean enabled = radio_enabled_for_rstate (rstate, TRUE);
 				RfKillType devtype = RFKILL_TYPE_UNKNOWN;
 
 				if (rstate->desc) {
@@ -3997,6 +4020,7 @@ nm_manager_start (NMManager *self)
 	for (i = 0; i < RFKILL_TYPE_MAX; i++) {
 		RadioState *rstate = &priv->radio_states[i];
 		RfKillState udev_state;
+		gboolean enabled;
 
 		if (!rstate->desc)
 			continue;
@@ -4010,7 +4034,8 @@ nm_manager_start (NMManager *self)
 				         (rstate->hw_enabled && rstate->sw_enabled) ? "enabled" : "disabled",
 				         rstate->user_enabled ? "enabled" : "disabled");
 		}
-		manager_update_radio_enabled (self, rstate);
+		enabled = radio_enabled_for_rstate (rstate, TRUE);
+		manager_update_radio_enabled (self, rstate, enabled);
 	}
 
 	/* Log overall networking status - enabled/disabled */
@@ -4344,7 +4369,7 @@ dispose (GObject *object)
 {
 	NMManager *manager = NM_MANAGER (object);
 	NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
-	GSList *iter;
+	GSList *iter, *list;
 	DBusGConnection *bus;
 	DBusConnection *dbus_connection;
 
@@ -4390,6 +4415,20 @@ dispose (GObject *object)
 		priv->sys_settings = NULL;
 	}
 
+	/* Make sure we disconnect signal handlers from VPN connections that
+	 * might still be alive when the manager dies.
+	 */
+	list = nm_vpn_manager_get_active_connections (priv->vpn_manager);
+	for (iter = list; iter; iter = g_slist_next (iter)) {
+		g_signal_handlers_disconnect_by_func (G_OBJECT (iter->data),
+						      G_CALLBACK (provider_get_secrets),
+						      manager);
+		g_signal_handlers_disconnect_by_func (G_OBJECT (iter->data),
+						      G_CALLBACK (provider_cancel_secrets),
+						      manager);
+		/* unref to balance returned objects from the VPN manager */
+		g_object_unref (iter->data);
+	}
 	if (priv->vpn_manager_id) {
 		g_source_remove (priv->vpn_manager_id);
 		priv->vpn_manager_id = 0;
@@ -4472,11 +4511,20 @@ manager_radio_user_toggled (NMManager *self,
 		}
 	}
 
-	old_enabled = radio_enabled_for_rstate (rstate);
+	/* When the user toggles the radio, their request should override any
+	 * daemon (like ModemManager) enabled state that can be changed.  For WWAN
+	 * for example, we want the WwanEnabled property to reflect the daemon state
+	 * too so that users can toggle the modem powered, but we don't want that
+	 * daemon state to affect whether or not the user *can* turn it on, which is
+	 * what the kernel rfkill state does.  So we ignore daemon enabled state
+	 * when determining what the new state should be since it shouldn't block
+	 * the user's request.
+	 */
+	old_enabled = radio_enabled_for_rstate (rstate, TRUE);
 	rstate->user_enabled = enabled;
-	new_enabled = radio_enabled_for_rstate (rstate);
+	new_enabled = radio_enabled_for_rstate (rstate, FALSE);
 	if (new_enabled != old_enabled)
-		manager_update_radio_enabled (self, rstate);
+		manager_update_radio_enabled (self, rstate, new_enabled);
 }
 
 static void
@@ -4526,13 +4574,13 @@ get_property (GObject *object, guint prop_id,
 		g_value_set_boolean (value, priv->net_enabled);
 		break;
 	case PROP_WIRELESS_ENABLED:
-		g_value_set_boolean (value, radio_enabled_for_type (self, RFKILL_TYPE_WLAN));
+		g_value_set_boolean (value, radio_enabled_for_type (self, RFKILL_TYPE_WLAN, TRUE));
 		break;
 	case PROP_WIRELESS_HARDWARE_ENABLED:
 		g_value_set_boolean (value, priv->radio_states[RFKILL_TYPE_WLAN].hw_enabled);
 		break;
 	case PROP_WWAN_ENABLED:
-		g_value_set_boolean (value, radio_enabled_for_type (self, RFKILL_TYPE_WWAN));
+		g_value_set_boolean (value, radio_enabled_for_type (self, RFKILL_TYPE_WWAN, TRUE));
 		break;
 	case PROP_WWAN_HARDWARE_ENABLED:
 		g_value_set_boolean (value, priv->radio_states[RFKILL_TYPE_WWAN].hw_enabled);
@@ -4599,7 +4647,7 @@ nm_manager_init (NMManager *manager)
 	priv->radio_states[RFKILL_TYPE_WWAN].prop = NM_MANAGER_WWAN_ENABLED;
 	priv->radio_states[RFKILL_TYPE_WWAN].hw_prop = NM_MANAGER_WWAN_HARDWARE_ENABLED;
 	priv->radio_states[RFKILL_TYPE_WWAN].desc = "WWAN";
-	priv->radio_states[RFKILL_TYPE_WWAN].other_enabled_func = nm_manager_get_modem_enabled_state;
+	priv->radio_states[RFKILL_TYPE_WWAN].daemon_enabled_func = nm_manager_get_modem_enabled_state;
 	priv->radio_states[RFKILL_TYPE_WWAN].rtype = RFKILL_TYPE_WWAN;
 
 	priv->radio_states[RFKILL_TYPE_WIMAX].user_enabled = TRUE;
diff --git a/src/nm-system.c b/src/nm-system.c
index e8b8fec1..88db6596 100644
--- a/src/nm-system.c
+++ b/src/nm-system.c
@@ -312,10 +312,10 @@ sync_addresses (const char *iface, int ifindex, int family,
 		}
 
 		err = rtnl_addr_add (nlh, addrs[i], 0);
-		if (err < 0) {
+		if (err < 0 && (nl_get_errno () != EEXIST)) {
 			nm_log_err (log_domain,
 			            "(%s): error %d returned from rtnl_addr_add():\n%s",
-						iface, err, nl_geterror ());
+			            iface, err, nl_geterror ());
 		}
 
 		rtnl_addr_put (addrs[i]);
diff --git a/src/nm-udev-manager.c b/src/nm-udev-manager.c
index ff0ef68c..3ec8e7c9 100644
--- a/src/nm-udev-manager.c
+++ b/src/nm-udev-manager.c
@@ -88,7 +88,7 @@ rfkill_type_to_desc (RfKillType rtype)
 	if (rtype == 0)
 		return "WiFi";
 	else if (rtype == 1)
-		return "WWan";
+		return "WWAN";
 	else if (rtype == 2)
 		return "WiMAX";
 	return "unknown";
@@ -373,8 +373,12 @@ device_creator (NMUdevManager *manager,
 	}
 
 	if (!driver) {
-		nm_log_warn (LOGD_HW, "%s: couldn't determine device driver; ignoring...", path);
-		goto out;
+		if (g_str_has_prefix (ifname, "easytether")) {
+			driver = "easytether";
+		} else {
+			nm_log_warn (LOGD_HW, "%s: couldn't determine device driver; ignoring...", path);
+			goto out;
+		}
 	}
 
 	ifindex = g_udev_device_get_sysfs_attr_as_int (udev_device, "ifindex");
@@ -403,14 +407,24 @@ net_add (NMUdevManager *self, GUdevDevice *device)
 {
 	gint etype;
 	const char *iface;
-	const char *devtype;
+	const char *tmp;
 
 	g_return_if_fail (device != NULL);
 
+	iface = g_udev_device_get_name (device);
+	if (!iface) {
+		nm_log_dbg (LOGD_HW, "failed to get device's interface");
+		return;
+	}
+
+	/* Ignore devices that don't report Ethernet encapsulation, except for
+	 * s390 CTC-type devices that report 256 for some reason.
+	 * FIXME: use something other than interface name to detect CTC here.
+	 */
 	etype = g_udev_device_get_sysfs_attr_as_int (device, "type");
-	if (etype != 1) {
+	if ((etype != 1) && (!strncmp (iface, "ctc", 3) && (etype != 256))) {
 		nm_log_dbg (LOGD_HW, "ignoring interface with type %d", etype);
-		return; /* Not using ethernet encapsulation, don't care */
+		return;
 	}
 
 	/* Not all ethernet devices are immediately usable; newer mobile broadband
@@ -420,16 +434,22 @@ net_add (NMUdevManager *self, GUdevDevice *device)
 	 * subclass.  ModemManager will pick it up though and so we'll handle it
 	 * through the mobile broadband stuff.
 	 */
-	devtype = g_udev_device_get_property (device, "DEVTYPE");
-	if (devtype && !strcmp (devtype, "wwan")) {
-		nm_log_dbg (LOGD_HW, "ignoring interface with devtype '%s'", devtype);
+	tmp = g_udev_device_get_property (device, "DEVTYPE");
+	if (g_strcmp0 (tmp, "wwan") == 0) {
+		nm_log_dbg (LOGD_HW, "ignoring interface with devtype '%s'", tmp);
 		return;
 	}
 
-	iface = g_udev_device_get_name (device);
-	if (!iface) {
-		nm_log_dbg (LOGD_HW, "failed to get device's interface");
-		return;
+	/* Ignore Nokia cdc-ether interfaces in PC-Suite mode since we need to
+	 * talk phonet to use them, which ModemManager doesn't do yet.
+	 */
+	tmp = g_udev_device_get_property (device, "ID_VENDOR_ID");
+	if (g_strcmp0 (tmp, "0421") == 0) { /* Nokia vendor ID */
+		tmp = g_udev_device_get_property (device, "ID_MODEL");
+		if (tmp && (strstr (tmp, "PC-Suite") || strstr (tmp, "PC Suite"))) {
+			nm_log_dbg (LOGD_HW, "ignoring Nokia PC-Suite ethernet interface");
+			return;
+		}
 	}
 
 	g_signal_emit (self, signals[DEVICE_ADDED], 0, device, device_creator);
diff --git a/src/ppp-manager/nm-ppp-manager.c b/src/ppp-manager/nm-ppp-manager.c
index 31a5e57a..1258b8f6 100644
--- a/src/ppp-manager/nm-ppp-manager.c
+++ b/src/ppp-manager/nm-ppp-manager.c
@@ -66,10 +66,14 @@ static gboolean impl_ppp_manager_set_ip4_config (NMPPPManager *manager,
 
 #include "nm-ppp-manager-glue.h"
 
+static void _ppp_cleanup  (NMPPPManager *manager);
+
 #define NM_PPPD_PLUGIN PLUGINDIR "/nm-pppd-plugin.so"
 #define PPP_MANAGER_SECRET_TRIES "ppp-manager-secret-tries"
 
 typedef struct {
+	gboolean disposed;
+
 	GPid pid;
 	NMDBusManager *dbus_manager;
 	char *dbus_path;
@@ -163,11 +167,19 @@ dispose (GObject *object)
 {
 	NMPPPManagerPrivate *priv = NM_PPP_MANAGER_GET_PRIVATE (object);
 
-	nm_ppp_manager_stop (NM_PPP_MANAGER (object));
+	if (priv->disposed == FALSE) {
+		priv->disposed = TRUE;
 
-	if (priv->act_req)
-		g_object_unref (priv->act_req);
-	g_object_unref (priv->dbus_manager);
+		_ppp_cleanup (NM_PPP_MANAGER (object));
+
+		if (priv->act_req) {
+			g_object_unref (priv->act_req);
+			priv->act_req = NULL;
+		}
+
+		g_object_unref (priv->dbus_manager);
+		priv->dbus_manager = NULL;
+	}
 
 	G_OBJECT_CLASS (nm_ppp_manager_parent_class)->dispose (object);
 }
@@ -315,9 +327,12 @@ monitor_stats (NMPPPManager *manager)
 	NMPPPManagerPrivate *priv = NM_PPP_MANAGER_GET_PRIVATE (manager);
 
 	priv->monitor_fd = socket (AF_INET, SOCK_DGRAM, 0);
-	if (priv->monitor_fd > 0)
+	if (priv->monitor_fd > 0) {
+		g_warn_if_fail (priv->monitor_id == 0);
+		if (priv->monitor_id)
+			g_source_remove (priv->monitor_id);
 		priv->monitor_id = g_timeout_add_seconds (5, monitor_cb, manager);
-	else
+	} else
 		nm_log_warn (LOGD_PPP, "could not monitor PPP stats: %s", strerror (errno));
 }
 
@@ -706,7 +721,7 @@ pppd_timed_out (gpointer data)
 	NMPPPManager *manager = NM_PPP_MANAGER (data);
 
 	nm_log_warn (LOGD_PPP, "pppd timed out or didn't initialize our dbus module");
-	nm_ppp_manager_stop (manager);
+	_ppp_cleanup (manager);
 
 	g_signal_emit (manager, signals[STATE_CHANGED], 0, NM_PPP_STATUS_DEAD);
 
@@ -1023,8 +1038,8 @@ ensure_killed (gpointer data)
 	return FALSE;
 }
 
-void
-nm_ppp_manager_stop (NMPPPManager *manager)
+static void
+_ppp_cleanup (NMPPPManager *manager)
 {
 	NMPPPManagerPrivate *priv;
 
diff --git a/src/ppp-manager/nm-ppp-manager.h b/src/ppp-manager/nm-ppp-manager.h
index a0200973..51684157 100644
--- a/src/ppp-manager/nm-ppp-manager.h
+++ b/src/ppp-manager/nm-ppp-manager.h
@@ -69,8 +69,6 @@ void     nm_ppp_manager_update_secrets (NMPPPManager *manager,
                                         const char *password,
                                         const char *error_message);
 
-void     nm_ppp_manager_stop  (NMPPPManager *manager);
-
 
 #define NM_PPP_MANAGER_ERROR nm_ppp_manager_error_quark()
 #define NM_TYPE_PPP_MANAGER_ERROR (nm_ppp_manager_error_get_type ()) 
diff --git a/src/vpn-manager/nm-vpn-connection.c b/src/vpn-manager/nm-vpn-connection.c
index 03e213ff..823b6149 100644
--- a/src/vpn-manager/nm-vpn-connection.c
+++ b/src/vpn-manager/nm-vpn-connection.c
@@ -61,8 +61,6 @@ typedef struct {
 
 	NMConnection *connection;
 
-	NMActRequest *act_request;
-
 	NMDevice *parent_dev;
 	gulong device_monitor;
 	gulong device_ip4;
@@ -199,15 +197,12 @@ device_ip4_config_changed (NMDevice *device,
 }
 
 NMVPNConnection *
-nm_vpn_connection_new (NMConnection *connection,
-                       NMActRequest *act_request,
-                       NMDevice *parent_device)
+nm_vpn_connection_new (NMConnection *connection, NMDevice *parent_device)
 {
 	NMVPNConnection *self;
 	NMVPNConnectionPrivate *priv;
 
 	g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
-	g_return_val_if_fail (NM_IS_ACT_REQUEST (act_request), NULL);
 	g_return_val_if_fail (NM_IS_DEVICE (parent_device), NULL);
 
 	self = (NMVPNConnection *) g_object_new (NM_TYPE_VPN_CONNECTION, NULL);
@@ -218,7 +213,6 @@ nm_vpn_connection_new (NMConnection *connection,
 
 	priv->connection = g_object_ref (connection);
 	priv->parent_dev = g_object_ref (parent_device);
-	priv->act_request = g_object_ref (act_request);
 
 	priv->device_monitor = g_signal_connect (parent_device, "state-changed",
 									 G_CALLBACK (device_state_changed),
@@ -925,7 +919,7 @@ connection_state_changed (NMVPNConnection *connection,
 {
 	NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
 
-	nm_secrets_provider_interface_cancel_get_secrets (NM_SECRETS_PROVIDER_INTERFACE (priv->act_request));
+	nm_secrets_provider_interface_cancel_get_secrets (NM_SECRETS_PROVIDER_INTERFACE (connection));
 
 	switch (state) {
 	case NM_VPN_CONNECTION_STATE_NEED_AUTH:
@@ -989,7 +983,6 @@ dispose (GObject *object)
 	if (priv->proxy)
 		g_object_unref (priv->proxy);
 
-	g_object_unref (priv->act_request);
 	g_object_unref (priv->connection);
 
 	G_OBJECT_CLASS (nm_vpn_connection_parent_class)->dispose (object);
diff --git a/src/vpn-manager/nm-vpn-connection.h b/src/vpn-manager/nm-vpn-connection.h
index ab880b17..8da7d512 100644
--- a/src/vpn-manager/nm-vpn-connection.h
+++ b/src/vpn-manager/nm-vpn-connection.h
@@ -26,7 +26,6 @@
 #include <glib-object.h>
 #include "NetworkManagerVPN.h"
 #include "nm-device.h"
-#include "nm-activation-request.h"
 #include "nm-secrets-provider-interface.h"
 #include "nm-vpn-connection-base.h"
 
@@ -57,9 +56,7 @@ typedef struct {
 
 GType nm_vpn_connection_get_type (void);
 
-NMVPNConnection * nm_vpn_connection_new (NMConnection *connection,
-                                         NMActRequest *act_request,
-                                         NMDevice *parent_device);
+NMVPNConnection * nm_vpn_connection_new (NMConnection *connection, NMDevice *parent_device);
 
 void                 nm_vpn_connection_activate        (NMVPNConnection *connection);
 NMConnection *       nm_vpn_connection_get_connection  (NMVPNConnection *connection);
diff --git a/src/vpn-manager/nm-vpn-manager.c b/src/vpn-manager/nm-vpn-manager.c
index d3cd10a8..38b06b19 100644
--- a/src/vpn-manager/nm-vpn-manager.c
+++ b/src/vpn-manager/nm-vpn-manager.c
@@ -157,7 +157,6 @@ connection_vpn_state_changed (NMVPNConnection *connection,
 NMVPNConnection *
 nm_vpn_manager_activate_connection (NMVPNManager *manager,
                                     NMConnection *connection,
-                                    NMActRequest *act_request,
                                     NMDevice *device,
                                     GError **error)
 {
@@ -168,7 +167,6 @@ nm_vpn_manager_activate_connection (NMVPNManager *manager,
 
 	g_return_val_if_fail (NM_IS_VPN_MANAGER (manager), NULL);
 	g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
-	g_return_val_if_fail (NM_IS_ACT_REQUEST (act_request), NULL);
 	g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
 	g_return_val_if_fail (error != NULL, NULL);
 	g_return_val_if_fail (*error == NULL, NULL);
@@ -205,7 +203,7 @@ nm_vpn_manager_activate_connection (NMVPNManager *manager,
 		return NULL;
 	}
 
-	vpn = nm_vpn_service_activate (service, connection, act_request, device, error);
+	vpn = nm_vpn_service_activate (service, connection, device, error);
 	if (vpn) {
 		g_signal_connect (vpn, "vpn-state-changed",
 		                  G_CALLBACK (connection_vpn_state_changed),
diff --git a/src/vpn-manager/nm-vpn-manager.h b/src/vpn-manager/nm-vpn-manager.h
index f14844a9..b9cf7daf 100644
--- a/src/vpn-manager/nm-vpn-manager.h
+++ b/src/vpn-manager/nm-vpn-manager.h
@@ -25,8 +25,6 @@
 #include <glib.h>
 #include <glib-object.h>
 #include "nm-vpn-connection.h"
-#include "nm-activation-request.h"
-
 #define NM_TYPE_VPN_MANAGER            (nm_vpn_manager_get_type ())
 #define NM_VPN_MANAGER(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_VPN_MANAGER, NMVPNManager))
 #define NM_VPN_MANAGER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_VPN_MANAGER, NMVPNManagerClass))
@@ -69,7 +67,6 @@ NMVPNManager *nm_vpn_manager_get (void);
 
 NMVPNConnection *nm_vpn_manager_activate_connection (NMVPNManager *manager,
                                                      NMConnection *connection,
-                                                     NMActRequest *act_request,
                                                      NMDevice *device,
                                                      GError **error);
 
diff --git a/src/vpn-manager/nm-vpn-service.c b/src/vpn-manager/nm-vpn-service.c
index 3d44d900..68cfadb7 100644
--- a/src/vpn-manager/nm-vpn-service.c
+++ b/src/vpn-manager/nm-vpn-service.c
@@ -323,7 +323,6 @@ connection_vpn_state_changed (NMVPNConnection *connection,
 NMVPNConnection *
 nm_vpn_service_activate (NMVPNService *service,
                          NMConnection *connection,
-                         NMActRequest *act_request,
                          NMDevice *device,
                          GError **error)
 {
@@ -332,7 +331,6 @@ nm_vpn_service_activate (NMVPNService *service,
 
 	g_return_val_if_fail (NM_IS_VPN_SERVICE (service), NULL);
 	g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
-	g_return_val_if_fail (NM_IS_ACT_REQUEST (act_request), NULL);
 	g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
 	g_return_val_if_fail (error != NULL, NULL);
 	g_return_val_if_fail (*error == NULL, NULL);
@@ -341,7 +339,7 @@ nm_vpn_service_activate (NMVPNService *service,
 
 	clear_quit_timeout (service);
 
-	vpn = nm_vpn_connection_new (connection, act_request, device);
+	vpn = nm_vpn_connection_new (connection, device);
 	g_signal_connect (vpn, "vpn-state-changed",
 				   G_CALLBACK (connection_vpn_state_changed),
 				   service);
diff --git a/src/vpn-manager/nm-vpn-service.h b/src/vpn-manager/nm-vpn-service.h
index c7c1b036..0c7030e4 100644
--- a/src/vpn-manager/nm-vpn-service.h
+++ b/src/vpn-manager/nm-vpn-service.h
@@ -26,7 +26,6 @@
 #include <glib-object.h>
 #include "nm-device.h"
 #include "nm-vpn-connection.h"
-#include "nm-activation-request.h"
 
 #define NM_TYPE_VPN_SERVICE            (nm_vpn_service_get_type ())
 #define NM_VPN_SERVICE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_VPN_SERVICE, NMVPNService))
@@ -57,7 +56,6 @@ const char *nm_vpn_service_get_name_file (NMVPNService *service);
 
 NMVPNConnection * nm_vpn_service_activate (NMVPNService *service,
                                            NMConnection *connection,
-                                           NMActRequest *act_request,
                                            NMDevice *device,
                                            GError **error);
 
diff --git a/system-settings/plugins/ifcfg-rh/reader.c b/system-settings/plugins/ifcfg-rh/reader.c
index 4ca9232a..a5c586e5 100644
--- a/system-settings/plugins/ifcfg-rh/reader.c
+++ b/system-settings/plugins/ifcfg-rh/reader.c
@@ -309,7 +309,7 @@ fill_ip4_setting_from_ibft (shvarFile *ifcfg,
 				/* Record is good; fill IP4 config with its info */
 				if (!method) {
 					g_warning ("%s: malformed iscsiadm record: missing BOOTPROTO.", __func__);
-					return FALSE;
+					goto done;
 				}
 
 				g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, method, NULL);
@@ -320,7 +320,7 @@ fill_ip4_setting_from_ibft (shvarFile *ifcfg,
 				    if (!ipaddr.s_addr || !prefix) {
 						g_warning ("%s: malformed iscsiadm record: BOOTPROTO=static "
 						           "but missing IP address or prefix.", __func__);
-						return FALSE;
+						goto done;
 					}
 
 					addr = nm_ip4_address_new ();
@@ -337,7 +337,8 @@ fill_ip4_setting_from_ibft (shvarFile *ifcfg,
 
 					// FIXME: DNS search domains?
 				}
-				return TRUE;
+				success = TRUE;
+				goto done;
 			}
 			skip = FALSE;
 			hwaddr_matched = FALSE;
@@ -509,7 +510,7 @@ parse_ip6_address (const char *value,
 static NMIP4Address *
 read_full_ip4_address (shvarFile *ifcfg,
                        const char *network_file,
-                       guint32 which,
+                       gint32 which,
                        GError **error)
 {
 	NMIP4Address *addr;
@@ -519,12 +520,12 @@ read_full_ip4_address (shvarFile *ifcfg,
 	shvarFile *network_ifcfg;
 	char *value;
 
-	g_return_val_if_fail (which > 0, NULL);
+	g_return_val_if_fail (which >= -1, NULL);
 	g_return_val_if_fail (ifcfg != NULL, NULL);
 	g_return_val_if_fail (network_file != NULL, NULL);
 
 	addr = nm_ip4_address_new ();
-	if (which == 1) {
+	if (which == -1) {
 		ip_tag = g_strdup ("IPADDR");
 		prefix_tag = g_strdup ("PREFIX");
 		netmask_tag = g_strdup ("NETMASK");
@@ -783,7 +784,6 @@ read_route_file_legacy (const char *filename, NMSettingIP4Config *s_ip4, GError
 			}
 		}
 		dest = g_match_info_fetch (match_info, 1);
-		g_match_info_free (match_info);
 		if (!strcmp (dest, "default"))
 			strcpy (dest, "0.0.0.0");
 		if (inet_pton (AF_INET, dest, &ip4_addr) != 1) {
@@ -797,6 +797,7 @@ read_route_file_legacy (const char *filename, NMSettingIP4Config *s_ip4, GError
 
 		/* Prefix - is optional; 32 if missing */
 		prefix = g_match_info_fetch (match_info, 2);
+		g_match_info_free (match_info);
 		prefix_int = 32;
 		if (prefix) {
 			errno = 0;
@@ -808,7 +809,6 @@ read_route_file_legacy (const char *filename, NMSettingIP4Config *s_ip4, GError
 				goto error;
 			}
 		}
-
 		nm_ip4_route_set_prefix (route, (guint32) prefix_int);
 		g_free (prefix);
 
@@ -1037,7 +1037,6 @@ read_route6_file (const char *filename, NMSettingIP6Config *s_ip6, GError **erro
 			}
 		}
 		dest = g_match_info_fetch (match_info, 1);
-		g_match_info_free (match_info);
 		if (!strcmp (dest, "default"))
 			strcpy (dest, "::");
 		if (inet_pton (AF_INET6, dest, &ip6_addr) != 1) {
@@ -1051,6 +1050,7 @@ read_route6_file (const char *filename, NMSettingIP6Config *s_ip6, GError **erro
 
 		/* Prefix - is optional; 128 if missing */
 		prefix = g_match_info_fetch (match_info, 2);
+		g_match_info_free (match_info);
 		prefix_int = 128;
 		if (prefix) {
 			errno = 0;
@@ -1062,7 +1062,6 @@ read_route6_file (const char *filename, NMSettingIP6Config *s_ip6, GError **erro
 				goto error;
 			}
 		}
-
 		nm_ip6_route_set_prefix (route, (guint32) prefix_int);
 		g_free (prefix);
 
@@ -1135,7 +1134,7 @@ make_ip4_setting (shvarFile *ifcfg,
 	char *value = NULL;
 	char *route_path = NULL;
 	char *method = NM_SETTING_IP4_CONFIG_METHOD_MANUAL;
-	guint32 i;
+	gint32 i;
 	shvarFile *network_ifcfg;
 	shvarFile *route_ifcfg;
 	gboolean never_default = FALSE, tmp_success;
@@ -1179,6 +1178,7 @@ make_ip4_setting (shvarFile *ifcfg,
 		if (!g_ascii_strcasecmp (value, "bootp") || !g_ascii_strcasecmp (value, "dhcp"))
 			method = NM_SETTING_IP4_CONFIG_METHOD_AUTO;
 		else if (!g_ascii_strcasecmp (value, "ibft")) {
+			g_free (value);
 			g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_NEVER_DEFAULT, never_default, NULL);
 			/* iSCSI Boot Firmware Table: need to read values from the iSCSI 
 			 * firmware for this device and create the IP4 setting using those.
@@ -1212,6 +1212,9 @@ make_ip4_setting (shvarFile *ifcfg,
 		g_free (value);
 	} else {
 		char *tmp_ip4, *tmp_prefix, *tmp_netmask;
+		char *tmp_ip4_0, *tmp_prefix_0, *tmp_netmask_0;
+		char *tmp_ip4_1, *tmp_prefix_1, *tmp_netmask_1;
+		char *tmp_ip4_2, *tmp_prefix_2, *tmp_netmask_2;
 
 		/* If there is no BOOTPROTO, no IPADDR, no PREFIX, no NETMASK, but
 		 * valid IPv6 configuration, assume that IPv4 is disabled.  Otherwise,
@@ -1226,7 +1229,19 @@ make_ip4_setting (shvarFile *ifcfg,
 		tmp_ip4 = svGetValue (ifcfg, "IPADDR", FALSE);
 		tmp_prefix = svGetValue (ifcfg, "PREFIX", FALSE);
 		tmp_netmask = svGetValue (ifcfg, "NETMASK", FALSE);
-		if (!tmp_ip4 && !tmp_prefix && !tmp_netmask) {
+		tmp_ip4_0 = svGetValue (ifcfg, "IPADDR0", FALSE);
+		tmp_prefix_0 = svGetValue (ifcfg, "PREFIX0", FALSE);
+		tmp_netmask_0 = svGetValue (ifcfg, "NETMASK0", FALSE);
+		tmp_ip4_1 = svGetValue (ifcfg, "IPADDR1", FALSE);
+		tmp_prefix_1 = svGetValue (ifcfg, "PREFIX1", FALSE);
+		tmp_netmask_1 = svGetValue (ifcfg, "NETMASK1", FALSE);
+		tmp_ip4_2 = svGetValue (ifcfg, "IPADDR2", FALSE);
+		tmp_prefix_2 = svGetValue (ifcfg, "PREFIX2", FALSE);
+		tmp_netmask_2 = svGetValue (ifcfg, "NETMASK2", FALSE);
+		if (   !tmp_ip4   && !tmp_prefix   && !tmp_netmask
+		    && !tmp_ip4_0 && !tmp_prefix_0 && !tmp_netmask_0
+		    && !tmp_ip4_1 && !tmp_prefix_1 && !tmp_netmask_1
+		    && !tmp_ip4_2 && !tmp_prefix_2 && !tmp_netmask_2) {
 			if (valid_ip6_config) {
 				/* Nope, no IPv4 */
 				g_object_set (s_ip4,
@@ -1240,6 +1255,15 @@ make_ip4_setting (shvarFile *ifcfg,
 		g_free (tmp_ip4);
 		g_free (tmp_prefix);
 		g_free (tmp_netmask);
+		g_free (tmp_ip4_0);
+		g_free (tmp_prefix_0);
+		g_free (tmp_netmask_0);
+		g_free (tmp_ip4_1);
+		g_free (tmp_prefix_1);
+		g_free (tmp_netmask_1);
+		g_free (tmp_ip4_2);
+		g_free (tmp_prefix_2);
+		g_free (tmp_netmask_2);
 	}
 
 	g_object_set (s_ip4,
@@ -1254,12 +1278,17 @@ make_ip4_setting (shvarFile *ifcfg,
 	if (!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_MANUAL)) {
 		NMIP4Address *addr;
 
-		for (i = 1; i < 256; i++) {
+		for (i = -1; i < 256; i++) {
 			addr = read_full_ip4_address (ifcfg, network_file, i, error);
 			if (error && *error)
 				goto done;
-			if (!addr)
-				break;
+			if (!addr) {
+				/* The first mandatory variable is 2-indexed (IPADDR2)
+				 * Variables IPADDR, IPADDR0 and IPADDR1 are optional */
+				if (i > 1)
+					break;
+				continue;
+			}
 
 			if (!nm_setting_ip4_config_add_address (s_ip4, addr))
 				PLUGIN_WARN (IFCFG_PLUGIN_NAME, "    warning: duplicate IP4 address");
@@ -1665,6 +1694,7 @@ add_one_wep_key (shvarFile *ifcfg,
 
 	if (key) {
 		nm_setting_wireless_security_set_wep_key (s_wsec, key_idx, key);
+		g_free (key);
 		success = TRUE;
 	} else
 		g_set_error (error, IFCFG_PLUGIN_ERROR, 0, "Invalid WEP key length.");
@@ -2744,6 +2774,7 @@ make_wireless_setting (shvarFile *ifcfg,
 			ssid_len  = (value_len - 2) / 2;
 			memcpy (buf, tmp, ssid_len);
 			p = &buf[0];
+			g_free (tmp);
 		}
 
 		if (ssid_len > 32 || ssid_len == 0) {
@@ -2803,6 +2834,7 @@ make_wireless_setting (shvarFile *ifcfg,
 		if (!eth) {
 			g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
 			             "Invalid BSSID '%s'", value);
+			g_free (value);
 			goto error;
 		}
 
@@ -2810,6 +2842,7 @@ make_wireless_setting (shvarFile *ifcfg,
 		g_byte_array_append (bssid, eth->ether_addr_octet, ETH_ALEN);
 		g_object_set (s_wireless, NM_SETTING_WIRELESS_BSSID, bssid, NULL);
 		g_byte_array_free (bssid, TRUE);
+		g_free (value);
 	}
 
 	value = svGetValue (ifcfg, "CHANNEL", FALSE);
@@ -2829,6 +2862,7 @@ make_wireless_setting (shvarFile *ifcfg,
 			g_object_set (s_wireless, NM_SETTING_WIRELESS_BAND, "a", NULL);
 		else
 			g_object_set (s_wireless, NM_SETTING_WIRELESS_BAND, "bg", NULL);
+		g_free (value);
 	}
 
 	value = svGetValue (ifcfg, "MTU", FALSE);
@@ -2844,6 +2878,7 @@ make_wireless_setting (shvarFile *ifcfg,
 			goto error;
 		}
 		g_object_set (s_wireless, NM_SETTING_WIRELESS_MTU, (guint32) mtu, NULL);
+		g_free (value);
 	}
 
 done:
@@ -2906,6 +2941,7 @@ wireless_connection_from_ifcfg (const char *file,
 		/* Wireless security */
 		security_setting = make_wireless_security_setting (ifcfg, file, ssid, adhoc, &s_8021x, error);
 		if (*error) {
+			g_free (printable_ssid);
 			g_object_unref (connection);
 			return NULL;
 		}
@@ -3039,6 +3075,11 @@ make_wired_setting (shvarFile *ifcfg,
 	}
 	g_free (value);
 
+	value = svGetValue (ifcfg, "CTCPROT", FALSE);
+	if (value && strlen (value))
+		nm_setting_wired_add_s390_option (s_wired, "ctcprot", value);
+	g_free (value);
+
 	nettype = svGetValue (ifcfg, "NETTYPE", FALSE);
 	if (nettype && strlen (nettype)) {
 		if (!strcmp (nettype, "qeth") || !strcmp (nettype, "lcs") || !strcmp (nettype, "ctc"))
@@ -3046,6 +3087,7 @@ make_wired_setting (shvarFile *ifcfg,
 		else
 			PLUGIN_WARN (IFCFG_PLUGIN_NAME, "    warning: unknown s390 NETTYPE '%s'", nettype);
 	}
+	g_free (nettype);
 
 	value = svGetValue (ifcfg, "OPTIONS", FALSE);
 	if (value && strlen (value)) {
@@ -3068,8 +3110,6 @@ make_wired_setting (shvarFile *ifcfg,
 	}
 	g_free (value);
 
-	g_free (nettype);
-
 	if (!nm_controlled && !*unmanaged) {
 		/* If NM_CONTROLLED=no but there wasn't a MAC address or z/VM
 		 * subchannels, notify the user that the device cannot be unmanaged.
@@ -3294,6 +3334,12 @@ connection_from_file (const char *filename,
 		}
 
 		g_free (device);
+	} else {
+		/* Check for IBM s390 CTC devices and call them Ethernet */
+		if (g_strcmp0 (type, "CTC") == 0) {
+			g_free (type);
+			type = g_strdup (TYPE_ETHERNET);
+		}
 	}
 
 	nmc = svGetValue (parsed, "NM_CONTROLLED", FALSE);
@@ -3401,6 +3447,7 @@ connection_from_file (const char *filename,
 
 		g_object_set (G_OBJECT (s_con), NM_SETTING_CONNECTION_READ_ONLY, TRUE, NULL);
 	}
+	g_free (bootproto);
 
 	if (!nm_connection_verify (connection, &error)) {
 		g_object_unref (connection);
diff --git a/system-settings/plugins/ifcfg-rh/shvar.c b/system-settings/plugins/ifcfg-rh/shvar.c
index 1e15d76f..a31dd5a4 100644
--- a/system-settings/plugins/ifcfg-rh/shvar.c
+++ b/system-settings/plugins/ifcfg-rh/shvar.c
@@ -296,14 +296,14 @@ svSetValue(shvarFile *s, const char *key, const char *value, gboolean verbatim)
 	    if (s->current) s->current->data = keyValue;
 	    else s->lineList = g_list_append(s->lineList, keyValue);
 	    s->modified = 1;
+	    goto end;
 	} else if (val1) {
 	    /* delete line */
 	    s->lineList = g_list_remove_link(s->lineList, s->current);
 	    g_list_free_1(s->current);
 	    s->modified = 1;
-	    goto bail; /* do not need keyValue */
 	}
-	goto end;
+	goto bail; /* do not need keyValue */
     }
 
     if (!val1) {
diff --git a/system-settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am b/system-settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am
index 28cfb98f..154bb2b7 100644
--- a/system-settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am
+++ b/system-settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am
@@ -54,6 +54,10 @@ EXTRA_DIST = \
 	route-test-wired-static-routes \
 	ifcfg-test-wired-static-routes-legacy \
 	route-test-wired-static-routes-legacy \
+	ifcfg-test-wired-ipv4-manual-1 \
+	ifcfg-test-wired-ipv4-manual-2 \
+	ifcfg-test-wired-ipv4-manual-3 \
+	ifcfg-test-wired-ipv4-manual-4 \
 	ifcfg-test-wired-ipv6-manual \
 	route6-test-wired-ipv6-manual \
 	ifcfg-test-wired-static-no-prefix-8 \
@@ -67,6 +71,7 @@ EXTRA_DIST = \
 	ifcfg-test-wifi-wep-104-ascii \
 	keys-test-wifi-wep-104-ascii \
 	ifcfg-test-wired-qeth-static \
+	ifcfg-test-wired-ctc-static \
 	ifcfg-test-bridge-main \
 	ifcfg-test-bridge-component \
 	ifcfg-test-vlan-interface
diff --git a/system-settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.in b/system-settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.in
index 7a2a324e..53f86e16 100644
--- a/system-settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.in
+++ b/system-settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.in
@@ -299,6 +299,10 @@ EXTRA_DIST = \
 	route-test-wired-static-routes \
 	ifcfg-test-wired-static-routes-legacy \
 	route-test-wired-static-routes-legacy \
+	ifcfg-test-wired-ipv4-manual-1 \
+	ifcfg-test-wired-ipv4-manual-2 \
+	ifcfg-test-wired-ipv4-manual-3 \
+	ifcfg-test-wired-ipv4-manual-4 \
 	ifcfg-test-wired-ipv6-manual \
 	route6-test-wired-ipv6-manual \
 	ifcfg-test-wired-static-no-prefix-8 \
@@ -312,6 +316,7 @@ EXTRA_DIST = \
 	ifcfg-test-wifi-wep-104-ascii \
 	keys-test-wifi-wep-104-ascii \
 	ifcfg-test-wired-qeth-static \
+	ifcfg-test-wired-ctc-static \
 	ifcfg-test-bridge-main \
 	ifcfg-test-bridge-component \
 	ifcfg-test-vlan-interface
diff --git a/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-ctc-static b/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-ctc-static
new file mode 100644
index 00000000..61f8f423
--- /dev/null
+++ b/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-ctc-static
@@ -0,0 +1,12 @@
+# IBM CTC
+DEVICE=ctc0
+TYPE=CTC
+BOOTPROTO=static
+IPADDR=192.168.70.87
+GATEWAY=192.168.70.136
+NETMASK=255.255.255.0
+ONBOOT=yes
+SUBCHANNELS=0.0.1b00,0.0.1b01
+NETTYPE=ctc
+CTCPROT=0
+
diff --git a/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-ipv4-manual-1 b/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-ipv4-manual-1
new file mode 100644
index 00000000..cad0f6cf
--- /dev/null
+++ b/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-ipv4-manual-1
@@ -0,0 +1,12 @@
+# Intel Corporation 82540EP Gigabit Ethernet Controller (Mobile)
+TYPE=Ethernet
+DEVICE=eth0
+HWADDR=00:11:22:33:44:ee
+BOOTPROTO=none
+IPADDR0=1.2.3.4
+PREFIX0=24
+GATEWAY0=1.1.1.1
+IPADDR1=9.8.7.6
+PREFIX1=16
+IPADDR2=3.3.3.3
+PREFIX2=8
diff --git a/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-ipv4-manual-2 b/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-ipv4-manual-2
new file mode 100644
index 00000000..ad9290a4
--- /dev/null
+++ b/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-ipv4-manual-2
@@ -0,0 +1,14 @@
+# Intel Corporation 82540EP Gigabit Ethernet Controller (Mobile)
+TYPE=Ethernet
+DEVICE=eth0
+HWADDR=00:11:22:33:44:ee
+BOOTPROTO=none
+IPADDR=1.2.3.4
+PREFIX=24
+GATEWAY=1.1.1.1
+IPADDR2=9.8.7.6
+PREFIX2=16
+GATEWAY2=5.5.5.5
+IPADDR3=3.3.3.3
+PREFIX3=8
+GATEWAY3=7.7.7.7
diff --git a/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-ipv4-manual-3 b/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-ipv4-manual-3
new file mode 100644
index 00000000..f2457bd2
--- /dev/null
+++ b/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-ipv4-manual-3
@@ -0,0 +1,11 @@
+# Intel Corporation 82540EP Gigabit Ethernet Controller (Mobile)
+TYPE=Ethernet
+DEVICE=eth0
+HWADDR=00:11:22:33:44:ee
+BOOTPROTO=none
+IPADDR2=1.2.3.4
+PREFIX2=24
+IPADDR3=9.8.7.6
+PREFIX3=16
+IPADDR4=3.3.3.3
+PREFIX4=8
diff --git a/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-ipv4-manual-4 b/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-ipv4-manual-4
new file mode 100644
index 00000000..e6b77141
--- /dev/null
+++ b/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-ipv4-manual-4
@@ -0,0 +1,11 @@
+# Intel Corporation 82540EP Gigabit Ethernet Controller (Mobile)
+TYPE=Ethernet
+DEVICE=eth0
+HWADDR=00:11:22:33:44:ee
+BOOTPROTO=none
+IPADDR=1.2.3.4
+PREFIX=24
+IPADDR1=9.8.7.6
+PREFIX1=16
+IPADDR2=3.3.3.3
+PREFIX2=8
diff --git a/system-settings/plugins/ifcfg-rh/tests/test-ifcfg-rh-utils.c b/system-settings/plugins/ifcfg-rh/tests/test-ifcfg-rh-utils.c
index a6c54fd3..e32ad789 100644
--- a/system-settings/plugins/ifcfg-rh/tests/test-ifcfg-rh-utils.c
+++ b/system-settings/plugins/ifcfg-rh/tests/test-ifcfg-rh-utils.c
@@ -15,7 +15,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * Copyright (C) 2008 - 2009 Red Hat, Inc.
+ * Copyright (C) 2008 - 2011 Red Hat, Inc.
  */
 
 #include <stdio.h>
@@ -53,7 +53,7 @@ test_get_ifcfg_path (const char *desc,
                      const char *path,
                      const char *expected)
 {
-	const char *result;
+	char *result;
 
 	result = utils_get_ifcfg_path (path);
 	if (expected == NULL) {
@@ -64,6 +64,7 @@ test_get_ifcfg_path (const char *desc,
 		ASSERT (strcmp (result, expected) == 0,
 		        desc, "unexpected ifcfg name '%s' created for '%s'", result, path);
 	}
+	g_free (result);
 }
 
 static void
@@ -71,7 +72,7 @@ test_get_keys_path (const char *desc,
                     const char *path,
                     const char *expected)
 {
-	const char *result;
+	char *result;
 
 	result = utils_get_keys_path (path);
 	if (expected == NULL) {
@@ -82,6 +83,7 @@ test_get_keys_path (const char *desc,
 		ASSERT (strcmp (result, expected) == 0,
 		        desc, "unexpected extra path '%s' created for '%s'", result, path);
 	}
+	g_free (result);
 }
 
 static void
@@ -89,7 +91,7 @@ test_get_route_path (const char *desc,
                      const char *path,
                      const char *expected)
 {
-	const char *result;
+	char *result;
 
 	result = utils_get_route_path (path);
 	if (expected == NULL) {
@@ -100,6 +102,7 @@ test_get_route_path (const char *desc,
 		ASSERT (strcmp (result, expected) == 0,
 		        desc, "unexpected extra path '%s' created for '%s'", result, path);
 	}
+	g_free (result);
 }
 
 static void
diff --git a/system-settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c b/system-settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
index 2fbfea66..0876ac94 100644
--- a/system-settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
+++ b/system-settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
@@ -15,7 +15,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * Copyright (C) 2008 - 2010 Red Hat, Inc.
+ * Copyright (C) 2008 - 2011 Red Hat, Inc.
  */
 
 #include <stdio.h>
@@ -305,6 +305,10 @@ test_read_minimal (void)
 	        NM_SETTING_IP4_CONFIG_SETTING_NAME,
 	        NM_SETTING_IP4_CONFIG_NEVER_DEFAULT);
 
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 }
 
@@ -423,6 +427,7 @@ test_read_unmanaged (void)
 	        TEST_IFCFG_UNMANAGED,
 	        NM_SETTING_IP4_CONFIG_SETTING_NAME);
 
+	g_free (unmanaged);
 	g_object_unref (connection);
 }
 
@@ -434,7 +439,7 @@ test_read_wired_static (const char *file, const char *expected_id)
 	NMSettingWired *s_wired;
 	NMSettingIP4Config *s_ip4;
 	NMSettingIP6Config *s_ip6;
-	char *unmanaged = FALSE;
+	char *unmanaged = NULL;
 	char *keyfile = NULL;
 	char *routefile = NULL;
 	char *route6file = NULL;
@@ -472,7 +477,7 @@ test_read_wired_static (const char *file, const char *expected_id)
 	ASSERT (nm_connection_verify (connection, &error),
 	        "wired-static-verify", "failed to verify %s: %s", file, error->message);
 
-	ASSERT (unmanaged == FALSE,
+	ASSERT (unmanaged == NULL,
 	        "wired-static-verify", "failed to verify %s: unexpected unmanaged value", file);
 
 	/* ===== CONNECTION SETTING ===== */
@@ -726,6 +731,10 @@ test_read_wired_static (const char *file, const char *expected_id)
 			file);
 	}
 
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 }
 
@@ -737,7 +746,7 @@ test_read_wired_static_no_prefix (guint32 expected_prefix)
 	NMConnection *connection;
 	NMSettingConnection *s_con;
 	NMSettingIP4Config *s_ip4;
-	char *unmanaged = FALSE;
+	char *unmanaged = NULL;
 	char *keyfile = NULL;
 	char *routefile = NULL;
 	char *route6file = NULL;
@@ -771,7 +780,7 @@ test_read_wired_static_no_prefix (guint32 expected_prefix)
 	ASSERT (nm_connection_verify (connection, &error),
 	        "wired-static-no-prefix-verify", "failed to verify %s: %s", file, error->message);
 
-	ASSERT (unmanaged == FALSE,
+	ASSERT (unmanaged == NULL,
 	        "wired-static-no-prefix-verify", "failed to verify %s: unexpected unmanaged value", file);
 
 	/* ===== CONNECTION SETTING ===== */
@@ -833,6 +842,10 @@ test_read_wired_static_no_prefix (guint32 expected_prefix)
 	        NM_SETTING_IP4_CONFIG_ADDRESSES);
 
 	g_free (file);
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 }
 
@@ -876,7 +889,7 @@ test_read_wired_dhcp (void)
 	ASSERT (nm_connection_verify (connection, &error),
 	        "wired-dhcp-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_DHCP, error->message);
 
-	ASSERT (unmanaged == FALSE,
+	ASSERT (unmanaged == NULL,
 	        "wired-dhcp-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIRED_DHCP);
 
 	/* ===== CONNECTION SETTING ===== */
@@ -1003,7 +1016,10 @@ test_read_wired_dhcp (void)
 	        NM_SETTING_IP4_CONFIG_SETTING_NAME,
 	        NM_SETTING_IP4_CONFIG_DNS);
 
-
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 }
 
@@ -1046,7 +1062,7 @@ test_read_wired_global_gateway (void)
 	ASSERT (nm_connection_verify (connection, &error),
 	        "wired-global-gateway-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_GLOBAL_GATEWAY, error->message);
 
-	ASSERT (unmanaged == FALSE,
+	ASSERT (unmanaged == NULL,
 	        "wired-global-gateway-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIRED_GLOBAL_GATEWAY);
 
 	/* ===== CONNECTION SETTING ===== */
@@ -1130,6 +1146,10 @@ test_read_wired_global_gateway (void)
 	        NM_SETTING_IP4_CONFIG_SETTING_NAME,
 	        NM_SETTING_IP4_CONFIG_ADDRESSES);
 
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 }
 
@@ -1169,7 +1189,7 @@ test_read_wired_never_default (void)
 	ASSERT (nm_connection_verify (connection, &error),
 	        "wired-never-default-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_NEVER_DEFAULT, error->message);
 
-	ASSERT (unmanaged == FALSE,
+	ASSERT (unmanaged == NULL,
 	        "wired-never-default-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIRED_NEVER_DEFAULT);
 
 	/* ===== CONNECTION SETTING ===== */
@@ -1252,6 +1272,10 @@ test_read_wired_never_default (void)
 	        NM_SETTING_IP6_CONFIG_SETTING_NAME,
 	        NM_SETTING_IP6_CONFIG_NEVER_DEFAULT);
 
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 }
 
@@ -1290,7 +1314,7 @@ test_read_wired_defroute_no (void)
 	ASSERT (nm_connection_verify (connection, &error),
 	        "wired-defroute-no-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_DEFROUTE_NO, error->message);
 
-	ASSERT (unmanaged == FALSE,
+	ASSERT (unmanaged == NULL,
 	        "wired-defroute-no-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIRED_DEFROUTE_NO);
 
 	/* ===== CONNECTION SETTING ===== */
@@ -1366,6 +1390,10 @@ test_read_wired_defroute_no (void)
 	        NM_SETTING_IP6_CONFIG_SETTING_NAME,
 	        NM_SETTING_IP6_CONFIG_NEVER_DEFAULT);
 
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 }
 
@@ -1411,7 +1439,7 @@ test_read_wired_defroute_no_gatewaydev_yes (void)
 	        TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
 	        error->message);
 
-	ASSERT (unmanaged == FALSE,
+	ASSERT (unmanaged == NULL,
 	        "wired-defroute-no-gatewaydev-yes-verify",
 	        "failed to verify %s: unexpected unmanaged value",
 	        TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES);
@@ -1489,6 +1517,10 @@ test_read_wired_defroute_no_gatewaydev_yes (void)
 	        NM_SETTING_IP6_CONFIG_SETTING_NAME,
 	        NM_SETTING_IP6_CONFIG_NEVER_DEFAULT);
 
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 }
 
@@ -1650,6 +1682,7 @@ test_read_wired_static_routes (void)
 	        "wired-static-routes-verify-ip4", "failed to verify %s: unexpected route metric #2",
 	        TEST_IFCFG_WIRED_STATIC_ROUTES);
 
+	g_free (unmanaged);
 	g_free (keyfile);
 	g_free (routefile);
 	g_free (route6file);
@@ -1855,6 +1888,159 @@ test_read_wired_static_routes_legacy (void)
 	        "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected destination route #3 metric",
 	        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
 
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
+	g_object_unref (connection);
+}
+
+static void
+test_read_wired_ipv4_manual (const char *file, const char *expected_id)
+{
+	NMConnection *connection;
+	NMSettingConnection *s_con;
+	NMSettingWired *s_wired;
+	NMSettingIP4Config *s_ip4;
+	char *unmanaged = NULL;
+	char *keyfile = NULL;
+	char *routefile = NULL;
+	char *route6file = NULL;
+	gboolean ignore_error = FALSE;
+	GError *error = NULL;
+	const char *tmp;
+	const char *expected_address1 = "1.2.3.4";
+	const char *expected_address2 = "9.8.7.6";
+	const char *expected_address3 = "3.3.3.3";
+	guint32 expected_prefix1 = 24;
+	guint32 expected_prefix2 = 16;
+	guint32 expected_prefix3 = 8;
+	NMIP4Address *ip4_addr;
+	struct in_addr addr;
+
+	connection = connection_from_file (file,
+	                                   NULL,
+	                                   TYPE_ETHERNET,
+	                                   NULL,
+	                                   &unmanaged,
+	                                   &keyfile,
+	                                   &routefile,
+	                                   &route6file,
+	                                   &error,
+	                                   &ignore_error);
+	ASSERT (connection != NULL,
+	        "wired-ipv4-manual-read", "failed to read %s: %s", file, error->message);
+
+	ASSERT (nm_connection_verify (connection, &error),
+	        "wired-ipv4-manual-verify", "failed to verify %s: %s", file, error->message);
+
+	ASSERT (unmanaged == NULL,
+	        "wired-ipv4-manual-verify", "failed to verify %s: unexpected unmanaged value", file);
+
+	/* ===== CONNECTION SETTING ===== */
+
+	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
+	ASSERT (s_con != NULL,
+	        "wired-ipv4-manual-verify-connection", "failed to verify %s: missing %s setting",
+	        file,
+	        NM_SETTING_CONNECTION_SETTING_NAME);
+
+	/* ID */
+	tmp = nm_setting_connection_get_id (s_con);
+	ASSERT (tmp != NULL,
+	        "wired-ipv4-manual-verify-connection", "failed to verify %s: missing %s / %s key",
+	        file,
+	        NM_SETTING_CONNECTION_SETTING_NAME,
+	        NM_SETTING_CONNECTION_ID);
+	ASSERT (strcmp (tmp, expected_id) == 0,
+	        "wired-ipv4-manual-verify-connection", "failed to verify %s: unexpected %s / %s key value",
+	        file,
+	        NM_SETTING_CONNECTION_SETTING_NAME,
+	        NM_SETTING_CONNECTION_ID);
+
+	/* ===== WIRED SETTING ===== */
+
+	s_wired = NM_SETTING_WIRED (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED));
+	ASSERT (s_wired != NULL,
+	        "wired-ipv4-manual-verify-wired", "failed to verify %s: missing %s setting",
+	        file,
+	        NM_SETTING_WIRED_SETTING_NAME);
+
+	/* ===== IPv4 SETTING ===== */
+
+	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
+	ASSERT (s_ip4 != NULL,
+	        "wired-ipv4-manual-verify-ip4", "failed to verify %s: missing %s setting",
+	        file,
+	        NM_SETTING_IP4_CONFIG_SETTING_NAME);
+
+	/* Method */
+	tmp = nm_setting_ip4_config_get_method (s_ip4);
+	ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_MANUAL) == 0,
+	        "wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
+	        file,
+	        NM_SETTING_IP4_CONFIG_SETTING_NAME,
+	        NM_SETTING_IP4_CONFIG_METHOD);
+
+	/* IP addresses */
+	ASSERT (nm_setting_ip4_config_get_num_addresses (s_ip4) == 3,
+		"wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
+		file,
+		NM_SETTING_IP4_CONFIG_SETTING_NAME,
+		NM_SETTING_IP4_CONFIG_ADDRESSES);
+
+	/* Address #1 */
+	ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 0);
+	ASSERT (ip4_addr,
+		"wired-ipv4-manual-verify-ip4", "failed to verify %s: missing IP4 address #1",
+		file);
+
+	ASSERT (nm_ip4_address_get_prefix (ip4_addr) == expected_prefix1,
+		"wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected IP4 address #1 prefix",
+		file);
+
+	ASSERT (inet_pton (AF_INET, expected_address1, &addr) > 0,
+		"wired-ipv4-manual-verify-ip4", "failed to verify %s: couldn't convert IP address #1",
+		file);
+	ASSERT (nm_ip4_address_get_address (ip4_addr) == addr.s_addr,
+		"wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected IP4 address #1",
+		file);
+
+	/* Address #2 */
+	ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 1);
+	ASSERT (ip4_addr,
+		"wired-ipv4-manual-verify-ip4", "failed to verify %s: missing IP4 address #2",
+		file);
+
+	ASSERT (nm_ip4_address_get_prefix (ip4_addr) == expected_prefix2,
+		"wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected IP4 address #2 prefix",
+		file);
+
+	ASSERT (inet_pton (AF_INET, expected_address2, &addr) > 0,
+		"wired-ipv4-manual-verify-ip4", "failed to verify %s: couldn't convert IP address #2",
+		file);
+	ASSERT (nm_ip4_address_get_address (ip4_addr) == addr.s_addr,
+		"wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected IP4 address #2",
+		file);
+
+	/* Address #3 */
+	ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 2);
+	ASSERT (ip4_addr,
+		"wired-ipv4-manual-verify-ip4", "failed to verify %s: missing IP4 address #3",
+		file);
+
+	ASSERT (nm_ip4_address_get_prefix (ip4_addr) == expected_prefix3,
+		"wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected IP4 address #3 prefix",
+		file);
+
+	ASSERT (inet_pton (AF_INET, expected_address3, &addr) > 0,
+		"wired-ipv4-manual-verify-ip4", "failed to verify %s: couldn't convert IP address #3",
+		file);
+	ASSERT (nm_ip4_address_get_address (ip4_addr) == addr.s_addr,
+		"wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected IP4 address #3",
+		file);
+
+	g_free (unmanaged);
 	g_free (keyfile);
 	g_free (routefile);
 	g_free (route6file);
@@ -1911,7 +2097,7 @@ test_read_wired_ipv6_manual (void)
 	ASSERT (nm_connection_verify (connection, &error),
 	        "wired-ipv6-manual-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_IPV6_MANUAL, error->message);
 
-	ASSERT (unmanaged == FALSE,
+	ASSERT (unmanaged == NULL,
 	        "wired-ipv6-manual-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIRED_IPV6_MANUAL);
 
 	/* ===== CONNECTION SETTING ===== */
@@ -2154,6 +2340,7 @@ test_read_wired_ipv6_manual (void)
 	        NM_SETTING_IP6_CONFIG_SETTING_NAME,
 	        NM_SETTING_IP6_CONFIG_DNS);
 
+	g_free (unmanaged);
 	g_free (keyfile);
 	g_free (routefile);
 	g_free (route6file);
@@ -2201,7 +2388,7 @@ test_read_wired_ipv6_only (void)
 	ASSERT (nm_connection_verify (connection, &error),
 	        "wired-ipv6-only-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_IPV6_ONLY, error->message);
 
-	ASSERT (unmanaged == FALSE,
+	ASSERT (unmanaged == NULL,
 	        "wired-ipv6-only-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIRED_IPV6_MANUAL);
 
 	/* ===== CONNECTION SETTING ===== */
@@ -2311,6 +2498,7 @@ test_read_wired_ipv6_only (void)
 	        NM_SETTING_IP6_CONFIG_SETTING_NAME,
 	        NM_SETTING_IP6_CONFIG_DNS);
 
+	g_free (unmanaged);
 	g_free (keyfile);
 	g_free (routefile);
 	g_free (route6file);
@@ -2353,7 +2541,7 @@ test_read_wired_dhcp6_only (void)
 	ASSERT (nm_connection_verify (connection, &error),
 	        "wired-dhcp6-only-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_DHCP6_ONLY, error->message);
 
-	ASSERT (unmanaged == FALSE,
+	ASSERT (unmanaged == NULL,
 	        "wired-dhcp6-only-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIRED_DHCP6_ONLY);
 
 	/* ===== CONNECTION SETTING ===== */
@@ -2416,6 +2604,7 @@ test_read_wired_dhcp6_only (void)
 	        NM_SETTING_IP6_CONFIG_SETTING_NAME,
 	        NM_SETTING_IP6_CONFIG_METHOD);
 
+	g_free (unmanaged);
 	g_free (keyfile);
 	g_free (routefile);
 	g_free (route6file);
@@ -2452,7 +2641,7 @@ test_read_onboot_no (void)
 	ASSERT (nm_connection_verify (connection, &error),
 	        "onboot-no-verify", "failed to verify %s: %s", TEST_IFCFG_ONBOOT_NO, error->message);
 
-	ASSERT (unmanaged == FALSE,
+	ASSERT (unmanaged == NULL,
 	        "onboot-no-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_ONBOOT_NO);
 
 	/* ===== CONNECTION SETTING ===== */
@@ -2470,6 +2659,10 @@ test_read_onboot_no (void)
 	        NM_SETTING_CONNECTION_SETTING_NAME,
 	        NM_SETTING_CONNECTION_AUTOCONNECT);
 
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 }
 
@@ -2513,7 +2706,7 @@ test_read_wired_8021x_peap_mschapv2 (void)
 	ASSERT (nm_connection_verify (connection, &error),
 	        "wired-8021x-peap-mschapv2-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2, error->message);
 
-	ASSERT (unmanaged == FALSE,
+	ASSERT (unmanaged == NULL,
 	        "wired-8021x-peap-mschapv2-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2);
 
 	/* ===== WIRED SETTING ===== */
@@ -2656,6 +2849,10 @@ test_read_wired_8021x_peap_mschapv2 (void)
 
 	g_object_unref (tmp_8021x);
 
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 }
 
@@ -2834,6 +3031,10 @@ test_read_wifi_open (void)
 	        NM_SETTING_IP4_CONFIG_SETTING_NAME,
 	        NM_SETTING_IP4_CONFIG_METHOD);
 
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 }
 
@@ -2912,6 +3113,10 @@ test_read_wifi_open_auto (void)
 	        NM_SETTING_WIRELESS_SETTING_NAME,
 	        NM_SETTING_WIRELESS_MODE);
 
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 }
 
@@ -2996,7 +3201,11 @@ test_read_wifi_open_ssid_hex (void)
 	        TEST_IFCFG_WIFI_OPEN_SSID_HEX,
 	        NM_SETTING_WIRELESS_SETTING_NAME,
 	        NM_SETTING_WIRELESS_SSID);
-	
+
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 }
 
@@ -3023,6 +3232,11 @@ test_read_wifi_open_ssid_bad (const char *file, const char *test)
 	                                   &ignore_error);
 	ASSERT (connection == NULL, test, "unexpected success reading %s", file);
 	g_clear_error (&error);
+
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 }
 
 #define TEST_IFCFG_WIFI_OPEN_SSID_QUOTED TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-open-ssid-quoted"
@@ -3106,7 +3320,11 @@ test_read_wifi_open_ssid_quoted (void)
 	        TEST_IFCFG_WIFI_OPEN_SSID_QUOTED,
 	        NM_SETTING_WIRELESS_SETTING_NAME,
 	        NM_SETTING_WIRELESS_SSID);
-	
+
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 }
 
@@ -3380,6 +3598,10 @@ test_read_wifi_wep (void)
 	        NM_SETTING_IP4_CONFIG_SETTING_NAME,
 	        NM_SETTING_IP4_CONFIG_METHOD);
 
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 }
 
@@ -3644,6 +3866,10 @@ test_read_wifi_wep_adhoc (void)
 	        NM_SETTING_IP4_CONFIG_SETTING_NAME,
 	        NM_SETTING_IP4_CONFIG_DNS);
 
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 }
 
@@ -3780,6 +4006,10 @@ test_read_wifi_wep_passphrase (void)
 	        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
 	        NM_SETTING_WIRELESS_SECURITY_WEP_KEY3);
 
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 }
 
@@ -3913,6 +4143,10 @@ test_read_wifi_wep_40_ascii (void)
 	        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
 	        NM_SETTING_WIRELESS_SECURITY_WEP_KEY3);
 
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 }
 
@@ -4046,6 +4280,10 @@ test_read_wifi_wep_104_ascii (void)
 	        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
 	        NM_SETTING_WIRELESS_SECURITY_WEP_KEY3);
 
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 }
 
@@ -4182,6 +4420,10 @@ test_read_wifi_leap (void)
 	        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
 	        NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD);
 
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 }
 
@@ -4497,6 +4739,10 @@ test_read_wifi_wpa_psk (void)
 	        NM_SETTING_IP4_CONFIG_SETTING_NAME,
 	        NM_SETTING_IP4_CONFIG_METHOD);
 
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 }
 
@@ -4598,6 +4844,10 @@ test_read_wifi_wpa_psk_unquoted (void)
 	        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
 	        NM_SETTING_WIRELESS_SECURITY_PSK);
 
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 }
 
@@ -4631,6 +4881,11 @@ test_read_wifi_wpa_psk_unquoted2 (void)
 	ASSERT (connection == NULL,
 	        "wifi-wpa-psk-unquoted-read", "unexpected success reading %s", TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED2);
 	g_clear_error (&error);
+
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 }
 
 #define TEST_IFCFG_WIFI_WPA_PSK_ADHOC TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wpa-psk-adhoc"
@@ -4818,6 +5073,10 @@ test_read_wifi_wpa_psk_adhoc (void)
 	        NM_SETTING_IP4_CONFIG_SETTING_NAME,
 	        NM_SETTING_IP4_CONFIG_METHOD);
 
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 }
 
@@ -4970,6 +5229,10 @@ test_read_wifi_wpa_psk_hex (void)
 	        NM_SETTING_IP4_CONFIG_SETTING_NAME,
 	        NM_SETTING_IP4_CONFIG_METHOD);
 
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 }
 
@@ -5011,7 +5274,7 @@ test_read_wifi_wpa_eap_tls (void)
 	ASSERT (nm_connection_verify (connection, &error),
 	        "wifi-wpa-eap-tls-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_WPA_EAP_TLS, error->message);
 
-	ASSERT (unmanaged == FALSE,
+	ASSERT (unmanaged == NULL,
 	        "wifi-wpa-eap-tls-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIFI_WPA_EAP_TLS);
 
 	/* ===== WIRELESS SETTING ===== */
@@ -5117,6 +5380,10 @@ test_read_wifi_wpa_eap_tls (void)
 	                    "wifi-wpa-eap-tls-verify-8021x",
 	                    NM_SETTING_802_1X_PRIVATE_KEY);
 
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 }
 
@@ -5157,7 +5424,7 @@ test_read_wifi_wpa_eap_ttls_tls (void)
 	ASSERT (nm_connection_verify (connection, &error),
 	        "wifi-wpa-eap-ttls-tls-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS, error->message);
 
-	ASSERT (unmanaged == FALSE,
+	ASSERT (unmanaged == NULL,
 	        "wifi-wpa-eap-ttls-tls-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS);
 
 	/* ===== WIRELESS SETTING ===== */
@@ -5285,6 +5552,10 @@ test_read_wifi_wpa_eap_ttls_tls (void)
 	        NM_SETTING_802_1X_SETTING_NAME,
 	        NM_SETTING_802_1X_IDENTITY);
 
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 }
 
@@ -5326,7 +5597,7 @@ test_read_wifi_wep_eap_ttls_chap (void)
 	ASSERT (nm_connection_verify (connection, &error),
 	        "wifi-wep-eap-ttls-chap-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP, error->message);
 
-	ASSERT (unmanaged == FALSE,
+	ASSERT (unmanaged == NULL,
 	        "wifi-wep-eap-ttls-chap-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP);
 
 	/* ===== WIRELESS SETTING ===== */
@@ -5446,6 +5717,10 @@ test_read_wifi_wep_eap_ttls_chap (void)
 	        NM_SETTING_802_1X_SETTING_NAME,
 	        NM_SETTING_802_1X_PASSWORD);
 
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 }
 
@@ -5488,7 +5763,7 @@ test_read_wired_qeth_static (void)
 	ASSERT (nm_connection_verify (connection, &error),
 	        "wired-qeth-static-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_QETH_STATIC, error->message);
 
-	ASSERT (unmanaged == FALSE,
+	ASSERT (unmanaged == NULL,
 	        "wired-qeth-static-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIRED_QETH_STATIC);
 
 	/* ===== CONNECTION SETTING ===== */
@@ -5618,6 +5893,83 @@ test_read_wired_qeth_static (void)
 	        NM_SETTING_IP4_CONFIG_SETTING_NAME,
 	        NM_SETTING_IP4_CONFIG_METHOD);
 
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
+	g_object_unref (connection);
+}
+
+#define TEST_IFCFG_WIRED_CTC_STATIC TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-ctc-static"
+
+static void
+test_read_wired_ctc_static (void)
+{
+	NMConnection *connection;
+	NMSettingConnection *s_con;
+	NMSettingWired *s_wired;
+	char *unmanaged = NULL;
+	char *keyfile = NULL;
+	char *routefile = NULL;
+	char *route6file = NULL;
+	gboolean ignore_error = FALSE;
+	GError *error = NULL;
+	const char *tmp;
+	const char *expected_id = "System test-wired-ctc-static";
+	const char *expected_channel0 = "0.0.1b00";
+	const char *expected_channel1 = "0.0.1b01";
+	const GPtrArray *subchannels;
+	gboolean success;
+
+	connection = connection_from_file (TEST_IFCFG_WIRED_CTC_STATIC,
+	                                   NULL,
+	                                   TYPE_ETHERNET,
+	                                   NULL,
+	                                   &unmanaged,
+	                                   &keyfile,
+	                                   &routefile,
+	                                   &route6file,
+	                                   &error,
+	                                   &ignore_error);
+	g_assert_no_error (error);
+	g_assert (connection);
+
+	success = nm_connection_verify (connection, &error);
+	g_assert_no_error (error);
+	g_assert (success);
+	g_assert (unmanaged == NULL);
+
+	/* ===== CONNECTION SETTING ===== */
+	s_con = (NMSettingConnection *) nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION);
+	g_assert (s_con != NULL);
+	g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, expected_id);
+
+	/* ===== WIRED SETTING ===== */
+	s_wired = (NMSettingWired *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED);
+	g_assert (s_wired != NULL);
+
+	g_assert (nm_setting_wired_get_mac_address (s_wired) == NULL);
+
+	/* Subchannels */
+	subchannels = nm_setting_wired_get_s390_subchannels (s_wired);
+	g_assert (subchannels != NULL);
+	g_assert_cmpint (subchannels->len, ==, 2);
+
+	g_assert_cmpstr (g_ptr_array_index (subchannels, 0), ==, expected_channel0);
+	g_assert_cmpstr (g_ptr_array_index (subchannels, 1), ==, expected_channel1);
+
+	/* Nettype */
+	g_assert_cmpstr (nm_setting_wired_get_s390_nettype (s_wired), ==, "ctc");
+
+	/* port name */
+	tmp = nm_setting_wired_get_s390_option_by_key (s_wired, "ctcprot");
+	g_assert (tmp != NULL);
+	g_assert_cmpstr (tmp, ==, "0");
+
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 }
 
@@ -5848,6 +6200,7 @@ test_write_wired_static (void)
 		unlink (route6file);
 
 	g_free (testfile);
+	g_free (unmanaged);
 	g_free (keyfile);
 	g_free (routefile);
 	g_free (route6file);
@@ -5966,6 +6319,10 @@ test_write_wired_dhcp (void)
 	        "wired-dhcp-write", "written and re-read connection weren't the same.");
 
 	g_free (testfile);
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 	g_object_unref (reread);
 }
@@ -6103,6 +6460,7 @@ test_write_wired_static_ip6_only (void)
 		unlink (route6file);
 
 	g_free (testfile);
+	g_free (unmanaged);
 	g_free (keyfile);
 	g_free (routefile);
 	g_free (route6file);
@@ -6247,6 +6605,7 @@ test_read_write_static_routes_legacy (void)
 	        "read-write-static-routes-legacy-write", "written and re-read connection weren't the same.");
 
 	g_free (testfile);
+	g_free (unmanaged);
 	g_free (keyfile);
 	g_free (keyfile2);
 	g_free (routefile);
@@ -6428,6 +6787,7 @@ test_write_wired_static_routes (void)
 	        "wired-static-routes-write", "written and re-read connection weren't the same.");
 
 	g_free (testfile);
+	g_free (unmanaged);
 	g_free (keyfile);
 	g_free (routefile);
 	g_free (route6file);
@@ -6569,6 +6929,10 @@ test_write_wired_dhcp_8021x_peap_mschapv2 (void)
 	        "wired-dhcp-8021x-peap-mschapv2write", "written and re-read connection weren't the same.");
 
 	g_free (testfile);
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 	g_object_unref (reread);
 }
@@ -6708,6 +7072,7 @@ test_write_wifi_open (void)
 	ASSERT (strncmp (tmp, "\"\"", 2) != 0,
 	        "wifi-open-write-reread", "unexpected ESSID double-quote in %s", testfile);
 
+	g_free (tmp);
 	svCloseFile (ifcfg);
 
 	unlink (testfile);
@@ -6722,6 +7087,10 @@ test_write_wifi_open (void)
 	        "wifi-open-write", "written and re-read connection weren't the same.");
 
 	g_free (testfile);
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 	g_object_unref (reread);
 }
@@ -6841,6 +7210,10 @@ test_write_wifi_open_hex_ssid (void)
 	        "wifi-open-hex-ssid-write", "written and re-read connection weren't the same.");
 
 	g_free (testfile);
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 	g_object_unref (reread);
 }
@@ -6992,6 +7365,10 @@ test_write_wifi_wep (void)
 	        "wifi-wep-write", "written and re-read connection weren't the same.");
 
 	g_free (testfile);
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 	g_object_unref (reread);
 }
@@ -7151,6 +7528,10 @@ test_write_wifi_wep_adhoc (void)
 	        "wifi-wep-adhoc-write", "written and re-read connection weren't the same.");
 
 	g_free (testfile);
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 	g_object_unref (reread);
 }
@@ -7300,6 +7681,10 @@ test_write_wifi_wep_passphrase (void)
 	        "wifi-wep-passphrase-write", "written and re-read connection weren't the same.");
 
 	g_free (testfile);
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 	g_object_unref (reread);
 }
@@ -7451,6 +7836,10 @@ test_write_wifi_wep_40_ascii (void)
 	        "wifi-wep-40-ascii-write", "written and re-read connection weren't the same.");
 
 	g_free (testfile);
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 	g_object_unref (reread);
 }
@@ -7602,6 +7991,10 @@ test_write_wifi_wep_104_ascii (void)
 	        "wifi-wep-104-ascii-write", "written and re-read connection weren't the same.");
 
 	g_free (testfile);
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 	g_object_unref (reread);
 }
@@ -7750,6 +8143,10 @@ test_write_wifi_leap (void)
 	        "wifi-leap-write", "written and re-read connection weren't the same.");
 
 	g_free (testfile);
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 	g_object_unref (reread);
 }
@@ -7911,6 +8308,10 @@ test_write_wifi_wpa_psk (const char *name,
 	        test_name, "written and re-read connection weren't the same.");
 
 	g_free (testfile);
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 	g_object_unref (reread);
 }
@@ -8068,6 +8469,10 @@ test_write_wifi_wpa_psk_adhoc (void)
 	        "wifi-wpa-psk-adhoc-write", "written and re-read connection weren't the same.");
 
 	g_free (testfile);
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 	g_object_unref (reread);
 }
@@ -8245,6 +8650,10 @@ test_write_wifi_wpa_eap_tls (void)
 	        "wifi-wpa-eap-tls-write", "written and re-read connection weren't the same.");
 
 	g_free (testfile);
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 	g_object_unref (reread);
 }
@@ -8440,6 +8849,10 @@ test_write_wifi_wpa_eap_ttls_tls (void)
 	        "wifi-wpa-eap-ttls-tls-write", "written and re-read connection weren't the same.");
 
 	g_free (testfile);
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 	g_object_unref (reread);
 }
@@ -8607,10 +9020,202 @@ test_write_wifi_wpa_eap_ttls_mschapv2 (void)
 	        "wifi-wpa-eap-ttls-mschapv2-write", "written and re-read connection weren't the same.");
 
 	g_free (testfile);
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 	g_object_unref (reread);
 }
 
+static void
+test_write_wifi_wpa_then_open (void)
+{
+	NMConnection *connection;
+	NMConnection *reread;
+	NMSettingConnection *s_con;
+	NMSettingWireless *s_wifi;
+	NMSettingWirelessSecurity *s_wsec;
+	NMSettingIP4Config *s_ip4;
+	NMSettingIP6Config *s_ip6;
+	char *uuid;
+	gboolean success;
+	GError *error = NULL;
+	char *testfile = NULL;
+	char *unmanaged = NULL;
+	char *keyfile = NULL;
+	char *routefile = NULL;
+	char *route6file = NULL;
+	gboolean ignore_error = FALSE;
+	GByteArray *ssid;
+	const unsigned char ssid_data[] = "blahblah";
+
+	/* Test that writing out a WPA config then changing that to an open
+	 * config doesn't leave various WPA-related keys lying around in the ifcfg.
+	 */
+
+	connection = nm_connection_new ();
+	g_assert (connection);
+
+	/* Connection setting */
+	s_con = (NMSettingConnection *) nm_setting_connection_new ();
+	g_assert (s_con);
+	nm_connection_add_setting (connection, NM_SETTING (s_con));
+
+	uuid = nm_utils_uuid_generate ();
+	g_object_set (s_con,
+	              NM_SETTING_CONNECTION_ID, "random wifi connection",
+	              NM_SETTING_CONNECTION_UUID, uuid,
+	              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
+	              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
+	              NULL);
+	g_free (uuid);
+
+	/* Wifi setting */
+	s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
+	g_assert (s_wifi);
+	nm_connection_add_setting (connection, NM_SETTING (s_wifi));
+
+	ssid = g_byte_array_sized_new (sizeof (ssid_data));
+	g_byte_array_append (ssid, ssid_data, sizeof (ssid_data));
+
+	g_object_set (s_wifi,
+	              NM_SETTING_WIRELESS_SSID, ssid,
+	              NM_SETTING_WIRELESS_MODE, "infrastructure",
+	              NM_SETTING_WIRELESS_SEC, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+	              NULL);
+
+	g_byte_array_free (ssid, TRUE);
+
+	/* Wireless security setting */
+	s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
+	g_assert (s_wsec);
+	nm_connection_add_setting (connection, NM_SETTING (s_wsec));
+
+	g_object_set (s_wsec,
+	              NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-psk",
+	              NM_SETTING_WIRELESS_SECURITY_PSK, "some cool PSK",
+	              NULL);
+
+	nm_setting_wireless_security_add_proto (s_wsec, "wpa");
+	nm_setting_wireless_security_add_pairwise (s_wsec, "tkip");
+	nm_setting_wireless_security_add_group (s_wsec, "tkip");
+
+	nm_setting_wireless_security_add_proto (s_wsec, "rsn");
+	nm_setting_wireless_security_add_pairwise (s_wsec, "ccmp");
+	nm_setting_wireless_security_add_group (s_wsec, "ccmp");
+
+	/* IP4 setting */
+	s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+	g_assert (s_ip4);
+	nm_connection_add_setting (connection, NM_SETTING (s_ip4));
+
+	g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
+
+	/* IP6 setting */
+	s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+	g_assert (s_ip6);
+	nm_connection_add_setting (connection, NM_SETTING (s_ip6));
+
+	g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL);
+
+	success = nm_connection_verify (connection, &error);
+	g_assert_no_error (error);
+	g_assert (success);
+
+	/* Save the ifcfg */
+	success = writer_new_connection (connection,
+	                                 TEST_SCRATCH_DIR "/network-scripts/",
+	                                 &testfile,
+	                                 &error);
+	g_assert_no_error (error);
+	g_assert (success);
+	g_assert (testfile);
+
+	/* re-read the connection for comparison */
+	reread = connection_from_file (testfile,
+	                               NULL,
+	                               TYPE_WIRELESS,
+	                               NULL,
+	                               &unmanaged,
+	                               &keyfile,
+	                               &routefile,
+	                               &route6file,
+	                               &error,
+	                               &ignore_error);
+	g_assert_no_error (error);
+	g_assert (reread);
+
+	success = nm_connection_verify (reread, &error);
+	g_assert_no_error (error);
+
+	success = nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT);
+	g_assert (success);
+
+	g_free (unmanaged);
+	unmanaged = NULL;
+	g_free (routefile);
+	routefile = NULL;
+	g_free (route6file);
+	route6file = NULL;
+	g_object_unref (reread);
+
+	/* Now change the connection to open and recheck */
+	s_wifi = (NMSettingWireless *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS);
+	g_assert (s_wifi);
+	g_object_set (s_wifi, NM_SETTING_WIRELESS_SEC, NULL, NULL);
+	nm_connection_remove_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
+
+	/* Write it back out */
+	success = writer_update_connection (connection,
+	                                    TEST_SCRATCH_DIR "/network-scripts/",
+	                                    testfile,
+	                                    keyfile,
+	                                    &error);
+	g_assert_no_error (error);
+	g_assert (success);
+
+	unlink (keyfile);
+	g_free (keyfile);
+	keyfile = NULL;
+
+	/* re-read it for comparison */
+	reread = connection_from_file (testfile,
+	                               NULL,
+	                               TYPE_WIRELESS,
+	                               NULL,
+	                               &unmanaged,
+	                               &keyfile,
+	                               &routefile,
+	                               &route6file,
+	                               &error,
+	                               &ignore_error);
+	unlink (testfile);
+	g_assert_no_error (error);
+
+	g_assert (reread);
+
+	/* No keyfile since it's an open connection this time */
+	g_assert (keyfile);
+	g_assert (g_file_test (keyfile, G_FILE_TEST_EXISTS) == FALSE);
+
+	success = nm_connection_verify (reread, &error);
+	g_assert_no_error (error);
+
+	success = nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT);
+	g_assert (success);
+
+	unlink (testfile);
+	g_free (testfile);
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
+	g_object_unref (reread);
+
+	g_object_unref (connection);
+}
+
 #define TEST_IFCFG_IBFT_DHCP TEST_IFCFG_DIR"/network-scripts/ifcfg-test-ibft-dhcp"
 
 static void
@@ -8743,6 +9348,10 @@ test_read_ibft_dhcp (void)
 	        NM_SETTING_IP4_CONFIG_SETTING_NAME,
 	        NM_SETTING_IP4_CONFIG_METHOD);
 
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 }
 
@@ -8955,6 +9564,10 @@ test_read_ibft_static (void)
 	        NM_SETTING_IP4_CONFIG_SETTING_NAME,
 	        NM_SETTING_IP4_CONFIG_ADDRESSES);
 
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 	g_object_unref (connection);
 }
 
@@ -8981,6 +9594,11 @@ test_read_ibft_malformed (const char *name, const char *iscsiadm_path)
 	                                   &ignore_error);
 	ASSERT (connection == NULL,
 	        name, "unexpectedly able to read %s", TEST_IFCFG_IBFT_STATIC);
+
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 }
 
 static void
@@ -9110,6 +9728,7 @@ test_write_wired_qeth_dhcp (void)
 		unlink (route6file);
 
 	g_free (testfile);
+	g_free (unmanaged);
 	g_free (keyfile);
 	g_free (routefile);
 	g_free (route6file);
@@ -9118,6 +9737,135 @@ test_write_wired_qeth_dhcp (void)
 }
 
 static void
+test_write_wired_ctc_dhcp (void)
+{
+	NMConnection *connection;
+	NMConnection *reread;
+	NMSettingConnection *s_con;
+	NMSettingWired *s_wired;
+	NMSettingIP4Config *s_ip4;
+	NMSettingIP6Config *s_ip6;
+	char *uuid;
+	GPtrArray *subchans;
+	gboolean success;
+	GError *error = NULL;
+	char *testfile = NULL;
+	char *unmanaged = NULL;
+	char *keyfile = NULL;
+	char *routefile = NULL;
+	char *route6file = NULL;
+	gboolean ignore_error = FALSE;
+	shvarFile *ifcfg;
+	char *tmp;
+
+	connection = nm_connection_new ();
+	g_assert (connection);
+
+	/* Connection setting */
+	s_con = (NMSettingConnection *) nm_setting_connection_new ();
+	g_assert (s_con);
+	nm_connection_add_setting (connection, NM_SETTING (s_con));
+
+	uuid = nm_utils_uuid_generate ();
+	g_object_set (s_con,
+	              NM_SETTING_CONNECTION_ID, "Test Write Wired ctc Static",
+	              NM_SETTING_CONNECTION_UUID, uuid,
+	              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
+	              NULL);
+	g_free (uuid);
+
+	/* Wired setting */
+	s_wired = (NMSettingWired *) nm_setting_wired_new ();
+	g_assert (s_wired);
+	nm_connection_add_setting (connection, NM_SETTING (s_wired));
+
+	subchans = g_ptr_array_sized_new (2);
+	g_ptr_array_add (subchans, "0.0.600");
+	g_ptr_array_add (subchans, "0.0.601");
+	g_object_set (s_wired,
+	              NM_SETTING_WIRED_S390_SUBCHANNELS, subchans,
+	              NM_SETTING_WIRED_S390_NETTYPE, "ctc",
+	              NULL);
+	g_ptr_array_free (subchans, TRUE);
+	nm_setting_wired_add_s390_option (s_wired, "ctcprot", "0");
+
+	/* IP4 setting */
+	s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+	g_assert (s_ip4);
+	nm_connection_add_setting (connection, NM_SETTING (s_ip4));
+	g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
+
+	/* IP6 setting */
+	s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+	g_assert (s_ip6);
+	nm_connection_add_setting (connection, NM_SETTING (s_ip6));
+	g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL);
+
+	/* Verify */
+	success = nm_connection_verify (connection, &error);
+	g_assert_no_error (error);
+	g_assert (success);
+
+	/* Save the ifcfg */
+	success = writer_new_connection (connection,
+	                                 TEST_SCRATCH_DIR "/network-scripts/",
+	                                 &testfile,
+	                                 &error);
+	g_assert_no_error (error);
+	g_assert (success);
+	g_assert (testfile != NULL);
+
+	/* Ensure the CTCPROT item gets written out as it's own option */
+	ifcfg = svNewFile (testfile);
+	g_assert (ifcfg);
+
+	tmp = svGetValue (ifcfg, "CTCPROT", TRUE);
+	g_assert (tmp);
+	g_assert_cmpstr (tmp, ==, "0");
+	g_free (tmp);
+
+	/* And that it's not in the generic OPTIONS string */
+	tmp = svGetValue (ifcfg, "OPTIONS", TRUE);
+	g_assert (tmp == NULL);
+	g_free (tmp);
+
+	svCloseFile (ifcfg);
+
+	/* re-read the connection for comparison */
+	reread = connection_from_file (testfile,
+	                               NULL,
+	                               TYPE_ETHERNET,
+	                               NULL,
+	                               &unmanaged,
+	                               &keyfile,
+	                               &routefile,
+	                               &route6file,
+	                               &error,
+	                               &ignore_error);
+	unlink (testfile);
+
+	g_assert (reread);
+	success = nm_connection_verify (reread, &error);
+	g_assert_no_error (error);
+	g_assert (success);
+
+	success = nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT);
+	g_assert (success);
+
+	if (route6file)
+		unlink (route6file);
+
+	g_free (testfile);
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
+	g_object_unref (connection);
+	g_object_unref (reread);
+}
+
+
+static void
 test_write_wired_pppoe (void)
 {
 	NMConnection *connection;
@@ -9404,6 +10152,11 @@ test_read_bridge_main (void)
 	                                   &ignore_error);
 	ASSERT (connection == NULL,
 	        "bridge-main-read", "unexpected success reading %s", TEST_IFCFG_BRIDGE_MAIN);
+
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 }
 
 #define TEST_IFCFG_BRIDGE_COMPONENT TEST_IFCFG_DIR"/network-scripts/ifcfg-test-bridge-component"
@@ -9438,8 +10191,11 @@ test_read_bridge_component (void)
 	ASSERT (g_strcmp0 (unmanaged, "mac:00:22:15:59:62:97") == 0,
 	        "bridge-component-read", "unexpected unmanaged spec from %s", TEST_IFCFG_BRIDGE_COMPONENT);
 
-	g_object_unref (connection);
 	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
+	g_object_unref (connection);
 }
 
 #define TEST_IFCFG_VLAN_INTERFACE TEST_IFCFG_DIR"/network-scripts/ifcfg-test-vlan-interface"
@@ -9467,6 +10223,11 @@ test_read_vlan_interface (void)
 	                                   &ignore_error);
 	ASSERT (connection == NULL,
 	        "vlan-interface-read", "unexpected success reading %s", TEST_IFCFG_VLAN_INTERFACE);
+
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
 }
 
 #define TEST_IFCFG_WIFI_OPEN_SSID_BAD_HEX TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-open-ssid-bad-hex"
@@ -9477,6 +10238,11 @@ test_read_vlan_interface (void)
 #define TEST_IFCFG_WIRED_STATIC           TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-static"
 #define TEST_IFCFG_WIRED_STATIC_BOOTPROTO TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-static-bootproto"
 
+#define TEST_IFCFG_WIRED_IPV4_MANUAL_1 TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-ipv4-manual-1"
+#define TEST_IFCFG_WIRED_IPV4_MANUAL_2 TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-ipv4-manual-2"
+#define TEST_IFCFG_WIRED_IPV4_MANUAL_3 TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-ipv4-manual-3"
+#define TEST_IFCFG_WIRED_IPV4_MANUAL_4 TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-ipv4-manual-4"
+
 #define DEFAULT_HEX_PSK "7d308b11df1b4243b0f78e5f3fc68cdbb9a264ed0edf4c188edf329ff5b467f0"
 
 int main (int argc, char **argv)
@@ -9504,6 +10270,10 @@ int main (int argc, char **argv)
 	test_read_wired_defroute_no_gatewaydev_yes ();
 	test_read_wired_static_routes ();
 	test_read_wired_static_routes_legacy ();
+	test_read_wired_ipv4_manual (TEST_IFCFG_WIRED_IPV4_MANUAL_1, "System test-wired-ipv4-manual-1");
+	test_read_wired_ipv4_manual (TEST_IFCFG_WIRED_IPV4_MANUAL_2, "System test-wired-ipv4-manual-2");
+	test_read_wired_ipv4_manual (TEST_IFCFG_WIRED_IPV4_MANUAL_3, "System test-wired-ipv4-manual-3");
+	test_read_wired_ipv4_manual (TEST_IFCFG_WIRED_IPV4_MANUAL_4, "System test-wired-ipv4-manual-4");
 	test_read_wired_ipv6_manual ();
 	test_read_wired_ipv6_only ();
 	test_read_wired_dhcp6_only ();
@@ -9531,6 +10301,7 @@ int main (int argc, char **argv)
 	test_read_wifi_wpa_eap_ttls_tls ();
 	test_read_wifi_wep_eap_ttls_chap ();
 	test_read_wired_qeth_static ();
+	test_read_wired_ctc_static ();
 
 	test_write_wired_static ();
 	test_write_wired_static_ip6_only ();
@@ -9580,7 +10351,9 @@ int main (int argc, char **argv)
 	test_write_wifi_wpa_eap_tls ();
 	test_write_wifi_wpa_eap_ttls_tls ();
 	test_write_wifi_wpa_eap_ttls_mschapv2 ();
+	test_write_wifi_wpa_then_open ();
 	test_write_wired_qeth_dhcp ();
+	test_write_wired_ctc_dhcp ();
 
 	/* iSCSI / ibft */
 	test_read_ibft_dhcp ();
diff --git a/system-settings/plugins/ifcfg-rh/writer.c b/system-settings/plugins/ifcfg-rh/writer.c
index 456fa21c..c6c25ee5 100644
--- a/system-settings/plugins/ifcfg-rh/writer.c
+++ b/system-settings/plugins/ifcfg-rh/writer.c
@@ -316,6 +316,7 @@ write_object (NMSetting8021x *s_8021x,
 		success = write_secret_file (new_file, (const char *) blob->data, blob->len, &write_error);
 		if (success) {
 			svSetValue (ifcfg, objtype->ifcfg_key, new_file, FALSE);
+			g_free (new_file);
 			return TRUE;
 		} else {
 			g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
@@ -830,6 +831,38 @@ write_wireless_setting (NMConnection *connection,
 	if (nm_setting_wireless_get_security (s_wireless)) {
 		if (!write_wireless_security_setting (connection, ifcfg, adhoc, no_8021x, error))
 			return FALSE;
+	} else {
+		char *keys_path;
+
+		 /* Clear out wifi security keys */
+		 svSetValue (ifcfg, "KEY_MGMT", NULL, FALSE);
+		 svSetValue (ifcfg, "IEEE_8021X_IDENTITY", NULL, FALSE);
+		 set_secret (ifcfg, "IEEE_8021X_PASSWORD", NULL, FALSE);
+		 svSetValue (ifcfg, "SECURITYMODE", NULL, FALSE);
+
+		 /* Clear existing keys */
+		 set_secret (ifcfg, "KEY", NULL, FALSE);
+		 for (i = 0; i < 4; i++) {
+			  tmp = g_strdup_printf ("KEY_PASSPHRASE%d", i + 1);
+			  set_secret (ifcfg, tmp, NULL, FALSE);
+			  g_free (tmp);
+	
+			  tmp = g_strdup_printf ("KEY%d", i + 1);
+			  set_secret (ifcfg, tmp, NULL, FALSE);
+			  g_free (tmp);
+		 }
+
+		 svSetValue (ifcfg, "DEFAULTKEY", NULL, FALSE);
+		 svSetValue (ifcfg, "WPA_ALLOW_WPA", NULL, FALSE);
+		 svSetValue (ifcfg, "WPA_ALLOW_WPA2", NULL, FALSE);
+		 svSetValue (ifcfg, "CIPHER_PAIRWISE", NULL, FALSE);
+		 svSetValue (ifcfg, "CIPHER_GROUP", NULL, FALSE);
+		 set_secret (ifcfg, "WPA_PSK", NULL, FALSE);
+
+		/* Kill any old keys file */
+		keys_path = utils_get_keys_path (ifcfg->fileName);
+		(void) unlink (keys_path);
+		g_free (keys_path);
 	}
 
 	svSetValue (ifcfg, "TYPE", TYPE_WIRELESS, FALSE);
@@ -843,7 +876,7 @@ write_wired_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
 	NMSettingWired *s_wired;
 	const GByteArray *device_mac, *cloned_mac;
 	char *tmp;
-	const char *nettype, *portname, *s390_key, *s390_val;
+	const char *nettype, *portname, *ctcprot, *s390_key, *s390_val;
 	guint32 mtu, num_opts, i;
 	const GPtrArray *s390_subchannels;
 	GString *str;
@@ -910,6 +943,11 @@ write_wired_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
 	if (portname)
 		svSetValue (ifcfg, "PORTNAME", portname, FALSE);
 
+	svSetValue (ifcfg, "CTCPROT", NULL, FALSE);
+	ctcprot = nm_setting_wired_get_s390_option_by_key (s_wired, "ctcprot");
+	if (ctcprot)
+		svSetValue (ifcfg, "CTCPROT", ctcprot, FALSE);
+
 	svSetValue (ifcfg, "OPTIONS", NULL, FALSE);
 	num_opts = nm_setting_wired_get_num_s390_options (s_wired);
 	if (s390_subchannels && num_opts) {
@@ -918,7 +956,7 @@ write_wired_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
 			nm_setting_wired_get_s390_option (s_wired, i, &s390_key, &s390_val);
 
 			/* portname is handled separately */
-			if (!strcmp (s390_key, "portname"))
+			if (!strcmp (s390_key, "portname") || !strcmp (s390_key, "ctcprot"))
 				continue;
 
 			if (str->len)
@@ -1011,6 +1049,7 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
 	const char *value;
 	char *addr_key, *prefix_key, *netmask_key, *gw_key, *metric_key, *tmp;
 	char *route_path = NULL;
+	gint32 j;
 	guint32 i, num;
 	GString *searches;
 	gboolean success = FALSE;
@@ -1030,20 +1069,28 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
 
 		/* IPv4 disabled, clear IPv4 related parameters */
 		svSetValue (ifcfg, "BOOTPROTO", NULL, FALSE);
-		for (i = 0; i < 254; i++) {
-			if (i == 0) {
+		for (j = -1; j < 256; j++) {
+			if (j == -1) {
 				addr_key = g_strdup ("IPADDR");
 				prefix_key = g_strdup ("PREFIX");
+				netmask_key = g_strdup ("NETMASK");
 				gw_key = g_strdup ("GATEWAY");
 			} else {
-				addr_key = g_strdup_printf ("IPADDR%d", i + 1);
-				prefix_key = g_strdup_printf ("PREFIX%d", i + 1);
-				gw_key = g_strdup_printf ("GATEWAY%d", i + 1);
+				addr_key = g_strdup_printf ("IPADDR%d", j);
+				prefix_key = g_strdup_printf ("PREFIX%d", j);
+				netmask_key = g_strdup_printf ("NETMASK%d", j);
+				gw_key = g_strdup_printf ("GATEWAY%d", j);
 			}
 
 			svSetValue (ifcfg, addr_key, NULL, FALSE);
 			svSetValue (ifcfg, prefix_key, NULL, FALSE);
+			svSetValue (ifcfg, netmask_key, NULL, FALSE);
 			svSetValue (ifcfg, gw_key, NULL, FALSE);
+
+			g_free (addr_key);
+			g_free (prefix_key);
+			g_free (netmask_key);
+			g_free (gw_key);
 		}
 
 		route_path = utils_get_route_path (ifcfg->fileName);
@@ -1067,25 +1114,27 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
 	else if (!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_SHARED))
 		svSetValue (ifcfg, "BOOTPROTO", "shared", FALSE);
 
+	/* Write out IPADDR0 .. IPADDR255, PREFIX0 .. PREFIX255, GATEWAY0 .. GATEWAY255
+	 * Possible NETMASK<n> is removed only (it's obsolete) */
 	num = nm_setting_ip4_config_get_num_addresses (s_ip4);
-	for (i = 0; i < 254; i++) {
-		char buf[INET_ADDRSTRLEN + 1];
+	svSetValue (ifcfg, "IPADDR", NULL, FALSE);
+	svSetValue (ifcfg, "PREFIX", NULL, FALSE);
+	svSetValue (ifcfg, "NETMASK", NULL, FALSE);
+	svSetValue (ifcfg, "GATEWAY", NULL, FALSE);
+	for (i = 0; i < 256; i++) {
+		char buf[INET_ADDRSTRLEN];
 		NMIP4Address *addr;
 		guint32 ip;
 
-		if (i == 0) {
-			addr_key = g_strdup ("IPADDR");
-			prefix_key = g_strdup ("PREFIX");
-			gw_key = g_strdup ("GATEWAY");
-		} else {
-			addr_key = g_strdup_printf ("IPADDR%d", i + 1);
-			prefix_key = g_strdup_printf ("PREFIX%d", i + 1);
-			gw_key = g_strdup_printf ("GATEWAY%d", i + 1);
-		}
+		addr_key = g_strdup_printf ("IPADDR%d", i);
+		prefix_key = g_strdup_printf ("PREFIX%d", i);
+		netmask_key = g_strdup_printf ("NETMASK%d", i);
+		gw_key = g_strdup_printf ("GATEWAY%d", i);
 
 		if (i >= num) {
 			svSetValue (ifcfg, addr_key, NULL, FALSE);
 			svSetValue (ifcfg, prefix_key, NULL, FALSE);
+			svSetValue (ifcfg, netmask_key, NULL, FALSE);
 			svSetValue (ifcfg, gw_key, NULL, FALSE);
 		} else {
 			addr = nm_setting_ip4_config_get_address (s_ip4, i);
@@ -1110,6 +1159,7 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
 
 		g_free (addr_key);
 		g_free (prefix_key);
+		g_free (netmask_key);
 		g_free (gw_key);
 	}