summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am32
-rw-r--r--src/Makefile.in127
-rw-r--r--src/devices/adsl/Makefile.am1
-rw-r--r--src/devices/adsl/Makefile.in1
-rw-r--r--src/devices/bluetooth/Makefile.am1
-rw-r--r--src/devices/bluetooth/Makefile.in3
-rw-r--r--src/devices/nm-device-bond.c52
-rw-r--r--src/devices/nm-device-factory.c19
-rw-r--r--src/devices/nm-device.c166
-rw-r--r--src/devices/nm-device.h108
-rw-r--r--src/devices/nm-lldp-listener.c39
-rw-r--r--src/devices/team/Makefile.am1
-rw-r--r--src/devices/team/Makefile.in3
-rw-r--r--src/devices/tests/Makefile.am1
-rw-r--r--src/devices/tests/Makefile.in1
-rw-r--r--src/devices/tests/test-lldp.c11
-rw-r--r--src/devices/wifi/Makefile.am1
-rw-r--r--src/devices/wifi/Makefile.in1
-rw-r--r--src/devices/wifi/tests/Makefile.am1
-rw-r--r--src/devices/wifi/tests/Makefile.in1
-rw-r--r--src/devices/wwan/Makefile.am1
-rw-r--r--src/devices/wwan/Makefile.in1
-rw-r--r--src/dhcp-manager/Makefile.am1
-rw-r--r--src/dhcp-manager/Makefile.in1
-rw-r--r--src/dhcp-manager/tests/Makefile.am1
-rw-r--r--src/dhcp-manager/tests/Makefile.in1
-rw-r--r--src/dns-manager/nm-dns-manager.c38
-rw-r--r--src/dns-manager/nm-dns-manager.h2
-rw-r--r--src/dnsmasq-manager/tests/Makefile.am1
-rw-r--r--src/dnsmasq-manager/tests/Makefile.in1
-rw-r--r--src/nm-auth-manager.c2
-rw-r--r--src/nm-core-utils.c2
-rw-r--r--src/nm-enum-types.c8
-rw-r--r--src/nm-exported-object.c420
-rw-r--r--src/nm-exported-object.h1
-rw-r--r--src/nm-firewall-manager.c2
-rw-r--r--src/nm-firewall-manager.h2
-rw-r--r--src/nm-manager.c519
-rw-r--r--src/nm-manager.h10
-rw-r--r--src/nm-policy.c256
-rw-r--r--src/nm-policy.h3
-rw-r--r--src/platform/nm-linux-platform.c61
-rw-r--r--src/platform/nm-platform.c12
-rw-r--r--src/platform/nm-platform.h4
-rw-r--r--src/platform/tests/Makefile.am6
-rw-r--r--src/platform/tests/Makefile.in265
-rw-r--r--src/ppp-manager/Makefile.am1
-rw-r--r--src/ppp-manager/Makefile.in1
-rw-r--r--src/rdisc/nm-lndp-rdisc.c126
-rw-r--r--src/rdisc/nm-rdisc.c3
-rw-r--r--src/rdisc/tests/Makefile.am1
-rw-r--r--src/rdisc/tests/Makefile.in1
-rw-r--r--src/settings/nm-settings.c14
-rw-r--r--src/settings/plugins/ibft/Makefile.am1
-rw-r--r--src/settings/plugins/ibft/Makefile.in1
-rw-r--r--src/settings/plugins/ibft/tests/Makefile.am1
-rw-r--r--src/settings/plugins/ibft/tests/Makefile.in1
-rw-r--r--src/settings/plugins/ifcfg-rh/Makefile.am1
-rw-r--r--src/settings/plugins/ifcfg-rh/Makefile.in1
-rw-r--r--src/settings/plugins/ifcfg-rh/nm-ifcfg-connection.c1
-rw-r--r--src/settings/plugins/ifcfg-rh/nm-ifcfg-rh.xml50
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/Makefile.am1
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/Makefile.in1
-rw-r--r--src/settings/plugins/ifnet/Makefile.am1
-rw-r--r--src/settings/plugins/ifnet/Makefile.in1
-rw-r--r--src/settings/plugins/ifnet/tests/Makefile.am1
-rw-r--r--src/settings/plugins/ifnet/tests/Makefile.in1
-rw-r--r--src/settings/plugins/ifupdown/Makefile.am1
-rw-r--r--src/settings/plugins/ifupdown/Makefile.in1
-rw-r--r--src/settings/plugins/ifupdown/tests/Makefile.am1
-rw-r--r--src/settings/plugins/ifupdown/tests/Makefile.in1
-rw-r--r--src/settings/plugins/keyfile/Makefile.am1
-rw-r--r--src/settings/plugins/keyfile/Makefile.in1
-rw-r--r--src/settings/plugins/keyfile/tests/Makefile.am1
-rw-r--r--src/settings/plugins/keyfile/tests/Makefile.in1
-rw-r--r--src/supplicant-manager/tests/Makefile.am1
-rw-r--r--src/supplicant-manager/tests/Makefile.in1
-rw-r--r--src/systemd/src/basic/utf8.h1
-rw-r--r--src/systemd/src/libsystemd-network/dhcp-identifier.c2
-rw-r--r--src/systemd/src/libsystemd-network/dhcp-identifier.h41
-rw-r--r--src/systemd/src/libsystemd-network/dhcp6-protocol.h7
-rw-r--r--src/systemd/src/libsystemd-network/lldp-neighbor.c47
-rw-r--r--src/systemd/src/libsystemd-network/lldp.h102
-rw-r--r--src/systemd/src/libsystemd-network/network-internal.c29
-rw-r--r--src/systemd/src/libsystemd-network/network-internal.h4
-rw-r--r--src/systemd/src/libsystemd-network/sd-dhcp-client.c50
-rw-r--r--src/systemd/src/libsystemd-network/sd-dhcp6-client.c50
-rw-r--r--src/systemd/src/systemd/sd-dhcp-client.h2
-rw-r--r--src/systemd/src/systemd/sd-dhcp6-client.h5
-rw-r--r--src/systemd/src/systemd/sd-lldp.h81
-rw-r--r--src/tests/Makefile.am1
-rw-r--r--src/tests/Makefile.in1
-rw-r--r--src/tests/config/Makefile.am1
-rw-r--r--src/tests/config/Makefile.in1
94 files changed, 1543 insertions, 1293 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index aee7eae9..bf668d74 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -41,8 +41,7 @@ AM_CPPFLAGS =				\
 	-I$(top_srcdir)/callouts	\
 	-DPREFIX=\"$(prefix)\"          \
 	-DG_LOG_DOMAIN=\""NetworkManager"\" \
-	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE
+	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON
 
 # add each subdirectory that contains a libNM source file. $(sort) is being used
 # primarily for its side effect of removing duplicates.
@@ -148,7 +147,6 @@ libsystemd_nm_la_SOURCES = \
 	systemd/src/libsystemd-network/lldp-neighbor.h \
 	systemd/src/libsystemd-network/lldp-network.c \
 	systemd/src/libsystemd-network/lldp-network.h \
-	systemd/src/libsystemd-network/lldp.h \
 	systemd/src/libsystemd-network/network-internal.c \
 	systemd/src/libsystemd-network/network-internal.h \
 	systemd/src/libsystemd-network/sd-dhcp-client.c \
@@ -316,16 +314,16 @@ libNetworkManager_la_SOURCES = \
 	\
 	platform/nmp-netns.c \
 	platform/nmp-netns.h \
-	platform/nm-fake-platform.c \
-	platform/nm-fake-platform.h \
-	platform/nm-linux-platform.c \
-	platform/nm-linux-platform.h \
-	platform/nm-platform.c \
-	platform/nm-platform.h \
-	platform/nm-platform-utils.c \
-	platform/nm-platform-utils.h \
 	platform/nmp-object.c \
 	platform/nmp-object.h \
+	platform/nm-platform-utils.c \
+	platform/nm-platform-utils.h \
+	platform/nm-platform.c \
+	platform/nm-platform.h \
+	platform/nm-linux-platform.c \
+	platform/nm-linux-platform.h \
+	platform/nm-fake-platform.c \
+	platform/nm-fake-platform.h \
 	platform/wifi/wifi-utils-nl80211.c \
 	platform/wifi/wifi-utils-nl80211.h \
 	platform/wifi/wifi-utils-private.h \
@@ -542,16 +540,16 @@ libnm_iface_helper_la_SOURCES = \
 	dhcp-manager/nm-dhcp-manager.c \
 	dhcp-manager/nm-dhcp-manager.h \
 	\
-	platform/nm-linux-platform.c \
-	platform/nm-linux-platform.h \
-	platform/nm-platform.c \
-	platform/nm-platform.h \
-	platform/nm-platform-utils.c \
-	platform/nm-platform-utils.h \
 	platform/nmp-netns.c \
 	platform/nmp-netns.h \
 	platform/nmp-object.c \
 	platform/nmp-object.h \
+	platform/nm-platform-utils.c \
+	platform/nm-platform-utils.h \
+	platform/nm-platform.c \
+	platform/nm-platform.h \
+	platform/nm-linux-platform.c \
+	platform/nm-linux-platform.h \
 	platform/wifi/wifi-utils-nl80211.c \
 	platform/wifi/wifi-utils-nl80211.h \
 	platform/wifi/wifi-utils-private.h \
diff --git a/src/Makefile.in b/src/Makefile.in
index df113412..1c8821f8 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -203,12 +203,12 @@ am__libNetworkManager_la_SOURCES_DIST = devices/nm-device-bond.h \
 	dnsmasq-manager/nm-dnsmasq-manager.h \
 	dnsmasq-manager/nm-dnsmasq-utils.c \
 	dnsmasq-manager/nm-dnsmasq-utils.h platform/nmp-netns.c \
-	platform/nmp-netns.h platform/nm-fake-platform.c \
-	platform/nm-fake-platform.h platform/nm-linux-platform.c \
-	platform/nm-linux-platform.h platform/nm-platform.c \
-	platform/nm-platform.h platform/nm-platform-utils.c \
-	platform/nm-platform-utils.h platform/nmp-object.c \
-	platform/nmp-object.h platform/wifi/wifi-utils-nl80211.c \
+	platform/nmp-netns.h platform/nmp-object.c \
+	platform/nmp-object.h platform/nm-platform-utils.c \
+	platform/nm-platform-utils.h platform/nm-platform.c \
+	platform/nm-platform.h platform/nm-linux-platform.c \
+	platform/nm-linux-platform.h platform/nm-fake-platform.c \
+	platform/nm-fake-platform.h platform/wifi/wifi-utils-nl80211.c \
 	platform/wifi/wifi-utils-nl80211.h \
 	platform/wifi/wifi-utils-private.h platform/wifi/wifi-utils.c \
 	platform/wifi/wifi-utils.h rdisc/nm-fake-rdisc.c \
@@ -281,28 +281,27 @@ am_libNetworkManager_la_OBJECTS = $(am__objects_1) $(am__objects_1) \
 	nm-dhcp-listener.lo nm-dhcp-manager.lo nm-dns-dnsmasq.lo \
 	nm-dns-unbound.lo nm-dns-manager.lo nm-dns-plugin.lo \
 	nm-dns-utils.lo nm-dnsmasq-manager.lo nm-dnsmasq-utils.lo \
-	nmp-netns.lo nm-fake-platform.lo nm-linux-platform.lo \
-	nm-platform.lo nm-platform-utils.lo nmp-object.lo \
-	wifi-utils-nl80211.lo wifi-utils.lo nm-fake-rdisc.lo \
-	nm-lndp-rdisc.lo nm-rdisc.lo nm-ppp-manager.lo \
-	nm-agent-manager.lo nm-inotify-helper.lo nm-secret-agent.lo \
-	nm-settings-connection.lo nm-settings-plugin.lo nm-settings.lo \
-	nm-keyfile-connection.lo plugin.lo reader.lo utils.lo \
-	writer.lo nm-supplicant-config.lo nm-supplicant-interface.lo \
-	nm-supplicant-manager.lo nm-supplicant-settings-verify.lo \
-	nm-vpn-connection.lo nm-vpn-manager.lo \
-	nm-activation-request.lo nm-active-connection.lo \
-	nm-audit-manager.lo nm-bus-manager.lo nm-config.lo \
-	nm-config-data.lo nm-connection-provider.lo nm-connectivity.lo \
-	nm-dcb.lo nm-route-manager.lo nm-default-route-manager.lo \
-	nm-dhcp4-config.lo nm-dhcp6-config.lo nm-dispatcher.lo \
-	nm-enum-types.lo nm-exported-object.lo nm-firewall-manager.lo \
-	nm-ip4-config.lo nm-ip6-config.lo nm-logging.lo \
-	nm-auth-manager.lo nm-auth-subject.lo nm-auth-utils.lo \
-	nm-manager.lo nm-multi-index.lo nm-policy.lo \
-	nm-rfkill-manager.lo nm-session-monitor.lo nm-core-utils.lo \
-	NetworkManagerUtils.lo $(am__objects_2) $(am__objects_3) \
-	$(am__objects_4)
+	nmp-netns.lo nmp-object.lo nm-platform-utils.lo nm-platform.lo \
+	nm-linux-platform.lo nm-fake-platform.lo wifi-utils-nl80211.lo \
+	wifi-utils.lo nm-fake-rdisc.lo nm-lndp-rdisc.lo nm-rdisc.lo \
+	nm-ppp-manager.lo nm-agent-manager.lo nm-inotify-helper.lo \
+	nm-secret-agent.lo nm-settings-connection.lo \
+	nm-settings-plugin.lo nm-settings.lo nm-keyfile-connection.lo \
+	plugin.lo reader.lo utils.lo writer.lo nm-supplicant-config.lo \
+	nm-supplicant-interface.lo nm-supplicant-manager.lo \
+	nm-supplicant-settings-verify.lo nm-vpn-connection.lo \
+	nm-vpn-manager.lo nm-activation-request.lo \
+	nm-active-connection.lo nm-audit-manager.lo nm-bus-manager.lo \
+	nm-config.lo nm-config-data.lo nm-connection-provider.lo \
+	nm-connectivity.lo nm-dcb.lo nm-route-manager.lo \
+	nm-default-route-manager.lo nm-dhcp4-config.lo \
+	nm-dhcp6-config.lo nm-dispatcher.lo nm-enum-types.lo \
+	nm-exported-object.lo nm-firewall-manager.lo nm-ip4-config.lo \
+	nm-ip6-config.lo nm-logging.lo nm-auth-manager.lo \
+	nm-auth-subject.lo nm-auth-utils.lo nm-manager.lo \
+	nm-multi-index.lo nm-policy.lo nm-rfkill-manager.lo \
+	nm-session-monitor.lo nm-core-utils.lo NetworkManagerUtils.lo \
+	$(am__objects_2) $(am__objects_3) $(am__objects_4)
 libNetworkManager_la_OBJECTS = $(am_libNetworkManager_la_OBJECTS)
 libnm_iface_helper_la_DEPENDENCIES =  \
 	$(top_builddir)/libnm-core/libnm-core.la \
@@ -315,11 +314,11 @@ am__libnm_iface_helper_la_SOURCES_DIST =  \
 	dhcp-manager/nm-dhcp-client-logging.h \
 	dhcp-manager/nm-dhcp-utils.c dhcp-manager/nm-dhcp-utils.h \
 	dhcp-manager/nm-dhcp-manager.c dhcp-manager/nm-dhcp-manager.h \
-	platform/nm-linux-platform.c platform/nm-linux-platform.h \
-	platform/nm-platform.c platform/nm-platform.h \
-	platform/nm-platform-utils.c platform/nm-platform-utils.h \
 	platform/nmp-netns.c platform/nmp-netns.h \
 	platform/nmp-object.c platform/nmp-object.h \
+	platform/nm-platform-utils.c platform/nm-platform-utils.h \
+	platform/nm-platform.c platform/nm-platform.h \
+	platform/nm-linux-platform.c platform/nm-linux-platform.h \
 	platform/wifi/wifi-utils-nl80211.c \
 	platform/wifi/wifi-utils-nl80211.h \
 	platform/wifi/wifi-utils-private.h platform/wifi/wifi-utils.c \
@@ -335,8 +334,8 @@ am__libnm_iface_helper_la_SOURCES_DIST =  \
 	platform/wifi/wifi-utils-wext.c \
 	platform/wifi/wifi-utils-wext.h
 am_libnm_iface_helper_la_OBJECTS = nm-dhcp-client.lo nm-dhcp-utils.lo \
-	nm-dhcp-manager.lo nm-linux-platform.lo nm-platform.lo \
-	nm-platform-utils.lo nmp-netns.lo nmp-object.lo \
+	nm-dhcp-manager.lo nmp-netns.lo nmp-object.lo \
+	nm-platform-utils.lo nm-platform.lo nm-linux-platform.lo \
 	wifi-utils-nl80211.lo wifi-utils.lo nm-fake-rdisc.lo \
 	nm-lndp-rdisc.lo nm-rdisc.lo nm-route-manager.lo \
 	nm-exported-object.lo nm-ip4-config.lo nm-ip6-config.lo \
@@ -827,8 +826,7 @@ AM_CPPFLAGS = -I$(top_srcdir)/shared -I$(top_builddir)/shared \
 	-I$(top_builddir)/libnm-core -I$(top_srcdir)/callouts \
 	-DPREFIX=\"$(prefix)\" -DG_LOG_DOMAIN=\""NetworkManager"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE $(foreach \
-	d,$(sort $(dir \
+	$(foreach d,$(sort $(dir \
 	$(libNetworkManager_la_SOURCES))),-I$(top_srcdir)/src/$d) \
 	$(GLIB_CFLAGS) $(GUDEV_CFLAGS) $(LIBNL_CFLAGS) \
 	$(LIBNDP_CFLAGS) $(LIBSOUP_CFLAGS) $(SELINUX_CFLAGS) \
@@ -943,7 +941,6 @@ libsystemd_nm_la_SOURCES = \
 	systemd/src/libsystemd-network/lldp-neighbor.h \
 	systemd/src/libsystemd-network/lldp-network.c \
 	systemd/src/libsystemd-network/lldp-network.h \
-	systemd/src/libsystemd-network/lldp.h \
 	systemd/src/libsystemd-network/network-internal.c \
 	systemd/src/libsystemd-network/network-internal.h \
 	systemd/src/libsystemd-network/sd-dhcp-client.c \
@@ -1073,12 +1070,12 @@ libNetworkManager_la_SOURCES = $(nm_device_headers) \
 	dnsmasq-manager/nm-dnsmasq-manager.h \
 	dnsmasq-manager/nm-dnsmasq-utils.c \
 	dnsmasq-manager/nm-dnsmasq-utils.h platform/nmp-netns.c \
-	platform/nmp-netns.h platform/nm-fake-platform.c \
-	platform/nm-fake-platform.h platform/nm-linux-platform.c \
-	platform/nm-linux-platform.h platform/nm-platform.c \
-	platform/nm-platform.h platform/nm-platform-utils.c \
-	platform/nm-platform-utils.h platform/nmp-object.c \
-	platform/nmp-object.h platform/wifi/wifi-utils-nl80211.c \
+	platform/nmp-netns.h platform/nmp-object.c \
+	platform/nmp-object.h platform/nm-platform-utils.c \
+	platform/nm-platform-utils.h platform/nm-platform.c \
+	platform/nm-platform.h platform/nm-linux-platform.c \
+	platform/nm-linux-platform.h platform/nm-fake-platform.c \
+	platform/nm-fake-platform.h platform/wifi/wifi-utils-nl80211.c \
 	platform/wifi/wifi-utils-nl80211.h \
 	platform/wifi/wifi-utils-private.h platform/wifi/wifi-utils.c \
 	platform/wifi/wifi-utils.h rdisc/nm-fake-rdisc.c \
@@ -1165,11 +1162,11 @@ libnm_iface_helper_la_SOURCES = dhcp-manager/nm-dhcp-client.c \
 	dhcp-manager/nm-dhcp-client-logging.h \
 	dhcp-manager/nm-dhcp-utils.c dhcp-manager/nm-dhcp-utils.h \
 	dhcp-manager/nm-dhcp-manager.c dhcp-manager/nm-dhcp-manager.h \
-	platform/nm-linux-platform.c platform/nm-linux-platform.h \
-	platform/nm-platform.c platform/nm-platform.h \
-	platform/nm-platform-utils.c platform/nm-platform-utils.h \
 	platform/nmp-netns.c platform/nmp-netns.h \
 	platform/nmp-object.c platform/nmp-object.h \
+	platform/nm-platform-utils.c platform/nm-platform-utils.h \
+	platform/nm-platform.c platform/nm-platform.h \
+	platform/nm-linux-platform.c platform/nm-linux-platform.h \
 	platform/wifi/wifi-utils-nl80211.c \
 	platform/wifi/wifi-utils-nl80211.h \
 	platform/wifi/wifi-utils-private.h platform/wifi/wifi-utils.c \
@@ -1703,19 +1700,19 @@ nmp-netns.lo: platform/nmp-netns.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nmp-netns.lo `test -f 'platform/nmp-netns.c' || echo '$(srcdir)/'`platform/nmp-netns.c
 
-nm-fake-platform.lo: platform/nm-fake-platform.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-fake-platform.lo -MD -MP -MF $(DEPDIR)/nm-fake-platform.Tpo -c -o nm-fake-platform.lo `test -f 'platform/nm-fake-platform.c' || echo '$(srcdir)/'`platform/nm-fake-platform.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/nm-fake-platform.Tpo $(DEPDIR)/nm-fake-platform.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='platform/nm-fake-platform.c' object='nm-fake-platform.lo' libtool=yes @AMDEPBACKSLASH@
+nmp-object.lo: platform/nmp-object.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nmp-object.lo -MD -MP -MF $(DEPDIR)/nmp-object.Tpo -c -o nmp-object.lo `test -f 'platform/nmp-object.c' || echo '$(srcdir)/'`platform/nmp-object.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/nmp-object.Tpo $(DEPDIR)/nmp-object.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='platform/nmp-object.c' object='nmp-object.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-fake-platform.lo `test -f 'platform/nm-fake-platform.c' || echo '$(srcdir)/'`platform/nm-fake-platform.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nmp-object.lo `test -f 'platform/nmp-object.c' || echo '$(srcdir)/'`platform/nmp-object.c
 
-nm-linux-platform.lo: platform/nm-linux-platform.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-linux-platform.lo -MD -MP -MF $(DEPDIR)/nm-linux-platform.Tpo -c -o nm-linux-platform.lo `test -f 'platform/nm-linux-platform.c' || echo '$(srcdir)/'`platform/nm-linux-platform.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/nm-linux-platform.Tpo $(DEPDIR)/nm-linux-platform.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='platform/nm-linux-platform.c' object='nm-linux-platform.lo' libtool=yes @AMDEPBACKSLASH@
+nm-platform-utils.lo: platform/nm-platform-utils.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-platform-utils.lo -MD -MP -MF $(DEPDIR)/nm-platform-utils.Tpo -c -o nm-platform-utils.lo `test -f 'platform/nm-platform-utils.c' || echo '$(srcdir)/'`platform/nm-platform-utils.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/nm-platform-utils.Tpo $(DEPDIR)/nm-platform-utils.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='platform/nm-platform-utils.c' object='nm-platform-utils.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-linux-platform.lo `test -f 'platform/nm-linux-platform.c' || echo '$(srcdir)/'`platform/nm-linux-platform.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-platform-utils.lo `test -f 'platform/nm-platform-utils.c' || echo '$(srcdir)/'`platform/nm-platform-utils.c
 
 nm-platform.lo: platform/nm-platform.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-platform.lo -MD -MP -MF $(DEPDIR)/nm-platform.Tpo -c -o nm-platform.lo `test -f 'platform/nm-platform.c' || echo '$(srcdir)/'`platform/nm-platform.c
@@ -1724,19 +1721,19 @@ nm-platform.lo: platform/nm-platform.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-platform.lo `test -f 'platform/nm-platform.c' || echo '$(srcdir)/'`platform/nm-platform.c
 
-nm-platform-utils.lo: platform/nm-platform-utils.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-platform-utils.lo -MD -MP -MF $(DEPDIR)/nm-platform-utils.Tpo -c -o nm-platform-utils.lo `test -f 'platform/nm-platform-utils.c' || echo '$(srcdir)/'`platform/nm-platform-utils.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/nm-platform-utils.Tpo $(DEPDIR)/nm-platform-utils.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='platform/nm-platform-utils.c' object='nm-platform-utils.lo' libtool=yes @AMDEPBACKSLASH@
+nm-linux-platform.lo: platform/nm-linux-platform.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-linux-platform.lo -MD -MP -MF $(DEPDIR)/nm-linux-platform.Tpo -c -o nm-linux-platform.lo `test -f 'platform/nm-linux-platform.c' || echo '$(srcdir)/'`platform/nm-linux-platform.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/nm-linux-platform.Tpo $(DEPDIR)/nm-linux-platform.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='platform/nm-linux-platform.c' object='nm-linux-platform.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-platform-utils.lo `test -f 'platform/nm-platform-utils.c' || echo '$(srcdir)/'`platform/nm-platform-utils.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-linux-platform.lo `test -f 'platform/nm-linux-platform.c' || echo '$(srcdir)/'`platform/nm-linux-platform.c
 
-nmp-object.lo: platform/nmp-object.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nmp-object.lo -MD -MP -MF $(DEPDIR)/nmp-object.Tpo -c -o nmp-object.lo `test -f 'platform/nmp-object.c' || echo '$(srcdir)/'`platform/nmp-object.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/nmp-object.Tpo $(DEPDIR)/nmp-object.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='platform/nmp-object.c' object='nmp-object.lo' libtool=yes @AMDEPBACKSLASH@
+nm-fake-platform.lo: platform/nm-fake-platform.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-fake-platform.lo -MD -MP -MF $(DEPDIR)/nm-fake-platform.Tpo -c -o nm-fake-platform.lo `test -f 'platform/nm-fake-platform.c' || echo '$(srcdir)/'`platform/nm-fake-platform.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/nm-fake-platform.Tpo $(DEPDIR)/nm-fake-platform.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='platform/nm-fake-platform.c' object='nm-fake-platform.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nmp-object.lo `test -f 'platform/nmp-object.c' || echo '$(srcdir)/'`platform/nmp-object.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-fake-platform.lo `test -f 'platform/nm-fake-platform.c' || echo '$(srcdir)/'`platform/nm-fake-platform.c
 
 wifi-utils-nl80211.lo: platform/wifi/wifi-utils-nl80211.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT wifi-utils-nl80211.lo -MD -MP -MF $(DEPDIR)/wifi-utils-nl80211.Tpo -c -o wifi-utils-nl80211.lo `test -f 'platform/wifi/wifi-utils-nl80211.c' || echo '$(srcdir)/'`platform/wifi/wifi-utils-nl80211.c
diff --git a/src/devices/adsl/Makefile.am b/src/devices/adsl/Makefile.am
index e7034fa8..5f981740 100644
--- a/src/devices/adsl/Makefile.am
+++ b/src/devices/adsl/Makefile.am
@@ -14,7 +14,6 @@ AM_CPPFLAGS = \
 	-I${top_srcdir}/libnm-core \
 	-DG_LOG_DOMAIN=\""NetworkManager-adsl"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GUDEV_CFLAGS)
 
 pkglib_LTLIBRARIES = libnm-device-plugin-adsl.la
diff --git a/src/devices/adsl/Makefile.in b/src/devices/adsl/Makefile.in
index e969a627..c8549200 100644
--- a/src/devices/adsl/Makefile.in
+++ b/src/devices/adsl/Makefile.in
@@ -493,7 +493,6 @@ AM_CPPFLAGS = \
 	-I${top_srcdir}/libnm-core \
 	-DG_LOG_DOMAIN=\""NetworkManager-adsl"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GUDEV_CFLAGS)
 
 pkglib_LTLIBRARIES = libnm-device-plugin-adsl.la
diff --git a/src/devices/bluetooth/Makefile.am b/src/devices/bluetooth/Makefile.am
index 2054ea0f..2ff9a572 100644
--- a/src/devices/bluetooth/Makefile.am
+++ b/src/devices/bluetooth/Makefile.am
@@ -16,7 +16,6 @@ AM_CPPFLAGS = \
 	-I${top_srcdir}/libnm-core \
 	-DG_LOG_DOMAIN=\""NetworkManager-bluetooth"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GLIB_CFLAGS)
 
 GLIB_GENERATED = nm-bt-enum-types.h nm-bt-enum-types.c
diff --git a/src/devices/bluetooth/Makefile.in b/src/devices/bluetooth/Makefile.in
index f93f7242..233ad9e8 100644
--- a/src/devices/bluetooth/Makefile.in
+++ b/src/devices/bluetooth/Makefile.in
@@ -510,8 +510,7 @@ AM_CPPFLAGS = -I${top_srcdir}/src -I${top_builddir}/src \
 	-I${top_srcdir}/libnm-core \
 	-DG_LOG_DOMAIN=\""NetworkManager-bluetooth"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE $(GLIB_CFLAGS) \
-	$(am__append_1)
+	$(GLIB_CFLAGS) $(am__append_1)
 GLIB_GENERATED = nm-bt-enum-types.h nm-bt-enum-types.c
 GLIB_MKENUMS_H_FLAGS = --identifier-prefix NM
 GLIB_MKENUMS_C_FLAGS = --identifier-prefix NM
diff --git a/src/devices/nm-device-bond.c b/src/devices/nm-device-bond.c
index b88b2511..6ae29b9c 100644
--- a/src/devices/nm-device-bond.c
+++ b/src/devices/nm-device-bond.c
@@ -160,16 +160,23 @@ update_connection (NMDevice *device, NMConnection *connection)
 	while (options && *options) {
 		gs_free char *value = nm_platform_sysctl_master_get_option (NM_PLATFORM_GET, ifindex, *options);
 		const char *defvalue = nm_setting_bond_get_option_default (s_bond, *options);
+		char *p;
 
-		if (value && !ignore_if_zero (*options, value) && (g_strcmp0 (value, defvalue) != 0)) {
+		if (_nm_setting_bond_get_option_type (s_bond, *options) == NM_BOND_OPTION_TYPE_BOTH) {
+			p = strchr (value, ' ');
+			if (p)
+				*p = '\0';
+		}
+
+		if (   value
+		    && value[0]
+		    && !ignore_if_zero (*options, value)
+		    && !nm_streq0 (value, defvalue)) {
 			/* Replace " " with "," for arp_ip_targets from the kernel */
 			if (strcmp (*options, "arp_ip_target") == 0) {
-				char *p = value;
-
-				while (p && *p) {
+				for (p = value; *p; p++) {
 					if (*p == ' ')
 						*p = ',';
-					p++;
 				}
 			}
 
@@ -285,7 +292,7 @@ apply_bonding_config (NMDevice *device)
 	set_bond_attr (device, "mode", mode);
 
 	/* arp_interval not compatible with ALB, TLB */
-	if (g_strcmp0 (mode, "balance-alb") == 0 || g_strcmp0 (mode, "balance-tlb") == 0)
+	if (NM_IN_STRSET (mode, "balance-alb", "balance-tlb"))
 		set_arp_interval = FALSE;
 
 	if (set_arp_interval) {
@@ -299,18 +306,17 @@ apply_bonding_config (NMDevice *device)
 	value = nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_ARP_VALIDATE);
 	/* arp_validate > 0 only valid in active-backup mode */
 	if (   value
-	    && g_strcmp0 (value, "0") != 0
-	    && g_strcmp0 (value, "none") != 0
-	    && g_strcmp0 (mode, "active-backup") == 0)
+	    && !nm_streq (value, "0")
+	    && !nm_streq (value, "none")
+	    && nm_streq (mode, "active-backup"))
 		set_bond_attr (device, "arp_validate", value);
 	else
 		set_bond_attr (device, "arp_validate", "0");
 
-	if (   g_strcmp0 (mode, "active-backup") == 0
-	    || g_strcmp0 (mode, "balance-alb") == 0
-	    || g_strcmp0 (mode, "balance-tlb") == 0) {
+	if (NM_IN_STRSET (mode, "active-backup", "balance-alb", "balance-tlb")) {
 		value = nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_PRIMARY);
 		set_bond_attr (device, "primary", value ? value : "");
+		set_simple_option (device, "lp_internal", s_bond, NM_SETTING_BOND_OPTION_LP_INTERVAL);
 	}
 
 	/* Clear ARP targets */
@@ -328,15 +334,31 @@ apply_bonding_config (NMDevice *device)
 	set_simple_option (device, "ad_select", s_bond, NM_SETTING_BOND_OPTION_AD_SELECT);
 	set_simple_option (device, "xmit_hash_policy", s_bond, NM_SETTING_BOND_OPTION_XMIT_HASH_POLICY);
 	set_simple_option (device, "resend_igmp", s_bond, NM_SETTING_BOND_OPTION_RESEND_IGMP);
+	set_simple_option (device, "active_slave", s_bond, NM_SETTING_BOND_OPTION_ACTIVE_SLAVE);
+	set_simple_option (device, "all_slaves_active", s_bond, NM_SETTING_BOND_OPTION_ALL_SLAVES_ACTIVE);
+	set_simple_option (device, "num_grat_arp", s_bond, NM_SETTING_BOND_OPTION_NUM_GRAT_ARP);
+	set_simple_option (device, "num_unsol_na", s_bond, NM_SETTING_BOND_OPTION_NUM_UNSOL_NA);
 
-	if (   g_strcmp0 (mode, "4") == 0
-	    || g_strcmp0 (mode, "802.3ad") == 0)
+	if (nm_streq (mode, "802.3ad")) {
 		set_simple_option (device, "lacp_rate", s_bond, NM_SETTING_BOND_OPTION_LACP_RATE);
+		set_simple_option (device, "ad_actor_sys_prio", s_bond, NM_SETTING_BOND_OPTION_AD_ACTOR_SYS_PRIO);
+		set_simple_option (device, "ad_actor_system", s_bond, NM_SETTING_BOND_OPTION_AD_ACTOR_SYSTEM);
+		set_simple_option (device, "ad_user_port_key", s_bond, NM_SETTING_BOND_OPTION_AD_USER_PORT_KEY);
+		set_simple_option (device, "min_links", s_bond, NM_SETTING_BOND_OPTION_MIN_LINKS);
+	}
+
+	if (nm_streq (mode, "active-backup"))
+		set_simple_option (device, "arp_all_targets", s_bond, NM_SETTING_BOND_OPTION_ARP_ALL_TARGETS);
+
+	if (nm_streq (mode, "balance-rr"))
+		set_simple_option (device, "packets_per_slave", s_bond, NM_SETTING_BOND_OPTION_PACKETS_PER_SLAVE);
+
+	if (nm_streq (mode, "balance-tlb"))
+		set_simple_option (device, "tlb_dynamic_lb", s_bond, NM_SETTING_BOND_OPTION_TLB_DYNAMIC_LB);
 
 	return NM_ACT_STAGE_RETURN_SUCCESS;
 }
 
-
 static NMActStageReturn
 act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
 {
diff --git a/src/devices/nm-device-factory.c b/src/devices/nm-device-factory.c
index 5ce4333f..9dfa9bcb 100644
--- a/src/devices/nm-device-factory.c
+++ b/src/devices/nm-device-factory.c
@@ -91,6 +91,8 @@ nm_device_factory_create_device (NMDeviceFactory *factory,
 	const NMLinkType *link_types = NULL;
 	const char **setting_types = NULL;
 	int i;
+	NMDevice *device;
+	gboolean ignore = FALSE;
 
 	g_return_val_if_fail (factory, NULL);
 	g_return_val_if_fail (iface && *iface, NULL);
@@ -99,6 +101,8 @@ nm_device_factory_create_device (NMDeviceFactory *factory,
 
 	nm_device_factory_get_supported_types (factory, &link_types, &setting_types);
 
+	NM_SET_OUT (out_ignore, FALSE);
+
 	if (plink) {
 		g_return_val_if_fail (strcmp (iface, plink->name) == 0, NULL);
 
@@ -137,7 +141,20 @@ nm_device_factory_create_device (NMDeviceFactory *factory,
 		return NULL;
 	}
 
-	return interface->create_device (factory, iface, plink, connection, out_ignore);
+	device = interface->create_device (factory, iface, plink, connection, &ignore);
+	NM_SET_OUT (out_ignore, ignore);
+	if (!device) {
+		if (ignore) {
+			g_set_error (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_FAILED,
+			             "Device factory %s ignores device %s",
+			             G_OBJECT_TYPE_NAME (factory), iface);
+		} else {
+			g_set_error (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_FAILED,
+			             "Device factory %s failed to create device %s",
+			             G_OBJECT_TYPE_NAME (factory), iface);
+		}
+	}
+	return device;
 }
 
 const char *
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
index 529b3cd8..dde9af94 100644
--- a/src/devices/nm-device.c
+++ b/src/devices/nm-device.c
@@ -1195,17 +1195,67 @@ nm_device_master_release_one_slave (NMDevice *self, NMDevice *slave, gboolean co
 static gboolean
 can_unmanaged_external_down (NMDevice *self)
 {
-	return nm_device_is_software (self) && !NM_DEVICE_GET_PRIVATE (self)->is_nm_owned;
+	return    !NM_DEVICE_GET_PRIVATE (self)->is_nm_owned
+	       && nm_device_is_software (self);
 }
 
-static void
-update_dynamic_ip_setup (NMDevice *self)
+static NMUnmanFlagOp
+is_unmanaged_external_down (NMDevice *self, gboolean consider_can)
 {
 	NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+	if (   consider_can
+	    && !NM_DEVICE_GET_CLASS (self)->can_unmanaged_external_down (self))
+		return NM_UNMAN_FLAG_OP_FORGET;
+
+	/* Manage externally-created software interfaces only when they are IFF_UP */
+	if (   priv->ifindex <= 0
+	    || !priv->up
+	    || !nm_platform_link_can_assume (NM_PLATFORM_GET, priv->ifindex))
+		return NM_UNMAN_FLAG_OP_SET_UNMANAGED;
+
+	return NM_UNMAN_FLAG_OP_SET_MANAGED;
+}
+
+static void
+set_unmanaged_external_down (NMDevice *self, gboolean only_if_unmanaged)
+{
+	NMUnmanFlagOp ext_flags;
+
+	if (!nm_device_get_unmanaged_mask (self, NM_UNMANAGED_EXTERNAL_DOWN))
+		return;
+
+	if (only_if_unmanaged) {
+		if (!nm_device_get_unmanaged_flags (self, NM_UNMANAGED_EXTERNAL_DOWN))
+			return;
+	}
+
+	ext_flags = is_unmanaged_external_down (self, FALSE);
+	if (ext_flags != NM_UNMAN_FLAG_OP_SET_UNMANAGED) {
+		/* Ensure the assume check is queued before any queued state changes
+		 * from the transition to UNAVAILABLE.
+		 */
+		nm_device_queue_recheck_assume (self);
+	}
+
+	nm_device_set_unmanaged_by_flags (self,
+	                                  NM_UNMANAGED_EXTERNAL_DOWN,
+	                                  ext_flags,
+	                                  NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED);
+}
+
+void
+nm_device_update_dynamic_ip_setup (NMDevice *self)
+{
+	NMDevicePrivate *priv;
 	GError *error;
 	gconstpointer addr;
 	size_t addr_length;
 
+	g_return_if_fail (NM_IS_DEVICE (self));
+
+	priv = NM_DEVICE_GET_PRIVATE (self);
+
 	g_hash_table_remove_all (priv->ip6_saved_properties);
 
 	if (priv->dhcp4_client) {
@@ -1295,7 +1345,7 @@ carrier_changed (NMDevice *self, gboolean carrier)
 			 * tagged for carrier ignore) ensure that when the carrier appears we
 			 * renew DHCP leases and such.
 			 */
-			update_dynamic_ip_setup (self);
+			nm_device_update_dynamic_ip_setup (self);
 		}
 	} else {
 		if (priv->state == NM_DEVICE_STATE_UNAVAILABLE) {
@@ -1422,7 +1472,6 @@ device_link_changed (NMDevice *self)
 	NMPlatformLink info;
 	const NMPlatformLink *pllink;
 	int ifindex;
-	gboolean was_up;
 
 	priv->device_link_changed_id = 0;
 
@@ -1493,25 +1542,21 @@ device_link_changed (NMDevice *self)
 
 	/* Update DHCP, etc, if needed */
 	if (ip_ifname_changed)
-		update_dynamic_ip_setup (self);
+		nm_device_update_dynamic_ip_setup (self);
 
-	was_up = priv->up;
 	priv->up = NM_FLAGS_HAS (info.n_ifi_flags, IFF_UP);
 
-	if (   priv->ifindex > 0
-	    && info.initialized
+	if (   info.initialized
 	    && nm_device_get_unmanaged_flags (self, NM_UNMANAGED_PLATFORM_INIT)) {
 		NMDeviceStateReason reason;
 
 		nm_device_set_unmanaged_by_user_udev (self);
 
-		/* If the devices that need an external IFF_UP go managed below,
-		 * it means they're already up. In that case we should use an "assumed"
-		 * reason to prevent the cleanup sequence from being run on transition
-		 * from "unmanaged" to "unavailable". */
-		if (   priv->up
-		    && !nm_device_get_unmanaged_flags (self, NM_UNMANAGED_EXTERNAL_DOWN)
-		    && NM_DEVICE_GET_CLASS (self)->can_unmanaged_external_down (self)) {
+		/* If the device is a external-down candidated but no longer has external
+		 * down set, we must clear the platform-unmanaged flag with reason
+		 * "assumed". */
+		if (    nm_device_get_unmanaged_mask (self, NM_UNMANAGED_EXTERNAL_DOWN)
+		    && !nm_device_get_unmanaged_flags (self, NM_UNMANAGED_EXTERNAL_DOWN)) {
 			/* Ensure the assume check is queued before any queued state changes
 			 * from the transition to UNAVAILABLE.
 			 */
@@ -1523,35 +1568,7 @@ device_link_changed (NMDevice *self)
 		nm_device_set_unmanaged_by_flags (self, NM_UNMANAGED_PLATFORM_INIT, FALSE, reason);
 	}
 
-	if (   priv->ifindex > 0
-	    && priv->up != was_up
-	    && NM_DEVICE_GET_CLASS (self)->can_unmanaged_external_down (self)) {
-		/* Manage externally-created software interfaces only when they are IFF_UP */
-		if (   priv->up
-		    && nm_device_get_unmanaged_flags (self, NM_UNMANAGED_EXTERNAL_DOWN)) {
-			/* Ensure the assume check is queued before any queued state changes
-			 * from the transition to UNAVAILABLE.
-			 */
-			nm_device_queue_recheck_assume (self);
-		}
-
-		/* In case of @priv->up, resetting the EXTERNAL_DOWN flag may change the device's
-		 * state to UNAVAILABLE. To ensure that the state change doesn't touch
-		 * the device before assumption occurs, pass NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED
-		 * as the reason.
-		 *
-		 * In case of !@priv->up, and the device is already unmanaged for other reasons, the
-		 * state-change-reason has no effect.
-		 * If the device is managed for an explict user-request, the state-change-reason
-		 * also has no effect, because the device stays managed.
-		 *
-		 * The state-change-reason only has effect if the device was assumed
-		 * and is now to be unmanaged. */
-		nm_device_set_unmanaged_by_flags (self,
-		                                  NM_UNMANAGED_EXTERNAL_DOWN,
-		                                  !priv->up,
-		                                  NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED);
-	}
+	set_unmanaged_external_down (self, FALSE);
 
 	device_recheck_slave_status (self, &info);
 	return G_SOURCE_REMOVE;
@@ -1580,7 +1597,7 @@ device_ip_link_changed (NMDevice *self)
 		priv->ip_iface = g_strdup (pllink->name);
 
 		_notify (self, PROP_IP_IFACE);
-		update_dynamic_ip_setup (self);
+		nm_device_update_dynamic_ip_setup (self);
 	}
 	return G_SOURCE_REMOVE;
 }
@@ -1921,12 +1938,11 @@ realize_start_setup (NMDevice *self, const NMPlatformLink *plink)
 
 	klass->realize_start_notify (self, plink);
 
-	/* Do not manage externally created software devices until they are IFF_UP */
-	if (   priv->ifindex > 0
-	    && plink
-	    && !priv->up
-	    && NM_DEVICE_GET_CLASS (self)->can_unmanaged_external_down (self))
-		nm_device_set_unmanaged_flags (self, NM_UNMANAGED_EXTERNAL_DOWN, TRUE);
+	/* Do not manage externally created software devices until they are IFF_UP
+	 * or have IP addressing */
+	nm_device_set_unmanaged_flags (self,
+	                               NM_UNMANAGED_EXTERNAL_DOWN,
+	                               is_unmanaged_external_down (self, TRUE));
 
 	/* Unmanaged the loopback device with an explicit NM_UNMANAGED_LOOPBACK flag.
 	 * Later we might want to manage 'lo' too. Currently that doesn't work because
@@ -2569,6 +2585,18 @@ nm_device_removed (NMDevice *self)
 		 * Release the slave from master, but don't touch the device. */
 		nm_device_master_release_one_slave (priv->master, self, FALSE, NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED);
 	}
+
+	/* Clean up IP configs; this does not actually deconfigure the
+	 * interface, it just clears the configuration to which policy
+	 * is reacting via NM_DEVICE_IP4_CONFIG_CHANGED/NM_DEVICE_IP6_CONFIG_CHANGED
+	 * signal. As NMPolicy registered the NMIPxConfig instances in NMDnsManager,
+	 * these would be leaked otherwise. */
+	priv->default_route.v4_has = FALSE;
+	priv->default_route.v4_is_assumed = TRUE;
+	nm_device_set_ip4_config (self, NULL, 0, FALSE, FALSE, NULL);
+	priv->default_route.v6_has = FALSE;
+	priv->default_route.v6_is_assumed = TRUE;
+	nm_device_set_ip6_config (self, NULL, FALSE, FALSE, NULL);
 }
 
 static gboolean
@@ -3050,8 +3078,7 @@ nm_device_check_slave_connection_compatible (NMDevice *self, NMConnection *slave
 static gboolean
 nm_device_can_assume_connections (NMDevice *self)
 {
-	return   !!NM_DEVICE_GET_CLASS (self)->update_connection
-	      && !NM_DEVICE_GET_PRIVATE (self)->is_nm_owned;
+	return   !!NM_DEVICE_GET_CLASS (self)->update_connection;
 }
 
 /**
@@ -8869,6 +8896,8 @@ queued_ip4_config_change (gpointer user_data)
 	update_ip4_config (self, FALSE);
 	g_object_unref (self);
 
+	set_unmanaged_external_down (self, TRUE);
+
 	return FALSE;
 }
 
@@ -8923,6 +8952,8 @@ queued_ip6_config_change (gpointer user_data)
 
 	g_object_unref (self);
 
+	set_unmanaged_external_down (self, TRUE);
+
 	return FALSE;
 }
 
@@ -9124,6 +9155,24 @@ nm_device_get_managed (NMDevice *self, gboolean for_user_request)
 }
 
 /**
+ * nm_device_get_unmanaged_mask:
+ * @self: the #NMDevice
+ * @flag: the unmanaged flags to check.
+ *
+ * Return the unmanaged flags mask set on this device.
+ *
+ * Returns: the flags of the device ( & @flag)
+ */
+NMUnmanagedFlags
+nm_device_get_unmanaged_mask (NMDevice *self, NMUnmanagedFlags flag)
+{
+	g_return_val_if_fail (NM_IS_DEVICE (self), NM_UNMANAGED_NONE);
+	g_return_val_if_fail (flag != NM_UNMANAGED_NONE, NM_UNMANAGED_NONE);
+
+	return NM_DEVICE_GET_PRIVATE (self)->unmanaged_mask & flag;
+}
+
+/**
  * nm_device_get_unmanaged_flags:
  * @self: the #NMDevice
  * @flag: the unmanaged flags to check.
@@ -9135,8 +9184,8 @@ nm_device_get_managed (NMDevice *self, gboolean for_user_request)
 NMUnmanagedFlags
 nm_device_get_unmanaged_flags (NMDevice *self, NMUnmanagedFlags flag)
 {
-	g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
-	g_return_val_if_fail (flag != NM_UNMANAGED_NONE, FALSE);
+	g_return_val_if_fail (NM_IS_DEVICE (self), NM_UNMANAGED_NONE);
+	g_return_val_if_fail (flag != NM_UNMANAGED_NONE, NM_UNMANAGED_NONE);
 
 	return NM_DEVICE_GET_PRIVATE (self)->unmanaged_flags & flag;
 }
@@ -9943,7 +9992,6 @@ static void
 _cleanup_generic_post (NMDevice *self, CleanupType cleanup_type)
 {
 	NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
-	NMDeviceStateReason ignored = NM_DEVICE_STATE_REASON_NONE;
 
 	priv->default_route.v4_has = FALSE;
 	priv->default_route.v6_has = FALSE;
@@ -9968,8 +10016,8 @@ _cleanup_generic_post (NMDevice *self, CleanupType cleanup_type)
 	/* Clean up IP configs; this does not actually deconfigure the
 	 * interface; the caller must flush routes and addresses explicitly.
 	 */
-	nm_device_set_ip4_config (self, NULL, 0, TRUE, TRUE, &ignored);
-	nm_device_set_ip6_config (self, NULL, TRUE, TRUE, &ignored);
+	nm_device_set_ip4_config (self, NULL, 0, TRUE, TRUE, NULL);
+	nm_device_set_ip6_config (self, NULL, TRUE, TRUE, NULL);
 	g_clear_object (&priv->con_ip4_config);
 	g_clear_object (&priv->dev_ip4_config);
 	g_clear_object (&priv->ext_ip4_config);
diff --git a/src/devices/nm-device.h b/src/devices/nm-device.h
index bd657e68..368e77f7 100644
--- a/src/devices/nm-device.h
+++ b/src/devices/nm-device.h
@@ -86,12 +86,12 @@
 
 G_BEGIN_DECLS
 
-#define NM_TYPE_DEVICE			(nm_device_get_type ())
-#define NM_DEVICE(obj)			(G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE, NMDevice))
-#define NM_DEVICE_CLASS(klass)	(G_TYPE_CHECK_CLASS_CAST ((klass),  NM_TYPE_DEVICE, NMDeviceClass))
-#define NM_IS_DEVICE(obj)		(G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE))
-#define NM_IS_DEVICE_CLASS(klass)	(G_TYPE_CHECK_CLASS_TYPE ((klass),  NM_TYPE_DEVICE))
-#define NM_DEVICE_GET_CLASS(obj)	(G_TYPE_INSTANCE_GET_CLASS ((obj),  NM_TYPE_DEVICE, NMDeviceClass))
+#define NM_TYPE_DEVICE            (nm_device_get_type ())
+#define NM_DEVICE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE, NMDevice))
+#define NM_DEVICE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),  NM_TYPE_DEVICE, NMDeviceClass))
+#define NM_IS_DEVICE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE))
+#define NM_IS_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  NM_TYPE_DEVICE))
+#define NM_DEVICE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  NM_TYPE_DEVICE, NMDeviceClass))
 
 typedef enum NMActStageReturn NMActStageReturn;
 
@@ -201,7 +201,7 @@ typedef struct {
 
 	NMDeviceCapabilities (* get_generic_capabilities) (NMDevice *self);
 
-	gboolean	(* is_available) (NMDevice *self, NMDeviceCheckDevAvailableFlags flags);
+	gboolean    (* is_available) (NMDevice *self, NMDeviceCheckDevAvailableFlags flags);
 
 	gboolean    (* get_enabled) (NMDevice *self);
 
@@ -239,19 +239,19 @@ typedef struct {
 	                                             const GSList *existing_connections,
 	                                             GError **error);
 
-	NMActStageReturn	(* act_stage1_prepare)	(NMDevice *self,
+	NMActStageReturn    (* act_stage1_prepare)  (NMDevice *self,
 	                                             NMDeviceStateReason *reason);
-	NMActStageReturn	(* act_stage2_config)	(NMDevice *self,
+	NMActStageReturn    (* act_stage2_config)   (NMDevice *self,
 	                                             NMDeviceStateReason *reason);
-	NMActStageReturn	(* act_stage3_ip4_config_start) (NMDevice *self,
+	NMActStageReturn    (* act_stage3_ip4_config_start) (NMDevice *self,
 	                                                     NMIP4Config **out_config,
 	                                                     NMDeviceStateReason *reason);
-	NMActStageReturn	(* act_stage3_ip6_config_start) (NMDevice *self,
+	NMActStageReturn    (* act_stage3_ip6_config_start) (NMDevice *self,
 	                                                     NMIP6Config **out_config,
 	                                                     NMDeviceStateReason *reason);
-	NMActStageReturn	(* act_stage4_ip4_config_timeout)	(NMDevice *self,
+	NMActStageReturn    (* act_stage4_ip4_config_timeout)   (NMDevice *self,
 	                                                         NMDeviceStateReason *reason);
-	NMActStageReturn	(* act_stage4_ip6_config_timeout)	(NMDevice *self,
+	NMActStageReturn    (* act_stage4_ip6_config_timeout)   (NMDevice *self,
 	                                                         NMDeviceStateReason *reason);
 
 	/* Called right before IP config is set; use for setting MTU etc */
@@ -268,7 +268,7 @@ typedef struct {
 	                                             GError **error);
 
 	/* Sync deactivating (in the DISCONNECTED phase) */
-	void			(* deactivate)			(NMDevice *self);
+	void            (* deactivate) (NMDevice *self);
 
 	const char *(*get_type_description) (NMDevice *self);
 
@@ -326,38 +326,38 @@ typedef void (*NMDeviceAuthRequestFunc) (NMDevice *device,
 
 GType nm_device_get_type (void);
 
-const char *	nm_device_get_udi		(NMDevice *dev);
-const char *	nm_device_get_iface		(NMDevice *dev);
-int             nm_device_get_ifindex	(NMDevice *dev);
-gboolean        nm_device_is_software   (NMDevice *dev);
-gboolean        nm_device_is_real       (NMDevice *dev);
-const char *	nm_device_get_ip_iface	(NMDevice *dev);
-int             nm_device_get_ip_ifindex(NMDevice *dev);
-const char *	nm_device_get_driver	(NMDevice *dev);
-const char *	nm_device_get_driver_version	(NMDevice *dev);
-const char *	nm_device_get_type_desc (NMDevice *dev);
-const char *	nm_device_get_type_description (NMDevice *dev);
-NMDeviceType	nm_device_get_device_type	(NMDevice *dev);
-NMLinkType	nm_device_get_link_type	(NMDevice *dev);
-NMMetered       nm_device_get_metered	(NMDevice *dev);
-
-int			nm_device_get_priority (NMDevice *dev);
-guint32     nm_device_get_ip4_route_metric (NMDevice *dev);
-guint32     nm_device_get_ip6_route_metric (NMDevice *dev);
-
-const char *    nm_device_get_hw_address           (NMDevice *dev);
+const char *    nm_device_get_udi               (NMDevice *dev);
+const char *    nm_device_get_iface             (NMDevice *dev);
+int             nm_device_get_ifindex           (NMDevice *dev);
+gboolean        nm_device_is_software           (NMDevice *dev);
+gboolean        nm_device_is_real               (NMDevice *dev);
+const char *    nm_device_get_ip_iface          (NMDevice *dev);
+int             nm_device_get_ip_ifindex        (NMDevice *dev);
+const char *    nm_device_get_driver            (NMDevice *dev);
+const char *    nm_device_get_driver_version    (NMDevice *dev);
+const char *    nm_device_get_type_desc         (NMDevice *dev);
+const char *    nm_device_get_type_description  (NMDevice *dev);
+NMDeviceType    nm_device_get_device_type       (NMDevice *dev);
+NMLinkType      nm_device_get_link_type         (NMDevice *dev);
+NMMetered       nm_device_get_metered           (NMDevice *dev);
+
+int             nm_device_get_priority          (NMDevice *dev);
+guint32         nm_device_get_ip4_route_metric  (NMDevice *dev);
+guint32         nm_device_get_ip6_route_metric  (NMDevice *dev);
+
+const char *    nm_device_get_hw_address        (NMDevice *dev);
 const char *    nm_device_get_permanent_hw_address (NMDevice *dev);
-const char *    nm_device_get_initial_hw_address   (NMDevice *dev);
+const char *    nm_device_get_initial_hw_address (NMDevice *dev);
 
-NMDhcp4Config * nm_device_get_dhcp4_config (NMDevice *dev);
-NMDhcp6Config * nm_device_get_dhcp6_config (NMDevice *dev);
+NMDhcp4Config * nm_device_get_dhcp4_config      (NMDevice *dev);
+NMDhcp6Config * nm_device_get_dhcp6_config      (NMDevice *dev);
 
-NMIP4Config *	nm_device_get_ip4_config	(NMDevice *dev);
+NMIP4Config *   nm_device_get_ip4_config        (NMDevice *dev);
 void            nm_device_replace_vpn4_config   (NMDevice *dev,
                                                  NMIP4Config *old,
                                                  NMIP4Config *config);
 
-NMIP6Config *	nm_device_get_ip6_config	(NMDevice *dev);
+NMIP6Config *   nm_device_get_ip6_config        (NMDevice *dev);
 void            nm_device_replace_vpn6_config   (NMDevice *dev,
                                                  NMIP6Config *old,
                                                  NMIP6Config *config);
@@ -365,22 +365,22 @@ void            nm_device_replace_vpn6_config   (NMDevice *dev,
 void            nm_device_capture_initial_config (NMDevice *dev);
 
 /* Master */
-gboolean        nm_device_is_master         (NMDevice *dev);
+gboolean        nm_device_is_master             (NMDevice *dev);
 
 /* Slave */
-NMDevice *      nm_device_get_master        (NMDevice *dev);
+NMDevice *      nm_device_get_master            (NMDevice *dev);
 
-NMActRequest *          nm_device_get_act_request               (NMDevice *dev);
-NMSettingsConnection *  nm_device_get_settings_connection       (NMDevice *dev);
-NMConnection *          nm_device_get_applied_connection        (NMDevice *dev);
-gboolean                nm_device_has_unmodified_applied_connection (NMDevice *self,
-                                                                     NMSettingCompareFlags compare_flags);
-NMSetting *             nm_device_get_applied_setting           (NMDevice *dev, GType setting_type);
+NMActRequest *  nm_device_get_act_request       (NMDevice *dev);
+NMSettingsConnection *nm_device_get_settings_connection (NMDevice *dev);
+NMConnection *  nm_device_get_applied_connection (NMDevice *dev);
+gboolean        nm_device_has_unmodified_applied_connection (NMDevice *self,
+                                                             NMSettingCompareFlags compare_flags);
+NMSetting *     nm_device_get_applied_setting   (NMDevice *dev, GType setting_type);
 
-void            nm_device_removed        (NMDevice *dev);
+void            nm_device_removed               (NMDevice *dev);
 
-gboolean        nm_device_is_available   (NMDevice *dev, NMDeviceCheckDevAvailableFlags flags);
-gboolean        nm_device_has_carrier    (NMDevice *dev);
+gboolean        nm_device_is_available          (NMDevice *dev, NMDeviceCheckDevAvailableFlags flags);
+gboolean        nm_device_has_carrier           (NMDevice *dev);
 
 NMConnection * nm_device_generate_connection (NMDevice *self, NMDevice *master);
 
@@ -408,8 +408,8 @@ gboolean nm_device_can_assume_active_connection (NMDevice *device);
 
 gboolean nm_device_spec_match_list (NMDevice *device, const GSList *specs);
 
-gboolean		nm_device_is_activating		(NMDevice *dev);
-gboolean		nm_device_autoconnect_allowed	(NMDevice *self);
+gboolean nm_device_is_activating (NMDevice *dev);
+gboolean nm_device_autoconnect_allowed (NMDevice *self);
 
 NMDeviceState nm_device_get_state (NMDevice *device);
 
@@ -472,6 +472,7 @@ typedef enum {
 const char *nm_unmanaged_flags2str (NMUnmanagedFlags flags, char *buf, gsize len);
 
 gboolean nm_device_get_managed (NMDevice *device, gboolean for_user_request);
+NMUnmanagedFlags nm_device_get_unmanaged_mask (NMDevice *device, NMUnmanagedFlags flag);
 NMUnmanagedFlags nm_device_get_unmanaged_flags (NMDevice *device, NMUnmanagedFlags flag);
 void nm_device_set_unmanaged_flags (NMDevice *device,
                                     NMUnmanagedFlags flags,
@@ -563,7 +564,8 @@ void nm_device_reactivate_ip6_config (NMDevice *device,
 
 void nm_device_update_hw_address (NMDevice *self);
 void nm_device_update_initial_hw_address (NMDevice *self);
+void nm_device_update_dynamic_ip_setup (NMDevice *self);
 
 G_END_DECLS
 
-#endif	/* NM_DEVICE_H */
+#endif /* NM_DEVICE_H */
diff --git a/src/devices/nm-lldp-listener.c b/src/devices/nm-lldp-listener.c
index e678dc67..592059f5 100644
--- a/src/devices/nm-lldp-listener.c
+++ b/src/devices/nm-lldp-listener.c
@@ -30,9 +30,6 @@
 
 #include "sd-lldp.h"
 
-#include "nm-sd-adapt.h"
-#include "lldp.h"
-
 #define MAX_NEIGHBORS         4096
 #define MIN_UPDATE_INTERVAL_NS (2 * NM_UTILS_NS_PER_SECOND)
 
@@ -402,13 +399,13 @@ lldp_neighbor_new (sd_lldp_neighbor *neighbor_sd, GError **error)
 	}
 
 	switch (chassis_id_type) {
-	case LLDP_CHASSIS_SUBTYPE_INTERFACE_ALIAS:
-	case LLDP_CHASSIS_SUBTYPE_INTERFACE_NAME:
-	case LLDP_CHASSIS_SUBTYPE_LOCALLY_ASSIGNED:
-	case LLDP_CHASSIS_SUBTYPE_CHASSIS_COMPONENT:
+	case SD_LLDP_CHASSIS_SUBTYPE_INTERFACE_ALIAS:
+	case SD_LLDP_CHASSIS_SUBTYPE_INTERFACE_NAME:
+	case SD_LLDP_CHASSIS_SUBTYPE_LOCALLY_ASSIGNED:
+	case SD_LLDP_CHASSIS_SUBTYPE_CHASSIS_COMPONENT:
 		neigh->chassis_id = g_strndup ((const char *) chassis_id, chassis_id_len);
 		break;
-	case LLDP_CHASSIS_SUBTYPE_MAC_ADDRESS:
+	case SD_LLDP_CHASSIS_SUBTYPE_MAC_ADDRESS:
 		neigh->chassis_id = nm_utils_hwaddr_ntoa (chassis_id, chassis_id_len);
 		break;
 	default:
@@ -418,13 +415,13 @@ lldp_neighbor_new (sd_lldp_neighbor *neighbor_sd, GError **error)
 	}
 
 	switch (port_id_type) {
-	case LLDP_PORT_SUBTYPE_INTERFACE_ALIAS:
-	case LLDP_PORT_SUBTYPE_INTERFACE_NAME:
-	case LLDP_PORT_SUBTYPE_LOCALLY_ASSIGNED:
-	case LLDP_PORT_SUBTYPE_PORT_COMPONENT:
+	case SD_LLDP_PORT_SUBTYPE_INTERFACE_ALIAS:
+	case SD_LLDP_PORT_SUBTYPE_INTERFACE_NAME:
+	case SD_LLDP_PORT_SUBTYPE_LOCALLY_ASSIGNED:
+	case SD_LLDP_PORT_SUBTYPE_PORT_COMPONENT:
 		neigh->port_id = strndup ((char *) port_id, port_id_len);
 		break;
-	case LLDP_PORT_SUBTYPE_MAC_ADDRESS:
+	case SD_LLDP_PORT_SUBTYPE_MAC_ADDRESS:
 		neigh->port_id = nm_utils_hwaddr_ntoa (port_id, port_id_len);
 		break;
 	default:
@@ -464,11 +461,11 @@ lldp_neighbor_new (sd_lldp_neighbor *neighbor_sd, GError **error)
 			goto out;
 		}
 
-		if (!(   memcmp (oui, LLDP_OUI_802_1, sizeof (oui)) == 0
+		if (!(   memcmp (oui, SD_LLDP_OUI_802_1, sizeof (oui)) == 0
 		      && NM_IN_SET (subtype,
-		                    LLDP_OUI_802_1_SUBTYPE_PORT_PROTOCOL_VLAN_ID,
-		                    LLDP_OUI_802_1_SUBTYPE_PORT_VLAN_ID,
-		                    LLDP_OUI_802_1_SUBTYPE_VLAN_NAME)))
+		                    SD_LLDP_OUI_802_1_SUBTYPE_PORT_PROTOCOL_VLAN_ID,
+		                    SD_LLDP_OUI_802_1_SUBTYPE_PORT_VLAN_ID,
+		                    SD_LLDP_OUI_802_1_SUBTYPE_VLAN_NAME)))
 			continue;
 
 		if (sd_lldp_neighbor_tlv_get_raw (neighbor_sd, (void *) &data8, &len) < 0)
@@ -492,16 +489,16 @@ lldp_neighbor_new (sd_lldp_neighbor *neighbor_sd, GError **error)
 		data8 += 6;
 		len -= 6;
 
-		/*if (memcmp (oui, LLDP_OUI_802_1, sizeof (oui)) == 0)*/
+		/*if (memcmp (oui, SD_LLDP_OUI_802_1, sizeof (oui)) == 0)*/
 		{
 			switch (subtype) {
-			case LLDP_OUI_802_1_SUBTYPE_PORT_VLAN_ID:
+			case SD_LLDP_OUI_802_1_SUBTYPE_PORT_VLAN_ID:
 				if (len != 2)
 					continue;
 				_lldp_attr_set_uint32 (neigh->attrs, LLDP_ATTR_ID_IEEE_802_1_PVID,
 				                       _access_uint16 (data8));
 				break;
-			case LLDP_OUI_802_1_SUBTYPE_PORT_PROTOCOL_VLAN_ID:
+			case SD_LLDP_OUI_802_1_SUBTYPE_PORT_PROTOCOL_VLAN_ID:
 				if (len != 3)
 					continue;
 				_lldp_attr_set_uint32 (neigh->attrs, LLDP_ATTR_ID_IEEE_802_1_PPVID_FLAGS,
@@ -509,7 +506,7 @@ lldp_neighbor_new (sd_lldp_neighbor *neighbor_sd, GError **error)
 				_lldp_attr_set_uint32 (neigh->attrs, LLDP_ATTR_ID_IEEE_802_1_PPVID,
 				                       _access_uint16 (&data8[1]));
 				break;
-			case LLDP_OUI_802_1_SUBTYPE_VLAN_NAME: {
+			case SD_LLDP_OUI_802_1_SUBTYPE_VLAN_NAME: {
 				int l;
 
 				if (len <= 3)
diff --git a/src/devices/team/Makefile.am b/src/devices/team/Makefile.am
index a6645833..3609ace4 100644
--- a/src/devices/team/Makefile.am
+++ b/src/devices/team/Makefile.am
@@ -14,7 +14,6 @@ AM_CPPFLAGS = \
 	-I${top_srcdir}/libnm-core \
 	-DG_LOG_DOMAIN=\""NetworkManager-team"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GLIB_CFLAGS)
 
 if WITH_TEAMDCTL
diff --git a/src/devices/team/Makefile.in b/src/devices/team/Makefile.in
index 6dce463e..115a7589 100644
--- a/src/devices/team/Makefile.in
+++ b/src/devices/team/Makefile.in
@@ -492,8 +492,7 @@ AM_CPPFLAGS = -I${top_srcdir}/src -I${top_builddir}/src \
 	-I${top_srcdir}/libnm-core \
 	-DG_LOG_DOMAIN=\""NetworkManager-team"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE $(GLIB_CFLAGS) \
-	$(am__append_1)
+	$(GLIB_CFLAGS) $(am__append_1)
 pkglib_LTLIBRARIES = libnm-device-plugin-team.la
 SYMBOL_VIS_FILE = $(srcdir)/exports.ver
 libnm_device_plugin_team_la_SOURCES = \
diff --git a/src/devices/tests/Makefile.am b/src/devices/tests/Makefile.am
index e4f4d3fe..cd1ef6ed 100644
--- a/src/devices/tests/Makefile.am
+++ b/src/devices/tests/Makefile.am
@@ -12,7 +12,6 @@ AM_CPPFLAGS = \
 	-I$(top_builddir)/src \
 	-DG_LOG_DOMAIN=\""NetworkManager"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GLIB_CFLAGS)
 
 AM_CFLAGS = $(CODE_COVERAGE_CFLAGS)
diff --git a/src/devices/tests/Makefile.in b/src/devices/tests/Makefile.in
index 1cb73d28..31cf0d38 100644
--- a/src/devices/tests/Makefile.in
+++ b/src/devices/tests/Makefile.in
@@ -671,7 +671,6 @@ AM_CPPFLAGS = \
 	-I$(top_builddir)/src \
 	-DG_LOG_DOMAIN=\""NetworkManager"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GLIB_CFLAGS)
 
 AM_CFLAGS = $(CODE_COVERAGE_CFLAGS)
diff --git a/src/devices/tests/test-lldp.c b/src/devices/tests/test-lldp.c
index 85c3b510..1b7f536d 100644
--- a/src/devices/tests/test-lldp.c
+++ b/src/devices/tests/test-lldp.c
@@ -29,8 +29,7 @@
 #include "nm-lldp-listener.h"
 #include "nm-sd.h"
 
-#include "nm-sd-adapt.h"
-#include "lldp.h"
+#include "sd-lldp.h"
 
 #include "test-common.h"
 
@@ -147,8 +146,8 @@ _test_recv_data0_check (GMainLoop *loop, NMLldpListener *listener)
 	g_assert_cmpint (g_variant_n_children (neighbors), ==, 1);
 
 	neighbor = get_lldp_neighbor (neighbors,
-	                              LLDP_CHASSIS_SUBTYPE_MAC_ADDRESS, "00:01:02:03:04:05",
-	                              LLDP_PORT_SUBTYPE_INTERFACE_NAME, "1/3");
+	                              SD_LLDP_CHASSIS_SUBTYPE_MAC_ADDRESS, "00:01:02:03:04:05",
+	                              SD_LLDP_PORT_SUBTYPE_INTERFACE_NAME, "1/3");
 	g_assert (neighbor);
 	g_assert_cmpint (g_variant_n_children (neighbor), ==, 4 + 4);
 
@@ -244,8 +243,8 @@ _test_recv_data1_check (GMainLoop *loop, NMLldpListener *listener)
 	g_assert_cmpint (g_variant_n_children (neighbors), ==, 1);
 
 	neighbor = get_lldp_neighbor (neighbors,
-	                              LLDP_CHASSIS_SUBTYPE_MAC_ADDRESS, "00:01:30:F9:AD:A0",
-	                              LLDP_PORT_SUBTYPE_INTERFACE_NAME, "1/1");
+	                              SD_LLDP_CHASSIS_SUBTYPE_MAC_ADDRESS, "00:01:30:F9:AD:A0",
+	                              SD_LLDP_PORT_SUBTYPE_INTERFACE_NAME, "1/1");
 	g_assert (neighbor);
 	g_assert_cmpint (g_variant_n_children (neighbor), ==, 4 + 10);
 
diff --git a/src/devices/wifi/Makefile.am b/src/devices/wifi/Makefile.am
index b0919ef7..e35a84b4 100644
--- a/src/devices/wifi/Makefile.am
+++ b/src/devices/wifi/Makefile.am
@@ -20,7 +20,6 @@ AM_CPPFLAGS = \
 	-I${top_srcdir}/libnm-core \
 	-DG_LOG_DOMAIN=\""NetworkManager-wifi"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GLIB_CFLAGS)
 
 pkglib_LTLIBRARIES = libnm-device-plugin-wifi.la
diff --git a/src/devices/wifi/Makefile.in b/src/devices/wifi/Makefile.in
index 1286a480..a180a434 100644
--- a/src/devices/wifi/Makefile.in
+++ b/src/devices/wifi/Makefile.in
@@ -539,7 +539,6 @@ AM_CPPFLAGS = \
 	-I${top_srcdir}/libnm-core \
 	-DG_LOG_DOMAIN=\""NetworkManager-wifi"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GLIB_CFLAGS)
 
 pkglib_LTLIBRARIES = libnm-device-plugin-wifi.la
diff --git a/src/devices/wifi/tests/Makefile.am b/src/devices/wifi/tests/Makefile.am
index dee8e799..d05ccf7e 100644
--- a/src/devices/wifi/tests/Makefile.am
+++ b/src/devices/wifi/tests/Makefile.am
@@ -10,7 +10,6 @@ AM_CPPFLAGS = \
 	-I$(top_builddir)/src \
 	-DG_LOG_DOMAIN=\""NetworkManager-wifi"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GLIB_CFLAGS)
 
 noinst_PROGRAMS = test-wifi-ap-utils
diff --git a/src/devices/wifi/tests/Makefile.in b/src/devices/wifi/tests/Makefile.in
index 90900f00..be874cc3 100644
--- a/src/devices/wifi/tests/Makefile.in
+++ b/src/devices/wifi/tests/Makefile.in
@@ -664,7 +664,6 @@ AM_CPPFLAGS = \
 	-I$(top_builddir)/src \
 	-DG_LOG_DOMAIN=\""NetworkManager-wifi"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GLIB_CFLAGS)
 
 test_wifi_ap_utils_SOURCES = \
diff --git a/src/devices/wwan/Makefile.am b/src/devices/wwan/Makefile.am
index 107f630b..1777eb36 100644
--- a/src/devices/wwan/Makefile.am
+++ b/src/devices/wwan/Makefile.am
@@ -15,7 +15,6 @@ AM_CPPFLAGS = \
 	-I${top_builddir}/libnm-core \
 	-DG_LOG_DOMAIN=\""NetworkManager-wwan"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GLIB_CFLAGS) \
 	$(MM_GLIB_CFLAGS)
 
diff --git a/src/devices/wwan/Makefile.in b/src/devices/wwan/Makefile.in
index ac13135e..e7722414 100644
--- a/src/devices/wwan/Makefile.in
+++ b/src/devices/wwan/Makefile.in
@@ -506,7 +506,6 @@ AM_CPPFLAGS = \
 	-I${top_builddir}/libnm-core \
 	-DG_LOG_DOMAIN=\""NetworkManager-wwan"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GLIB_CFLAGS) \
 	$(MM_GLIB_CFLAGS)
 
diff --git a/src/dhcp-manager/Makefile.am b/src/dhcp-manager/Makefile.am
index 3199ab04..b4590b4b 100644
--- a/src/dhcp-manager/Makefile.am
+++ b/src/dhcp-manager/Makefile.am
@@ -9,7 +9,6 @@ nm_dhcp_helper_CPPFLAGS = \
 	-I$(top_srcdir)/libnm-core \
 	-I$(top_builddir)/libnm-core \
 	-DG_LOG_DOMAIN=\""nm-dhcp-helper"\" \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	-DNMRUNDIR=\"$(nmrundir)\"
 
 nm_dhcp_helper_LDADD = $(GLIB_LIBS)
diff --git a/src/dhcp-manager/Makefile.in b/src/dhcp-manager/Makefile.in
index 35ee4822..0f98c8c5 100644
--- a/src/dhcp-manager/Makefile.in
+++ b/src/dhcp-manager/Makefile.in
@@ -455,7 +455,6 @@ nm_dhcp_helper_CPPFLAGS = \
 	-I$(top_srcdir)/libnm-core \
 	-I$(top_builddir)/libnm-core \
 	-DG_LOG_DOMAIN=\""nm-dhcp-helper"\" \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	-DNMRUNDIR=\"$(nmrundir)\"
 
 nm_dhcp_helper_LDADD = $(GLIB_LIBS)
diff --git a/src/dhcp-manager/tests/Makefile.am b/src/dhcp-manager/tests/Makefile.am
index 5c7f9ba2..b26cea14 100644
--- a/src/dhcp-manager/tests/Makefile.am
+++ b/src/dhcp-manager/tests/Makefile.am
@@ -8,7 +8,6 @@ AM_CPPFLAGS = \
 	-I$(top_srcdir)/src/platform \
 	-DG_LOG_DOMAIN=\""NetworkManager"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GLIB_CFLAGS) \
 	-DTESTDIR="\"$(abs_srcdir)\""
 
diff --git a/src/dhcp-manager/tests/Makefile.in b/src/dhcp-manager/tests/Makefile.in
index 3bc370b8..1a072c73 100644
--- a/src/dhcp-manager/tests/Makefile.in
+++ b/src/dhcp-manager/tests/Makefile.in
@@ -667,7 +667,6 @@ AM_CPPFLAGS = \
 	-I$(top_srcdir)/src/platform \
 	-DG_LOG_DOMAIN=\""NetworkManager"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GLIB_CFLAGS) \
 	-DTESTDIR="\"$(abs_srcdir)\""
 
diff --git a/src/dns-manager/nm-dns-manager.c b/src/dns-manager/nm-dns-manager.c
index ec83e600..b42af167 100644
--- a/src/dns-manager/nm-dns-manager.c
+++ b/src/dns-manager/nm-dns-manager.c
@@ -748,10 +748,10 @@ compute_hash (NMDnsManager *self, const NMGlobalDnsConfig *global, guint8 buffer
 
 	/* add any other configs we know about */
 	for (iter = priv->configs; iter; iter = g_slist_next (iter)) {
-		if (   (iter->data == priv->ip4_vpn_config)
-		    && (iter->data == priv->ip4_device_config)
-		    && (iter->data == priv->ip6_vpn_config)
-		    && (iter->data == priv->ip6_device_config))
+		if (NM_IN_SET (iter->data, priv->ip4_vpn_config,
+		                           priv->ip4_device_config,
+		                           priv->ip6_vpn_config,
+		                           priv->ip6_device_config))
 			continue;
 
 		if (NM_IS_IP4_CONFIG (iter->data))
@@ -792,10 +792,10 @@ build_plugin_config_lists (NMDnsManager *self,
 		*out_dev_configs = g_slist_append (*out_dev_configs, priv->ip6_device_config);
 
 	for (iter = priv->configs; iter; iter = g_slist_next (iter)) {
-		if (   (iter->data != priv->ip4_vpn_config)
-		    && (iter->data != priv->ip4_device_config)
-		    && (iter->data != priv->ip6_vpn_config)
-		    && (iter->data != priv->ip6_device_config))
+		if (!NM_IN_SET (iter->data, priv->ip4_vpn_config,
+		                            priv->ip4_device_config,
+		                            priv->ip6_vpn_config,
+		                            priv->ip6_device_config))
 			*out_other_configs = g_slist_append (*out_other_configs, iter->data);
 	}
 }
@@ -891,10 +891,10 @@ update_dns (NMDnsManager *self,
 			merge_one_ip6_config (&rc, priv->ip6_device_config);
 
 		for (iter = priv->configs; iter; iter = g_slist_next (iter)) {
-			if (   (iter->data == priv->ip4_vpn_config)
-			    || (iter->data == priv->ip4_device_config)
-			    || (iter->data == priv->ip6_vpn_config)
-			    || (iter->data == priv->ip6_device_config))
+			if (NM_IN_SET (iter->data, priv->ip4_vpn_config,
+			                           priv->ip4_device_config,
+			                           priv->ip6_vpn_config,
+			                           priv->ip6_device_config))
 				continue;
 
 			if (NM_IS_IP4_CONFIG (iter->data)) {
@@ -1599,12 +1599,12 @@ nm_dns_manager_class_init (NMDnsManagerClass *klass)
 
 	/* signals */
 	signals[CONFIG_CHANGED] =
-		g_signal_new ("config-changed",
-		              G_OBJECT_CLASS_TYPE (object_class),
-		              G_SIGNAL_RUN_FIRST,
-		              G_STRUCT_OFFSET (NMDnsManagerClass, config_changed),
-		              NULL, NULL,
-		              g_cclosure_marshal_VOID__VOID,
-		              G_TYPE_NONE, 0);
+	    g_signal_new (NM_DNS_MANAGER_CONFIG_CHANGED,
+	                  G_OBJECT_CLASS_TYPE (object_class),
+	                  G_SIGNAL_RUN_FIRST,
+	                  G_STRUCT_OFFSET (NMDnsManagerClass, config_changed),
+	                  NULL, NULL,
+	                  g_cclosure_marshal_VOID__VOID,
+	                  G_TYPE_NONE, 0);
 }
 
diff --git a/src/dns-manager/nm-dns-manager.h b/src/dns-manager/nm-dns-manager.h
index dd5c9e98..f1293f7e 100644
--- a/src/dns-manager/nm-dns-manager.h
+++ b/src/dns-manager/nm-dns-manager.h
@@ -43,6 +43,8 @@ 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))
 
+#define NM_DNS_MANAGER_CONFIG_CHANGED "config-changed"
+
 typedef struct {
 	GObject parent;
 } NMDnsManager;
diff --git a/src/dnsmasq-manager/tests/Makefile.am b/src/dnsmasq-manager/tests/Makefile.am
index 2c5e8e40..6d7a2a92 100644
--- a/src/dnsmasq-manager/tests/Makefile.am
+++ b/src/dnsmasq-manager/tests/Makefile.am
@@ -8,7 +8,6 @@ AM_CPPFLAGS = \
 	-I$(top_srcdir)/src/platform \
 	-DG_LOG_DOMAIN=\""NetworkManager"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GLIB_CFLAGS) \
 	-DTESTDIR="\"$(abs_srcdir)\""
 
diff --git a/src/dnsmasq-manager/tests/Makefile.in b/src/dnsmasq-manager/tests/Makefile.in
index ff97e120..d6b57edb 100644
--- a/src/dnsmasq-manager/tests/Makefile.in
+++ b/src/dnsmasq-manager/tests/Makefile.in
@@ -661,7 +661,6 @@ AM_CPPFLAGS = \
 	-I$(top_srcdir)/src/platform \
 	-DG_LOG_DOMAIN=\""NetworkManager"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GLIB_CFLAGS) \
 	-DTESTDIR="\"$(abs_srcdir)\""
 
diff --git a/src/nm-auth-manager.c b/src/nm-auth-manager.c
index e2e22aca..531e2c35 100644
--- a/src/nm-auth-manager.c
+++ b/src/nm-auth-manager.c
@@ -264,7 +264,7 @@ nm_auth_manager_polkit_authority_check_authorization (NMAuthManager *self,
 	    : POLKIT_CHECK_AUTHORIZATION_FLAGS_NONE;
 
 	subject_value = nm_auth_subject_unix_process_to_polkit_gvariant (subject);
-	g_assert (g_variant_is_floating (subject_value));
+	nm_assert (g_variant_is_floating (subject_value));
 
 	/* ((PolkitDetails *)NULL) */
 	g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{ss}"));
diff --git a/src/nm-core-utils.c b/src/nm-core-utils.c
index b98b6e8a..6cdd00e0 100644
--- a/src/nm-core-utils.c
+++ b/src/nm-core-utils.c
@@ -2788,7 +2788,7 @@ nm_utils_ipv6_addr_set_stable_privacy (struct in6_addr *addr,
 		key_mask = umask (0077);
 		if (read (urandom, secret_key, key_len) == key_len) {
 			if (!g_file_set_contents (NMSTATEDIR "/secret_key", secret_key, key_len, error)) {
-				g_prefix_error (error, "Can't write " NMSTATEDIR "/secret_key");
+				g_prefix_error (error, "Can't write " NMSTATEDIR "/secret_key: ");
 				key_len = 0;
 			}
 		} else {
diff --git a/src/nm-enum-types.c b/src/nm-enum-types.c
index 66d6c9b3..b3c82c63 100644
--- a/src/nm-enum-types.c
+++ b/src/nm-enum-types.c
@@ -39,11 +39,11 @@
 #include "nm-dnsmasq-manager.h" 
 #include "nm-dnsmasq-utils.h" 
 #include "nmp-netns.h" 
-#include "nm-fake-platform.h" 
-#include "nm-linux-platform.h" 
-#include "nm-platform.h" 
-#include "nm-platform-utils.h" 
 #include "nmp-object.h" 
+#include "nm-platform-utils.h" 
+#include "nm-platform.h" 
+#include "nm-linux-platform.h" 
+#include "nm-fake-platform.h" 
 #include "wifi-utils-nl80211.h" 
 #include "wifi-utils.h" 
 #include "nm-fake-rdisc.h" 
diff --git a/src/nm-exported-object.c b/src/nm-exported-object.c
index b6d30aab..10f7d23f 100644
--- a/src/nm-exported-object.c
+++ b/src/nm-exported-object.c
@@ -15,40 +15,44 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * Copyright 2014-2015 Red Hat, Inc.
+ * Copyright 2014-2016 Red Hat, Inc.
  */
 
 #include "nm-default.h"
 
+#include "nm-exported-object.h"
+
 #include <stdarg.h>
 #include <string.h>
 
-#include "nm-exported-object.h"
 #include "nm-bus-manager.h"
 
-static GHashTable *prefix_counters;
-static gboolean quitting = FALSE;
-
-
 #if NM_MORE_ASSERTS >= 2
 #define _ASSERT_NO_EARLY_EXPORT
 #endif
 
-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (NMExportedObject, nm_exported_object, G_TYPE_DBUS_OBJECT_SKELETON,
-                                  prefix_counters = g_hash_table_new (g_str_hash, g_str_equal);
-                                  )
+static gboolean quitting = FALSE;
+
+G_DEFINE_ABSTRACT_TYPE (NMExportedObject, nm_exported_object, G_TYPE_DBUS_OBJECT_SKELETON);
 
 typedef struct {
-	GSList *interfaces;
+	GDBusInterfaceSkeleton *interface;
+	guint property_changed_signal_id;
+} InterfaceData;
 
+typedef struct {
 	NMBusManager *bus_mgr;
 	char *path;
 
-	GVariantBuilder pending_notifies;
+	GHashTable *pending_notifies;
+
+	InterfaceData *interfaces;
+	guint num_interfaces;
+
 	guint notify_idle_id;
 
 #ifdef _ASSERT_NO_EARLY_EXPORT
-	gboolean _constructed;
+	bool _constructed:1;
 #endif
 } NMExportedObjectPrivate;
 
@@ -147,23 +151,25 @@ nm_exported_object_signal_hook (GSignalInvocationHint *ihint,
 	NMExportedObjectPrivate *priv;
 	GSignalQuery *signal_info = data;
 	GDBusInterfaceSkeleton *interface = NULL;
-	GSList *iter;
 	GValue *dbus_param_values;
-	int i;
+	guint i;
 
 	priv = NM_EXPORTED_OBJECT_GET_PRIVATE (self);
 	if (!priv->path)
 		return TRUE;
 
-	for (iter = priv->interfaces; iter; iter = iter->next) {
-		if (g_type_is_a (G_OBJECT_TYPE (iter->data), signal_info->itype)) {
-			interface = G_DBUS_INTERFACE_SKELETON (iter->data);
+	for (i = 0; i < priv->num_interfaces; i++) {
+		InterfaceData *ifdata = &priv->interfaces[i];
+
+		if (g_type_is_a (G_OBJECT_TYPE (ifdata->interface), signal_info->itype)) {
+			interface = ifdata->interface;
 			break;
 		}
 	}
 	g_return_val_if_fail (interface != NULL, TRUE);
 
-	dbus_param_values = g_new0 (GValue, n_param_values);
+	dbus_param_values = g_newa (GValue, n_param_values);
+	memset (dbus_param_values, 0, sizeof (GValue) * n_param_values);
 	g_value_init (&dbus_param_values[0], G_OBJECT_TYPE (interface));
 	g_value_set_object (&dbus_param_values[0], interface);
 	for (i = 1; i < n_param_values; i++) {
@@ -185,7 +191,6 @@ nm_exported_object_signal_hook (GSignalInvocationHint *ihint,
 
 	for (i = 0; i < n_param_values; i++)
 		g_value_unset (&dbus_param_values[i]);
-	g_free (dbus_param_values);
 
 	return TRUE;
 }
@@ -342,6 +347,8 @@ nm_exported_object_class_add_interface (NMExportedObjectClass *object_class,
 	g_type_class_unref (dbus_object_class);
 }
 
+/*****************************************************************************/
+
 /* "meta-marshaller" that receives the skeleton "handle-foo" signal, replaces
  * the skeleton object with an #NMExportedObject in the parameters, drops the
  * user_data parameter, and adds a "TRUE" return value (indicating to gdbus that
@@ -452,9 +459,10 @@ nm_exported_object_create_skeletons (NMExportedObject *self,
 	GObjectClass *object_class;
 	NMExportedObjectClassInfo *classinfo;
 	GSList *iter;
-	GDBusInterfaceSkeleton *interface;
 	const NMExportedObjectDBusMethodImpl *methods;
-	guint methods_len;
+	guint i, methods_len;
+	guint num_interfaces;
+	InterfaceData *interfaces;
 
 	classinfo = g_type_get_qdata (object_type, nm_exported_object_class_info_quark ());
 	if (!classinfo)
@@ -466,17 +474,32 @@ nm_exported_object_create_skeletons (NMExportedObject *self,
 	methods = classinfo->methods->len ? &g_array_index (classinfo->methods, NMExportedObjectDBusMethodImpl, 0) : NULL;
 	methods_len = classinfo->methods->len;
 
-	for (iter = classinfo->skeleton_types; iter; iter = iter->next) {
-		interface = nm_exported_object_skeleton_create (GPOINTER_TO_SIZE (iter->data),
-		                                                object_class,
-		                                                methods,
-		                                                methods_len,
-		                                                (GObject *) self);
+	num_interfaces = g_slist_length (classinfo->skeleton_types);
+	g_return_if_fail (num_interfaces > 0);
+
+	interfaces = g_slice_alloc (sizeof (InterfaceData) * (num_interfaces + priv->num_interfaces));
 
-		g_dbus_object_skeleton_add_interface ((GDBusObjectSkeleton *) self, interface);
+	for (i = num_interfaces, iter = classinfo->skeleton_types; iter; iter = iter->next) {
+		InterfaceData *ifdata = &interfaces[--i];
+
+		ifdata->interface = nm_exported_object_skeleton_create (GPOINTER_TO_SIZE (iter->data),
+		                                                        object_class,
+		                                                        methods,
+		                                                        methods_len,
+		                                                        (GObject *) self);
+		g_dbus_object_skeleton_add_interface ((GDBusObjectSkeleton *) self, ifdata->interface);
+
+		ifdata->property_changed_signal_id = g_signal_lookup ("properties-changed", G_OBJECT_TYPE (ifdata->interface));
+	}
+	nm_assert (i == 0);
 
-		priv->interfaces = g_slist_prepend (priv->interfaces, interface);
+	if (priv->num_interfaces > 0) {
+		memcpy (&interfaces[num_interfaces], priv->interfaces, sizeof (InterfaceData) * priv->num_interfaces);
+		g_slice_free1 (sizeof (InterfaceData) * priv->num_interfaces, priv->interfaces);
 	}
+
+	priv->num_interfaces = num_interfaces + priv->num_interfaces;
+	priv->interfaces = interfaces;
 }
 
 void
@@ -505,16 +528,85 @@ static void
 nm_exported_object_destroy_skeletons (NMExportedObject *self)
 {
 	NMExportedObjectPrivate *priv = NM_EXPORTED_OBJECT_GET_PRIVATE (self);
+	guint n;
+
+	g_return_if_fail (priv->num_interfaces > 0);
+	nm_assert (priv->interfaces);
+
+	n = priv->num_interfaces;
+
+	while (priv->num_interfaces > 0) {
+		InterfaceData *ifdata = &priv->interfaces[--priv->num_interfaces];
+
+		g_dbus_object_skeleton_remove_interface ((GDBusObjectSkeleton *) self, ifdata->interface);
+		nm_exported_object_skeleton_release (ifdata->interface);
+	}
 
-	g_return_if_fail (priv->interfaces);
+	g_slice_free1 (sizeof (InterfaceData) * n, priv->interfaces);
+	priv->interfaces = NULL;
+}
+
+static char *
+_create_export_path (NMExportedObjectClass *klass)
+{
+	const char *class_export_path, *p;
+	static GHashTable *prefix_counters;
+	guint *counter;
+
+	class_export_path = klass->export_path;
+
+	nm_assert (class_export_path);
 
-	while (priv->interfaces) {
-		GDBusInterfaceSkeleton *interface = priv->interfaces->data;
+	p = strchr (class_export_path, '%');
+	if (p) {
+		if (G_UNLIKELY (!prefix_counters))
+			prefix_counters = g_hash_table_new (g_str_hash, g_str_equal);
 
-		priv->interfaces = g_slist_delete_link (priv->interfaces, priv->interfaces);
-		g_dbus_object_skeleton_remove_interface ((GDBusObjectSkeleton *) self, interface);
-		nm_exported_object_skeleton_release (interface);
+		g_assert (p[1] == 'u');
+		g_assert (strchr (p + 1, '%') == NULL);
+
+		counter = g_hash_table_lookup (prefix_counters, class_export_path);
+		if (!counter) {
+			counter = g_slice_new0 (guint);
+			g_hash_table_insert (prefix_counters, g_strdup (class_export_path), counter);
+		}
+
+		return g_strdup_printf (class_export_path, (*counter)++);
 	}
+
+	return g_strdup (class_export_path);
+}
+
+/**
+ * nm_exported_object_get_path:
+ * @self: an #NMExportedObject
+ *
+ * Gets @self's D-Bus path.
+ *
+ * Returns: @self's D-Bus path, or %NULL if @self is not exported.
+ */
+const char *
+nm_exported_object_get_path (NMExportedObject *self)
+{
+	g_return_val_if_fail (NM_IS_EXPORTED_OBJECT (self), NULL);
+
+	return NM_EXPORTED_OBJECT_GET_PRIVATE (self)->path;
+}
+
+/**
+ * nm_exported_object_is_exported:
+ * @self: an #NMExportedObject
+ *
+ * Checks if @self is exported
+ *
+ * Returns: %TRUE if @self is exported
+ */
+gboolean
+nm_exported_object_is_exported (NMExportedObject *self)
+{
+	g_return_val_if_fail (NM_IS_EXPORTED_OBJECT (self), FALSE);
+
+	return NM_EXPORTED_OBJECT_GET_PRIVATE (self)->path != NULL;
 }
 
 /**
@@ -535,9 +627,7 @@ const char *
 nm_exported_object_export (NMExportedObject *self)
 {
 	NMExportedObjectPrivate *priv;
-	const char *class_export_path, *p;
 	GType type;
-	char *path;
 
 	g_return_val_if_fail (NM_IS_EXPORTED_OBJECT (self), NULL);
 	priv = NM_EXPORTED_OBJECT_GET_PRIVATE (self);
@@ -554,31 +644,14 @@ nm_exported_object_export (NMExportedObject *self)
 		g_return_val_if_reached (NULL);
 	g_object_add_weak_pointer ((GObject *) priv->bus_mgr, (gpointer *) &priv->bus_mgr);
 
-	class_export_path = NM_EXPORTED_OBJECT_GET_CLASS (self)->export_path;
-	p = strchr (class_export_path, '%');
-	if (p) {
-		guint *counter;
-
-		g_return_val_if_fail (p[1] == 'u', NULL);
-		g_return_val_if_fail (strchr (p + 1, '%') == NULL, NULL);
-
-		counter = g_hash_table_lookup (prefix_counters, class_export_path);
-		if (!counter) {
-			counter = g_new0 (guint, 1);
-			g_hash_table_insert (prefix_counters, g_strdup (class_export_path), counter);
-		}
-
-		path = g_strdup_printf (class_export_path, (*counter)++);
-	} else
-		path = g_strdup (class_export_path);
-
 	type = G_OBJECT_TYPE (self);
 	while (type != NM_TYPE_EXPORTED_OBJECT) {
 		nm_exported_object_create_skeletons (self, type);
 		type = g_type_parent (type);
 	}
 
-	priv->path = path;
+	priv->path = _create_export_path (NM_EXPORTED_OBJECT_GET_CLASS (self));
+
 	_LOGT ("export: \"%s\"", priv->path);
 	g_dbus_object_skeleton_set_object_path (G_DBUS_OBJECT_SKELETON (self), priv->path);
 
@@ -591,38 +664,6 @@ nm_exported_object_export (NMExportedObject *self)
 }
 
 /**
- * nm_exported_object_get_path:
- * @self: an #NMExportedObject
- *
- * Gets @self's D-Bus path.
- *
- * Returns: @self's D-Bus path, or %NULL if @self is not exported.
- */
-const char *
-nm_exported_object_get_path (NMExportedObject *self)
-{
-	g_return_val_if_fail (NM_IS_EXPORTED_OBJECT (self), NULL);
-
-	return NM_EXPORTED_OBJECT_GET_PRIVATE (self)->path;
-}
-
-/**
- * nm_exported_object_is_exported:
- * @self: an #NMExportedObject
- *
- * Checks if @self is exported
- *
- * Returns: %TRUE if @self is exported
- */
-gboolean
-nm_exported_object_is_exported (NMExportedObject *self)
-{
-	g_return_val_if_fail (NM_IS_EXPORTED_OBJECT (self), FALSE);
-
-	return NM_EXPORTED_OBJECT_GET_PRIVATE (self)->path != NULL;
-}
-
-/**
  * nm_exported_object_unexport:
  * @self: an #NMExportedObject
  *
@@ -659,38 +700,11 @@ nm_exported_object_unexport (NMExportedObject *self)
 	if (nm_clear_g_source (&priv->notify_idle_id)) {
 		/* We had a notification queued. Since we removed all interfaces,
 		 * the notification is obsolete and must be cleaned up. */
-		g_variant_builder_clear (&priv->pending_notifies);
-		g_variant_builder_init (&priv->pending_notifies, G_VARIANT_TYPE_VARDICT);
+		g_hash_table_remove_all (priv->pending_notifies);
 	}
 }
 
-GSList *
-nm_exported_object_get_interfaces (NMExportedObject *self)
-{
-	NMExportedObjectPrivate *priv;
-
-	g_return_val_if_fail (NM_IS_EXPORTED_OBJECT (self), NULL);
-
-	priv = NM_EXPORTED_OBJECT_GET_PRIVATE (self);
-
-	g_return_val_if_fail (priv->path, NULL);
-	g_return_val_if_fail (priv->interfaces, NULL);
-
-	return priv->interfaces;
-}
-
-GDBusInterfaceSkeleton *
-nm_exported_object_get_interface_by_type (NMExportedObject *self, GType interface_type)
-{
-	GSList *interfaces;
-
-	interfaces = nm_exported_object_get_interfaces (self);
-	for (; interfaces; interfaces = interfaces->next) {
-		if (G_TYPE_CHECK_INSTANCE_TYPE (interfaces->data, interface_type))
-			return interfaces->data;
-	}
-	return NULL;
-}
+/*****************************************************************************/
 
 void
 _nm_exported_object_clear_and_unexport (NMExportedObject **location)
@@ -714,68 +728,107 @@ _nm_exported_object_clear_and_unexport (NMExportedObject **location)
 	g_object_unref (self);
 }
 
-static void
-nm_exported_object_init (NMExportedObject *self)
+/*****************************************************************************/
+
+GDBusInterfaceSkeleton *
+nm_exported_object_get_interface_by_type (NMExportedObject *self, GType interface_type)
 {
-	NMExportedObjectPrivate *priv = NM_EXPORTED_OBJECT_GET_PRIVATE (self);
+	NMExportedObjectPrivate *priv;
+	guint i;
 
-	g_variant_builder_init (&priv->pending_notifies, G_VARIANT_TYPE_VARDICT);
+	g_return_val_if_fail (NM_IS_EXPORTED_OBJECT (self), NULL);
+
+	priv = NM_EXPORTED_OBJECT_GET_PRIVATE (self);
+
+	g_return_val_if_fail (priv->path, NULL);
+	g_return_val_if_fail (priv->num_interfaces > 0, NULL);
+
+	nm_assert (priv->interfaces);
+
+	for (i = 0; i < priv->num_interfaces; i++) {
+		InterfaceData *ifdata = &priv->interfaces[i];
+
+		if (G_TYPE_CHECK_INSTANCE_TYPE (ifdata->interface, interface_type))
+			return ifdata->interface;
+	}
+	return NULL;
+}
+
+/*****************************************************************************/
+
+void
+nm_exported_object_class_set_quitting (void)
+{
+	quitting = TRUE;
+}
+
+/*****************************************************************************/
+
+typedef struct {
+	const char *property_name;
+	GVariant *variant;
+} PendingNotifiesItem;
+
+static int
+_sort_pending_notifies (gconstpointer a, gconstpointer b, gpointer       user_data)
+{
+	return strcmp (((const PendingNotifiesItem *) a)->property_name,
+	               ((const PendingNotifiesItem *) b)->property_name);
 }
 
 static gboolean
 idle_emit_properties_changed (gpointer self)
 {
 	NMExportedObjectPrivate *priv = NM_EXPORTED_OBJECT_GET_PRIVATE (self);
-	GVariant *notifies;
-	GSList *iter;
-	GDBusInterfaceSkeleton *interface = NULL;
-	guint signal_id = 0;
+	gs_unref_variant GVariant *variant = NULL;
+	InterfaceData *ifdata = NULL;
+	GHashTableIter hash_iter;
+	GVariantBuilder notifies;
+	guint i, n;
+	PendingNotifiesItem *values;
 
 	priv->notify_idle_id = 0;
-	notifies = g_variant_builder_end (&priv->pending_notifies);
-	g_variant_ref_sink (notifies);
-	g_variant_builder_init (&priv->pending_notifies, G_VARIANT_TYPE_VARDICT);
-
-	for (iter = priv->interfaces; iter; iter = iter->next) {
-		signal_id = g_signal_lookup ("properties-changed", G_OBJECT_TYPE (iter->data));
-		if (signal_id != 0) {
-			interface = G_DBUS_INTERFACE_SKELETON (iter->data);
+
+
+	n = g_hash_table_size (priv->pending_notifies);
+	g_return_val_if_fail (n > 0, FALSE);
+
+	values = g_alloca (sizeof (values[0]) * n);
+
+	i = 0;
+	g_hash_table_iter_init (&hash_iter, priv->pending_notifies);
+	while (g_hash_table_iter_next (&hash_iter, (gpointer) &values[i].property_name, (gpointer) &values[i].variant))
+		i++;
+	nm_assert (i == n);
+
+	g_qsort_with_data (values, n, sizeof (values[0]), _sort_pending_notifies, NULL);
+
+	g_variant_builder_init (&notifies, G_VARIANT_TYPE_VARDICT);
+	for (i = 0; i < n; i++)
+		g_variant_builder_add (&notifies, "{sv}", values[i].property_name, values[i].variant);
+	variant = g_variant_ref_sink (g_variant_builder_end (&notifies));
+
+	g_hash_table_remove_all (priv->pending_notifies);
+
+	for (i = 0; i < priv->num_interfaces; i++) {
+		if (priv->interfaces[i].property_changed_signal_id != 0) {
+			ifdata = &priv->interfaces[i];
 			break;
 		}
 	}
-	g_return_val_if_fail (signal_id != 0, FALSE);
+	g_return_val_if_fail (ifdata, FALSE);
 
 	if (nm_logging_enabled (LOGL_DEBUG, LOGD_DBUS_PROPS)) {
-		char *notification;
+		gs_free char *notification = g_variant_print (variant, TRUE);
 
-		notification = g_variant_print (notifies, TRUE);
 		nm_log_dbg (LOGD_DBUS_PROPS, "PropertiesChanged %s %p: %s",
 		            G_OBJECT_TYPE_NAME (self), self, notification);
-		g_free (notification);
 	}
 
-	g_signal_emit (interface, signal_id, 0, notifies);
-	g_variant_unref (notifies);
-
+	g_signal_emit (ifdata->interface, ifdata->property_changed_signal_id, 0, variant);
 	return FALSE;
 }
 
-static const GVariantType *
-find_dbus_property_type (GDBusInterfaceSkeleton *skel,
-                         const char *dbus_property_name)
-{
-	GDBusInterfaceInfo *iinfo;
-	int i;
-
-	iinfo = g_dbus_interface_skeleton_get_info (skel);
-	for (i = 0; iinfo->properties[i]; i++) {
-		if (!strcmp (iinfo->properties[i]->name, dbus_property_name))
-			return G_VARIANT_TYPE (iinfo->properties[i]->signature);
-	}
-
-	return NULL;
-}
-
 static void
 nm_exported_object_notify (GObject *object, GParamSpec *pspec)
 {
@@ -785,10 +838,9 @@ nm_exported_object_notify (GObject *object, GParamSpec *pspec)
 	const char *dbus_property_name = NULL;
 	GValue value = G_VALUE_INIT;
 	const GVariantType *vtype;
-	GVariant *variant;
-	GSList *iter;
+	guint i, j;
 
-	if (!priv->interfaces)
+	if (priv->num_interfaces == 0)
 		return;
 
 	for (type = G_OBJECT_TYPE (object); type; type = g_type_parent (type)) {
@@ -806,25 +858,48 @@ nm_exported_object_notify (GObject *object, GParamSpec *pspec)
 		return;
 	}
 
+	for (i = 0; i < priv->num_interfaces; i++) {
+		GDBusInterfaceSkeleton *skel = priv->interfaces[i].interface;
+		GDBusInterfaceInfo *iinfo;
+
+		iinfo = g_dbus_interface_skeleton_get_info (skel);
+		for (j = 0; iinfo->properties[j]; j++) {
+			if (nm_streq (iinfo->properties[j]->name, dbus_property_name)) {
+				vtype = G_VARIANT_TYPE (iinfo->properties[j]->signature);
+				goto vtype_found;
+			}
+		}
+	}
+	g_return_if_reached ();
+
+vtype_found:
 	g_value_init (&value, pspec->value_type);
 	g_object_get_property (G_OBJECT (object), pspec->name, &value);
 
-	vtype = NULL;
-	for (iter = priv->interfaces; iter && !vtype; iter = iter->next)
-		vtype = find_dbus_property_type (iter->data, dbus_property_name);
-	g_return_if_fail (vtype != NULL);
-
-	variant = g_dbus_gvalue_to_gvariant (&value, vtype);
-	g_variant_builder_add (&priv->pending_notifies, "{sv}",
-	                       dbus_property_name,
-	                       variant);
+	/* @dbus_property_name is inside classinfo and never freed, thus we don't clone it.
+	 * Also, we do a pointer, not string comparison. */
+	g_hash_table_insert (priv->pending_notifies,
+	                     (gpointer) dbus_property_name,
+	                     g_dbus_gvalue_to_gvariant (&value, vtype));
 	g_value_unset (&value);
-	g_variant_unref (variant);
 
 	if (!priv->notify_idle_id)
 		priv->notify_idle_id = g_idle_add (idle_emit_properties_changed, object);
 }
 
+/*****************************************************************************/
+
+static void
+nm_exported_object_init (NMExportedObject *self)
+{
+	NMExportedObjectPrivate *priv = NM_EXPORTED_OBJECT_GET_PRIVATE (self);
+
+	priv->pending_notifies = g_hash_table_new_full (g_direct_hash,
+	                                                g_direct_equal,
+	                                                NULL,
+	                                                (GDestroyNotify) g_variant_unref);
+}
+
 static void
 constructed (GObject *object)
 {
@@ -858,7 +933,7 @@ nm_exported_object_dispose (GObject *object)
 	} else
 		g_clear_pointer (&priv->path, g_free);
 
-	g_variant_builder_clear (&priv->pending_notifies);
+	g_clear_pointer (&priv->pending_notifies, g_hash_table_destroy);
 	nm_clear_g_source (&priv->notify_idle_id);
 
 	G_OBJECT_CLASS (nm_exported_object_parent_class)->dispose (object);
@@ -876,9 +951,4 @@ nm_exported_object_class_init (NMExportedObjectClass *klass)
 	object_class->dispose = nm_exported_object_dispose;
 }
 
-void
-nm_exported_object_class_set_quitting (void)
-{
-	quitting = TRUE;
-}
 
diff --git a/src/nm-exported-object.h b/src/nm-exported-object.h
index 88efb6fe..c2c22804 100644
--- a/src/nm-exported-object.h
+++ b/src/nm-exported-object.h
@@ -74,7 +74,6 @@ const char *nm_exported_object_export      (NMExportedObject *self);
 const char *nm_exported_object_get_path    (NMExportedObject *self);
 gboolean    nm_exported_object_is_exported (NMExportedObject *self);
 void        nm_exported_object_unexport    (NMExportedObject *self);
-GSList *    nm_exported_object_get_interfaces (NMExportedObject *self);
 GDBusInterfaceSkeleton *nm_exported_object_get_interface_by_type (NMExportedObject *self, GType interface_type);
 
 void        _nm_exported_object_clear_and_unexport (NMExportedObject **location);
diff --git a/src/nm-firewall-manager.c b/src/nm-firewall-manager.c
index 7babff3c..f1d0170b 100644
--- a/src/nm-firewall-manager.c
+++ b/src/nm-firewall-manager.c
@@ -520,7 +520,7 @@ nm_firewall_manager_class_init (NMFirewallManagerClass *klass)
 	                           G_PARAM_STATIC_STRINGS));
 
 	signals[STARTED] =
-	    g_signal_new ("started",
+	    g_signal_new (NM_FIREWALL_MANAGER_STARTED,
 	                  G_OBJECT_CLASS_TYPE (object_class),
 	                  G_SIGNAL_RUN_FIRST,
 	                  G_STRUCT_OFFSET (NMFirewallManagerClass, started),
diff --git a/src/nm-firewall-manager.h b/src/nm-firewall-manager.h
index dfa83b45..a08ac8b8 100644
--- a/src/nm-firewall-manager.h
+++ b/src/nm-firewall-manager.h
@@ -40,6 +40,8 @@ G_BEGIN_DECLS
 
 #define NM_FIREWALL_MANAGER_AVAILABLE "available"
 
+#define NM_FIREWALL_MANAGER_STARTED "started"
+
 struct _NMFirewallManagerCallId;
 typedef struct _NMFirewallManagerCallId *NMFirewallManagerCallId;
 
diff --git a/src/nm-manager.c b/src/nm-manager.c
index dc394a49..289a91d6 100644
--- a/src/nm-manager.c
+++ b/src/nm-manager.c
@@ -154,7 +154,6 @@ enum {
 	INTERNAL_DEVICE_REMOVED,
 	STATE_CHANGED,
 	CHECK_PERMISSIONS,
-	USER_PERMISSIONS_CHANGED,
 	ACTIVE_CONNECTION_ADDED,
 	ACTIVE_CONNECTION_REMOVED,
 	CONFIGURE_QUIT,
@@ -164,8 +163,7 @@ enum {
 
 static guint signals[LAST_SIGNAL] = { 0 };
 
-enum {
-	PROP_0,
+NM_GOBJECT_PROPERTIES_DEFINE (NMManager,
 	PROP_VERSION,
 	PROP_STATE,
 	PROP_STATE_FILE,
@@ -190,9 +188,7 @@ enum {
 	/* Not exported */
 	PROP_HOSTNAME,
 	PROP_SLEEPING,
-
-	LAST_PROP
-};
+);
 
 NM_DEFINE_SINGLETON_INSTANCE (NMManager);
 
@@ -287,7 +283,7 @@ _active_connection_cleanup (gpointer user_data)
 		iter = iter->next;
 		if (nm_active_connection_get_state (ac) == NM_ACTIVE_CONNECTION_STATE_DEACTIVATED) {
 			if (active_connection_remove (self, ac))
-				g_object_notify (G_OBJECT (self), NM_MANAGER_ACTIVE_CONNECTIONS);
+				_notify (self, PROP_ACTIVE_CONNECTIONS);
 		}
 	}
 	g_object_thaw_notify (G_OBJECT (self));
@@ -359,7 +355,7 @@ active_connection_add (NMManager *self, NMActiveConnection *active)
 
 	/* Only notify D-Bus if the active connection is actually exported */
 	if (nm_exported_object_is_exported (NM_EXPORTED_OBJECT (active)))
-		g_object_notify (G_OBJECT (self), NM_MANAGER_ACTIVE_CONNECTIONS);
+		_notify (self, PROP_ACTIVE_CONNECTIONS);
 }
 
 const GSList *
@@ -458,7 +454,7 @@ _config_changed_cb (NMConfig *config, NMConfigData *config_data, NMConfigChangeF
 	              NULL);
 
 	if (NM_FLAGS_HAS (changes, NM_CONFIG_CHANGE_GLOBAL_DNS_CONFIG))
-		g_object_notify (G_OBJECT (self), NM_MANAGER_GLOBAL_DNS_CONFIGURATION);
+		_notify (self, PROP_GLOBAL_DNS_CONFIGURATION);
 }
 
 /************************************************************************/
@@ -622,7 +618,7 @@ set_state (NMManager *self, NMState state)
 
 	_LOGI (LOGD_CORE, "NetworkManager state is now %s", _nm_state_to_string (state));
 
-	g_object_notify (G_OBJECT (self), NM_MANAGER_STATE);
+	_notify (self, PROP_STATE);
 	g_signal_emit (self, signals[STATE_CHANGED], 0, priv->state);
 }
 
@@ -641,7 +637,7 @@ checked_connectivity (GObject *object, GAsyncResult *result, gpointer user_data)
 		else if (   connectivity == NM_CONNECTIVITY_PORTAL
 		         || connectivity == NM_CONNECTIVITY_LIMITED)
 			set_state (manager, NM_STATE_CONNECTED_SITE);
-		g_object_notify (G_OBJECT (manager), NM_MANAGER_CONNECTIVITY);
+		_notify (manager, PROP_CONNECTIVITY);
 	}
 
 	g_object_unref (manager);
@@ -710,7 +706,7 @@ nm_manager_update_metered (NMManager *self)
 	if (value != priv->metered) {
 		priv->metered = value;
 		_LOGD (LOGD_CORE, "new metered value: %d", (int) priv->metered);
-		g_object_notify (G_OBJECT (self), NM_MANAGER_METERED);
+		_notify (self, PROP_METERED);
 	}
 }
 
@@ -756,7 +752,7 @@ manager_device_state_changed (NMDevice *device,
 	case NM_DEVICE_STATE_DISCONNECTED:
 	case NM_DEVICE_STATE_PREPARE:
 	case NM_DEVICE_STATE_FAILED:
-		g_object_notify (G_OBJECT (self), NM_MANAGER_ACTIVE_CONNECTIONS);
+		_notify (self, PROP_ACTIVE_CONNECTIONS);
 		break;
 	default:
 		break;
@@ -801,7 +797,7 @@ check_if_startup_complete (NMManager *self)
 	_LOGI (LOGD_CORE, "startup complete");
 
 	priv->startup = FALSE;
-	g_object_notify (G_OBJECT (self), "startup");
+	_notify (self, PROP_STARTUP);
 
 	/* We don't have to watch notify::has-pending-action any more. */
 	for (iter = priv->devices; iter; iter = iter->next) {
@@ -873,12 +869,13 @@ remove_device (NMManager *self,
 	priv->devices = g_slist_remove (priv->devices, device);
 
 	if (nm_device_is_real (device)) {
-		g_signal_emit (self, signals[DEVICE_REMOVED], 0, device);
-		g_object_notify (G_OBJECT (self), NM_MANAGER_DEVICES);
 		nm_device_removed (device);
+
+		g_signal_emit (self, signals[DEVICE_REMOVED], 0, device);
+		_notify (self, PROP_DEVICES);
 	}
 	g_signal_emit (self, signals[INTERNAL_DEVICE_REMOVED], 0, device);
-	g_object_notify (G_OBJECT (self), NM_MANAGER_ALL_DEVICES);
+	_notify (self, PROP_ALL_DEVICES);
 
 	nm_exported_object_clear_and_unexport (&device);
 
@@ -1234,7 +1231,7 @@ system_hostname_changed_cb (NMSettings *settings,
 
 	g_free (priv->hostname);
 	priv->hostname = hostname;
-	g_object_notify (G_OBJECT (self), NM_MANAGER_HOSTNAME);
+	_notify (self, PROP_HOSTNAME);
 
 	nm_dhcp_manager_set_default_hostname (nm_dhcp_manager_get (), priv->hostname);
 }
@@ -1798,7 +1795,7 @@ device_realized (NMDevice *device,
 {
 	/* Emit D-Bus signals */
 	g_signal_emit (self, signals[DEVICE_ADDED], 0, device);
-	g_object_notify (G_OBJECT (self), NM_MANAGER_DEVICES);
+	_notify (self, PROP_DEVICES);
 }
 
 static void
@@ -1930,7 +1927,7 @@ add_device (NMManager *self, NMDevice *device, GError **error)
 
 	nm_settings_device_added (priv->settings, device);
 	g_signal_emit (self, signals[INTERNAL_DEVICE_ADDED], 0, device);
-	g_object_notify (G_OBJECT (self), NM_MANAGER_ALL_DEVICES);
+	_notify (self, PROP_ALL_DEVICES);
 
 	for (iter = priv->devices; iter; iter = iter->next) {
 		NMDevice *d = iter->data;
@@ -2009,7 +2006,6 @@ platform_link_added (NMManager *self,
 {
 	NMDeviceFactory *factory;
 	NMDevice *device = NULL;
-	GError *error = NULL;
 	gboolean nm_plugin_missing = FALSE;
 	GSList *iter;
 
@@ -2022,6 +2018,7 @@ platform_link_added (NMManager *self,
 	for (iter = NM_MANAGER_GET_PRIVATE (self)->devices; iter; iter = iter->next) {
 		NMDevice *candidate = iter->data;
 		gboolean compatible = TRUE;
+		gs_free_error GError *error = NULL;
 
 		if (strcmp (nm_device_get_iface (candidate), plink->name))
 			continue;
@@ -2039,7 +2036,6 @@ platform_link_added (NMManager *self,
 
 		_LOGD (LOGD_DEVICE, "(%s): failed to realize from plink: '%s'",
 		       plink->name, error->message);
-		g_clear_error (&error);
 
 		/* Try next unrealized device */
 	}
@@ -2048,13 +2044,13 @@ platform_link_added (NMManager *self,
 	factory = nm_device_factory_manager_find_factory_for_link_type (plink->type);
 	if (factory) {
 		gboolean ignore = FALSE;
+		gs_free_error GError *error = NULL;
 
 		device = nm_device_factory_create_device (factory, plink->name, plink, NULL, &ignore, &error);
 		if (!device) {
 			if (!ignore) {
 				_LOGW (LOGD_HW, "%s: factory failed to create device: %s",
 				       plink->name, error->message);
-				g_clear_error (&error);
 			}
 			return;
 		}
@@ -2078,6 +2074,8 @@ platform_link_added (NMManager *self,
 	}
 
 	if (device) {
+		gs_free_error GError *error = NULL;
+
 		if (nm_plugin_missing)
 			nm_device_set_nm_plugin_missing (device, TRUE);
 		if (nm_device_realize_start (device, plink, NULL, &error)) {
@@ -2086,7 +2084,6 @@ platform_link_added (NMManager *self,
 		} else {
 			_LOGW (LOGD_DEVICE, "%s: failed to realize device: %s",
 			       plink->name, error->message);
-			g_clear_error (&error);
 		}
 		g_object_unref (device);
 	}
@@ -2389,9 +2386,8 @@ find_master (NMManager *self,
 		master_connection = nm_device_get_settings_connection (master_device);
 		if (master_connection && !is_compatible_with_slave (NM_CONNECTION (master_connection), connection)) {
 			g_set_error (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_DEPENDENCY_FAILED,
-			             "The active connection on %s is not a valid master for '%s'",
-			             nm_device_get_iface (master_device),
-			             nm_connection_get_id (connection));
+			             "The active connection on %s is not compatible",
+			             nm_device_get_iface (master_device));
 			return FALSE;
 		}
 	} else {
@@ -2486,8 +2482,7 @@ ensure_master_active_connection (NMManager *self,
 		g_assert (!master_connection || master_connection == device_connection);
 		if (device_connection && !is_compatible_with_slave (NM_CONNECTION (device_connection), connection)) {
 			g_set_error (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_DEPENDENCY_FAILED,
-			             "The active connection on %s is not a valid master for '%s'",
-			             nm_device_get_iface (master_device),
+			             "The active connection %s is not compatible",
 			             nm_connection_get_id (connection));
 			return NULL;
 		}
@@ -2526,8 +2521,6 @@ ensure_master_active_connection (NMManager *self,
 					                                            master_device,
 					                                            subject,
 					                                            error);
-					if (!master_ac)
-						g_prefix_error (error, "%s", "Master device activation failed: ");
 					g_slist_free (connections);
 					return master_ac;
 				}
@@ -2537,8 +2530,7 @@ ensure_master_active_connection (NMManager *self,
 			g_set_error (error,
 			             NM_MANAGER_ERROR,
 			             NM_MANAGER_ERROR_UNKNOWN_CONNECTION,
-			             "No compatible connection found for master device %s.",
-			             nm_device_get_iface (master_device));
+			             "No compatible connection found.");
 			return NULL;
 		}
 
@@ -2546,8 +2538,7 @@ ensure_master_active_connection (NMManager *self,
 		g_set_error (error,
 		             NM_MANAGER_ERROR,
 		             NM_MANAGER_ERROR_DEPENDENCY_FAILED,
-		             "Master device %s unmanaged or not available for activation",
-		             nm_device_get_iface (master_device));
+		             "Device unmanaged or not available for activation");
 	} else if (master_connection) {
 		gboolean found_device = FALSE;
 
@@ -2576,16 +2567,13 @@ ensure_master_active_connection (NMManager *self,
 			                                            candidate,
 			                                            subject,
 			                                            error);
-			if (!master_ac)
-				g_prefix_error (error, "%s", "Master device activation failed: ");
 			return master_ac;
 		}
 
 		g_set_error (error,
 		             NM_MANAGER_ERROR,
 		             NM_MANAGER_ERROR_UNKNOWN_DEVICE,
-		             "No compatible disconnected device found for master connection %s.",
-		             nm_settings_connection_get_uuid (master_connection));
+		             "No device available");
 	} else
 		g_assert_not_reached ();
 
@@ -2716,19 +2704,12 @@ autoconnect_slaves (NMManager *self,
 static gboolean
 _internal_activate_vpn (NMManager *self, NMActiveConnection *active, GError **error)
 {
-	gboolean success;
-
 	g_assert (NM_IS_VPN_CONNECTION (active));
 
 	nm_exported_object_export (NM_EXPORTED_OBJECT (active));
-	success = nm_vpn_manager_activate_connection (NM_MANAGER_GET_PRIVATE (self)->vpn_manager,
-	                                              NM_VPN_CONNECTION (active),
-	                                              error);
-	if (success)
-		g_object_notify (G_OBJECT (self), NM_MANAGER_ACTIVE_CONNECTIONS);
-	else
-		nm_exported_object_unexport (NM_EXPORTED_OBJECT (active));
-	return success;
+	return nm_vpn_manager_activate_connection (NM_MANAGER_GET_PRIVATE (self)->vpn_manager,
+	                                           NM_VPN_CONNECTION (active),
+	                                           error);
 }
 
 /* Traverse the device to disconnected state. This means that the device is ready
@@ -2890,8 +2871,11 @@ _internal_activate_device (NMManager *self, NMActiveConnection *active, GError *
 	/* Try to find the master connection/device if the connection has a dependency */
 	if (!find_master (self, applied, device,
 	                  &master_connection, &master_device, &master_ac,
-	                  error))
+	                  error)) {
+		g_prefix_error (error, "Can not find a master for %s: ",
+		                nm_settings_connection_get_id (connection));
 		return FALSE;
+	}
 
 	/* Ensure there's a master active connection the new connection we're
 	 * activating can depend on.
@@ -2910,8 +2894,10 @@ _internal_activate_device (NMManager *self, NMActiveConnection *active, GError *
 
 		/* Ensure eg bond slave and the candidate master is a bond master */
 		if (master_connection && !is_compatible_with_slave (NM_CONNECTION (master_connection), applied)) {
-			g_set_error_literal (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_DEPENDENCY_FAILED,
-			                     "The master connection was not compatible");
+			g_set_error (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_DEPENDENCY_FAILED,
+			             "The master connection '%s' is not compatible with '%s'",
+			             nm_settings_connection_get_id (master_connection),
+			             nm_settings_connection_get_id (connection));
 			return FALSE;
 		}
 
@@ -2924,8 +2910,13 @@ _internal_activate_device (NMManager *self, NMActiveConnection *active, GError *
 			                                             master_device,
 			                                             error);
 			if (!master_ac) {
-				if (error)
-					g_assert (*error);
+				if (master_device) {
+					g_prefix_error (error, "Master device '%s' can't be activated: ",
+					                nm_device_get_ip_iface (device));
+				} else {
+					g_prefix_error (error, "Master connection '%s' can't be activated: ",
+					                nm_settings_connection_get_id (connection));
+				}
 				return FALSE;
 			}
 		}
@@ -2951,7 +2942,6 @@ _internal_activate_device (NMManager *self, NMActiveConnection *active, GError *
 
 	/* Export the new ActiveConnection to clients and start it on the device */
 	nm_exported_object_export (NM_EXPORTED_OBJECT (active));
-	g_object_notify (G_OBJECT (self), NM_MANAGER_ACTIVE_CONNECTIONS);
 	nm_device_queue_activation (device, NM_ACT_REQUEST (active));
 	return TRUE;
 }
@@ -3423,7 +3413,7 @@ impl_manager_activate_connection (NMManager *self,
 		device = nm_manager_get_device_by_path (self, device_path);
 		if (!device) {
 			error = g_error_new (NM_MANAGER_ERROR, NM_MANAGER_ERROR_UNKNOWN_DEVICE,
-			                     "Cannot activate unknown device %s", device_path);
+			                     "Can not activate an unknown device '%s'", device_path);
 			goto error;
 		}
 
@@ -3522,6 +3512,7 @@ activation_add_done (NMSettings *settings,
 	                            FALSE,
 	                            nm_active_connection_get_subject (active),
 	                            error->message);
+	g_object_unref (active);
 	g_clear_error (&local);
 }
 
@@ -3712,7 +3703,7 @@ nm_manager_deactivate_connection (NMManager *manager,
 	}
 
 	if (success)
-		g_object_notify (G_OBJECT (manager), NM_MANAGER_ACTIVE_CONNECTIONS);
+		_notify (manager, PROP_ACTIVE_CONNECTIONS);
 
 	return success;
 }
@@ -3903,8 +3894,13 @@ do_sleep_wake (NMManager *self, gboolean sleeping_changed)
 			NMDevice *device = NM_DEVICE (iter->data);
 			guint i;
 
-			if (nm_device_is_software (device))
+			if (nm_device_is_software (device)) {
+				/* We do not manage/unmanage software devices but
+				 * their dhcp leases could have gone stale so we need
+				 * to renew them */
+				nm_device_update_dynamic_ip_setup (device);
 				continue;
+			}
 
 			/* enable/disable wireless devices since that we don't respond
 			 * to killswitch changes during sleep.
@@ -3949,7 +3945,7 @@ _internal_sleep (NMManager *self, gboolean do_sleep)
 
 	do_sleep_wake (self, TRUE);
 
-	g_object_notify (G_OBJECT (self), NM_MANAGER_SLEEPING);
+	_notify (self, PROP_SLEEPING);
 }
 
 #if 0
@@ -4065,18 +4061,19 @@ static void
 _internal_enable (NMManager *self, gboolean enable)
 {
 	NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
-	GError *err = NULL;
+	GError *error = NULL;
 
 	/* Update "NetworkingEnabled" key in state file */
 	if (priv->state_file) {
 		if (!write_value_to_state_file (priv->state_file,
 		                                "main", "NetworkingEnabled",
 		                                G_TYPE_BOOLEAN, (gpointer) &enable,
-		                                &err)) {
+		                                &error)) {
 			/* Not a hard error */
 			_LOGW (LOGD_SUSPEND, "writing to state file %s failed: %s",
 			       priv->state_file,
-			       err->message);
+			       error->message);
+			g_clear_error (&error);
 		}
 	}
 
@@ -4089,7 +4086,7 @@ _internal_enable (NMManager *self, gboolean enable)
 
 	do_sleep_wake (self, FALSE);
 
-	g_object_notify (G_OBJECT (self), NM_MANAGER_NETWORKING_ENABLED);
+	_notify (self, PROP_NETWORKING_ENABLED);
 }
 
 static void
@@ -4528,7 +4525,7 @@ connectivity_changed (NMConnectivity *connectivity,
 	       nm_connectivity_state_to_string (nm_connectivity_get_state (connectivity)));
 
 	nm_manager_update_state (self);
-	g_object_notify (G_OBJECT (self), NM_MANAGER_CONNECTIVITY);
+	_notify (self, PROP_CONNECTIVITY);
 }
 
 static void
@@ -4602,8 +4599,8 @@ policy_default_device_changed (GObject *object, GParamSpec *pspec, gpointer user
 			                  G_CALLBACK (connection_metered_changed), self);
 		}
 		_LOGD (LOGD_CORE, "PrimaryConnection now %s", ac ? nm_active_connection_get_settings_connection_id (ac) : "(none)");
-		g_object_notify (G_OBJECT (self), NM_MANAGER_PRIMARY_CONNECTION);
-		g_object_notify (G_OBJECT (self), NM_MANAGER_PRIMARY_CONNECTION_TYPE);
+		_notify (self, PROP_PRIMARY_CONNECTION);
+		_notify (self, PROP_PRIMARY_CONNECTION_TYPE);
 		nm_manager_update_metered (self);
 	}
 }
@@ -4637,7 +4634,7 @@ policy_activating_device_changed (GObject *object, GParamSpec *pspec, gpointer u
 		g_clear_object (&priv->activating_connection);
 		priv->activating_connection = ac ? g_object_ref (ac) : NULL;
 		_LOGD (LOGD_CORE, "ActivatingConnection now %s", ac ? nm_active_connection_get_settings_connection_id (ac) : "(none)");
-		g_object_notify (G_OBJECT (self), NM_MANAGER_ACTIVATING_CONNECTION);
+		_notify (self, PROP_ACTIVATING_CONNECTION);
 	}
 }
 
@@ -5544,144 +5541,124 @@ nm_manager_class_init (NMManagerClass *manager_class)
 	object_class->dispose = dispose;
 
 	/* properties */
-	g_object_class_install_property
-		(object_class, PROP_VERSION,
-		 g_param_spec_string (NM_MANAGER_VERSION, "", "",
-		                      NULL,
-		                      G_PARAM_READABLE |
-		                      G_PARAM_STATIC_STRINGS));
-
-	g_object_class_install_property (object_class,
-	                                 PROP_STATE_FILE,
-	                                 g_param_spec_string (NM_MANAGER_STATE_FILE, "", "",
-	                                                      NULL,
-	                                                      G_PARAM_WRITABLE |
-	                                                      G_PARAM_CONSTRUCT_ONLY |
-	                                                      G_PARAM_STATIC_STRINGS));
-
-	g_object_class_install_property
-		(object_class, PROP_STATE,
-		 g_param_spec_uint (NM_MANAGER_STATE, "", "",
-		                    0, NM_STATE_DISCONNECTED, 0,
-		                    G_PARAM_READABLE |
-		                    G_PARAM_STATIC_STRINGS));
-
-	g_object_class_install_property
-		(object_class, PROP_STARTUP,
-		 g_param_spec_boolean (NM_MANAGER_STARTUP, "", "",
-		                       TRUE,
-		                       G_PARAM_READABLE |
-		                       G_PARAM_STATIC_STRINGS));
-
-	g_object_class_install_property
-		(object_class, PROP_NETWORKING_ENABLED,
-		 g_param_spec_boolean (NM_MANAGER_NETWORKING_ENABLED, "", "",
-		                       TRUE,
-		                       G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
-		                       G_PARAM_STATIC_STRINGS));
-
-	g_object_class_install_property
-		(object_class, PROP_WIRELESS_ENABLED,
-		 g_param_spec_boolean (NM_MANAGER_WIRELESS_ENABLED, "", "",
-		                       TRUE,
-		                       G_PARAM_READWRITE |
-		                       G_PARAM_CONSTRUCT |
-		                       G_PARAM_STATIC_STRINGS));
-
-	g_object_class_install_property
-		(object_class, PROP_WIRELESS_HARDWARE_ENABLED,
-		 g_param_spec_boolean (NM_MANAGER_WIRELESS_HARDWARE_ENABLED, "", "",
-		                       TRUE,
-		                       G_PARAM_READABLE |
-		                       G_PARAM_STATIC_STRINGS));
-
-	g_object_class_install_property
-		(object_class, PROP_WWAN_ENABLED,
-		 g_param_spec_boolean (NM_MANAGER_WWAN_ENABLED, "", "",
-		                       TRUE,
-		                       G_PARAM_READWRITE |
-		                       G_PARAM_CONSTRUCT |
-		                       G_PARAM_STATIC_STRINGS));
-
-	g_object_class_install_property
-		(object_class, PROP_WWAN_HARDWARE_ENABLED,
-		 g_param_spec_boolean (NM_MANAGER_WWAN_HARDWARE_ENABLED, "", "",
-		                       TRUE,
-		                       G_PARAM_READABLE |
-		                       G_PARAM_STATIC_STRINGS));
-
-	g_object_class_install_property
-		(object_class, PROP_WIMAX_ENABLED,
-		 g_param_spec_boolean (NM_MANAGER_WIMAX_ENABLED, "", "",
-		                       TRUE,
-		                       G_PARAM_READWRITE |
-		                       G_PARAM_STATIC_STRINGS));
-
-	g_object_class_install_property
-		(object_class, PROP_WIMAX_HARDWARE_ENABLED,
-		 g_param_spec_boolean (NM_MANAGER_WIMAX_HARDWARE_ENABLED, "", "",
-		                       TRUE,
-		                       G_PARAM_READABLE |
-		                       G_PARAM_STATIC_STRINGS));
-
-	g_object_class_install_property
-		(object_class, PROP_ACTIVE_CONNECTIONS,
-		 g_param_spec_boxed (NM_MANAGER_ACTIVE_CONNECTIONS, "", "",
-		                     G_TYPE_STRV,
-		                     G_PARAM_READABLE |
-		                     G_PARAM_STATIC_STRINGS));
-
-	g_object_class_install_property
-		(object_class, PROP_CONNECTIVITY,
-		 g_param_spec_uint (NM_MANAGER_CONNECTIVITY, "", "",
-		                    NM_CONNECTIVITY_UNKNOWN, NM_CONNECTIVITY_FULL, NM_CONNECTIVITY_UNKNOWN,
-		                    G_PARAM_READABLE |
-		                    G_PARAM_STATIC_STRINGS));
-
-	g_object_class_install_property
-		(object_class, PROP_PRIMARY_CONNECTION,
-		 g_param_spec_string (NM_MANAGER_PRIMARY_CONNECTION, "", "",
-		                      NULL,
-		                      G_PARAM_READABLE |
-		                      G_PARAM_STATIC_STRINGS));
-
-	g_object_class_install_property
-		(object_class, PROP_PRIMARY_CONNECTION_TYPE,
-		 g_param_spec_string (NM_MANAGER_PRIMARY_CONNECTION_TYPE, "", "",
-		                      NULL,
-		                      G_PARAM_READABLE |
-		                      G_PARAM_STATIC_STRINGS));
-
-
-	g_object_class_install_property
-		(object_class, PROP_ACTIVATING_CONNECTION,
-		 g_param_spec_string (NM_MANAGER_ACTIVATING_CONNECTION, "", "",
-		                      NULL,
-		                      G_PARAM_READABLE |
-		                      G_PARAM_STATIC_STRINGS));
+	obj_properties[PROP_VERSION] =
+	    g_param_spec_string (NM_MANAGER_VERSION, "", "",
+	                         NULL,
+	                         G_PARAM_READABLE |
+	                         G_PARAM_STATIC_STRINGS);
+
+	obj_properties[PROP_STATE_FILE] =
+	    g_param_spec_string (NM_MANAGER_STATE_FILE, "", "",
+	                         NULL,
+	                         G_PARAM_WRITABLE |
+	                         G_PARAM_CONSTRUCT_ONLY |
+	                         G_PARAM_STATIC_STRINGS);
+
+	obj_properties[PROP_STATE] =
+	    g_param_spec_uint (NM_MANAGER_STATE, "", "",
+	                       0, NM_STATE_DISCONNECTED, 0,
+	                       G_PARAM_READABLE |
+	                       G_PARAM_STATIC_STRINGS);
+
+	obj_properties[PROP_STARTUP] =
+	    g_param_spec_boolean (NM_MANAGER_STARTUP, "", "",
+	                          TRUE,
+	                          G_PARAM_READABLE |
+	                          G_PARAM_STATIC_STRINGS);
+
+	obj_properties[PROP_NETWORKING_ENABLED] =
+	    g_param_spec_boolean (NM_MANAGER_NETWORKING_ENABLED, "", "",
+	                          TRUE,
+	                          G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+	                          G_PARAM_STATIC_STRINGS);
+
+	obj_properties[PROP_WIRELESS_ENABLED] =
+	    g_param_spec_boolean (NM_MANAGER_WIRELESS_ENABLED, "", "",
+	                          TRUE,
+	                          G_PARAM_READWRITE |
+	                          G_PARAM_CONSTRUCT |
+	                          G_PARAM_STATIC_STRINGS);
+
+	obj_properties[PROP_WIRELESS_HARDWARE_ENABLED] =
+	    g_param_spec_boolean (NM_MANAGER_WIRELESS_HARDWARE_ENABLED, "", "",
+	                          TRUE,
+	                          G_PARAM_READABLE |
+	                          G_PARAM_STATIC_STRINGS);
+
+	obj_properties[PROP_WWAN_ENABLED] =
+	    g_param_spec_boolean (NM_MANAGER_WWAN_ENABLED, "", "",
+	                          TRUE,
+	                          G_PARAM_READWRITE |
+	                          G_PARAM_CONSTRUCT |
+	                          G_PARAM_STATIC_STRINGS);
+
+	obj_properties[PROP_WWAN_HARDWARE_ENABLED] =
+	    g_param_spec_boolean (NM_MANAGER_WWAN_HARDWARE_ENABLED, "", "",
+	                          TRUE,
+	                          G_PARAM_READABLE |
+	                          G_PARAM_STATIC_STRINGS);
+
+	obj_properties[PROP_WIMAX_ENABLED] =
+	    g_param_spec_boolean (NM_MANAGER_WIMAX_ENABLED, "", "",
+	                          TRUE,
+	                          G_PARAM_READWRITE |
+	                          G_PARAM_STATIC_STRINGS);
+
+	obj_properties[PROP_WIMAX_HARDWARE_ENABLED] =
+	    g_param_spec_boolean (NM_MANAGER_WIMAX_HARDWARE_ENABLED, "", "",
+	                          TRUE,
+	                          G_PARAM_READABLE |
+	                          G_PARAM_STATIC_STRINGS);
+
+	obj_properties[PROP_ACTIVE_CONNECTIONS] =
+	    g_param_spec_boxed (NM_MANAGER_ACTIVE_CONNECTIONS, "", "",
+	                        G_TYPE_STRV,
+	                        G_PARAM_READABLE |
+	                        G_PARAM_STATIC_STRINGS);
+
+	obj_properties[PROP_CONNECTIVITY] =
+	    g_param_spec_uint (NM_MANAGER_CONNECTIVITY, "", "",
+	                       NM_CONNECTIVITY_UNKNOWN, NM_CONNECTIVITY_FULL, NM_CONNECTIVITY_UNKNOWN,
+	                       G_PARAM_READABLE |
+	                       G_PARAM_STATIC_STRINGS);
+
+	obj_properties[PROP_PRIMARY_CONNECTION] =
+	    g_param_spec_string (NM_MANAGER_PRIMARY_CONNECTION, "", "",
+	                         NULL,
+	                         G_PARAM_READABLE |
+	                         G_PARAM_STATIC_STRINGS);
+
+	obj_properties[PROP_PRIMARY_CONNECTION_TYPE] =
+	    g_param_spec_string (NM_MANAGER_PRIMARY_CONNECTION_TYPE, "", "",
+	                         NULL,
+	                         G_PARAM_READABLE |
+	                         G_PARAM_STATIC_STRINGS);
+
+	obj_properties[PROP_ACTIVATING_CONNECTION] =
+	    g_param_spec_string (NM_MANAGER_ACTIVATING_CONNECTION, "", "",
+	                         NULL,
+	                         G_PARAM_READABLE |
+	                         G_PARAM_STATIC_STRINGS);
 
 	/* Hostname is not exported over D-Bus */
-	g_object_class_install_property
-		(object_class, PROP_HOSTNAME,
-		 g_param_spec_string (NM_MANAGER_HOSTNAME, "", "",
-		                      NULL,
-		                      G_PARAM_READABLE |
-		                      G_PARAM_STATIC_STRINGS));
+	obj_properties[PROP_HOSTNAME] =
+	    g_param_spec_string (NM_MANAGER_HOSTNAME, "", "",
+	                         NULL,
+	                         G_PARAM_READABLE |
+	                         G_PARAM_STATIC_STRINGS);
 
 	/* Sleeping is not exported over D-Bus */
-	g_object_class_install_property
-		(object_class, PROP_SLEEPING,
-		 g_param_spec_boolean (NM_MANAGER_SLEEPING, "", "",
-		                       FALSE,
-		                       G_PARAM_READABLE |
-		                       G_PARAM_STATIC_STRINGS));
-
-	g_object_class_install_property
-		(object_class, PROP_DEVICES,
-		 g_param_spec_boxed (NM_MANAGER_DEVICES, "", "",
-		                     G_TYPE_STRV,
-		                     G_PARAM_READABLE |
-		                     G_PARAM_STATIC_STRINGS));
+	obj_properties[PROP_SLEEPING] =
+	    g_param_spec_boolean (NM_MANAGER_SLEEPING, "", "",
+	                          FALSE,
+	                          G_PARAM_READABLE |
+	                          G_PARAM_STATIC_STRINGS);
+
+	obj_properties[PROP_DEVICES] =
+	    g_param_spec_boxed (NM_MANAGER_DEVICES, "", "",
+	                        G_TYPE_STRV,
+	                        G_PARAM_READABLE |
+	                        G_PARAM_STATIC_STRINGS);
 
 	/**
 	 * NMManager:metered:
@@ -5690,12 +5667,11 @@ nm_manager_class_init (NMManagerClass *manager_class)
 	 *
 	 * Since: 1.2
 	 **/
-	g_object_class_install_property
-		(object_class, PROP_METERED,
-		 g_param_spec_uint (NM_MANAGER_METERED, "", "",
-		                    0, G_MAXUINT32, NM_METERED_UNKNOWN,
-		                    G_PARAM_READABLE |
-		                    G_PARAM_STATIC_STRINGS));
+	obj_properties[PROP_METERED] =
+	    g_param_spec_uint (NM_MANAGER_METERED, "", "",
+	                       0, G_MAXUINT32, NM_METERED_UNKNOWN,
+	                       G_PARAM_READABLE |
+	                       G_PARAM_STATIC_STRINGS);
 
 	/**
 	 * NMManager:global-dns-configuration:
@@ -5704,13 +5680,12 @@ nm_manager_class_init (NMManagerClass *manager_class)
 	 *
 	 * Since: 1.2
 	 **/
-	g_object_class_install_property
-		(object_class, PROP_GLOBAL_DNS_CONFIGURATION,
-		 g_param_spec_variant (NM_MANAGER_GLOBAL_DNS_CONFIGURATION, "", "",
-		                       G_VARIANT_TYPE ("a{sv}"),
-		                       NULL,
-		                       G_PARAM_READWRITE |
-		                       G_PARAM_STATIC_STRINGS));
+	obj_properties[PROP_GLOBAL_DNS_CONFIGURATION] =
+	    g_param_spec_variant (NM_MANAGER_GLOBAL_DNS_CONFIGURATION, "", "",
+	                          G_VARIANT_TYPE ("a{sv}"),
+	                          NULL,
+	                          G_PARAM_READWRITE |
+	                          G_PARAM_STATIC_STRINGS);
 
 	/**
 	 * NMManager:all-devices:
@@ -5719,91 +5694,85 @@ nm_manager_class_init (NMManagerClass *manager_class)
 	 *
 	 * Since: 1.2
 	 **/
-	g_object_class_install_property
-		(object_class, PROP_ALL_DEVICES,
-		 g_param_spec_boxed (NM_MANAGER_ALL_DEVICES, "", "",
-		                     G_TYPE_STRV,
-		                     G_PARAM_READABLE |
-		                     G_PARAM_STATIC_STRINGS));
+	obj_properties[PROP_ALL_DEVICES] =
+	    g_param_spec_boxed (NM_MANAGER_ALL_DEVICES, "", "",
+	                        G_TYPE_STRV,
+	                        G_PARAM_READABLE |
+	                        G_PARAM_STATIC_STRINGS);
+
+	g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
 
 	/* signals */
 
 	/* D-Bus exported; emitted only for realized devices */
 	signals[DEVICE_ADDED] =
-		g_signal_new ("device-added",
-		              G_OBJECT_CLASS_TYPE (object_class),
-		              G_SIGNAL_RUN_FIRST,
-		              G_STRUCT_OFFSET (NMManagerClass, device_added),
-		              NULL, NULL, NULL,
-		              G_TYPE_NONE, 1, NM_TYPE_DEVICE);
+	    g_signal_new (NM_MANAGER_DEVICE_ADDED,
+	                  G_OBJECT_CLASS_TYPE (object_class),
+	                  G_SIGNAL_RUN_FIRST,
+	                  G_STRUCT_OFFSET (NMManagerClass, device_added),
+	                  NULL, NULL, NULL,
+	                  G_TYPE_NONE, 1, NM_TYPE_DEVICE);
 
 	/* Emitted for both realized devices and placeholder devices */
 	signals[INTERNAL_DEVICE_ADDED] =
-		g_signal_new ("internal-device-added",
-		              G_OBJECT_CLASS_TYPE (object_class),
-		              G_SIGNAL_RUN_FIRST, 0,
-		              NULL, NULL, NULL,
-		              G_TYPE_NONE, 1, G_TYPE_OBJECT);
+	    g_signal_new (NM_MANAGER_INTERNAL_DEVICE_ADDED,
+	                  G_OBJECT_CLASS_TYPE (object_class),
+	                  G_SIGNAL_RUN_FIRST, 0,
+	                  NULL, NULL, NULL,
+	                  G_TYPE_NONE, 1, G_TYPE_OBJECT);
 
 	/* D-Bus exported; emitted only for realized devices */
 	signals[DEVICE_REMOVED] =
-		g_signal_new ("device-removed",
-		              G_OBJECT_CLASS_TYPE (object_class),
-		              G_SIGNAL_RUN_FIRST,
-		              G_STRUCT_OFFSET (NMManagerClass, device_removed),
-		              NULL, NULL, NULL,
-		              G_TYPE_NONE, 1, NM_TYPE_DEVICE);
+	    g_signal_new (NM_MANAGER_DEVICE_REMOVED,
+	                  G_OBJECT_CLASS_TYPE (object_class),
+	                  G_SIGNAL_RUN_FIRST,
+	                  G_STRUCT_OFFSET (NMManagerClass, device_removed),
+	                  NULL, NULL, NULL,
+	                  G_TYPE_NONE, 1, NM_TYPE_DEVICE);
 
 	/* Emitted for both realized devices and placeholder devices */
 	signals[INTERNAL_DEVICE_REMOVED] =
-		g_signal_new ("internal-device-removed",
-		              G_OBJECT_CLASS_TYPE (object_class),
-		              G_SIGNAL_RUN_FIRST, 0,
-		              NULL, NULL, NULL,
-		              G_TYPE_NONE, 1, G_TYPE_OBJECT);
+	    g_signal_new (NM_MANAGER_INTERNAL_DEVICE_REMOVED,
+	                  G_OBJECT_CLASS_TYPE (object_class),
+	                  G_SIGNAL_RUN_FIRST, 0,
+	                  NULL, NULL, NULL,
+	                  G_TYPE_NONE, 1, G_TYPE_OBJECT);
 
 	signals[STATE_CHANGED] =
-		g_signal_new (NM_MANAGER_STATE_CHANGED,
-		              G_OBJECT_CLASS_TYPE (object_class),
-		              G_SIGNAL_RUN_FIRST,
-		              G_STRUCT_OFFSET (NMManagerClass, state_changed),
-		              NULL, NULL, NULL,
-		              G_TYPE_NONE, 1, G_TYPE_UINT);
+	    g_signal_new (NM_MANAGER_STATE_CHANGED,
+	                  G_OBJECT_CLASS_TYPE (object_class),
+	                  G_SIGNAL_RUN_FIRST,
+	                  G_STRUCT_OFFSET (NMManagerClass, state_changed),
+	                  NULL, NULL, NULL,
+	                  G_TYPE_NONE, 1, G_TYPE_UINT);
 
 	signals[CHECK_PERMISSIONS] =
-		g_signal_new ("check-permissions",
-		              G_OBJECT_CLASS_TYPE (object_class),
-		              G_SIGNAL_RUN_FIRST,
-		              0, NULL, NULL, NULL,
-		              G_TYPE_NONE, 0);
-
-	signals[USER_PERMISSIONS_CHANGED] =
-		g_signal_new ("user-permissions-changed",
-		              G_OBJECT_CLASS_TYPE (object_class),
-		              G_SIGNAL_RUN_FIRST,
-		              0, NULL, NULL, NULL,
-		              G_TYPE_NONE, 0);
+	    g_signal_new (NM_MANAGER_CHECK_PERMISSIONS,
+	                  G_OBJECT_CLASS_TYPE (object_class),
+	                  G_SIGNAL_RUN_FIRST,
+	                  0, NULL, NULL, NULL,
+	                  G_TYPE_NONE, 0);
 
 	signals[ACTIVE_CONNECTION_ADDED] =
-		g_signal_new (NM_MANAGER_ACTIVE_CONNECTION_ADDED,
-		              G_OBJECT_CLASS_TYPE (object_class),
-		              G_SIGNAL_RUN_FIRST,
-		              0, NULL, NULL, NULL,
-		              G_TYPE_NONE, 1, NM_TYPE_ACTIVE_CONNECTION);
+	    g_signal_new (NM_MANAGER_ACTIVE_CONNECTION_ADDED,
+	                  G_OBJECT_CLASS_TYPE (object_class),
+	                  G_SIGNAL_RUN_FIRST,
+	                  0, NULL, NULL, NULL,
+	                  G_TYPE_NONE, 1, NM_TYPE_ACTIVE_CONNECTION);
 
 	signals[ACTIVE_CONNECTION_REMOVED] =
-		g_signal_new (NM_MANAGER_ACTIVE_CONNECTION_REMOVED,
-		              G_OBJECT_CLASS_TYPE (object_class),
-		              G_SIGNAL_RUN_FIRST,
-		              0, NULL, NULL, NULL,
-		              G_TYPE_NONE, 1, NM_TYPE_ACTIVE_CONNECTION);
+	    g_signal_new (NM_MANAGER_ACTIVE_CONNECTION_REMOVED,
+	                  G_OBJECT_CLASS_TYPE (object_class),
+	                  G_SIGNAL_RUN_FIRST,
+	                  0, NULL, NULL, NULL,
+	                  G_TYPE_NONE, 1, NM_TYPE_ACTIVE_CONNECTION);
 
 	signals[CONFIGURE_QUIT] =
-		g_signal_new (NM_MANAGER_CONFIGURE_QUIT,
-		              G_OBJECT_CLASS_TYPE (object_class),
-		              G_SIGNAL_RUN_FIRST,
-		              0, NULL, NULL, NULL,
-		              G_TYPE_NONE, 0);
+	    g_signal_new (NM_MANAGER_CONFIGURE_QUIT,
+	                  G_OBJECT_CLASS_TYPE (object_class),
+	                  G_SIGNAL_RUN_FIRST,
+	                  0, NULL, NULL, NULL,
+	                  G_TYPE_NONE, 0);
 
 	nm_exported_object_class_add_interface (NM_EXPORTED_OBJECT_CLASS (manager_class),
 	                                        NMDBUS_TYPE_MANAGER_SKELETON,
diff --git a/src/nm-manager.h b/src/nm-manager.h
index 97830201..5401b002 100644
--- a/src/nm-manager.h
+++ b/src/nm-manager.h
@@ -57,11 +57,19 @@
 #define NM_MANAGER_SLEEPING "sleeping"
 #define NM_MANAGER_STATE_FILE "state-file"
 
+/* signals */
+#define NM_MANAGER_CHECK_PERMISSIONS         "check-permissions"
+#define NM_MANAGER_DEVICE_ADDED              "device-added"
+#define NM_MANAGER_DEVICE_REMOVED            "device-removed"
+#define NM_MANAGER_STATE_CHANGED             "state-changed"
+#define NM_MANAGER_USER_PERMISSIONS_CHANGED  "user-permissions-changed"
+
 /* Internal signals */
 #define NM_MANAGER_ACTIVE_CONNECTION_ADDED   "active-connection-added"
 #define NM_MANAGER_ACTIVE_CONNECTION_REMOVED "active-connection-removed"
 #define NM_MANAGER_CONFIGURE_QUIT            "configure-quit"
-#define NM_MANAGER_STATE_CHANGED             "state-changed"
+#define NM_MANAGER_INTERNAL_DEVICE_ADDED     "internal-device-added"
+#define NM_MANAGER_INTERNAL_DEVICE_REMOVED   "internal-device-removed"
 
 
 struct _NMManager {
diff --git a/src/nm-policy.c b/src/nm-policy.c
index a46b35a2..07bcce89 100644
--- a/src/nm-policy.c
+++ b/src/nm-policy.c
@@ -56,13 +56,15 @@
                 _NM_UTILS_MACRO_REST (__VA_ARGS__)); \
     } G_STMT_END
 
-typedef struct {
+typedef struct _NMPolicyPrivate NMPolicyPrivate;
+
+struct _NMPolicyPrivate {
+	NMPolicy *self;
 	NMManager *manager;
 	NMFirewallManager *firewall_manager;
 	GSList *pending_activation_checks;
-	GSList *manager_ids;
-	GSList *settings_ids;
-	GSList *dev_ids;
+
+	GHashTable *devices;
 
 	GSList *pending_secondaries;
 
@@ -84,9 +86,14 @@ typedef struct {
 	char *orig_hostname; /* hostname at NM start time */
 	char *cur_hostname;  /* hostname we want to assign */
 	gboolean hostname_changed;  /* TRUE if NM ever set the hostname */
-} NMPolicyPrivate;
+};
 
-#define NM_POLICY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_POLICY, NMPolicyPrivate))
+static NMPolicyPrivate *
+NM_POLICY_GET_PRIVATE(NMPolicy *self)
+{
+	nm_assert (NM_IS_POLICY (self));
+	return self->priv;
+}
 
 G_DEFINE_TYPE (NMPolicy, nm_policy, G_TYPE_OBJECT)
 
@@ -833,14 +840,12 @@ process_secondaries (NMPolicy *self,
 }
 
 static void
-global_state_changed (NMManager *manager, NMState state, gpointer user_data)
-{
-}
-
-static void
 hostname_changed (NMManager *manager, GParamSpec *pspec, gpointer user_data)
 {
-	update_system_hostname ((NMPolicy *) user_data, NULL, NULL);
+	NMPolicyPrivate *priv = user_data;
+	NMPolicy *self = priv->self;
+
+	update_system_hostname (self, NULL, NULL);
 }
 
 static void
@@ -913,7 +918,8 @@ block_autoconnect_for_device (NMPolicy *self, NMDevice *device)
 static void
 sleeping_changed (NMManager *manager, GParamSpec *pspec, gpointer user_data)
 {
-	NMPolicy *self = user_data;
+	NMPolicyPrivate *priv = user_data;
+	NMPolicy *self = priv->self;
 	gboolean sleeping = FALSE, enabled = FALSE;
 
 	g_object_get (G_OBJECT (manager), NM_MANAGER_SLEEPING, &sleeping, NULL);
@@ -1140,8 +1146,8 @@ device_state_changed (NMDevice *device,
                       NMDeviceStateReason reason,
                       gpointer user_data)
 {
-	NMPolicy *self = (NMPolicy *) user_data;
-	NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (self);
+	NMPolicyPrivate *priv = user_data;
+	NMPolicy *self = priv->self;
 
 	NMSettingsConnection *connection = nm_device_get_settings_connection (device);
 
@@ -1286,8 +1292,8 @@ device_ip4_config_changed (NMDevice *device,
                            NMIP4Config *old_config,
                            gpointer user_data)
 {
-	NMPolicy *self = user_data;
-	NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (self);
+	NMPolicyPrivate *priv = user_data;
+	NMPolicy *self = priv->self;
 	const char *ip_iface = nm_device_get_ip_iface (device);
 
 	nm_dns_manager_begin_updates (priv->dns_manager, __func__);
@@ -1320,8 +1326,8 @@ device_ip6_config_changed (NMDevice *device,
                            NMIP6Config *old_config,
                            gpointer user_data)
 {
-	NMPolicy *self = user_data;
-	NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (self);
+	NMPolicyPrivate *priv = user_data;
+	NMPolicy *self = priv->self;
 	const char *ip_iface = nm_device_get_ip_iface (device);
 
 	nm_dns_manager_begin_updates (priv->dns_manager, __func__);
@@ -1353,77 +1359,70 @@ device_autoconnect_changed (NMDevice *device,
                             GParamSpec *pspec,
                             gpointer user_data)
 {
+	NMPolicyPrivate *priv = user_data;
+	NMPolicy *self = priv->self;
+
 	if (nm_device_autoconnect_allowed (device))
-		schedule_activate_check ((NMPolicy *) user_data, device);
+		schedule_activate_check (self, device);
 }
 
 static void
 device_recheck_auto_activate (NMDevice *device, gpointer user_data)
 {
-	schedule_activate_check (NM_POLICY (user_data), device);
+	NMPolicyPrivate *priv = user_data;
+	NMPolicy *self = priv->self;
+
+	schedule_activate_check (self, device);
 }
 
-typedef struct {
-	gulong id;
-	NMDevice *device;
-} DeviceSignalId;
+static void
+devices_list_unregister (NMPolicy *self, NMDevice *device)
+{
+	NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (self);
+
+	g_signal_handlers_disconnect_by_data ((GObject *) device, priv);
+}
 
 static void
-_connect_device_signal (NMPolicy *self,
-                        NMDevice *device,
-                        const char *name,
-                        gpointer callback,
-                        gboolean after)
+devices_list_register (NMPolicy *self, NMDevice *device)
 {
 	NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (self);
-	DeviceSignalId *data;
 
-	data = g_slice_new0 (DeviceSignalId);
-	g_assert (data);
-	if (after)
-		data->id = g_signal_connect_after (device, name, callback, self);
-	else
-		data->id = g_signal_connect (device, name, callback, self);
-	data->device = device;
-	priv->dev_ids = g_slist_prepend (priv->dev_ids, data);
+	/* Connect state-changed with _after, so that the handler is invoked after other handlers. */
+	g_signal_connect_after (device, NM_DEVICE_STATE_CHANGED,          (GCallback) device_state_changed, priv);
+	g_signal_connect       (device, NM_DEVICE_IP4_CONFIG_CHANGED,     (GCallback) device_ip4_config_changed, priv);
+	g_signal_connect       (device, NM_DEVICE_IP6_CONFIG_CHANGED,     (GCallback) device_ip6_config_changed, priv);
+	g_signal_connect       (device, "notify::" NM_DEVICE_AUTOCONNECT, (GCallback) device_autoconnect_changed, priv);
+	g_signal_connect       (device, NM_DEVICE_RECHECK_AUTO_ACTIVATE,  (GCallback) device_recheck_auto_activate, priv);
 }
 
 static void
 device_added (NMManager *manager, NMDevice *device, gpointer user_data)
 {
-	NMPolicy *self = (NMPolicy *) user_data;
+	NMPolicyPrivate *priv = user_data;
+	NMPolicy *self = priv->self;
 
-	/* Connect state-changed with _after, so that the handler is invoked after other handlers. */
-	_connect_device_signal (self, device, NM_DEVICE_STATE_CHANGED, device_state_changed, TRUE);
-	_connect_device_signal (self, device, NM_DEVICE_IP4_CONFIG_CHANGED, device_ip4_config_changed, FALSE);
-	_connect_device_signal (self, device, NM_DEVICE_IP6_CONFIG_CHANGED, device_ip6_config_changed, FALSE);
-	_connect_device_signal (self, device, "notify::" NM_DEVICE_AUTOCONNECT, device_autoconnect_changed, FALSE);
-	_connect_device_signal (self, device, NM_DEVICE_RECHECK_AUTO_ACTIVATE, device_recheck_auto_activate, FALSE);
+	g_return_if_fail (NM_IS_POLICY (self));
+
+	priv = NM_POLICY_GET_PRIVATE (self);
+
+	if (!nm_g_hash_table_add (priv->devices, device))
+		g_return_if_reached ();
+
+	devices_list_register (self, device);
 }
 
 static void
 device_removed (NMManager *manager, NMDevice *device, gpointer user_data)
 {
-	NMPolicy *self = (NMPolicy *) user_data;
-	NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (self);
-	GSList *iter;
+	NMPolicyPrivate *priv = user_data;
+	NMPolicy *self = priv->self;
 
 	/* Clear any idle callbacks for this device */
 	clear_pending_activate_check (self, device);
 
-	/* Clear any signal handlers for this device */
-	iter = priv->dev_ids;
-	while (iter) {
-		DeviceSignalId *data = iter->data;
-		GSList *next = g_slist_next (iter);
-
-		if (data->device == device) {
-			g_signal_handler_disconnect (data->device, data->id);
-			g_slice_free (DeviceSignalId, data);
-			priv->dev_ids = g_slist_delete_link (priv->dev_ids, iter);
-		}
-		iter = next;
-	}
+	if (g_hash_table_remove (priv->devices, device))
+		devices_list_unregister (self, device);
 
 	/* Don't update routing and DNS here as we've already handled that
 	 * for devices that need it when the device's state changed to UNMANAGED.
@@ -1542,7 +1541,8 @@ active_connection_added (NMManager *manager,
                          NMActiveConnection *active,
                          gpointer user_data)
 {
-	NMPolicy *self = NM_POLICY (user_data);
+	NMPolicyPrivate *priv = user_data;
+	NMPolicy *self = priv->self;
 
 	if (NM_IS_VPN_CONNECTION (active)) {
 		g_signal_connect (active, NM_VPN_CONNECTION_INTERNAL_STATE_CHANGED,
@@ -1563,7 +1563,8 @@ active_connection_removed (NMManager *manager,
                            NMActiveConnection *active,
                            gpointer user_data)
 {
-	NMPolicy *self = NM_POLICY (user_data);
+	NMPolicyPrivate *priv = user_data;
+	NMPolicy *self = priv->self;
 
 	g_signal_handlers_disconnect_by_func (active,
 	                                      vpn_connection_state_changed,
@@ -1593,7 +1594,8 @@ connection_added (NMSettings *settings,
                   NMSettingsConnection *connection,
                   gpointer user_data)
 {
-	NMPolicy *self = NM_POLICY (user_data);
+	NMPolicyPrivate *priv = user_data;
+	NMPolicy *self = priv->self;
 
 	schedule_activate_all (self);
 }
@@ -1649,7 +1651,10 @@ connection_updated (NMSettings *settings,
                     NMConnection *connection,
                     gpointer user_data)
 {
-	schedule_activate_all ((NMPolicy *) user_data);
+	NMPolicyPrivate *priv = user_data;
+	NMPolicy *self = priv->self;
+
+	schedule_activate_all (self);
 }
 
 static void
@@ -1657,8 +1662,7 @@ connection_updated_by_user (NMSettings *settings,
                             NMSettingsConnection *connection,
                             gpointer user_data)
 {
-	NMPolicy *self = (NMPolicy *) user_data;
-	NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (self);
+	NMPolicyPrivate *priv = user_data;
 	const GSList *iter;
 	NMDevice *device = NULL;
 
@@ -1711,8 +1715,7 @@ connection_removed (NMSettings *settings,
                     NMSettingsConnection *connection,
                     gpointer user_data)
 {
-	NMPolicy *self = user_data;
-	NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (self);
+	NMPolicyPrivate *priv = user_data;
 
 	_deactivate_if_active (priv->manager, connection);
 }
@@ -1722,8 +1725,8 @@ connection_visibility_changed (NMSettings *settings,
                                NMSettingsConnection *connection,
                                gpointer user_data)
 {
-	NMPolicy *self = user_data;
-	NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (self);
+	NMPolicyPrivate *priv = user_data;
+	NMPolicy *self = priv->self;
 
 	if (nm_settings_connection_is_visible (connection))
 		schedule_activate_all (self);
@@ -1736,7 +1739,8 @@ secret_agent_registered (NMSettings *settings,
                          NMSecretAgent *agent,
                          gpointer user_data)
 {
-	NMPolicy *self = NM_POLICY (user_data);
+	NMPolicyPrivate *priv = user_data;
+	NMPolicy *self = priv->self;
 
 	/* The registered secret agent may provide some missing secrets. Thus we
 	 * reset retries count here and schedule activation, so that the
@@ -1825,28 +1829,14 @@ set_property (GObject *object, guint prop_id,
 /*****************************************************************************/
 
 static void
-_connect_manager_signal (NMPolicy *self, const char *name, gpointer callback)
+nm_policy_init (NMPolicy *self)
 {
-	NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (self);
-	gulong id;
+	NMPolicyPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE (self, NM_TYPE_POLICY, NMPolicyPrivate);
 
-	id = g_signal_connect (priv->manager, name, callback, self);
-	priv->manager_ids = g_slist_prepend (priv->manager_ids, (gpointer) id);
-}
+	self->priv = priv;
+	priv->self = self;
 
-static void
-_connect_settings_signal (NMPolicy *self, const char *name, gpointer callback)
-{
-	NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (self);
-	gulong id;
-
-	id = g_signal_connect (priv->settings, name, callback, self);
-	priv->settings_ids = g_slist_prepend (priv->settings_ids, (gpointer) id);
-}
-
-static void
-nm_policy_init (NMPolicy *self)
-{
+	priv->devices = g_hash_table_new (NULL, NULL);
 }
 
 static void
@@ -1866,32 +1856,30 @@ constructed (GObject *object)
 
 	priv->firewall_manager = g_object_ref (nm_firewall_manager_get ());
 
-	priv->fw_started_id = g_signal_connect (priv->firewall_manager, "started",
+	priv->fw_started_id = g_signal_connect (priv->firewall_manager, NM_FIREWALL_MANAGER_STARTED,
 	                                        G_CALLBACK (firewall_started), self);
 
 	priv->dns_manager = g_object_ref (nm_dns_manager_get ());
 	nm_dns_manager_set_initial_hostname (priv->dns_manager, priv->orig_hostname);
-	priv->config_changed_id = g_signal_connect (priv->dns_manager, "config-changed",
+	priv->config_changed_id = g_signal_connect (priv->dns_manager, NM_DNS_MANAGER_CONFIG_CHANGED,
 	                                            G_CALLBACK (dns_config_changed), self);
 
 	priv->resolver = g_resolver_get_default ();
 
-	_connect_manager_signal (self, NM_MANAGER_STATE_CHANGED, global_state_changed);
-	_connect_manager_signal (self, "notify::" NM_MANAGER_HOSTNAME, hostname_changed);
-	_connect_manager_signal (self, "notify::" NM_MANAGER_SLEEPING, sleeping_changed);
-	_connect_manager_signal (self, "notify::" NM_MANAGER_NETWORKING_ENABLED, sleeping_changed);
-	_connect_manager_signal (self, "internal-device-added", device_added);
-	_connect_manager_signal (self, "internal-device-removed", device_removed);
-	_connect_manager_signal (self, NM_MANAGER_ACTIVE_CONNECTION_ADDED, active_connection_added);
-	_connect_manager_signal (self, NM_MANAGER_ACTIVE_CONNECTION_REMOVED, active_connection_removed);
-
-	_connect_settings_signal (self, NM_SETTINGS_SIGNAL_CONNECTION_ADDED, connection_added);
-	_connect_settings_signal (self, NM_SETTINGS_SIGNAL_CONNECTION_UPDATED, connection_updated);
-	_connect_settings_signal (self, NM_SETTINGS_SIGNAL_CONNECTION_UPDATED_BY_USER, connection_updated_by_user);
-	_connect_settings_signal (self, NM_SETTINGS_SIGNAL_CONNECTION_REMOVED, connection_removed);
-	_connect_settings_signal (self, NM_SETTINGS_SIGNAL_CONNECTION_VISIBILITY_CHANGED,
-	                          connection_visibility_changed);
-	_connect_settings_signal (self, NM_SETTINGS_SIGNAL_AGENT_REGISTERED, secret_agent_registered);
+	g_signal_connect (priv->manager, "notify::" NM_MANAGER_HOSTNAME,           (GCallback) hostname_changed, priv);
+	g_signal_connect (priv->manager, "notify::" NM_MANAGER_SLEEPING,           (GCallback) sleeping_changed, priv);
+	g_signal_connect (priv->manager, "notify::" NM_MANAGER_NETWORKING_ENABLED, (GCallback) sleeping_changed, priv);
+	g_signal_connect (priv->manager, NM_MANAGER_INTERNAL_DEVICE_ADDED,         (GCallback) device_added, priv);
+	g_signal_connect (priv->manager, NM_MANAGER_INTERNAL_DEVICE_REMOVED,       (GCallback) device_removed, priv);
+	g_signal_connect (priv->manager, NM_MANAGER_ACTIVE_CONNECTION_ADDED,       (GCallback) active_connection_added, priv);
+	g_signal_connect (priv->manager, NM_MANAGER_ACTIVE_CONNECTION_REMOVED,     (GCallback) active_connection_removed, priv);
+
+	g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_ADDED,              (GCallback) connection_added, priv);
+	g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_UPDATED,            (GCallback) connection_updated, priv);
+	g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_UPDATED_BY_USER,    (GCallback) connection_updated_by_user, priv);
+	g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_REMOVED,            (GCallback) connection_removed, priv);
+	g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_VISIBILITY_CHANGED, (GCallback) connection_visibility_changed, priv);
+	g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_AGENT_REGISTERED,              (GCallback) secret_agent_registered, priv);
 
 	G_OBJECT_CLASS (nm_policy_parent_class)->constructed (object);
 }
@@ -1913,7 +1901,9 @@ dispose (GObject *object)
 {
 	NMPolicy *self = NM_POLICY (object);
 	NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (self);
-	const GSList *connections, *iter;
+	const GSList *connections;
+	GHashTableIter h_iter;
+	NMDevice *device;
 
 	nm_clear_g_cancellable (&priv->lookup_cancellable);
 
@@ -1937,21 +1927,11 @@ dispose (GObject *object)
 		g_clear_object (&priv->dns_manager);
 	}
 
-	for (iter = priv->manager_ids; iter; iter = g_slist_next (iter))
-		g_signal_handler_disconnect (priv->manager, (gulong) iter->data);
-	g_clear_pointer (&priv->manager_ids, g_slist_free);
-
-	for (iter = priv->settings_ids; iter; iter = g_slist_next (iter))
-		g_signal_handler_disconnect (priv->settings, (gulong) iter->data);
-	g_clear_pointer (&priv->settings_ids, g_slist_free);
-
-	for (iter = priv->dev_ids; iter; iter = g_slist_next (iter)) {
-		DeviceSignalId *data = iter->data;
-
-		g_signal_handler_disconnect (data->device, data->id);
-		g_slice_free (DeviceSignalId, data);
+	g_hash_table_iter_init (&h_iter, priv->devices);
+	if (g_hash_table_iter_next (&h_iter, (gpointer *) &device, NULL)) {
+		g_hash_table_iter_remove (&h_iter);
+		devices_list_unregister (self, device);
 	}
-	g_clear_pointer (&priv->dev_ids, g_slist_free);
 
 	/* The manager should have disposed of ActiveConnections already, which
 	 * will have called active_connection_removed() and thus we don't need
@@ -1965,7 +1945,17 @@ dispose (GObject *object)
 	g_clear_pointer (&priv->orig_hostname, g_free);
 	g_clear_pointer (&priv->cur_hostname, g_free);
 
-	g_clear_object (&priv->settings);
+	if (priv->settings) {
+		g_signal_handlers_disconnect_by_data (priv->settings, priv);
+		g_clear_object (&priv->settings);
+
+		/* we don't clear priv->manager as we don't own a reference to it,
+		 * that is, NMManager must outlive NMPolicy anyway.
+		 *
+		 * Hence, we unsubscribe the signals here together with the signals
+		 * for settings. */
+		g_signal_handlers_disconnect_by_data (priv->manager, priv);
+	}
 
 	nm_assert (NM_IS_MANAGER (priv->manager));
 
@@ -1973,6 +1963,19 @@ dispose (GObject *object)
 }
 
 static void
+finalize (GObject *object)
+{
+	NMPolicy *self = NM_POLICY (object);
+	NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (self);
+
+	g_hash_table_unref (priv->devices);
+
+	G_OBJECT_CLASS (nm_policy_parent_class)->finalize (object);
+
+	priv->self = NULL;
+}
+
+static void
 nm_policy_class_init (NMPolicyClass *policy_class)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (policy_class);
@@ -1983,6 +1986,7 @@ nm_policy_class_init (NMPolicyClass *policy_class)
 	object_class->set_property = set_property;
 	object_class->constructed = constructed;
 	object_class->dispose = dispose;
+	object_class->finalize = finalize;
 
 	obj_properties[PROP_MANAGER] =
 	    g_param_spec_object (NM_POLICY_MANAGER, "", "",
diff --git a/src/nm-policy.h b/src/nm-policy.h
index 4d504cdd..476ddf1d 100644
--- a/src/nm-policy.h
+++ b/src/nm-policy.h
@@ -38,8 +38,11 @@
 #define NM_POLICY_ACTIVATING_IP4_DEVICE "activating-ip4-device"
 #define NM_POLICY_ACTIVATING_IP6_DEVICE "activating-ip6-device"
 
+struct _NMPolicyPrivate;
+
 struct _NMPolicy {
 	GObject parent;
+	struct _NMPolicyPrivate *priv;
 };
 
 typedef struct {
diff --git a/src/platform/nm-linux-platform.c b/src/platform/nm-linux-platform.c
index e2ff1f61..3282e698 100644
--- a/src/platform/nm-linux-platform.c
+++ b/src/platform/nm-linux-platform.c
@@ -55,6 +55,8 @@
 #include "wifi/wifi-utils.h"
 #include "wifi/wifi-utils-wext.h"
 
+#define offset_plus_sizeof(t,m) (offsetof (t,m) + sizeof (((t *) NULL)->m))
+
 #define VLAN_FLAG_MVRP 0x8
 
 /* nm-internal error codes for libnl. Make sure they don't overlap. */
@@ -831,7 +833,7 @@ _parse_af_inet6 (NMPlatform *platform,
 {
 	static struct nla_policy policy[IFLA_INET6_MAX+1] = {
 		[IFLA_INET6_FLAGS]              = { .type = NLA_U32 },
-		[IFLA_INET6_CACHEINFO]          = { .minlen = sizeof(struct ifla_cacheinfo) },
+		[IFLA_INET6_CACHEINFO]          = { .minlen = offset_plus_sizeof(struct ifla_cacheinfo, retrans_time) },
 		[IFLA_INET6_CONF]               = { .minlen = 4 },
 		[IFLA_INET6_STATS]              = { .minlen = 8 },
 		[IFLA_INET6_ICMP6STATS]         = { .minlen = 8 },
@@ -1242,7 +1244,7 @@ _parse_lnk_vlan (const char *kind, struct nlattr *info_data)
 {
 	static struct nla_policy policy[IFLA_VLAN_MAX+1] = {
 		[IFLA_VLAN_ID]          = { .type = NLA_U16 },
-		[IFLA_VLAN_FLAGS]       = { .minlen = sizeof(struct ifla_vlan_flags) },
+		[IFLA_VLAN_FLAGS]       = { .minlen = offset_plus_sizeof(struct ifla_vlan_flags, flags) },
 		[IFLA_VLAN_INGRESS_QOS] = { .type = NLA_NESTED },
 		[IFLA_VLAN_EGRESS_QOS]  = { .type = NLA_NESTED },
 		[IFLA_VLAN_PROTOCOL]    = { .type = NLA_U16 },
@@ -1429,9 +1431,9 @@ _new_from_nl_link (NMPlatform *platform, const NMPCache *cache, struct nlmsghdr
 		[IFLA_LINKINFO]         = { .type = NLA_NESTED },
 		[IFLA_QDISC]            = { .type = NLA_STRING,
 		                            .maxlen = IFQDISCSIZ },
-		[IFLA_STATS]            = { .minlen = sizeof(struct rtnl_link_stats) },
-		[IFLA_STATS64]          = { .minlen = sizeof(struct rtnl_link_stats64)},
-		[IFLA_MAP]              = { .minlen = sizeof(struct rtnl_link_ifmap) },
+		[IFLA_STATS]            = { .minlen = offset_plus_sizeof(struct rtnl_link_stats, tx_compressed) },
+		[IFLA_STATS64]          = { .minlen = offset_plus_sizeof(struct rtnl_link_stats64, tx_compressed)},
+		[IFLA_MAP]              = { .minlen = offset_plus_sizeof(struct rtnl_link_ifmap, port) },
 		[IFLA_IFALIAS]          = { .type = NLA_STRING, .maxlen = IFALIASZ },
 		[IFLA_NUM_VF]           = { .type = NLA_U32 },
 		[IFLA_AF_SPEC]          = { .type = NLA_NESTED },
@@ -1612,7 +1614,7 @@ _new_from_nl_addr (struct nlmsghdr *nlh, gboolean id_only)
 	static struct nla_policy policy[IFA_MAX+1] = {
 		[IFA_LABEL]     = { .type = NLA_STRING,
 		                     .maxlen = IFNAMSIZ },
-		[IFA_CACHEINFO] = { .minlen = sizeof(struct ifa_cacheinfo) },
+		[IFA_CACHEINFO] = { .minlen = offset_plus_sizeof(struct ifa_cacheinfo, tstamp) },
 	};
 	const struct ifaddrmsg *ifa;
 	struct nlattr *tb[IFA_MAX+1];
@@ -1726,7 +1728,7 @@ _new_from_nl_route (struct nlmsghdr *nlh, gboolean id_only)
 		[RTA_OIF]       = { .type = NLA_U32 },
 		[RTA_PRIORITY]  = { .type = NLA_U32 },
 		[RTA_FLOW]      = { .type = NLA_U32 },
-		[RTA_CACHEINFO] = { .minlen = sizeof(struct rta_cacheinfo) },
+		[RTA_CACHEINFO] = { .minlen = offset_plus_sizeof(struct rta_cacheinfo, rta_tsage) },
 		[RTA_METRICS]   = { .type = NLA_NESTED },
 		[RTA_MULTIPATH] = { .type = NLA_NESTED },
 	};
@@ -5126,6 +5128,49 @@ wifi_indicate_addressing_running (NMPlatform *platform, int ifindex, gboolean ru
 
 /******************************************************************/
 
+static gboolean
+link_can_assume (NMPlatform *platform, int ifindex)
+{
+	NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+	NMPCacheId cache_id;
+	const NMPlatformObject *const *objs;
+	guint i, len;
+	const NMPObject *link;
+
+	if (ifindex <= 0)
+		return FALSE;
+
+	link = cache_lookup_link (platform, ifindex);
+	if (!link)
+		return FALSE;
+
+	if (!NM_FLAGS_HAS (link->link.n_ifi_flags, IFF_UP))
+		return FALSE;
+
+	if (link->link.master > 0)
+		return TRUE;
+
+	if (nmp_cache_lookup_multi (priv->cache,
+	                            nmp_cache_id_init_addrroute_visible_by_ifindex (&cache_id, NMP_OBJECT_TYPE_IP4_ADDRESS, ifindex),
+	                            NULL))
+		return TRUE;
+
+	objs = nmp_cache_lookup_multi (priv->cache,
+	                               nmp_cache_id_init_addrroute_visible_by_ifindex (&cache_id, NMP_OBJECT_TYPE_IP6_ADDRESS, ifindex),
+	                               &len);
+	if (objs) {
+		for (i = 0; i < len; i++) {
+			const NMPlatformIP6Address *a = (NMPlatformIP6Address *) objs[i];
+
+			if (!IN6_IS_ADDR_LINKLOCAL (&a->address))
+				return TRUE;
+		}
+	}
+	return FALSE;
+}
+
+/******************************************************************/
+
 static guint32
 mesh_get_channel (NMPlatform *platform, int ifindex)
 {
@@ -6216,6 +6261,8 @@ nm_linux_platform_class_init (NMLinuxPlatformClass *klass)
 	platform_class->link_enslave = link_enslave;
 	platform_class->link_release = link_release;
 
+	platform_class->link_can_assume = link_can_assume;
+
 	platform_class->vlan_add = vlan_add;
 	platform_class->link_vlan_change = link_vlan_change;
 	platform_class->link_vxlan_add = link_vxlan_add;
diff --git a/src/platform/nm-platform.c b/src/platform/nm-platform.c
index d5ee48d4..5a399b31 100644
--- a/src/platform/nm-platform.c
+++ b/src/platform/nm-platform.c
@@ -1378,6 +1378,18 @@ nm_platform_link_get_master (NMPlatform *self, int slave)
 
 /*****************************************************************************/
 
+gboolean
+nm_platform_link_can_assume (NMPlatform *self, int ifindex)
+{
+	_CHECK_SELF (self, klass, FALSE);
+
+	if (klass->link_can_assume)
+		return klass->link_can_assume (self, ifindex);
+	g_return_val_if_reached (FALSE);
+}
+
+/*****************************************************************************/
+
 /**
  * nm_platform_link_get_lnk:
  * @self: the platform instance
diff --git a/src/platform/nm-platform.h b/src/platform/nm-platform.h
index 8c97f766..15bd2fde 100644
--- a/src/platform/nm-platform.h
+++ b/src/platform/nm-platform.h
@@ -528,6 +528,8 @@ typedef struct {
 	gboolean (*link_enslave) (NMPlatform *, int master, int slave);
 	gboolean (*link_release) (NMPlatform *, int master, int slave);
 
+	gboolean (*link_can_assume) (NMPlatform *, int ifindex);
+
 	gboolean (*vlan_add) (NMPlatform *, const char *name, int parent, int vlanid, guint32 vlanflags, const NMPlatformLink **out_link);
 	gboolean (*link_vlan_change) (NMPlatform *self,
 	                              int ifindex,
@@ -717,6 +719,8 @@ gboolean nm_platform_link_get_user_ipv6ll_enabled (NMPlatform *self, int ifindex
 gconstpointer nm_platform_link_get_address (NMPlatform *self, int ifindex, size_t *length);
 int nm_platform_link_get_master (NMPlatform *self, int slave);
 
+gboolean nm_platform_link_can_assume (NMPlatform *self, int ifindex);
+
 gboolean nm_platform_link_get_unmanaged (NMPlatform *self, int ifindex, gboolean *unmanaged);
 gboolean nm_platform_link_supports_slaves (NMPlatform *self, int ifindex);
 const char *nm_platform_link_get_type_name (NMPlatform *self, int ifindex);
diff --git a/src/platform/tests/Makefile.am b/src/platform/tests/Makefile.am
index b097fcf6..ebf20e15 100644
--- a/src/platform/tests/Makefile.am
+++ b/src/platform/tests/Makefile.am
@@ -9,7 +9,6 @@ AM_CPPFLAGS = \
 	-I${srcdir}/.. \
 	-DG_LOG_DOMAIN=\""NetworkManager"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GLIB_CFLAGS) \
 	$(GUDEV_CFLAGS) \
 	$(LIBNL_CFLAGS)
@@ -22,7 +21,10 @@ PLATFORM_SOURCES = \
 	../nm-platform.c \
 	../nm-fake-platform.c \
 	../nm-linux-platform.c
-TEST_SOURCES = $(PLATFORM_SOURCES) test-common.c test-common.h
+TEST_SOURCES = \
+	test-common.c \
+	test-common.h \
+	$(PLATFORM_SOURCES)
 AM_CFLAGS = $(CODE_COVERAGE_CFLAGS)
 AM_LDFLAGS = $(GLIB_LIBS) $(GUDEV_LIBS) $(LIBNL_LIBS) $(CODE_COVERAGE_LDFLAGS)
 PLATFORM_LDADD = \
diff --git a/src/platform/tests/Makefile.in b/src/platform/tests/Makefile.in
index c04d6a1b..7c4b72ea 100644
--- a/src/platform/tests/Makefile.in
+++ b/src/platform/tests/Makefile.in
@@ -135,8 +135,8 @@ am__v_lt_1 =
 am__objects_2 = test_address_fake-nm-platform.$(OBJEXT) \
 	test_address_fake-nm-fake-platform.$(OBJEXT) \
 	test_address_fake-nm-linux-platform.$(OBJEXT)
-am__objects_3 = $(am__objects_2) \
-	test_address_fake-test-common.$(OBJEXT)
+am__objects_3 = test_address_fake-test-common.$(OBJEXT) \
+	$(am__objects_2)
 am_test_address_fake_OBJECTS =  \
 	test_address_fake-test-address.$(OBJEXT) $(am__objects_3)
 test_address_fake_OBJECTS = $(am_test_address_fake_OBJECTS)
@@ -144,8 +144,8 @@ test_address_fake_DEPENDENCIES = $(PLATFORM_LDADD)
 am__objects_4 = test_address_linux-nm-platform.$(OBJEXT) \
 	test_address_linux-nm-fake-platform.$(OBJEXT) \
 	test_address_linux-nm-linux-platform.$(OBJEXT)
-am__objects_5 = $(am__objects_4) \
-	test_address_linux-test-common.$(OBJEXT)
+am__objects_5 = test_address_linux-test-common.$(OBJEXT) \
+	$(am__objects_4)
 am_test_address_linux_OBJECTS =  \
 	test_address_linux-test-address.$(OBJEXT) $(am__objects_5)
 test_address_linux_OBJECTS = $(am_test_address_linux_OBJECTS)
@@ -153,8 +153,8 @@ test_address_linux_DEPENDENCIES = $(PLATFORM_LDADD)
 am__objects_6 = test_cleanup_fake-nm-platform.$(OBJEXT) \
 	test_cleanup_fake-nm-fake-platform.$(OBJEXT) \
 	test_cleanup_fake-nm-linux-platform.$(OBJEXT)
-am__objects_7 = $(am__objects_6) \
-	test_cleanup_fake-test-common.$(OBJEXT)
+am__objects_7 = test_cleanup_fake-test-common.$(OBJEXT) \
+	$(am__objects_6)
 am_test_cleanup_fake_OBJECTS =  \
 	test_cleanup_fake-test-cleanup.$(OBJEXT) $(am__objects_7)
 test_cleanup_fake_OBJECTS = $(am_test_cleanup_fake_OBJECTS)
@@ -162,8 +162,8 @@ test_cleanup_fake_DEPENDENCIES = $(PLATFORM_LDADD)
 am__objects_8 = test_cleanup_linux-nm-platform.$(OBJEXT) \
 	test_cleanup_linux-nm-fake-platform.$(OBJEXT) \
 	test_cleanup_linux-nm-linux-platform.$(OBJEXT)
-am__objects_9 = $(am__objects_8) \
-	test_cleanup_linux-test-common.$(OBJEXT)
+am__objects_9 = test_cleanup_linux-test-common.$(OBJEXT) \
+	$(am__objects_8)
 am_test_cleanup_linux_OBJECTS =  \
 	test_cleanup_linux-test-cleanup.$(OBJEXT) $(am__objects_9)
 test_cleanup_linux_OBJECTS = $(am_test_cleanup_linux_OBJECTS)
@@ -174,8 +174,8 @@ test_general_DEPENDENCIES = $(top_builddir)/src/libNetworkManager.la
 am__objects_10 = test_link_fake-nm-platform.$(OBJEXT) \
 	test_link_fake-nm-fake-platform.$(OBJEXT) \
 	test_link_fake-nm-linux-platform.$(OBJEXT)
-am__objects_11 = $(am__objects_10) \
-	test_link_fake-test-common.$(OBJEXT)
+am__objects_11 = test_link_fake-test-common.$(OBJEXT) \
+	$(am__objects_10)
 am_test_link_fake_OBJECTS = test_link_fake-test-link.$(OBJEXT) \
 	$(am__objects_11)
 test_link_fake_OBJECTS = $(am_test_link_fake_OBJECTS)
@@ -183,8 +183,8 @@ test_link_fake_DEPENDENCIES = $(PLATFORM_LDADD)
 am__objects_12 = test_link_linux-nm-platform.$(OBJEXT) \
 	test_link_linux-nm-fake-platform.$(OBJEXT) \
 	test_link_linux-nm-linux-platform.$(OBJEXT)
-am__objects_13 = $(am__objects_12) \
-	test_link_linux-test-common.$(OBJEXT)
+am__objects_13 = test_link_linux-test-common.$(OBJEXT) \
+	$(am__objects_12)
 am_test_link_linux_OBJECTS = test_link_linux-test-link.$(OBJEXT) \
 	$(am__objects_13)
 test_link_linux_OBJECTS = $(am_test_link_linux_OBJECTS)
@@ -196,8 +196,8 @@ test_nmp_object_DEPENDENCIES =  \
 am__objects_14 = test_route_fake-nm-platform.$(OBJEXT) \
 	test_route_fake-nm-fake-platform.$(OBJEXT) \
 	test_route_fake-nm-linux-platform.$(OBJEXT)
-am__objects_15 = $(am__objects_14) \
-	test_route_fake-test-common.$(OBJEXT)
+am__objects_15 = test_route_fake-test-common.$(OBJEXT) \
+	$(am__objects_14)
 am_test_route_fake_OBJECTS = test_route_fake-test-route.$(OBJEXT) \
 	$(am__objects_15)
 test_route_fake_OBJECTS = $(am_test_route_fake_OBJECTS)
@@ -205,8 +205,8 @@ test_route_fake_DEPENDENCIES = $(PLATFORM_LDADD)
 am__objects_16 = test_route_linux-nm-platform.$(OBJEXT) \
 	test_route_linux-nm-fake-platform.$(OBJEXT) \
 	test_route_linux-nm-linux-platform.$(OBJEXT)
-am__objects_17 = $(am__objects_16) \
-	test_route_linux-test-common.$(OBJEXT)
+am__objects_17 = test_route_linux-test-common.$(OBJEXT) \
+	$(am__objects_16)
 am_test_route_linux_OBJECTS = test_route_linux-test-route.$(OBJEXT) \
 	$(am__objects_17)
 test_route_linux_OBJECTS = $(am_test_route_linux_OBJECTS)
@@ -757,14 +757,17 @@ AM_CPPFLAGS = -I${top_srcdir} -I${top_srcdir}/shared \
 	-I${top_builddir}/libnm-core -I${srcdir}/.. \
 	-DG_LOG_DOMAIN=\""NetworkManager"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE $(GLIB_CFLAGS) \
-	$(GUDEV_CFLAGS) $(LIBNL_CFLAGS) $(am__append_1)
+	$(GLIB_CFLAGS) $(GUDEV_CFLAGS) $(LIBNL_CFLAGS) $(am__append_1)
 PLATFORM_SOURCES = \
 	../nm-platform.c \
 	../nm-fake-platform.c \
 	../nm-linux-platform.c
 
-TEST_SOURCES = $(PLATFORM_SOURCES) test-common.c test-common.h
+TEST_SOURCES = \
+	test-common.c \
+	test-common.h \
+	$(PLATFORM_SOURCES)
+
 AM_CFLAGS = $(CODE_COVERAGE_CFLAGS)
 AM_LDFLAGS = $(GLIB_LIBS) $(GUDEV_LIBS) $(LIBNL_LIBS) $(CODE_COVERAGE_LDFLAGS)
 PLATFORM_LDADD = \
@@ -1058,6 +1061,20 @@ test_address_fake-test-address.obj: test-address.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_address_fake-test-address.obj `if test -f 'test-address.c'; then $(CYGPATH_W) 'test-address.c'; else $(CYGPATH_W) '$(srcdir)/test-address.c'; fi`
 
+test_address_fake-test-common.o: test-common.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_address_fake-test-common.o -MD -MP -MF $(DEPDIR)/test_address_fake-test-common.Tpo -c -o test_address_fake-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_address_fake-test-common.Tpo $(DEPDIR)/test_address_fake-test-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-common.c' object='test_address_fake-test-common.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_address_fake-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
+
+test_address_fake-test-common.obj: test-common.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_address_fake-test-common.obj -MD -MP -MF $(DEPDIR)/test_address_fake-test-common.Tpo -c -o test_address_fake-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_address_fake-test-common.Tpo $(DEPDIR)/test_address_fake-test-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-common.c' object='test_address_fake-test-common.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_address_fake-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
+
 test_address_fake-nm-platform.o: ../nm-platform.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_address_fake-nm-platform.o -MD -MP -MF $(DEPDIR)/test_address_fake-nm-platform.Tpo -c -o test_address_fake-nm-platform.o `test -f '../nm-platform.c' || echo '$(srcdir)/'`../nm-platform.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_address_fake-nm-platform.Tpo $(DEPDIR)/test_address_fake-nm-platform.Po
@@ -1100,20 +1117,6 @@ test_address_fake-nm-linux-platform.obj: ../nm-linux-platform.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_address_fake-nm-linux-platform.obj `if test -f '../nm-linux-platform.c'; then $(CYGPATH_W) '../nm-linux-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-linux-platform.c'; fi`
 
-test_address_fake-test-common.o: test-common.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_address_fake-test-common.o -MD -MP -MF $(DEPDIR)/test_address_fake-test-common.Tpo -c -o test_address_fake-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_address_fake-test-common.Tpo $(DEPDIR)/test_address_fake-test-common.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-common.c' object='test_address_fake-test-common.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_address_fake-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
-
-test_address_fake-test-common.obj: test-common.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_address_fake-test-common.obj -MD -MP -MF $(DEPDIR)/test_address_fake-test-common.Tpo -c -o test_address_fake-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_address_fake-test-common.Tpo $(DEPDIR)/test_address_fake-test-common.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-common.c' object='test_address_fake-test-common.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_address_fake-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
-
 test_address_linux-test-address.o: test-address.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_address_linux-test-address.o -MD -MP -MF $(DEPDIR)/test_address_linux-test-address.Tpo -c -o test_address_linux-test-address.o `test -f 'test-address.c' || echo '$(srcdir)/'`test-address.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_address_linux-test-address.Tpo $(DEPDIR)/test_address_linux-test-address.Po
@@ -1128,6 +1131,20 @@ test_address_linux-test-address.obj: test-address.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_address_linux-test-address.obj `if test -f 'test-address.c'; then $(CYGPATH_W) 'test-address.c'; else $(CYGPATH_W) '$(srcdir)/test-address.c'; fi`
 
+test_address_linux-test-common.o: test-common.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_address_linux-test-common.o -MD -MP -MF $(DEPDIR)/test_address_linux-test-common.Tpo -c -o test_address_linux-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_address_linux-test-common.Tpo $(DEPDIR)/test_address_linux-test-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-common.c' object='test_address_linux-test-common.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_address_linux-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
+
+test_address_linux-test-common.obj: test-common.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_address_linux-test-common.obj -MD -MP -MF $(DEPDIR)/test_address_linux-test-common.Tpo -c -o test_address_linux-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_address_linux-test-common.Tpo $(DEPDIR)/test_address_linux-test-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-common.c' object='test_address_linux-test-common.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_address_linux-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
+
 test_address_linux-nm-platform.o: ../nm-platform.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_address_linux-nm-platform.o -MD -MP -MF $(DEPDIR)/test_address_linux-nm-platform.Tpo -c -o test_address_linux-nm-platform.o `test -f '../nm-platform.c' || echo '$(srcdir)/'`../nm-platform.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_address_linux-nm-platform.Tpo $(DEPDIR)/test_address_linux-nm-platform.Po
@@ -1170,20 +1187,6 @@ test_address_linux-nm-linux-platform.obj: ../nm-linux-platform.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_address_linux-nm-linux-platform.obj `if test -f '../nm-linux-platform.c'; then $(CYGPATH_W) '../nm-linux-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-linux-platform.c'; fi`
 
-test_address_linux-test-common.o: test-common.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_address_linux-test-common.o -MD -MP -MF $(DEPDIR)/test_address_linux-test-common.Tpo -c -o test_address_linux-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_address_linux-test-common.Tpo $(DEPDIR)/test_address_linux-test-common.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-common.c' object='test_address_linux-test-common.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_address_linux-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
-
-test_address_linux-test-common.obj: test-common.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_address_linux-test-common.obj -MD -MP -MF $(DEPDIR)/test_address_linux-test-common.Tpo -c -o test_address_linux-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_address_linux-test-common.Tpo $(DEPDIR)/test_address_linux-test-common.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-common.c' object='test_address_linux-test-common.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_address_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_address_linux-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
-
 test_cleanup_fake-test-cleanup.o: test-cleanup.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_cleanup_fake-test-cleanup.o -MD -MP -MF $(DEPDIR)/test_cleanup_fake-test-cleanup.Tpo -c -o test_cleanup_fake-test-cleanup.o `test -f 'test-cleanup.c' || echo '$(srcdir)/'`test-cleanup.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_cleanup_fake-test-cleanup.Tpo $(DEPDIR)/test_cleanup_fake-test-cleanup.Po
@@ -1198,6 +1201,20 @@ test_cleanup_fake-test-cleanup.obj: test-cleanup.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_cleanup_fake-test-cleanup.obj `if test -f 'test-cleanup.c'; then $(CYGPATH_W) 'test-cleanup.c'; else $(CYGPATH_W) '$(srcdir)/test-cleanup.c'; fi`
 
+test_cleanup_fake-test-common.o: test-common.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_cleanup_fake-test-common.o -MD -MP -MF $(DEPDIR)/test_cleanup_fake-test-common.Tpo -c -o test_cleanup_fake-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_cleanup_fake-test-common.Tpo $(DEPDIR)/test_cleanup_fake-test-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-common.c' object='test_cleanup_fake-test-common.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_cleanup_fake-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
+
+test_cleanup_fake-test-common.obj: test-common.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_cleanup_fake-test-common.obj -MD -MP -MF $(DEPDIR)/test_cleanup_fake-test-common.Tpo -c -o test_cleanup_fake-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_cleanup_fake-test-common.Tpo $(DEPDIR)/test_cleanup_fake-test-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-common.c' object='test_cleanup_fake-test-common.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_cleanup_fake-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
+
 test_cleanup_fake-nm-platform.o: ../nm-platform.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_cleanup_fake-nm-platform.o -MD -MP -MF $(DEPDIR)/test_cleanup_fake-nm-platform.Tpo -c -o test_cleanup_fake-nm-platform.o `test -f '../nm-platform.c' || echo '$(srcdir)/'`../nm-platform.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_cleanup_fake-nm-platform.Tpo $(DEPDIR)/test_cleanup_fake-nm-platform.Po
@@ -1240,20 +1257,6 @@ test_cleanup_fake-nm-linux-platform.obj: ../nm-linux-platform.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_cleanup_fake-nm-linux-platform.obj `if test -f '../nm-linux-platform.c'; then $(CYGPATH_W) '../nm-linux-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-linux-platform.c'; fi`
 
-test_cleanup_fake-test-common.o: test-common.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_cleanup_fake-test-common.o -MD -MP -MF $(DEPDIR)/test_cleanup_fake-test-common.Tpo -c -o test_cleanup_fake-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_cleanup_fake-test-common.Tpo $(DEPDIR)/test_cleanup_fake-test-common.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-common.c' object='test_cleanup_fake-test-common.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_cleanup_fake-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
-
-test_cleanup_fake-test-common.obj: test-common.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_cleanup_fake-test-common.obj -MD -MP -MF $(DEPDIR)/test_cleanup_fake-test-common.Tpo -c -o test_cleanup_fake-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_cleanup_fake-test-common.Tpo $(DEPDIR)/test_cleanup_fake-test-common.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-common.c' object='test_cleanup_fake-test-common.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_cleanup_fake-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
-
 test_cleanup_linux-test-cleanup.o: test-cleanup.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_cleanup_linux-test-cleanup.o -MD -MP -MF $(DEPDIR)/test_cleanup_linux-test-cleanup.Tpo -c -o test_cleanup_linux-test-cleanup.o `test -f 'test-cleanup.c' || echo '$(srcdir)/'`test-cleanup.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_cleanup_linux-test-cleanup.Tpo $(DEPDIR)/test_cleanup_linux-test-cleanup.Po
@@ -1268,6 +1271,20 @@ test_cleanup_linux-test-cleanup.obj: test-cleanup.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_cleanup_linux-test-cleanup.obj `if test -f 'test-cleanup.c'; then $(CYGPATH_W) 'test-cleanup.c'; else $(CYGPATH_W) '$(srcdir)/test-cleanup.c'; fi`
 
+test_cleanup_linux-test-common.o: test-common.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_cleanup_linux-test-common.o -MD -MP -MF $(DEPDIR)/test_cleanup_linux-test-common.Tpo -c -o test_cleanup_linux-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_cleanup_linux-test-common.Tpo $(DEPDIR)/test_cleanup_linux-test-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-common.c' object='test_cleanup_linux-test-common.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_cleanup_linux-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
+
+test_cleanup_linux-test-common.obj: test-common.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_cleanup_linux-test-common.obj -MD -MP -MF $(DEPDIR)/test_cleanup_linux-test-common.Tpo -c -o test_cleanup_linux-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_cleanup_linux-test-common.Tpo $(DEPDIR)/test_cleanup_linux-test-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-common.c' object='test_cleanup_linux-test-common.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_cleanup_linux-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
+
 test_cleanup_linux-nm-platform.o: ../nm-platform.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_cleanup_linux-nm-platform.o -MD -MP -MF $(DEPDIR)/test_cleanup_linux-nm-platform.Tpo -c -o test_cleanup_linux-nm-platform.o `test -f '../nm-platform.c' || echo '$(srcdir)/'`../nm-platform.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_cleanup_linux-nm-platform.Tpo $(DEPDIR)/test_cleanup_linux-nm-platform.Po
@@ -1310,20 +1327,6 @@ test_cleanup_linux-nm-linux-platform.obj: ../nm-linux-platform.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_cleanup_linux-nm-linux-platform.obj `if test -f '../nm-linux-platform.c'; then $(CYGPATH_W) '../nm-linux-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-linux-platform.c'; fi`
 
-test_cleanup_linux-test-common.o: test-common.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_cleanup_linux-test-common.o -MD -MP -MF $(DEPDIR)/test_cleanup_linux-test-common.Tpo -c -o test_cleanup_linux-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_cleanup_linux-test-common.Tpo $(DEPDIR)/test_cleanup_linux-test-common.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-common.c' object='test_cleanup_linux-test-common.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_cleanup_linux-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
-
-test_cleanup_linux-test-common.obj: test-common.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_cleanup_linux-test-common.obj -MD -MP -MF $(DEPDIR)/test_cleanup_linux-test-common.Tpo -c -o test_cleanup_linux-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_cleanup_linux-test-common.Tpo $(DEPDIR)/test_cleanup_linux-test-common.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-common.c' object='test_cleanup_linux-test-common.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cleanup_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_cleanup_linux-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
-
 test_link_fake-test-link.o: test-link.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_link_fake-test-link.o -MD -MP -MF $(DEPDIR)/test_link_fake-test-link.Tpo -c -o test_link_fake-test-link.o `test -f 'test-link.c' || echo '$(srcdir)/'`test-link.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_link_fake-test-link.Tpo $(DEPDIR)/test_link_fake-test-link.Po
@@ -1338,6 +1341,20 @@ test_link_fake-test-link.obj: test-link.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_link_fake-test-link.obj `if test -f 'test-link.c'; then $(CYGPATH_W) 'test-link.c'; else $(CYGPATH_W) '$(srcdir)/test-link.c'; fi`
 
+test_link_fake-test-common.o: test-common.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_link_fake-test-common.o -MD -MP -MF $(DEPDIR)/test_link_fake-test-common.Tpo -c -o test_link_fake-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_link_fake-test-common.Tpo $(DEPDIR)/test_link_fake-test-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-common.c' object='test_link_fake-test-common.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_link_fake-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
+
+test_link_fake-test-common.obj: test-common.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_link_fake-test-common.obj -MD -MP -MF $(DEPDIR)/test_link_fake-test-common.Tpo -c -o test_link_fake-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_link_fake-test-common.Tpo $(DEPDIR)/test_link_fake-test-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-common.c' object='test_link_fake-test-common.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_link_fake-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
+
 test_link_fake-nm-platform.o: ../nm-platform.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_link_fake-nm-platform.o -MD -MP -MF $(DEPDIR)/test_link_fake-nm-platform.Tpo -c -o test_link_fake-nm-platform.o `test -f '../nm-platform.c' || echo '$(srcdir)/'`../nm-platform.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_link_fake-nm-platform.Tpo $(DEPDIR)/test_link_fake-nm-platform.Po
@@ -1380,20 +1397,6 @@ test_link_fake-nm-linux-platform.obj: ../nm-linux-platform.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_link_fake-nm-linux-platform.obj `if test -f '../nm-linux-platform.c'; then $(CYGPATH_W) '../nm-linux-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-linux-platform.c'; fi`
 
-test_link_fake-test-common.o: test-common.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_link_fake-test-common.o -MD -MP -MF $(DEPDIR)/test_link_fake-test-common.Tpo -c -o test_link_fake-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_link_fake-test-common.Tpo $(DEPDIR)/test_link_fake-test-common.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-common.c' object='test_link_fake-test-common.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_link_fake-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
-
-test_link_fake-test-common.obj: test-common.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_link_fake-test-common.obj -MD -MP -MF $(DEPDIR)/test_link_fake-test-common.Tpo -c -o test_link_fake-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_link_fake-test-common.Tpo $(DEPDIR)/test_link_fake-test-common.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-common.c' object='test_link_fake-test-common.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_link_fake-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
-
 test_link_linux-test-link.o: test-link.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_link_linux-test-link.o -MD -MP -MF $(DEPDIR)/test_link_linux-test-link.Tpo -c -o test_link_linux-test-link.o `test -f 'test-link.c' || echo '$(srcdir)/'`test-link.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_link_linux-test-link.Tpo $(DEPDIR)/test_link_linux-test-link.Po
@@ -1408,6 +1411,20 @@ test_link_linux-test-link.obj: test-link.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_link_linux-test-link.obj `if test -f 'test-link.c'; then $(CYGPATH_W) 'test-link.c'; else $(CYGPATH_W) '$(srcdir)/test-link.c'; fi`
 
+test_link_linux-test-common.o: test-common.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_link_linux-test-common.o -MD -MP -MF $(DEPDIR)/test_link_linux-test-common.Tpo -c -o test_link_linux-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_link_linux-test-common.Tpo $(DEPDIR)/test_link_linux-test-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-common.c' object='test_link_linux-test-common.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_link_linux-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
+
+test_link_linux-test-common.obj: test-common.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_link_linux-test-common.obj -MD -MP -MF $(DEPDIR)/test_link_linux-test-common.Tpo -c -o test_link_linux-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_link_linux-test-common.Tpo $(DEPDIR)/test_link_linux-test-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-common.c' object='test_link_linux-test-common.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_link_linux-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
+
 test_link_linux-nm-platform.o: ../nm-platform.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_link_linux-nm-platform.o -MD -MP -MF $(DEPDIR)/test_link_linux-nm-platform.Tpo -c -o test_link_linux-nm-platform.o `test -f '../nm-platform.c' || echo '$(srcdir)/'`../nm-platform.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_link_linux-nm-platform.Tpo $(DEPDIR)/test_link_linux-nm-platform.Po
@@ -1450,20 +1467,6 @@ test_link_linux-nm-linux-platform.obj: ../nm-linux-platform.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_link_linux-nm-linux-platform.obj `if test -f '../nm-linux-platform.c'; then $(CYGPATH_W) '../nm-linux-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-linux-platform.c'; fi`
 
-test_link_linux-test-common.o: test-common.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_link_linux-test-common.o -MD -MP -MF $(DEPDIR)/test_link_linux-test-common.Tpo -c -o test_link_linux-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_link_linux-test-common.Tpo $(DEPDIR)/test_link_linux-test-common.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-common.c' object='test_link_linux-test-common.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_link_linux-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
-
-test_link_linux-test-common.obj: test-common.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_link_linux-test-common.obj -MD -MP -MF $(DEPDIR)/test_link_linux-test-common.Tpo -c -o test_link_linux-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_link_linux-test-common.Tpo $(DEPDIR)/test_link_linux-test-common.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-common.c' object='test_link_linux-test-common.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_link_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_link_linux-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
-
 test_route_fake-test-route.o: test-route.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_route_fake-test-route.o -MD -MP -MF $(DEPDIR)/test_route_fake-test-route.Tpo -c -o test_route_fake-test-route.o `test -f 'test-route.c' || echo '$(srcdir)/'`test-route.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_route_fake-test-route.Tpo $(DEPDIR)/test_route_fake-test-route.Po
@@ -1478,6 +1481,20 @@ test_route_fake-test-route.obj: test-route.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_route_fake-test-route.obj `if test -f 'test-route.c'; then $(CYGPATH_W) 'test-route.c'; else $(CYGPATH_W) '$(srcdir)/test-route.c'; fi`
 
+test_route_fake-test-common.o: test-common.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_route_fake-test-common.o -MD -MP -MF $(DEPDIR)/test_route_fake-test-common.Tpo -c -o test_route_fake-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_route_fake-test-common.Tpo $(DEPDIR)/test_route_fake-test-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-common.c' object='test_route_fake-test-common.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_route_fake-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
+
+test_route_fake-test-common.obj: test-common.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_route_fake-test-common.obj -MD -MP -MF $(DEPDIR)/test_route_fake-test-common.Tpo -c -o test_route_fake-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_route_fake-test-common.Tpo $(DEPDIR)/test_route_fake-test-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-common.c' object='test_route_fake-test-common.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_route_fake-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
+
 test_route_fake-nm-platform.o: ../nm-platform.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_route_fake-nm-platform.o -MD -MP -MF $(DEPDIR)/test_route_fake-nm-platform.Tpo -c -o test_route_fake-nm-platform.o `test -f '../nm-platform.c' || echo '$(srcdir)/'`../nm-platform.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_route_fake-nm-platform.Tpo $(DEPDIR)/test_route_fake-nm-platform.Po
@@ -1520,20 +1537,6 @@ test_route_fake-nm-linux-platform.obj: ../nm-linux-platform.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_route_fake-nm-linux-platform.obj `if test -f '../nm-linux-platform.c'; then $(CYGPATH_W) '../nm-linux-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-linux-platform.c'; fi`
 
-test_route_fake-test-common.o: test-common.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_route_fake-test-common.o -MD -MP -MF $(DEPDIR)/test_route_fake-test-common.Tpo -c -o test_route_fake-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_route_fake-test-common.Tpo $(DEPDIR)/test_route_fake-test-common.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-common.c' object='test_route_fake-test-common.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_route_fake-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
-
-test_route_fake-test-common.obj: test-common.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_route_fake-test-common.obj -MD -MP -MF $(DEPDIR)/test_route_fake-test-common.Tpo -c -o test_route_fake-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_route_fake-test-common.Tpo $(DEPDIR)/test_route_fake-test-common.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-common.c' object='test_route_fake-test-common.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_fake_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_route_fake-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
-
 test_route_linux-test-route.o: test-route.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_route_linux-test-route.o -MD -MP -MF $(DEPDIR)/test_route_linux-test-route.Tpo -c -o test_route_linux-test-route.o `test -f 'test-route.c' || echo '$(srcdir)/'`test-route.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_route_linux-test-route.Tpo $(DEPDIR)/test_route_linux-test-route.Po
@@ -1548,6 +1551,20 @@ test_route_linux-test-route.obj: test-route.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_route_linux-test-route.obj `if test -f 'test-route.c'; then $(CYGPATH_W) 'test-route.c'; else $(CYGPATH_W) '$(srcdir)/test-route.c'; fi`
 
+test_route_linux-test-common.o: test-common.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_route_linux-test-common.o -MD -MP -MF $(DEPDIR)/test_route_linux-test-common.Tpo -c -o test_route_linux-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_route_linux-test-common.Tpo $(DEPDIR)/test_route_linux-test-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-common.c' object='test_route_linux-test-common.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_route_linux-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
+
+test_route_linux-test-common.obj: test-common.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_route_linux-test-common.obj -MD -MP -MF $(DEPDIR)/test_route_linux-test-common.Tpo -c -o test_route_linux-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_route_linux-test-common.Tpo $(DEPDIR)/test_route_linux-test-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-common.c' object='test_route_linux-test-common.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_route_linux-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
+
 test_route_linux-nm-platform.o: ../nm-platform.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_route_linux-nm-platform.o -MD -MP -MF $(DEPDIR)/test_route_linux-nm-platform.Tpo -c -o test_route_linux-nm-platform.o `test -f '../nm-platform.c' || echo '$(srcdir)/'`../nm-platform.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_route_linux-nm-platform.Tpo $(DEPDIR)/test_route_linux-nm-platform.Po
@@ -1590,20 +1607,6 @@ test_route_linux-nm-linux-platform.obj: ../nm-linux-platform.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_route_linux-nm-linux-platform.obj `if test -f '../nm-linux-platform.c'; then $(CYGPATH_W) '../nm-linux-platform.c'; else $(CYGPATH_W) '$(srcdir)/../nm-linux-platform.c'; fi`
 
-test_route_linux-test-common.o: test-common.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_route_linux-test-common.o -MD -MP -MF $(DEPDIR)/test_route_linux-test-common.Tpo -c -o test_route_linux-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_route_linux-test-common.Tpo $(DEPDIR)/test_route_linux-test-common.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-common.c' object='test_route_linux-test-common.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_route_linux-test-common.o `test -f 'test-common.c' || echo '$(srcdir)/'`test-common.c
-
-test_route_linux-test-common.obj: test-common.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_route_linux-test-common.obj -MD -MP -MF $(DEPDIR)/test_route_linux-test-common.Tpo -c -o test_route_linux-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_route_linux-test-common.Tpo $(DEPDIR)/test_route_linux-test-common.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-common.c' object='test_route_linux-test-common.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_route_linux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_route_linux-test-common.obj `if test -f 'test-common.c'; then $(CYGPATH_W) 'test-common.c'; else $(CYGPATH_W) '$(srcdir)/test-common.c'; fi`
-
 mostlyclean-libtool:
 	-rm -f *.lo
 
diff --git a/src/ppp-manager/Makefile.am b/src/ppp-manager/Makefile.am
index 5cf908df..7d3e503b 100644
--- a/src/ppp-manager/Makefile.am
+++ b/src/ppp-manager/Makefile.am
@@ -8,7 +8,6 @@ AM_CPPFLAGS = \
 	-I${top_builddir}/libnm-core \
 	-DG_LOG_DOMAIN=\""nm-pppd-plugin"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GLIB_CFLAGS)
 
 pppd_plugindir = $(PPPD_PLUGIN_DIR)
diff --git a/src/ppp-manager/Makefile.in b/src/ppp-manager/Makefile.in
index 50e84429..9a3cff62 100644
--- a/src/ppp-manager/Makefile.in
+++ b/src/ppp-manager/Makefile.in
@@ -488,7 +488,6 @@ with_valgrind = @with_valgrind@
 @WITH_PPP_TRUE@	-I${top_builddir}/libnm-core \
 @WITH_PPP_TRUE@	-DG_LOG_DOMAIN=\""nm-pppd-plugin"\" \
 @WITH_PPP_TRUE@	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-@WITH_PPP_TRUE@	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 @WITH_PPP_TRUE@	$(GLIB_CFLAGS)
 
 @WITH_PPP_TRUE@pppd_plugindir = $(PPPD_PLUGIN_DIR)
diff --git a/src/rdisc/nm-lndp-rdisc.c b/src/rdisc/nm-lndp-rdisc.c
index 27fd2f83..0c5971f4 100644
--- a/src/rdisc/nm-lndp-rdisc.c
+++ b/src/rdisc/nm-lndp-rdisc.c
@@ -78,20 +78,12 @@ send_rs (NMRDisc *rdisc, GError **error)
 	return TRUE;
 }
 
-static NMRDiscPreference
-translate_preference (enum ndp_route_preference preference)
-{
-	switch (preference) {
-	case NDP_ROUTE_PREF_LOW:
-		return NM_RDISC_PREFERENCE_LOW;
-	case NDP_ROUTE_PREF_MEDIUM:
-		return NM_RDISC_PREFERENCE_MEDIUM;
-	case NDP_ROUTE_PREF_HIGH:
-		return NM_RDISC_PREFERENCE_HIGH;
-	default:
-		return NM_RDISC_PREFERENCE_INVALID;
-	}
-}
+_NM_UTILS_LOOKUP_DEFINE (static, translate_preference, enum ndp_route_preference, NMRDiscPreference,
+	NM_UTILS_LOOKUP_DEFAULT (NM_RDISC_PREFERENCE_INVALID),
+	NM_UTILS_LOOKUP_ITEM (NDP_ROUTE_PREF_LOW,    NM_RDISC_PREFERENCE_LOW),
+	NM_UTILS_LOOKUP_ITEM (NDP_ROUTE_PREF_MEDIUM, NM_RDISC_PREFERENCE_MEDIUM),
+	NM_UTILS_LOOKUP_ITEM (NDP_ROUTE_PREF_HIGH,   NM_RDISC_PREFERENCE_HIGH),
+);
 
 static int
 receive_ra (struct ndp *ndp, struct ndp_msg *msg, gpointer user_data)
@@ -99,7 +91,7 @@ receive_ra (struct ndp *ndp, struct ndp_msg *msg, gpointer user_data)
 	NMRDisc *rdisc = (NMRDisc *) user_data;
 	NMRDiscConfigMap changed = 0;
 	struct ndp_msgra *msgra = ndp_msgra (msg);
-	NMRDiscGateway gateway;
+	struct in6_addr gateway_addr;
 	guint32 now = nm_utils_get_monotonic_timestamp_s ();
 	int offset;
 	int hop_limit;
@@ -145,57 +137,73 @@ receive_ra (struct ndp *ndp, struct ndp_msg *msg, gpointer user_data)
 	 * on the network. We should present all of them in router preference
 	 * order.
 	 */
-	memset (&gateway, 0, sizeof (gateway));
-	gateway.address = *ndp_msg_addrto (msg);
-	gateway.timestamp = now;
-	gateway.lifetime = ndp_msgra_router_lifetime (msgra);
-	gateway.preference = translate_preference (ndp_msgra_route_preference (msgra));
-	if (nm_rdisc_add_gateway (rdisc, &gateway))
-		changed |= NM_RDISC_CONFIG_GATEWAYS;
+	gateway_addr = *ndp_msg_addrto (msg);
+	{
+		NMRDiscGateway gateway = {
+		    .address = gateway_addr,
+		    .timestamp = now,
+		    .lifetime = ndp_msgra_router_lifetime (msgra),
+		    .preference = translate_preference (ndp_msgra_route_preference (msgra)),
+		};
+
+		if (nm_rdisc_add_gateway (rdisc, &gateway))
+			changed |= NM_RDISC_CONFIG_GATEWAYS;
+	}
 
 	/* Addresses & Routes */
 	ndp_msg_opt_for_each_offset (offset, msg, NDP_MSG_OPT_PREFIX) {
-		NMRDiscRoute route;
-		NMRDiscAddress address;
+		guint8 r_plen;
+		struct in6_addr r_network;
 
 		/* Device route */
-		memset (&route, 0, sizeof (route));
-		route.plen = ndp_msg_opt_prefix_len (msg, offset);
-		nm_utils_ip6_address_clear_host_address (&route.network, ndp_msg_opt_prefix (msg, offset), route.plen);
-		route.timestamp = now;
+
+		r_plen = ndp_msg_opt_prefix_len (msg, offset);
+		if (r_plen == 0 || r_plen > 128)
+			continue;
+		nm_utils_ip6_address_clear_host_address (&r_network, ndp_msg_opt_prefix (msg, offset), r_plen);
+
 		if (ndp_msg_opt_prefix_flag_on_link (msg, offset)) {
-			route.lifetime = ndp_msg_opt_prefix_valid_time (msg, offset);
+			NMRDiscRoute route = {
+			    .network = r_network,
+			    .plen = r_plen,
+			    .timestamp = now,
+			    .lifetime = ndp_msg_opt_prefix_valid_time (msg, offset),
+			};
+
 			if (nm_rdisc_add_route (rdisc, &route))
 				changed |= NM_RDISC_CONFIG_ROUTES;
 		}
 
 		/* Address */
-		if (ndp_msg_opt_prefix_flag_auto_addr_conf (msg, offset)) {
-			if (route.plen == 64) {
-				memset (&address, 0, sizeof (address));
-				address.address = route.network;
-				address.timestamp = now;
-				address.lifetime = ndp_msg_opt_prefix_valid_time (msg, offset);
-				address.preferred = ndp_msg_opt_prefix_preferred_time (msg, offset);
-				if (address.preferred > address.lifetime)
-					address.preferred = address.lifetime;
-
-				if (nm_rdisc_complete_and_add_address (rdisc, &address))
-					changed |= NM_RDISC_CONFIG_ADDRESSES;
-			}
+		if (   r_plen == 64
+		    && ndp_msg_opt_prefix_flag_auto_addr_conf (msg, offset)) {
+			NMRDiscAddress address = {
+			    .address = r_network,
+			    .timestamp = now,
+			    .lifetime = ndp_msg_opt_prefix_valid_time (msg, offset),
+			    .preferred = ndp_msg_opt_prefix_preferred_time (msg, offset),
+			};
+
+			if (address.preferred > address.lifetime)
+				address.preferred = address.lifetime;
+			if (nm_rdisc_complete_and_add_address (rdisc, &address))
+				changed |= NM_RDISC_CONFIG_ADDRESSES;
 		}
 	}
 	ndp_msg_opt_for_each_offset(offset, msg, NDP_MSG_OPT_ROUTE) {
-		NMRDiscRoute route;
+		NMRDiscRoute route = {
+		    .gateway = gateway_addr,
+		    .plen = ndp_msg_opt_route_prefix_len (msg, offset),
+		    .timestamp = now,
+		    .lifetime = ndp_msg_opt_route_lifetime (msg, offset),
+		    .preference = translate_preference (ndp_msg_opt_route_preference (msg, offset)),
+		};
+
+		if (route.plen == 0 || route.plen > 128)
+			continue;
 
 		/* Routers through this particular gateway */
-		memset (&route, 0, sizeof (route));
-		route.gateway = gateway.address;
-		route.plen = ndp_msg_opt_route_prefix_len (msg, offset);
 		nm_utils_ip6_address_clear_host_address (&route.network, ndp_msg_opt_route_prefix (msg, offset), route.plen);
-		route.timestamp = now;
-		route.lifetime = ndp_msg_opt_route_lifetime (msg, offset);
-		route.preference = translate_preference (ndp_msg_opt_route_preference (msg, offset));
 		if (nm_rdisc_add_route (rdisc, &route))
 			changed |= NM_RDISC_CONFIG_ROUTES;
 	}
@@ -206,12 +214,12 @@ receive_ra (struct ndp *ndp, struct ndp_msg *msg, gpointer user_data)
 		int addr_index;
 
 		ndp_msg_opt_rdnss_for_each_addr (addr, addr_index, msg, offset) {
-			NMRDiscDNSServer dns_server;
+			NMRDiscDNSServer dns_server = {
+			    .address = *addr,
+			    .timestamp = now,
+			    .lifetime = ndp_msg_opt_rdnss_lifetime (msg, offset),
+			};
 
-			memset (&dns_server, 0, sizeof (dns_server));
-			dns_server.address = *addr;
-			dns_server.timestamp = now;
-			dns_server.lifetime = ndp_msg_opt_rdnss_lifetime (msg, offset);
 			/* Pad the lifetime somewhat to give a bit of slack in cases
 			 * where one RA gets lost or something (which can happen on unreliable
 			 * links like WiFi where certain types of frames are not retransmitted).
@@ -228,12 +236,12 @@ receive_ra (struct ndp *ndp, struct ndp_msg *msg, gpointer user_data)
 		int domain_index;
 
 		ndp_msg_opt_dnssl_for_each_domain (domain, domain_index, msg, offset) {
-			NMRDiscDNSDomain dns_domain;
+			NMRDiscDNSDomain dns_domain = {
+			    .domain = domain,
+			    .timestamp = now,
+			    .lifetime = ndp_msg_opt_rdnss_lifetime (msg, offset),
+			};
 
-			memset (&dns_domain, 0, sizeof (dns_domain));
-			dns_domain.domain = domain;
-			dns_domain.timestamp = now;
-			dns_domain.lifetime = ndp_msg_opt_rdnss_lifetime (msg, offset);
 			/* Pad the lifetime somewhat to give a bit of slack in cases
 			 * where one RA gets lost or something (which can happen on unreliable
 			 * links like WiFi where certain types of frames are not retransmitted).
diff --git a/src/rdisc/nm-rdisc.c b/src/rdisc/nm-rdisc.c
index 689fe7f6..12e3962b 100644
--- a/src/rdisc/nm-rdisc.c
+++ b/src/rdisc/nm-rdisc.c
@@ -212,6 +212,9 @@ nm_rdisc_add_route (NMRDisc *rdisc, const NMRDiscRoute *new)
 {
 	int i, insert_idx = -1;
 
+	if (new->plen == 0 || new->plen > 128)
+		return FALSE;
+
 	for (i = 0; i < rdisc->routes->len; i++) {
 		NMRDiscRoute *item = &g_array_index (rdisc->routes, NMRDiscRoute, i);
 
diff --git a/src/rdisc/tests/Makefile.am b/src/rdisc/tests/Makefile.am
index d520e416..65191734 100644
--- a/src/rdisc/tests/Makefile.am
+++ b/src/rdisc/tests/Makefile.am
@@ -9,7 +9,6 @@ AM_CPPFLAGS = \
 	-I${srcdir}/.. \
 	-DG_LOG_DOMAIN=\""NetworkManager"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GLIB_CFLAGS) \
 	$(LIBNDP_CFLAGS)
 
diff --git a/src/rdisc/tests/Makefile.in b/src/rdisc/tests/Makefile.in
index 91b12677..7d452119 100644
--- a/src/rdisc/tests/Makefile.in
+++ b/src/rdisc/tests/Makefile.in
@@ -666,7 +666,6 @@ AM_CPPFLAGS = \
 	-I${srcdir}/.. \
 	-DG_LOG_DOMAIN=\""NetworkManager"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GLIB_CFLAGS) \
 	$(LIBNDP_CFLAGS)
 
diff --git a/src/settings/nm-settings.c b/src/settings/nm-settings.c
index 77e45f49..4ad395a1 100644
--- a/src/settings/nm-settings.c
+++ b/src/settings/nm-settings.c
@@ -104,16 +104,18 @@ EXPORT(nm_settings_connection_replace_and_commit)
 #define HOSTNAMED_SERVICE_PATH      "/org/freedesktop/hostname1"
 #define HOSTNAMED_SERVICE_INTERFACE "org.freedesktop.hostname1"
 
-#define HOSTNAME_FILE_DEFAULT   "/etc/hostname"
-#define HOSTNAME_FILE_SUSE      "/etc/HOSTNAME"
-#define HOSTNAME_FILE_GENTOO    "/etc/conf.d/hostname"
-#define IFCFG_DIR               SYSCONFDIR "/sysconfig/network"
-#define CONF_DHCP               IFCFG_DIR "/dhcp"
+#define HOSTNAME_FILE_DEFAULT        "/etc/hostname"
+#define HOSTNAME_FILE_UCASE_HOSTNAME "/etc/HOSTNAME"
+#define HOSTNAME_FILE_GENTOO         "/etc/conf.d/hostname"
+#define IFCFG_DIR                    SYSCONFDIR "/sysconfig/network"
+#define CONF_DHCP                    IFCFG_DIR "/dhcp"
 
 #define PLUGIN_MODULE_PATH      "plugin-module-path"
 
 #if defined(HOSTNAME_PERSIST_SUSE)
-#define HOSTNAME_FILE           HOSTNAME_FILE_SUSE
+#define HOSTNAME_FILE           HOSTNAME_FILE_UCASE_HOSTNAME
+#elif defined(HOSTNAME_PERSIST_SLACKWARE)
+#define HOSTNAME_FILE           HOSTNAME_FILE_UCASE_HOSTNAME
 #elif defined(HOSTNAME_PERSIST_GENTOO)
 #define HOSTNAME_FILE           HOSTNAME_FILE_GENTOO
 #else
diff --git a/src/settings/plugins/ibft/Makefile.am b/src/settings/plugins/ibft/Makefile.am
index a994808d..d19f36f2 100644
--- a/src/settings/plugins/ibft/Makefile.am
+++ b/src/settings/plugins/ibft/Makefile.am
@@ -19,7 +19,6 @@ AM_CPPFLAGS = \
 	-I$(top_srcdir)/libnm-core \
 	-I$(top_builddir)/libnm-core \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GLIB_CFLAGS) \
 	-DG_LOG_DOMAIN=\""NetworkManager-ibft"\" \
 	-DSYSCONFDIR=\"$(sysconfdir)\" \
diff --git a/src/settings/plugins/ibft/Makefile.in b/src/settings/plugins/ibft/Makefile.in
index 024442b1..7142cf1d 100644
--- a/src/settings/plugins/ibft/Makefile.in
+++ b/src/settings/plugins/ibft/Makefile.in
@@ -541,7 +541,6 @@ AM_CPPFLAGS = \
 	-I$(top_srcdir)/libnm-core \
 	-I$(top_builddir)/libnm-core \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GLIB_CFLAGS) \
 	-DG_LOG_DOMAIN=\""NetworkManager-ibft"\" \
 	-DSYSCONFDIR=\"$(sysconfdir)\" \
diff --git a/src/settings/plugins/ibft/tests/Makefile.am b/src/settings/plugins/ibft/tests/Makefile.am
index 29881e85..939947ca 100644
--- a/src/settings/plugins/ibft/tests/Makefile.am
+++ b/src/settings/plugins/ibft/tests/Makefile.am
@@ -15,7 +15,6 @@ AM_CPPFLAGS = \
 	-I$(srcdir)/../ \
 	-DG_LOG_DOMAIN=\""NetworkManager-ibft"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	-DTEST_IBFT_DIR=\"$(abs_srcdir)\" \
 	-DTEST_SCRATCH_DIR=\"$(abs_builddir)/\"
 
diff --git a/src/settings/plugins/ibft/tests/Makefile.in b/src/settings/plugins/ibft/tests/Makefile.in
index 7ac2bdc1..1869b502 100644
--- a/src/settings/plugins/ibft/tests/Makefile.in
+++ b/src/settings/plugins/ibft/tests/Makefile.in
@@ -666,7 +666,6 @@ with_valgrind = @with_valgrind@
 @ENABLE_TESTS_TRUE@	-I$(srcdir)/../ \
 @ENABLE_TESTS_TRUE@	-DG_LOG_DOMAIN=\""NetworkManager-ibft"\" \
 @ENABLE_TESTS_TRUE@	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-@ENABLE_TESTS_TRUE@	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 @ENABLE_TESTS_TRUE@	-DTEST_IBFT_DIR=\"$(abs_srcdir)\" \
 @ENABLE_TESTS_TRUE@	-DTEST_SCRATCH_DIR=\"$(abs_builddir)/\"
 
diff --git a/src/settings/plugins/ifcfg-rh/Makefile.am b/src/settings/plugins/ifcfg-rh/Makefile.am
index ab96a328..d2899a26 100644
--- a/src/settings/plugins/ifcfg-rh/Makefile.am
+++ b/src/settings/plugins/ifcfg-rh/Makefile.am
@@ -48,7 +48,6 @@ AM_CPPFLAGS = \
 	-I$(top_srcdir)/libnm-core \
 	-I$(top_builddir)/libnm-core \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GLIB_CFLAGS) \
 	$(NSS_CFLAGS) \
 	-DG_LOG_DOMAIN=\""NetworkManager-ifcfg-rh"\" \
diff --git a/src/settings/plugins/ifcfg-rh/Makefile.in b/src/settings/plugins/ifcfg-rh/Makefile.in
index 3fc3495a..54a2b805 100644
--- a/src/settings/plugins/ifcfg-rh/Makefile.in
+++ b/src/settings/plugins/ifcfg-rh/Makefile.in
@@ -566,7 +566,6 @@ AM_CPPFLAGS = \
 	-I$(top_srcdir)/libnm-core \
 	-I$(top_builddir)/libnm-core \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GLIB_CFLAGS) \
 	$(NSS_CFLAGS) \
 	-DG_LOG_DOMAIN=\""NetworkManager-ifcfg-rh"\" \
diff --git a/src/settings/plugins/ifcfg-rh/nm-ifcfg-connection.c b/src/settings/plugins/ifcfg-rh/nm-ifcfg-connection.c
index 2ee5a0b9..b9bbf6d5 100644
--- a/src/settings/plugins/ifcfg-rh/nm-ifcfg-connection.c
+++ b/src/settings/plugins/ifcfg-rh/nm-ifcfg-connection.c
@@ -369,6 +369,7 @@ replace_and_commit (NMSettingsConnection *connection,
 			callback (connection, error, user_data);
 			g_clear_error (&error);
 		}
+		return;
 	}
 
 	NM_SETTINGS_CONNECTION_CLASS (nm_ifcfg_connection_parent_class)->replace_and_commit (connection, new_connection, callback, user_data);
diff --git a/src/settings/plugins/ifcfg-rh/nm-ifcfg-rh.xml b/src/settings/plugins/ifcfg-rh/nm-ifcfg-rh.xml
index c2a6cb34..033fbfaa 100644
--- a/src/settings/plugins/ifcfg-rh/nm-ifcfg-rh.xml
+++ b/src/settings/plugins/ifcfg-rh/nm-ifcfg-rh.xml
@@ -1,30 +1,26 @@
-<?xml version="1.0" encoding="UTF-8" ?>
+<?xml version="1.0" encoding="UTF-8"?>
+<node name="/">
 
-<node name="/" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
-    <interface name="com.redhat.ifcfgrh1">
-      <annotation name="org.gtk.GDBus.DocString" value="
-          Utility methods for handling NM integration with standard Red Hat ifcfg files.
-      " />
+  <!--
+      com.redhat.ifcfgrh1:
 
-      <method name="GetIfcfgDetails">
-        <annotation name="org.gtk.GDBus.DocString" value="
-          Given an ifcfg file, return various internal information about it.
-        " />
-        <arg name="ifcfg" type="s" direction="in">
-          <annotation name="org.gtk.GDBus.DocString" value="
-            The full path to an ifcfg file.
-          " />
-        </arg>
-        <arg name="uuid" type="s" direction="out">
-          <annotation name="org.gtk.GDBus.DocString" value="
-            The UUID of the NM connection backed by this ifcfg file.  If the ifcfg file does not contain a UUID tag, this UUID is generated by NM, otherwise the UUID from the ifcfg file is used.
-          " />
-        </arg>
-        <arg name="path" type="o" direction="out">
-          <annotation name="org.gtk.GDBus.DocString" value="
-            The object path of the NM connected backed by this ifcfg file.
-          " />
-        </arg>
-      </method>
-    </interface>
+      Utility methods for handling NM integration with standard Red Hat ifcfg
+      files.
+  -->
+  <interface name="com.redhat.ifcfgrh1">
+
+    <!--
+        GetIfcfgDetails:
+        @ifcfg: The full path to an ifcfg file.
+        @uuid: The UUID of the NM connection backed by this ifcfg file. If the ifcfg file does not contain a UUID tag, this UUID is generated by NM, otherwise the UUID from the ifcfg file is used.
+        @path: The object path of the NM connected backed by this ifcfg file.
+
+        Given an ifcfg file, return various internal information about it.
+    -->
+    <method name="GetIfcfgDetails">
+      <arg name="ifcfg" type="s" direction="in"/>
+      <arg name="uuid" type="s" direction="out"/>
+      <arg name="path" type="o" direction="out"/>
+    </method>
+  </interface>
 </node>
diff --git a/src/settings/plugins/ifcfg-rh/tests/Makefile.am b/src/settings/plugins/ifcfg-rh/tests/Makefile.am
index 25d27197..73ddfeef 100644
--- a/src/settings/plugins/ifcfg-rh/tests/Makefile.am
+++ b/src/settings/plugins/ifcfg-rh/tests/Makefile.am
@@ -17,7 +17,6 @@ AM_CPPFLAGS = \
 	-I$(srcdir)/../ \
 	-DG_LOG_DOMAIN=\""NetworkManager-ifcfg-rh"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	-DTEST_IFCFG_DIR=\"$(abs_srcdir)\" \
 	-DTEST_SCRATCH_DIR=\"$(abs_builddir)/\" \
 	-DSYSCONFDIR=\"nonexistent\" \
diff --git a/src/settings/plugins/ifcfg-rh/tests/Makefile.in b/src/settings/plugins/ifcfg-rh/tests/Makefile.in
index 00636de9..d822e2e1 100644
--- a/src/settings/plugins/ifcfg-rh/tests/Makefile.in
+++ b/src/settings/plugins/ifcfg-rh/tests/Makefile.in
@@ -721,7 +721,6 @@ with_valgrind = @with_valgrind@
 @ENABLE_TESTS_TRUE@	-I$(srcdir)/../ \
 @ENABLE_TESTS_TRUE@	-DG_LOG_DOMAIN=\""NetworkManager-ifcfg-rh"\" \
 @ENABLE_TESTS_TRUE@	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-@ENABLE_TESTS_TRUE@	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 @ENABLE_TESTS_TRUE@	-DTEST_IFCFG_DIR=\"$(abs_srcdir)\" \
 @ENABLE_TESTS_TRUE@	-DTEST_SCRATCH_DIR=\"$(abs_builddir)/\" \
 @ENABLE_TESTS_TRUE@	-DSYSCONFDIR=\"nonexistent\" \
diff --git a/src/settings/plugins/ifnet/Makefile.am b/src/settings/plugins/ifnet/Makefile.am
index ffd8ab3c..68e80356 100644
--- a/src/settings/plugins/ifnet/Makefile.am
+++ b/src/settings/plugins/ifnet/Makefile.am
@@ -12,7 +12,6 @@ AM_CPPFLAGS = \
 	-I$(top_builddir)/libnm-core \
 	-DG_LOG_DOMAIN=\""NetworkManager-ifnet"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GLIB_CFLAGS) \
 	-DSYSCONFDIR=\"$(sysconfdir)\"
 	-DSBINDIR=\"$(sbindir)\"
diff --git a/src/settings/plugins/ifnet/Makefile.in b/src/settings/plugins/ifnet/Makefile.in
index c6e13316..4b496f54 100644
--- a/src/settings/plugins/ifnet/Makefile.in
+++ b/src/settings/plugins/ifnet/Makefile.in
@@ -537,7 +537,6 @@ AM_CPPFLAGS = \
 	-I$(top_builddir)/libnm-core \
 	-DG_LOG_DOMAIN=\""NetworkManager-ifnet"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GLIB_CFLAGS) \
 	-DSYSCONFDIR=\"$(sysconfdir)\"
 
diff --git a/src/settings/plugins/ifnet/tests/Makefile.am b/src/settings/plugins/ifnet/tests/Makefile.am
index 1919f141..6590d4ae 100644
--- a/src/settings/plugins/ifnet/tests/Makefile.am
+++ b/src/settings/plugins/ifnet/tests/Makefile.am
@@ -13,7 +13,6 @@ AM_CPPFLAGS= \
 	-I$(top_srcdir)/src/platform \
 	-DG_LOG_DOMAIN=\""NetworkManager-ifnet"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(CHECK_CFLAGS) \
 	$(GLIB_CFLAGS) \
 	$(CODE_COVERAGE_CFLAGS) \
diff --git a/src/settings/plugins/ifnet/tests/Makefile.in b/src/settings/plugins/ifnet/tests/Makefile.in
index 1e08b955..1a152870 100644
--- a/src/settings/plugins/ifnet/tests/Makefile.in
+++ b/src/settings/plugins/ifnet/tests/Makefile.in
@@ -670,7 +670,6 @@ with_valgrind = @with_valgrind@
 @ENABLE_TESTS_TRUE@	-I$(top_srcdir)/src/platform \
 @ENABLE_TESTS_TRUE@	-DG_LOG_DOMAIN=\""NetworkManager-ifnet"\" \
 @ENABLE_TESTS_TRUE@	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-@ENABLE_TESTS_TRUE@	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 @ENABLE_TESTS_TRUE@	$(CHECK_CFLAGS) \
 @ENABLE_TESTS_TRUE@	$(GLIB_CFLAGS) \
 @ENABLE_TESTS_TRUE@	$(CODE_COVERAGE_CFLAGS) \
diff --git a/src/settings/plugins/ifupdown/Makefile.am b/src/settings/plugins/ifupdown/Makefile.am
index c5c645d3..94b0be54 100644
--- a/src/settings/plugins/ifupdown/Makefile.am
+++ b/src/settings/plugins/ifupdown/Makefile.am
@@ -11,7 +11,6 @@ AM_CPPFLAGS = \
 	-I$(top_builddir)/libnm-core \
 	-DG_LOG_DOMAIN=\""NetworkManager-ifupdown"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GLIB_CFLAGS) \
 	$(GUDEV_CFLAGS) \
 	-DSYSCONFDIR=\"$(sysconfdir)\"
diff --git a/src/settings/plugins/ifupdown/Makefile.in b/src/settings/plugins/ifupdown/Makefile.in
index b16c3053..1f8c7e1b 100644
--- a/src/settings/plugins/ifupdown/Makefile.in
+++ b/src/settings/plugins/ifupdown/Makefile.in
@@ -535,7 +535,6 @@ AM_CPPFLAGS = \
 	-I$(top_builddir)/libnm-core \
 	-DG_LOG_DOMAIN=\""NetworkManager-ifupdown"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GLIB_CFLAGS) \
 	$(GUDEV_CFLAGS) \
 	-DSYSCONFDIR=\"$(sysconfdir)\"
diff --git a/src/settings/plugins/ifupdown/tests/Makefile.am b/src/settings/plugins/ifupdown/tests/Makefile.am
index 29e9a7ed..e12c0181 100644
--- a/src/settings/plugins/ifupdown/tests/Makefile.am
+++ b/src/settings/plugins/ifupdown/tests/Makefile.am
@@ -10,7 +10,6 @@ AM_CPPFLAGS = \
 	-I$(srcdir)/../ \
 	-DG_LOG_DOMAIN=\""NetworkManager-ifupdown"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GLIB_CFLAGS) \
 	-DTEST_ENI_DIR=\"$(abs_srcdir)\"
 
diff --git a/src/settings/plugins/ifupdown/tests/Makefile.in b/src/settings/plugins/ifupdown/tests/Makefile.in
index 8ad1c0ab..06e9b61e 100644
--- a/src/settings/plugins/ifupdown/tests/Makefile.in
+++ b/src/settings/plugins/ifupdown/tests/Makefile.in
@@ -664,7 +664,6 @@ with_valgrind = @with_valgrind@
 @ENABLE_TESTS_TRUE@	-I$(srcdir)/../ \
 @ENABLE_TESTS_TRUE@	-DG_LOG_DOMAIN=\""NetworkManager-ifupdown"\" \
 @ENABLE_TESTS_TRUE@	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-@ENABLE_TESTS_TRUE@	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 @ENABLE_TESTS_TRUE@	$(GLIB_CFLAGS) \
 @ENABLE_TESTS_TRUE@	-DTEST_ENI_DIR=\"$(abs_srcdir)\"
 
diff --git a/src/settings/plugins/keyfile/Makefile.am b/src/settings/plugins/keyfile/Makefile.am
index ddcd15b2..08119dae 100644
--- a/src/settings/plugins/keyfile/Makefile.am
+++ b/src/settings/plugins/keyfile/Makefile.am
@@ -11,7 +11,6 @@ AM_CPPFLAGS = \
 	-I$(top_builddir)/libnm-core \
 	-DG_LOG_DOMAIN=\""NetworkManager-keyfile"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GLIB_CFLAGS) \
 	-DNMCONFDIR=\"$(nmconfdir)\"
 
diff --git a/src/settings/plugins/keyfile/Makefile.in b/src/settings/plugins/keyfile/Makefile.in
index 9c078ca4..65410336 100644
--- a/src/settings/plugins/keyfile/Makefile.in
+++ b/src/settings/plugins/keyfile/Makefile.in
@@ -504,7 +504,6 @@ AM_CPPFLAGS = \
 	-I$(top_builddir)/libnm-core \
 	-DG_LOG_DOMAIN=\""NetworkManager-keyfile"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GLIB_CFLAGS) \
 	-DNMCONFDIR=\"$(nmconfdir)\"
 
diff --git a/src/settings/plugins/keyfile/tests/Makefile.am b/src/settings/plugins/keyfile/tests/Makefile.am
index 4d85f09a..fd08b896 100644
--- a/src/settings/plugins/keyfile/tests/Makefile.am
+++ b/src/settings/plugins/keyfile/tests/Makefile.am
@@ -16,7 +16,6 @@ AM_CPPFLAGS = \
 	$(CODE_COVERAGE_CFLAGS) \
 	-DG_LOG_DOMAIN=\""NetworkManager-keyfile"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	-DTEST_KEYFILES_DIR=\"$(abs_srcdir)/keyfiles\" \
 	-DTEST_SCRATCH_DIR=\"$(abs_builddir)/keyfiles\" \
 	-DNMCONFDIR=\"nonexistent\"
diff --git a/src/settings/plugins/keyfile/tests/Makefile.in b/src/settings/plugins/keyfile/tests/Makefile.in
index 7577df57..eb7a99d2 100644
--- a/src/settings/plugins/keyfile/tests/Makefile.in
+++ b/src/settings/plugins/keyfile/tests/Makefile.in
@@ -711,7 +711,6 @@ with_valgrind = @with_valgrind@
 @ENABLE_TESTS_TRUE@	$(CODE_COVERAGE_CFLAGS) \
 @ENABLE_TESTS_TRUE@	-DG_LOG_DOMAIN=\""NetworkManager-keyfile"\" \
 @ENABLE_TESTS_TRUE@	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-@ENABLE_TESTS_TRUE@	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 @ENABLE_TESTS_TRUE@	-DTEST_KEYFILES_DIR=\"$(abs_srcdir)/keyfiles\" \
 @ENABLE_TESTS_TRUE@	-DTEST_SCRATCH_DIR=\"$(abs_builddir)/keyfiles\" \
 @ENABLE_TESTS_TRUE@	-DNMCONFDIR=\"nonexistent\"
diff --git a/src/supplicant-manager/tests/Makefile.am b/src/supplicant-manager/tests/Makefile.am
index 9ac0387c..6672c673 100644
--- a/src/supplicant-manager/tests/Makefile.am
+++ b/src/supplicant-manager/tests/Makefile.am
@@ -9,7 +9,6 @@ AM_CPPFLAGS = \
 	-I$(top_srcdir)/src/supplicant-manager \
 	-DG_LOG_DOMAIN=\""NetworkManager"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	-DTEST_CERT_DIR=\"$(srcdir)/certs/\" \
 	$(GLIB_CFLAGS)
 
diff --git a/src/supplicant-manager/tests/Makefile.in b/src/supplicant-manager/tests/Makefile.in
index cbc8a5a1..5e521ae0 100644
--- a/src/supplicant-manager/tests/Makefile.in
+++ b/src/supplicant-manager/tests/Makefile.in
@@ -702,7 +702,6 @@ AM_CPPFLAGS = \
 	-I$(top_srcdir)/src/supplicant-manager \
 	-DG_LOG_DOMAIN=\""NetworkManager"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	-DTEST_CERT_DIR=\"$(srcdir)/certs/\" \
 	$(GLIB_CFLAGS)
 
diff --git a/src/systemd/src/basic/utf8.h b/src/systemd/src/basic/utf8.h
index a3c8558e..1bc23dc1 100644
--- a/src/systemd/src/basic/utf8.h
+++ b/src/systemd/src/basic/utf8.h
@@ -32,6 +32,7 @@
 #endif /* NM_IGNORED */
 
 #define UTF8_REPLACEMENT_CHARACTER "\xef\xbf\xbd"
+#define UTF8_BYTE_ORDER_MARK "\xef\xbb\xbf"
 
 bool unichar_is_valid(char32_t c);
 
diff --git a/src/systemd/src/libsystemd-network/dhcp-identifier.c b/src/systemd/src/libsystemd-network/dhcp-identifier.c
index 0cbce155..c7a3eac5 100644
--- a/src/systemd/src/libsystemd-network/dhcp-identifier.c
+++ b/src/systemd/src/libsystemd-network/dhcp-identifier.c
@@ -51,7 +51,7 @@ int dhcp_identifier_set_duid_en(struct duid *duid, size_t *len) {
         if (r < 0)
                 return r;
 
-        unaligned_write_be16(&duid->type, DHCP6_DUID_EN);
+        unaligned_write_be16(&duid->type, DUID_TYPE_EN);
         unaligned_write_be32(&duid->en.pen, SYSTEMD_PEN);
 
         *len = sizeof(duid->type) + sizeof(duid->en);
diff --git a/src/systemd/src/libsystemd-network/dhcp-identifier.h b/src/systemd/src/libsystemd-network/dhcp-identifier.h
index 93f06f59..babae15c 100644
--- a/src/systemd/src/libsystemd-network/dhcp-identifier.h
+++ b/src/systemd/src/libsystemd-network/dhcp-identifier.h
@@ -25,13 +25,23 @@
 #include "sparse-endian.h"
 #include "unaligned.h"
 
+typedef enum DUIDType {
+        DUID_TYPE_RAW       = 0,
+        DUID_TYPE_LLT       = 1,
+        DUID_TYPE_EN        = 2,
+        DUID_TYPE_LL        = 3,
+        DUID_TYPE_UUID      = 4,
+        _DUID_TYPE_MAX,
+        _DUID_TYPE_INVALID  = -1,
+} DUIDType;
+
 /* RFC 3315 section 9.1:
  *      A DUID can be no more than 128 octets long (not including the type code).
  */
 #define MAX_DUID_LEN 128
 
 struct duid {
-        uint16_t type;
+        be16_t type;
         union {
                 struct {
                         /* DHCP6_DUID_LLT */
@@ -61,3 +71,32 @@ struct duid {
 
 int dhcp_identifier_set_duid_en(struct duid *duid, size_t *len);
 int dhcp_identifier_set_iaid(int ifindex, uint8_t *mac, size_t mac_len, void *_id);
+
+static inline int dhcp_validate_duid_len(uint16_t duid_type, size_t duid_len) {
+        struct duid d;
+
+        assert_return(duid_len > 0 && duid_len <= MAX_DUID_LEN, -EINVAL);
+
+        switch (duid_type) {
+        case DUID_TYPE_LLT:
+                if (duid_len <= sizeof(d.llt))
+                        return -EINVAL;
+                break;
+        case DUID_TYPE_EN:
+                if (duid_len != sizeof(d.en))
+                        return -EINVAL;
+                break;
+        case DUID_TYPE_LL:
+                if (duid_len <= sizeof(d.ll))
+                        return -EINVAL;
+                break;
+        case DUID_TYPE_UUID:
+                if (duid_len != sizeof(d.uuid))
+                        return -EINVAL;
+                break;
+        default:
+                /* accept unknown type in order to be forward compatible */
+                break;
+        }
+        return 0;
+}
diff --git a/src/systemd/src/libsystemd-network/dhcp6-protocol.h b/src/systemd/src/libsystemd-network/dhcp6-protocol.h
index ee4bdfb0..2487c470 100644
--- a/src/systemd/src/libsystemd-network/dhcp6-protocol.h
+++ b/src/systemd/src/libsystemd-network/dhcp6-protocol.h
@@ -62,13 +62,6 @@ enum {
 #define DHCP6_REB_TIMEOUT                       10 * USEC_PER_SEC
 #define DHCP6_REB_MAX_RT                        600 * USEC_PER_SEC
 
-enum {
-        DHCP6_DUID_LLT                          = 1,
-        DHCP6_DUID_EN                           = 2,
-        DHCP6_DUID_LL                           = 3,
-        DHCP6_DUID_UUID                         = 4,
-};
-
 enum DHCP6State {
         DHCP6_STATE_STOPPED                     = 0,
         DHCP6_STATE_INFORMATION_REQUEST         = 1,
diff --git a/src/systemd/src/libsystemd-network/lldp-neighbor.c b/src/systemd/src/libsystemd-network/lldp-neighbor.c
index 0515ce1e..ce1d89b6 100644
--- a/src/systemd/src/libsystemd-network/lldp-neighbor.c
+++ b/src/systemd/src/libsystemd-network/lldp-neighbor.c
@@ -26,7 +26,6 @@
 #include "in-addr-util.h"
 #include "lldp-internal.h"
 #include "lldp-neighbor.h"
-#include "lldp.h"
 #include "unaligned.h"
 
 static void lldp_neighbor_id_hash_func(const void *p, struct siphash *state) {
@@ -247,7 +246,7 @@ int lldp_neighbor_parse(sd_lldp_neighbor *n) {
 
                 switch (type) {
 
-                case LLDP_TYPE_END:
+                case SD_LLDP_TYPE_END:
                         if (length != 0) {
                                 log_lldp("End marker TLV not zero-sized, ignoring datagram.");
                                 return -EBADMSG;
@@ -259,7 +258,7 @@ int lldp_neighbor_parse(sd_lldp_neighbor *n) {
 
                         goto end_marker;
 
-                case LLDP_TYPE_CHASSIS_ID:
+                case SD_LLDP_TYPE_CHASSIS_ID:
                         if (length < 2 || length > 256) { /* includes the chassis subtype, hence one extra byte */
                                 log_lldp("Chassis ID field size out of range, ignoring datagram.");
                                 return -EBADMSG;
@@ -276,7 +275,7 @@ int lldp_neighbor_parse(sd_lldp_neighbor *n) {
                         n->id.chassis_id_size = length;
                         break;
 
-                case LLDP_TYPE_PORT_ID:
+                case SD_LLDP_TYPE_PORT_ID:
                         if (length < 2 || length > 256) { /* includes the port subtype, hence one extra byte */
                                 log_lldp("Port ID field size out of range, ignoring datagram.");
                                 return -EBADMSG;
@@ -293,7 +292,7 @@ int lldp_neighbor_parse(sd_lldp_neighbor *n) {
                         n->id.port_id_size = length;
                         break;
 
-                case LLDP_TYPE_TTL:
+                case SD_LLDP_TYPE_TTL:
                         if (length != 2) {
                                 log_lldp("TTL field has wrong size, ignoring datagram.");
                                 return -EBADMSG;
@@ -308,25 +307,25 @@ int lldp_neighbor_parse(sd_lldp_neighbor *n) {
                         n->has_ttl = true;
                         break;
 
-                case LLDP_TYPE_PORT_DESCRIPTION:
+                case SD_LLDP_TYPE_PORT_DESCRIPTION:
                         r = parse_string(&n->port_description, p, length);
                         if (r < 0)
                                 return r;
                         break;
 
-                case LLDP_TYPE_SYSTEM_NAME:
+                case SD_LLDP_TYPE_SYSTEM_NAME:
                         r = parse_string(&n->system_name, p, length);
                         if (r < 0)
                                 return r;
                         break;
 
-                case LLDP_TYPE_SYSTEM_DESCRIPTION:
+                case SD_LLDP_TYPE_SYSTEM_DESCRIPTION:
                         r = parse_string(&n->system_description, p, length);
                         if (r < 0)
                                 return r;
                         break;
 
-                case LLDP_TYPE_SYSTEM_CAPABILITIES:
+                case SD_LLDP_TYPE_SYSTEM_CAPABILITIES:
                         if (length != 4)
                                 log_lldp("System capabilities field has wrong size, ignoring.");
                         else {
@@ -337,7 +336,7 @@ int lldp_neighbor_parse(sd_lldp_neighbor *n) {
 
                         break;
 
-                case LLDP_TYPE_PRIVATE:
+                case SD_LLDP_TYPE_PRIVATE:
                         if (length < 4)
                                 log_lldp("Found private TLV that is too short, ignoring.");
 
@@ -481,18 +480,18 @@ _public_ int sd_lldp_neighbor_get_chassis_id_as_string(sd_lldp_neighbor *n, cons
 
         switch (*(uint8_t*) n->id.chassis_id) {
 
-        case LLDP_CHASSIS_SUBTYPE_CHASSIS_COMPONENT:
-        case LLDP_CHASSIS_SUBTYPE_INTERFACE_ALIAS:
-        case LLDP_CHASSIS_SUBTYPE_PORT_COMPONENT:
-        case LLDP_CHASSIS_SUBTYPE_INTERFACE_NAME:
-        case LLDP_CHASSIS_SUBTYPE_LOCALLY_ASSIGNED:
+        case SD_LLDP_CHASSIS_SUBTYPE_CHASSIS_COMPONENT:
+        case SD_LLDP_CHASSIS_SUBTYPE_INTERFACE_ALIAS:
+        case SD_LLDP_CHASSIS_SUBTYPE_PORT_COMPONENT:
+        case SD_LLDP_CHASSIS_SUBTYPE_INTERFACE_NAME:
+        case SD_LLDP_CHASSIS_SUBTYPE_LOCALLY_ASSIGNED:
                 k = cescape_length((char*) n->id.chassis_id + 1, n->id.chassis_id_size - 1);
                 if (!k)
                         return -ENOMEM;
 
                 goto done;
 
-        case LLDP_CHASSIS_SUBTYPE_MAC_ADDRESS:
+        case SD_LLDP_CHASSIS_SUBTYPE_MAC_ADDRESS:
                 r = format_mac_address(n->id.chassis_id, n->id.chassis_id_size, &k);
                 if (r < 0)
                         return r;
@@ -501,7 +500,7 @@ _public_ int sd_lldp_neighbor_get_chassis_id_as_string(sd_lldp_neighbor *n, cons
 
                 break;
 
-        case LLDP_CHASSIS_SUBTYPE_NETWORK_ADDRESS:
+        case SD_LLDP_CHASSIS_SUBTYPE_NETWORK_ADDRESS:
                 r = format_network_address(n->id.chassis_id, n->id.chassis_id_size, &k);
                 if (r < 0)
                         return r;
@@ -552,17 +551,17 @@ _public_ int sd_lldp_neighbor_get_port_id_as_string(sd_lldp_neighbor *n, const c
 
         switch (*(uint8_t*) n->id.port_id) {
 
-        case LLDP_PORT_SUBTYPE_INTERFACE_ALIAS:
-        case LLDP_PORT_SUBTYPE_PORT_COMPONENT:
-        case LLDP_PORT_SUBTYPE_INTERFACE_NAME:
-        case LLDP_PORT_SUBTYPE_LOCALLY_ASSIGNED:
+        case SD_LLDP_PORT_SUBTYPE_INTERFACE_ALIAS:
+        case SD_LLDP_PORT_SUBTYPE_PORT_COMPONENT:
+        case SD_LLDP_PORT_SUBTYPE_INTERFACE_NAME:
+        case SD_LLDP_PORT_SUBTYPE_LOCALLY_ASSIGNED:
                 k = cescape_length((char*) n->id.port_id + 1, n->id.port_id_size - 1);
                 if (!k)
                         return -ENOMEM;
 
                 goto done;
 
-        case LLDP_PORT_SUBTYPE_MAC_ADDRESS:
+        case SD_LLDP_PORT_SUBTYPE_MAC_ADDRESS:
                 r = format_mac_address(n->id.port_id, n->id.port_id_size, &k);
                 if (r < 0)
                         return r;
@@ -571,7 +570,7 @@ _public_ int sd_lldp_neighbor_get_port_id_as_string(sd_lldp_neighbor *n, const c
 
                 break;
 
-        case LLDP_PORT_SUBTYPE_NETWORK_ADDRESS:
+        case SD_LLDP_PORT_SUBTYPE_NETWORK_ADDRESS:
                 r = format_network_address(n->id.port_id, n->id.port_id_size, &k);
                 if (r < 0)
                         return r;
@@ -740,7 +739,7 @@ _public_ int sd_lldp_neighbor_tlv_get_oui(sd_lldp_neighbor *n, uint8_t oui[3], u
         assert_return(oui, -EINVAL);
         assert_return(subtype, -EINVAL);
 
-        r = sd_lldp_neighbor_tlv_is_type(n, LLDP_TYPE_PRIVATE);
+        r = sd_lldp_neighbor_tlv_is_type(n, SD_LLDP_TYPE_PRIVATE);
         if (r < 0)
                 return r;
         if (r == 0)
diff --git a/src/systemd/src/libsystemd-network/lldp.h b/src/systemd/src/libsystemd-network/lldp.h
deleted file mode 100644
index d61ecabc..00000000
--- a/src/systemd/src/libsystemd-network/lldp.h
+++ /dev/null
@@ -1,102 +0,0 @@
-#pragma once
-
-/***
-  This file is part of systemd.
-
-  Copyright (C) 2014 Tom Gundersen
-  Copyright (C) 2014 Susant Sahani
-
-  systemd is free software; you can redistribute it and/or modify it
-  under the terms of the GNU Lesser General Public License as published by
-  the Free Software Foundation; either version 2.1 of the License, or
-  (at your option) any later version.
-
-  systemd is distributed in the hope that it will be useful, but
-  WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-  Lesser General Public License for more details.
-
-  You should have received a copy of the GNU Lesser General Public License
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
-***/
-
-#define LLDP_MULTICAST_ADDR     { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x0e }
-
-/* IEEE 802.3AB Clause 9: TLV Types */
-enum {
-        LLDP_TYPE_END                  =   0,
-        LLDP_TYPE_CHASSIS_ID           =   1,
-        LLDP_TYPE_PORT_ID              =   2,
-        LLDP_TYPE_TTL                  =   3,
-        LLDP_TYPE_PORT_DESCRIPTION     =   4,
-        LLDP_TYPE_SYSTEM_NAME          =   5,
-        LLDP_TYPE_SYSTEM_DESCRIPTION   =   6,
-        LLDP_TYPE_SYSTEM_CAPABILITIES  =   7,
-        LLDP_TYPE_MGMT_ADDRESS         =   8,
-        LLDP_TYPE_PRIVATE              =   127,
-};
-
-/* IEEE 802.3AB Clause 9.5.2: Chassis subtypes */
-enum {
-        LLDP_CHASSIS_SUBTYPE_RESERVED            = 0,
-        LLDP_CHASSIS_SUBTYPE_CHASSIS_COMPONENT   = 1,
-        LLDP_CHASSIS_SUBTYPE_INTERFACE_ALIAS     = 2,
-        LLDP_CHASSIS_SUBTYPE_PORT_COMPONENT      = 3,
-        LLDP_CHASSIS_SUBTYPE_MAC_ADDRESS         = 4,
-        LLDP_CHASSIS_SUBTYPE_NETWORK_ADDRESS     = 5,
-        LLDP_CHASSIS_SUBTYPE_INTERFACE_NAME      = 6,
-        LLDP_CHASSIS_SUBTYPE_LOCALLY_ASSIGNED    = 7,
-};
-
-/* IEEE 802.3AB Clause 9.5.3: Port subtype */
-enum {
-        LLDP_PORT_SUBTYPE_RESERVED           = 0,
-        LLDP_PORT_SUBTYPE_INTERFACE_ALIAS    = 1,
-        LLDP_PORT_SUBTYPE_PORT_COMPONENT     = 2,
-        LLDP_PORT_SUBTYPE_MAC_ADDRESS        = 3,
-        LLDP_PORT_SUBTYPE_NETWORK_ADDRESS    = 4,
-        LLDP_PORT_SUBTYPE_INTERFACE_NAME     = 5,
-        LLDP_PORT_SUBTYPE_AGENT_CIRCUIT_ID   = 6,
-        LLDP_PORT_SUBTYPE_LOCALLY_ASSIGNED   = 7,
-};
-
-enum {
-        LLDP_SYSTEM_CAPABILITIES_OTHER        = 1 << 0,
-        LLDP_SYSTEM_CAPABILITIES_REPEATER     = 1 << 1,
-        LLDP_SYSTEM_CAPABILITIES_BRIDGE       = 1 << 2,
-        LLDP_SYSTEM_CAPABILITIES_WLAN_AP      = 1 << 3,
-        LLDP_SYSTEM_CAPABILITIES_ROUTER       = 1 << 4,
-        LLDP_SYSTEM_CAPABILITIES_PHONE        = 1 << 5,
-        LLDP_SYSTEM_CAPABILITIES_DOCSIS       = 1 << 6,
-        LLDP_SYSTEM_CAPABILITIES_STATION      = 1 << 7,
-        LLDP_SYSTEM_CAPABILITIES_CVLAN        = 1 << 8,
-        LLDP_SYSTEM_CAPABILITIES_SVLAN        = 1 << 9,
-        LLDP_SYSTEM_CAPABILITIES_TPMR         = 1 << 10,
-};
-
-#define _LLDP_SYSTEM_CAPABILITIES_ALL ((uint16_t) -1)
-
-#define _LLDP_SYSTEM_CAPABILITIES_ALL_ROUTERS                           \
-        ((uint16_t)                                                     \
-         (LLDP_SYSTEM_CAPABILITIES_REPEATER|                            \
-          LLDP_SYSTEM_CAPABILITIES_BRIDGE|                              \
-          LLDP_SYSTEM_CAPABILITIES_WLAN_AP|                             \
-          LLDP_SYSTEM_CAPABILITIES_ROUTER|                              \
-          LLDP_SYSTEM_CAPABILITIES_DOCSIS|                              \
-          LLDP_SYSTEM_CAPABILITIES_CVLAN|                               \
-          LLDP_SYSTEM_CAPABILITIES_SVLAN|                               \
-          LLDP_SYSTEM_CAPABILITIES_TPMR))
-
-
-#define LLDP_OUI_802_1 (uint8_t[]) { 0x00, 0x80, 0xc2 }
-#define LLDP_OUI_802_3 (uint8_t[]) { 0x00, 0x12, 0x0f }
-
-enum {
-        LLDP_OUI_802_1_SUBTYPE_PORT_VLAN_ID            = 1,
-        LLDP_OUI_802_1_SUBTYPE_PORT_PROTOCOL_VLAN_ID   = 2,
-        LLDP_OUI_802_1_SUBTYPE_VLAN_NAME               = 3,
-        LLDP_OUI_802_1_SUBTYPE_PROTOCOL_IDENTITY       = 4,
-        LLDP_OUI_802_1_SUBTYPE_VID_USAGE_DIGEST        = 5,
-        LLDP_OUI_802_1_SUBTYPE_MANAGEMENT_VID          = 6,
-        LLDP_OUI_802_1_SUBTYPE_LINK_AGGREGATION        = 7,
-};
diff --git a/src/systemd/src/libsystemd-network/network-internal.c b/src/systemd/src/libsystemd-network/network-internal.c
index 4e61c4fa..55fcc1da 100644
--- a/src/systemd/src/libsystemd-network/network-internal.c
+++ b/src/systemd/src/libsystemd-network/network-internal.c
@@ -339,6 +339,35 @@ int config_parse_hwaddr(const char *unit,
 
         return 0;
 }
+
+int config_parse_iaid(const char *unit,
+                      const char *filename,
+                      unsigned line,
+                      const char *section,
+                      unsigned section_line,
+                      const char *lvalue,
+                      int ltype,
+                      const char *rvalue,
+                      void *data,
+                      void *userdata) {
+        uint32_t iaid;
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+        assert(data);
+
+        r = safe_atou32(rvalue, &iaid);
+        if (r < 0) {
+                log_syntax(unit, LOG_ERR, filename, line, 0, "Unable to read IAID: %s", rvalue);
+                return r;
+        }
+
+        *((uint32_t *)data) = iaid;
+
+        return 0;
+}
 #endif /* NM_IGNORED */
 
 void serialize_in_addrs(FILE *f, const struct in_addr *addresses, size_t size) {
diff --git a/src/systemd/src/libsystemd-network/network-internal.h b/src/systemd/src/libsystemd-network/network-internal.h
index fd161056..955cc898 100644
--- a/src/systemd/src/libsystemd-network/network-internal.h
+++ b/src/systemd/src/libsystemd-network/network-internal.h
@@ -63,6 +63,10 @@ int config_parse_ifalias(const char *unit, const char *filename, unsigned line,
                          const char *section, unsigned section_line, const char *lvalue,
                          int ltype, const char *rvalue, void *data, void *userdata);
 
+int config_parse_iaid(const char *unit, const char *filename, unsigned line,
+                      const char *section, unsigned section_line, const char *lvalue,
+                      int ltype, const char *rvalue, void *data, void *userdata);
+
 int net_get_unique_predictable_data(struct udev_device *device, uint64_t *result);
 const char *net_get_name(struct udev_device *device);
 #endif /* NM_IGNORED */
diff --git a/src/systemd/src/libsystemd-network/sd-dhcp-client.c b/src/systemd/src/libsystemd-network/sd-dhcp-client.c
index 40f3c8e9..758dba4b 100644
--- a/src/systemd/src/libsystemd-network/sd-dhcp-client.c
+++ b/src/systemd/src/libsystemd-network/sd-dhcp-client.c
@@ -84,7 +84,7 @@ struct sd_dhcp_client {
                         } _packed_ ll;
                         struct {
                                 /* 255: Node-specific (RFC 4361) */
-                                uint32_t iaid;
+                                be32_t iaid;
                                 struct duid duid;
                         } _packed_ ns;
                         struct {
@@ -300,6 +300,54 @@ int sd_dhcp_client_set_client_id(sd_dhcp_client *client, uint8_t type,
         return 0;
 }
 
+#if 0 /* NM_IGNORED */
+int sd_dhcp_client_set_iaid_duid(sd_dhcp_client *client, uint32_t iaid,
+                                 uint16_t duid_type, uint8_t *duid, size_t duid_len) {
+        DHCP_CLIENT_DONT_DESTROY(client);
+        int r;
+        assert_return(client, -EINVAL);
+        zero(client->client_id);
+
+        client->client_id.type = 255;
+
+        /* If IAID is not configured, generate it. */
+        if (iaid == 0) {
+                r = dhcp_identifier_set_iaid(client->index, client->mac_addr,
+                                             client->mac_addr_len,
+                                             &client->client_id.ns.iaid);
+                if (r < 0)
+                        return r;
+        } else
+                client->client_id.ns.iaid = htobe32(iaid);
+
+        /* If DUID is not configured, generate DUID-EN. */
+        if (duid_len == 0) {
+                r = dhcp_identifier_set_duid_en(&client->client_id.ns.duid,
+                                                &duid_len);
+                if (r < 0)
+                        return r;
+        } else {
+                r = dhcp_validate_duid_len(client->client_id.type, duid_len);
+                if (r < 0)
+                        return r;
+                client->client_id.ns.duid.type = htobe16(duid_type);
+                memcpy(&client->client_id.ns.duid.raw.data, duid, duid_len);
+                duid_len += sizeof(client->client_id.ns.duid.type);
+        }
+
+        client->client_id_len = sizeof(client->client_id.type) + duid_len +
+                                sizeof(client->client_id.ns.iaid);
+
+        if (!IN_SET(client->state, DHCP_STATE_INIT, DHCP_STATE_STOPPED)) {
+                log_dhcp_client(client, "Configured IAID+DUID, restarting.");
+                client_stop(client, SD_DHCP_CLIENT_EVENT_STOP);
+                sd_dhcp_client_start(client);
+        }
+
+        return 0;
+}
+#endif /* NM_IGNORED */
+
 int sd_dhcp_client_set_hostname(sd_dhcp_client *client,
                                 const char *hostname) {
         char *new_hostname = NULL;
diff --git a/src/systemd/src/libsystemd-network/sd-dhcp6-client.c b/src/systemd/src/libsystemd-network/sd-dhcp6-client.c
index ebec1f12..8fa1822f 100644
--- a/src/systemd/src/libsystemd-network/sd-dhcp6-client.c
+++ b/src/systemd/src/libsystemd-network/sd-dhcp6-client.c
@@ -182,44 +182,34 @@ static int client_ensure_duid(sd_dhcp6_client *client) {
         return dhcp_identifier_set_duid_en(&client->duid, &client->duid_len);
 }
 
-int sd_dhcp6_client_set_duid(
-                sd_dhcp6_client *client,
-                uint16_t type,
-                uint8_t *duid, size_t duid_len) {
+int sd_dhcp6_client_set_duid(sd_dhcp6_client *client, uint16_t duid_type,
+                             uint8_t *duid, size_t duid_len) {
+        int r;
         assert_return(client, -EINVAL);
-        assert_return(duid, -EINVAL);
-        assert_return(duid_len > 0 && duid_len <= MAX_DUID_LEN, -EINVAL);
-
         assert_return(IN_SET(client->state, DHCP6_STATE_STOPPED), -EBUSY);
 
-        switch (type) {
-        case DHCP6_DUID_LLT:
-                if (duid_len <= sizeof(client->duid.llt))
-                        return -EINVAL;
-                break;
-        case DHCP6_DUID_EN:
-                if (duid_len != sizeof(client->duid.en))
-                        return -EINVAL;
-                break;
-        case DHCP6_DUID_LL:
-                if (duid_len <= sizeof(client->duid.ll))
-                        return -EINVAL;
-                break;
-        case DHCP6_DUID_UUID:
-                if (duid_len != sizeof(client->duid.uuid))
-                        return -EINVAL;
-                break;
-        default:
-                /* accept unknown type in order to be forward compatible */
-                break;
+        if (duid_len > 0) {
+                r = dhcp_validate_duid_len(duid_type, duid_len);
+                if (r < 0)
+                        return r;
+                client->duid.type = htobe16(duid_type);
+                memcpy(&client->duid.raw.data, duid, duid_len);
+                client->duid_len = duid_len + sizeof(client->duid.type);
         }
 
-        client->duid.type = htobe16(type);
-        memcpy(&client->duid.raw.data, duid, duid_len);
-        client->duid_len = duid_len + sizeof(client->duid.type);
+        return 0;
+}
+
+#if 0 /* NM_IGNORED */
+int sd_dhcp6_client_set_iaid(sd_dhcp6_client *client, uint32_t iaid) {
+        assert_return(client, -EINVAL);
+        assert_return(IN_SET(client->state, DHCP6_STATE_STOPPED), -EBUSY);
+
+        client->ia_na.id = htobe32(iaid);
 
         return 0;
 }
+#endif /* NM_IGNORED */
 
 int sd_dhcp6_client_set_information_request(sd_dhcp6_client *client, int enabled) {
         assert_return(client, -EINVAL);
diff --git a/src/systemd/src/systemd/sd-dhcp-client.h b/src/systemd/src/systemd/sd-dhcp-client.h
index ef453705..374ff877 100644
--- a/src/systemd/src/systemd/sd-dhcp-client.h
+++ b/src/systemd/src/systemd/sd-dhcp-client.h
@@ -98,6 +98,8 @@ int sd_dhcp_client_set_mac(sd_dhcp_client *client, const uint8_t *addr,
                            size_t addr_len, uint16_t arp_type);
 int sd_dhcp_client_set_client_id(sd_dhcp_client *client, uint8_t type,
                                  const uint8_t *data, size_t data_len);
+int sd_dhcp_client_set_iaid_duid(sd_dhcp_client *client, uint32_t iaid,
+                                 uint16_t duid_type, uint8_t *duid, size_t duid_len);
 int sd_dhcp_client_get_client_id(sd_dhcp_client *client, uint8_t *type,
                                  const uint8_t **data, size_t *data_len);
 int sd_dhcp_client_set_mtu(sd_dhcp_client *client, uint32_t mtu);
diff --git a/src/systemd/src/systemd/sd-dhcp6-client.h b/src/systemd/src/systemd/sd-dhcp6-client.h
index 1bedc941..4604cb63 100644
--- a/src/systemd/src/systemd/sd-dhcp6-client.h
+++ b/src/systemd/src/systemd/sd-dhcp6-client.h
@@ -85,8 +85,9 @@ int sd_dhcp6_client_set_index(sd_dhcp6_client *client, int interface_index);
 int sd_dhcp6_client_set_local_address(sd_dhcp6_client *client, const struct in6_addr *local_address);
 int sd_dhcp6_client_set_mac(sd_dhcp6_client *client, const uint8_t *addr,
                             size_t addr_len, uint16_t arp_type);
-int sd_dhcp6_client_set_duid(sd_dhcp6_client *client, uint16_t type, uint8_t *duid,
-                             size_t duid_len);
+int sd_dhcp6_client_set_duid(sd_dhcp6_client *client, uint16_t duid_type,
+                             uint8_t *duid, size_t duid_len);
+int sd_dhcp6_client_set_iaid(sd_dhcp6_client *client, uint32_t iaid);
 int sd_dhcp6_client_set_information_request(sd_dhcp6_client *client, int enabled);
 int sd_dhcp6_client_get_information_request(sd_dhcp6_client *client, int *enabled);
 int sd_dhcp6_client_set_request_option(sd_dhcp6_client *client,
diff --git a/src/systemd/src/systemd/sd-lldp.h b/src/systemd/src/systemd/sd-lldp.h
index f7eff587..4f2a3b50 100644
--- a/src/systemd/src/systemd/sd-lldp.h
+++ b/src/systemd/src/systemd/sd-lldp.h
@@ -33,6 +33,87 @@ _SD_BEGIN_DECLARATIONS;
 typedef struct sd_lldp sd_lldp;
 typedef struct sd_lldp_neighbor sd_lldp_neighbor;
 
+#define SD_LLDP_MULTICAST_ADDR     { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x0e }
+
+/* IEEE 802.3AB Clause 9: TLV Types */
+enum {
+        SD_LLDP_TYPE_END                  =   0,
+        SD_LLDP_TYPE_CHASSIS_ID           =   1,
+        SD_LLDP_TYPE_PORT_ID              =   2,
+        SD_LLDP_TYPE_TTL                  =   3,
+        SD_LLDP_TYPE_PORT_DESCRIPTION     =   4,
+        SD_LLDP_TYPE_SYSTEM_NAME          =   5,
+        SD_LLDP_TYPE_SYSTEM_DESCRIPTION   =   6,
+        SD_LLDP_TYPE_SYSTEM_CAPABILITIES  =   7,
+        SD_LLDP_TYPE_MGMT_ADDRESS         =   8,
+        SD_LLDP_TYPE_PRIVATE              =   127,
+};
+
+/* IEEE 802.3AB Clause 9.5.2: Chassis subtypes */
+enum {
+        SD_LLDP_CHASSIS_SUBTYPE_RESERVED            = 0,
+        SD_LLDP_CHASSIS_SUBTYPE_CHASSIS_COMPONENT   = 1,
+        SD_LLDP_CHASSIS_SUBTYPE_INTERFACE_ALIAS     = 2,
+        SD_LLDP_CHASSIS_SUBTYPE_PORT_COMPONENT      = 3,
+        SD_LLDP_CHASSIS_SUBTYPE_MAC_ADDRESS         = 4,
+        SD_LLDP_CHASSIS_SUBTYPE_NETWORK_ADDRESS     = 5,
+        SD_LLDP_CHASSIS_SUBTYPE_INTERFACE_NAME      = 6,
+        SD_LLDP_CHASSIS_SUBTYPE_LOCALLY_ASSIGNED    = 7,
+};
+
+/* IEEE 802.3AB Clause 9.5.3: Port subtype */
+enum {
+        SD_LLDP_PORT_SUBTYPE_RESERVED           = 0,
+        SD_LLDP_PORT_SUBTYPE_INTERFACE_ALIAS    = 1,
+        SD_LLDP_PORT_SUBTYPE_PORT_COMPONENT     = 2,
+        SD_LLDP_PORT_SUBTYPE_MAC_ADDRESS        = 3,
+        SD_LLDP_PORT_SUBTYPE_NETWORK_ADDRESS    = 4,
+        SD_LLDP_PORT_SUBTYPE_INTERFACE_NAME     = 5,
+        SD_LLDP_PORT_SUBTYPE_AGENT_CIRCUIT_ID   = 6,
+        SD_LLDP_PORT_SUBTYPE_LOCALLY_ASSIGNED   = 7,
+};
+
+enum {
+        SD_LLDP_SYSTEM_CAPABILITIES_OTHER        = 1 << 0,
+        SD_LLDP_SYSTEM_CAPABILITIES_REPEATER     = 1 << 1,
+        SD_LLDP_SYSTEM_CAPABILITIES_BRIDGE       = 1 << 2,
+        SD_LLDP_SYSTEM_CAPABILITIES_WLAN_AP      = 1 << 3,
+        SD_LLDP_SYSTEM_CAPABILITIES_ROUTER       = 1 << 4,
+        SD_LLDP_SYSTEM_CAPABILITIES_PHONE        = 1 << 5,
+        SD_LLDP_SYSTEM_CAPABILITIES_DOCSIS       = 1 << 6,
+        SD_LLDP_SYSTEM_CAPABILITIES_STATION      = 1 << 7,
+        SD_LLDP_SYSTEM_CAPABILITIES_CVLAN        = 1 << 8,
+        SD_LLDP_SYSTEM_CAPABILITIES_SVLAN        = 1 << 9,
+        SD_LLDP_SYSTEM_CAPABILITIES_TPMR         = 1 << 10,
+};
+
+#define SD_LLDP_SYSTEM_CAPABILITIES_ALL ((uint16_t) -1)
+
+#define SD_LLDP_SYSTEM_CAPABILITIES_ALL_ROUTERS                         \
+        ((uint16_t)                                                     \
+         (SD_LLDP_SYSTEM_CAPABILITIES_REPEATER|                         \
+          SD_LLDP_SYSTEM_CAPABILITIES_BRIDGE|                           \
+          SD_LLDP_SYSTEM_CAPABILITIES_WLAN_AP|                          \
+          SD_LLDP_SYSTEM_CAPABILITIES_ROUTER|                           \
+          SD_LLDP_SYSTEM_CAPABILITIES_DOCSIS|                           \
+          SD_LLDP_SYSTEM_CAPABILITIES_CVLAN|                            \
+          SD_LLDP_SYSTEM_CAPABILITIES_SVLAN|                            \
+          SD_LLDP_SYSTEM_CAPABILITIES_TPMR))
+
+
+#define SD_LLDP_OUI_802_1 (uint8_t[]) { 0x00, 0x80, 0xc2 }
+#define SD_LLDP_OUI_802_3 (uint8_t[]) { 0x00, 0x12, 0x0f }
+
+enum {
+        SD_LLDP_OUI_802_1_SUBTYPE_PORT_VLAN_ID            = 1,
+        SD_LLDP_OUI_802_1_SUBTYPE_PORT_PROTOCOL_VLAN_ID   = 2,
+        SD_LLDP_OUI_802_1_SUBTYPE_VLAN_NAME               = 3,
+        SD_LLDP_OUI_802_1_SUBTYPE_PROTOCOL_IDENTITY       = 4,
+        SD_LLDP_OUI_802_1_SUBTYPE_VID_USAGE_DIGEST        = 5,
+        SD_LLDP_OUI_802_1_SUBTYPE_MANAGEMENT_VID          = 6,
+        SD_LLDP_OUI_802_1_SUBTYPE_LINK_AGGREGATION        = 7,
+};
+
 typedef enum sd_lldp_event {
         SD_LLDP_EVENT_ADDED     = 'a',
         SD_LLDP_EVENT_REMOVED   = 'r',
diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am
index 597f477f..5dacae8d 100644
--- a/src/tests/Makefile.am
+++ b/src/tests/Makefile.am
@@ -12,7 +12,6 @@ AM_CPPFLAGS = \
 	-I$(top_builddir)/src \
 	-DG_LOG_DOMAIN=\""NetworkManager"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GLIB_CFLAGS)
 
 noinst_PROGRAMS = \
diff --git a/src/tests/Makefile.in b/src/tests/Makefile.in
index 8be2e8ce..380220f3 100644
--- a/src/tests/Makefile.in
+++ b/src/tests/Makefile.in
@@ -775,7 +775,6 @@ AM_CPPFLAGS = \
 	-I$(top_builddir)/src \
 	-DG_LOG_DOMAIN=\""NetworkManager"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GLIB_CFLAGS)
 
 
diff --git a/src/tests/config/Makefile.am b/src/tests/config/Makefile.am
index 5d4aed5c..17876e4d 100644
--- a/src/tests/config/Makefile.am
+++ b/src/tests/config/Makefile.am
@@ -8,7 +8,6 @@ AM_CPPFLAGS = \
 	-I${top_srcdir}/src/platform \
 	-DG_LOG_DOMAIN=\""NetworkManager"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GLIB_CFLAGS) \
 	-DSRCDIR=\""$(srcdir)"\" \
 	-DBUILDDIR=\""$(builddir)"\"
diff --git a/src/tests/config/Makefile.in b/src/tests/config/Makefile.in
index 994e7068..5a4bfbd1 100644
--- a/src/tests/config/Makefile.in
+++ b/src/tests/config/Makefile.in
@@ -661,7 +661,6 @@ AM_CPPFLAGS = \
 	-I${top_srcdir}/src/platform \
 	-DG_LOG_DOMAIN=\""NetworkManager"\" \
 	-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
-	-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
 	$(GLIB_CFLAGS) \
 	-DSRCDIR=\""$(srcdir)"\" \
 	-DBUILDDIR=\""$(builddir)"\"