summary refs log tree commit diff
path: root/libnm-glib
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2011-04-21 10:42:53 +0200
committerMichael Biebl <biebl@debian.org>2011-04-21 10:42:53 +0200
commit8baa1aca8dfd35e3190d7d5655eb83b5b901e263 (patch)
treea9ac1e67d0c22a48330c76f08fc5291f85307055 /libnm-glib
parentf75dd6fd1975146623052b843b182dc32c3fbe46 (diff)
Imported Upstream version 0.8.4.0 upstream/0.8.4.0
Diffstat (limited to 'libnm-glib')
-rw-r--r--libnm-glib/Makefile.am157
-rw-r--r--libnm-glib/Makefile.in912
-rw-r--r--libnm-glib/libnm-glib-test.c4
-rw-r--r--libnm-glib/libnm-glib-vpn.pc.in2
-rw-r--r--libnm-glib/libnm-glib-vpn.ver2
-rw-r--r--libnm-glib/libnm-glib.pc.in2
-rw-r--r--libnm-glib/libnm-glib.ver78
-rw-r--r--libnm-glib/libnm_glib.c13
-rw-r--r--libnm-glib/nm-access-point.c239
-rw-r--r--libnm-glib/nm-access-point.h32
-rw-r--r--libnm-glib/nm-active-connection.c118
-rw-r--r--libnm-glib/nm-active-connection.h3
-rw-r--r--libnm-glib/nm-cdma-device.c130
-rw-r--r--libnm-glib/nm-cdma-device.h60
-rw-r--r--libnm-glib/nm-client.c1491
-rw-r--r--libnm-glib/nm-client.h55
-rw-r--r--libnm-glib/nm-device-bt.c100
-rw-r--r--libnm-glib/nm-device-ethernet.c92
-rw-r--r--libnm-glib/nm-device-modem.c285
-rw-r--r--libnm-glib/nm-device-wifi.c154
-rw-r--r--libnm-glib/nm-device-wifi.h18
-rw-r--r--libnm-glib/nm-device-wimax.c911
-rw-r--r--libnm-glib/nm-device-wimax.h79
-rw-r--r--libnm-glib/nm-device.c174
-rw-r--r--libnm-glib/nm-device.h44
-rw-r--r--libnm-glib/nm-dhcp4-config.c12
-rw-r--r--libnm-glib/nm-dhcp6-config.c12
-rw-r--r--libnm-glib/nm-exported-connection.c300
-rw-r--r--libnm-glib/nm-exported-connection.h75
-rw-r--r--libnm-glib/nm-gsm-device.c130
-rw-r--r--libnm-glib/nm-gsm-device.h61
-rw-r--r--libnm-glib/nm-ip4-config.c71
-rw-r--r--libnm-glib/nm-ip4-config.h2
-rw-r--r--libnm-glib/nm-ip6-config.c43
-rw-r--r--libnm-glib/nm-object-cache.c2
-rw-r--r--libnm-glib/nm-object-cache.h1
-rw-r--r--libnm-glib/nm-object-private.h63
-rw-r--r--libnm-glib/nm-object.c88
-rw-r--r--libnm-glib/nm-remote-connection-private.h3
-rw-r--r--libnm-glib/nm-remote-connection.c316
-rw-r--r--libnm-glib/nm-remote-connection.h38
-rw-r--r--libnm-glib/nm-remote-settings-system.c375
-rw-r--r--libnm-glib/nm-remote-settings-system.h64
-rw-r--r--libnm-glib/nm-remote-settings.c647
-rw-r--r--libnm-glib/nm-remote-settings.h77
-rw-r--r--libnm-glib/nm-secret-agent.c988
-rw-r--r--libnm-glib/nm-secret-agent.h189
-rw-r--r--libnm-glib/nm-serial-device.c207
-rw-r--r--libnm-glib/nm-serial-device.h (renamed from libnm-glib/nm-device-modem.h)35
-rw-r--r--libnm-glib/nm-settings-connection-interface.c192
-rw-r--r--libnm-glib/nm-settings-connection-interface.h116
-rw-r--r--libnm-glib/nm-settings-interface.c206
-rw-r--r--libnm-glib/nm-settings-interface.h109
-rw-r--r--libnm-glib/nm-settings-service.c372
-rw-r--r--libnm-glib/nm-settings-service.h82
-rw-r--r--libnm-glib/nm-settings-system-interface.c150
-rw-r--r--libnm-glib/nm-settings-system-interface.h108
-rw-r--r--libnm-glib/nm-types.c20
-rw-r--r--libnm-glib/nm-vpn-connection.c27
-rw-r--r--libnm-glib/nm-vpn-connection.h2
-rw-r--r--libnm-glib/nm-vpn-plugin-utils.c188
-rw-r--r--libnm-glib/nm-vpn-plugin-utils.h39
-rw-r--r--libnm-glib/nm-vpn-plugin.c18
-rw-r--r--libnm-glib/nm-wimax-nsp.c366
-rw-r--r--libnm-glib/nm-wimax-nsp.h81
-rw-r--r--libnm-glib/tests/Makefile.am35
-rw-r--r--libnm-glib/tests/Makefile.in634
-rw-r--r--libnm-glib/tests/test-remote-settings-client.c406
-rwxr-xr-xlibnm-glib/tests/test-remote-settings-service.py131
69 files changed, 4288 insertions, 7948 deletions
diff --git a/libnm-glib/Makefile.am b/libnm-glib/Makefile.am
index 08a61cc2..7e9f08c1 100644
--- a/libnm-glib/Makefile.am
+++ b/libnm-glib/Makefile.am
@@ -1,5 +1,3 @@
-SUBDIRS=. tests
-
 INCLUDES = \
 	-I$(top_srcdir)/include \
 	-I$(top_srcdir)/libnm-util \
@@ -12,28 +10,25 @@ BUILT_SOURCES = \
 	nm-device-ethernet-bindings.h \
 	nm-device-wifi-bindings.h \
 	nm-device-bt-bindings.h \
-	nm-settings-connection-bindings.h \
-	nm-device-wimax-bindings.h \
-	nm-device-modem-bindings.h \
+	nm-exported-connection-glue.h \
+	nm-exported-connection-bindings.h \
+	nm-settings-glue.h \
 	nm-settings-bindings.h \
+	nm-settings-system-bindings.h \
 	nm-vpn-connection-bindings.h \
 	nm-vpn-plugin-glue.h \
 	nm-active-connection-bindings.h \
 	nm-ip4-config-bindings.h \
 	nm-dhcp4-config-bindings.h \
 	nm-ip6-config-bindings.h \
-	nm-dhcp6-config-bindings.h \
-	nm-secret-agent-glue.h
-
-
-noinst_LTLIBRARIES = \
-	libdeprecated-nm-glib.la \
-	libnm-glib-test.la
+	nm-dhcp6-config-bindings.h
 
 #####################################################
 # Deprecated original libnm_glib bits
 #####################################################
 
+noinst_LTLIBRARIES = libdeprecated-nm-glib.la
+
 libdeprecated_nm_glib_la_SOURCES = \
 	libnm_glib.h \
 	libnm_glib.c
@@ -48,9 +43,6 @@ libdeprecated_nm_glib_la_LIBADD = \
 	$(DBUS_LIBS) \
 	$(GLIB_LIBS)
 
-libdeprecateddir = $(includedir)/libnm-glib
-libdeprecated_HEADERS = libnm_glib.h
-
 #####################################################
 # Real libnm-glib stuff
 #####################################################
@@ -63,9 +55,9 @@ libnm_glib_la_CFLAGS = \
 	$(GUDEV_CFLAGS)
 
 libnmincludedir = $(includedir)/libnm-glib
-libnmvpndir = $(includedir)/libnm-glib
 
 libnminclude_HEADERS = \
+	libnm_glib.h \
 	nm-object.h \
 	nm-client.h \
 	nm-device.h \
@@ -74,59 +66,60 @@ libnminclude_HEADERS = \
 	nm-device-bt.h \
 	nm-access-point.h \
 	nm-ip4-config.h \
-	nm-device-modem.h \
+	nm-gsm-device.h \
+	nm-cdma-device.h \
+	nm-serial-device.h \
 	nm-vpn-connection.h \
+	nm-vpn-plugin.h \
+	nm-vpn-plugin-ui-interface.h \
 	nm-types.h \
 	nm-active-connection.h \
 	nm-dhcp4-config.h \
 	nm-ip6-config.h \
 	nm-dhcp6-config.h \
 	nm-remote-connection.h \
+	nm-settings-interface.h \
+	nm-settings-system-interface.h \
 	nm-remote-settings.h \
-	nm-secret-agent.h \
-	nm-device-wimax.h \
-	nm-wimax-nsp.h
-
-libnmvpn_HEADERS = \
-	nm-vpn-plugin.h \
-	nm-vpn-plugin-ui-interface.h \
-	nm-vpn-plugin-utils.h
+	nm-remote-settings-system.h \
+	nm-settings-connection-interface.h \
+	nm-exported-connection.h \
+	nm-settings-service.h
 
-libnm_glib_la_csources = \
+libnm_glib_la_SOURCES = \
 	nm-object.c \
+	nm-object-private.h \
 	nm-client.c \
 	nm-dbus-utils.c \
+	nm-dbus-utils.h \
 	nm-device.c \
+	nm-device-private.h \
 	nm-device-ethernet.c \
 	nm-device-wifi.c \
 	nm-device-bt.c \
 	nm-access-point.c \
 	nm-ip4-config.c \
-	nm-device-modem.c \
+	nm-gsm-device.c \
+	nm-cdma-device.c \
+	nm-serial-device.c \
 	nm-vpn-connection.c \
 	nm-types.c \
+	nm-types-private.h \
 	nm-object-cache.c \
+	nm-object-cache.h \
 	nm-active-connection.c \
 	nm-dhcp4-config.c \
 	nm-ip6-config.c \
 	nm-dhcp6-config.c \
 	nm-remote-connection.c \
+	nm-remote-connection-private.h \
+	nm-settings-interface.c \
+	nm-settings-system-interface.c \
 	nm-remote-settings.c \
-	nm-secret-agent.c \
-	nm-device-wimax.c \
-	nm-wimax-nsp.c
-
-libnm_glib_la_private_headers = \
-	nm-object-private.h \
-	nm-dbus-utils.h \
-	nm-device-private.h \
-	nm-types-private.h \
-	nm-object-cache.h \
-	nm-remote-connection-private.h
-
-libnm_glib_la_SOURCES = \
-	$(libnm_glib_la_csources) \
-	$(libnm_glib_la_private_headers)
+	nm-remote-settings-system.c \
+	nm-settings-connection-interface.c \
+	nm-exported-connection.c \
+	nm-settings-service.c
 
 libnm_glib_la_LIBADD = \
 	$(top_builddir)/libnm-util/libnm-util.la \
@@ -139,7 +132,7 @@ libnm_glib_la_LIBADD = \
 SYMBOL_VIS_FILE=$(srcdir)/libnm-glib.ver
 
 libnm_glib_la_LDFLAGS = -Wl,--version-script=$(SYMBOL_VIS_FILE) \
-	-version-info "5:0:1"
+	-version-info "6:3:4"
 
 noinst_PROGRAMS = libnm-glib-test
 
@@ -148,39 +141,14 @@ libnm_glib_test_CFLAGS = $(GLIB_CFLAGS) $(DBUS_CFLAGS)
 libnm_glib_test_LDADD = libnm-glib.la $(top_builddir)/libnm-util/libnm-util.la $(GLIB_LIBS) $(DBUS_LIBS)
 
 
-libnm_glib_vpn_la_SOURCES = \
-	nm-vpn-plugin.c \
-	nm-vpn-plugin-ui-interface.c \
-	nm-vpn-plugin-utils.c
+libnm_glib_vpn_la_SOURCES = nm-vpn-plugin.c nm-vpn-plugin-ui-interface.c
 libnm_glib_vpn_la_CFLAGS = $(GLIB_CFLAGS) $(DBUS_CFLAGS)
 libnm_glib_vpn_la_LIBADD = $(top_builddir)/libnm-util/libnm-util.la $(GLIB_LIBS) $(DBUS_LIBS)
 libnm_glib_vpn_la_LDFLAGS = -Wl,--version-script=$(srcdir)/libnm-glib-vpn.ver \
-	-version-info "2:0:1"
-
-#####################################################
-# Test libnm-glib stuff
-#####################################################
+	-version-info "1:0:0"
 
-libnm_glib_test_la_CFLAGS = \
-	$(GLIB_CFLAGS) \
-	$(DBUS_CFLAGS) \
-	$(GUDEV_CFLAGS) \
-	-DLIBNM_GLIB_TEST
-
-libnm_glib_test_la_SOURCES = \
-	$(libnminclude_HEADERS) \
-	$(libnm_glib_la_SOURCES)
-
-libnm_glib_test_la_LIBADD = \
-	$(top_builddir)/libnm-util/libnm-util.la \
-	$(top_builddir)/marshallers/libmarshallers.la \
-	$(GLIB_LIBS) \
-	$(DBUS_LIBS) \
-	$(GUDEV_LIBS)
-
-#####################################################
 
-nm-client-bindings.h: $(top_srcdir)/introspection/nm-manager.xml
+nm-client-bindings.h: $(top_srcdir)/introspection/nm-manager-client.xml
 	$(AM_V_GEN) dbus-binding-tool --prefix=nm_client --mode=glib-client --output=$@ $<
 
 nm-device-bindings.h: $(top_srcdir)/introspection/nm-device.xml
@@ -198,11 +166,20 @@ nm-device-bt-bindings.h: $(top_srcdir)/introspection/nm-device-bt.xml
 nm-access-point-bindings.h: $(top_srcdir)/introspection/nm-access-point.xml
 	$(AM_V_GEN) dbus-binding-tool --prefix=nm_access_point --mode=glib-client --output=$@ $<
 
+nm-settings-glue.h: $(top_srcdir)/introspection/nm-settings.xml
+	$(AM_V_GEN) dbus-binding-tool --prefix=nm_settings --mode=glib-server --output=$@ $<
+
 nm-settings-bindings.h: $(top_srcdir)/introspection/nm-settings.xml
 	$(AM_V_GEN) dbus-binding-tool --prefix=nm_settings --mode=glib-client --output=$@ $<
 
-nm-settings-connection-bindings.h: $(top_srcdir)/introspection/nm-settings-connection.xml
-	$(AM_V_GEN) dbus-binding-tool --prefix=nm_settings_connection --mode=glib-client --output=$@ $<
+nm-settings-system-bindings.h: $(top_srcdir)/introspection/nm-settings-system.xml
+	$(AM_V_GEN) dbus-binding-tool --prefix=nm_settings_system --mode=glib-client --output=$@ $<
+
+nm-exported-connection-glue.h: $(top_srcdir)/introspection/nm-exported-connection.xml
+	$(AM_V_GEN) dbus-binding-tool --prefix=nm_exported_connection --mode=glib-server --output=$@ $<
+
+nm-exported-connection-bindings.h: $(top_srcdir)/introspection/nm-exported-connection.xml
+	$(AM_V_GEN) dbus-binding-tool --prefix=nm_exported_connection --mode=glib-client --output=$@ $<
 
 nm-vpn-connection-bindings.h: $(top_srcdir)/introspection/nm-vpn-connection.xml
 	$(AM_V_GEN) dbus-binding-tool --prefix=nm_vpn_connection --mode=glib-client --output=$@ $<
@@ -225,15 +202,6 @@ nm-ip6-config-bindings.h: $(top_srcdir)/introspection/nm-ip6-config.xml
 nm-dhcp6-config-bindings.h: $(top_srcdir)/introspection/nm-dhcp6-config.xml
 	$(AM_V_GEN) dbus-binding-tool --prefix=nm_dhcp6_config --mode=glib-client --output=$@ $<
 
-nm-secret-agent-glue.h: $(top_srcdir)/introspection/nm-secret-agent.xml
-	$(AM_V_GEN) dbus-binding-tool --prefix=nm_secret_agent --mode=glib-server --output=$@ $<
-
-nm-device-wimax-bindings.h: $(top_srcdir)/introspection/nm-device-wimax.xml
-	dbus-binding-tool --prefix=nm_device_wimax --mode=glib-client --output=$@ $<
-
-nm-device-modem-bindings.h: $(top_srcdir)/introspection/nm-device-modem.xml
-	dbus-binding-tool --prefix=nm_device_modem --mode=glib-client --output=$@ $<
-
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = libnm-glib.pc libnm-glib-vpn.pc
 
@@ -243,31 +211,6 @@ EXTRA_DIST = libnm-glib.pc.in libnm-glib-vpn.pc.in libnm-glib.ver libnm-glib-vpn
 
 CLEANFILES = $(BUILT_SOURCES) *-bindings.h *-glue.h
 
--include $(INTROSPECTION_MAKEFILE)
-INTROSPECTION_GIRS =
-INTROSPECTION_COMPILER_ARGS = --includedir=$(top_builddir)/libnm-util
-
-if HAVE_INTROSPECTION
-introspection_sources = $(libnminclude_HEADERS) $(libnm_glib_la_csources)
-
-NMClient-1.0.gir: libnm-glib.la
-NMClient_1_0_gir_INCLUDES = GObject-2.0 DBusGLib-1.0
-NMClient_1_0_gir_PACKAGES = gobject-2.0 dbus-glib-1 gudev-1.0
-NMClient_1_0_gir_CFLAGS = $(INCLUDES) -I$(top_srcdir)/libnm-glib -I$(top_srcdir)/libnm-util
-NMClient_1_0_gir_LIBS = libnm-glib.la
-NMClient_1_0_gir_FILES = $(introspection_sources)
-NMClient_1_0_gir_SCANNERFLAGS = --warn-all --identifier-prefix=NM --symbol-prefix=nm_ --include-uninstalled=$(top_builddir)/libnm-util/NetworkManager-1.0.gir
-INTROSPECTION_GIRS += NMClient-1.0.gir
-
-girdir = $(datadir)/gir-1.0
-gir_DATA = $(INTROSPECTION_GIRS)
-
-typelibdir = $(libdir)/girepository-1.0
-typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib)
-
-CLEANFILES += $(gir_DATA) $(typelib_DATA)
-endif
-
 if WITH_TESTS
 
 check-local:
diff --git a/libnm-glib/Makefile.in b/libnm-glib/Makefile.in
index 01bbaf36..a03248e2 100644
--- a/libnm-glib/Makefile.in
+++ b/libnm-glib/Makefile.in
@@ -38,25 +38,17 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 noinst_PROGRAMS = libnm-glib-test$(EXEEXT)
-@HAVE_INTROSPECTION_TRUE@am__append_1 = NMClient-1.0.gir
-@HAVE_INTROSPECTION_TRUE@am__append_2 = $(gir_DATA) $(typelib_DATA)
 subdir = libnm-glib
-DIST_COMMON = $(libdeprecated_HEADERS) $(libnminclude_HEADERS) \
-	$(libnmvpn_HEADERS) $(srcdir)/Makefile.am \
+DIST_COMMON = $(libnminclude_HEADERS) $(srcdir)/Makefile.am \
 	$(srcdir)/Makefile.in $(srcdir)/libnm-glib-vpn.pc.in \
 	$(srcdir)/libnm-glib.pc.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gtk-doc.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/introspection.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libnl-check.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/intltool.m4 \
+	$(top_srcdir)/m4/libnl-check.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -84,10 +76,8 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" \
-	"$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(typelibdir)" \
-	"$(DESTDIR)$(libdeprecateddir)" "$(DESTDIR)$(libnmincludedir)" \
-	"$(DESTDIR)$(libnmvpndir)"
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" \
+	"$(DESTDIR)$(libnmincludedir)"
 LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES)
 am__DEPENDENCIES_1 =
 libdeprecated_nm_glib_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
@@ -99,47 +89,11 @@ libdeprecated_nm_glib_la_OBJECTS =  \
 AM_V_lt = $(am__v_lt_$(V))
 am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
 am__v_lt_0 = --silent
-libnm_glib_test_la_DEPENDENCIES =  \
-	$(top_builddir)/libnm-util/libnm-util.la \
-	$(top_builddir)/marshallers/libmarshallers.la \
-	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1)
-am__objects_1 =
-am__objects_2 = libnm_glib_test_la-nm-object.lo \
-	libnm_glib_test_la-nm-client.lo \
-	libnm_glib_test_la-nm-dbus-utils.lo \
-	libnm_glib_test_la-nm-device.lo \
-	libnm_glib_test_la-nm-device-ethernet.lo \
-	libnm_glib_test_la-nm-device-wifi.lo \
-	libnm_glib_test_la-nm-device-bt.lo \
-	libnm_glib_test_la-nm-access-point.lo \
-	libnm_glib_test_la-nm-ip4-config.lo \
-	libnm_glib_test_la-nm-device-modem.lo \
-	libnm_glib_test_la-nm-vpn-connection.lo \
-	libnm_glib_test_la-nm-types.lo \
-	libnm_glib_test_la-nm-object-cache.lo \
-	libnm_glib_test_la-nm-active-connection.lo \
-	libnm_glib_test_la-nm-dhcp4-config.lo \
-	libnm_glib_test_la-nm-ip6-config.lo \
-	libnm_glib_test_la-nm-dhcp6-config.lo \
-	libnm_glib_test_la-nm-remote-connection.lo \
-	libnm_glib_test_la-nm-remote-settings.lo \
-	libnm_glib_test_la-nm-secret-agent.lo \
-	libnm_glib_test_la-nm-device-wimax.lo \
-	libnm_glib_test_la-nm-wimax-nsp.lo
-am__objects_3 = $(am__objects_2) $(am__objects_1)
-am_libnm_glib_test_la_OBJECTS = $(am__objects_1) $(am__objects_3)
-libnm_glib_test_la_OBJECTS = $(am_libnm_glib_test_la_OBJECTS)
-libnm_glib_test_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
-	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
-	$(libnm_glib_test_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
 libnm_glib_vpn_la_DEPENDENCIES =  \
 	$(top_builddir)/libnm-util/libnm-util.la $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1)
 am_libnm_glib_vpn_la_OBJECTS = libnm_glib_vpn_la-nm-vpn-plugin.lo \
-	libnm_glib_vpn_la-nm-vpn-plugin-ui-interface.lo \
-	libnm_glib_vpn_la-nm-vpn-plugin-utils.lo
+	libnm_glib_vpn_la-nm-vpn-plugin-ui-interface.lo
 libnm_glib_vpn_la_OBJECTS = $(am_libnm_glib_vpn_la_OBJECTS)
 libnm_glib_vpn_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
@@ -149,13 +103,14 @@ libnm_glib_la_DEPENDENCIES = $(top_builddir)/libnm-util/libnm-util.la \
 	$(top_builddir)/marshallers/libmarshallers.la \
 	$(builddir)/libdeprecated-nm-glib.la $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
-am__objects_4 = libnm_glib_la-nm-object.lo libnm_glib_la-nm-client.lo \
-	libnm_glib_la-nm-dbus-utils.lo libnm_glib_la-nm-device.lo \
-	libnm_glib_la-nm-device-ethernet.lo \
+am_libnm_glib_la_OBJECTS = libnm_glib_la-nm-object.lo \
+	libnm_glib_la-nm-client.lo libnm_glib_la-nm-dbus-utils.lo \
+	libnm_glib_la-nm-device.lo libnm_glib_la-nm-device-ethernet.lo \
 	libnm_glib_la-nm-device-wifi.lo libnm_glib_la-nm-device-bt.lo \
 	libnm_glib_la-nm-access-point.lo \
-	libnm_glib_la-nm-ip4-config.lo \
-	libnm_glib_la-nm-device-modem.lo \
+	libnm_glib_la-nm-ip4-config.lo libnm_glib_la-nm-gsm-device.lo \
+	libnm_glib_la-nm-cdma-device.lo \
+	libnm_glib_la-nm-serial-device.lo \
 	libnm_glib_la-nm-vpn-connection.lo libnm_glib_la-nm-types.lo \
 	libnm_glib_la-nm-object-cache.lo \
 	libnm_glib_la-nm-active-connection.lo \
@@ -163,10 +118,13 @@ am__objects_4 = libnm_glib_la-nm-object.lo libnm_glib_la-nm-client.lo \
 	libnm_glib_la-nm-ip6-config.lo \
 	libnm_glib_la-nm-dhcp6-config.lo \
 	libnm_glib_la-nm-remote-connection.lo \
+	libnm_glib_la-nm-settings-interface.lo \
+	libnm_glib_la-nm-settings-system-interface.lo \
 	libnm_glib_la-nm-remote-settings.lo \
-	libnm_glib_la-nm-secret-agent.lo \
-	libnm_glib_la-nm-device-wimax.lo libnm_glib_la-nm-wimax-nsp.lo
-am_libnm_glib_la_OBJECTS = $(am__objects_4) $(am__objects_1)
+	libnm_glib_la-nm-remote-settings-system.lo \
+	libnm_glib_la-nm-settings-connection-interface.lo \
+	libnm_glib_la-nm-exported-connection.lo \
+	libnm_glib_la-nm-settings-service.lo
 libnm_glib_la_OBJECTS = $(am_libnm_glib_la_OBJECTS)
 libnm_glib_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(libnm_glib_la_CFLAGS) \
@@ -183,7 +141,7 @@ libnm_glib_test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
 	$(libnm_glib_test_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
 	-o $@
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
-depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+depcomp = $(SHELL) $(top_srcdir)/depcomp
 am__depfiles_maybe = depfiles
 am__mv = mv -f
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
@@ -209,56 +167,18 @@ AM_V_GEN = $(am__v_GEN_$(V))
 am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
 am__v_GEN_0 = @echo "  GEN   " $@;
 SOURCES = $(libdeprecated_nm_glib_la_SOURCES) \
-	$(libnm_glib_test_la_SOURCES) $(libnm_glib_vpn_la_SOURCES) \
-	$(libnm_glib_la_SOURCES) $(libnm_glib_test_SOURCES)
+	$(libnm_glib_vpn_la_SOURCES) $(libnm_glib_la_SOURCES) \
+	$(libnm_glib_test_SOURCES)
 DIST_SOURCES = $(libdeprecated_nm_glib_la_SOURCES) \
-	$(libnm_glib_test_la_SOURCES) $(libnm_glib_vpn_la_SOURCES) \
-	$(libnm_glib_la_SOURCES) $(libnm_glib_test_SOURCES)
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-	html-recursive info-recursive install-data-recursive \
-	install-dvi-recursive install-exec-recursive \
-	install-html-recursive install-info-recursive \
-	install-pdf-recursive install-ps-recursive install-recursive \
-	installcheck-recursive installdirs-recursive pdf-recursive \
-	ps-recursive uninstall-recursive
-DATA = $(gir_DATA) $(pkgconfig_DATA) $(typelib_DATA)
-HEADERS = $(libdeprecated_HEADERS) $(libnminclude_HEADERS) \
-	$(libnmvpn_HEADERS)
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
-  distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
-	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
-	distdir
+	$(libnm_glib_vpn_la_SOURCES) $(libnm_glib_la_SOURCES) \
+	$(libnm_glib_test_SOURCES)
+DATA = $(pkgconfig_DATA)
+HEADERS = $(libnminclude_HEADERS)
 ETAGS = etags
 CTAGS = ctags
-DIST_SUBDIRS = $(SUBDIRS)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-am__relativize = \
-  dir0=`pwd`; \
-  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
-  sed_rest='s,^[^/]*/*,,'; \
-  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
-  sed_butlast='s,/*[^/]*$$,,'; \
-  while test -n "$$dir1"; do \
-    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
-    if test "$$first" != "."; then \
-      if test "$$first" = ".."; then \
-        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
-        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
-      else \
-        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
-        if test "$$first2" = "$$first"; then \
-          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
-        else \
-          dir2="../$$dir2"; \
-        fi; \
-        dir0="$$dir0"/"$$first"; \
-      fi; \
-    fi; \
-    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
-  done; \
-  reldir="$$dir2"
 ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
 ALL_LINGUAS = @ALL_LINGUAS@
 AMTAR = @AMTAR@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
@@ -267,6 +187,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -283,7 +205,6 @@ DHCLIENT_PATH = @DHCLIENT_PATH@
 DHCLIENT_VERSION = @DHCLIENT_VERSION@
 DHCPCD_PATH = @DHCPCD_PATH@
 DISABLE_DEPRECATED = @DISABLE_DEPRECATED@
-DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -292,7 +213,6 @@ ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LIBS = @GIO_LIBS@
@@ -301,8 +221,8 @@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
 GMODULE_CFLAGS = @GMODULE_CFLAGS@
 GMODULE_LIBS = @GMODULE_LIBS@
+GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
-GMSGFMT_015 = @GMSGFMT_015@
 GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
 GNUTLS_LIBS = @GNUTLS_LIBS@
 GREP = @GREP@
@@ -317,23 +237,13 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
 INTLLIBS = @INTLLIBS@
 INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
 INTLTOOL_MERGE = @INTLTOOL_MERGE@
 INTLTOOL_PERL = @INTLTOOL_PERL@
 INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
-INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
-INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
-INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
-INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
-INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
-INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
-INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
-INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
 IPTABLES_PATH = @IPTABLES_PATH@
-IWMX_SDK_CFLAGS = @IWMX_SDK_CFLAGS@
-IWMX_SDK_LIBS = @IWMX_SDK_LIBS@
 KERNEL_FIRMWARE_DIR = @KERNEL_FIRMWARE_DIR@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
@@ -341,8 +251,6 @@ LIBDL = @LIBDL@
 LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
 LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
 LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
-LIBICONV = @LIBICONV@
-LIBINTL = @LIBINTL@
 LIBM = @LIBM@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
@@ -351,15 +259,13 @@ LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
 LIPO = @LIPO@
 LN_S = @LN_S@
-LTLIBICONV = @LTLIBICONV@
-LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
 MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
 MSGFMT = @MSGFMT@
-MSGFMT_015 = @MSGFMT_015@
+MSGFMT_OPTS = @MSGFMT_OPTS@
 MSGMERGE = @MSGMERGE@
 NM = @NM@
 NMEDIT = @NMEDIT@
@@ -385,9 +291,12 @@ PKGCONFIG_PATH = @PKGCONFIG_PATH@
 PKG_CONFIG = @PKG_CONFIG@
 PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
 PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POFILES = @POFILES@
 POLKIT_CFLAGS = @POLKIT_CFLAGS@
 POLKIT_LIBS = @POLKIT_LIBS@
 POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
 PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
 RANLIB = @RANLIB@
 RESOLVCONF_PATH = @RESOLVCONF_PATH@
@@ -402,13 +311,10 @@ UUID_CFLAGS = @UUID_CFLAGS@
 UUID_LIBS = @UUID_LIBS@
 VERSION = @VERSION@
 XGETTEXT = @XGETTEXT@
-XGETTEXT_015 = @XGETTEXT_015@
-XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
@@ -457,7 +363,6 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-SUBDIRS = . tests
 INCLUDES = \
 	-I$(top_srcdir)/include \
 	-I$(top_srcdir)/libnm-util \
@@ -470,27 +375,24 @@ BUILT_SOURCES = \
 	nm-device-ethernet-bindings.h \
 	nm-device-wifi-bindings.h \
 	nm-device-bt-bindings.h \
-	nm-settings-connection-bindings.h \
-	nm-device-wimax-bindings.h \
-	nm-device-modem-bindings.h \
+	nm-exported-connection-glue.h \
+	nm-exported-connection-bindings.h \
+	nm-settings-glue.h \
 	nm-settings-bindings.h \
+	nm-settings-system-bindings.h \
 	nm-vpn-connection-bindings.h \
 	nm-vpn-plugin-glue.h \
 	nm-active-connection-bindings.h \
 	nm-ip4-config-bindings.h \
 	nm-dhcp4-config-bindings.h \
 	nm-ip6-config-bindings.h \
-	nm-dhcp6-config-bindings.h \
-	nm-secret-agent-glue.h
-
-noinst_LTLIBRARIES = \
-	libdeprecated-nm-glib.la \
-	libnm-glib-test.la
+	nm-dhcp6-config-bindings.h
 
 
 #####################################################
 # Deprecated original libnm_glib bits
 #####################################################
+noinst_LTLIBRARIES = libdeprecated-nm-glib.la
 libdeprecated_nm_glib_la_SOURCES = \
 	libnm_glib.h \
 	libnm_glib.c
@@ -505,8 +407,6 @@ libdeprecated_nm_glib_la_LIBADD = \
 	$(DBUS_LIBS) \
 	$(GLIB_LIBS)
 
-libdeprecateddir = $(includedir)/libnm-glib
-libdeprecated_HEADERS = libnm_glib.h
 
 #####################################################
 # Real libnm-glib stuff
@@ -518,8 +418,8 @@ libnm_glib_la_CFLAGS = \
 	$(GUDEV_CFLAGS)
 
 libnmincludedir = $(includedir)/libnm-glib
-libnmvpndir = $(includedir)/libnm-glib
 libnminclude_HEADERS = \
+	libnm_glib.h \
 	nm-object.h \
 	nm-client.h \
 	nm-device.h \
@@ -528,59 +428,60 @@ libnminclude_HEADERS = \
 	nm-device-bt.h \
 	nm-access-point.h \
 	nm-ip4-config.h \
-	nm-device-modem.h \
+	nm-gsm-device.h \
+	nm-cdma-device.h \
+	nm-serial-device.h \
 	nm-vpn-connection.h \
+	nm-vpn-plugin.h \
+	nm-vpn-plugin-ui-interface.h \
 	nm-types.h \
 	nm-active-connection.h \
 	nm-dhcp4-config.h \
 	nm-ip6-config.h \
 	nm-dhcp6-config.h \
 	nm-remote-connection.h \
+	nm-settings-interface.h \
+	nm-settings-system-interface.h \
 	nm-remote-settings.h \
-	nm-secret-agent.h \
-	nm-device-wimax.h \
-	nm-wimax-nsp.h
-
-libnmvpn_HEADERS = \
-	nm-vpn-plugin.h \
-	nm-vpn-plugin-ui-interface.h \
-	nm-vpn-plugin-utils.h
+	nm-remote-settings-system.h \
+	nm-settings-connection-interface.h \
+	nm-exported-connection.h \
+	nm-settings-service.h
 
-libnm_glib_la_csources = \
+libnm_glib_la_SOURCES = \
 	nm-object.c \
+	nm-object-private.h \
 	nm-client.c \
 	nm-dbus-utils.c \
+	nm-dbus-utils.h \
 	nm-device.c \
+	nm-device-private.h \
 	nm-device-ethernet.c \
 	nm-device-wifi.c \
 	nm-device-bt.c \
 	nm-access-point.c \
 	nm-ip4-config.c \
-	nm-device-modem.c \
+	nm-gsm-device.c \
+	nm-cdma-device.c \
+	nm-serial-device.c \
 	nm-vpn-connection.c \
 	nm-types.c \
+	nm-types-private.h \
 	nm-object-cache.c \
+	nm-object-cache.h \
 	nm-active-connection.c \
 	nm-dhcp4-config.c \
 	nm-ip6-config.c \
 	nm-dhcp6-config.c \
 	nm-remote-connection.c \
+	nm-remote-connection-private.h \
+	nm-settings-interface.c \
+	nm-settings-system-interface.c \
 	nm-remote-settings.c \
-	nm-secret-agent.c \
-	nm-device-wimax.c \
-	nm-wimax-nsp.c
-
-libnm_glib_la_private_headers = \
-	nm-object-private.h \
-	nm-dbus-utils.h \
-	nm-device-private.h \
-	nm-types-private.h \
-	nm-object-cache.h \
-	nm-remote-connection-private.h
-
-libnm_glib_la_SOURCES = \
-	$(libnm_glib_la_csources) \
-	$(libnm_glib_la_private_headers)
+	nm-remote-settings-system.c \
+	nm-settings-connection-interface.c \
+	nm-exported-connection.c \
+	nm-settings-service.c
 
 libnm_glib_la_LIBADD = \
 	$(top_builddir)/libnm-util/libnm-util.la \
@@ -592,62 +493,24 @@ libnm_glib_la_LIBADD = \
 
 SYMBOL_VIS_FILE = $(srcdir)/libnm-glib.ver
 libnm_glib_la_LDFLAGS = -Wl,--version-script=$(SYMBOL_VIS_FILE) \
-	-version-info "5:0:1"
+	-version-info "6:3:4"
 
 libnm_glib_test_SOURCES = libnm-glib-test.c
 libnm_glib_test_CFLAGS = $(GLIB_CFLAGS) $(DBUS_CFLAGS)
 libnm_glib_test_LDADD = libnm-glib.la $(top_builddir)/libnm-util/libnm-util.la $(GLIB_LIBS) $(DBUS_LIBS)
-libnm_glib_vpn_la_SOURCES = \
-	nm-vpn-plugin.c \
-	nm-vpn-plugin-ui-interface.c \
-	nm-vpn-plugin-utils.c
-
+libnm_glib_vpn_la_SOURCES = nm-vpn-plugin.c nm-vpn-plugin-ui-interface.c
 libnm_glib_vpn_la_CFLAGS = $(GLIB_CFLAGS) $(DBUS_CFLAGS)
 libnm_glib_vpn_la_LIBADD = $(top_builddir)/libnm-util/libnm-util.la $(GLIB_LIBS) $(DBUS_LIBS)
 libnm_glib_vpn_la_LDFLAGS = -Wl,--version-script=$(srcdir)/libnm-glib-vpn.ver \
-	-version-info "2:0:1"
-
-
-#####################################################
-# Test libnm-glib stuff
-#####################################################
-libnm_glib_test_la_CFLAGS = \
-	$(GLIB_CFLAGS) \
-	$(DBUS_CFLAGS) \
-	$(GUDEV_CFLAGS) \
-	-DLIBNM_GLIB_TEST
-
-libnm_glib_test_la_SOURCES = \
-	$(libnminclude_HEADERS) \
-	$(libnm_glib_la_SOURCES)
-
-libnm_glib_test_la_LIBADD = \
-	$(top_builddir)/libnm-util/libnm-util.la \
-	$(top_builddir)/marshallers/libmarshallers.la \
-	$(GLIB_LIBS) \
-	$(DBUS_LIBS) \
-	$(GUDEV_LIBS)
+	-version-info "1:0:0"
 
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = libnm-glib.pc libnm-glib-vpn.pc
 DISTCLEANFILES = libnm-glib.pc libnm-glib.pc
 EXTRA_DIST = libnm-glib.pc.in libnm-glib-vpn.pc.in libnm-glib.ver libnm-glib-vpn.ver
-CLEANFILES = $(BUILT_SOURCES) *-bindings.h *-glue.h $(am__append_2)
-INTROSPECTION_GIRS = $(am__append_1)
-INTROSPECTION_COMPILER_ARGS = --includedir=$(top_builddir)/libnm-util
-@HAVE_INTROSPECTION_TRUE@introspection_sources = $(libnminclude_HEADERS) $(libnm_glib_la_csources)
-@HAVE_INTROSPECTION_TRUE@NMClient_1_0_gir_INCLUDES = GObject-2.0 DBusGLib-1.0
-@HAVE_INTROSPECTION_TRUE@NMClient_1_0_gir_PACKAGES = gobject-2.0 dbus-glib-1 gudev-1.0
-@HAVE_INTROSPECTION_TRUE@NMClient_1_0_gir_CFLAGS = $(INCLUDES) -I$(top_srcdir)/libnm-glib -I$(top_srcdir)/libnm-util
-@HAVE_INTROSPECTION_TRUE@NMClient_1_0_gir_LIBS = libnm-glib.la
-@HAVE_INTROSPECTION_TRUE@NMClient_1_0_gir_FILES = $(introspection_sources)
-@HAVE_INTROSPECTION_TRUE@NMClient_1_0_gir_SCANNERFLAGS = --warn-all --identifier-prefix=NM --symbol-prefix=nm_ --include-uninstalled=$(top_builddir)/libnm-util/NetworkManager-1.0.gir
-@HAVE_INTROSPECTION_TRUE@girdir = $(datadir)/gir-1.0
-@HAVE_INTROSPECTION_TRUE@gir_DATA = $(INTROSPECTION_GIRS)
-@HAVE_INTROSPECTION_TRUE@typelibdir = $(libdir)/girepository-1.0
-@HAVE_INTROSPECTION_TRUE@typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib)
+CLEANFILES = $(BUILT_SOURCES) *-bindings.h *-glue.h
 all: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) all-recursive
+	$(MAKE) $(AM_MAKEFLAGS) all-am
 
 .SUFFIXES:
 .SUFFIXES: .c .lo .o .obj
@@ -727,8 +590,6 @@ clean-noinstLTLIBRARIES:
 	done
 libdeprecated-nm-glib.la: $(libdeprecated_nm_glib_la_OBJECTS) $(libdeprecated_nm_glib_la_DEPENDENCIES) 
 	$(AM_V_CCLD)$(LINK)  $(libdeprecated_nm_glib_la_OBJECTS) $(libdeprecated_nm_glib_la_LIBADD) $(LIBS)
-libnm-glib-test.la: $(libnm_glib_test_la_OBJECTS) $(libnm_glib_test_la_DEPENDENCIES) 
-	$(AM_V_CCLD)$(libnm_glib_test_la_LINK)  $(libnm_glib_test_la_OBJECTS) $(libnm_glib_test_la_LIBADD) $(LIBS)
 libnm-glib-vpn.la: $(libnm_glib_vpn_la_OBJECTS) $(libnm_glib_vpn_la_DEPENDENCIES) 
 	$(AM_V_CCLD)$(libnm_glib_vpn_la_LINK) -rpath $(libdir) $(libnm_glib_vpn_la_OBJECTS) $(libnm_glib_vpn_la_LIBADD) $(LIBS)
 libnm-glib.la: $(libnm_glib_la_OBJECTS) $(libnm_glib_la_DEPENDENCIES) 
@@ -755,51 +616,33 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdeprecated_nm_glib_la-libnm_glib.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-access-point.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-active-connection.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-cdma-device.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-client.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-dbus-utils.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-device-bt.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-device-ethernet.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-device-modem.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-device-wifi.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-device-wimax.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-device.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-dhcp4-config.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-dhcp6-config.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-exported-connection.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-gsm-device.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-ip4-config.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-ip6-config.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-object-cache.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-object.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-remote-connection.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-remote-settings-system.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-remote-settings.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-secret-agent.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-serial-device.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-settings-connection-interface.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-settings-interface.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-settings-service.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-settings-system-interface.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-types.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-vpn-connection.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-wimax-nsp.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test-libnm-glib-test.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-access-point.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-active-connection.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-client.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-dbus-utils.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-device-bt.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-device-ethernet.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-device-modem.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-device-wifi.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-device-wimax.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-device.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-dhcp4-config.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-dhcp6-config.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-ip4-config.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-ip6-config.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-object-cache.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-object.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-remote-connection.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-remote-settings.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-secret-agent.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-types.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-vpn-connection.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-wimax-nsp.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_vpn_la-nm-vpn-plugin-ui-interface.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_vpn_la-nm-vpn-plugin-utils.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_vpn_la-nm-vpn-plugin.Plo@am__quote@
 
 .c.o:
@@ -837,182 +680,6 @@ libdeprecated_nm_glib_la-libnm_glib.lo: libnm_glib.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdeprecated_nm_glib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdeprecated_nm_glib_la-libnm_glib.lo `test -f 'libnm_glib.c' || echo '$(srcdir)/'`libnm_glib.c
 
-libnm_glib_test_la-nm-object.lo: nm-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) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-object.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-object.Tpo -c -o libnm_glib_test_la-nm-object.lo `test -f 'nm-object.c' || echo '$(srcdir)/'`nm-object.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-object.Tpo $(DEPDIR)/libnm_glib_test_la-nm-object.Plo
-@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-object.c' object='libnm_glib_test_la-nm-object.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-object.lo `test -f 'nm-object.c' || echo '$(srcdir)/'`nm-object.c
-
-libnm_glib_test_la-nm-client.lo: nm-client.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) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-client.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-client.Tpo -c -o libnm_glib_test_la-nm-client.lo `test -f 'nm-client.c' || echo '$(srcdir)/'`nm-client.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-client.Tpo $(DEPDIR)/libnm_glib_test_la-nm-client.Plo
-@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-client.c' object='libnm_glib_test_la-nm-client.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-client.lo `test -f 'nm-client.c' || echo '$(srcdir)/'`nm-client.c
-
-libnm_glib_test_la-nm-dbus-utils.lo: nm-dbus-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) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-dbus-utils.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-dbus-utils.Tpo -c -o libnm_glib_test_la-nm-dbus-utils.lo `test -f 'nm-dbus-utils.c' || echo '$(srcdir)/'`nm-dbus-utils.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-dbus-utils.Tpo $(DEPDIR)/libnm_glib_test_la-nm-dbus-utils.Plo
-@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-dbus-utils.c' object='libnm_glib_test_la-nm-dbus-utils.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-dbus-utils.lo `test -f 'nm-dbus-utils.c' || echo '$(srcdir)/'`nm-dbus-utils.c
-
-libnm_glib_test_la-nm-device.lo: nm-device.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) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-device.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-device.Tpo -c -o libnm_glib_test_la-nm-device.lo `test -f 'nm-device.c' || echo '$(srcdir)/'`nm-device.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-device.Tpo $(DEPDIR)/libnm_glib_test_la-nm-device.Plo
-@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-device.c' object='libnm_glib_test_la-nm-device.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-device.lo `test -f 'nm-device.c' || echo '$(srcdir)/'`nm-device.c
-
-libnm_glib_test_la-nm-device-ethernet.lo: nm-device-ethernet.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) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-device-ethernet.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-device-ethernet.Tpo -c -o libnm_glib_test_la-nm-device-ethernet.lo `test -f 'nm-device-ethernet.c' || echo '$(srcdir)/'`nm-device-ethernet.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-device-ethernet.Tpo $(DEPDIR)/libnm_glib_test_la-nm-device-ethernet.Plo
-@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-device-ethernet.c' object='libnm_glib_test_la-nm-device-ethernet.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-device-ethernet.lo `test -f 'nm-device-ethernet.c' || echo '$(srcdir)/'`nm-device-ethernet.c
-
-libnm_glib_test_la-nm-device-wifi.lo: nm-device-wifi.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) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-device-wifi.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-device-wifi.Tpo -c -o libnm_glib_test_la-nm-device-wifi.lo `test -f 'nm-device-wifi.c' || echo '$(srcdir)/'`nm-device-wifi.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-device-wifi.Tpo $(DEPDIR)/libnm_glib_test_la-nm-device-wifi.Plo
-@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-device-wifi.c' object='libnm_glib_test_la-nm-device-wifi.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-device-wifi.lo `test -f 'nm-device-wifi.c' || echo '$(srcdir)/'`nm-device-wifi.c
-
-libnm_glib_test_la-nm-device-bt.lo: nm-device-bt.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) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-device-bt.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-device-bt.Tpo -c -o libnm_glib_test_la-nm-device-bt.lo `test -f 'nm-device-bt.c' || echo '$(srcdir)/'`nm-device-bt.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-device-bt.Tpo $(DEPDIR)/libnm_glib_test_la-nm-device-bt.Plo
-@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-device-bt.c' object='libnm_glib_test_la-nm-device-bt.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-device-bt.lo `test -f 'nm-device-bt.c' || echo '$(srcdir)/'`nm-device-bt.c
-
-libnm_glib_test_la-nm-access-point.lo: nm-access-point.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) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-access-point.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-access-point.Tpo -c -o libnm_glib_test_la-nm-access-point.lo `test -f 'nm-access-point.c' || echo '$(srcdir)/'`nm-access-point.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-access-point.Tpo $(DEPDIR)/libnm_glib_test_la-nm-access-point.Plo
-@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-access-point.c' object='libnm_glib_test_la-nm-access-point.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-access-point.lo `test -f 'nm-access-point.c' || echo '$(srcdir)/'`nm-access-point.c
-
-libnm_glib_test_la-nm-ip4-config.lo: nm-ip4-config.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) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-ip4-config.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-ip4-config.Tpo -c -o libnm_glib_test_la-nm-ip4-config.lo `test -f 'nm-ip4-config.c' || echo '$(srcdir)/'`nm-ip4-config.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-ip4-config.Tpo $(DEPDIR)/libnm_glib_test_la-nm-ip4-config.Plo
-@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-ip4-config.c' object='libnm_glib_test_la-nm-ip4-config.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-ip4-config.lo `test -f 'nm-ip4-config.c' || echo '$(srcdir)/'`nm-ip4-config.c
-
-libnm_glib_test_la-nm-device-modem.lo: nm-device-modem.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) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-device-modem.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-device-modem.Tpo -c -o libnm_glib_test_la-nm-device-modem.lo `test -f 'nm-device-modem.c' || echo '$(srcdir)/'`nm-device-modem.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-device-modem.Tpo $(DEPDIR)/libnm_glib_test_la-nm-device-modem.Plo
-@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-device-modem.c' object='libnm_glib_test_la-nm-device-modem.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-device-modem.lo `test -f 'nm-device-modem.c' || echo '$(srcdir)/'`nm-device-modem.c
-
-libnm_glib_test_la-nm-vpn-connection.lo: nm-vpn-connection.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) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-vpn-connection.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-vpn-connection.Tpo -c -o libnm_glib_test_la-nm-vpn-connection.lo `test -f 'nm-vpn-connection.c' || echo '$(srcdir)/'`nm-vpn-connection.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-vpn-connection.Tpo $(DEPDIR)/libnm_glib_test_la-nm-vpn-connection.Plo
-@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-vpn-connection.c' object='libnm_glib_test_la-nm-vpn-connection.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-vpn-connection.lo `test -f 'nm-vpn-connection.c' || echo '$(srcdir)/'`nm-vpn-connection.c
-
-libnm_glib_test_la-nm-types.lo: nm-types.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) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-types.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-types.Tpo -c -o libnm_glib_test_la-nm-types.lo `test -f 'nm-types.c' || echo '$(srcdir)/'`nm-types.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-types.Tpo $(DEPDIR)/libnm_glib_test_la-nm-types.Plo
-@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-types.c' object='libnm_glib_test_la-nm-types.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-types.lo `test -f 'nm-types.c' || echo '$(srcdir)/'`nm-types.c
-
-libnm_glib_test_la-nm-object-cache.lo: nm-object-cache.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) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-object-cache.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-object-cache.Tpo -c -o libnm_glib_test_la-nm-object-cache.lo `test -f 'nm-object-cache.c' || echo '$(srcdir)/'`nm-object-cache.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-object-cache.Tpo $(DEPDIR)/libnm_glib_test_la-nm-object-cache.Plo
-@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-object-cache.c' object='libnm_glib_test_la-nm-object-cache.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-object-cache.lo `test -f 'nm-object-cache.c' || echo '$(srcdir)/'`nm-object-cache.c
-
-libnm_glib_test_la-nm-active-connection.lo: nm-active-connection.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) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-active-connection.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-active-connection.Tpo -c -o libnm_glib_test_la-nm-active-connection.lo `test -f 'nm-active-connection.c' || echo '$(srcdir)/'`nm-active-connection.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-active-connection.Tpo $(DEPDIR)/libnm_glib_test_la-nm-active-connection.Plo
-@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-active-connection.c' object='libnm_glib_test_la-nm-active-connection.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-active-connection.lo `test -f 'nm-active-connection.c' || echo '$(srcdir)/'`nm-active-connection.c
-
-libnm_glib_test_la-nm-dhcp4-config.lo: nm-dhcp4-config.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) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-dhcp4-config.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-dhcp4-config.Tpo -c -o libnm_glib_test_la-nm-dhcp4-config.lo `test -f 'nm-dhcp4-config.c' || echo '$(srcdir)/'`nm-dhcp4-config.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-dhcp4-config.Tpo $(DEPDIR)/libnm_glib_test_la-nm-dhcp4-config.Plo
-@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-dhcp4-config.c' object='libnm_glib_test_la-nm-dhcp4-config.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-dhcp4-config.lo `test -f 'nm-dhcp4-config.c' || echo '$(srcdir)/'`nm-dhcp4-config.c
-
-libnm_glib_test_la-nm-ip6-config.lo: nm-ip6-config.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) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-ip6-config.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-ip6-config.Tpo -c -o libnm_glib_test_la-nm-ip6-config.lo `test -f 'nm-ip6-config.c' || echo '$(srcdir)/'`nm-ip6-config.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-ip6-config.Tpo $(DEPDIR)/libnm_glib_test_la-nm-ip6-config.Plo
-@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-ip6-config.c' object='libnm_glib_test_la-nm-ip6-config.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-ip6-config.lo `test -f 'nm-ip6-config.c' || echo '$(srcdir)/'`nm-ip6-config.c
-
-libnm_glib_test_la-nm-dhcp6-config.lo: nm-dhcp6-config.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) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-dhcp6-config.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-dhcp6-config.Tpo -c -o libnm_glib_test_la-nm-dhcp6-config.lo `test -f 'nm-dhcp6-config.c' || echo '$(srcdir)/'`nm-dhcp6-config.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-dhcp6-config.Tpo $(DEPDIR)/libnm_glib_test_la-nm-dhcp6-config.Plo
-@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-dhcp6-config.c' object='libnm_glib_test_la-nm-dhcp6-config.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-dhcp6-config.lo `test -f 'nm-dhcp6-config.c' || echo '$(srcdir)/'`nm-dhcp6-config.c
-
-libnm_glib_test_la-nm-remote-connection.lo: nm-remote-connection.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) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-remote-connection.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-remote-connection.Tpo -c -o libnm_glib_test_la-nm-remote-connection.lo `test -f 'nm-remote-connection.c' || echo '$(srcdir)/'`nm-remote-connection.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-remote-connection.Tpo $(DEPDIR)/libnm_glib_test_la-nm-remote-connection.Plo
-@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-remote-connection.c' object='libnm_glib_test_la-nm-remote-connection.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-remote-connection.lo `test -f 'nm-remote-connection.c' || echo '$(srcdir)/'`nm-remote-connection.c
-
-libnm_glib_test_la-nm-remote-settings.lo: nm-remote-settings.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) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-remote-settings.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-remote-settings.Tpo -c -o libnm_glib_test_la-nm-remote-settings.lo `test -f 'nm-remote-settings.c' || echo '$(srcdir)/'`nm-remote-settings.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-remote-settings.Tpo $(DEPDIR)/libnm_glib_test_la-nm-remote-settings.Plo
-@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-remote-settings.c' object='libnm_glib_test_la-nm-remote-settings.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-remote-settings.lo `test -f 'nm-remote-settings.c' || echo '$(srcdir)/'`nm-remote-settings.c
-
-libnm_glib_test_la-nm-secret-agent.lo: nm-secret-agent.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) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-secret-agent.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-secret-agent.Tpo -c -o libnm_glib_test_la-nm-secret-agent.lo `test -f 'nm-secret-agent.c' || echo '$(srcdir)/'`nm-secret-agent.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-secret-agent.Tpo $(DEPDIR)/libnm_glib_test_la-nm-secret-agent.Plo
-@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-secret-agent.c' object='libnm_glib_test_la-nm-secret-agent.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-secret-agent.lo `test -f 'nm-secret-agent.c' || echo '$(srcdir)/'`nm-secret-agent.c
-
-libnm_glib_test_la-nm-device-wimax.lo: nm-device-wimax.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) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-device-wimax.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-device-wimax.Tpo -c -o libnm_glib_test_la-nm-device-wimax.lo `test -f 'nm-device-wimax.c' || echo '$(srcdir)/'`nm-device-wimax.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-device-wimax.Tpo $(DEPDIR)/libnm_glib_test_la-nm-device-wimax.Plo
-@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-device-wimax.c' object='libnm_glib_test_la-nm-device-wimax.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-device-wimax.lo `test -f 'nm-device-wimax.c' || echo '$(srcdir)/'`nm-device-wimax.c
-
-libnm_glib_test_la-nm-wimax-nsp.lo: nm-wimax-nsp.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) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-wimax-nsp.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-wimax-nsp.Tpo -c -o libnm_glib_test_la-nm-wimax-nsp.lo `test -f 'nm-wimax-nsp.c' || echo '$(srcdir)/'`nm-wimax-nsp.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-wimax-nsp.Tpo $(DEPDIR)/libnm_glib_test_la-nm-wimax-nsp.Plo
-@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-wimax-nsp.c' object='libnm_glib_test_la-nm-wimax-nsp.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-wimax-nsp.lo `test -f 'nm-wimax-nsp.c' || echo '$(srcdir)/'`nm-wimax-nsp.c
-
 libnm_glib_vpn_la-nm-vpn-plugin.lo: nm-vpn-plugin.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) $(libnm_glib_vpn_la_CFLAGS) $(CFLAGS) -MT libnm_glib_vpn_la-nm-vpn-plugin.lo -MD -MP -MF $(DEPDIR)/libnm_glib_vpn_la-nm-vpn-plugin.Tpo -c -o libnm_glib_vpn_la-nm-vpn-plugin.lo `test -f 'nm-vpn-plugin.c' || echo '$(srcdir)/'`nm-vpn-plugin.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_vpn_la-nm-vpn-plugin.Tpo $(DEPDIR)/libnm_glib_vpn_la-nm-vpn-plugin.Plo
@@ -1029,14 +696,6 @@ libnm_glib_vpn_la-nm-vpn-plugin-ui-interface.lo: nm-vpn-plugin-ui-interface.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_vpn_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_vpn_la-nm-vpn-plugin-ui-interface.lo `test -f 'nm-vpn-plugin-ui-interface.c' || echo '$(srcdir)/'`nm-vpn-plugin-ui-interface.c
 
-libnm_glib_vpn_la-nm-vpn-plugin-utils.lo: nm-vpn-plugin-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) $(libnm_glib_vpn_la_CFLAGS) $(CFLAGS) -MT libnm_glib_vpn_la-nm-vpn-plugin-utils.lo -MD -MP -MF $(DEPDIR)/libnm_glib_vpn_la-nm-vpn-plugin-utils.Tpo -c -o libnm_glib_vpn_la-nm-vpn-plugin-utils.lo `test -f 'nm-vpn-plugin-utils.c' || echo '$(srcdir)/'`nm-vpn-plugin-utils.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_vpn_la-nm-vpn-plugin-utils.Tpo $(DEPDIR)/libnm_glib_vpn_la-nm-vpn-plugin-utils.Plo
-@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-vpn-plugin-utils.c' object='libnm_glib_vpn_la-nm-vpn-plugin-utils.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_vpn_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_vpn_la-nm-vpn-plugin-utils.lo `test -f 'nm-vpn-plugin-utils.c' || echo '$(srcdir)/'`nm-vpn-plugin-utils.c
-
 libnm_glib_la-nm-object.lo: nm-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) $(libnm_glib_la_CFLAGS) $(CFLAGS) -MT libnm_glib_la-nm-object.lo -MD -MP -MF $(DEPDIR)/libnm_glib_la-nm-object.Tpo -c -o libnm_glib_la-nm-object.lo `test -f 'nm-object.c' || echo '$(srcdir)/'`nm-object.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_la-nm-object.Tpo $(DEPDIR)/libnm_glib_la-nm-object.Plo
@@ -1109,13 +768,29 @@ libnm_glib_la-nm-ip4-config.lo: nm-ip4-config.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_la-nm-ip4-config.lo `test -f 'nm-ip4-config.c' || echo '$(srcdir)/'`nm-ip4-config.c
 
-libnm_glib_la-nm-device-modem.lo: nm-device-modem.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) $(libnm_glib_la_CFLAGS) $(CFLAGS) -MT libnm_glib_la-nm-device-modem.lo -MD -MP -MF $(DEPDIR)/libnm_glib_la-nm-device-modem.Tpo -c -o libnm_glib_la-nm-device-modem.lo `test -f 'nm-device-modem.c' || echo '$(srcdir)/'`nm-device-modem.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_la-nm-device-modem.Tpo $(DEPDIR)/libnm_glib_la-nm-device-modem.Plo
+libnm_glib_la-nm-gsm-device.lo: nm-gsm-device.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) $(libnm_glib_la_CFLAGS) $(CFLAGS) -MT libnm_glib_la-nm-gsm-device.lo -MD -MP -MF $(DEPDIR)/libnm_glib_la-nm-gsm-device.Tpo -c -o libnm_glib_la-nm-gsm-device.lo `test -f 'nm-gsm-device.c' || echo '$(srcdir)/'`nm-gsm-device.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_la-nm-gsm-device.Tpo $(DEPDIR)/libnm_glib_la-nm-gsm-device.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-gsm-device.c' object='libnm_glib_la-nm-gsm-device.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_la-nm-gsm-device.lo `test -f 'nm-gsm-device.c' || echo '$(srcdir)/'`nm-gsm-device.c
+
+libnm_glib_la-nm-cdma-device.lo: nm-cdma-device.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) $(libnm_glib_la_CFLAGS) $(CFLAGS) -MT libnm_glib_la-nm-cdma-device.lo -MD -MP -MF $(DEPDIR)/libnm_glib_la-nm-cdma-device.Tpo -c -o libnm_glib_la-nm-cdma-device.lo `test -f 'nm-cdma-device.c' || echo '$(srcdir)/'`nm-cdma-device.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_la-nm-cdma-device.Tpo $(DEPDIR)/libnm_glib_la-nm-cdma-device.Plo
 @am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-device-modem.c' object='libnm_glib_la-nm-device-modem.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-cdma-device.c' object='libnm_glib_la-nm-cdma-device.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_la-nm-device-modem.lo `test -f 'nm-device-modem.c' || echo '$(srcdir)/'`nm-device-modem.c
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_la-nm-cdma-device.lo `test -f 'nm-cdma-device.c' || echo '$(srcdir)/'`nm-cdma-device.c
+
+libnm_glib_la-nm-serial-device.lo: nm-serial-device.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) $(libnm_glib_la_CFLAGS) $(CFLAGS) -MT libnm_glib_la-nm-serial-device.lo -MD -MP -MF $(DEPDIR)/libnm_glib_la-nm-serial-device.Tpo -c -o libnm_glib_la-nm-serial-device.lo `test -f 'nm-serial-device.c' || echo '$(srcdir)/'`nm-serial-device.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_la-nm-serial-device.Tpo $(DEPDIR)/libnm_glib_la-nm-serial-device.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-serial-device.c' object='libnm_glib_la-nm-serial-device.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_la-nm-serial-device.lo `test -f 'nm-serial-device.c' || echo '$(srcdir)/'`nm-serial-device.c
 
 libnm_glib_la-nm-vpn-connection.lo: nm-vpn-connection.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) $(libnm_glib_la_CFLAGS) $(CFLAGS) -MT libnm_glib_la-nm-vpn-connection.lo -MD -MP -MF $(DEPDIR)/libnm_glib_la-nm-vpn-connection.Tpo -c -o libnm_glib_la-nm-vpn-connection.lo `test -f 'nm-vpn-connection.c' || echo '$(srcdir)/'`nm-vpn-connection.c
@@ -1181,6 +856,22 @@ libnm_glib_la-nm-remote-connection.lo: nm-remote-connection.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_la-nm-remote-connection.lo `test -f 'nm-remote-connection.c' || echo '$(srcdir)/'`nm-remote-connection.c
 
+libnm_glib_la-nm-settings-interface.lo: nm-settings-interface.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) $(libnm_glib_la_CFLAGS) $(CFLAGS) -MT libnm_glib_la-nm-settings-interface.lo -MD -MP -MF $(DEPDIR)/libnm_glib_la-nm-settings-interface.Tpo -c -o libnm_glib_la-nm-settings-interface.lo `test -f 'nm-settings-interface.c' || echo '$(srcdir)/'`nm-settings-interface.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_la-nm-settings-interface.Tpo $(DEPDIR)/libnm_glib_la-nm-settings-interface.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-settings-interface.c' object='libnm_glib_la-nm-settings-interface.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_la-nm-settings-interface.lo `test -f 'nm-settings-interface.c' || echo '$(srcdir)/'`nm-settings-interface.c
+
+libnm_glib_la-nm-settings-system-interface.lo: nm-settings-system-interface.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) $(libnm_glib_la_CFLAGS) $(CFLAGS) -MT libnm_glib_la-nm-settings-system-interface.lo -MD -MP -MF $(DEPDIR)/libnm_glib_la-nm-settings-system-interface.Tpo -c -o libnm_glib_la-nm-settings-system-interface.lo `test -f 'nm-settings-system-interface.c' || echo '$(srcdir)/'`nm-settings-system-interface.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_la-nm-settings-system-interface.Tpo $(DEPDIR)/libnm_glib_la-nm-settings-system-interface.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-settings-system-interface.c' object='libnm_glib_la-nm-settings-system-interface.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_la-nm-settings-system-interface.lo `test -f 'nm-settings-system-interface.c' || echo '$(srcdir)/'`nm-settings-system-interface.c
+
 libnm_glib_la-nm-remote-settings.lo: nm-remote-settings.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) $(libnm_glib_la_CFLAGS) $(CFLAGS) -MT libnm_glib_la-nm-remote-settings.lo -MD -MP -MF $(DEPDIR)/libnm_glib_la-nm-remote-settings.Tpo -c -o libnm_glib_la-nm-remote-settings.lo `test -f 'nm-remote-settings.c' || echo '$(srcdir)/'`nm-remote-settings.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_la-nm-remote-settings.Tpo $(DEPDIR)/libnm_glib_la-nm-remote-settings.Plo
@@ -1189,29 +880,37 @@ libnm_glib_la-nm-remote-settings.lo: nm-remote-settings.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_la-nm-remote-settings.lo `test -f 'nm-remote-settings.c' || echo '$(srcdir)/'`nm-remote-settings.c
 
-libnm_glib_la-nm-secret-agent.lo: nm-secret-agent.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) $(libnm_glib_la_CFLAGS) $(CFLAGS) -MT libnm_glib_la-nm-secret-agent.lo -MD -MP -MF $(DEPDIR)/libnm_glib_la-nm-secret-agent.Tpo -c -o libnm_glib_la-nm-secret-agent.lo `test -f 'nm-secret-agent.c' || echo '$(srcdir)/'`nm-secret-agent.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_la-nm-secret-agent.Tpo $(DEPDIR)/libnm_glib_la-nm-secret-agent.Plo
+libnm_glib_la-nm-remote-settings-system.lo: nm-remote-settings-system.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) $(libnm_glib_la_CFLAGS) $(CFLAGS) -MT libnm_glib_la-nm-remote-settings-system.lo -MD -MP -MF $(DEPDIR)/libnm_glib_la-nm-remote-settings-system.Tpo -c -o libnm_glib_la-nm-remote-settings-system.lo `test -f 'nm-remote-settings-system.c' || echo '$(srcdir)/'`nm-remote-settings-system.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_la-nm-remote-settings-system.Tpo $(DEPDIR)/libnm_glib_la-nm-remote-settings-system.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-remote-settings-system.c' object='libnm_glib_la-nm-remote-settings-system.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_la-nm-remote-settings-system.lo `test -f 'nm-remote-settings-system.c' || echo '$(srcdir)/'`nm-remote-settings-system.c
+
+libnm_glib_la-nm-settings-connection-interface.lo: nm-settings-connection-interface.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) $(libnm_glib_la_CFLAGS) $(CFLAGS) -MT libnm_glib_la-nm-settings-connection-interface.lo -MD -MP -MF $(DEPDIR)/libnm_glib_la-nm-settings-connection-interface.Tpo -c -o libnm_glib_la-nm-settings-connection-interface.lo `test -f 'nm-settings-connection-interface.c' || echo '$(srcdir)/'`nm-settings-connection-interface.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_la-nm-settings-connection-interface.Tpo $(DEPDIR)/libnm_glib_la-nm-settings-connection-interface.Plo
 @am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-secret-agent.c' object='libnm_glib_la-nm-secret-agent.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-settings-connection-interface.c' object='libnm_glib_la-nm-settings-connection-interface.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_la-nm-secret-agent.lo `test -f 'nm-secret-agent.c' || echo '$(srcdir)/'`nm-secret-agent.c
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_la-nm-settings-connection-interface.lo `test -f 'nm-settings-connection-interface.c' || echo '$(srcdir)/'`nm-settings-connection-interface.c
 
-libnm_glib_la-nm-device-wimax.lo: nm-device-wimax.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) $(libnm_glib_la_CFLAGS) $(CFLAGS) -MT libnm_glib_la-nm-device-wimax.lo -MD -MP -MF $(DEPDIR)/libnm_glib_la-nm-device-wimax.Tpo -c -o libnm_glib_la-nm-device-wimax.lo `test -f 'nm-device-wimax.c' || echo '$(srcdir)/'`nm-device-wimax.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_la-nm-device-wimax.Tpo $(DEPDIR)/libnm_glib_la-nm-device-wimax.Plo
+libnm_glib_la-nm-exported-connection.lo: nm-exported-connection.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) $(libnm_glib_la_CFLAGS) $(CFLAGS) -MT libnm_glib_la-nm-exported-connection.lo -MD -MP -MF $(DEPDIR)/libnm_glib_la-nm-exported-connection.Tpo -c -o libnm_glib_la-nm-exported-connection.lo `test -f 'nm-exported-connection.c' || echo '$(srcdir)/'`nm-exported-connection.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_la-nm-exported-connection.Tpo $(DEPDIR)/libnm_glib_la-nm-exported-connection.Plo
 @am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-device-wimax.c' object='libnm_glib_la-nm-device-wimax.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-exported-connection.c' object='libnm_glib_la-nm-exported-connection.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_la-nm-device-wimax.lo `test -f 'nm-device-wimax.c' || echo '$(srcdir)/'`nm-device-wimax.c
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_la-nm-exported-connection.lo `test -f 'nm-exported-connection.c' || echo '$(srcdir)/'`nm-exported-connection.c
 
-libnm_glib_la-nm-wimax-nsp.lo: nm-wimax-nsp.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) $(libnm_glib_la_CFLAGS) $(CFLAGS) -MT libnm_glib_la-nm-wimax-nsp.lo -MD -MP -MF $(DEPDIR)/libnm_glib_la-nm-wimax-nsp.Tpo -c -o libnm_glib_la-nm-wimax-nsp.lo `test -f 'nm-wimax-nsp.c' || echo '$(srcdir)/'`nm-wimax-nsp.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_la-nm-wimax-nsp.Tpo $(DEPDIR)/libnm_glib_la-nm-wimax-nsp.Plo
+libnm_glib_la-nm-settings-service.lo: nm-settings-service.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) $(libnm_glib_la_CFLAGS) $(CFLAGS) -MT libnm_glib_la-nm-settings-service.lo -MD -MP -MF $(DEPDIR)/libnm_glib_la-nm-settings-service.Tpo -c -o libnm_glib_la-nm-settings-service.lo `test -f 'nm-settings-service.c' || echo '$(srcdir)/'`nm-settings-service.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_la-nm-settings-service.Tpo $(DEPDIR)/libnm_glib_la-nm-settings-service.Plo
 @am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-wimax-nsp.c' object='libnm_glib_la-nm-wimax-nsp.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-settings-service.c' object='libnm_glib_la-nm-settings-service.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_la-nm-wimax-nsp.lo `test -f 'nm-wimax-nsp.c' || echo '$(srcdir)/'`nm-wimax-nsp.c
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_la-nm-settings-service.lo `test -f 'nm-settings-service.c' || echo '$(srcdir)/'`nm-settings-service.c
 
 libnm_glib_test-libnm-glib-test.o: libnm-glib-test.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_CFLAGS) $(CFLAGS) -MT libnm_glib_test-libnm-glib-test.o -MD -MP -MF $(DEPDIR)/libnm_glib_test-libnm-glib-test.Tpo -c -o libnm_glib_test-libnm-glib-test.o `test -f 'libnm-glib-test.c' || echo '$(srcdir)/'`libnm-glib-test.c
@@ -1234,26 +933,6 @@ mostlyclean-libtool:
 
 clean-libtool:
 	-rm -rf .libs _libs
-install-girDATA: $(gir_DATA)
-	@$(NORMAL_INSTALL)
-	test -z "$(girdir)" || $(MKDIR_P) "$(DESTDIR)$(girdir)"
-	@list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  echo "$$d$$p"; \
-	done | $(am__base_list) | \
-	while read files; do \
-	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(girdir)'"; \
-	  $(INSTALL_DATA) $$files "$(DESTDIR)$(girdir)" || exit $$?; \
-	done
-
-uninstall-girDATA:
-	@$(NORMAL_UNINSTALL)
-	@list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
-	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-	test -n "$$files" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(girdir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(girdir)" && rm -f $$files
 install-pkgconfigDATA: $(pkgconfig_DATA)
 	@$(NORMAL_INSTALL)
 	test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
@@ -1274,46 +953,6 @@ uninstall-pkgconfigDATA:
 	test -n "$$files" || exit 0; \
 	echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \
 	cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files
-install-typelibDATA: $(typelib_DATA)
-	@$(NORMAL_INSTALL)
-	test -z "$(typelibdir)" || $(MKDIR_P) "$(DESTDIR)$(typelibdir)"
-	@list='$(typelib_DATA)'; test -n "$(typelibdir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  echo "$$d$$p"; \
-	done | $(am__base_list) | \
-	while read files; do \
-	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typelibdir)'"; \
-	  $(INSTALL_DATA) $$files "$(DESTDIR)$(typelibdir)" || exit $$?; \
-	done
-
-uninstall-typelibDATA:
-	@$(NORMAL_UNINSTALL)
-	@list='$(typelib_DATA)'; test -n "$(typelibdir)" || list=; \
-	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-	test -n "$$files" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(typelibdir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(typelibdir)" && rm -f $$files
-install-libdeprecatedHEADERS: $(libdeprecated_HEADERS)
-	@$(NORMAL_INSTALL)
-	test -z "$(libdeprecateddir)" || $(MKDIR_P) "$(DESTDIR)$(libdeprecateddir)"
-	@list='$(libdeprecated_HEADERS)'; test -n "$(libdeprecateddir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  echo "$$d$$p"; \
-	done | $(am__base_list) | \
-	while read files; do \
-	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libdeprecateddir)'"; \
-	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(libdeprecateddir)" || exit $$?; \
-	done
-
-uninstall-libdeprecatedHEADERS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(libdeprecated_HEADERS)'; test -n "$(libdeprecateddir)" || list=; \
-	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-	test -n "$$files" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(libdeprecateddir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(libdeprecateddir)" && rm -f $$files
 install-libnmincludeHEADERS: $(libnminclude_HEADERS)
 	@$(NORMAL_INSTALL)
 	test -z "$(libnmincludedir)" || $(MKDIR_P) "$(DESTDIR)$(libnmincludedir)"
@@ -1334,96 +973,6 @@ uninstall-libnmincludeHEADERS:
 	test -n "$$files" || exit 0; \
 	echo " ( cd '$(DESTDIR)$(libnmincludedir)' && rm -f" $$files ")"; \
 	cd "$(DESTDIR)$(libnmincludedir)" && rm -f $$files
-install-libnmvpnHEADERS: $(libnmvpn_HEADERS)
-	@$(NORMAL_INSTALL)
-	test -z "$(libnmvpndir)" || $(MKDIR_P) "$(DESTDIR)$(libnmvpndir)"
-	@list='$(libnmvpn_HEADERS)'; test -n "$(libnmvpndir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  echo "$$d$$p"; \
-	done | $(am__base_list) | \
-	while read files; do \
-	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libnmvpndir)'"; \
-	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(libnmvpndir)" || exit $$?; \
-	done
-
-uninstall-libnmvpnHEADERS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(libnmvpn_HEADERS)'; test -n "$(libnmvpndir)" || list=; \
-	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-	test -n "$$files" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(libnmvpndir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(libnmvpndir)" && rm -f $$files
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-#     (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	target=`echo $@ | sed s/-recursive//`; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    dot_seen=yes; \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done; \
-	if test "$$dot_seen" = "no"; then \
-	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-	fi; test -z "$$fail"
-
-$(RECURSIVE_CLEAN_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	case "$@" in \
-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-	  *) list='$(SUBDIRS)' ;; \
-	esac; \
-	rev=''; for subdir in $$list; do \
-	  if test "$$subdir" = "."; then :; else \
-	    rev="$$subdir $$rev"; \
-	  fi; \
-	done; \
-	rev="$$rev ."; \
-	target=`echo $@ | sed s/-recursive//`; \
-	for subdir in $$rev; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done && test -z "$$fail"
-tags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-	done
-ctags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-	done
 
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
@@ -1435,23 +984,10 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
 	mkid -fID $$unique
 tags: TAGS
 
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
 	set x; \
 	here=`pwd`; \
-	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-	  include_option=--etags-include; \
-	  empty_fix=.; \
-	else \
-	  include_option=--include; \
-	  empty_fix=; \
-	fi; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test ! -f $$subdir/TAGS || \
-	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
-	  fi; \
-	done; \
 	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
 	unique=`for i in $$list; do \
 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
@@ -1470,7 +1006,7 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 	  fi; \
 	fi
 ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
 	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
 	unique=`for i in $$list; do \
@@ -1520,55 +1056,26 @@ distdir: $(DISTFILES)
 	    || exit 1; \
 	  fi; \
 	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test -d "$(distdir)/$$subdir" \
-	    || $(MKDIR_P) "$(distdir)/$$subdir" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
-	    $(am__relativize); \
-	    new_distdir=$$reldir; \
-	    dir1=$$subdir; dir2="$(top_distdir)"; \
-	    $(am__relativize); \
-	    new_top_distdir=$$reldir; \
-	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
-	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
-	    ($(am__cd) $$subdir && \
-	      $(MAKE) $(AM_MAKEFLAGS) \
-	        top_distdir="$$new_top_distdir" \
-	        distdir="$$new_distdir" \
-		am__remove_distdir=: \
-		am__skip_length_check=: \
-		am__skip_mode_fix=: \
-	        distdir) \
-	      || exit 1; \
-	  fi; \
-	done
 @WITH_TESTS_FALSE@check-local:
 check-am: all-am
 	$(MAKE) $(AM_MAKEFLAGS) check-local
 check: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) check-recursive
+	$(MAKE) $(AM_MAKEFLAGS) check-am
 all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(DATA) $(HEADERS)
-installdirs: installdirs-recursive
-installdirs-am:
-	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(typelibdir)" "$(DESTDIR)$(libdeprecateddir)" "$(DESTDIR)$(libnmincludedir)" "$(DESTDIR)$(libnmvpndir)"; do \
+installdirs:
+	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(libnmincludedir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
 install: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
 
 install-am: all-am
 	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
 
-installcheck: installcheck-recursive
+installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
 	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
@@ -1588,112 +1095,99 @@ maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
 	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-clean: clean-recursive
+clean: clean-am
 
 clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
 	clean-noinstLTLIBRARIES clean-noinstPROGRAMS mostlyclean-am
 
-distclean: distclean-recursive
+distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-tags
 
-dvi: dvi-recursive
+dvi: dvi-am
 
 dvi-am:
 
-html: html-recursive
+html: html-am
 
 html-am:
 
-info: info-recursive
+info: info-am
 
 info-am:
 
-install-data-am: install-girDATA install-libdeprecatedHEADERS \
-	install-libnmincludeHEADERS install-libnmvpnHEADERS \
-	install-pkgconfigDATA install-typelibDATA
+install-data-am: install-libnmincludeHEADERS install-pkgconfigDATA
 
-install-dvi: install-dvi-recursive
+install-dvi: install-dvi-am
 
 install-dvi-am:
 
 install-exec-am: install-libLTLIBRARIES
 
-install-html: install-html-recursive
+install-html: install-html-am
 
 install-html-am:
 
-install-info: install-info-recursive
+install-info: install-info-am
 
 install-info-am:
 
 install-man:
 
-install-pdf: install-pdf-recursive
+install-pdf: install-pdf-am
 
 install-pdf-am:
 
-install-ps: install-ps-recursive
+install-ps: install-ps-am
 
 install-ps-am:
 
 installcheck-am:
 
-maintainer-clean: maintainer-clean-recursive
+maintainer-clean: maintainer-clean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
-mostlyclean: mostlyclean-recursive
+mostlyclean: mostlyclean-am
 
 mostlyclean-am: mostlyclean-compile mostlyclean-generic \
 	mostlyclean-libtool
 
-pdf: pdf-recursive
+pdf: pdf-am
 
 pdf-am:
 
-ps: ps-recursive
+ps: ps-am
 
 ps-am:
 
-uninstall-am: uninstall-girDATA uninstall-libLTLIBRARIES \
-	uninstall-libdeprecatedHEADERS uninstall-libnmincludeHEADERS \
-	uninstall-libnmvpnHEADERS uninstall-pkgconfigDATA \
-	uninstall-typelibDATA
+uninstall-am: uninstall-libLTLIBRARIES uninstall-libnmincludeHEADERS \
+	uninstall-pkgconfigDATA
 
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \
-	check-am ctags-recursive install install-am install-strip \
-	tags-recursive
+.MAKE: all check check-am install install-am install-strip
 
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-	all all-am check check-am check-local clean clean-generic \
-	clean-libLTLIBRARIES clean-libtool clean-noinstLTLIBRARIES \
-	clean-noinstPROGRAMS ctags ctags-recursive distclean \
+.PHONY: CTAGS GTAGS all all-am check check-am check-local clean \
+	clean-generic clean-libLTLIBRARIES clean-libtool \
+	clean-noinstLTLIBRARIES clean-noinstPROGRAMS ctags distclean \
 	distclean-compile distclean-generic distclean-libtool \
 	distclean-tags distdir dvi dvi-am html html-am info info-am \
 	install install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-girDATA \
-	install-html install-html-am install-info install-info-am \
-	install-libLTLIBRARIES install-libdeprecatedHEADERS \
-	install-libnmincludeHEADERS install-libnmvpnHEADERS \
-	install-man install-pdf install-pdf-am install-pkgconfigDATA \
-	install-ps install-ps-am install-strip install-typelibDATA \
-	installcheck installcheck-am installdirs installdirs-am \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-	pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \
-	uninstall-girDATA uninstall-libLTLIBRARIES \
-	uninstall-libdeprecatedHEADERS uninstall-libnmincludeHEADERS \
-	uninstall-libnmvpnHEADERS uninstall-pkgconfigDATA \
-	uninstall-typelibDATA
-
-
-#####################################################
-
-nm-client-bindings.h: $(top_srcdir)/introspection/nm-manager.xml
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am \
+	install-libLTLIBRARIES install-libnmincludeHEADERS install-man \
+	install-pdf install-pdf-am install-pkgconfigDATA install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
+	uninstall-am uninstall-libLTLIBRARIES \
+	uninstall-libnmincludeHEADERS uninstall-pkgconfigDATA
+
+
+nm-client-bindings.h: $(top_srcdir)/introspection/nm-manager-client.xml
 	$(AM_V_GEN) dbus-binding-tool --prefix=nm_client --mode=glib-client --output=$@ $<
 
 nm-device-bindings.h: $(top_srcdir)/introspection/nm-device.xml
@@ -1711,11 +1205,20 @@ nm-device-bt-bindings.h: $(top_srcdir)/introspection/nm-device-bt.xml
 nm-access-point-bindings.h: $(top_srcdir)/introspection/nm-access-point.xml
 	$(AM_V_GEN) dbus-binding-tool --prefix=nm_access_point --mode=glib-client --output=$@ $<
 
+nm-settings-glue.h: $(top_srcdir)/introspection/nm-settings.xml
+	$(AM_V_GEN) dbus-binding-tool --prefix=nm_settings --mode=glib-server --output=$@ $<
+
 nm-settings-bindings.h: $(top_srcdir)/introspection/nm-settings.xml
 	$(AM_V_GEN) dbus-binding-tool --prefix=nm_settings --mode=glib-client --output=$@ $<
 
-nm-settings-connection-bindings.h: $(top_srcdir)/introspection/nm-settings-connection.xml
-	$(AM_V_GEN) dbus-binding-tool --prefix=nm_settings_connection --mode=glib-client --output=$@ $<
+nm-settings-system-bindings.h: $(top_srcdir)/introspection/nm-settings-system.xml
+	$(AM_V_GEN) dbus-binding-tool --prefix=nm_settings_system --mode=glib-client --output=$@ $<
+
+nm-exported-connection-glue.h: $(top_srcdir)/introspection/nm-exported-connection.xml
+	$(AM_V_GEN) dbus-binding-tool --prefix=nm_exported_connection --mode=glib-server --output=$@ $<
+
+nm-exported-connection-bindings.h: $(top_srcdir)/introspection/nm-exported-connection.xml
+	$(AM_V_GEN) dbus-binding-tool --prefix=nm_exported_connection --mode=glib-client --output=$@ $<
 
 nm-vpn-connection-bindings.h: $(top_srcdir)/introspection/nm-vpn-connection.xml
 	$(AM_V_GEN) dbus-binding-tool --prefix=nm_vpn_connection --mode=glib-client --output=$@ $<
@@ -1738,19 +1241,6 @@ nm-ip6-config-bindings.h: $(top_srcdir)/introspection/nm-ip6-config.xml
 nm-dhcp6-config-bindings.h: $(top_srcdir)/introspection/nm-dhcp6-config.xml
 	$(AM_V_GEN) dbus-binding-tool --prefix=nm_dhcp6_config --mode=glib-client --output=$@ $<
 
-nm-secret-agent-glue.h: $(top_srcdir)/introspection/nm-secret-agent.xml
-	$(AM_V_GEN) dbus-binding-tool --prefix=nm_secret_agent --mode=glib-server --output=$@ $<
-
-nm-device-wimax-bindings.h: $(top_srcdir)/introspection/nm-device-wimax.xml
-	dbus-binding-tool --prefix=nm_device_wimax --mode=glib-client --output=$@ $<
-
-nm-device-modem-bindings.h: $(top_srcdir)/introspection/nm-device-modem.xml
-	dbus-binding-tool --prefix=nm_device_modem --mode=glib-client --output=$@ $<
-
--include $(INTROSPECTION_MAKEFILE)
-
-@HAVE_INTROSPECTION_TRUE@NMClient-1.0.gir: libnm-glib.la
-
 @WITH_TESTS_TRUE@check-local:
 @WITH_TESTS_TRUE@	$(top_srcdir)/tools/check-exports.sh $(builddir)/.libs/libnm-glib.so $(SYMBOL_VIS_FILE)
 
diff --git a/libnm-glib/libnm-glib-test.c b/libnm-glib/libnm-glib-test.c
index 16e6fad6..6284feca 100644
--- a/libnm-glib/libnm-glib-test.c
+++ b/libnm-glib/libnm-glib-test.c
@@ -80,8 +80,8 @@ ip4_address_as_string (guint32 ip)
 	if (inet_ntop (AF_INET, &tmp_addr, buf, INET_ADDRSTRLEN)) {
 		return g_strdup (buf);
 	} else {
-		g_warning ("%s: error converting IP4 address 0x%X",
-		           __func__, ntohl (tmp_addr.s_addr));
+		nm_warning ("%s: error converting IP4 address 0x%X",
+		            __func__, ntohl (tmp_addr.s_addr));
 		return NULL;
 	}
 }
diff --git a/libnm-glib/libnm-glib-vpn.pc.in b/libnm-glib/libnm-glib-vpn.pc.in
index 5f341594..73b7a9c7 100644
--- a/libnm-glib/libnm-glib-vpn.pc.in
+++ b/libnm-glib/libnm-glib-vpn.pc.in
@@ -6,7 +6,7 @@ includedir=@includedir@
 Name: libnm-glib-vpn
 Description: Convenience library for NetworkManager VPN plugins
 Version: @VERSION@
-Requires: NetworkManager >= 0.8.995 glib-2.0 dbus-glib-1
+Requires: NetworkManager >= 0.7.999 glib-2.0 dbus-glib-1
 Cflags: -I${includedir}/libnm-glib
 Libs: -L${libdir} -lnm-glib-vpn
 
diff --git a/libnm-glib/libnm-glib-vpn.ver b/libnm-glib/libnm-glib-vpn.ver
index 9d2bad5e..16643d2e 100644
--- a/libnm-glib/libnm-glib-vpn.ver
+++ b/libnm-glib/libnm-glib-vpn.ver
@@ -21,8 +21,6 @@ global:
 	nm_vpn_plugin_ui_widget_interface_get_widget;
 	nm_vpn_plugin_ui_widget_interface_save_secrets;
 	nm_vpn_plugin_ui_widget_interface_update_connection;
-	nm_vpn_plugin_utils_get_secret_flags;
-	nm_vpn_plugin_utils_read_vpn_details;
 local:
 	*;
 };
diff --git a/libnm-glib/libnm-glib.pc.in b/libnm-glib/libnm-glib.pc.in
index 2668b4e5..5c3471b1 100644
--- a/libnm-glib/libnm-glib.pc.in
+++ b/libnm-glib/libnm-glib.pc.in
@@ -6,7 +6,7 @@ includedir=@includedir@
 Name: libnm-glib
 Description: Convenience library for clients of NetworkManager
 Version: @VERSION@
-Requires: NetworkManager >= 0.8.995 gobject-2.0 dbus-glib-1
+Requires: NetworkManager >= 0.7.999 glib-2.0 dbus-glib-1
 Cflags: -I${includedir}/libnm-glib
 Libs: -L${libdir} -lnm-glib
 
diff --git a/libnm-glib/libnm-glib.ver b/libnm-glib/libnm-glib.ver
index 96e6704c..69c07a64 100644
--- a/libnm-glib/libnm-glib.ver
+++ b/libnm-glib/libnm-glib.ver
@@ -5,8 +5,6 @@ global:
 	libnm_glib_register_callback;
 	libnm_glib_shutdown;
 	libnm_glib_unregister_callback;
-	nm_access_point_filter_connections;
-	nm_access_point_get_bssid;
 	nm_access_point_get_flags;
 	nm_access_point_get_frequency;
 	nm_access_point_get_hw_address;
@@ -22,12 +20,15 @@ global:
 	nm_active_connection_get_default6;
 	nm_active_connection_get_default;
 	nm_active_connection_get_devices;
+	nm_active_connection_get_scope;
+	nm_active_connection_get_service_name;
 	nm_active_connection_get_specific_object;
 	nm_active_connection_get_state;
 	nm_active_connection_get_type;
 	nm_active_connection_new;
+	nm_cdma_device_get_type;
+	nm_cdma_device_new;
 	nm_client_activate_connection;
-	nm_client_add_and_activate_connection;
 	nm_client_deactivate_connection;
 	nm_client_get_active_connections;
 	nm_client_get_device_by_path;
@@ -36,14 +37,10 @@ global:
 	nm_client_get_permission_result;
 	nm_client_get_state;
 	nm_client_get_type;
-	nm_client_get_version;
 	nm_client_networking_get_enabled;
 	nm_client_networking_set_enabled;
 	nm_client_new;
 	nm_client_sleep;
-	nm_client_wimax_get_enabled;
-	nm_client_wimax_hardware_get_enabled;
-	nm_client_wimax_set_enabled;
 	nm_client_wireless_get_enabled;
 	nm_client_wireless_hardware_get_enabled;
 	nm_client_wireless_set_enabled;
@@ -62,9 +59,7 @@ global:
 	nm_device_ethernet_get_speed;
 	nm_device_ethernet_get_type;
 	nm_device_ethernet_new;
-	nm_device_filter_connections;
 	nm_device_get_capabilities;
-	nm_device_get_device_type;
 	nm_device_get_dhcp4_config;
 	nm_device_get_dhcp6_config;
 	nm_device_get_driver;
@@ -78,9 +73,6 @@ global:
 	nm_device_get_type;
 	nm_device_get_udi;
 	nm_device_get_vendor;
-	nm_device_modem_get_current_capabilities;
-	nm_device_modem_get_modem_capabilities;
-	nm_device_modem_get_type;
 	nm_device_new;
 	nm_device_wifi_get_access_point_by_path;
 	nm_device_wifi_get_access_points;
@@ -92,17 +84,6 @@ global:
 	nm_device_wifi_get_permanent_hw_address;
 	nm_device_wifi_get_type;
 	nm_device_wifi_new;
-	nm_device_wimax_get_active_nsp;
-	nm_device_wimax_get_bsid;
-	nm_device_wimax_get_center_frequency;
-	nm_device_wimax_get_cinr;
-	nm_device_wimax_get_hw_address;
-	nm_device_wimax_get_nsp_by_path;
-	nm_device_wimax_get_nsps;
-	nm_device_wimax_get_rssi;
-	nm_device_wimax_get_tx_power;
-	nm_device_wimax_get_type;
-	nm_device_wimax_new;
 	nm_dhcp4_config_get_one_option;
 	nm_dhcp4_config_get_options;
 	nm_dhcp4_config_get_type;
@@ -111,8 +92,13 @@ global:
 	nm_dhcp6_config_get_options;
 	nm_dhcp6_config_get_type;
 	nm_dhcp6_config_new;
+	nm_exported_connection_get_type;
+	nm_exported_connection_new;
+	nm_gsm_device_get_type;
+	nm_gsm_device_new;
 	nm_ip4_config_get_addresses;
 	nm_ip4_config_get_domains;
+	nm_ip4_config_get_hostname;
 	nm_ip4_config_get_nameservers;
 	nm_ip4_config_get_routes;
 	nm_ip4_config_get_type;
@@ -131,27 +117,33 @@ global:
 	nm_object_get_connection;
 	nm_object_get_path;
 	nm_object_get_type;
-	nm_remote_connection_commit_changes;
-	nm_remote_connection_delete;
-	nm_remote_connection_get_secrets;
 	nm_remote_connection_get_type;
 	nm_remote_connection_new;
-	nm_remote_settings_add_connection;
-	nm_remote_settings_error_get_type;
-	nm_remote_settings_error_quark;
-	nm_remote_settings_get_connection_by_path;
 	nm_remote_settings_get_type;
-	nm_remote_settings_list_connections;
 	nm_remote_settings_new;
-	nm_remote_settings_save_hostname;
-	nm_secret_agent_delete_secrets;
-	nm_secret_agent_error_get_type;
-	nm_secret_agent_error_quark;
-	nm_secret_agent_get_secrets;
-	nm_secret_agent_get_type;
-	nm_secret_agent_register;
-	nm_secret_agent_save_secrets;
-	nm_secret_agent_unregister;
+	nm_remote_settings_system_get_type;
+	nm_remote_settings_system_new;
+	nm_serial_device_get_bytes_received;
+	nm_serial_device_get_bytes_sent;
+	nm_serial_device_get_type;
+	nm_settings_connection_interface_delete;
+	nm_settings_connection_interface_emit_updated;
+	nm_settings_connection_interface_get_secrets;
+	nm_settings_connection_interface_get_type;
+	nm_settings_connection_interface_update;
+	nm_settings_interface_add_connection;
+	nm_settings_interface_error_get_type;
+	nm_settings_interface_error_quark;
+	nm_settings_interface_get_connection_by_path;
+	nm_settings_interface_get_type;
+	nm_settings_interface_list_connections;
+	nm_settings_service_export;
+	nm_settings_service_export_connection;
+	nm_settings_service_get_connection_by_path;
+	nm_settings_service_get_type;
+	nm_settings_system_interface_get_permissions;
+	nm_settings_system_interface_get_type;
+	nm_settings_system_interface_save_hostname;
 	nm_ssid_get_type;
 	nm_string_array_get_type;
 	nm_uint_array_get_type;
@@ -159,12 +151,6 @@ global:
 	nm_vpn_connection_get_type;
 	nm_vpn_connection_get_vpn_state;
 	nm_vpn_connection_new;
-	nm_wimax_nsp_filter_connections;
-	nm_wimax_nsp_get_name;
-	nm_wimax_nsp_get_network_type;
-	nm_wimax_nsp_get_signal_quality;
-	nm_wimax_nsp_get_type;
-	nm_wimax_nsp_new;
 local:
 	*;
 };
diff --git a/libnm-glib/libnm_glib.c b/libnm-glib/libnm_glib.c
index 911d0cec..5e0e5cf5 100644
--- a/libnm-glib/libnm_glib.c
+++ b/libnm-glib/libnm_glib.c
@@ -31,6 +31,7 @@
 #include "libnm_glib.h"
 
 #define	DBUS_NO_SERVICE_ERROR			"org.freedesktop.DBus.Error.ServiceDoesNotExist"
+#define NM_DBUS_SIGNAL_STATE_CHANGE	"StateChange"
 
 
 struct libnm_glib_ctx
@@ -193,18 +194,18 @@ libnm_glib_update_state (libnm_glib_ctx *ctx,
 	g_return_if_fail (ctx != NULL);
 
 	old_state = ctx->nm_state;
-	switch (state) {
-		case NM_STATE_CONNECTED_LOCAL:
-		case NM_STATE_CONNECTED_SITE:
-		case NM_STATE_CONNECTED_GLOBAL:
+	switch (state)
+	{
+		case NM_STATE_CONNECTED:
 			ctx->nm_state = LIBNM_ACTIVE_NETWORK_CONNECTION;
 			break;
+
 		case NM_STATE_ASLEEP:
 		case NM_STATE_CONNECTING:
 		case NM_STATE_DISCONNECTED:
-		case NM_STATE_DISCONNECTING:
 			ctx->nm_state = LIBNM_NO_NETWORK_CONNECTION;
 			break;
+
 		case NM_STATE_UNKNOWN:
 		default:
 			ctx->nm_state = LIBNM_NO_NETWORKMANAGER;
@@ -271,7 +272,7 @@ libnm_glib_dbus_filter (DBusConnection *connection,
 	{
 		libnm_glib_get_nm_state (ctx);
 	}
-	else if (dbus_message_is_signal (message, NM_DBUS_INTERFACE, "StateChanged"))
+	else if (dbus_message_is_signal (message, NM_DBUS_INTERFACE, NM_DBUS_SIGNAL_STATE_CHANGE))
 	{
 		NMState	state = NM_STATE_UNKNOWN;
 
diff --git a/libnm-glib/nm-access-point.c b/libnm-glib/nm-access-point.c
index 2712f36c..777e41de 100644
--- a/libnm-glib/nm-access-point.c
+++ b/libnm-glib/nm-access-point.c
@@ -18,18 +18,10 @@
  * Boston, MA 02110-1301 USA.
  *
  * Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2011 Red Hat, Inc.
+ * Copyright (C) 2007 - 2008 Red Hat, Inc.
  */
 
-#include <config.h>
 #include <string.h>
-#include <netinet/ether.h>
-
-#include <nm-connection.h>
-#include <nm-setting-connection.h>
-#include <nm-setting-wireless.h>
-#include <nm-setting-wireless-security.h>
-#include <nm-utils.h>
 
 #include "nm-access-point.h"
 #include "NetworkManager.h"
@@ -46,12 +38,12 @@ typedef struct {
 	gboolean disposed;
 	DBusGProxy *proxy;
 
-	NM80211ApFlags flags;
-	NM80211ApSecurityFlags wpa_flags;
-	NM80211ApSecurityFlags rsn_flags;
+	guint32 flags;
+	guint32 wpa_flags;
+	guint32 rsn_flags;
 	GByteArray *ssid;
 	guint32 frequency;
-	char *bssid;
+	char *hw_address;
 	NM80211Mode mode;
 	guint32 max_bitrate;
 	guint8 strength;
@@ -68,7 +60,6 @@ enum {
 	PROP_MODE,
 	PROP_MAX_BITRATE,
 	PROP_STRENGTH,
-	PROP_BSSID,
 
 	LAST_PROP
 };
@@ -90,7 +81,7 @@ enum {
  *
  * Creates a new #NMAccessPoint.
  *
- * Returns: (transfer full): a new access point
+ * Returns: a new access point
  **/
 GObject *
 nm_access_point_new (DBusGConnection *connection, const char *path)
@@ -108,11 +99,11 @@ nm_access_point_new (DBusGConnection *connection, const char *path)
  * nm_access_point_get_flags:
  * @ap: a #NMAccessPoint
  *
- * Gets the flags of the access point.
+ * Gets the flags of the access point
  *
  * Returns: the flags
  **/
-NM80211ApFlags
+guint32
 nm_access_point_get_flags (NMAccessPoint *ap)
 {
 	NMAccessPointPrivate *priv;
@@ -123,8 +114,7 @@ nm_access_point_get_flags (NMAccessPoint *ap)
 	if (!priv->flags) {
 		priv->flags = _nm_object_get_uint_property (NM_OBJECT (ap),
 		                                           NM_DBUS_INTERFACE_ACCESS_POINT,
-		                                           DBUS_PROP_FLAGS,
-		                                           NULL);
+		                                           DBUS_PROP_FLAGS);
 	}
 
 	return priv->flags;
@@ -134,11 +124,11 @@ nm_access_point_get_flags (NMAccessPoint *ap)
  * nm_access_point_get_wpa_flags:
  * @ap: a #NMAccessPoint
  *
- * Gets the WPA (version 1) flags of the access point.
+ * Gets the WPA flags of the access point.
  *
  * Returns: the WPA flags
  **/
-NM80211ApSecurityFlags
+guint32
 nm_access_point_get_wpa_flags (NMAccessPoint *ap)
 {
 	NMAccessPointPrivate *priv;
@@ -149,8 +139,7 @@ nm_access_point_get_wpa_flags (NMAccessPoint *ap)
 	if (!priv->wpa_flags) {
 		priv->wpa_flags = _nm_object_get_uint_property (NM_OBJECT (ap),
 		                                               NM_DBUS_INTERFACE_ACCESS_POINT,
-		                                               DBUS_PROP_WPA_FLAGS,
-		                                               NULL);
+		                                               DBUS_PROP_WPA_FLAGS);
 	}
 
 	return priv->wpa_flags;
@@ -160,12 +149,11 @@ nm_access_point_get_wpa_flags (NMAccessPoint *ap)
  * nm_access_point_get_rsn_flags:
  * @ap: a #NMAccessPoint
  *
- * Gets the RSN (Robust Secure Network, ie WPA version 2) flags of the access
- * point.
+ * Gets the RSN flags of the access point.
  *
  * Returns: the RSN flags
  **/
-NM80211ApSecurityFlags
+guint32
 nm_access_point_get_rsn_flags (NMAccessPoint *ap)
 {
 	NMAccessPointPrivate *priv;
@@ -176,8 +164,7 @@ nm_access_point_get_rsn_flags (NMAccessPoint *ap)
 	if (!priv->rsn_flags) {
 		priv->rsn_flags = _nm_object_get_uint_property (NM_OBJECT (ap),
 		                                               NM_DBUS_INTERFACE_ACCESS_POINT,
-		                                               DBUS_PROP_RSN_FLAGS,
-		                                               NULL);
+		                                               DBUS_PROP_RSN_FLAGS);
 	}
 
 	return priv->rsn_flags;
@@ -203,8 +190,7 @@ nm_access_point_get_ssid (NMAccessPoint *ap)
 	if (!priv->ssid) {
 		priv->ssid = _nm_object_get_byte_array_property (NM_OBJECT (ap),
 		                                                NM_DBUS_INTERFACE_ACCESS_POINT,
-		                                                DBUS_PROP_SSID,
-		                                                NULL);
+		                                                DBUS_PROP_SSID);
 	}
 
 	return priv->ssid;
@@ -229,55 +215,36 @@ nm_access_point_get_frequency (NMAccessPoint *ap)
 	if (!priv->frequency) {
 		priv->frequency = _nm_object_get_uint_property (NM_OBJECT (ap),
 		                                               NM_DBUS_INTERFACE_ACCESS_POINT,
-		                                               DBUS_PROP_FREQUENCY,
-		                                               NULL);
+		                                               DBUS_PROP_FREQUENCY);
 	}
 
 	return priv->frequency;
 }
 
 /**
- * nm_access_point_get_bssid:
+ * nm_access_point_get_hw_address:
  * @ap: a #NMAccessPoint
  *
- * Gets the Basic Service Set ID (BSSID) of the WiFi access point.
+ * Gets the hardware (MAC) address of the access point.
  *
- * Returns: the BSSID of the access point. This is an internal string and must
- * not be modified or freed.
+ * Returns: the hardware address of the access point. This is the internal string used by the
+ * access point and must not be modified.
  **/
 const char *
-nm_access_point_get_bssid (NMAccessPoint *ap)
+nm_access_point_get_hw_address (NMAccessPoint *ap)
 {
 	NMAccessPointPrivate *priv;
 
 	g_return_val_if_fail (NM_IS_ACCESS_POINT (ap), NULL);
 
 	priv = NM_ACCESS_POINT_GET_PRIVATE (ap);
-	if (!priv->bssid) {
-		priv->bssid = _nm_object_get_string_property (NM_OBJECT (ap),
-		                                              NM_DBUS_INTERFACE_ACCESS_POINT,
-		                                              DBUS_PROP_HW_ADDRESS,
-		                                              NULL);
+	if (!priv->hw_address) {
+		priv->hw_address = _nm_object_get_string_property (NM_OBJECT (ap),
+		                                                  NM_DBUS_INTERFACE_ACCESS_POINT,
+		                                                  DBUS_PROP_HW_ADDRESS);
 	}
 
-	return priv->bssid;
-}
-
-/**
- * nm_access_point_get_hw_address:
- * @ap: a #NMAccessPoint
- *
- * Gets the hardware (MAC) address of the access point.
- *
- * Returns: the hardware address of the access point. This is the internal string used by the
- * access point and must not be modified.
- *
- * Deprecated: 0.9: Use nm_access_point_get_bssid() instead.
- **/
-const char *
-nm_access_point_get_hw_address (NMAccessPoint *ap)
-{
-	return nm_access_point_get_bssid (ap);
+	return priv->hw_address;
 }
 
 /**
@@ -299,8 +266,7 @@ nm_access_point_get_mode (NMAccessPoint *ap)
 	if (!priv->mode) {
 		priv->mode = _nm_object_get_uint_property (NM_OBJECT (ap),
 		                                          NM_DBUS_INTERFACE_ACCESS_POINT,
-		                                          DBUS_PROP_MODE,
-		                                          NULL);
+		                                          DBUS_PROP_MODE);
 	}
 
 	return priv->mode;
@@ -325,8 +291,7 @@ nm_access_point_get_max_bitrate (NMAccessPoint *ap)
 	if (!priv->max_bitrate) {
 		priv->max_bitrate = _nm_object_get_uint_property (NM_OBJECT (ap),
 		                                              NM_DBUS_INTERFACE_ACCESS_POINT,
-		                                              DBUS_PROP_MAX_BITRATE,
-		                                              NULL);
+		                                              DBUS_PROP_MAX_BITRATE);
 	}
 
 	return priv->max_bitrate;
@@ -351,131 +316,12 @@ nm_access_point_get_strength (NMAccessPoint *ap)
 	if (!priv->strength) {
 		priv->strength = _nm_object_get_byte_property (NM_OBJECT (ap),
 		                                              NM_DBUS_INTERFACE_ACCESS_POINT,
-		                                              DBUS_PROP_STRENGTH,
-		                                              NULL);
+		                                              DBUS_PROP_STRENGTH);
 	}
 
 	return priv->strength;
 }
 
-/**
- * nm_access_point_filter_connections:
- * @ap: an #NMAccessPoint to filter connections for
- * @connections: a list of #NMConnection objects to filter
- *
- * Filters a given list of connections for a given #NMAccessPoint object and
- * return connections which may be activated with the access point.  Any
- * returned connections will match the @ap's SSID and (if given) BSSID and
- * other attributes like security settings, channel, etc.
- *
- * Returns: (transfer container) (element-type NetworkManager.Connection): a
- * list of #NMConnection objects that could be activated with the given @ap.
- * The elements of the list are owned by their creator and should not be freed
- * by the caller, but the returned list itself is owned by the caller and should
- * be freed with g_slist_free() when it is no longer required.
- **/
-GSList *
-nm_access_point_filter_connections (NMAccessPoint *ap, const GSList *connections)
-{
-	GSList *filtered = NULL;
-	const GSList *iter;
-
-	for (iter = connections; iter; iter = g_slist_next (iter)) {
-		NMConnection *candidate = NM_CONNECTION (iter->data);
-		NMSettingConnection *s_con;
-		NMSettingWireless *s_wifi;
-		NMSettingWirelessSecurity *s_wsec;
-		const char *ctype, *ap_bssid_str;
-		const GByteArray *setting_ssid;
-		const GByteArray *ap_ssid;
-		const GByteArray *setting_bssid;
-		struct ether_addr *ap_bssid;
-		const char *setting_mode;
-		NM80211Mode ap_mode;
-		const char *setting_band;
-		guint32 ap_freq, setting_chan, ap_chan;
-
-		s_con = (NMSettingConnection *) nm_connection_get_setting (candidate, NM_TYPE_SETTING_CONNECTION);
-		g_assert (s_con);
-		ctype = nm_setting_connection_get_connection_type (s_con);
-		if (strcmp (ctype, NM_SETTING_WIRELESS_SETTING_NAME) != 0)
-			continue;
-
-		s_wifi = (NMSettingWireless *) nm_connection_get_setting (candidate, NM_TYPE_SETTING_WIRELESS);
-		if (!s_wifi)
-			continue;
-
-		/* SSID checks */
-		ap_ssid = nm_access_point_get_ssid (ap);
-		g_warn_if_fail (ap_ssid != NULL);
-		setting_ssid = nm_setting_wireless_get_ssid (s_wifi);
-		if (!setting_ssid || !ap_ssid || (setting_ssid->len != ap_ssid->len))
-			continue;
-		if (memcmp (setting_ssid->data, ap_ssid->data, ap_ssid->len) != 0)
-			continue;
-
-		/* BSSID checks */
-		ap_bssid_str = nm_access_point_get_bssid (ap);
-		g_warn_if_fail (ap_bssid_str);
-		setting_bssid = nm_setting_wireless_get_bssid (s_wifi);
-		if (setting_bssid && ap_bssid_str) {
-			g_assert (setting_bssid->len == ETH_ALEN);
-			ap_bssid = ether_aton (ap_bssid_str);
-			g_warn_if_fail (ap_bssid);
-			if (ap_bssid) {
-				if (memcmp (ap_bssid->ether_addr_octet, setting_bssid->data, ETH_ALEN) != 0)
-					continue;
-			}
-		}
-
-		/* Mode */
-		ap_mode = nm_access_point_get_mode (ap);
-		g_warn_if_fail (ap_mode != NM_802_11_MODE_UNKNOWN);
-		setting_mode = nm_setting_wireless_get_mode (s_wifi);
-		if (setting_mode && ap_mode) {
-			if (!strcmp (setting_mode, "infrastructure") && (ap_mode != NM_802_11_MODE_INFRA))
-				return NULL;
-			if (!strcmp (setting_mode, "adhoc") && (ap_mode != NM_802_11_MODE_ADHOC))
-				return NULL;
-		}
-
-		/* Band and Channel/Frequency */
-		ap_freq = nm_access_point_get_frequency (ap);
-		g_warn_if_fail (ap_freq > 0);
-		if (ap_freq) {
-			setting_band = nm_setting_wireless_get_band (s_wifi);
-			if (g_strcmp0 (setting_band, "a") == 0) {
-				if (ap_freq < 4915 || ap_freq > 5825)
-					continue;
-			} else if (g_strcmp0 (setting_band, "bg") == 0) {
-				if (ap_freq < 2412 || ap_freq > 2484)
-					continue;
-			}
-
-			setting_chan = nm_setting_wireless_get_channel (s_wifi);
-			if (setting_chan) {
-				ap_chan = nm_utils_wifi_freq_to_channel (ap_freq);
-				if (setting_chan != ap_chan)
-					continue;
-			}
-		}
-
-		s_wsec = (NMSettingWirelessSecurity *) nm_connection_get_setting (candidate, NM_TYPE_SETTING_WIRELESS_SECURITY);
-		if (!nm_setting_wireless_ap_security_compatible (s_wifi,
-		                                                 s_wsec,
-		                                                 nm_access_point_get_flags (ap),
-		                                                 nm_access_point_get_wpa_flags (ap),
-		                                                 nm_access_point_get_rsn_flags (ap),
-		                                                 ap_mode))
-			continue;
-
-		/* Connection applies to this device */
-		filtered = g_slist_prepend (filtered, candidate);
-	}
-
-	return g_slist_reverse (filtered);
-}
-
 /************************************************************/
 
 static void
@@ -508,7 +354,8 @@ finalize (GObject *object)
 	if (priv->ssid)
 		g_byte_array_free (priv->ssid, TRUE);
 
-	g_free (priv->bssid);
+	if (priv->hw_address)
+		g_free (priv->hw_address);
 
 	G_OBJECT_CLASS (nm_access_point_parent_class)->finalize (object);
 }
@@ -538,10 +385,7 @@ get_property (GObject *object,
 		g_value_set_uint (value, nm_access_point_get_frequency (ap));
 		break;
 	case PROP_HW_ADDRESS:
-		g_value_set_string (value, nm_access_point_get_bssid (ap));
-		break;
-	case PROP_BSSID:
-		g_value_set_string (value, nm_access_point_get_bssid (ap));
+		g_value_set_string (value, nm_access_point_get_hw_address (ap));
 		break;
 	case PROP_MODE:
 		g_value_set_uint (value, nm_access_point_get_mode (ap));
@@ -576,9 +420,9 @@ register_for_property_changed (NMAccessPoint *ap)
 		{ NM_ACCESS_POINT_FLAGS,       _nm_object_demarshal_generic, &priv->flags },
 		{ NM_ACCESS_POINT_WPA_FLAGS,   _nm_object_demarshal_generic, &priv->wpa_flags },
 		{ NM_ACCESS_POINT_RSN_FLAGS,   _nm_object_demarshal_generic, &priv->rsn_flags },
-		{ NM_ACCESS_POINT_SSID,        demarshal_ssid,               &priv->ssid },
+		{ NM_ACCESS_POINT_SSID,        demarshal_ssid,              &priv->ssid },
 		{ NM_ACCESS_POINT_FREQUENCY,   _nm_object_demarshal_generic, &priv->frequency },
-		{ NM_ACCESS_POINT_HW_ADDRESS,  _nm_object_demarshal_generic, &priv->bssid },
+		{ NM_ACCESS_POINT_HW_ADDRESS,  _nm_object_demarshal_generic, &priv->hw_address },
 		{ NM_ACCESS_POINT_MODE,        _nm_object_demarshal_generic, &priv->mode },
 		{ NM_ACCESS_POINT_MAX_BITRATE, _nm_object_demarshal_generic, &priv->max_bitrate },
 		{ NM_ACCESS_POINT_STRENGTH,    _nm_object_demarshal_generic, &priv->strength },
@@ -700,19 +544,6 @@ nm_access_point_class_init (NMAccessPointClass *ap_class)
 						G_PARAM_READABLE));
 
 	/**
-	 * NMAccessPoint:bssid:
-	 *
-	 * The BSSID of the access point.
-	 **/
-	g_object_class_install_property
-		(object_class, PROP_BSSID,
-		 g_param_spec_string (NM_ACCESS_POINT_BSSID,
-						  "BSSID",
-						  "BSSID",
-						  NULL,
-						  G_PARAM_READABLE));
-
-	/**
 	 * NMAccessPoint:hw-address:
 	 *
 	 * The hardware address of the access point.
diff --git a/libnm-glib/nm-access-point.h b/libnm-glib/nm-access-point.h
index 24b69d5e..77024815 100644
--- a/libnm-glib/nm-access-point.h
+++ b/libnm-glib/nm-access-point.h
@@ -18,7 +18,7 @@
  * Boston, MA 02110-1301 USA.
  *
  * Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2011 Red Hat, Inc.
+ * Copyright (C) 2007 - 2008 Red Hat, Inc.
  */
 
 #ifndef NM_ACCESS_POINT_H
@@ -42,16 +42,12 @@ G_BEGIN_DECLS
 #define NM_ACCESS_POINT_WPA_FLAGS   "wpa-flags"
 #define NM_ACCESS_POINT_RSN_FLAGS   "rsn-flags"
 #define NM_ACCESS_POINT_SSID        "ssid"
-#define NM_ACCESS_POINT_BSSID       "bssid"
 #define NM_ACCESS_POINT_FREQUENCY   "frequency"
+#define NM_ACCESS_POINT_HW_ADDRESS  "hw-address"
 #define NM_ACCESS_POINT_MODE        "mode"
 #define NM_ACCESS_POINT_MAX_BITRATE "max-bitrate"
 #define NM_ACCESS_POINT_STRENGTH    "strength"
 
-/* DEPRECATED */
-#define NM_ACCESS_POINT_HW_ADDRESS  "hw-address"
-
-
 typedef struct {
 	NMObject parent;
 } NMAccessPoint;
@@ -72,21 +68,15 @@ GType nm_access_point_get_type (void);
 
 GObject *nm_access_point_new (DBusGConnection *connection, const char *path);
 
-NM80211ApFlags         nm_access_point_get_flags        (NMAccessPoint *ap);
-NM80211ApSecurityFlags nm_access_point_get_wpa_flags    (NMAccessPoint *ap);
-NM80211ApSecurityFlags nm_access_point_get_rsn_flags    (NMAccessPoint *ap);
-const GByteArray *     nm_access_point_get_ssid         (NMAccessPoint *ap);
-const char *           nm_access_point_get_bssid        (NMAccessPoint *ap);
-guint32                nm_access_point_get_frequency    (NMAccessPoint *ap);
-NM80211Mode            nm_access_point_get_mode         (NMAccessPoint *ap);
-guint32                nm_access_point_get_max_bitrate  (NMAccessPoint *ap);
-guint8                 nm_access_point_get_strength     (NMAccessPoint *ap);
-
-GSList *               nm_access_point_filter_connections (NMAccessPoint *ap,
-                                                           const GSList *connections);
-
-/* DEPRECATED */
-const char *           nm_access_point_get_hw_address   (NMAccessPoint *ap);
+guint32      nm_access_point_get_flags        (NMAccessPoint *ap);
+guint32      nm_access_point_get_wpa_flags    (NMAccessPoint *ap);
+guint32      nm_access_point_get_rsn_flags    (NMAccessPoint *ap);
+const GByteArray * nm_access_point_get_ssid   (NMAccessPoint *ap);
+guint32      nm_access_point_get_frequency    (NMAccessPoint *ap);
+const char * nm_access_point_get_hw_address   (NMAccessPoint *ap);
+NM80211Mode  nm_access_point_get_mode         (NMAccessPoint *ap);
+guint32      nm_access_point_get_max_bitrate  (NMAccessPoint *ap);
+guint8       nm_access_point_get_strength     (NMAccessPoint *ap);
 
 G_END_DECLS
 
diff --git a/libnm-glib/nm-active-connection.c b/libnm-glib/nm-active-connection.c
index 64d265ae..2468da09 100644
--- a/libnm-glib/nm-active-connection.c
+++ b/libnm-glib/nm-active-connection.c
@@ -17,7 +17,7 @@
  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
  * Boston, MA 02110-1301 USA.
  *
- * Copyright (C) 2007 - 2011 Red Hat, Inc.
+ * Copyright (C) 2007 - 2010 Red Hat, Inc.
  * Copyright (C) 2008 Novell, Inc.
  */
 
@@ -43,6 +43,8 @@ typedef struct {
 	gboolean disposed;
 	DBusGProxy *proxy;
 
+	char *service_name;
+	NMConnectionScope scope;
 	char *connection;
 	char *specific_object;
 	GPtrArray *devices;
@@ -53,6 +55,7 @@ typedef struct {
 
 enum {
 	PROP_0,
+	PROP_SERVICE_NAME,
 	PROP_CONNECTION,
 	PROP_SPECIFIC_OBJECT,
 	PROP_DEVICES,
@@ -63,6 +66,7 @@ enum {
 	LAST_PROP
 };
 
+#define DBUS_PROP_SERVICE_NAME "ServiceName"
 #define DBUS_PROP_CONNECTION "Connection"
 #define DBUS_PROP_SPECIFIC_OBJECT "SpecificObject"
 #define DBUS_PROP_DEVICES "Devices"
@@ -77,7 +81,7 @@ enum {
  *
  * Creates a new #NMActiveConnection.
  *
- * Returns: (transfer full): a new active connection
+ * Returns: a new active connection
  **/
 GObject *
 nm_active_connection_new (DBusGConnection *connection, const char *path)
@@ -91,6 +95,62 @@ nm_active_connection_new (DBusGConnection *connection, const char *path)
 						 NULL);
 }
 
+static NMConnectionScope
+get_scope_for_service_name (const char *service_name)
+{
+	if (service_name && !strcmp (service_name, NM_DBUS_SERVICE_USER_SETTINGS))
+		return NM_CONNECTION_SCOPE_USER;
+	else if (service_name && !strcmp (service_name, NM_DBUS_SERVICE_SYSTEM_SETTINGS))
+		return NM_CONNECTION_SCOPE_SYSTEM;
+
+	return NM_CONNECTION_SCOPE_UNKNOWN;
+}
+
+/**
+ * nm_active_connection_get_service_name:
+ * @connection: a #NMActiveConnection
+ *
+ * Gets the service name of the active connection.
+ *
+ * Returns: the service name. This is the internal string used by the
+ * connection, and must not be modified.
+ **/
+const char *
+nm_active_connection_get_service_name (NMActiveConnection *connection)
+{
+	NMActiveConnectionPrivate *priv;
+
+	g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), NULL);
+
+	priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (connection);
+	if (!priv->service_name) {
+		priv->service_name = _nm_object_get_string_property (NM_OBJECT (connection),
+		                                                    NM_DBUS_INTERFACE_ACTIVE_CONNECTION,
+		                                                    DBUS_PROP_SERVICE_NAME);
+		priv->scope = get_scope_for_service_name (priv->service_name);
+	}
+
+	return priv->service_name;
+}
+
+/**
+ * nm_active_connection_get_scope:
+ * @connection: a #NMActiveConnection
+ *
+ * Gets the scope of the active connection.
+ *
+ * Returns: the connection's scope
+ **/
+NMConnectionScope
+nm_active_connection_get_scope (NMActiveConnection *connection)
+{
+	g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), NM_CONNECTION_SCOPE_UNKNOWN);
+
+	/* Make sure service_name and scope are up-to-date */
+	nm_active_connection_get_service_name (connection);
+	return NM_ACTIVE_CONNECTION_GET_PRIVATE (connection)->scope;
+}
+
 /**
  * nm_active_connection_get_connection:
  * @connection: a #NMActiveConnection
@@ -111,8 +171,7 @@ nm_active_connection_get_connection (NMActiveConnection *connection)
 	if (!priv->connection) {
 		priv->connection = _nm_object_get_string_property (NM_OBJECT (connection),
 		                                                  NM_DBUS_INTERFACE_ACTIVE_CONNECTION,
-		                                                  DBUS_PROP_CONNECTION,
-		                                                  NULL);
+		                                                  DBUS_PROP_CONNECTION);
 	}
 
 	return priv->connection;
@@ -138,8 +197,7 @@ nm_active_connection_get_specific_object (NMActiveConnection *connection)
 	if (!priv->specific_object) {
 		priv->specific_object = _nm_object_get_string_property (NM_OBJECT (connection),
 		                                                       NM_DBUS_INTERFACE_ACTIVE_CONNECTION,
-		                                                       DBUS_PROP_SPECIFIC_OBJECT,
-		                                                       NULL);
+		                                                       DBUS_PROP_SPECIFIC_OBJECT);
 	}
 
 	return priv->specific_object;
@@ -151,7 +209,7 @@ nm_active_connection_get_specific_object (NMActiveConnection *connection)
  *
  * Gets the #NMDevice<!-- -->s used for the active connections.
  *
- * Returns: (element-type NMClient.Device): the #GPtrArray containing #NMDevice<!-- -->s.
+ * Returns: the #GPtrArray containing #NMDevice<!-- -->s.
  * This is the internal copy used by the connection, and must not be modified.
  **/
 const GPtrArray *
@@ -169,8 +227,7 @@ nm_active_connection_get_devices (NMActiveConnection *connection)
 	if (!_nm_object_get_property (NM_OBJECT (connection),
 	                             NM_DBUS_INTERFACE_ACTIVE_CONNECTION,
 	                             DBUS_PROP_DEVICES,
-	                             &value,
-	                             NULL)) {
+	                             &value)) {
 		return NULL;
 	}
 
@@ -199,8 +256,7 @@ nm_active_connection_get_state (NMActiveConnection *connection)
 	if (!priv->state) {
 		priv->state = _nm_object_get_uint_property (NM_OBJECT (connection),
 		                                           NM_DBUS_INTERFACE_ACTIVE_CONNECTION,
-		                                           DBUS_PROP_STATE,
-		                                           NULL);
+		                                           DBUS_PROP_STATE);
 	}
 
 	return priv->state;
@@ -226,8 +282,7 @@ nm_active_connection_get_default (NMActiveConnection *connection)
 	if (!priv->is_default) {
 		priv->is_default = _nm_object_get_boolean_property (NM_OBJECT (connection),
 		                                                    NM_DBUS_INTERFACE_ACTIVE_CONNECTION,
-		                                                    DBUS_PROP_DEFAULT,
-		                                                    NULL);
+		                                                    DBUS_PROP_DEFAULT);
 	}
 
 	return priv->is_default;
@@ -253,8 +308,7 @@ nm_active_connection_get_default6 (NMActiveConnection *connection)
 	if (!priv->is_default6) {
 		priv->is_default6 = _nm_object_get_boolean_property (NM_OBJECT (connection),
 		                                                     NM_DBUS_INTERFACE_ACTIVE_CONNECTION,
-		                                                     DBUS_PROP_DEFAULT6,
-		                                                     NULL);
+		                                                     DBUS_PROP_DEFAULT6);
 	}
 
 	return priv->is_default6;
@@ -291,6 +345,7 @@ finalize (GObject *object)
 {
 	NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (object);
 
+	g_free (priv->service_name);
 	g_free (priv->connection);
 	g_free (priv->specific_object);
 
@@ -306,8 +361,11 @@ get_property (GObject *object,
 	NMActiveConnection *self = NM_ACTIVE_CONNECTION (object);
 
 	switch (prop_id) {
+	case PROP_SERVICE_NAME:
+		g_value_set_string (value, nm_active_connection_get_service_name (self));
+		break;
 	case PROP_CONNECTION:
-		g_value_set_string (value, nm_active_connection_get_connection (self));
+		g_value_set_boxed (value, nm_active_connection_get_connection (self));
 		break;
 	case PROP_SPECIFIC_OBJECT:
 		g_value_set_boxed (value, nm_active_connection_get_specific_object (self));
@@ -343,11 +401,24 @@ demarshal_devices (NMObject *object, GParamSpec *pspec, GValue *value, gpointer
 	return TRUE;
 }
 
+static gboolean
+demarshal_service (NMObject *object, GParamSpec *pspec, GValue *value, gpointer field)
+{
+	NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (object);
+
+	if (_nm_object_demarshal_generic (object, pspec, value, field)) {
+		priv->scope = get_scope_for_service_name (priv->service_name);
+		return TRUE;
+	}
+	return FALSE;
+}
+
 static void
 register_for_property_changed (NMActiveConnection *connection)
 {
 	NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (connection);
 	const NMPropertiesChangedInfo property_changed_info[] = {
+		{ NM_ACTIVE_CONNECTION_SERVICE_NAME,        demarshal_service,           &priv->service_name },
 		{ NM_ACTIVE_CONNECTION_CONNECTION,          _nm_object_demarshal_generic, &priv->connection },
 		{ NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT,     _nm_object_demarshal_generic, &priv->specific_object },
 		{ NM_ACTIVE_CONNECTION_DEVICES,             demarshal_devices,           &priv->devices },
@@ -405,6 +476,19 @@ nm_active_connection_class_init (NMActiveConnectionClass *ap_class)
 	/* properties */
 
 	/**
+	 * NMActiveConnection:service-name:
+	 *
+	 * The service name of the active connection.
+	 **/
+	g_object_class_install_property
+		(object_class, PROP_SERVICE_NAME,
+		 g_param_spec_string (NM_ACTIVE_CONNECTION_SERVICE_NAME,
+						  "Service Name",
+						  "Service Name",
+						  NULL,
+						  G_PARAM_READABLE));
+
+	/**
 	 * NMActiveConnection:connection:
 	 *
 	 * The connection's path of the active connection.
@@ -454,7 +538,7 @@ nm_active_connection_class_init (NMActiveConnectionClass *ap_class)
 							  "State",
 							  "State",
 							  NM_ACTIVE_CONNECTION_STATE_UNKNOWN,
-							  NM_ACTIVE_CONNECTION_STATE_DEACTIVATING,
+							  NM_ACTIVE_CONNECTION_STATE_ACTIVATED,
 							  NM_ACTIVE_CONNECTION_STATE_UNKNOWN,
 							  G_PARAM_READABLE));
 
diff --git a/libnm-glib/nm-active-connection.h b/libnm-glib/nm-active-connection.h
index a641e7c1..30edf047 100644
--- a/libnm-glib/nm-active-connection.h
+++ b/libnm-glib/nm-active-connection.h
@@ -39,6 +39,7 @@ G_BEGIN_DECLS
 #define NM_IS_ACTIVE_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NM_TYPE_ACTIVE_CONNECTION))
 #define NM_ACTIVE_CONNECTION_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_ACTIVE_CONNECTION, NMActiveConnectionClass))
 
+#define NM_ACTIVE_CONNECTION_SERVICE_NAME        "service-name"
 #define NM_ACTIVE_CONNECTION_CONNECTION          "connection"
 #define NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT     "specific-object"
 #define NM_ACTIVE_CONNECTION_DEVICES             "devices"
@@ -66,6 +67,8 @@ GType nm_active_connection_get_type (void);
 
 GObject *nm_active_connection_new (DBusGConnection *connection, const char *path);
 
+const char * nm_active_connection_get_service_name        (NMActiveConnection *connection);
+NMConnectionScope nm_active_connection_get_scope          (NMActiveConnection *connection);
 const char * nm_active_connection_get_connection          (NMActiveConnection *connection);
 const char * nm_active_connection_get_specific_object     (NMActiveConnection *connection);
 const GPtrArray *nm_active_connection_get_devices         (NMActiveConnection *connection);
diff --git a/libnm-glib/nm-cdma-device.c b/libnm-glib/nm-cdma-device.c
new file mode 100644
index 00000000..31b2e99c
--- /dev/null
+++ b/libnm-glib/nm-cdma-device.c
@@ -0,0 +1,130 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * libnm_glib -- Access network status & information from glib applications
+ *
+ * This library 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 of the License, or (at your option) any later version.
+ *
+ * This library 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 this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2008 Red Hat, Inc.
+ * Copyright (C) 2008 Novell, Inc.
+ */
+
+#include "nm-cdma-device.h"
+#include "nm-device-private.h"
+#include "nm-object-private.h"
+
+G_DEFINE_TYPE (NMCdmaDevice, nm_cdma_device, NM_TYPE_SERIAL_DEVICE)
+
+#define NM_CDMA_DEVICE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_CDMA_DEVICE, NMCdmaDevicePrivate))
+
+typedef struct {
+	DBusGProxy *proxy;
+
+	gboolean disposed;
+} NMCdmaDevicePrivate;
+
+static void
+nm_cdma_device_init (NMCdmaDevice *device)
+{
+}
+
+static void
+register_for_property_changed (NMCdmaDevice *device)
+{
+	NMCdmaDevicePrivate *priv = NM_CDMA_DEVICE_GET_PRIVATE (device);
+	const NMPropertiesChangedInfo property_changed_info[] = {
+		{ NULL },
+	};
+
+	_nm_object_handle_properties_changed (NM_OBJECT (device),
+	                                     priv->proxy,
+	                                     property_changed_info);
+}
+
+static GObject*
+constructor (GType type,
+             guint n_construct_params,
+             GObjectConstructParam *construct_params)
+{
+	GObject *object;
+	NMCdmaDevicePrivate *priv;
+
+	object = G_OBJECT_CLASS (nm_cdma_device_parent_class)->constructor (type,
+														  n_construct_params,
+														  construct_params);
+	if (!object)
+		return NULL;
+
+	priv = NM_CDMA_DEVICE_GET_PRIVATE (object);
+
+	priv->proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (NM_OBJECT (object)),
+	                                         NM_DBUS_SERVICE,
+	                                         nm_object_get_path (NM_OBJECT (object)),
+	                                         NM_DBUS_INTERFACE_CDMA_DEVICE);
+
+	register_for_property_changed (NM_CDMA_DEVICE (object));
+
+	return object;
+}
+
+static void
+dispose (GObject *object)
+{
+	NMCdmaDevicePrivate *priv = NM_CDMA_DEVICE_GET_PRIVATE (object);
+
+	if (priv->disposed) {
+		G_OBJECT_CLASS (nm_cdma_device_parent_class)->dispose (object);
+		return;
+	}
+
+	priv->disposed = TRUE;
+
+	g_object_unref (priv->proxy);
+
+	G_OBJECT_CLASS (nm_cdma_device_parent_class)->dispose (object);
+}
+
+static void
+nm_cdma_device_class_init (NMCdmaDeviceClass *device_class)
+{
+	GObjectClass *object_class = G_OBJECT_CLASS (device_class);
+
+	g_type_class_add_private (device_class, sizeof (NMCdmaDevicePrivate));
+
+	/* virtual methods */
+	object_class->constructor = constructor;
+	object_class->dispose = dispose;
+}
+
+/**
+ * nm_cdma_device_new:
+ * @connection: the #DBusGConnection
+ * @path: the DBus object path of the device
+ *
+ * Creates a new #NMCdmaDevice.
+ *
+ * Returns: a new device
+ **/
+GObject *
+nm_cdma_device_new (DBusGConnection *connection, const char *path)
+{
+	g_return_val_if_fail (connection != NULL, NULL);
+	g_return_val_if_fail (path != NULL, NULL);
+
+	return g_object_new (NM_TYPE_CDMA_DEVICE,
+	                     NM_OBJECT_DBUS_CONNECTION, connection,
+	                     NM_OBJECT_DBUS_PATH, path,
+	                     NULL);
+}
diff --git a/libnm-glib/nm-cdma-device.h b/libnm-glib/nm-cdma-device.h
new file mode 100644
index 00000000..f40124ac
--- /dev/null
+++ b/libnm-glib/nm-cdma-device.h
@@ -0,0 +1,60 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * libnm_glib -- Access network status & information from glib applications
+ *
+ * This library 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 of the License, or (at your option) any later version.
+ *
+ * This library 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 this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2008 Red Hat, Inc.
+ * Copyright (C) 2008 Novell, Inc.
+ */
+
+#ifndef NM_CDMA_DEVICE_H
+#define NM_CDMA_DEVICE_H
+
+#include "nm-serial-device.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_CDMA_DEVICE            (nm_cdma_device_get_type ())
+#define NM_CDMA_DEVICE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_CDMA_DEVICE, NMCdmaDevice))
+#define NM_CDMA_DEVICE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_CDMA_DEVICE, NMCdmaDeviceClass))
+#define NM_IS_CDMA_DEVICE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_CDMA_DEVICE))
+#define NM_IS_CDMA_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NM_TYPE_CDMA_DEVICE))
+#define NM_CDMA_DEVICE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_CDMA_DEVICE, NMCdmaDeviceClass))
+
+typedef struct {
+	NMSerialDevice parent;
+} NMCdmaDevice;
+
+typedef struct {
+	NMSerialDeviceClass parent;
+
+	/* Padding for future expansion */
+	void (*_reserved1) (void);
+	void (*_reserved2) (void);
+	void (*_reserved3) (void);
+	void (*_reserved4) (void);
+	void (*_reserved5) (void);
+	void (*_reserved6) (void);
+} NMCdmaDeviceClass;
+
+GType        nm_cdma_device_get_type (void);
+
+GObject *nm_cdma_device_new (DBusGConnection *connection, const char *path);
+
+G_END_DECLS
+
+#endif /* NM_CDMA_DEVICE_H */
diff --git a/libnm-glib/nm-client.c b/libnm-glib/nm-client.c
index fa60f21e..1de7b863 100644
--- a/libnm-glib/nm-client.c
+++ b/libnm-glib/nm-client.c
@@ -28,6 +28,8 @@
 #include "nm-client.h"
 #include "nm-device-ethernet.h"
 #include "nm-device-wifi.h"
+#include "nm-gsm-device.h"
+#include "nm-cdma-device.h"
 #include "nm-device-private.h"
 #include "nm-marshal.h"
 #include "nm-types-private.h"
@@ -41,6 +43,7 @@
 
 void _nm_device_wifi_set_wireless_enabled (NMDeviceWifi *device, gboolean enabled);
 
+
 G_DEFINE_TYPE (NMClient, nm_client, NM_TYPE_OBJECT)
 
 #define NM_CLIENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_CLIENT, NMClientPrivate))
@@ -51,7 +54,6 @@ typedef struct {
 	DBusGProxy *client_proxy;
 	DBusGProxy *bus_proxy;
 	gboolean manager_running;
-	char *version;
 	NMState state;
 	GPtrArray *devices;
 	GPtrArray *active_connections;
@@ -59,11 +61,6 @@ typedef struct {
 	DBusGProxyCall *perm_call;
 	GHashTable *permissions;
 
-	/* Activations waiting for their NMActiveConnection
-	 * to appear and then their callback to be called.
-	 */
-	GSList *pending_activations;
-
 	gboolean have_networking_enabled;
 	gboolean networking_enabled;
 	gboolean wireless_enabled;
@@ -71,14 +68,10 @@ typedef struct {
 
 	gboolean wwan_enabled;
 	gboolean wwan_hw_enabled;
-
-	gboolean wimax_enabled;
-	gboolean wimax_hw_enabled;
 } NMClientPrivate;
 
 enum {
 	PROP_0,
-	PROP_VERSION,
 	PROP_STATE,
 	PROP_MANAGER_RUNNING,
 	PROP_NETWORKING_ENABLED,
@@ -86,8 +79,6 @@ enum {
 	PROP_WIRELESS_HARDWARE_ENABLED,
 	PROP_WWAN_ENABLED,
 	PROP_WWAN_HARDWARE_ENABLED,
-	PROP_WIMAX_ENABLED,
-	PROP_WIMAX_HARDWARE_ENABLED,
 	PROP_ACTIVE_CONNECTIONS,
 
 	LAST_PROP
@@ -161,9 +152,8 @@ update_wireless_status (NMClient *client, gboolean notify)
 	gboolean poke = FALSE;
 
 	val = _nm_object_get_boolean_property (NM_OBJECT (client),
-	                                       NM_DBUS_INTERFACE,
-	                                       "WirelessHardwareEnabled",
-	                                       NULL);
+										  NM_DBUS_INTERFACE,
+										  "WirelessHardwareEnabled");
 	if (val != priv->wireless_hw_enabled) {
 		priv->wireless_hw_enabled = val;
 		poke = TRUE;
@@ -175,9 +165,8 @@ update_wireless_status (NMClient *client, gboolean notify)
 		val = FALSE;
 	else
 		val = _nm_object_get_boolean_property (NM_OBJECT (client),
-		                                       NM_DBUS_INTERFACE,
-		                                       "WirelessEnabled",
-		                                       NULL);
+				                              NM_DBUS_INTERFACE,
+				                              "WirelessEnabled");
 	if (val != priv->wireless_enabled) {
 		priv->wireless_enabled = val;
 		poke = TRUE;
@@ -203,8 +192,7 @@ update_wwan_status (NMClient *client, gboolean notify)
 
 	val = _nm_object_get_boolean_property (NM_OBJECT (client),
 	                                       NM_DBUS_INTERFACE,
-	                                       "WwanHardwareEnabled",
-	                                       NULL);
+	                                       "WwanHardwareEnabled");
 	if (val != priv->wwan_hw_enabled) {
 		priv->wwan_hw_enabled = val;
 		if (notify)
@@ -216,8 +204,7 @@ update_wwan_status (NMClient *client, gboolean notify)
 	else {
 		val = _nm_object_get_boolean_property (NM_OBJECT (client),
 		                                       NM_DBUS_INTERFACE,
-		                                       "WwanEnabled",
-		                                       NULL);
+		                                       "WwanEnabled");
 	}
 
 	if (val != priv->wwan_enabled) {
@@ -227,40 +214,6 @@ update_wwan_status (NMClient *client, gboolean notify)
 	}
 }
 
-#if WITH_WIMAX
-static void
-update_wimax_status (NMClient *client, gboolean notify)
-{
-	NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (client);
-	gboolean val;
-
-	val = _nm_object_get_boolean_property (NM_OBJECT (client),
-	                                       NM_DBUS_INTERFACE,
-	                                       "WimaxHardwareEnabled",
-	                                       NULL);
-	if (val != priv->wimax_hw_enabled) {
-		priv->wimax_hw_enabled = val;
-		if (notify)
-			_nm_object_queue_notify (NM_OBJECT (client), NM_CLIENT_WIMAX_HARDWARE_ENABLED);
-	}
-
-	if (priv->wimax_hw_enabled == FALSE)
-		val = FALSE;
-	else {
-		val = _nm_object_get_boolean_property (NM_OBJECT (client),
-		                                       NM_DBUS_INTERFACE,
-		                                       "WimaxEnabled",
-		                                       NULL);
-	}
-
-	if (val != priv->wimax_enabled) {
-		priv->wimax_enabled = val;
-		if (notify)
-			_nm_object_queue_notify (NM_OBJECT (client), NM_CLIENT_WIMAX_ENABLED);
-	}
-}
-#endif
-
 static GObject *
 new_active_connection (DBusGConnection *connection, const char *path)
 {
@@ -322,15 +275,12 @@ register_for_property_changed (NMClient *client)
 {
 	NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (client);
 	const NMPropertiesChangedInfo property_changed_info[] = {
-		{ NM_CLIENT_VERSION,                   _nm_object_demarshal_generic,  &priv->version },
 		{ NM_CLIENT_STATE,                     _nm_object_demarshal_generic,  &priv->state },
 		{ NM_CLIENT_NETWORKING_ENABLED,        _nm_object_demarshal_generic,  &priv->networking_enabled },
 		{ NM_CLIENT_WIRELESS_ENABLED,          _nm_object_demarshal_generic,  &priv->wireless_enabled },
 		{ NM_CLIENT_WIRELESS_HARDWARE_ENABLED, _nm_object_demarshal_generic,  &priv->wireless_hw_enabled },
 		{ NM_CLIENT_WWAN_ENABLED,              _nm_object_demarshal_generic,  &priv->wwan_enabled },
 		{ NM_CLIENT_WWAN_HARDWARE_ENABLED,     _nm_object_demarshal_generic,  &priv->wwan_hw_enabled },
-		{ NM_CLIENT_WIMAX_ENABLED,             _nm_object_demarshal_generic,  &priv->wimax_enabled },
-		{ NM_CLIENT_WIMAX_HARDWARE_ENABLED,    _nm_object_demarshal_generic,  &priv->wimax_hw_enabled },
 		{ NM_CLIENT_ACTIVE_CONNECTIONS,        demarshal_active_connections, &priv->active_connections },
 		{ NULL },
 	};
@@ -340,17 +290,10 @@ register_for_property_changed (NMClient *client)
 	                                     property_changed_info);
 }
 
-#define NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK     "org.freedesktop.NetworkManager.enable-disable-network"
-#define NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI        "org.freedesktop.NetworkManager.enable-disable-wifi"
-#define NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN        "org.freedesktop.NetworkManager.enable-disable-wwan"
-#define NM_AUTH_PERMISSION_ENABLE_DISABLE_WIMAX       "org.freedesktop.NetworkManager.enable-disable-wimax"
-#define NM_AUTH_PERMISSION_SLEEP_WAKE                 "org.freedesktop.NetworkManager.sleep-wake"
-#define NM_AUTH_PERMISSION_NETWORK_CONTROL            "org.freedesktop.NetworkManager.network-control"
-#define NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED       "org.freedesktop.NetworkManager.wifi.share.protected"
-#define NM_AUTH_PERMISSION_WIFI_SHARE_OPEN            "org.freedesktop.NetworkManager.wifi.share.open"
-#define NM_AUTH_PERMISSION_SETTINGS_MODIFY_SYSTEM     "org.freedesktop.NetworkManager.settings.modify.system"
-#define NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN        "org.freedesktop.NetworkManager.settings.modify.own"
-#define NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME   "org.freedesktop.NetworkManager.settings.modify.hostname"
+#define NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK "org.freedesktop.NetworkManager.enable-disable-network"
+#define NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI    "org.freedesktop.NetworkManager.enable-disable-wifi"
+#define NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN    "org.freedesktop.NetworkManager.enable-disable-wwan"
+#define NM_AUTH_PERMISSION_USE_USER_CONNECTIONS   "org.freedesktop.NetworkManager.use-user-connections"
 
 static NMClientPermission
 nm_permission_to_client (const char *nm)
@@ -361,23 +304,8 @@ nm_permission_to_client (const char *nm)
 		return NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIFI;
 	else if (!strcmp (nm, NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN))
 		return NM_CLIENT_PERMISSION_ENABLE_DISABLE_WWAN;
-	else if (!strcmp (nm, NM_AUTH_PERMISSION_ENABLE_DISABLE_WIMAX))
-		return NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIMAX;
-	else if (!strcmp (nm, NM_AUTH_PERMISSION_SLEEP_WAKE))
-		return NM_CLIENT_PERMISSION_SLEEP_WAKE;
-	else if (!strcmp (nm, NM_AUTH_PERMISSION_NETWORK_CONTROL))
-		return NM_CLIENT_PERMISSION_NETWORK_CONTROL;
-	else if (!strcmp (nm, NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED))
-		return NM_CLIENT_PERMISSION_WIFI_SHARE_PROTECTED;
-	else if (!strcmp (nm, NM_AUTH_PERMISSION_WIFI_SHARE_OPEN))
-		return NM_CLIENT_PERMISSION_WIFI_SHARE_OPEN;
-	else if (!strcmp (nm, NM_AUTH_PERMISSION_SETTINGS_MODIFY_SYSTEM))
-		return NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM;
-	else if (!strcmp (nm, NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN))
-		return NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN;
-	else if (!strcmp (nm, NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME))
-		return NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME;
-
+	else if (!strcmp (nm, NM_AUTH_PERMISSION_USE_USER_CONNECTIONS))
+		return NM_CLIENT_PERMISSION_USE_USER_CONNECTIONS;
 	return NM_CLIENT_PERMISSION_NONE;
 }
 
@@ -486,13 +414,495 @@ client_recheck_permissions (DBusGProxy *proxy, gpointer user_data)
 	}
 }
 
+static GObject*
+constructor (GType type,
+		   guint n_construct_params,
+		   GObjectConstructParam *construct_params)
+{
+	NMObject *object;
+	DBusGConnection *connection;
+	NMClientPrivate *priv;
+	GError *err = NULL;
+
+	object = (NMObject *) G_OBJECT_CLASS (nm_client_parent_class)->constructor (type,
+																 n_construct_params,
+																 construct_params);
+	if (!object)
+		return NULL;
+
+	priv = NM_CLIENT_GET_PRIVATE (object);
+	connection = nm_object_get_connection (object);
+
+	priv->client_proxy = dbus_g_proxy_new_for_name (connection,
+										   NM_DBUS_SERVICE,
+										   nm_object_get_path (object),
+										   NM_DBUS_INTERFACE);
+
+	register_for_property_changed (NM_CLIENT (object));
+
+	dbus_g_proxy_add_signal (priv->client_proxy, "DeviceAdded", DBUS_TYPE_G_OBJECT_PATH, G_TYPE_INVALID);
+	dbus_g_proxy_connect_signal (priv->client_proxy,
+						    "DeviceAdded",
+						    G_CALLBACK (client_device_added_proxy),
+						    object,
+						    NULL);
+
+	dbus_g_proxy_add_signal (priv->client_proxy, "DeviceRemoved", DBUS_TYPE_G_OBJECT_PATH, G_TYPE_INVALID);
+	dbus_g_proxy_connect_signal (priv->client_proxy,
+						    "DeviceRemoved",
+						    G_CALLBACK (client_device_removed_proxy),
+						    object,
+						    NULL);
+
+	/* Permissions */
+	dbus_g_proxy_add_signal (priv->client_proxy, "CheckPermissions", G_TYPE_INVALID);
+	dbus_g_proxy_connect_signal (priv->client_proxy,
+	                             "CheckPermissions",
+	                             G_CALLBACK (client_recheck_permissions),
+	                             object,
+	                             NULL);
+	get_permissions_sync (NM_CLIENT (object));
+
+	priv->bus_proxy = dbus_g_proxy_new_for_name (connection,
+										"org.freedesktop.DBus",
+										"/org/freedesktop/DBus",
+										"org.freedesktop.DBus");
+
+	dbus_g_proxy_add_signal (priv->bus_proxy, "NameOwnerChanged",
+						G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
+						G_TYPE_INVALID);
+	dbus_g_proxy_connect_signal (priv->bus_proxy,
+						    "NameOwnerChanged",
+						    G_CALLBACK (proxy_name_owner_changed),
+						    object, NULL);
+
+	if (!dbus_g_proxy_call (priv->bus_proxy,
+					    "NameHasOwner", &err,
+					    G_TYPE_STRING, NM_DBUS_SERVICE,
+					    G_TYPE_INVALID,
+					    G_TYPE_BOOLEAN, &priv->manager_running,
+					    G_TYPE_INVALID)) {
+		g_warning ("Error on NameHasOwner DBUS call: %s", err->message);
+		g_error_free (err);
+	}
+
+	if (priv->manager_running) {
+		update_wireless_status (NM_CLIENT (object), FALSE);
+		update_wwan_status (NM_CLIENT (object), FALSE);
+		nm_client_get_state (NM_CLIENT (object));
+	}
+
+	g_signal_connect (G_OBJECT (object), "notify::" NM_CLIENT_WIRELESS_ENABLED,
+	                  G_CALLBACK (wireless_enabled_cb), NULL);
+
+	return G_OBJECT (object);
+}
+
+static void
+free_object_array (GPtrArray **array)
+{
+	g_return_if_fail (array != NULL);
+
+	if (*array) {
+		g_ptr_array_foreach (*array, (GFunc) g_object_unref, NULL);
+		g_ptr_array_free (*array, TRUE);
+		*array = NULL;
+	}
+}
+
+static void
+dispose (GObject *object)
+{
+	NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (object);
+
+	if (priv->disposed) {
+		G_OBJECT_CLASS (nm_client_parent_class)->dispose (object);
+		return;
+	}
+
+	if (priv->perm_call)
+		dbus_g_proxy_cancel_call (priv->client_proxy, priv->perm_call);
+
+	g_object_unref (priv->client_proxy);
+	g_object_unref (priv->bus_proxy);
+
+	free_object_array (&priv->devices);
+	free_object_array (&priv->active_connections);
+
+	g_hash_table_destroy (priv->permissions);
+
+	G_OBJECT_CLASS (nm_client_parent_class)->dispose (object);
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+		    const GValue *value, GParamSpec *pspec)
+{
+	NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (object);
+	gboolean b;
+
+	switch (prop_id) {
+	case PROP_WIRELESS_ENABLED:
+		b = g_value_get_boolean (value);
+		if (priv->wireless_enabled != b) {
+			priv->wireless_enabled = b;
+			_nm_object_queue_notify (NM_OBJECT (object), NM_CLIENT_WIRELESS_ENABLED);
+		}
+		break;
+	case PROP_WIRELESS_HARDWARE_ENABLED:
+		b = g_value_get_boolean (value);
+		if (priv->wireless_hw_enabled != b) {
+			priv->wireless_hw_enabled = b;
+			_nm_object_queue_notify (NM_OBJECT (object), NM_CLIENT_WIRELESS_HARDWARE_ENABLED);
+		}
+		break;
+	case PROP_WWAN_ENABLED:
+		b = g_value_get_boolean (value);
+		if (priv->wwan_enabled != b) {
+			priv->wwan_enabled = b;
+			_nm_object_queue_notify (NM_OBJECT (object), NM_CLIENT_WWAN_ENABLED);
+		}
+		break;
+	case PROP_WWAN_HARDWARE_ENABLED:
+		b = g_value_get_boolean (value);
+		if (priv->wwan_hw_enabled != b) {
+			priv->wwan_hw_enabled = b;
+			_nm_object_queue_notify (NM_OBJECT (object), NM_CLIENT_WWAN_HARDWARE_ENABLED);
+		}
+		break;
+	default:
+		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+		break;
+	}
+}
+
+static void
+get_property (GObject *object,
+              guint prop_id,
+              GValue *value,
+              GParamSpec *pspec)
+{
+	NMClient *self = NM_CLIENT (object);
+	NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (self);
+
+	switch (prop_id) {
+	case PROP_STATE:
+		g_value_set_uint (value, nm_client_get_state (self));
+		break;
+	case PROP_MANAGER_RUNNING:
+		g_value_set_boolean (value, priv->manager_running);
+		break;
+	case PROP_NETWORKING_ENABLED:
+		g_value_set_boolean (value, priv->networking_enabled);
+		break;
+	case PROP_WIRELESS_ENABLED:
+		g_value_set_boolean (value, priv->wireless_enabled);
+		break;
+	case PROP_WIRELESS_HARDWARE_ENABLED:
+		g_value_set_boolean (value, priv->wireless_hw_enabled);
+		break;
+	case PROP_WWAN_ENABLED:
+		g_value_set_boolean (value, priv->wwan_enabled);
+		break;
+	case PROP_WWAN_HARDWARE_ENABLED:
+		g_value_set_boolean (value, priv->wwan_hw_enabled);
+		break;
+	case PROP_ACTIVE_CONNECTIONS:
+		g_value_set_boxed (value, nm_client_get_active_connections (self));
+		break;
+	default:
+		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+		break;
+	}
+}
+
+static void
+nm_client_class_init (NMClientClass *client_class)
+{
+	GObjectClass *object_class = G_OBJECT_CLASS (client_class);
+
+	g_type_class_add_private (client_class, sizeof (NMClientPrivate));
+
+	/* virtual methods */
+	object_class->constructor = constructor;
+	object_class->set_property = set_property;
+	object_class->get_property = get_property;
+	object_class->dispose = dispose;
+
+	/* properties */
+
+	/**
+	 * NMClient:state:
+	 *
+	 * The current daemon state.
+	 **/
+	g_object_class_install_property
+		(object_class, PROP_STATE,
+		 g_param_spec_uint (NM_CLIENT_STATE,
+						    "State",
+						    "NetworkManager state",
+						    NM_STATE_UNKNOWN, NM_STATE_DISCONNECTED, NM_STATE_UNKNOWN,
+						    G_PARAM_READABLE));
+
+	/**
+	 * NMClient::manager-running:
+	 *
+	 * Whether the daemon is running.
+	 **/
+	g_object_class_install_property
+		(object_class, PROP_MANAGER_RUNNING,
+		 g_param_spec_boolean (NM_CLIENT_MANAGER_RUNNING,
+						       "ManagerRunning",
+						       "Whether NetworkManager is running",
+						       FALSE,
+						       G_PARAM_READABLE));
+
+	/**
+	 * NMClient::networking-enabled:
+	 *
+	 * Whether networking is enabled.
+	 **/
+	g_object_class_install_property
+		(object_class, PROP_NETWORKING_ENABLED,
+		 g_param_spec_boolean (NM_CLIENT_NETWORKING_ENABLED,
+						   "NetworkingEnabled",
+						   "Is networking enabled",
+						   TRUE,
+						   G_PARAM_READABLE));
+
+	/**
+	 * NMClient::wireless-enabled:
+	 *
+	 * Whether wireless is enabled.
+	 **/
+	g_object_class_install_property
+		(object_class, PROP_WIRELESS_ENABLED,
+		 g_param_spec_boolean (NM_CLIENT_WIRELESS_ENABLED,
+						   "WirelessEnabled",
+						   "Is wireless enabled",
+						   TRUE,
+						   G_PARAM_READWRITE));
+
+	/**
+	 * NMClient::wireless-hardware-enabled:
+	 *
+	 * Whether the wireless hardware is enabled.
+	 **/
+	g_object_class_install_property
+		(object_class, PROP_WIRELESS_HARDWARE_ENABLED,
+		 g_param_spec_boolean (NM_CLIENT_WIRELESS_HARDWARE_ENABLED,
+						   "WirelessHardwareEnabled",
+						   "Is wireless hardware enabled",
+						   TRUE,
+						   G_PARAM_READABLE));
+
+	/**
+	 * NMClient::wwan-enabled:
+	 *
+	 * Whether WWAN functionality is enabled.
+	 **/
+	g_object_class_install_property
+		(object_class, PROP_WWAN_ENABLED,
+		 g_param_spec_boolean (NM_CLIENT_WWAN_ENABLED,
+		                       "WwanEnabled",
+		                       "Is WWAN enabled",
+		                       TRUE,
+		                       G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
+	/**
+	 * NMClient::wwan-hardware-enabled:
+	 *
+	 * Whether the WWAN hardware is enabled.
+	 **/
+	g_object_class_install_property
+		(object_class, PROP_WWAN_HARDWARE_ENABLED,
+		 g_param_spec_boolean (NM_CLIENT_WWAN_HARDWARE_ENABLED,
+		                       "WwanHardwareEnabled",
+		                       "Is WWAN hardware enabled",
+		                       TRUE,
+		                       G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+	/**
+	 * NMClient::active-connections:
+	 *
+	 * The active connections.
+	 **/
+	g_object_class_install_property
+		(object_class, PROP_ACTIVE_CONNECTIONS,
+		 g_param_spec_boxed (NM_CLIENT_ACTIVE_CONNECTIONS,
+						   "Active connections",
+						   "Active connections",
+						   NM_TYPE_OBJECT_ARRAY,
+						   G_PARAM_READABLE));
+
+	/* signals */
+
+	/**
+	 * NMClient::device-added:
+	 * @client: the client that received the signal
+	 * @device: the new device
+	 *
+	 * Notifies that a #NMDevice is added.
+	 **/
+	signals[DEVICE_ADDED] =
+		g_signal_new ("device-added",
+					  G_OBJECT_CLASS_TYPE (object_class),
+					  G_SIGNAL_RUN_FIRST,
+					  G_STRUCT_OFFSET (NMClientClass, device_added),
+					  NULL, NULL,
+					  g_cclosure_marshal_VOID__OBJECT,
+					  G_TYPE_NONE, 1,
+					  G_TYPE_OBJECT);
+
+	/**
+	 * NMClient::device-removed:
+	 * @widget: the client that received the signal
+	 * @device: the removed device
+	 *
+	 * Notifies that a #NMDevice is removed.
+	 **/
+	signals[DEVICE_REMOVED] =
+		g_signal_new ("device-removed",
+					  G_OBJECT_CLASS_TYPE (object_class),
+					  G_SIGNAL_RUN_FIRST,
+					  G_STRUCT_OFFSET (NMClientClass, device_removed),
+					  NULL, NULL,
+					  g_cclosure_marshal_VOID__OBJECT,
+					  G_TYPE_NONE, 1,
+					  G_TYPE_OBJECT);
+
+	/**
+	 * NMClient::permission-changed:
+	 * @widget: the client that received the signal
+	 * @permission: a permission from #NMClientPermission
+	 * @result: the permission's result, one of #NMClientPermissionResult
+	 *
+	 * Notifies that a permission has changed
+	 **/
+	signals[PERMISSION_CHANGED] =
+		g_signal_new ("permission-changed",
+					  G_OBJECT_CLASS_TYPE (object_class),
+					  G_SIGNAL_RUN_FIRST,
+					  0, NULL, NULL,
+					  _nm_marshal_VOID__UINT_UINT,
+					  G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT);
+}
+
+/**
+ * nm_client_new:
+ *
+ * Creates a new #NMClient.
+ *
+ * Returns: a new #NMClient
+ **/
+NMClient *
+nm_client_new (void)
+{
+	DBusGConnection *connection;
+	GError *err = NULL;
+
+	connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &err);
+	if (!connection) {
+		g_warning ("Couldn't connect to system bus: %s", err->message);
+		g_error_free (err);
+		return NULL;
+	}
+
+	return (NMClient *) g_object_new (NM_TYPE_CLIENT,
+									  NM_OBJECT_DBUS_CONNECTION, connection,
+									  NM_OBJECT_DBUS_PATH, NM_DBUS_PATH,
+									  NULL);
+}
+
+static void
+proxy_name_owner_changed (DBusGProxy *proxy,
+						  const char *name,
+						  const char *old_owner,
+						  const char *new_owner,
+						  gpointer user_data)
+{
+	NMClient *client = NM_CLIENT (user_data);
+	NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (client);
+	gboolean old_good = (old_owner && strlen (old_owner));
+	gboolean new_good = (new_owner && strlen (new_owner));
+	gboolean new_running = FALSE;
+
+	if (!name || strcmp (name, NM_DBUS_SERVICE))
+		return;
+
+	if (!old_good && new_good)
+		new_running = TRUE;
+	else if (old_good && !new_good)
+		new_running = FALSE;
+
+	if (new_running == priv->manager_running)
+		return;
+
+	priv->manager_running = new_running;
+	if (!priv->manager_running) {
+		priv->state = NM_STATE_UNKNOWN;
+		_nm_object_queue_notify (NM_OBJECT (client), NM_CLIENT_MANAGER_RUNNING);
+		poke_wireless_devices_with_rf_status (client);
+		free_object_array (&priv->devices);
+		free_object_array (&priv->active_connections);
+		priv->wireless_enabled = FALSE;
+		priv->wireless_hw_enabled = FALSE;
+		priv->wwan_enabled = FALSE;
+		priv->wwan_hw_enabled = FALSE;
+	} else {
+		_nm_object_queue_notify (NM_OBJECT (client), NM_CLIENT_MANAGER_RUNNING);
+		update_wireless_status (client, TRUE);
+		update_wwan_status (client, TRUE);
+	}
+}
+
+static void
+client_device_added_proxy (DBusGProxy *proxy, char *path, gpointer user_data)
+{
+	NMClient *client = NM_CLIENT (user_data);
+	NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (client);
+	GObject *device;
+
+	device = G_OBJECT (nm_client_get_device_by_path (client, path));
+	if (!device) {
+		DBusGConnection *connection = nm_object_get_connection (NM_OBJECT (client));
+
+		device = G_OBJECT (_nm_object_cache_get (path));
+		if (device) {
+			g_ptr_array_add (priv->devices, g_object_ref (device));
+		} else {
+			device = G_OBJECT (nm_device_new (connection, path));
+			if (device)
+				g_ptr_array_add (priv->devices, device);
+		}
+	}
+
+	if (device)
+		g_signal_emit (client, signals[DEVICE_ADDED], 0, device);
+}
+
+static void
+client_device_removed_proxy (DBusGProxy *proxy, char *path, gpointer user_data)
+{
+	NMClient *client = NM_CLIENT (user_data);
+	NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (client);
+	NMDevice *device;
+
+	device = nm_client_get_device_by_path (client, path);
+	if (device) {
+		g_signal_emit (client, signals[DEVICE_REMOVED], 0, device);
+		g_ptr_array_remove (priv->devices, device);
+		g_object_unref (device);
+	}
+}
+
 /**
  * nm_client_get_devices:
  * @client: a #NMClient
  *
  * Gets all the detected devices.
  *
- * Returns: (transfer none) (element-type NMClient.Device): a #GPtrArray containing all the #NMDevice<!-- -->s.
+ * Returns: a #GPtrArray containing all the #NMDevice<!-- -->s.
  * The returned array is owned by the client and should not be modified.
  **/
 const GPtrArray *
@@ -532,7 +942,7 @@ nm_client_get_devices (NMClient *client)
  *
  * Gets a #NMDevice from a #NMClient.
  *
- * Returns: (transfer none): the #NMDevice for the given @object_path or %NULL if none is found.
+ * Returns: the #NMDevice for the given @object_path or %NULL if none is found.
  **/
 NMDevice *
 nm_client_get_device_by_path (NMClient *client, const char *object_path)
@@ -560,75 +970,9 @@ nm_client_get_device_by_path (NMClient *client, const char *object_path)
 }
 
 typedef struct {
-	NMClient *client;
-	NMClientActivateFn act_fn;
-	NMClientAddActivateFn add_act_fn;
-	char *active_path;
-	char *new_connection_path;
+	NMClientActivateDeviceFn fn;
 	gpointer user_data;
-} ActivateInfo;
-
-static void
-activate_info_free (ActivateInfo *info)
-{
-	g_free (info->active_path);
-	g_free (info->new_connection_path);
-	memset (info, 0, sizeof (*info));
-	g_slice_free (ActivateInfo, info);
-}
-
-static void
-activate_info_complete (ActivateInfo *info,
-                        NMActiveConnection *active,
-                        GError *error)
-{
-	NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (info->client);
-
-	if (info->act_fn)
-		info->act_fn (info->client, error ? NULL : active, error, info->user_data);
-	else if (info->add_act_fn) {
-		info->add_act_fn (info->client,
-		                  error ? NULL : active,
-		                  error ? NULL : info->new_connection_path,
-		                  error,
-		                  info->user_data);
-	} else if (error)
-		g_warning ("Device activation failed: (%d) %s", error->code, error->message);
-
-	priv->pending_activations = g_slist_remove (priv->pending_activations, info);
-}
-
-static void
-recheck_pending_activations (NMClient *self)
-{
-	NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (self);
-	GSList *iter;
-	const GPtrArray *active_connections;
-	int i;
-
-	active_connections = nm_client_get_active_connections (self);
-	if (!active_connections)
-		return;
-
-	/* For each active connection, look for a pending activation that has
-	 * the active connection's object path, and call its callback.
-	 */
-	for (i = 0; i < active_connections->len; i++) {
-		NMActiveConnection *active = g_ptr_array_index (active_connections, i);
-		const char *active_path = nm_object_get_path (NM_OBJECT (active));
-
-		for (iter = priv->pending_activations; iter; iter = g_slist_next (iter)) {
-			ActivateInfo *info = iter->data;
-
-			if (g_strcmp0 (info->active_path, active_path) == 0) {
-				/* Call the pending activation's callback and it all up*/
-				activate_info_complete (info, active, NULL);
-				activate_info_free (info);
-				break;
-			}
-		}
-	}
-}
+} ActivateDeviceInfo;
 
 static void
 activate_cb (DBusGProxy *proxy,
@@ -636,154 +980,63 @@ activate_cb (DBusGProxy *proxy,
              GError *error,
              gpointer user_data)
 {
-	ActivateInfo *info = user_data;
-
-	if (error) {
-		activate_info_complete (info, NULL, error);
-		activate_info_free (info);
-	} else {
-		info->active_path = g_strdup (path);
-		recheck_pending_activations (info->client);
-	}
-}
-
-/**
- * nm_client_activate_connection:
- * @client: a #NMClient
- * @connection: an #NMConnection
- * @device: (allow-none): the #NMDevice
- * @specific_object: (allow-none): the object path of a connection-type-specific
- *   object this activation should use. This parameter is currently ignored for
- *   wired and mobile broadband connections, and the value of NULL should be used
- *   (ie, no specific object).  For WiFi or WiMAX connections, pass the object
- *   path of a #NMAccessPoint or #NMWimaxNsp owned by @device, which you can
- *   get using nm_object_get_path(), and which will be used to complete the
- *   details of the newly added connection.
- * @callback: (scope async) (allow-none): the function to call when the call is done
- * @user_data: (closure): user data to pass to the callback function
- *
- * Starts a connection to a particular network using the configuration settings
- * from @connection and the network device @device.  Certain connection types
- * also take a "specific object" which is the object path of a connection-
- * specific object, like an #NMAccessPoint for WiFi connections, or an
- * #NMWimaxNsp for WiMAX connections, to which you wish to connect.  If the
- * specific object is not given, NetworkManager can, in some cases, automatically
- * determine which network to connect to given the settings in @connection.
- **/
-void
-nm_client_activate_connection (NMClient *client,
-                               NMConnection *connection,
-                               NMDevice *device,
-                               const char *specific_object,
-                               NMClientActivateFn callback,
-                               gpointer user_data)
-{
-	NMClientPrivate *priv;
-	ActivateInfo *info;
-
-	g_return_if_fail (NM_IS_CLIENT (client));
-	if (device)
-		g_return_if_fail (NM_IS_DEVICE (device));
-	g_return_if_fail (NM_IS_CONNECTION (connection));
-
-	info = g_slice_new0 (ActivateInfo);
-	info->act_fn = callback;
-	info->user_data = user_data;
-	info->client = client;
-
-	priv = NM_CLIENT_GET_PRIVATE (client);
-	priv->pending_activations = g_slist_prepend (priv->pending_activations, info);
-
-	org_freedesktop_NetworkManager_activate_connection_async (priv->client_proxy,
-	                                                          nm_connection_get_path (connection),
-	                                                          device ? nm_object_get_path (NM_OBJECT (device)) : "/",
-	                                                          specific_object ? specific_object : "/",
-	                                                          activate_cb,
-	                                                          info);
-}
+	ActivateDeviceInfo *info = (ActivateDeviceInfo *) user_data;
 
-static void
-add_activate_cb (DBusGProxy *proxy,
-                 char *connection_path,
-                 char *active_path,
-                 GError *error,
-                 gpointer user_data)
-{
-	ActivateInfo *info = user_data;
+	if (info->fn)
+		info->fn (info->user_data, path, error);
+	else if (error)
+		nm_warning ("Device activation failed: (%d) %s", error->code, error->message);
 
-	if (error) {
-		activate_info_complete (info, NULL, error);
-		activate_info_free (info);
-	} else {
-		info->new_connection_path = g_strdup (connection_path);
-		info->active_path = g_strdup (active_path);
-		recheck_pending_activations (info->client);
-	}
+	g_slice_free (ActivateDeviceInfo, info);
 }
 
 /**
- * nm_client_add_and_activate_connection:
+ * nm_client_activate_connection:
  * @client: a #NMClient
- * @partial: (allow-none): an #NMConnection to add; the connection may be
- *   partially filled (or even NULL) and will be completed by NetworkManager
- *   using the given @device and @specific_object before being added
+ * @service_name: the connection's service name
+ * @connection_path: the connection's DBus path
  * @device: the #NMDevice
- * @specific_object: (allow-none): the object path of a connection-type-specific
- *   object this activation should use. This parameter is currently ignored for
- *   wired and mobile broadband connections, and the value of NULL should be used
- *   (ie, no specific object).  For WiFi or WiMAX connections, pass the object
- *   path of a #NMAccessPoint or #NMWimaxNsp owned by @device, which you can
- *   get using nm_object_get_path(), and which will be used to complete the
- *   details of the newly added connection.
- * @callback: (scope async) (allow-none): the function to call when the call is done
- * @user_data: (closure): user data to pass to the callback function
+ * @specific_object: the device specific object (currently used only for
+ * activating wireless devices and should be the #NMAccessPoint<!-- -->'s path.
+ * @callback: the function to call when the call is done
+ * @user_data: user data to pass to the callback function
  *
- * Adds a new connection using the given details (if any) as a template,
- * automatically filling in missing settings with the capabilities of the
- * given device and specific object.  The new connection is then activated.
- * Cannot be used for VPN connections at this time.
+ * Activates a connection with the given #NMDevice.
  **/
 void
-nm_client_add_and_activate_connection (NMClient *client,
-                                       NMConnection *partial,
-                                       NMDevice *device,
-                                       const char *specific_object,
-                                       NMClientAddActivateFn callback,
-                                       gpointer user_data)
+nm_client_activate_connection (NMClient *client,
+					  const char *service_name,
+					  const char *connection_path,
+					  NMDevice *device,
+					  const char *specific_object,
+					  NMClientActivateDeviceFn callback,
+					  gpointer user_data)
 {
-	NMClientPrivate *priv;
-	ActivateInfo *info;
-	GHashTable *hash = NULL;
+	ActivateDeviceInfo *info;
+	char *internal_so = (char *) specific_object;
 
 	g_return_if_fail (NM_IS_CLIENT (client));
 	g_return_if_fail (NM_IS_DEVICE (device));
+	g_return_if_fail (service_name != NULL);
+	g_return_if_fail (connection_path != NULL);
 
-	info = g_slice_new0 (ActivateInfo);
-	info->add_act_fn = callback;
-	info->user_data = user_data;
-	info->client = client;
-
-	if (partial)
-		hash = nm_connection_to_hash (partial, NM_SETTING_HASH_FLAG_ALL);
-	else
-		hash = g_hash_table_new (g_str_hash, g_str_equal);
+	/* NULL specific object must be translated into "/" because D-Bus does
+	 * not have any idea of NULL object paths.
+	 */
+	if (internal_so == NULL)
+		internal_so = "/";
 
-	priv = NM_CLIENT_GET_PRIVATE (client);
-	priv->pending_activations = g_slist_prepend (priv->pending_activations, info);
-
-	org_freedesktop_NetworkManager_add_and_activate_connection_async (priv->client_proxy,
-	                                                                  hash,
-	                                                                  nm_object_get_path (NM_OBJECT (device)),
-	                                                                  specific_object ? specific_object : "/",
-	                                                                  add_activate_cb,
-	                                                                  info);
-	g_hash_table_unref (hash);
-}
+	info = g_slice_new (ActivateDeviceInfo);
+	info->fn = callback;
+	info->user_data = user_data;
 
-static void
-active_connections_changed_cb (GObject *object, GParamSpec *pspec, gpointer user_data)
-{
-	recheck_pending_activations (NM_CLIENT (object));
+	org_freedesktop_NetworkManager_activate_connection_async (NM_CLIENT_GET_PRIVATE (client)->client_proxy,
+											    service_name,
+											    connection_path,
+											    nm_object_get_path (NM_OBJECT (device)),
+											    internal_so,
+											    activate_cb,
+											    info);
 }
 
 /**
@@ -818,8 +1071,7 @@ nm_client_deactivate_connection (NMClient *client, NMActiveConnection *active)
  *
  * Gets the active connections.
  *
- * Returns: (transfer none) (element-type NMClient.ActiveConnection): a #GPtrArray
-*  containing all the active #NMActiveConnection<!-- -->s.
+ * Returns: a #GPtrArray containing all the active #NMActiveConnection<!-- -->s.
  * The returned array is owned by the client and should not be modified.
  **/
 const GPtrArray * 
@@ -840,12 +1092,11 @@ nm_client_get_active_connections (NMClient *client)
 	if (!_nm_object_get_property (NM_OBJECT (client),
 	                             "org.freedesktop.NetworkManager",
 	                             "ActiveConnections",
-	                             &value,
-	                             NULL)) {
+	                             &value)) {
 		return NULL;
 	}
 
-	demarshal_active_connections (NM_OBJECT (client), NULL, &value, &priv->active_connections);
+	demarshal_active_connections (NM_OBJECT (client), NULL, &value, &priv->active_connections);	
 	g_value_unset (&value);
 
 	return handle_ptr_array_return (priv->active_connections);
@@ -962,92 +1213,6 @@ nm_client_wwan_hardware_get_enabled (NMClient *client)
 }
 
 /**
- * nm_client_wimax_get_enabled:
- * @client: a #NMClient
- *
- * Determines whether WiMAX is enabled.
- *
- * Returns: %TRUE if WiMAX is enabled
- **/
-gboolean
-nm_client_wimax_get_enabled (NMClient *client)
-{
-	g_return_val_if_fail (NM_IS_CLIENT (client), FALSE);
-
-	return NM_CLIENT_GET_PRIVATE (client)->wimax_enabled;
-}
-
-/**
- * nm_client_wimax_set_enabled:
- * @client: a #NMClient
- * @enabled: %TRUE to enable WiMAX
- *
- * Enables or disables WiMAX devices.
- **/
-void
-nm_client_wimax_set_enabled (NMClient *client, gboolean enabled)
-{
-	GValue value = {0,};
-
-	g_return_if_fail (NM_IS_CLIENT (client));
-
-	g_value_init (&value, G_TYPE_BOOLEAN);
-	g_value_set_boolean (&value, enabled);
-
-	_nm_object_set_property (NM_OBJECT (client),
-	                         NM_DBUS_INTERFACE,
-	                         "WimaxEnabled",
-	                         &value);
-}
-
-/**
- * nm_client_wimax_hardware_get_enabled:
- * @client: a #NMClient
- *
- * Determines whether the WiMAX hardware is enabled.
- *
- * Returns: %TRUE if the WiMAX hardware is enabled
- **/
-gboolean
-nm_client_wimax_hardware_get_enabled (NMClient *client)
-{
-	g_return_val_if_fail (NM_IS_CLIENT (client), FALSE);
-
-	return NM_CLIENT_GET_PRIVATE (client)->wimax_hw_enabled;
-}
-
-/**
- * nm_client_get_version:
- * @client: a #NMClient
- *
- * Gets NetworkManager version.
- *
- * Returns: string with the version
- **/
-const char *
-nm_client_get_version (NMClient *client)
-{
-	NMClientPrivate *priv;
-	GError *err = NULL;
-
-	g_return_val_if_fail (NM_IS_CLIENT (client), NULL);
-
-	priv = NM_CLIENT_GET_PRIVATE (client);
-
-	if (!priv->manager_running)
-		return NULL;
-
-	if (!priv->version)
-		priv->version = _nm_object_get_string_property (NM_OBJECT (client), NM_DBUS_INTERFACE, "Version", &err);
-
-	/* TODO: we don't pass the error to the caller yet, maybe later */
-	if (err)
-		g_error_free (err);
-
-	return priv->version;
-}
-
-/**
  * nm_client_get_state:
  * @client: a #NMClient
  *
@@ -1068,7 +1233,7 @@ nm_client_get_state (NMClient *client)
 		return NM_STATE_UNKNOWN;
 
 	if (priv->state == NM_STATE_UNKNOWN)
-		priv->state = _nm_object_get_uint_property (NM_OBJECT (client), NM_DBUS_INTERFACE, "State", NULL);
+		priv->state = _nm_object_get_uint_property (NM_OBJECT (client), NM_DBUS_INTERFACE, "State");
 
 	return priv->state;
 }
@@ -1094,8 +1259,7 @@ nm_client_networking_get_enabled (NMClient *client)
 		if (!priv->networking_enabled) {
 			priv->networking_enabled = _nm_object_get_boolean_property (NM_OBJECT (client),
 			                                                            NM_DBUS_INTERFACE,
-			                                                            "NetworkingEnabled",
-			                                                            NULL);
+			                                                            "NetworkingEnabled");
 			priv->have_networking_enabled = TRUE;
 		}
 	}
@@ -1176,566 +1340,3 @@ nm_client_get_permission_result (NMClient *client, NMClientPermission permission
 	return GPOINTER_TO_UINT (result);
 }
 
-/****************************************************************/
-
-static void
-free_object_array (GPtrArray **array)
-{
-	g_return_if_fail (array != NULL);
-
-	if (*array) {
-		g_ptr_array_foreach (*array, (GFunc) g_object_unref, NULL);
-		g_ptr_array_free (*array, TRUE);
-		*array = NULL;
-	}
-}
-
-static void
-proxy_name_owner_changed (DBusGProxy *proxy,
-						  const char *name,
-						  const char *old_owner,
-						  const char *new_owner,
-						  gpointer user_data)
-{
-	NMClient *client = NM_CLIENT (user_data);
-	NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (client);
-	gboolean old_good = (old_owner && strlen (old_owner));
-	gboolean new_good = (new_owner && strlen (new_owner));
-	gboolean new_running = FALSE;
-
-	if (!name || strcmp (name, NM_DBUS_SERVICE))
-		return;
-
-	if (!old_good && new_good)
-		new_running = TRUE;
-	else if (old_good && !new_good)
-		new_running = FALSE;
-
-	if (new_running == priv->manager_running)
-		return;
-
-	priv->manager_running = new_running;
-	if (!priv->manager_running) {
-		priv->state = NM_STATE_UNKNOWN;
-		_nm_object_queue_notify (NM_OBJECT (client), NM_CLIENT_MANAGER_RUNNING);
-		poke_wireless_devices_with_rf_status (client);
-		free_object_array (&priv->devices);
-		free_object_array (&priv->active_connections);
-		priv->wireless_enabled = FALSE;
-		priv->wireless_hw_enabled = FALSE;
-		priv->wwan_enabled = FALSE;
-		priv->wwan_hw_enabled = FALSE;
-		priv->wimax_enabled = FALSE;
-		priv->wimax_hw_enabled = FALSE;
-	} else {
-		_nm_object_queue_notify (NM_OBJECT (client), NM_CLIENT_MANAGER_RUNNING);
-		update_wireless_status (client, TRUE);
-		update_wwan_status (client, TRUE);
-#if WITH_WIMAX
-		update_wimax_status (client, TRUE);
-#endif
-	}
-}
-
-static void
-client_device_added_proxy (DBusGProxy *proxy, char *path, gpointer user_data)
-{
-	NMClient *client = NM_CLIENT (user_data);
-	NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (client);
-	GObject *device;
-
-	device = G_OBJECT (nm_client_get_device_by_path (client, path));
-	if (!device) {
-		DBusGConnection *connection = nm_object_get_connection (NM_OBJECT (client));
-
-		device = G_OBJECT (_nm_object_cache_get (path));
-		if (device) {
-			g_ptr_array_add (priv->devices, device);
-		} else {
-			device = G_OBJECT (nm_device_new (connection, path));
-			if (device)
-				g_ptr_array_add (priv->devices, device);
-		}
-	}
-
-	if (device)
-		g_signal_emit (client, signals[DEVICE_ADDED], 0, device);
-}
-
-static void
-client_device_removed_proxy (DBusGProxy *proxy, char *path, gpointer user_data)
-{
-	NMClient *client = NM_CLIENT (user_data);
-	NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (client);
-	NMDevice *device;
-
-	device = nm_client_get_device_by_path (client, path);
-	if (device) {
-		g_signal_emit (client, signals[DEVICE_REMOVED], 0, device);
-		g_ptr_array_remove (priv->devices, device);
-		g_object_unref (device);
-	}
-}
-
-/****************************************************************/
-
-/**
- * nm_client_new:
- *
- * Creates a new #NMClient.
- *
- * Returns: a new #NMClient
- **/
-NMClient *
-nm_client_new (void)
-{
-	DBusGConnection *connection;
-	GError *err = NULL;
-
-#ifdef LIBNM_GLIB_TEST
-	connection = dbus_g_bus_get (DBUS_BUS_SESSION, &err);
-#else
-	connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &err);
-#endif
-	if (!connection) {
-		g_warning ("Couldn't connect to system bus: %s", err->message);
-		g_error_free (err);
-		return NULL;
-	}
-
-	return (NMClient *) g_object_new (NM_TYPE_CLIENT,
-									  NM_OBJECT_DBUS_CONNECTION, connection,
-									  NM_OBJECT_DBUS_PATH, NM_DBUS_PATH,
-									  NULL);
-}
-
-static GObject*
-constructor (GType type,
-		   guint n_construct_params,
-		   GObjectConstructParam *construct_params)
-{
-	NMObject *object;
-	DBusGConnection *connection;
-	NMClientPrivate *priv;
-	GError *err = NULL;
-
-	object = (NMObject *) G_OBJECT_CLASS (nm_client_parent_class)->constructor (type,
-																 n_construct_params,
-																 construct_params);
-	if (!object)
-		return NULL;
-
-	priv = NM_CLIENT_GET_PRIVATE (object);
-	connection = nm_object_get_connection (object);
-
-	priv->client_proxy = dbus_g_proxy_new_for_name (connection,
-										   NM_DBUS_SERVICE,
-										   nm_object_get_path (object),
-										   NM_DBUS_INTERFACE);
-
-	register_for_property_changed (NM_CLIENT (object));
-
-	dbus_g_proxy_add_signal (priv->client_proxy, "DeviceAdded", DBUS_TYPE_G_OBJECT_PATH, G_TYPE_INVALID);
-	dbus_g_proxy_connect_signal (priv->client_proxy,
-						    "DeviceAdded",
-						    G_CALLBACK (client_device_added_proxy),
-						    object,
-						    NULL);
-
-	dbus_g_proxy_add_signal (priv->client_proxy, "DeviceRemoved", DBUS_TYPE_G_OBJECT_PATH, G_TYPE_INVALID);
-	dbus_g_proxy_connect_signal (priv->client_proxy,
-						    "DeviceRemoved",
-						    G_CALLBACK (client_device_removed_proxy),
-						    object,
-						    NULL);
-
-	/* Permissions */
-	dbus_g_proxy_add_signal (priv->client_proxy, "CheckPermissions", G_TYPE_INVALID);
-	dbus_g_proxy_connect_signal (priv->client_proxy,
-	                             "CheckPermissions",
-	                             G_CALLBACK (client_recheck_permissions),
-	                             object,
-	                             NULL);
-	get_permissions_sync (NM_CLIENT (object));
-
-	priv->bus_proxy = dbus_g_proxy_new_for_name (connection,
-	                                             DBUS_SERVICE_DBUS,
-	                                             DBUS_PATH_DBUS,
-	                                             DBUS_INTERFACE_DBUS);
-
-	dbus_g_proxy_add_signal (priv->bus_proxy, "NameOwnerChanged",
-						G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
-						G_TYPE_INVALID);
-	dbus_g_proxy_connect_signal (priv->bus_proxy,
-						    "NameOwnerChanged",
-						    G_CALLBACK (proxy_name_owner_changed),
-						    object, NULL);
-
-	if (!dbus_g_proxy_call (priv->bus_proxy,
-					    "NameHasOwner", &err,
-					    G_TYPE_STRING, NM_DBUS_SERVICE,
-					    G_TYPE_INVALID,
-					    G_TYPE_BOOLEAN, &priv->manager_running,
-					    G_TYPE_INVALID)) {
-		g_warning ("Error on NameHasOwner DBUS call: %s", err->message);
-		g_error_free (err);
-	}
-
-	if (priv->manager_running) {
-		update_wireless_status (NM_CLIENT (object), FALSE);
-		update_wwan_status (NM_CLIENT (object), FALSE);
-#if WITH_WIMAX
-		update_wimax_status (NM_CLIENT (object), FALSE);
-#endif
-		nm_client_get_state (NM_CLIENT (object));
-	}
-
-	g_signal_connect (G_OBJECT (object), "notify::" NM_CLIENT_WIRELESS_ENABLED,
-	                  G_CALLBACK (wireless_enabled_cb), NULL);
-
-	g_signal_connect (object, "notify::" NM_CLIENT_ACTIVE_CONNECTIONS,
-	                  G_CALLBACK (active_connections_changed_cb), NULL);
-
-	return G_OBJECT (object);
-}
-
-static void
-dispose (GObject *object)
-{
-	NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (object);
-
-	if (priv->disposed) {
-		G_OBJECT_CLASS (nm_client_parent_class)->dispose (object);
-		return;
-	}
-
-	if (priv->perm_call)
-		dbus_g_proxy_cancel_call (priv->client_proxy, priv->perm_call);
-
-	g_object_unref (priv->client_proxy);
-	g_object_unref (priv->bus_proxy);
-
-	free_object_array (&priv->devices);
-	free_object_array (&priv->active_connections);
-
-	g_slist_foreach (priv->pending_activations, (GFunc) activate_info_free, NULL);
-	g_slist_free (priv->pending_activations);
-
-	g_hash_table_destroy (priv->permissions);
-
-	G_OBJECT_CLASS (nm_client_parent_class)->dispose (object);
-}
-
-static void
-finalize (GObject *object)
-{
-	NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (object);
-
-	g_free (priv->version);
-
-	G_OBJECT_CLASS (nm_client_parent_class)->finalize (object);
-}
-
-static void
-set_property (GObject *object, guint prop_id,
-		    const GValue *value, GParamSpec *pspec)
-{
-	NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (object);
-	gboolean b;
-
-	switch (prop_id) {
-	case PROP_NETWORKING_ENABLED:
-		b = g_value_get_boolean (value);
-		if (priv->networking_enabled != b) {
-			nm_client_networking_set_enabled (NM_CLIENT (object), b);
-			/* Let the property value flip when we get the change signal from NM */
-		}
-		break;
-	case PROP_WIRELESS_ENABLED:
-		b = g_value_get_boolean (value);
-		if (priv->wireless_enabled != b) {
-			nm_client_wireless_set_enabled (NM_CLIENT (object), b);
-			/* Let the property value flip when we get the change signal from NM */
-		}
-		break;
-	case PROP_WWAN_ENABLED:
-		b = g_value_get_boolean (value);
-		if (priv->wwan_enabled != b) {
-			nm_client_wwan_set_enabled (NM_CLIENT (object), b);
-			/* Let the property value flip when we get the change signal from NM */
-		}
-		break;
-	case PROP_WIMAX_ENABLED:
-		b = g_value_get_boolean (value);
-		if (priv->wimax_enabled != b) {
-			nm_client_wimax_set_enabled (NM_CLIENT (object), b);
-			/* Let the property value flip when we get the change signal from NM */
-		}
-		break;
-	default:
-		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-		break;
-	}
-}
-
-static void
-get_property (GObject *object,
-              guint prop_id,
-              GValue *value,
-              GParamSpec *pspec)
-{
-	NMClient *self = NM_CLIENT (object);
-	NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (self);
-
-	switch (prop_id) {
-	case PROP_VERSION:
-		g_value_set_string (value, nm_client_get_version (self));
-		break;
-	case PROP_STATE:
-		g_value_set_uint (value, nm_client_get_state (self));
-		break;
-	case PROP_MANAGER_RUNNING:
-		g_value_set_boolean (value, priv->manager_running);
-		break;
-	case PROP_NETWORKING_ENABLED:
-		g_value_set_boolean (value, nm_client_networking_get_enabled (self));
-		break;
-	case PROP_WIRELESS_ENABLED:
-		g_value_set_boolean (value, priv->wireless_enabled);
-		break;
-	case PROP_WIRELESS_HARDWARE_ENABLED:
-		g_value_set_boolean (value, priv->wireless_hw_enabled);
-		break;
-	case PROP_WWAN_ENABLED:
-		g_value_set_boolean (value, priv->wwan_enabled);
-		break;
-	case PROP_WWAN_HARDWARE_ENABLED:
-		g_value_set_boolean (value, priv->wwan_hw_enabled);
-		break;
-	case PROP_WIMAX_ENABLED:
-		g_value_set_boolean (value, priv->wimax_enabled);
-		break;
-	case PROP_WIMAX_HARDWARE_ENABLED:
-		g_value_set_boolean (value, priv->wimax_hw_enabled);
-		break;
-	case PROP_ACTIVE_CONNECTIONS:
-		g_value_set_boxed (value, nm_client_get_active_connections (self));
-		break;
-	default:
-		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-		break;
-	}
-}
-
-static void
-nm_client_class_init (NMClientClass *client_class)
-{
-	GObjectClass *object_class = G_OBJECT_CLASS (client_class);
-
-	g_type_class_add_private (client_class, sizeof (NMClientPrivate));
-
-	/* virtual methods */
-	object_class->constructor = constructor;
-	object_class->set_property = set_property;
-	object_class->get_property = get_property;
-	object_class->dispose = dispose;
-	object_class->finalize = finalize;
-
-	/* properties */
-
-	/**
-	 * NMClient:version:
-	 *
-	 * The NetworkManager version.
-	 **/
-	g_object_class_install_property (object_class, PROP_VERSION,
-	                                 g_param_spec_string (NM_CLIENT_VERSION,
-	                                                      "Version",
-	                                                      "NetworkManager version",
-	                                                       NULL,
-	                                                       G_PARAM_READABLE));
-
-	/**
-	 * NMClient:state:
-	 *
-	 * The current daemon state.
-	 **/
-	g_object_class_install_property
-		(object_class, PROP_STATE,
-		 g_param_spec_uint (NM_CLIENT_STATE,
-						    "State",
-						    "NetworkManager state",
-						    NM_STATE_UNKNOWN, NM_STATE_CONNECTED_GLOBAL, NM_STATE_UNKNOWN,
-						    G_PARAM_READABLE));
-
-	/**
-	 * NMClient::manager-running:
-	 *
-	 * Whether the daemon is running.
-	 **/
-	g_object_class_install_property
-		(object_class, PROP_MANAGER_RUNNING,
-		 g_param_spec_boolean (NM_CLIENT_MANAGER_RUNNING,
-						       "ManagerRunning",
-						       "Whether NetworkManager is running",
-						       FALSE,
-						       G_PARAM_READABLE));
-
-	/**
-	 * NMClient::networking-enabled:
-	 *
-	 * Whether networking is enabled.
-	 **/
-	g_object_class_install_property
-		(object_class, PROP_NETWORKING_ENABLED,
-		 g_param_spec_boolean (NM_CLIENT_NETWORKING_ENABLED,
-						   "NetworkingEnabled",
-						   "Is networking enabled",
-						   TRUE,
-						   G_PARAM_READWRITE));
-
-	/**
-	 * NMClient::wireless-enabled:
-	 *
-	 * Whether wireless is enabled.
-	 **/
-	g_object_class_install_property
-		(object_class, PROP_WIRELESS_ENABLED,
-		 g_param_spec_boolean (NM_CLIENT_WIRELESS_ENABLED,
-						   "WirelessEnabled",
-						   "Is wireless enabled",
-						   FALSE,
-						   G_PARAM_READWRITE));
-
-	/**
-	 * NMClient::wireless-hardware-enabled:
-	 *
-	 * Whether the wireless hardware is enabled.
-	 **/
-	g_object_class_install_property
-		(object_class, PROP_WIRELESS_HARDWARE_ENABLED,
-		 g_param_spec_boolean (NM_CLIENT_WIRELESS_HARDWARE_ENABLED,
-						   "WirelessHardwareEnabled",
-						   "Is wireless hardware enabled",
-						   TRUE,
-						   G_PARAM_READABLE));
-
-	/**
-	 * NMClient::wwan-enabled:
-	 *
-	 * Whether WWAN functionality is enabled.
-	 **/
-	g_object_class_install_property
-		(object_class, PROP_WWAN_ENABLED,
-		 g_param_spec_boolean (NM_CLIENT_WWAN_ENABLED,
-		                       "WwanEnabled",
-		                       "Is WWAN enabled",
-		                       FALSE,
-		                       G_PARAM_READWRITE));
-
-	/**
-	 * NMClient::wwan-hardware-enabled:
-	 *
-	 * Whether the WWAN hardware is enabled.
-	 **/
-	g_object_class_install_property
-		(object_class, PROP_WWAN_HARDWARE_ENABLED,
-		 g_param_spec_boolean (NM_CLIENT_WWAN_HARDWARE_ENABLED,
-		                       "WwanHardwareEnabled",
-		                       "Is WWAN hardware enabled",
-		                       FALSE,
-		                       G_PARAM_READABLE));
-
-	/**
-	 * NMClient::wimax-enabled:
-	 *
-	 * Whether WiMAX functionality is enabled.
-	 **/
-	g_object_class_install_property
-		(object_class, PROP_WIMAX_ENABLED,
-		 g_param_spec_boolean (NM_CLIENT_WIMAX_ENABLED,
-		                       "WimaxEnabled",
-		                       "Is WiMAX enabled",
-		                       FALSE,
-		                       G_PARAM_READWRITE));
-
-	/**
-	 * NMClient::wimax-hardware-enabled:
-	 *
-	 * Whether the WiMAX hardware is enabled.
-	 **/
-	g_object_class_install_property
-		(object_class, PROP_WIMAX_HARDWARE_ENABLED,
-		 g_param_spec_boolean (NM_CLIENT_WIMAX_HARDWARE_ENABLED,
-		                       "WimaxHardwareEnabled",
-		                       "Is WiMAX hardware enabled",
-		                       FALSE,
-		                       G_PARAM_READABLE));
-
-	/**
-	 * NMClient::active-connections:
-	 *
-	 * The active connections.
-	 * Type: GPtrArray<NMClient.ActiveConnection>
-	 **/
-	g_object_class_install_property
-		(object_class, PROP_ACTIVE_CONNECTIONS,
-		 g_param_spec_boxed (NM_CLIENT_ACTIVE_CONNECTIONS,
-						   "Active connections",
-						   "Active connections",
-						   NM_TYPE_OBJECT_ARRAY,
-						   G_PARAM_READABLE));
-
-	/* signals */
-
-	/**
-	 * NMClient::device-added:
-	 * @client: the client that received the signal
-	 * @device: (type NMClient.Device): the new device
-	 *
-	 * Notifies that a #NMDevice is added.
-	 **/
-	signals[DEVICE_ADDED] =
-		g_signal_new ("device-added",
-					  G_OBJECT_CLASS_TYPE (object_class),
-					  G_SIGNAL_RUN_FIRST,
-					  G_STRUCT_OFFSET (NMClientClass, device_added),
-					  NULL, NULL,
-					  g_cclosure_marshal_VOID__OBJECT,
-					  G_TYPE_NONE, 1,
-					  G_TYPE_OBJECT);
-
-	/**
-	 * NMClient::device-removed:
-	 * @widget: the client that received the signal
-	 * @device: (type NMClient.Device): the removed device
-	 *
-	 * Notifies that a #NMDevice is removed.
-	 **/
-	signals[DEVICE_REMOVED] =
-		g_signal_new ("device-removed",
-					  G_OBJECT_CLASS_TYPE (object_class),
-					  G_SIGNAL_RUN_FIRST,
-					  G_STRUCT_OFFSET (NMClientClass, device_removed),
-					  NULL, NULL,
-					  g_cclosure_marshal_VOID__OBJECT,
-					  G_TYPE_NONE, 1,
-					  G_TYPE_OBJECT);
-
-	/**
-	 * NMClient::permission-changed:
-	 * @widget: the client that received the signal
-	 * @permission: a permission from #NMClientPermission
-	 * @result: the permission's result, one of #NMClientPermissionResult
-	 *
-	 * Notifies that a permission has changed
-	 **/
-	signals[PERMISSION_CHANGED] =
-		g_signal_new ("permission-changed",
-					  G_OBJECT_CLASS_TYPE (object_class),
-					  G_SIGNAL_RUN_FIRST,
-					  0, NULL, NULL,
-					  _nm_marshal_VOID__UINT_UINT,
-					  G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT);
-}
-
diff --git a/libnm-glib/nm-client.h b/libnm-glib/nm-client.h
index 450c0947..c67e0d8f 100644
--- a/libnm-glib/nm-client.h
+++ b/libnm-glib/nm-client.h
@@ -18,7 +18,7 @@
  * Boston, MA 02110-1301 USA.
  *
  * Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2011 Red Hat, Inc.
+ * Copyright (C) 2007 - 2010 Red Hat, Inc.
  */
 
 #ifndef NM_CLIENT_H
@@ -41,7 +41,6 @@ G_BEGIN_DECLS
 #define NM_IS_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NM_TYPE_CLIENT))
 #define NM_CLIENT_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_CLIENT, NMClientClass))
 
-#define NM_CLIENT_VERSION "version"
 #define NM_CLIENT_STATE "state"
 #define NM_CLIENT_MANAGER_RUNNING "manager-running"
 #define NM_CLIENT_NETWORKING_ENABLED "networking-enabled"
@@ -49,8 +48,6 @@ G_BEGIN_DECLS
 #define NM_CLIENT_WIRELESS_HARDWARE_ENABLED "wireless-hardware-enabled"
 #define NM_CLIENT_WWAN_ENABLED "wwan-enabled"
 #define NM_CLIENT_WWAN_HARDWARE_ENABLED "wwan-hardware-enabled"
-#define NM_CLIENT_WIMAX_ENABLED "wimax-enabled"
-#define NM_CLIENT_WIMAX_HARDWARE_ENABLED "wimax-hardware-enabled"
 #define NM_CLIENT_ACTIVE_CONNECTIONS "active-connections"
 
 /* Permissions */
@@ -59,16 +56,9 @@ typedef enum {
 	NM_CLIENT_PERMISSION_ENABLE_DISABLE_NETWORK = 1,
 	NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIFI = 2,
 	NM_CLIENT_PERMISSION_ENABLE_DISABLE_WWAN = 3,
-	NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIMAX = 4,
-	NM_CLIENT_PERMISSION_SLEEP_WAKE = 5,
-	NM_CLIENT_PERMISSION_NETWORK_CONTROL = 6,
-	NM_CLIENT_PERMISSION_WIFI_SHARE_PROTECTED = 7,
-	NM_CLIENT_PERMISSION_WIFI_SHARE_OPEN = 8,
-	NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM = 9,
-	NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN = 10,
-	NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME = 11,
-
-	NM_CLIENT_PERMISSION_LAST = NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME
+	NM_CLIENT_PERMISSION_USE_USER_CONNECTIONS = 4,
+
+	NM_CLIENT_PERMISSION_LAST = NM_CLIENT_PERMISSION_USE_USER_CONNECTIONS
 } NMClientPermission;
 
 typedef enum {
@@ -89,9 +79,6 @@ typedef struct {
 	/* Signals */
 	void (*device_added) (NMClient *client, NMDevice *device);
 	void (*device_removed) (NMClient *client, NMDevice *device);
-	void (*permission_changed) (NMClient *client,
-	                            NMClientPermission permission,
-	                            NMClientPermissionResult result);
 
 	/* Padding for future expansion */
 	void (*_reserved1) (void);
@@ -109,30 +96,15 @@ NMClient *nm_client_new (void);
 const GPtrArray *nm_client_get_devices    (NMClient *client);
 NMDevice *nm_client_get_device_by_path    (NMClient *client, const char *object_path);
 
-typedef void (*NMClientActivateFn) (NMClient *client,
-                                    NMActiveConnection *active_connection,
-                                    GError *error,
-                                    gpointer user_data);
+typedef void (*NMClientActivateDeviceFn) (gpointer user_data, const char *object_path, GError *error);
 
 void nm_client_activate_connection (NMClient *client,
-                                    NMConnection *connection,
-                                    NMDevice *device,
-                                    const char *specific_object,
-                                    NMClientActivateFn callback,
-                                    gpointer user_data);
-
-typedef void (*NMClientAddActivateFn) (NMClient *client,
-                                       NMActiveConnection *connection,
-                                       const char *new_connection_path,
-                                       GError *error,
-                                       gpointer user_data);
-
-void nm_client_add_and_activate_connection (NMClient *client,
-                                            NMConnection *partial,
-                                            NMDevice *device,
-                                            const char *specific_object,
-                                            NMClientAddActivateFn callback,
-                                            gpointer user_data);
+						  const char *service_name,
+						  const char *connection_path,
+						  NMDevice *device,
+						  const char *specific_object,
+						  NMClientActivateDeviceFn callback,
+						  gpointer user_data);
 
 void nm_client_deactivate_connection (NMClient *client, NMActiveConnection *active);
 
@@ -147,11 +119,6 @@ gboolean  nm_client_wwan_get_enabled (NMClient *client);
 void      nm_client_wwan_set_enabled (NMClient *client, gboolean enabled);
 gboolean  nm_client_wwan_hardware_get_enabled (NMClient *client);
 
-gboolean  nm_client_wimax_get_enabled (NMClient *client);
-void      nm_client_wimax_set_enabled (NMClient *client, gboolean enabled);
-gboolean  nm_client_wimax_hardware_get_enabled (NMClient *client);
-
-const char *nm_client_get_version        (NMClient *client);
 NMState   nm_client_get_state            (NMClient *client);
 gboolean  nm_client_get_manager_running  (NMClient *client);
 const GPtrArray *nm_client_get_active_connections (NMClient *client);
diff --git a/libnm-glib/nm-device-bt.c b/libnm-glib/nm-device-bt.c
index 1209f61a..0451f2b0 100644
--- a/libnm-glib/nm-device-bt.c
+++ b/libnm-glib/nm-device-bt.c
@@ -18,16 +18,9 @@
  * Boston, MA 02110-1301 USA.
  *
  * Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2011 Red Hat, Inc.
+ * Copyright (C) 2007 - 2009 Red Hat, Inc.
  */
 
-#include <config.h>
-#include <string.h>
-#include <netinet/ether.h>
-
-#include <nm-setting-connection.h>
-#include <nm-setting-bluetooth.h>
-
 #include "nm-device-bt.h"
 #include "nm-device-private.h"
 #include "nm-object-private.h"
@@ -69,7 +62,7 @@ enum {
  *
  * Creates a new #NMDeviceBt.
  *
- * Returns: (transfer full): a new device
+ * Returns: a new device
  **/
 GObject *
 nm_device_bt_new (DBusGConnection *connection, const char *path)
@@ -103,8 +96,7 @@ nm_device_bt_get_hw_address (NMDeviceBt *device)
 	if (!priv->hw_address) {
 		priv->hw_address = _nm_object_get_string_property (NM_OBJECT (device),
 		                                                   NM_DBUS_INTERFACE_DEVICE_BLUETOOTH,
-		                                                   DBUS_PROP_HW_ADDRESS,
-		                                                   NULL);
+		                                                   DBUS_PROP_HW_ADDRESS);
 	}
 
 	return priv->hw_address;
@@ -129,8 +121,7 @@ nm_device_bt_get_name (NMDeviceBt *device)
 	if (!priv->name) {
 		priv->name = _nm_object_get_string_property (NM_OBJECT (device),
 		                                             NM_DBUS_INTERFACE_DEVICE_BLUETOOTH,
-		                                             DBUS_PROP_NAME,
-		                                             NULL);
+		                                             DBUS_PROP_NAME);
 	}
 
 	return priv->name;
@@ -155,86 +146,13 @@ nm_device_bt_get_capabilities (NMDeviceBt *device)
 	if (!priv->bt_capabilities_valid) {
 		priv->bt_capabilities = _nm_object_get_uint_property (NM_OBJECT (device),
 		                                                      NM_DBUS_INTERFACE_DEVICE_BLUETOOTH,
-		                                                      DBUS_PROP_BT_CAPABILITIES,
-		                                                      NULL);
+		                                                      DBUS_PROP_BT_CAPABILITIES);
 		priv->bt_capabilities_valid = TRUE;
 	}
 
 	return priv->bt_capabilities;
 }
 
-static NMBluetoothCapabilities
-get_connection_bt_type (NMConnection *connection)
-{
-	NMSettingBluetooth *s_bt;
-	const char *bt_type;
-
-	s_bt = (NMSettingBluetooth *) nm_connection_get_setting (connection, NM_TYPE_SETTING_BLUETOOTH);
-	if (!s_bt)
-		return NM_BT_CAPABILITY_NONE;
-
-	bt_type = nm_setting_bluetooth_get_connection_type (s_bt);
-	g_assert (bt_type);
-
-	if (!strcmp (bt_type, NM_SETTING_BLUETOOTH_TYPE_DUN))
-		return NM_BT_CAPABILITY_DUN;
-	else if (!strcmp (bt_type, NM_SETTING_BLUETOOTH_TYPE_PANU))
-		return NM_BT_CAPABILITY_NAP;
-
-	return NM_BT_CAPABILITY_NONE;
-}
-
-static GSList *
-filter_connections (NMDevice *device, const GSList *connections)
-{
-	GSList *filtered = NULL;
-	const GSList *iter;
-
-	for (iter = connections; iter; iter = g_slist_next (iter)) {
-		NMConnection *candidate = NM_CONNECTION (iter->data);
-		NMSettingConnection *s_con;
-		NMSettingBluetooth *s_bt;
-		const char *ctype;
-		const GByteArray *mac;
-		const char *hw_str;
-		struct ether_addr *hw_mac;
-		NMBluetoothCapabilities dev_caps;
-		NMBluetoothCapabilities bt_type;
-
-		s_con = (NMSettingConnection *) nm_connection_get_setting (candidate, NM_TYPE_SETTING_CONNECTION);
-		g_assert (s_con);
-
-		ctype = nm_setting_connection_get_connection_type (s_con);
-		if (strcmp (ctype, NM_SETTING_BLUETOOTH_SETTING_NAME) != 0)
-			continue;
-
-		s_bt = (NMSettingBluetooth *) nm_connection_get_setting (candidate, NM_TYPE_SETTING_BLUETOOTH);
-		if (!s_bt)
-			continue;
-
-		/* Check BT address */
-		hw_str = nm_device_bt_get_hw_address (NM_DEVICE_BT (device));
-		if (hw_str) {
-			hw_mac = ether_aton (hw_str);
-			mac = nm_setting_bluetooth_get_bdaddr (s_bt);
-			if (mac && hw_mac && memcmp (mac->data, hw_mac->ether_addr_octet, ETH_ALEN))
-				continue;
-		}
-
-		dev_caps = nm_device_bt_get_capabilities (NM_DEVICE_BT (device));
-		bt_type = get_connection_bt_type (candidate);
-		if (!(bt_type & dev_caps))
-			continue;
-
-		/* Connection applies to this device */
-		filtered = g_slist_prepend (filtered, candidate);
-	}
-
-	return g_slist_reverse (filtered);
-}
-
-/************************************************************/
-
 static void
 nm_device_bt_init (NMDeviceBt *device)
 {
@@ -332,19 +250,17 @@ get_property (GObject *object,
 }
 
 static void
-nm_device_bt_class_init (NMDeviceBtClass *bt_class)
+nm_device_bt_class_init (NMDeviceBtClass *device_class)
 {
-	GObjectClass *object_class = G_OBJECT_CLASS (bt_class);
-	NMDeviceClass *device_class = NM_DEVICE_CLASS (bt_class);
+	GObjectClass *object_class = G_OBJECT_CLASS (device_class);
 
-	g_type_class_add_private (bt_class, sizeof (NMDeviceBtPrivate));
+	g_type_class_add_private (device_class, sizeof (NMDeviceBtPrivate));
 
 	/* virtual methods */
 	object_class->constructor = constructor;
 	object_class->dispose = dispose;
 	object_class->finalize = finalize;
 	object_class->get_property = get_property;
-	device_class->filter_connections = filter_connections;
 
 	/* properties */
 
diff --git a/libnm-glib/nm-device-ethernet.c b/libnm-glib/nm-device-ethernet.c
index 932c6bda..44b27427 100644
--- a/libnm-glib/nm-device-ethernet.c
+++ b/libnm-glib/nm-device-ethernet.c
@@ -18,17 +18,9 @@
  * Boston, MA 02110-1301 USA.
  *
  * Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2011 Red Hat, Inc.
+ * Copyright (C) 2007 - 2010 Red Hat, Inc.
  */
 
-#include <config.h>
-#include <string.h>
-#include <netinet/ether.h>
-
-#include <nm-setting-connection.h>
-#include <nm-setting-wired.h>
-#include <nm-setting-pppoe.h>
-
 #include "nm-device-ethernet.h"
 #include "nm-device-private.h"
 #include "nm-object-private.h"
@@ -73,7 +65,7 @@ enum {
  *
  * Creates a new #NMDeviceEthernet.
  *
- * Returns: (transfer full): a new device
+ * Returns: a new device
  **/
 GObject *
 nm_device_ethernet_new (DBusGConnection *connection, const char *path)
@@ -107,8 +99,7 @@ nm_device_ethernet_get_hw_address (NMDeviceEthernet *device)
 	if (!priv->hw_address) {
 		priv->hw_address = _nm_object_get_string_property (NM_OBJECT (device),
 		                                                  NM_DBUS_INTERFACE_DEVICE_WIRED,
-		                                                  DBUS_PROP_HW_ADDRESS,
-		                                                  NULL);
+		                                                  DBUS_PROP_HW_ADDRESS);
 	}
 
 	return priv->hw_address;
@@ -134,8 +125,7 @@ nm_device_ethernet_get_permanent_hw_address (NMDeviceEthernet *device)
 	if (!priv->perm_hw_address) {
 		priv->perm_hw_address = _nm_object_get_string_property (NM_OBJECT (device),
 		                                                        NM_DBUS_INTERFACE_DEVICE_WIRED,
-		                                                        DBUS_PROP_PERM_HW_ADDRESS,
-		                                                        NULL);
+		                                                        DBUS_PROP_PERM_HW_ADDRESS);
 	}
 
 	return priv->perm_hw_address;
@@ -160,8 +150,7 @@ nm_device_ethernet_get_speed (NMDeviceEthernet *device)
 	if (!priv->speed) {
 		priv->speed = _nm_object_get_uint_property (NM_OBJECT (device),
 		                                           NM_DBUS_INTERFACE_DEVICE_WIRED,
-		                                           DBUS_PROP_SPEED,
-		                                           NULL);
+		                                           DBUS_PROP_SPEED);
 	}
 
 	return priv->speed;
@@ -186,67 +175,13 @@ nm_device_ethernet_get_carrier (NMDeviceEthernet *device)
 	if (!priv->carrier_valid) {
 		priv->carrier = _nm_object_get_boolean_property (NM_OBJECT (device),
 		                                                NM_DBUS_INTERFACE_DEVICE_WIRED,
-		                                                DBUS_PROP_CARRIER,
-		                                                NULL);
+		                                                DBUS_PROP_CARRIER);
 		priv->carrier_valid = TRUE;
 	}
 
 	return priv->carrier;
 }
 
-static GSList *
-filter_connections (NMDevice *device, const GSList *connections)
-{
-	GSList *filtered = NULL;
-	const GSList *iter;
-
-	for (iter = connections; iter; iter = g_slist_next (iter)) {
-		NMConnection *candidate = NM_CONNECTION (iter->data);
-		NMSettingConnection *s_con;
-		NMSettingWired *s_wired;
-		const char *ctype;
-		gboolean is_pppoe = FALSE;
-
-		s_con = (NMSettingConnection *) nm_connection_get_setting (candidate, NM_TYPE_SETTING_CONNECTION);
-		g_assert (s_con);
-
-		ctype = nm_setting_connection_get_connection_type (s_con);
-		if (!strcmp (ctype, NM_SETTING_PPPOE_SETTING_NAME))
-			is_pppoe = TRUE;
-		else if (strcmp (ctype, NM_SETTING_WIRED_SETTING_NAME) != 0)
-			continue;
-
-		s_wired = (NMSettingWired *) nm_connection_get_setting (candidate, NM_TYPE_SETTING_WIRED);
-		/* Wired setting optional for PPPoE */
-		if (!is_pppoe && !s_wired)
-			continue;
-
-		if (s_wired) {
-			const GByteArray *mac;
-			const char *perm_str;
-			struct ether_addr *perm_mac;
-
-			/* FIXME: filter using s390 subchannels when they are exported over the bus */
-
-			/* Check MAC address */
-			perm_str = nm_device_ethernet_get_permanent_hw_address (NM_DEVICE_ETHERNET (device));
-			if (perm_str) {
-				perm_mac = ether_aton (perm_str);
-				mac = nm_setting_wired_get_mac_address (s_wired);
-				if (mac && perm_mac && memcmp (mac->data, perm_mac->ether_addr_octet, ETH_ALEN))
-					continue;
-			}
-		}
-
-		/* Connection applies to this device */
-		filtered = g_slist_prepend (filtered, candidate);
-	}
-
-	return g_slist_reverse (filtered);
-}
-
-/***********************************************************/
-
 static void
 nm_device_ethernet_init (NMDeviceEthernet *device)
 {
@@ -322,8 +257,11 @@ finalize (GObject *object)
 {
 	NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (object);
 
-	g_free (priv->hw_address);
-	g_free (priv->perm_hw_address);
+	if (priv->hw_address)
+		g_free (priv->hw_address);
+
+	if (priv->perm_hw_address)
+		g_free (priv->perm_hw_address);
 
 	G_OBJECT_CLASS (nm_device_ethernet_parent_class)->finalize (object);
 }
@@ -356,19 +294,17 @@ get_property (GObject *object,
 }
 
 static void
-nm_device_ethernet_class_init (NMDeviceEthernetClass *eth_class)
+nm_device_ethernet_class_init (NMDeviceEthernetClass *device_class)
 {
-	GObjectClass *object_class = G_OBJECT_CLASS (eth_class);
-	NMDeviceClass *device_class = NM_DEVICE_CLASS (eth_class);
+	GObjectClass *object_class = G_OBJECT_CLASS (device_class);
 
-	g_type_class_add_private (eth_class, sizeof (NMDeviceEthernetPrivate));
+	g_type_class_add_private (device_class, sizeof (NMDeviceEthernetPrivate));
 
 	/* virtual methods */
 	object_class->constructor = constructor;
 	object_class->dispose = dispose;
 	object_class->finalize = finalize;
 	object_class->get_property = get_property;
-	device_class->filter_connections = filter_connections;
 
 	/* properties */
 
diff --git a/libnm-glib/nm-device-modem.c b/libnm-glib/nm-device-modem.c
deleted file mode 100644
index fba0b003..00000000
--- a/libnm-glib/nm-device-modem.c
+++ /dev/null
@@ -1,285 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/*
- * libnm_glib -- Access network status & information from glib applications
- *
- * This library 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 of the License, or (at your option) any later version.
- *
- * This library 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 this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2011 Red Hat, Inc.
- * Copyright (C) 2008 Novell, Inc.
- */
-
-#include <config.h>
-#include <string.h>
-
-#include <nm-setting-connection.h>
-#include <nm-setting-gsm.h>
-#include <nm-setting-cdma.h>
-
-#include "nm-device-modem.h"
-#include "nm-device-private.h"
-#include "nm-object-private.h"
-#include "nm-marshal.h"
-
-G_DEFINE_TYPE (NMDeviceModem, nm_device_modem, NM_TYPE_DEVICE)
-
-#define NM_DEVICE_MODEM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
-                                        NM_TYPE_DEVICE_MODEM, \
-                                        NMDeviceModemPrivate))
-
-typedef struct {
-	DBusGProxy *proxy;
-
-	NMDeviceModemCapabilities caps;
-	NMDeviceModemCapabilities current_caps;
-
-	gboolean disposed;
-} NMDeviceModemPrivate;
-
-enum {
-	PROP_0,
-	PROP_MODEM_CAPS,
-	PROP_CURRENT_CAPS,
-	LAST_PROP
-};
-
-#define DBUS_PROP_MODEM_CAPS "ModemCapabilities"
-#define DBUS_PROP_CURRENT_CAPS "CurrentCapabilities"
-
-/**
- * nm_device_modem_get_modem_capabilities:
- * @self: a #NMDeviceModem
- *
- * Returns a bitfield of the generic access technology families the modem
- * supports.  Not all capabilities are available concurrently however; some
- * may require a firmware reload or reinitialization.
- *
- * Returns: the generic access technology families the modem supports
- **/
-NMDeviceModemCapabilities
-nm_device_modem_get_modem_capabilities (NMDeviceModem *self)
-{
-	NMDeviceModemPrivate *priv;
-
-	g_return_val_if_fail (self != NULL, NM_DEVICE_MODEM_CAPABILITY_NONE);
-	g_return_val_if_fail (NM_IS_DEVICE_MODEM (self), NM_DEVICE_MODEM_CAPABILITY_NONE);
-
-	priv = NM_DEVICE_MODEM_GET_PRIVATE (self);
-	if (!priv->caps) {
-		priv->caps = _nm_object_get_uint_property (NM_OBJECT (self),
-		                                           NM_DBUS_INTERFACE_DEVICE_MODEM,
-		                                           DBUS_PROP_MODEM_CAPS,
-		                                           NULL);
-	}
-
-	return priv->caps;
-}
-
-/**
- * nm_device_modem_get_current_capabilities:
- * @self: a #NMDeviceModem
- *
- * Returns a bitfield of the generic access technology families the modem
- * supports without a firmware reload or reinitialization.  This value
- * represents the network types the modem can immediately connect to.
- *
- * Returns: the generic access technology families the modem supports without
- * a firmware reload or other reinitialization
- **/
-NMDeviceModemCapabilities
-nm_device_modem_get_current_capabilities (NMDeviceModem *self)
-{
-	NMDeviceModemPrivate *priv;
-
-	g_return_val_if_fail (self != NULL, NM_DEVICE_MODEM_CAPABILITY_NONE);
-	g_return_val_if_fail (NM_IS_DEVICE_MODEM (self), NM_DEVICE_MODEM_CAPABILITY_NONE);
-
-	priv = NM_DEVICE_MODEM_GET_PRIVATE (self);
-	if (!priv->current_caps) {
-		priv->current_caps = _nm_object_get_uint_property (NM_OBJECT (self),
-		                                                   NM_DBUS_INTERFACE_DEVICE_MODEM,
-		                                                   DBUS_PROP_CURRENT_CAPS,
-		                                                   NULL);
-	}
-
-	return priv->current_caps;
-}
-
-static GSList *
-filter_connections (NMDevice *device, const GSList *connections)
-{
-	GSList *filtered = NULL;
-	const GSList *iter;
-
-	for (iter = connections; iter; iter = g_slist_next (iter)) {
-		NMConnection *candidate = NM_CONNECTION (iter->data);
-		NMSettingConnection *s_con;
-		NMSettingGsm *s_gsm;
-		NMSettingCdma *s_cdma;
-		const char *ctype;
-		NMDeviceModemCapabilities current_caps;
-
-		s_con = (NMSettingConnection *) nm_connection_get_setting (candidate, NM_TYPE_SETTING_CONNECTION);
-		g_assert (s_con);
-
-		ctype = nm_setting_connection_get_connection_type (s_con);
-		if (   strcmp (ctype, NM_SETTING_GSM_SETTING_NAME) != 0
-		    && strcmp (ctype, NM_SETTING_CDMA_SETTING_NAME) != 0)
-			continue;
-
-		s_gsm = (NMSettingGsm *) nm_connection_get_setting (candidate, NM_TYPE_SETTING_GSM);
-		s_cdma = (NMSettingCdma *) nm_connection_get_setting (candidate, NM_TYPE_SETTING_CDMA);
-		if (!s_cdma && !s_gsm)
-			continue;
-
-		current_caps = nm_device_modem_get_current_capabilities (NM_DEVICE_MODEM (device));
-		if (   (s_gsm && (current_caps & NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS))
-		    || (s_cdma && (current_caps & NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO))) {
-			/* Connection applies to this device */
-			filtered = g_slist_prepend (filtered, candidate);
-		}
-	}
-
-	return g_slist_reverse (filtered);
-}
-
-/*******************************************************************/
-
-static void
-register_for_property_changed (NMDeviceModem *device)
-{
-	NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (device);
-	const NMPropertiesChangedInfo property_changed_info[] = {
-		{ NM_DEVICE_MODEM_MODEM_CAPABILITIES,   _nm_object_demarshal_generic, &priv->caps },
-		{ NM_DEVICE_MODEM_CURRENT_CAPABILITIES, _nm_object_demarshal_generic, &priv->current_caps },
-		{ NULL },
-	};
-
-	_nm_object_handle_properties_changed (NM_OBJECT (device),
-	                                      priv->proxy,
-	                                      property_changed_info);
-}
-
-static GObject*
-constructor (GType type,
-             guint n_construct_params,
-             GObjectConstructParam *construct_params)
-{
-	GObject *object;
-	NMDeviceModemPrivate *priv;
-
-	object = G_OBJECT_CLASS (nm_device_modem_parent_class)->constructor (type,
-	                                                                     n_construct_params,
-	                                                                     construct_params);
-	if (object) {
-		priv = NM_DEVICE_MODEM_GET_PRIVATE (object);
-
-		priv->proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (NM_OBJECT (object)),
-		                                         NM_DBUS_SERVICE,
-		                                         nm_object_get_path (NM_OBJECT (object)),
-		                                         NM_DBUS_INTERFACE_DEVICE_MODEM);
-
-		register_for_property_changed (NM_DEVICE_MODEM (object));
-	}
-
-	return object;
-}
-
-static void
-nm_device_modem_init (NMDeviceModem *device)
-{
-}
-
-static void
-get_property (GObject *object,
-              guint prop_id,
-              GValue *value,
-              GParamSpec *pspec)
-{
-	NMDeviceModem *self = NM_DEVICE_MODEM (object);
-
-	switch (prop_id) {
-	case PROP_MODEM_CAPS:
-		g_value_set_uint (value, nm_device_modem_get_modem_capabilities (self));
-		break;
-	case PROP_CURRENT_CAPS:
-		g_value_set_uint (value, nm_device_modem_get_current_capabilities (self));
-		break;
-	default:
-		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-		break;
-	}
-}
-
-static void
-dispose (GObject *object)
-{
-	NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (object);
-
-	if (priv->disposed) {
-		G_OBJECT_CLASS (nm_device_modem_parent_class)->dispose (object);
-		return;
-	}
-
-	priv->disposed = TRUE;
-
-	g_object_unref (priv->proxy);
-
-	G_OBJECT_CLASS (nm_device_modem_parent_class)->dispose (object);
-}
-
-static void
-nm_device_modem_class_init (NMDeviceModemClass *modem_class)
-{
-	GObjectClass *object_class = G_OBJECT_CLASS (modem_class);
-	NMDeviceClass *device_class = NM_DEVICE_CLASS (modem_class);
-
-	g_type_class_add_private (modem_class, sizeof (NMDeviceModemPrivate));
-
-	/* virtual methods */
-	object_class->constructor = constructor;
-	object_class->get_property = get_property;
-	object_class->dispose = dispose;
-	device_class->filter_connections = filter_connections;
-
-	/**
-	 * NMDeviceModem:modem-capabilities:
-	 *
-	 * The generic family of access technologies the modem supports.  Not all
-	 * capabilities are available at the same time however; some modems require
-	 * a firmware reload or other reinitialization to switch between eg
-	 * CDMA/EVDO and GSM/UMTS.
-	 **/
-	g_object_class_install_property (object_class, PROP_MODEM_CAPS,
-		g_param_spec_uint (NM_DEVICE_MODEM_MODEM_CAPABILITIES,
-		                   "Modem capabilities",
-		                   "Modem capabilities",
-		                   0, G_MAXUINT32, 0,
-		                   G_PARAM_READABLE));
-
-	/**
-	 * NMDeviceModem:current-capabilities:
-	 *
-	 * The generic family of access technologies the modem currently supports
-	 * without a firmware reload or reinitialization.
-	 **/
-	g_object_class_install_property (object_class, PROP_CURRENT_CAPS,
-		g_param_spec_uint (NM_DEVICE_MODEM_CURRENT_CAPABILITIES,
-		                   "Current capabilities",
-		                   "Current capabilities",
-		                   0, G_MAXUINT32, 0,
-		                   G_PARAM_READABLE));
-}
-
diff --git a/libnm-glib/nm-device-wifi.c b/libnm-glib/nm-device-wifi.c
index c58e70d3..3d170239 100644
--- a/libnm-glib/nm-device-wifi.c
+++ b/libnm-glib/nm-device-wifi.c
@@ -18,16 +18,10 @@
  * Boston, MA 02110-1301 USA.
  *
  * Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2011 Red Hat, Inc.
+ * Copyright (C) 2007 - 2010 Red Hat, Inc.
  */
 
-#include <config.h>
 #include <string.h>
-#include <netinet/ether.h>
-
-#include <nm-setting-connection.h>
-#include <nm-setting-wireless.h>
-#include <nm-setting-wireless-security.h>
 
 #include "nm-device-wifi.h"
 #include "nm-device-private.h"
@@ -56,7 +50,7 @@ typedef struct {
 	guint32 rate;
 	NMAccessPoint *active_ap;
 	gboolean null_active_ap;
-	NMDeviceWifiCapabilities wireless_caps;
+	guint32 wireless_caps;
 	GPtrArray *aps;
 
 	gboolean wireless_enabled;
@@ -97,7 +91,7 @@ static guint signals[LAST_SIGNAL] = { 0 };
  *
  * Creates a new #NMDeviceWifi.
  *
- * Returns: (transfer full): a new WiFi device
+ * Returns: a new device
  **/
 GObject *
 nm_device_wifi_new (DBusGConnection *connection, const char *path)
@@ -131,8 +125,7 @@ nm_device_wifi_get_hw_address (NMDeviceWifi *device)
 	if (!priv->hw_address) {
 		priv->hw_address = _nm_object_get_string_property (NM_OBJECT (device),
 		                                                  NM_DBUS_INTERFACE_DEVICE_WIRELESS,
-		                                                  DBUS_PROP_HW_ADDRESS,
-		                                                  NULL);
+		                                                  DBUS_PROP_HW_ADDRESS);
 	}
 
 	return priv->hw_address;
@@ -158,8 +151,7 @@ nm_device_wifi_get_permanent_hw_address (NMDeviceWifi *device)
 	if (!priv->perm_hw_address) {
 		priv->perm_hw_address = _nm_object_get_string_property (NM_OBJECT (device),
 		                                                        NM_DBUS_INTERFACE_DEVICE_WIRELESS,
-		                                                        DBUS_PROP_PERM_HW_ADDRESS,
-		                                                        NULL);
+		                                                        DBUS_PROP_PERM_HW_ADDRESS);
 	}
 
 	return priv->perm_hw_address;
@@ -184,8 +176,7 @@ nm_device_wifi_get_mode (NMDeviceWifi *device)
 	if (!priv->mode) {
 		priv->mode = _nm_object_get_uint_property (NM_OBJECT (device),
 		                                          NM_DBUS_INTERFACE_DEVICE_WIRELESS,
-		                                          DBUS_PROP_MODE,
-		                                          NULL);
+		                                          DBUS_PROP_MODE);
 	}
 
 	return priv->mode;
@@ -209,22 +200,22 @@ nm_device_wifi_get_bitrate (NMDeviceWifi *device)
 
 	state = nm_device_get_state (NM_DEVICE (device));
 	switch (state) {
+	case NM_DEVICE_STATE_PREPARE:
+	case NM_DEVICE_STATE_CONFIG:
+	case NM_DEVICE_STATE_NEED_AUTH:
 	case NM_DEVICE_STATE_IP_CONFIG:
-	case NM_DEVICE_STATE_IP_CHECK:
-	case NM_DEVICE_STATE_SECONDARIES:
 	case NM_DEVICE_STATE_ACTIVATED:
-	case NM_DEVICE_STATE_DEACTIVATING:
 		break;
 	default:
 		return 0;
+		break;
 	}
 
 	priv = NM_DEVICE_WIFI_GET_PRIVATE (device);
 	if (!priv->rate) {
 		priv->rate = _nm_object_get_uint_property (NM_OBJECT (device),
 		                                         NM_DBUS_INTERFACE_DEVICE_WIRELESS,
-		                                         DBUS_PROP_BITRATE,
-		                                         NULL);
+		                                         DBUS_PROP_BITRATE);
 	}
 
 	return priv->rate;
@@ -238,7 +229,7 @@ nm_device_wifi_get_bitrate (NMDeviceWifi *device)
  *
  * Returns: the capabilities
  **/
-NMDeviceWifiCapabilities
+guint32
 nm_device_wifi_get_capabilities (NMDeviceWifi *device)
 {
 	NMDeviceWifiPrivate *priv;
@@ -249,8 +240,7 @@ nm_device_wifi_get_capabilities (NMDeviceWifi *device)
 	if (!priv->wireless_caps) {
 		priv->wireless_caps = _nm_object_get_uint_property (NM_OBJECT (device),
 		                                                   NM_DBUS_INTERFACE_DEVICE_WIRELESS,
-		                                                   DBUS_PROP_WIRELESS_CAPABILITIES,
-		                                                   NULL);
+		                                                   DBUS_PROP_WIRELESS_CAPABILITIES);
 	}
 
 	return priv->wireless_caps;
@@ -262,7 +252,7 @@ nm_device_wifi_get_capabilities (NMDeviceWifi *device)
  *
  * Gets the active #NMAccessPoint.
  *
- * Returns: (transfer none): the access point or %NULL if none is active
+ * Returns: the access point or %NULL if none is active
  **/
 NMAccessPoint *
 nm_device_wifi_get_active_access_point (NMDeviceWifi *device)
@@ -280,10 +270,7 @@ nm_device_wifi_get_active_access_point (NMDeviceWifi *device)
 	case NM_DEVICE_STATE_CONFIG:
 	case NM_DEVICE_STATE_NEED_AUTH:
 	case NM_DEVICE_STATE_IP_CONFIG:
-	case NM_DEVICE_STATE_IP_CHECK:
-	case NM_DEVICE_STATE_SECONDARIES:
 	case NM_DEVICE_STATE_ACTIVATED:
-	case NM_DEVICE_STATE_DEACTIVATING:
 		break;
 	default:
 		return NULL;
@@ -298,8 +285,7 @@ nm_device_wifi_get_active_access_point (NMDeviceWifi *device)
 
 	path = _nm_object_get_object_path_property (NM_OBJECT (device),
 	                                           NM_DBUS_INTERFACE_DEVICE_WIRELESS,
-	                                           DBUS_PROP_ACTIVE_ACCESS_POINT,
-	                                           NULL);
+	                                           DBUS_PROP_ACTIVE_ACCESS_POINT);
 	if (path) {
 		g_value_init (&value, DBUS_TYPE_G_OBJECT_PATH);
 		g_value_take_boxed (&value, path);
@@ -316,8 +302,7 @@ nm_device_wifi_get_active_access_point (NMDeviceWifi *device)
  *
  * Gets all the scanned access points of the #NMDeviceWifi.
  *
- * Returns: (element-type NMClient.AccessPoint): a #GPtrArray containing all the
- * scanned #NMAccessPoint<!-- -->s.
+ * Returns: a #GPtrArray containing all the scanned #NMAccessPoint<!-- -->s.
  * The returned array is owned by the client and should not be modified.
  **/
 const GPtrArray *
@@ -357,7 +342,7 @@ nm_device_wifi_get_access_points (NMDeviceWifi *device)
  *
  * Gets a #NMAccessPoint by path.
  *
- * Returns: (transfer none): the access point or %NULL if none is found.
+ * Returns: the access point or %NULL if none is found.
  **/
 NMAccessPoint *
 nm_device_wifi_get_access_point_by_path (NMDeviceWifi *device,
@@ -401,7 +386,7 @@ access_point_added_proxy (DBusGProxy *proxy, char *path, gpointer user_data)
 		priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
 		ap = G_OBJECT (_nm_object_cache_get (path));
 		if (ap) {
-			g_ptr_array_add (priv->aps, ap);
+			g_ptr_array_add (priv->aps, g_object_ref (ap));
 		} else {
 			ap = G_OBJECT (nm_access_point_new (connection, path));
 			if (ap)
@@ -485,90 +470,6 @@ _nm_device_wifi_set_wireless_enabled (NMDeviceWifi *device,
 		clean_up_aps (device, TRUE);
 }
 
-#define WPA_CAPS (NM_WIFI_DEVICE_CAP_CIPHER_TKIP | \
-                  NM_WIFI_DEVICE_CAP_CIPHER_CCMP | \
-                  NM_WIFI_DEVICE_CAP_WPA | \
-                  NM_WIFI_DEVICE_CAP_RSN)
-
-#define RSN_CAPS (NM_WIFI_DEVICE_CAP_CIPHER_CCMP | NM_WIFI_DEVICE_CAP_RSN)
-
-static gboolean
-has_proto (NMSettingWirelessSecurity *s_wsec, const char *proto)
-{
-	int i;
-
-	for (i = 0; i < nm_setting_wireless_security_get_num_protos (s_wsec); i++) {
-		if (g_strcmp0 (proto, nm_setting_wireless_security_get_proto (s_wsec, i)) == 0)
-			return TRUE;
-	}
-	return FALSE;
-}
-
-static GSList *
-filter_connections (NMDevice *device, const GSList *connections)
-{
-	GSList *filtered = NULL;
-	const GSList *iter;
-
-	for (iter = connections; iter; iter = g_slist_next (iter)) {
-		NMConnection *candidate = NM_CONNECTION (iter->data);
-		NMSettingConnection *s_con;
-		NMSettingWireless *s_wifi;
-		NMSettingWirelessSecurity *s_wsec;
-		const char *ctype;
-		const GByteArray *mac;
-		const char *hw_str;
-		struct ether_addr *hw_mac;
-		NMDeviceWifiCapabilities wifi_caps;
-		const char *key_mgmt;
-
-		s_con = (NMSettingConnection *) nm_connection_get_setting (candidate, NM_TYPE_SETTING_CONNECTION);
-		g_assert (s_con);
-
-		ctype = nm_setting_connection_get_connection_type (s_con);
-		if (strcmp (ctype, NM_SETTING_WIRELESS_SETTING_NAME) != 0)
-			continue;
-
-		s_wifi = (NMSettingWireless *) nm_connection_get_setting (candidate, NM_TYPE_SETTING_WIRELESS);
-		if (!s_wifi)
-			continue;
-
-		/* Check MAC address */
-		hw_str = nm_device_wifi_get_permanent_hw_address (NM_DEVICE_WIFI (device));
-		if (hw_str) {
-			hw_mac = ether_aton (hw_str);
-			mac = nm_setting_wireless_get_mac_address (s_wifi);
-			if (mac && hw_mac && memcmp (mac->data, hw_mac->ether_addr_octet, ETH_ALEN))
-				continue;
-		}
-
-		/* Check device capabilities; we assume all devices can do WEP at least */
-		wifi_caps = nm_device_wifi_get_capabilities (NM_DEVICE_WIFI (device));
-
-		s_wsec = (NMSettingWirelessSecurity *) nm_connection_get_setting (candidate, NM_TYPE_SETTING_WIRELESS_SECURITY);
-		if (s_wsec) {
-			/* Connection has security, verify it against the device's capabilities */
-			key_mgmt = nm_setting_wireless_security_get_key_mgmt (s_wsec);
-			if (   !g_strcmp0 (key_mgmt, "wpa-none")
-			    || !g_strcmp0 (key_mgmt, "wpa-psk")
-			    || !g_strcmp0 (key_mgmt, "wpa-eap")) {
-
-				/* Is device only WEP capable? */
-				if (!(wifi_caps & WPA_CAPS))
-					continue;
-
-				/* Make sure WPA2/RSN-only connections don't get chosen for WPA-only cards */
-				if (has_proto (s_wsec, "rsn") && !has_proto (s_wsec, "wpa") && !(wifi_caps & RSN_CAPS))
-					continue;
-			}
-		}
-
-		/* Connection applies to this device */
-		filtered = g_slist_prepend (filtered, candidate);
-	}
-
-	return g_slist_reverse (filtered);
-}
 
 /**************************************************************/
 
@@ -659,7 +560,9 @@ demarshal_active_ap (NMObject *object, GParamSpec *pspec, GValue *value, gpointe
 			priv->null_active_ap = TRUE;
 		else {
 			ap = NM_ACCESS_POINT (_nm_object_cache_get (path));
-			if (!ap) {
+			if (ap)
+				ap = g_object_ref (ap);
+			else {
 				connection = nm_object_get_connection (object);
 				ap = NM_ACCESS_POINT (nm_access_point_new (connection, path));
 			}
@@ -765,26 +668,27 @@ finalize (GObject *object)
 {
 	NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (object);
 
-	g_free (priv->hw_address);
-	g_free (priv->perm_hw_address);
+	if (priv->hw_address)
+		g_free (priv->hw_address);
+
+	if (priv->perm_hw_address)
+		g_free (priv->perm_hw_address);
 
 	G_OBJECT_CLASS (nm_device_wifi_parent_class)->finalize (object);
 }
 
 static void
-nm_device_wifi_class_init (NMDeviceWifiClass *wifi_class)
+nm_device_wifi_class_init (NMDeviceWifiClass *device_class)
 {
-	GObjectClass *object_class = G_OBJECT_CLASS (wifi_class);
-	NMDeviceClass *device_class = NM_DEVICE_CLASS (wifi_class);
+	GObjectClass *object_class = G_OBJECT_CLASS (device_class);
 
-	g_type_class_add_private (wifi_class, sizeof (NMDeviceWifiPrivate));
+	g_type_class_add_private (device_class, sizeof (NMDeviceWifiPrivate));
 
 	/* virtual methods */
 	object_class->constructor = constructor;
 	object_class->get_property = get_property;
 	object_class->dispose = dispose;
 	object_class->finalize = finalize;
-	device_class->filter_connections = filter_connections;
 
 	/* properties */
 
diff --git a/libnm-glib/nm-device-wifi.h b/libnm-glib/nm-device-wifi.h
index fb2ab27d..21f3558a 100644
--- a/libnm-glib/nm-device-wifi.h
+++ b/libnm-glib/nm-device-wifi.h
@@ -67,17 +67,17 @@ GType nm_device_wifi_get_type (void);
 
 GObject *nm_device_wifi_new (DBusGConnection *connection, const char *path);
 
-const char *             nm_device_wifi_get_hw_address           (NMDeviceWifi *device);
-const char *             nm_device_wifi_get_permanent_hw_address (NMDeviceWifi *device);
-NM80211Mode              nm_device_wifi_get_mode                 (NMDeviceWifi *device);
-guint32                  nm_device_wifi_get_bitrate              (NMDeviceWifi *device);
-NMDeviceWifiCapabilities nm_device_wifi_get_capabilities         (NMDeviceWifi *device);
-NMAccessPoint *          nm_device_wifi_get_active_access_point  (NMDeviceWifi *device);
+const char *    nm_device_wifi_get_hw_address           (NMDeviceWifi *device);
+const char *    nm_device_wifi_get_permanent_hw_address (NMDeviceWifi *device);
+NM80211Mode     nm_device_wifi_get_mode                 (NMDeviceWifi *device);
+guint32         nm_device_wifi_get_bitrate              (NMDeviceWifi *device);
+guint32         nm_device_wifi_get_capabilities         (NMDeviceWifi *device);
+NMAccessPoint * nm_device_wifi_get_active_access_point  (NMDeviceWifi *device);
 
-NMAccessPoint *          nm_device_wifi_get_access_point_by_path (NMDeviceWifi *device,
-                                                                  const char *path);
+NMAccessPoint * nm_device_wifi_get_access_point_by_path (NMDeviceWifi *device,
+                                                         const char *path);
 
-const GPtrArray *        nm_device_wifi_get_access_points        (NMDeviceWifi *device);
+const GPtrArray *nm_device_wifi_get_access_points       (NMDeviceWifi *device);
 
 G_END_DECLS
 
diff --git a/libnm-glib/nm-device-wimax.c b/libnm-glib/nm-device-wimax.c
deleted file mode 100644
index 7278a471..00000000
--- a/libnm-glib/nm-device-wimax.c
+++ /dev/null
@@ -1,911 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/*
- * libnm_glib -- Access network status & information from glib applications
- *
- * This library 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 of the License, or (at your option) any later version.
- *
- * This library 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 this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2011 Red Hat, Inc.
- * Copyright (C) 2009 Novell, Inc.
- */
-
-#include <config.h>
-#include <string.h>
-#include <netinet/ether.h>
-
-#include <nm-setting-connection.h>
-#include <nm-setting-wimax.h>
-
-#include "nm-device-wimax.h"
-#include "nm-object-private.h"
-#include "nm-object-cache.h"
-#include "nm-dbus-glib-types.h"
-#include "nm-types-private.h"
-
-#include "nm-device-wimax-bindings.h"
-
-G_DEFINE_TYPE (NMDeviceWimax, nm_device_wimax, NM_TYPE_DEVICE)
-
-#define NM_DEVICE_WIMAX_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_WIMAX, NMDeviceWimaxPrivate))
-
-static gboolean demarshal_active_nsp (NMObject *object, GParamSpec *pspec, GValue *value, gpointer field);
-
-void _nm_device_wimax_set_wireless_enabled (NMDeviceWimax *wimax, gboolean enabled);
-
-typedef struct {
-	gboolean disposed;
-	DBusGProxy *proxy;
-
-	char *hw_address;
-	NMWimaxNsp *active_nsp;
-	gboolean null_active_nsp;
-	GPtrArray *nsps;
-
-	guint center_freq;
-	gint rssi;
-	gint cinr;
-	gint tx_power;
-	char *bsid;
-} NMDeviceWimaxPrivate;
-
-enum {
-	PROP_0,
-	PROP_HW_ADDRESS,
-	PROP_ACTIVE_NSP,
-	PROP_CENTER_FREQ,
-	PROP_RSSI,
-	PROP_CINR,
-	PROP_TX_POWER,
-	PROP_BSID,
-
-	LAST_PROP
-};
-
-#define DBUS_PROP_HW_ADDRESS       "HwAddress"
-#define DBUS_PROP_ACTIVE_NSP       "ActiveNsp"
-#define DBUS_PROP_CENTER_FREQUENCY "CenterFrequency"
-#define DBUS_PROP_RSSI             "Rssi"
-#define DBUS_PROP_CINR             "Cinr"
-#define DBUS_PROP_TX_POWER         "TxPower"
-#define DBUS_PROP_BSID             "Bsid"
-
-enum {
-	NSP_ADDED,
-	NSP_REMOVED,
-
-	LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-/**
- * nm_device_wimax_new:
- * @connection: the #DBusGConnection
- * @path: the D-Bus object path of the WiMAX device
- *
- * Creates a new #NMDeviceWimax.
- *
- * Returns: (transfer full): a new WiMAX device
- **/
-GObject *
-nm_device_wimax_new (DBusGConnection *connection, const char *path)
-{
-	g_return_val_if_fail (connection != NULL, NULL);
-	g_return_val_if_fail (path != NULL, NULL);
-
-	return g_object_new (NM_TYPE_DEVICE_WIMAX,
-	                     NM_OBJECT_DBUS_CONNECTION, connection,
-	                     NM_OBJECT_DBUS_PATH, path,
-	                     NULL);
-}
-
-/**
- * nm_device_wimax_get_hw_address:
- * @wimax: a #NMDeviceWimax
- *
- * Gets the hardware (MAC) address of the #NMDeviceWimax
- *
- * Returns: the hardware address. This is the internal string used by the
- *          device, and must not be modified.
- **/
-const char *
-nm_device_wimax_get_hw_address (NMDeviceWimax *wimax)
-{
-	NMDeviceWimaxPrivate *priv;
-
-	g_return_val_if_fail (NM_IS_DEVICE_WIMAX (wimax), NULL);
-
-	priv = NM_DEVICE_WIMAX_GET_PRIVATE (wimax);
-	if (!priv->hw_address) {
-		priv->hw_address = _nm_object_get_string_property (NM_OBJECT (wimax),
-		                                                   NM_DBUS_INTERFACE_DEVICE_WIMAX,
-		                                                   DBUS_PROP_HW_ADDRESS,
-		                                                   NULL);
-	}
-
-	return priv->hw_address;
-}
-
-/**
- * nm_device_wimax_get_active_nsp:
- * @wimax: a #NMDeviceWimax
- *
- * Gets the active #NMWimaxNsp.
- *
- * Returns: (transfer full): the access point or %NULL if none is active
- **/
-NMWimaxNsp *
-nm_device_wimax_get_active_nsp (NMDeviceWimax *wimax)
-{
-	NMDeviceWimaxPrivate *priv;
-	NMDeviceState state;
-	char *path;
-	GValue value = { 0, };
-
-	g_return_val_if_fail (NM_IS_DEVICE_WIMAX (wimax), NULL);
-
-	state = nm_device_get_state (NM_DEVICE (wimax));
-	switch (state) {
-	case NM_DEVICE_STATE_PREPARE:
-	case NM_DEVICE_STATE_CONFIG:
-	case NM_DEVICE_STATE_NEED_AUTH:
-	case NM_DEVICE_STATE_IP_CONFIG:
-	case NM_DEVICE_STATE_IP_CHECK:
-	case NM_DEVICE_STATE_SECONDARIES:
-	case NM_DEVICE_STATE_ACTIVATED:
-	case NM_DEVICE_STATE_DEACTIVATING:
-		break;
-	default:
-		return NULL;
-		break;
-	}
-
-	priv = NM_DEVICE_WIMAX_GET_PRIVATE (wimax);
-	if (priv->active_nsp)
-		return priv->active_nsp;
-	if (priv->null_active_nsp)
-		return NULL;
-
-	path = _nm_object_get_object_path_property (NM_OBJECT (wimax),
-	                                            NM_DBUS_INTERFACE_DEVICE_WIMAX,
-	                                            DBUS_PROP_ACTIVE_NSP,
-	                                            NULL);
-	if (path) {
-		g_value_init (&value, DBUS_TYPE_G_OBJECT_PATH);
-		g_value_take_boxed (&value, path);
-		demarshal_active_nsp (NM_OBJECT (wimax), NULL, &value, &priv->active_nsp);
-		g_value_unset (&value);
-	}
-
-	return priv->active_nsp;
-}
-
-/**
- * nm_device_wimax_get_nsps:
- * @wimax: a #NMDeviceWimax
- *
- * Gets all the scanned NSPs of the #NMDeviceWimax.
- *
- * Returns: (element-type NMClient.WimaxNsp): a #GPtrArray containing
- *          all the scanned #NMWimaxNsp<!-- -->s.
- * The returned array is owned by the client and should not be modified.
- **/
-const GPtrArray *
-nm_device_wimax_get_nsps (NMDeviceWimax *wimax)
-{
-	NMDeviceWimaxPrivate *priv;
-	DBusGConnection *connection;
-	GValue value = { 0, };
-	GError *error = NULL;
-	GPtrArray *temp;
-
-	g_return_val_if_fail (NM_IS_DEVICE_WIMAX (wimax), NULL);
-
-	priv = NM_DEVICE_WIMAX_GET_PRIVATE (wimax);
-	if (priv->nsps)
-		return handle_ptr_array_return (priv->nsps);
-
-	if (!org_freedesktop_NetworkManager_Device_WiMax_get_nsp_list (priv->proxy, &temp, &error)) {
-		g_warning ("%s: error getting NSPs: %s", __func__, error->message);
-		g_error_free (error);
-		return NULL;
-	}
-
-	g_value_init (&value, DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH);
-	g_value_take_boxed (&value, temp);
-	connection = nm_object_get_connection (NM_OBJECT (wimax));
-	_nm_object_array_demarshal (&value, &priv->nsps, connection, nm_wimax_nsp_new);
-	g_value_unset (&value);
-
-	return handle_ptr_array_return (priv->nsps);
-}
-
-/**
- * nm_device_wimax_get_nsp_by_path:
- * @wimax: a #NMDeviceWimax
- * @path: the object path of the NSP
- *
- * Gets a #NMWimaxNsp by path.
- *
- * Returns: (transfer none): the access point or %NULL if none is found.
- **/
-NMWimaxNsp *
-nm_device_wimax_get_nsp_by_path (NMDeviceWimax *wimax,
-								 const char *path)
-{
-	const GPtrArray *nsps;
-	int i;
-	NMWimaxNsp *nsp = NULL;
-
-	g_return_val_if_fail (NM_IS_DEVICE_WIMAX (wimax), NULL);
-	g_return_val_if_fail (path != NULL, NULL);
-
-	nsps = nm_device_wimax_get_nsps (wimax);
-	if (!nsps)
-		return NULL;
-
-	for (i = 0; i < nsps->len; i++) {
-		NMWimaxNsp *candidate = g_ptr_array_index (nsps, i);
-		if (!strcmp (nm_object_get_path (NM_OBJECT (candidate)), path)) {
-			nsp = candidate;
-			break;
-		}
-	}
-
-	return nsp;
-}
-
-static void
-nsp_added_proxy (DBusGProxy *proxy, char *path, gpointer user_data)
-{
-	NMDeviceWimax *self = NM_DEVICE_WIMAX (user_data);
-	NMDeviceWimaxPrivate *priv;
-	GObject *nsp;
-
-	g_return_if_fail (self != NULL);
-
-	nsp = G_OBJECT (nm_device_wimax_get_nsp_by_path (self, path));
-	if (!nsp) {
-		DBusGConnection *connection = nm_object_get_connection (NM_OBJECT (self));
-
-		priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);
-		nsp = G_OBJECT (_nm_object_cache_get (path));
-		if (nsp) {
-			g_ptr_array_add (priv->nsps, nsp);
-		} else {
-			nsp = G_OBJECT (nm_wimax_nsp_new (connection, path));
-			if (nsp)
-				g_ptr_array_add (priv->nsps, nsp);
-		}
-	}
-
-	if (nsp)
-		g_signal_emit (self, signals[NSP_ADDED], 0, nsp);
-}
-
-static void
-nsp_removed_proxy (DBusGProxy *proxy, char *path, gpointer user_data)
-{
-	NMDeviceWimax *self = NM_DEVICE_WIMAX (user_data);
-	NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);
-	NMWimaxNsp *nsp;
-
-	g_return_if_fail (self != NULL);
-
-	nsp = nm_device_wimax_get_nsp_by_path (self, path);
-	if (nsp) {
-		if (nsp == priv->active_nsp) {
-			g_object_unref (priv->active_nsp);
-			priv->active_nsp = NULL;
-			priv->null_active_nsp = FALSE;
-
-			_nm_object_queue_notify (NM_OBJECT (self), NM_DEVICE_WIMAX_ACTIVE_NSP);
-		}
-
-		g_signal_emit (self, signals[NSP_REMOVED], 0, nsp);
-		g_ptr_array_remove (priv->nsps, nsp);
-		g_object_unref (G_OBJECT (nsp));
-	}
-}
-
-static void
-clean_up_nsps (NMDeviceWimax *self, gboolean notify)
-{
-	NMDeviceWimaxPrivate *priv;
-
-	g_return_if_fail (NM_IS_DEVICE_WIMAX (self));
-
-	priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);
-
-	if (priv->active_nsp) {
-		g_object_unref (priv->active_nsp);
-		priv->active_nsp = NULL;
-	}
-
-	if (priv->nsps) {
-		while (priv->nsps->len) {
-			NMWimaxNsp *nsp = NM_WIMAX_NSP (g_ptr_array_index (priv->nsps, 0));
-
-			if (notify)
-				g_signal_emit (self, signals[NSP_REMOVED], 0, nsp);
-			g_ptr_array_remove (priv->nsps, nsp);
-			g_object_unref (nsp);
-		}
-		g_ptr_array_free (priv->nsps, TRUE);
-		priv->nsps = NULL;
-	}
-}
-
-/**
- * nm_device_wimax_get_center_frequency:
- * @self: a #NMDeviceWimax
- *
- * Gets the center frequency (in KHz) of the radio channel the device is using
- * to communicate with the network when connected.  Has no meaning when the
- * device is not connected.
- *
- * Returns: the center frequency in KHz, or 0
- **/
-guint
-nm_device_wimax_get_center_frequency (NMDeviceWimax *self)
-{
-	NMDeviceWimaxPrivate *priv;
-
-	g_return_val_if_fail (NM_IS_DEVICE_WIMAX (self), 0);
-
-	priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);
-	if (!priv->center_freq) {
-		priv->center_freq = _nm_object_get_uint_property (NM_OBJECT (self),
-		                                                  NM_DBUS_INTERFACE_DEVICE_WIMAX,
-		                                                  DBUS_PROP_CENTER_FREQUENCY,
-		                                                  NULL);
-	}
-	return priv->center_freq;
-}
-
-/**
- * nm_device_wimax_get_rssi:
- * @self: a #NMDeviceWimax
- *
- * Gets the RSSI of the current radio link in dBm.  This value indicates how
- * strong the raw received RF signal from the base station is, but does not
- * indicate the overall quality of the radio link.  Has no meaning when the
- * device is not connected.
- *
- * Returns: the RSSI in dBm, or 0
- **/
-gint
-nm_device_wimax_get_rssi (NMDeviceWimax *self)
-{
-	NMDeviceWimaxPrivate *priv;
-
-	g_return_val_if_fail (NM_IS_DEVICE_WIMAX (self), 0);
-
-	priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);
-	if (!priv->rssi) {
-		priv->rssi = _nm_object_get_int_property (NM_OBJECT (self),
-		                                          NM_DBUS_INTERFACE_DEVICE_WIMAX,
-		                                          DBUS_PROP_RSSI,
-		                                          NULL);
-	}
-	return priv->rssi;
-}
-
-/**
- * nm_device_wimax_get_cinr:
- * @self: a #NMDeviceWimax
- *
- * Gets the CINR (Carrier to Interference + Noise Ratio) of the current radio
- * link in dB.  CINR is a more accurate measure of radio link quality.  Has no
- * meaning when the device is not connected.
- *
- * Returns: the CINR in dB, or 0
- **/
-gint
-nm_device_wimax_get_cinr (NMDeviceWimax *self)
-{
-	NMDeviceWimaxPrivate *priv;
-
-	g_return_val_if_fail (NM_IS_DEVICE_WIMAX (self), 0);
-
-	priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);
-	if (!priv->cinr) {
-		priv->cinr = _nm_object_get_int_property (NM_OBJECT (self),
-		                                          NM_DBUS_INTERFACE_DEVICE_WIMAX,
-		                                          DBUS_PROP_CINR,
-		                                          NULL);
-	}
-	return priv->cinr;
-}
-
-/**
- * nm_device_wimax_get_tx_power:
- * @self: a #NMDeviceWimax
- *
- * Average power of the last burst transmitted by the device, in units of
- * 0.5 dBm.  i.e. a TxPower of -11 represents an actual device TX power of
- * -5.5 dBm.  Has no meaning when the device is not connected.
- *
- * Returns: the TX power in dBm, or 0
- **/
-gint
-nm_device_wimax_get_tx_power (NMDeviceWimax *self)
-{
-	NMDeviceWimaxPrivate *priv;
-
-	g_return_val_if_fail (NM_IS_DEVICE_WIMAX (self), 0);
-
-	priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);
-	if (!priv->tx_power) {
-		priv->tx_power = _nm_object_get_int_property (NM_OBJECT (self),
-		                                              NM_DBUS_INTERFACE_DEVICE_WIMAX,
-		                                              DBUS_PROP_TX_POWER,
-		                                              NULL);
-	}
-	return priv->tx_power;
-}
-
-/**
- * nm_device_wimax_get_bsid:
- * @self: a #NMDeviceWimax
- *
- * Gets the ID of the serving Base Station when the device is connected.
- *
- * Returns: the ID of the serving Base Station, or NULL
- **/
-const char *
-nm_device_wimax_get_bsid (NMDeviceWimax *self)
-{
-	NMDeviceWimaxPrivate *priv;
-
-	g_return_val_if_fail (NM_IS_DEVICE_WIMAX (self), NULL);
-
-	priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);
-	if (!priv->bsid) {
-		priv->bsid = _nm_object_get_string_property (NM_OBJECT (self),
-		                                             NM_DBUS_INTERFACE_DEVICE_WIMAX,
-		                                             DBUS_PROP_BSID,
-		                                             NULL);
-	}
-	return priv->bsid;
-}
-
-static GSList *
-filter_connections (NMDevice *device, const GSList *connections)
-{
-	GSList *filtered = NULL;
-	const GSList *iter;
-
-	for (iter = connections; iter; iter = g_slist_next (iter)) {
-		NMConnection *candidate = NM_CONNECTION (iter->data);
-		NMSettingConnection *s_con;
-		NMSettingWimax *s_wimax;
-		const char *ctype;
-		const GByteArray *mac;
-		const char *hw_str;
-		struct ether_addr *hw_mac;
-
-		s_con = (NMSettingConnection *) nm_connection_get_setting (candidate, NM_TYPE_SETTING_CONNECTION);
-		g_assert (s_con);
-
-		ctype = nm_setting_connection_get_connection_type (s_con);
-		if (strcmp (ctype, NM_SETTING_WIMAX_SETTING_NAME) != 0)
-			continue;
-
-		s_wimax = (NMSettingWimax *) nm_connection_get_setting (candidate, NM_TYPE_SETTING_WIMAX);
-		if (!s_wimax)
-			continue;
-
-		/* Check MAC address */
-		hw_str = nm_device_wimax_get_hw_address (NM_DEVICE_WIMAX (device));
-		if (hw_str) {
-			hw_mac = ether_aton (hw_str);
-			mac = nm_setting_wimax_get_mac_address (s_wimax);
-			if (mac && hw_mac && memcmp (mac->data, hw_mac->ether_addr_octet, ETH_ALEN))
-				continue;
-		}
-
-		/* Connection applies to this device */
-		filtered = g_slist_prepend (filtered, candidate);
-	}
-
-	return g_slist_reverse (filtered);
-}
-
-/**************************************************************/
-
-static void
-nm_device_wimax_init (NMDeviceWimax *wimax)
-{
-}
-
-static void
-get_property (GObject *object,
-              guint prop_id,
-              GValue *value,
-              GParamSpec *pspec)
-{
-	NMDeviceWimax *self = NM_DEVICE_WIMAX (object);
-
-	switch (prop_id) {
-	case PROP_HW_ADDRESS:
-		g_value_set_string (value, nm_device_wimax_get_hw_address (self));
-		break;
-	case PROP_ACTIVE_NSP:
-		g_value_set_object (value, nm_device_wimax_get_active_nsp (self));
-		break;
-	case PROP_CENTER_FREQ:
-		g_value_set_uint (value, nm_device_wimax_get_center_frequency (self));
-		break;
-	case PROP_RSSI:
-		g_value_set_int (value, nm_device_wimax_get_rssi (self));
-		break;
-	case PROP_CINR:
-		g_value_set_int (value, nm_device_wimax_get_cinr (self));
-		break;
-	case PROP_TX_POWER:
-		g_value_set_int (value, nm_device_wimax_get_tx_power (self));
-		break;
-	case PROP_BSID:
-		g_value_set_string (value, nm_device_wimax_get_bsid (self));
-		break;
-	default:
-		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-		break;
-	}
-}
-
-static void
-clear_link_status (NMDeviceWimax *self)
-{
-	NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);
-
-	if (priv->center_freq) {
-		priv->center_freq = 0;
-		_nm_object_queue_notify (NM_OBJECT (self), NM_DEVICE_WIMAX_CENTER_FREQUENCY);
-	}
-
-	if (priv->rssi) {
-		priv->rssi = 0;
-		_nm_object_queue_notify (NM_OBJECT (self), NM_DEVICE_WIMAX_RSSI);
-	}
-
-	if (priv->cinr) {
-		priv->cinr = 0;
-		_nm_object_queue_notify (NM_OBJECT (self), NM_DEVICE_WIMAX_CINR);
-	}
-
-	if (priv->tx_power) {
-		priv->tx_power = 0;
-		_nm_object_queue_notify (NM_OBJECT (self), NM_DEVICE_WIMAX_TX_POWER);
-	}
-
-	if (priv->bsid) {
-		g_free (priv->bsid);
-		priv->bsid = NULL;
-		_nm_object_queue_notify (NM_OBJECT (self), NM_DEVICE_WIMAX_BSID);
-	}
-}
-
-static void
-state_changed_cb (NMDevice *device, GParamSpec *pspec, gpointer user_data)
-{
-	NMDeviceWimax *self = NM_DEVICE_WIMAX (device);
-	NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);
-	NMDeviceState state;
-
-	state = nm_device_get_state (device);
-	switch (state) {
-	case NM_DEVICE_STATE_UNKNOWN:
-	case NM_DEVICE_STATE_UNMANAGED:
-	case NM_DEVICE_STATE_UNAVAILABLE:
-	case NM_DEVICE_STATE_DISCONNECTED:
-	case NM_DEVICE_STATE_FAILED:
-		if (priv->active_nsp) {
-			g_object_unref (priv->active_nsp);
-			priv->active_nsp = NULL;
-			priv->null_active_nsp = FALSE;
-		}
-		_nm_object_queue_notify (NM_OBJECT (device), NM_DEVICE_WIMAX_ACTIVE_NSP);
-		clear_link_status (self);
-		break;
-	case NM_DEVICE_STATE_PREPARE:
-	case NM_DEVICE_STATE_CONFIG:
-	case NM_DEVICE_STATE_NEED_AUTH:
-	case NM_DEVICE_STATE_IP_CONFIG:
-		clear_link_status (self);
-		break;
-	default:
-		break;
-	}
-}
-
-static gboolean
-demarshal_active_nsp (NMObject *object, GParamSpec *pspec, GValue *value, gpointer field)
-{
-	NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (object);
-	const char *path;
-	NMWimaxNsp *nsp = NULL;
-	DBusGConnection *connection;
-
-	if (!G_VALUE_HOLDS (value, DBUS_TYPE_G_OBJECT_PATH))
-		return FALSE;
-
-	priv->null_active_nsp = FALSE;
-
-	path = g_value_get_boxed (value);
-	if (path) {
-		if (!strcmp (path, "/"))
-			priv->null_active_nsp = TRUE;
-		else {
-			nsp = NM_WIMAX_NSP (_nm_object_cache_get (path));
-			if (!nsp) {
-				connection = nm_object_get_connection (object);
-				nsp = NM_WIMAX_NSP (nm_wimax_nsp_new (connection, path));
-			}
-		}
-	}
-
-	if (priv->active_nsp) {
-		g_object_unref (priv->active_nsp);
-		priv->active_nsp = NULL;
-	}
-
-	if (nsp)
-		priv->active_nsp = nsp;
-
-	_nm_object_queue_notify (object, NM_DEVICE_WIMAX_ACTIVE_NSP);
-	return TRUE;
-}
-
-static void
-register_for_property_changed (NMDeviceWimax *wimax)
-{
-	NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (wimax);
-	const NMPropertiesChangedInfo property_changed_info[] = {
-		{ NM_DEVICE_WIMAX_HW_ADDRESS, _nm_object_demarshal_generic, &priv->hw_address },
-		{ NM_DEVICE_WIMAX_ACTIVE_NSP, demarshal_active_nsp, &priv->active_nsp },
-		{ NM_DEVICE_WIMAX_CENTER_FREQUENCY, _nm_object_demarshal_generic, &priv->center_freq },
-		{ NM_DEVICE_WIMAX_RSSI, _nm_object_demarshal_generic, &priv->rssi },
-		{ NM_DEVICE_WIMAX_CINR, _nm_object_demarshal_generic, &priv->cinr },
-		{ NM_DEVICE_WIMAX_TX_POWER, _nm_object_demarshal_generic, &priv->tx_power },
-		{ NM_DEVICE_WIMAX_BSID, _nm_object_demarshal_generic, &priv->bsid },
-		{ NULL },
-	};
-
-	_nm_object_handle_properties_changed (NM_OBJECT (wimax),
-										  priv->proxy,
-										  property_changed_info);
-}
-
-static GObject*
-constructor (GType type,
-		   guint n_construct_params,
-		   GObjectConstructParam *construct_params)
-{
-	GObject *object;
-	NMDeviceWimaxPrivate *priv;
-
-	object = G_OBJECT_CLASS (nm_device_wimax_parent_class)->constructor (type,
-																		 n_construct_params,
-																		 construct_params);
-	if (!object)
-		return NULL;
-
-	priv = NM_DEVICE_WIMAX_GET_PRIVATE (object);
-
-	priv->proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (NM_OBJECT (object)),
-											 NM_DBUS_SERVICE,
-											 nm_object_get_path (NM_OBJECT (object)),
-											 NM_DBUS_INTERFACE_DEVICE_WIMAX);
-
-	dbus_g_proxy_add_signal (priv->proxy, "NspAdded",
-	                         DBUS_TYPE_G_OBJECT_PATH,
-	                         G_TYPE_INVALID);
-	dbus_g_proxy_connect_signal (priv->proxy, "NspAdded",
-								 G_CALLBACK (nsp_added_proxy),
-								 object, NULL);
-
-	dbus_g_proxy_add_signal (priv->proxy, "NspRemoved",
-	                         DBUS_TYPE_G_OBJECT_PATH,
-	                         G_TYPE_INVALID);
-	dbus_g_proxy_connect_signal (priv->proxy, "NspRemoved",
-								 G_CALLBACK (nsp_removed_proxy),
-								 object, NULL);
-
-	register_for_property_changed (NM_DEVICE_WIMAX (object));
-
-	g_signal_connect (object,
-	                  "notify::" NM_DEVICE_STATE,
-	                  G_CALLBACK (state_changed_cb),
-	                  NULL);
-
-	return object;
-}
-
-static void
-dispose (GObject *object)
-{
-	NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (object);
-
-	if (priv->disposed) {
-		G_OBJECT_CLASS (nm_device_wimax_parent_class)->dispose (object);
-		return;
-	}
-
-	priv->disposed = TRUE;
-
-	g_free (priv->hw_address);
-	g_free (priv->bsid);
-
-	clean_up_nsps (NM_DEVICE_WIMAX (object), FALSE);
-	g_object_unref (priv->proxy);
-
-	G_OBJECT_CLASS (nm_device_wimax_parent_class)->dispose (object);
-}
-
-static void
-nm_device_wimax_class_init (NMDeviceWimaxClass *wimax_class)
-{
-	GObjectClass *object_class = G_OBJECT_CLASS (wimax_class);
-	NMDeviceClass *device_class = NM_DEVICE_CLASS (wimax_class);
-
-	g_type_class_add_private (wimax_class, sizeof (NMDeviceWimaxPrivate));
-
-	/* virtual methods */
-	object_class->constructor = constructor;
-	object_class->get_property = get_property;
-	object_class->dispose = dispose;
-	device_class->filter_connections = filter_connections;
-
-	/* properties */
-
-	/**
-	 * NMDeviceWimax:hw-address:
-	 *
-	 * The hardware (MAC) address of the device.
-	 **/
-	g_object_class_install_property
-		(object_class, PROP_HW_ADDRESS,
-		 g_param_spec_string (NM_DEVICE_WIMAX_HW_ADDRESS,
-		                      "MAC Address",
-		                      "Hardware MAC address",
-		                      NULL,
-		                      G_PARAM_READABLE));
-
-	/**
-	 * NMDeviceWimax:active-nsp:
-	 *
-	 * The active #NMWimaxNsp of the device.
-	 **/
-	g_object_class_install_property
-		(object_class, PROP_ACTIVE_NSP,
-		 g_param_spec_object (NM_DEVICE_WIMAX_ACTIVE_NSP,
-							  "Active NSP",
-							  "Active NSP",
-							  NM_TYPE_WIMAX_NSP,
-							  G_PARAM_READABLE));
-
-	/**
-	 * NMDeviceWimax:center-frequency:
-	 *
-	 * The center frequency (in KHz) of the radio channel the device is using to
-	 * communicate with the network when connected.  Has no meaning when the
-	 * device is not connected.
-	 **/
-	g_object_class_install_property
-		(object_class, PROP_CENTER_FREQ,
-		 g_param_spec_uint (NM_DEVICE_WIMAX_CENTER_FREQUENCY,
-		                    "Center frequency",
-		                    "Center frequency",
-		                    0, G_MAXUINT, 0,
-		                    G_PARAM_READABLE));
-
-	/**
-	 * NMDeviceWimax:rssi:
-	 *
-	 * RSSI of the current radio link in dBm.  This value indicates how strong
-	 * the raw received RF signal from the base station is, but does not
-	 * indicate the overall quality of the radio link.  Has no meaning when the
-	 * device is not connected.
-	 **/
-	g_object_class_install_property
-		(object_class, PROP_RSSI,
-		 g_param_spec_int (NM_DEVICE_WIMAX_RSSI,
-		                   "RSSI",
-		                   "RSSI",
-		                   G_MININT, G_MAXINT, 0,
-		                   G_PARAM_READABLE));
-
-	/**
-	 * NMDeviceWimax:cinr:
-	 *
-	 * CINR (Carrier to Interference + Noise Ratio) of the current radio link
-	 * in dB.  CINR is a more accurate measure of radio link quality.  Has no
-	 * meaning when the device is not connected.
-	 **/
-	g_object_class_install_property
-		(object_class, PROP_CINR,
-		 g_param_spec_int (NM_DEVICE_WIMAX_CINR,
-		                   "CINR",
-		                   "CINR",
-		                   G_MININT, G_MAXINT, 0,
-		                   G_PARAM_READABLE));
-
-	/**
-	 * NMDeviceWimax:tx-power:
-	 *
-	 * Average power of the last burst transmitted by the device, in units of
-	 * 0.5 dBm.  i.e. a TxPower of -11 represents an actual device TX power of
-	 * -5.5 dBm.  Has no meaning when the device is not connected.
-	 **/
-	g_object_class_install_property
-		(object_class, PROP_TX_POWER,
-		 g_param_spec_int (NM_DEVICE_WIMAX_TX_POWER,
-		                   "TX Power",
-		                   "TX Power",
-		                   G_MININT, G_MAXINT, 0,
-		                   G_PARAM_READABLE));
-
-	/**
-	 * NMDeviceWimax:bsid:
-	 *
-	 * The ID of the serving base station as received from the network.  Has
-	 * no meaning when the device is not connected.
-	 **/
-	g_object_class_install_property
-		(object_class, PROP_BSID,
-		 g_param_spec_string (NM_DEVICE_WIMAX_BSID,
-		                      "BSID",
-		                      "BSID",
-		                      NULL,
-		                      G_PARAM_READABLE));
-
-	/* signals */
-
-	/**
-	 * NMDeviceWimax::nsp-added:
-	 * @self: the wimax device that received the signal
-	 * @nsp: the new NSP
-	 *
-	 * Notifies that a #NMWimaxNsp is added to the wimax device.
-	 **/
-	signals[NSP_ADDED] =
-		g_signal_new ("nsp-added",
-				    G_OBJECT_CLASS_TYPE (object_class),
-				    G_SIGNAL_RUN_FIRST,
-				    G_STRUCT_OFFSET (NMDeviceWimaxClass, nsp_added),
-				    NULL, NULL,
-				    g_cclosure_marshal_VOID__OBJECT,
-				    G_TYPE_NONE, 1,
-				    G_TYPE_OBJECT);
-
-	/**
-	 * NMDeviceWimax::nsp-removed:
-	 * @self: the wimax device that received the signal
-	 * @nsp: the removed NSP
-	 *
-	 * Notifies that a #NMWimaxNsp is removed from the wimax device.
-	 **/
-	signals[NSP_REMOVED] =
-		g_signal_new ("nsp-removed",
-				    G_OBJECT_CLASS_TYPE (object_class),
-				    G_SIGNAL_RUN_FIRST,
-				    G_STRUCT_OFFSET (NMDeviceWimaxClass, nsp_removed),
-				    NULL, NULL,
-				    g_cclosure_marshal_VOID__OBJECT,
-				    G_TYPE_NONE, 1,
-				    G_TYPE_OBJECT);
-}
diff --git a/libnm-glib/nm-device-wimax.h b/libnm-glib/nm-device-wimax.h
deleted file mode 100644
index 5e19bbaf..00000000
--- a/libnm-glib/nm-device-wimax.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/*
- * libnm_glib -- Access network status & information from glib applications
- *
- * This library 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 of the License, or (at your option) any later version.
- *
- * This library 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 this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2011 Red Hat, Inc.
- * Copyright (C) 2009 Novell, Inc.
- */
-
-#ifndef NM_DEVICE_WIMAX_H
-#define NM_DEVICE_WIMAX_H
-
-#include "nm-device.h"
-#include "nm-wimax-nsp.h"
-
-G_BEGIN_DECLS
-
-#define NM_TYPE_DEVICE_WIMAX            (nm_device_wimax_get_type ())
-#define NM_DEVICE_WIMAX(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE_WIMAX, NMDeviceWimax))
-#define NM_DEVICE_WIMAX_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEVICE_WIMAX, NMDeviceWimaxClass))
-#define NM_IS_DEVICE_WIMAX(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE_WIMAX))
-#define NM_IS_DEVICE_WIMAX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NM_TYPE_DEVICE_WIMAX))
-#define NM_DEVICE_WIMAX_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_WIMAX, NMDeviceWimaxClass))
-
-#define NM_DEVICE_WIMAX_HW_ADDRESS       "hw-address"
-#define NM_DEVICE_WIMAX_ACTIVE_NSP       "active-nsp"
-#define NM_DEVICE_WIMAX_CENTER_FREQUENCY "center-frequency"
-#define NM_DEVICE_WIMAX_RSSI             "rssi"
-#define NM_DEVICE_WIMAX_CINR             "cinr"
-#define NM_DEVICE_WIMAX_TX_POWER         "tx-power"
-#define NM_DEVICE_WIMAX_BSID             "bsid"
-
-typedef struct {
-	NMDevice parent;
-} NMDeviceWimax;
-
-typedef struct {
-	NMDeviceClass parent;
-
-	/* Signals */
-	void (*nsp_added)   (NMDeviceWimax *self, NMWimaxNsp *nsp);
-	void (*nsp_removed) (NMDeviceWimax *self, NMWimaxNsp *nsp);
-} NMDeviceWimaxClass;
-
-GType nm_device_wimax_get_type (void);
-
-GObject         *nm_device_wimax_new             (DBusGConnection *connection,
-												  const char *path);
-
-const char      *nm_device_wimax_get_hw_address  (NMDeviceWimax *wimax);
-NMWimaxNsp      *nm_device_wimax_get_active_nsp  (NMDeviceWimax *wimax);
-NMWimaxNsp      *nm_device_wimax_get_nsp_by_path (NMDeviceWimax *wimax,
-												  const char *path);
-
-const GPtrArray *nm_device_wimax_get_nsps        (NMDeviceWimax *wimax);
-
-guint            nm_device_wimax_get_center_frequency (NMDeviceWimax *self);
-gint             nm_device_wimax_get_rssi        (NMDeviceWimax *self);
-gint             nm_device_wimax_get_cinr        (NMDeviceWimax *self);
-gint             nm_device_wimax_get_tx_power    (NMDeviceWimax *self);
-const char *     nm_device_wimax_get_bsid        (NMDeviceWimax *self);
-
-G_END_DECLS
-
-#endif /* NM_DEVICE_WIMAX_H */
diff --git a/libnm-glib/nm-device.c b/libnm-glib/nm-device.c
index b198f526..b8998f70 100644
--- a/libnm-glib/nm-device.c
+++ b/libnm-glib/nm-device.c
@@ -18,19 +18,20 @@
  * Boston, MA 02110-1301 USA.
  *
  * Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2011 Red Hat, Inc.
+ * Copyright (C) 2007 - 2010 Red Hat, Inc.
  */
 
 #include <string.h>
 
+#define G_UDEV_API_IS_SUBJECT_TO_CHANGE
 #include <gudev/gudev.h>
 
 #include "NetworkManager.h"
 #include "nm-device-ethernet.h"
 #include "nm-device-wifi.h"
-#include "nm-device-modem.h"
+#include "nm-gsm-device.h"
+#include "nm-cdma-device.h"
 #include "nm-device-bt.h"
-#include "nm-device-wimax.h"
 #include "nm-device.h"
 #include "nm-device-private.h"
 #include "nm-object-private.h"
@@ -49,10 +50,9 @@ typedef struct {
 
 	char *iface;
 	char *ip_iface;
-	NMDeviceType device_type;
 	char *udi;
 	char *driver;
-	NMDeviceCapabilities capabilities;
+	guint32 capabilities;
 	gboolean managed;
 	gboolean firmware_missing;
 	NMIP4Config *ip4_config;
@@ -86,7 +86,6 @@ enum {
 	PROP_VENDOR,
 	PROP_DHCP6_CONFIG,
 	PROP_IP_INTERFACE,
-	PROP_DEVICE_TYPE,
 
 	LAST_PROP
 };
@@ -127,7 +126,9 @@ demarshal_ip4_config (NMObject *object, GParamSpec *pspec, GValue *value, gpoint
 			priv->null_ip4_config = TRUE;
 		else {
 			config = NM_IP4_CONFIG (_nm_object_cache_get (path));
-			if (!config) {
+			if (config)
+				config = g_object_ref (config);
+			else {
 				connection = nm_object_get_connection (object);
 				config = NM_IP4_CONFIG (nm_ip4_config_new (connection, path));
 			}
@@ -165,7 +166,9 @@ demarshal_dhcp4_config (NMObject *object, GParamSpec *pspec, GValue *value, gpoi
 			priv->null_dhcp4_config = TRUE;
 		else {
 			config = NM_DHCP4_CONFIG (_nm_object_cache_get (path));
-			if (!config) {
+			if (config)
+				config = g_object_ref (config);
+			else {
 				connection = nm_object_get_connection (object);
 				config = NM_DHCP4_CONFIG (nm_dhcp4_config_new (connection, path));
 			}
@@ -203,7 +206,9 @@ demarshal_ip6_config (NMObject *object, GParamSpec *pspec, GValue *value, gpoint
 			priv->null_ip6_config = TRUE;
 		else {
 			config = NM_IP6_CONFIG (_nm_object_cache_get (path));
-			if (!config) {
+			if (config)
+				config = g_object_ref (config);
+			else {
 				connection = nm_object_get_connection (object);
 				config = NM_IP6_CONFIG (nm_ip6_config_new (connection, path));
 			}
@@ -241,7 +246,9 @@ demarshal_dhcp6_config (NMObject *object, GParamSpec *pspec, GValue *value, gpoi
 			priv->null_dhcp6_config = TRUE;
 		else {
 			config = NM_DHCP6_CONFIG (_nm_object_cache_get (path));
-			if (!config) {
+			if (config)
+				config = g_object_ref (config);
+			else {
 				connection = nm_object_get_connection (object);
 				config = NM_DHCP6_CONFIG (nm_dhcp6_config_new (connection, path));
 			}
@@ -393,9 +400,6 @@ get_property (GObject *object,
 	NMDevice *device = NM_DEVICE (object);
 
 	switch (prop_id) {
-	case PROP_DEVICE_TYPE:
-		g_value_set_uint (value, nm_device_get_device_type (device));
-		break;
 	case PROP_UDI:
 		g_value_set_string (value, nm_device_get_udi (device));
 		break;
@@ -445,26 +449,6 @@ get_property (GObject *object,
 }
 
 static void
-set_property (GObject *object,
-              guint prop_id,
-              const GValue *value,
-              GParamSpec *pspec)
-{
-	NMDevice *self = NM_DEVICE (object);
-	NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
-
-	switch (prop_id) {
-	case PROP_DEVICE_TYPE:
-		/* Construct only */
-		priv->device_type = g_value_get_uint (value);
-		break;
-	default:
-		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-		break;
-	}
-}
-
-static void
 nm_device_class_init (NMDeviceClass *device_class)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (device_class);
@@ -474,7 +458,6 @@ nm_device_class_init (NMDeviceClass *device_class)
 	/* virtual methods */
 	object_class->constructor = constructor;
 	object_class->get_property = get_property;
-	object_class->set_property = set_property;
 	object_class->dispose = dispose;
 	object_class->finalize = finalize;
 
@@ -508,26 +491,9 @@ nm_device_class_init (NMDeviceClass *device_class)
 						  G_PARAM_READABLE));
 
 	/**
-	 * NMDevice:device-type:
-	 *
-	 * The numeric type of the device.
-	 **/
-	g_object_class_install_property
-		(object_class, PROP_DEVICE_TYPE,
-		 g_param_spec_uint (NM_DEVICE_DEVICE_TYPE,
-						  "Device Type",
-						  "Numeric device type (ie ethernet, wifi, etc)",
-						  NM_DEVICE_TYPE_UNKNOWN, G_MAXUINT32, NM_DEVICE_TYPE_UNKNOWN,
-						  G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-	/**
 	 * NMDevice:udi:
 	 *
-	 * An operating-system specific device hardware identifier; this is not
-	 * unique to a specific hardware device across reboots or hotplugs.  It
-	 * is an opaque string which for some device types (Bluetooth, Modem)
-	 * contains an identifier provided by the underlying hardware service daemon
-	 * such as Bluez or ModemManager, and clients can use this property to
-	 * request more information about the device from those services.
+	 * The Unique Device Identifier of the device.
 	 **/
 	g_object_class_install_property
 		(object_class, PROP_UDI,
@@ -708,7 +674,7 @@ nm_device_class_init (NMDeviceClass *device_class)
  *
  * Creates a new #NMDevice.
  *
- * Returns: (transfer full): a new device
+ * Returns: a new device
  **/
 GObject *
 nm_device_new (DBusGConnection *connection, const char *path)
@@ -718,7 +684,6 @@ nm_device_new (DBusGConnection *connection, const char *path)
 	GValue value = {0,};
 	GType dtype = 0;
 	NMDevice *device = NULL;
-	NMDeviceType nm_dtype;
 
 	g_return_val_if_fail (connection != NULL, NULL);
 	g_return_val_if_fail (path != NULL, NULL);
@@ -743,23 +708,22 @@ nm_device_new (DBusGConnection *connection, const char *path)
 		goto out;
 	}
 
-	nm_dtype = g_value_get_uint (&value);
-	switch (nm_dtype) {
+	switch (g_value_get_uint (&value)) {
 	case NM_DEVICE_TYPE_ETHERNET:
 		dtype = NM_TYPE_DEVICE_ETHERNET;
 		break;
 	case NM_DEVICE_TYPE_WIFI:
 		dtype = NM_TYPE_DEVICE_WIFI;
 		break;
-	case NM_DEVICE_TYPE_MODEM:
-		dtype = NM_TYPE_DEVICE_MODEM;
+	case NM_DEVICE_TYPE_GSM:
+		dtype = NM_TYPE_GSM_DEVICE;
+		break;
+	case NM_DEVICE_TYPE_CDMA:
+		dtype = NM_TYPE_CDMA_DEVICE;
 		break;
 	case NM_DEVICE_TYPE_BT:
 		dtype = NM_TYPE_DEVICE_BT;
 		break;
-	case NM_DEVICE_TYPE_WIMAX:
-		dtype = NM_TYPE_DEVICE_WIMAX;
-		break;
 	default:
 		g_warning ("Unknown device type %d", g_value_get_uint (&value));
 		break;
@@ -769,7 +733,6 @@ nm_device_new (DBusGConnection *connection, const char *path)
 		device = (NMDevice *) g_object_new (dtype,
 											NM_OBJECT_DBUS_CONNECTION, connection,
 											NM_OBJECT_DBUS_PATH, path,
-											NM_DEVICE_DEVICE_TYPE, nm_dtype,
 											NULL);
 	}
 
@@ -798,8 +761,7 @@ nm_device_get_iface (NMDevice *device)
 	if (!priv->iface) {
 		priv->iface = _nm_object_get_string_property (NM_OBJECT (device),
 		                                             NM_DBUS_INTERFACE_DEVICE,
-		                                             "Interface",
-		                                             NULL);
+		                                             "Interface");
 	}
 
 	return priv->iface;
@@ -826,30 +788,13 @@ nm_device_get_ip_iface (NMDevice *device)
 	if (!priv->ip_iface) {
 		priv->ip_iface = _nm_object_get_string_property (NM_OBJECT (device),
 		                                                 NM_DBUS_INTERFACE_DEVICE,
-		                                                 "IpInterface",
-		                                                 NULL);
+		                                                 "IpInterface");
 	}
 
 	return priv->ip_iface;
 }
 
 /**
- * nm_device_get_device_type:
- * @device: a #NMDevice
- *
- * Returns the numeric type of the #NMDevice, ie ethernet, wifi, etc.
- *
- * Returns: the device type
- **/
-NMDeviceType
-nm_device_get_device_type (NMDevice *self)
-{
-	g_return_val_if_fail (NM_IS_DEVICE (self), NM_DEVICE_TYPE_UNKNOWN);
-
-	return NM_DEVICE_GET_PRIVATE (self)->device_type;
-}
-
-/**
  * nm_device_get_udi:
  * @device: a #NMDevice
  *
@@ -870,8 +815,7 @@ nm_device_get_udi (NMDevice *device)
 	if (!priv->udi) {
 		priv->udi = _nm_object_get_string_property (NM_OBJECT (device),
 		                                           NM_DBUS_INTERFACE_DEVICE,
-		                                           "Udi",
-		                                           NULL);
+		                                           "Udi");
 	}
 
 	return priv->udi;
@@ -897,8 +841,7 @@ nm_device_get_driver (NMDevice *device)
 	if (!priv->driver) {
 		priv->driver = _nm_object_get_string_property (NM_OBJECT (device),
 		                                              NM_DBUS_INTERFACE_DEVICE,
-		                                              "Driver",
-		                                              NULL);
+		                                              "Driver");
 	}
 
 	return priv->driver;
@@ -912,7 +855,7 @@ nm_device_get_driver (NMDevice *device)
  *
  * Returns: the capabilities
  **/
-NMDeviceCapabilities
+guint32
 nm_device_get_capabilities (NMDevice *device)
 {
 	NMDevicePrivate *priv;
@@ -923,8 +866,7 @@ nm_device_get_capabilities (NMDevice *device)
 	if (!priv->capabilities) {
 		priv->capabilities = _nm_object_get_uint_property (NM_OBJECT (device),
 		                                                  NM_DBUS_INTERFACE_DEVICE,
-		                                                  "Capabilities",
-		                                                  NULL);
+		                                                  "Capabilities");
 	}
 
 	return priv->capabilities;
@@ -949,8 +891,7 @@ nm_device_get_managed (NMDevice *device)
 	if (!priv->managed) {
 		priv->managed = _nm_object_get_boolean_property (NM_OBJECT (device),
 		                                                NM_DBUS_INTERFACE_DEVICE,
-		                                                "Managed",
-		                                                NULL);
+		                                                "Managed");
 	}
 
 	return priv->managed;
@@ -977,8 +918,7 @@ nm_device_get_firmware_missing (NMDevice *device)
 	if (!priv->firmware_missing) {
 		priv->firmware_missing = _nm_object_get_boolean_property (NM_OBJECT (device),
 		                                                          NM_DBUS_INTERFACE_DEVICE,
-		                                                          "FirmwareMissing",
-		                                                          NULL);
+		                                                          "FirmwareMissing");
 	}
 
 	return priv->firmware_missing;
@@ -990,7 +930,7 @@ nm_device_get_firmware_missing (NMDevice *device)
  *
  * Gets the current #NMIP4Config associated with the #NMDevice.
  *
- * Returns: (transfer none): the #NMIP4Config or %NULL if the device is not activated.
+ * Returns: the #NMIP4Config or %NULL if the device is not activated.
  **/
 NMIP4Config *
 nm_device_get_ip4_config (NMDevice *device)
@@ -1007,7 +947,7 @@ nm_device_get_ip4_config (NMDevice *device)
 	if (priv->null_ip4_config)
 		return NULL;
 
-	path = _nm_object_get_object_path_property (NM_OBJECT (device), NM_DBUS_INTERFACE_DEVICE, "Ip4Config", NULL);
+	path = _nm_object_get_object_path_property (NM_OBJECT (device), NM_DBUS_INTERFACE_DEVICE, "Ip4Config");
 	if (path) {
 		g_value_init (&value, DBUS_TYPE_G_OBJECT_PATH);
 		g_value_take_boxed (&value, path);
@@ -1024,7 +964,7 @@ nm_device_get_ip4_config (NMDevice *device)
  *
  * Gets the current #NMDHCP4Config associated with the #NMDevice.
  *
- * Returns: (transfer none): the #NMDHCPConfig or %NULL if the device is not activated or not
+ * Returns: the #NMDHCPConfig or %NULL if the device is not activated or not
  * using DHCP.
  **/
 NMDHCP4Config *
@@ -1042,7 +982,7 @@ nm_device_get_dhcp4_config (NMDevice *device)
 	if (priv->null_dhcp4_config)
 		return NULL;
 
-	path = _nm_object_get_object_path_property (NM_OBJECT (device), NM_DBUS_INTERFACE_DEVICE, "Dhcp4Config", NULL);
+	path = _nm_object_get_object_path_property (NM_OBJECT (device), NM_DBUS_INTERFACE_DEVICE, "Dhcp4Config");
 	if (path) {
 		g_value_init (&value, DBUS_TYPE_G_OBJECT_PATH);
 		g_value_take_boxed (&value, path);
@@ -1059,7 +999,7 @@ nm_device_get_dhcp4_config (NMDevice *device)
  *
  * Gets the current #NMIP6Config associated with the #NMDevice.
  *
- * Returns: (transfer none): the #NMIP6Config or %NULL if the device is not activated.
+ * Returns: the #NMIP6Config or %NULL if the device is not activated.
  **/
 NMIP6Config *
 nm_device_get_ip6_config (NMDevice *device)
@@ -1076,7 +1016,7 @@ nm_device_get_ip6_config (NMDevice *device)
 	if (priv->null_ip6_config)
 		return NULL;
 
-	path = _nm_object_get_object_path_property (NM_OBJECT (device), NM_DBUS_INTERFACE_DEVICE, "Ip6Config", NULL);
+	path = _nm_object_get_object_path_property (NM_OBJECT (device), NM_DBUS_INTERFACE_DEVICE, "Ip6Config");
 	if (path) {
 		g_value_init (&value, DBUS_TYPE_G_OBJECT_PATH);
 		g_value_take_boxed (&value, path);
@@ -1093,7 +1033,7 @@ nm_device_get_ip6_config (NMDevice *device)
  *
  * Gets the current #NMDHCP6Config associated with the #NMDevice.
  *
- * Returns: (transfer none): the #NMDHCPConfig or %NULL if the device is not activated or not
+ * Returns: the #NMDHCPConfig or %NULL if the device is not activated or not
  * using DHCP.
  **/
 NMDHCP6Config *
@@ -1111,7 +1051,7 @@ nm_device_get_dhcp6_config (NMDevice *device)
 	if (priv->null_dhcp6_config)
 		return NULL;
 
-	path = _nm_object_get_object_path_property (NM_OBJECT (device), NM_DBUS_INTERFACE_DEVICE, "Dhcp6Config", NULL);
+	path = _nm_object_get_object_path_property (NM_OBJECT (device), NM_DBUS_INTERFACE_DEVICE, "Dhcp6Config");
 	if (path) {
 		g_value_init (&value, DBUS_TYPE_G_OBJECT_PATH);
 		g_value_take_boxed (&value, path);
@@ -1141,8 +1081,7 @@ nm_device_get_state (NMDevice *device)
 	if (priv->state == NM_DEVICE_STATE_UNKNOWN) {
 		priv->state = _nm_object_get_uint_property (NM_OBJECT (device), 
 		                                           NM_DBUS_INTERFACE_DEVICE,
-		                                           "State",
-		                                           NULL);
+		                                           "State");
 	}
 
 	return priv->state;
@@ -1374,7 +1313,7 @@ deactivate_cb (DBusGProxy *proxy,
 /**
  * nm_device_disconnect:
  * @device: a #NMDevice
- * @callback: (scope async): callback to be called when disconnect operation completes
+ * @callback: callback to be called when disconnect operation completes
  * @user_data: caller-specific data passed to @callback
  *
  * Disconnects the device if currently connected, and prevents the device from
@@ -1400,30 +1339,3 @@ nm_device_disconnect (NMDevice *device,
 	                                                        info);
 }
 
-/**
- * nm_device_filter_connections:
- * @device: an #NMDevice to filter connections for
- * @connections: a list of #NMConnection objects to filter
- *
- * Filters a given list of connections for a given #NMDevice object and return
- * connections which may be activated with the device. For example if @device
- * is a WiFi device that supports only WEP encryption, the returned list will
- * contain any WiFi connections in @connections that allow connection to
- * unencrypted or WEP-enabled SSIDs.  The returned list will not contain
- * Ethernet, Bluetooth, WiFi WPA connections, or any other connection that is
- * incompatible with the device.
- *
- * Returns: (transfer container) (element-type NetworkManager.Connection): a
- * list of #NMConnection objects that could be activated with the given @device.
- * The elements of the list are owned by their creator and should not be freed
- * by the caller, but the returned list itself is owned by the caller and should
- * be freed with g_slist_free() when it is no longer required.
- **/
-GSList *
-nm_device_filter_connections (NMDevice *device, const GSList *connections)
-{
-	if (NM_DEVICE_GET_CLASS (device)->filter_connections)
-		return NM_DEVICE_GET_CLASS (device)->filter_connections (device, connections);
-	return NULL;
-}
-
diff --git a/libnm-glib/nm-device.h b/libnm-glib/nm-device.h
index 0b641587..59bf4de6 100644
--- a/libnm-glib/nm-device.h
+++ b/libnm-glib/nm-device.h
@@ -18,7 +18,7 @@
  * Boston, MA 02110-1301 USA.
  *
  * Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2011 Red Hat, Inc.
+ * Copyright (C) 2007 - 2010 Red Hat, Inc.
  */
 
 #ifndef NM_DEVICE_H
@@ -44,7 +44,6 @@ G_BEGIN_DECLS
 #define NM_IS_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NM_TYPE_DEVICE))
 #define NM_DEVICE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE, NMDeviceClass))
 
-#define NM_DEVICE_DEVICE_TYPE "device-type"
 #define NM_DEVICE_UDI "udi"
 #define NM_DEVICE_INTERFACE "interface"
 #define NM_DEVICE_IP_INTERFACE "ip-interface"
@@ -73,9 +72,6 @@ typedef struct {
 	                       NMDeviceState old_state,
 	                       NMDeviceStateReason reason);
 
-	GSList * (*filter_connections) (NMDevice *device,
-	                                const GSList *connections);
-
 	/* Padding for future expansion */
 	void (*_reserved1) (void);
 	void (*_reserved2) (void);
@@ -89,30 +85,26 @@ GType nm_device_get_type (void);
 
 GObject * nm_device_new (DBusGConnection *connection, const char *path);
 
-const char *         nm_device_get_iface            (NMDevice *device);
-const char *         nm_device_get_ip_iface         (NMDevice *device);
-NMDeviceType         nm_device_get_device_type      (NMDevice *device);
-const char *         nm_device_get_udi              (NMDevice *device);
-const char *         nm_device_get_driver           (NMDevice *device);
-NMDeviceCapabilities nm_device_get_capabilities     (NMDevice *device);
-gboolean             nm_device_get_managed          (NMDevice *device);
-gboolean             nm_device_get_firmware_missing (NMDevice *device);
-NMIP4Config *        nm_device_get_ip4_config       (NMDevice *device);
-NMDHCP4Config *      nm_device_get_dhcp4_config     (NMDevice *device);
-NMIP6Config *        nm_device_get_ip6_config       (NMDevice *device);
-NMDHCP6Config *      nm_device_get_dhcp6_config     (NMDevice *device);
-NMDeviceState        nm_device_get_state            (NMDevice *device);
-const char *         nm_device_get_product          (NMDevice *device);
-const char *         nm_device_get_vendor           (NMDevice *device);
+const char *  nm_device_get_iface            (NMDevice *device);
+const char *  nm_device_get_ip_iface         (NMDevice *device);
+const char *  nm_device_get_udi              (NMDevice *device);
+const char *  nm_device_get_driver           (NMDevice *device);
+guint32       nm_device_get_capabilities     (NMDevice *device);
+gboolean      nm_device_get_managed          (NMDevice *device);
+gboolean      nm_device_get_firmware_missing (NMDevice *device);
+NMIP4Config * nm_device_get_ip4_config       (NMDevice *device);
+NMDHCP4Config * nm_device_get_dhcp4_config   (NMDevice *device);
+NMIP6Config * nm_device_get_ip6_config       (NMDevice *device);
+NMDHCP6Config * nm_device_get_dhcp6_config   (NMDevice *device);
+NMDeviceState nm_device_get_state            (NMDevice *device);
+const char *  nm_device_get_product          (NMDevice *device);
+const char *  nm_device_get_vendor           (NMDevice *device);
 
 typedef void (*NMDeviceDeactivateFn) (NMDevice *device, GError *error, gpointer user_data);
 
-void                 nm_device_disconnect           (NMDevice *device,
-                                                     NMDeviceDeactivateFn callback,
-                                                     gpointer user_data);
-
-GSList *             nm_device_filter_connections   (NMDevice *device,
-                                                     const GSList *connections);
+void          nm_device_disconnect         (NMDevice *device,
+                                            NMDeviceDeactivateFn callback,
+                                            gpointer user_data);
 
 G_END_DECLS
 
diff --git a/libnm-glib/nm-dhcp4-config.c b/libnm-glib/nm-dhcp4-config.c
index 8299de02..442d19d1 100644
--- a/libnm-glib/nm-dhcp4-config.c
+++ b/libnm-glib/nm-dhcp4-config.c
@@ -17,7 +17,7 @@
  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
  * Boston, MA 02110-1301 USA.
  *
- * Copyright (C) 2008 - 2011 Red Hat, Inc.
+ * Copyright (C) 2008 - 2010 Red Hat, Inc.
  * Copyright (C) 2008 Novell, Inc.
  */
 
@@ -169,9 +169,6 @@ nm_dhcp4_config_class_init (NMDHCP4ConfigClass *config_class)
 	 * NMDHCP4Config:options:
 	 *
 	 * The #GHashTable containing options of the configuration.
-	 *
-	 * Type: GLib.HashTable
-	 * Element-Type: utf8,GObject.Value
 	 **/
 	g_object_class_install_property
 		(object_class, PROP_OPTIONS,
@@ -189,7 +186,7 @@ nm_dhcp4_config_class_init (NMDHCP4ConfigClass *config_class)
  *
  * Creates a new #NMDHCP4Config.
  *
- * Returns: (transfer full): a new configuration
+ * Returns: a new configuration
  **/
 GObject *
 nm_dhcp4_config_new (DBusGConnection *connection, const char *object_path)
@@ -206,7 +203,7 @@ nm_dhcp4_config_new (DBusGConnection *connection, const char *object_path)
  *
  * Gets all the options contained in the configuration.
  *
- * Returns: (transfer none) (element-type utf8 GObject.Value): the #GHashTable containing strings for keys and values.
+ * Returns: the #GHashTable containing strings for keys and values.
  * This is the internal copy used by the configuration, and must not be modified.
  **/
 GHashTable *
@@ -221,8 +218,7 @@ nm_dhcp4_config_get_options (NMDHCP4Config *config)
 	if (!_nm_object_get_property (NM_OBJECT (config),
 	                              NM_DBUS_INTERFACE_DHCP4_CONFIG,
 	                              "Options",
-	                              &value,
-	                              NULL))
+	                              &value))
 		goto out;
 
 	demarshal_dhcp4_options (NM_OBJECT (config), NULL, &value, &priv->options);	
diff --git a/libnm-glib/nm-dhcp6-config.c b/libnm-glib/nm-dhcp6-config.c
index 00698ed5..37928672 100644
--- a/libnm-glib/nm-dhcp6-config.c
+++ b/libnm-glib/nm-dhcp6-config.c
@@ -17,7 +17,7 @@
  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
  * Boston, MA 02110-1301 USA.
  *
- * Copyright (C) 2008 - 2011 Red Hat, Inc.
+ * Copyright (C) 2008 - 2010 Red Hat, Inc.
  * Copyright (C) 2008 Novell, Inc.
  */
 
@@ -169,9 +169,6 @@ nm_dhcp6_config_class_init (NMDHCP6ConfigClass *config_class)
 	 * NMDHCP6Config:options:
 	 *
 	 * The #GHashTable containing options of the configuration.
-	 *
-	 * Type: GLib.HashTable
-	 * Element-Type: utf8,GObject.Value
 	 **/
 	g_object_class_install_property
 		(object_class, PROP_OPTIONS,
@@ -189,7 +186,7 @@ nm_dhcp6_config_class_init (NMDHCP6ConfigClass *config_class)
  *
  * Creates a new #NMDHCP6Config.
  *
- * Returns: (transfer full): a new configuration
+ * Returns: a new configuration
  **/
 GObject *
 nm_dhcp6_config_new (DBusGConnection *connection, const char *object_path)
@@ -206,7 +203,7 @@ nm_dhcp6_config_new (DBusGConnection *connection, const char *object_path)
  *
  * Gets all the options contained in the configuration.
  *
- * Returns: (transfer none) (element-type utf8 GObject.Value): the #GHashTable containing strings for keys and values.
+ * Returns: the #GHashTable containing strings for keys and values.
  * This is the internal copy used by the configuration, and must not be modified.
  **/
 GHashTable *
@@ -221,8 +218,7 @@ nm_dhcp6_config_get_options (NMDHCP6Config *config)
 	if (!_nm_object_get_property (NM_OBJECT (config),
 	                              NM_DBUS_INTERFACE_DHCP6_CONFIG,
 	                              "Options",
-	                              &value,
-	                              NULL))
+	                              &value))
 		goto out;
 
 	demarshal_dhcp6_options (NM_OBJECT (config), NULL, &value, &priv->options);	
diff --git a/libnm-glib/nm-exported-connection.c b/libnm-glib/nm-exported-connection.c
new file mode 100644
index 00000000..b0e974cd
--- /dev/null
+++ b/libnm-glib/nm-exported-connection.c
@@ -0,0 +1,300 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager system settings service
+ *
+ * This library 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 of the License, or (at your option) any later version.
+ *
+ * This library 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 this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ * (C) Copyright 2008 Novell, Inc.
+ * (C) Copyright 2008 - 2011 Red Hat, Inc.
+ */
+
+#include <NetworkManager.h>
+#include <dbus/dbus-glib-lowlevel.h>
+#include <nm-setting-connection.h>
+
+#include "nm-exported-connection.h"
+#include "nm-settings-interface.h"
+#include "nm-settings-connection-interface.h"
+
+static gboolean impl_exported_connection_get_settings (NMExportedConnection *connection,
+                                                       GHashTable **settings,
+                                                       GError **error);
+
+static void impl_exported_connection_update (NMExportedConnection *connection,
+                                             GHashTable *new_settings,
+                                             DBusGMethodInvocation *context);
+
+static void impl_exported_connection_delete (NMExportedConnection *connection,
+                                             DBusGMethodInvocation *context);
+
+static void impl_exported_connection_get_secrets (NMExportedConnection *connection,
+                                                  const gchar *setting_name,
+                                                  const gchar **hints,
+                                                  gboolean request_new,
+                                                  DBusGMethodInvocation *context);
+
+#include "nm-exported-connection-glue.h"
+
+static void settings_connection_interface_init (NMSettingsConnectionInterface *class);
+
+G_DEFINE_TYPE_EXTENDED (NMExportedConnection, nm_exported_connection, NM_TYPE_CONNECTION, 0,
+                        G_IMPLEMENT_INTERFACE (NM_TYPE_SETTINGS_CONNECTION_INTERFACE,
+                                               settings_connection_interface_init))
+
+#define NM_EXPORTED_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
+                                               NM_TYPE_EXPORTED_CONNECTION, \
+                                               NMExportedConnectionPrivate))
+
+typedef struct {
+	gboolean foo;
+} NMExportedConnectionPrivate;
+
+
+/**************************************************************/
+
+/* Has to be the same as NM_SYSCONFIG_SETTINGS_TIMESTAMP_TAG in nm-sysconfig-settings.h */
+#define CONNECTION_TIMESTAMP_TAG "timestamp-tag"
+
+static GHashTable *
+real_get_settings (NMExportedConnection *self, GError **error)
+{
+	NMConnection *no_secrets;
+	GHashTable *settings;
+	NMSettingConnection *s_con;
+	guint64 *timestamp;
+
+	/* Secrets should *never* be returned by the GetSettings method, they
+	 * get returned by the GetSecrets method which can be better
+	 * protected against leakage of secrets to unprivileged callers.
+	 */
+	no_secrets = nm_connection_duplicate (NM_CONNECTION (self));
+	g_assert (no_secrets);
+	nm_connection_clear_secrets (no_secrets);
+
+	/* Timestamp is not updated internally in connection's 'timestamp'
+	 * property, because it would force updating the connection and in turn
+	 * writing to /etc periodically, which we want to avoid. Rather real
+	 * timestamps are kept track of in data associated with GObject.
+	 * Here we substitute connection's timestamp with the real one.
+	 */
+	timestamp = (guint64 *) g_object_get_data (G_OBJECT (self), CONNECTION_TIMESTAMP_TAG);
+	if (timestamp) {
+		s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (NM_CONNECTION (no_secrets), NM_TYPE_SETTING_CONNECTION));
+		g_assert (s_con);
+		g_object_set (s_con, NM_SETTING_CONNECTION_TIMESTAMP, *timestamp, NULL);
+	}
+
+	settings = nm_connection_to_hash (no_secrets);
+	g_assert (settings);
+	g_object_unref (no_secrets);
+
+	return settings;
+}
+
+/**************************************************************/
+
+static gboolean
+check_writable (NMConnection *connection, GError **error)
+{
+	NMSettingConnection *s_con;
+
+	g_return_val_if_fail (connection != NULL, FALSE);
+	g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
+
+	s_con = (NMSettingConnection *) nm_connection_get_setting (connection,
+	                                                           NM_TYPE_SETTING_CONNECTION);
+	if (!s_con) {
+		g_set_error_literal (error,
+		                     NM_SETTINGS_INTERFACE_ERROR,
+		                     NM_SETTINGS_INTERFACE_ERROR_INVALID_CONNECTION,
+		                     "Connection did not have required 'connection' setting");
+		return FALSE;
+	}
+
+	/* If the connection is read-only, that has to be changed at the source of
+	 * the problem (ex a system settings plugin that can't write connections out)
+	 * instead of over D-Bus.
+	 */
+	if (nm_setting_connection_get_read_only (s_con)) {
+		g_set_error_literal (error,
+		                     NM_SETTINGS_INTERFACE_ERROR,
+		                     NM_SETTINGS_INTERFACE_ERROR_READ_ONLY_CONNECTION,
+		                     "Connection is read-only");
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+static gboolean
+impl_exported_connection_get_settings (NMExportedConnection *self,
+                                       GHashTable **settings,
+                                       GError **error)
+{
+	/* Must always be implemented */
+	g_assert (NM_EXPORTED_CONNECTION_GET_CLASS (self)->get_settings);
+	*settings = NM_EXPORTED_CONNECTION_GET_CLASS (self)->get_settings (self, error);
+	return *settings ? TRUE : FALSE;
+}
+
+static gboolean
+update (NMSettingsConnectionInterface *connection,
+	    NMSettingsConnectionInterfaceUpdateFunc callback,
+	    gpointer user_data)
+{
+	g_object_ref (connection);
+	nm_settings_connection_interface_emit_updated (connection);
+	callback (connection, NULL, user_data);
+	g_object_unref (connection);
+	return TRUE;
+}
+
+static void
+impl_exported_connection_update (NMExportedConnection *self,
+                                 GHashTable *new_settings,
+                                 DBusGMethodInvocation *context)
+{
+	NMConnection *tmp;
+	GError *error = NULL;
+
+	/* If the connection is read-only, that has to be changed at the source of
+	 * the problem (ex a system settings plugin that can't write connections out)
+	 * instead of over D-Bus.
+	 */
+	if (!check_writable (NM_CONNECTION (self), &error)) {
+		dbus_g_method_return_error (context, error);
+		g_error_free (error);
+		return;
+	}
+
+	/* Check if the settings are valid first */
+	tmp = nm_connection_new_from_hash (new_settings, &error);
+	if (!tmp) {
+		g_assert (error);
+		dbus_g_method_return_error (context, error);
+		g_error_free (error);
+		return;
+	}
+	g_object_unref (tmp);
+
+	if (NM_EXPORTED_CONNECTION_GET_CLASS (self)->update)
+		NM_EXPORTED_CONNECTION_GET_CLASS (self)->update (self, new_settings, context);
+	else {
+		error = g_error_new (NM_SETTINGS_INTERFACE_ERROR,
+		                     NM_SETTINGS_INTERFACE_ERROR_INTERNAL_ERROR,
+		                     "%s: %s:%d update() unimplemented", __func__, __FILE__, __LINE__);
+		dbus_g_method_return_error (context, error);
+		g_error_free (error);
+	}
+}
+
+static gboolean
+do_delete (NMSettingsConnectionInterface *connection,
+	       NMSettingsConnectionInterfaceDeleteFunc callback,
+	       gpointer user_data)
+{
+	g_object_ref (connection);
+	g_signal_emit_by_name (connection, "removed");
+	callback (connection, NULL, user_data);
+	g_object_unref (connection);
+	return TRUE;
+}
+
+static void
+impl_exported_connection_delete (NMExportedConnection *self,
+                                 DBusGMethodInvocation *context)
+{
+	GError *error = NULL;
+
+	if (!check_writable (NM_CONNECTION (self), &error)) {
+		dbus_g_method_return_error (context, error);
+		g_error_free (error);
+		return;
+	}
+
+	if (NM_EXPORTED_CONNECTION_GET_CLASS (self)->delete)
+		NM_EXPORTED_CONNECTION_GET_CLASS (self)->delete (self, context);
+	else {
+		error = g_error_new (NM_SETTINGS_INTERFACE_ERROR,
+		                     NM_SETTINGS_INTERFACE_ERROR_INTERNAL_ERROR,
+		                     "%s: %s:%d delete() unimplemented", __func__, __FILE__, __LINE__);
+		dbus_g_method_return_error (context, error);
+		g_error_free (error);
+	}
+}
+
+static void
+impl_exported_connection_get_secrets (NMExportedConnection *self,
+                                      const gchar *setting_name,
+                                      const gchar **hints,
+                                      gboolean request_new,
+                                      DBusGMethodInvocation *context)
+{
+	GError *error = NULL;
+
+	if (NM_EXPORTED_CONNECTION_GET_CLASS (self)->get_secrets)
+		NM_EXPORTED_CONNECTION_GET_CLASS (self)->get_secrets (self, setting_name, hints, request_new, context);
+	else {
+		error = g_error_new (NM_SETTINGS_INTERFACE_ERROR,
+		                     NM_SETTINGS_INTERFACE_ERROR_INTERNAL_ERROR,
+		                     "%s: %s:%d get_secrets() unimplemented", __func__, __FILE__, __LINE__);
+		dbus_g_method_return_error (context, error);
+		g_error_free (error);
+	}
+}
+
+/**************************************************************/
+
+static void
+settings_connection_interface_init (NMSettingsConnectionInterface *iface)
+{
+	iface->update = update;
+	iface->delete = do_delete;
+}
+
+/**
+ * nm_exported_connection_new:
+ * @scope: the Connection scope (either user or system)
+ *
+ * Creates a new object representing the remote connection.
+ *
+ * Returns: the new exported connection object on success, or %NULL on failure
+ **/
+NMExportedConnection *
+nm_exported_connection_new (NMConnectionScope scope)
+{
+	g_return_val_if_fail (scope != NM_CONNECTION_SCOPE_UNKNOWN, NULL);
+
+	return (NMExportedConnection *) g_object_new (NM_TYPE_EXPORTED_CONNECTION,
+	                                              NM_CONNECTION_SCOPE, scope,
+	                                              NULL);
+}
+
+static void
+nm_exported_connection_init (NMExportedConnection *self)
+{
+}
+
+static void
+nm_exported_connection_class_init (NMExportedConnectionClass *class)
+{
+	g_type_class_add_private (class, sizeof (NMExportedConnectionPrivate));
+
+	/* Virtual methods */
+	class->get_settings = real_get_settings;
+
+	dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (class),
+	                                 &dbus_glib_nm_exported_connection_object_info);
+}
diff --git a/libnm-glib/nm-exported-connection.h b/libnm-glib/nm-exported-connection.h
new file mode 100644
index 00000000..53dc3b02
--- /dev/null
+++ b/libnm-glib/nm-exported-connection.h
@@ -0,0 +1,75 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager system settings service
+ *
+ * This library 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 of the License, or (at your option) any later version.
+ *
+ * This library 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 this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ * (C) Copyright 2009 Red Hat, Inc.
+ */
+
+#ifndef NM_EXPORTED_CONNECTION_H
+#define NM_EXPORTED_CONNECTION_H
+
+#include <nm-connection.h>
+#include <dbus/dbus-glib.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_EXPORTED_CONNECTION            (nm_exported_connection_get_type ())
+#define NM_EXPORTED_CONNECTION(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_EXPORTED_CONNECTION, NMExportedConnection))
+#define NM_EXPORTED_CONNECTION_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_EXPORTED_CONNECTION, NMExportedConnectionClass))
+#define NM_IS_EXPORTED_CONNECTION(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_EXPORTED_CONNECTION))
+#define NM_IS_EXPORTED_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NM_TYPE_EXPORTED_CONNECTION))
+#define NM_EXPORTED_CONNECTION_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_EXPORTED_CONNECTION, NMExportedConnectionClass))
+
+typedef struct {
+	NMConnection parent;
+} NMExportedConnection;
+
+typedef struct {
+	NMConnectionClass parent;
+
+	GHashTable * (*get_settings) (NMExportedConnection *self,
+	                              GError **error);
+
+	void (*update) (NMExportedConnection *self,
+	                GHashTable *new_settings,
+	                DBusGMethodInvocation *context);
+
+	void (*delete) (NMExportedConnection *self,
+	                DBusGMethodInvocation *context);
+
+	void (*get_secrets) (NMExportedConnection *self,
+	                     const gchar *setting_name,
+	                     const gchar **hints,
+	                     gboolean request_new,
+	                     DBusGMethodInvocation *context);
+
+	/* Padding for future expansion */
+	void (*_reserved1) (void);
+	void (*_reserved2) (void);
+	void (*_reserved3) (void);
+	void (*_reserved4) (void);
+	void (*_reserved5) (void);
+	void (*_reserved6) (void);
+} NMExportedConnectionClass;
+
+GType nm_exported_connection_get_type (void);
+
+NMExportedConnection *nm_exported_connection_new (NMConnectionScope scope);
+
+G_END_DECLS
+
+#endif /* NM_EXPORTED_CONNECTION_H */
diff --git a/libnm-glib/nm-gsm-device.c b/libnm-glib/nm-gsm-device.c
new file mode 100644
index 00000000..aacbbb82
--- /dev/null
+++ b/libnm-glib/nm-gsm-device.c
@@ -0,0 +1,130 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * libnm_glib -- Access network status & information from glib applications
+ *
+ * This library 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 of the License, or (at your option) any later version.
+ *
+ * This library 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 this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2007 - 2008 Novell, Inc.
+ * Copyright (C) 2007 - 2008 Red Hat, Inc.
+ */
+
+#include "nm-gsm-device.h"
+#include "nm-device-private.h"
+#include "nm-object-private.h"
+
+G_DEFINE_TYPE (NMGsmDevice, nm_gsm_device, NM_TYPE_SERIAL_DEVICE)
+
+#define NM_GSM_DEVICE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_GSM_DEVICE, NMGsmDevicePrivate))
+
+typedef struct {
+	DBusGProxy *proxy;
+
+	gboolean disposed;
+} NMGsmDevicePrivate;
+
+static void
+nm_gsm_device_init (NMGsmDevice *device)
+{
+}
+
+static void
+register_for_property_changed (NMGsmDevice *device)
+{
+	NMGsmDevicePrivate *priv = NM_GSM_DEVICE_GET_PRIVATE (device);
+	const NMPropertiesChangedInfo property_changed_info[] = {
+		{ NULL },
+	};
+
+	_nm_object_handle_properties_changed (NM_OBJECT (device),
+	                                     priv->proxy,
+	                                     property_changed_info);
+}
+
+static GObject*
+constructor (GType type,
+             guint n_construct_params,
+             GObjectConstructParam *construct_params)
+{
+	GObject *object;
+	NMGsmDevicePrivate *priv;
+
+	object = G_OBJECT_CLASS (nm_gsm_device_parent_class)->constructor (type,
+														  n_construct_params,
+														  construct_params);
+	if (!object)
+		return NULL;
+
+	priv = NM_GSM_DEVICE_GET_PRIVATE (object);
+
+	priv->proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (NM_OBJECT (object)),
+										NM_DBUS_SERVICE,
+										nm_object_get_path (NM_OBJECT (object)),
+										NM_DBUS_INTERFACE_GSM_DEVICE);
+
+	register_for_property_changed (NM_GSM_DEVICE (object));
+
+	return object;
+}
+
+static void
+dispose (GObject *object)
+{
+	NMGsmDevicePrivate *priv = NM_GSM_DEVICE_GET_PRIVATE (object);
+
+	if (priv->disposed) {
+		G_OBJECT_CLASS (nm_gsm_device_parent_class)->dispose (object);
+		return;
+	}
+
+	priv->disposed = TRUE;
+
+	g_object_unref (priv->proxy);
+
+	G_OBJECT_CLASS (nm_gsm_device_parent_class)->dispose (object);
+}
+
+static void
+nm_gsm_device_class_init (NMGsmDeviceClass *device_class)
+{
+	GObjectClass *object_class = G_OBJECT_CLASS (device_class);
+
+	g_type_class_add_private (device_class, sizeof (NMGsmDevicePrivate));
+
+	/* virtual methods */
+	object_class->constructor = constructor;
+	object_class->dispose = dispose;
+}
+
+/**
+ * nm_gsm_device_new:
+ * @connection: the #DBusGConnection
+ * @path: the DBus object path of the device
+ *
+ * Creates a new #NMGsmDevice.
+ *
+ * Returns: a new device
+ **/
+NMGsmDevice *
+nm_gsm_device_new (DBusGConnection *connection, const char *path)
+{
+	g_return_val_if_fail (connection != NULL, NULL);
+	g_return_val_if_fail (path != NULL, NULL);
+
+	return (NMGsmDevice *) g_object_new (NM_TYPE_GSM_DEVICE,
+								  NM_OBJECT_DBUS_CONNECTION, connection,
+								  NM_OBJECT_DBUS_PATH, path,
+								  NULL);
+}
diff --git a/libnm-glib/nm-gsm-device.h b/libnm-glib/nm-gsm-device.h
new file mode 100644
index 00000000..d8440973
--- /dev/null
+++ b/libnm-glib/nm-gsm-device.h
@@ -0,0 +1,61 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * libnm_glib -- Access network status & information from glib applications
+ *
+ * This library 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 of the License, or (at your option) any later version.
+ *
+ * This library 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 this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2007 - 2008 Novell, Inc.
+ * Copyright (C) 2007 - 2008 Red Hat, Inc.
+ */
+
+#ifndef NM_GSM_DEVICE_H
+#define NM_GSM_DEVICE_H
+
+#include "nm-serial-device.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_GSM_DEVICE            (nm_gsm_device_get_type ())
+#define NM_GSM_DEVICE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_GSM_DEVICE, NMGsmDevice))
+#define NM_GSM_DEVICE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_GSM_DEVICE, NMGsmDeviceClass))
+#define NM_IS_GSM_DEVICE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_GSM_DEVICE))
+#define NM_IS_GSM_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NM_TYPE_GSM_DEVICE))
+#define NM_GSM_DEVICE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_GSM_DEVICE, NMGsmDeviceClass))
+
+typedef struct {
+	NMSerialDevice parent;
+} NMGsmDevice;
+
+typedef struct {
+	NMSerialDeviceClass parent;
+
+	/* Padding for future expansion */
+	void (*_reserved1) (void);
+	void (*_reserved2) (void);
+	void (*_reserved3) (void);
+	void (*_reserved4) (void);
+	void (*_reserved5) (void);
+	void (*_reserved6) (void);
+} NMGsmDeviceClass;
+
+GType        nm_gsm_device_get_type (void);
+
+NMGsmDevice *nm_gsm_device_new (DBusGConnection *connection,
+						  const char *path);
+
+G_END_DECLS
+
+#endif /* NM_GSM_DEVICE_H */
diff --git a/libnm-glib/nm-ip4-config.c b/libnm-glib/nm-ip4-config.c
index 9f6096a4..4bedc7a1 100644
--- a/libnm-glib/nm-ip4-config.c
+++ b/libnm-glib/nm-ip4-config.c
@@ -17,7 +17,7 @@
  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
  * Boston, MA 02110-1301 USA.
  *
- * Copyright (C) 2007 - 2011 Novell, Inc.
+ * Copyright (C) 2007 - 2008 Novell, Inc.
  * Copyright (C) 2008 Red Hat, Inc.
  */
 
@@ -47,6 +47,7 @@ typedef struct {
 enum {
 	PROP_0,
 	PROP_ADDRESSES,
+	PROP_HOSTNAME,
 	PROP_NAMESERVERS,
 	PROP_DOMAINS,
 	PROP_ROUTES,
@@ -200,6 +201,9 @@ get_property (GObject *object,
 	case PROP_ADDRESSES:
 		nm_utils_ip4_addresses_to_gvalue (priv->addresses, value);
 		break;
+	case PROP_HOSTNAME:
+		g_value_set_string (value, NULL);
+		break;
 	case PROP_NAMESERVERS:
 		g_value_set_boxed (value, nm_ip4_config_get_nameservers (self));
 		break;
@@ -245,6 +249,19 @@ nm_ip4_config_class_init (NMIP4ConfigClass *config_class)
 						       G_PARAM_READABLE));
 
 	/**
+	 * NMIP4Config:hostname:
+	 *
+	 * DEPRECATED.  Don't use.
+	 **/
+	g_object_class_install_property
+		(object_class, PROP_HOSTNAME,
+		 g_param_spec_string (NM_IP4_CONFIG_HOSTNAME,
+						    "Hostname",
+						    "Hostname",
+						    NULL,
+						    G_PARAM_READABLE));
+
+	/**
 	 * NMIP4Config:nameservers:
 	 *
 	 * The #GArray containing name servers (%guint32<!-- -->es) of the configuration.
@@ -303,7 +320,7 @@ nm_ip4_config_class_init (NMIP4ConfigClass *config_class)
  *
  * Creates a new #NMIP4Config.
  *
- * Returns: (transfer full): a new IP4 configuration
+ * Returns: a new IP4 configuration
  **/
 GObject *
 nm_ip4_config_new (DBusGConnection *connection, const char *object_path)
@@ -320,8 +337,8 @@ nm_ip4_config_new (DBusGConnection *connection, const char *object_path)
  *
  * Gets the IP4 addresses (containing the address, prefix, and gateway).
  *
- * Returns: (element-type NetworkManager.IP4Address): the #GSList containing #NMIP4Address<!-- -->es.
- * This is the internal copy used by the configuration and must not be modified.
+ * Returns: the #GSList containing #NMSettingIP4Address<!-- -->es. This is the internal copy
+ * used by the configuration and must not be modified.
  **/
 const GSList *
 nm_ip4_config_get_addresses (NMIP4Config *config)
@@ -329,7 +346,7 @@ nm_ip4_config_get_addresses (NMIP4Config *config)
 	NMIP4ConfigPrivate *priv;
 	GValue value = { 0, };
 
-	g_return_val_if_fail (NM_IS_IP4_CONFIG (config), NULL);
+	g_return_val_if_fail (NM_IS_IP4_CONFIG (config), 0);
 
 	priv = NM_IP4_CONFIG_GET_PRIVATE (config);
 	if (priv->addresses)
@@ -338,8 +355,7 @@ nm_ip4_config_get_addresses (NMIP4Config *config)
 	if (!_nm_object_get_property (NM_OBJECT (config),
 	                              NM_DBUS_INTERFACE_IP4_CONFIG,
 	                              "Addresses",
-	                              &value,
-	                              NULL)) {
+	                              &value)) {
 		return NULL;
 	}
 
@@ -350,12 +366,26 @@ nm_ip4_config_get_addresses (NMIP4Config *config)
 }
 
 /**
+ * nm_ip4_config_get_hostname:
+ * @config: a #NMIP4Config
+ *
+ * DEPRECATED.  Don't use.
+ *
+ * Returns: NULL
+ **/
+const char *
+nm_ip4_config_get_hostname (NMIP4Config *config)
+{
+	return NULL;
+}
+
+/**
  * nm_ip4_config_get_nameservers:
  * @config: a #NMIP4Config
  *
  * Gets the domain name servers (DNS).
  *
- * Returns: (element-type guint32): the #GArray containing %guint32<!-- -->s. This is the internal copy used by the
+ * Returns: the #GArray containing %guint32<!-- -->s. This is the internal copy used by the
  * configuration and must not be modified.
  **/
 const GArray *
@@ -372,8 +402,7 @@ nm_ip4_config_get_nameservers (NMIP4Config *config)
 		if (_nm_object_get_property (NM_OBJECT (config),
 		                             NM_DBUS_INTERFACE_IP4_CONFIG,
 		                             "Nameservers",
-		                             &value,
-		                             NULL)) {
+		                             &value)) {
 			array = (GArray *) g_value_get_boxed (&value);
 			if (array && array->len) {
 				priv->nameservers = g_array_sized_new (FALSE, TRUE, sizeof (guint32), array->len);
@@ -392,7 +421,7 @@ nm_ip4_config_get_nameservers (NMIP4Config *config)
  *
  * Gets the domain names.
  *
- * Returns: (element-type utf8): the #GPtrArray containing domains as strings. This is the 
+ * Returns: the #GPtrArray containing domains as strings. This is the 
  * internal copy used by the configuration, and must not be modified.
  **/
 const GPtrArray *
@@ -410,8 +439,7 @@ nm_ip4_config_get_domains (NMIP4Config *config)
 	if (_nm_object_get_property (NM_OBJECT (config),
 	                             NM_DBUS_INTERFACE_IP4_CONFIG,
 	                             "Domains",
-	                             &value,
-	                             NULL)) {
+	                             &value)) {
 		char **array = NULL, **p;
 
 		array = (char **) g_value_get_boxed (&value);
@@ -432,8 +460,8 @@ nm_ip4_config_get_domains (NMIP4Config *config)
  *
  * Gets the Windows Internet Name Service servers (WINS).
  *
- * Returns: (element-type guint32): the #GArray containing %guint32<!-- -->s.
- * This is the internal copy used by the configuration and must not be modified.
+ * Returns: the #GArray containing %guint32<!-- -->s. This is the internal copy used by the
+ * configuration and must not be modified.
  **/
 const GArray *
 nm_ip4_config_get_wins_servers (NMIP4Config *config)
@@ -449,8 +477,7 @@ nm_ip4_config_get_wins_servers (NMIP4Config *config)
 		if (_nm_object_get_property (NM_OBJECT (config),
 		                             NM_DBUS_INTERFACE_IP4_CONFIG,
 		                             "Nameservers",
-		                             &value,
-		                             NULL)) {
+		                             &value)) {
 			array = (GArray *) g_value_get_boxed (&value);
 			if (array && array->len) {
 				priv->nameservers = g_array_sized_new (FALSE, TRUE, sizeof (guint32), array->len);
@@ -469,9 +496,8 @@ nm_ip4_config_get_wins_servers (NMIP4Config *config)
  *
  * Gets the routes.
  *
- * Returns: (element-type NetworkManager.IP4Route): the #GSList containing
- * #NMIP4Route<!-- -->s. This is the internal copy used by the configuration,
- * and must not be modified.
+ * Returns: the #GSList containing #NMSettingIP4Route<!-- -->s. This is the 
+ * internal copy used by the configuration, and must not be modified.
  **/
 const GSList *
 nm_ip4_config_get_routes (NMIP4Config *config)
@@ -479,7 +505,7 @@ nm_ip4_config_get_routes (NMIP4Config *config)
 	NMIP4ConfigPrivate *priv;
 	GValue value = { 0, };
 
-	g_return_val_if_fail (NM_IS_IP4_CONFIG (config), NULL);
+	g_return_val_if_fail (NM_IS_IP4_CONFIG (config), 0);
 
 	priv = NM_IP4_CONFIG_GET_PRIVATE (config);
 	if (priv->routes)
@@ -488,8 +514,7 @@ nm_ip4_config_get_routes (NMIP4Config *config)
 	if (!_nm_object_get_property (NM_OBJECT (config),
 	                              NM_DBUS_INTERFACE_IP4_CONFIG,
 	                              "Routes",
-	                              &value,
-	                              NULL)) {
+	                              &value)) {
 		return NULL;
 	}
 
diff --git a/libnm-glib/nm-ip4-config.h b/libnm-glib/nm-ip4-config.h
index ddff7e0e..373d12e1 100644
--- a/libnm-glib/nm-ip4-config.h
+++ b/libnm-glib/nm-ip4-config.h
@@ -55,6 +55,7 @@ typedef struct {
 } NMIP4ConfigClass;
 
 #define NM_IP4_CONFIG_ADDRESSES "addresses"
+#define NM_IP4_CONFIG_HOSTNAME "hostname" /* DEPRECATED */
 #define NM_IP4_CONFIG_NAMESERVERS "nameservers"
 #define NM_IP4_CONFIG_DOMAINS "domains"
 #define NM_IP4_CONFIG_ROUTES "routes"
@@ -65,6 +66,7 @@ GType nm_ip4_config_get_type (void);
 GObject *nm_ip4_config_new (DBusGConnection *connection, const char *object_path);
 
 const GSList *   nm_ip4_config_get_addresses    (NMIP4Config *config);
+const char *     nm_ip4_config_get_hostname     (NMIP4Config *config); /* DEPRECATED */
 const GArray *   nm_ip4_config_get_nameservers  (NMIP4Config *config);
 const GPtrArray *nm_ip4_config_get_domains      (NMIP4Config *config);
 const GSList *   nm_ip4_config_get_routes       (NMIP4Config *config);
diff --git a/libnm-glib/nm-ip6-config.c b/libnm-glib/nm-ip6-config.c
index 7e9bf3cd..fe71c1b8 100644
--- a/libnm-glib/nm-ip6-config.c
+++ b/libnm-glib/nm-ip6-config.c
@@ -18,7 +18,7 @@
  * Boston, MA 02110-1301 USA.
  *
  * Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2008 - 2011 Red Hat, Inc.
+ * Copyright (C) 2008 Red Hat, Inc.
  */
 
 #include <string.h>
@@ -60,7 +60,7 @@ enum {
  *
  * Creates a new #NMIP6Config.
  *
- * Returns: (transfer full): a new IP6 configuration
+ * Returns: a new IP6 configuration
  **/
 GObject *
 nm_ip6_config_new (DBusGConnection *connection, const char *object_path)
@@ -146,9 +146,8 @@ register_for_property_changed (NMIP6Config *config)
  *
  * Gets the IP6 addresses (containing the address, prefix, and gateway).
  *
- * Returns: (element-type NetworkManager.IP6Address): the #GSList containing
- * #NMIP6Address<!-- -->es. This is the internal copy used by the configuration
- * and must not be modified.
+ * Returns: the #GSList containing #NMSettingIP6Address<!-- -->es. This is the internal copy
+ * used by the configuration and must not be modified.
  **/
 const GSList *
 nm_ip6_config_get_addresses (NMIP6Config *config)
@@ -156,7 +155,7 @@ nm_ip6_config_get_addresses (NMIP6Config *config)
 	NMIP6ConfigPrivate *priv;
 	GValue value = { 0, };
 
-	g_return_val_if_fail (NM_IS_IP6_CONFIG (config), NULL);
+	g_return_val_if_fail (NM_IS_IP6_CONFIG (config), 0);
 
 	priv = NM_IP6_CONFIG_GET_PRIVATE (config);
 	if (priv->addresses)
@@ -165,8 +164,7 @@ nm_ip6_config_get_addresses (NMIP6Config *config)
 	if (!_nm_object_get_property (NM_OBJECT (config),
 	                              NM_DBUS_INTERFACE_IP6_CONFIG,
 	                              "Addresses",
-	                              &value,
-	                              NULL)) {
+	                              &value)) {
 		return NULL;
 	}
 
@@ -176,16 +174,15 @@ nm_ip6_config_get_addresses (NMIP6Config *config)
 	return priv->addresses;
 }
 
-/* FIXME: like in libnm_util, in6_addr is not introspectable, so skipping here */
 /**
- * nm_ip6_config_get_nameservers: (skip)
+ * nm_ip6_config_get_nameservers:
  * @config: a #NMIP6Config
  *
  * Gets the domain name servers (DNS).
  *
- * Returns: (element-type Posix.in6_addr): a #GSList containing elements of type
- * 'struct in6_addr' which contain the addresses of nameservers of the configuration.
- * This is the internal copy used by the configuration and must not be modified.
+ * Returns: a #GSList containing elements of type 'struct in6_addr' which contain
+ * the addresses of nameservers of the configuration.  This is the internal copy
+ * used by the configuration and must not be modified.
  **/
 const GSList *
 nm_ip6_config_get_nameservers (NMIP6Config *config)
@@ -203,8 +200,7 @@ nm_ip6_config_get_nameservers (NMIP6Config *config)
 	if (!_nm_object_get_property (NM_OBJECT (config),
 	                              NM_DBUS_INTERFACE_IP6_CONFIG,
 	                              "Nameservers",
-	                              &value,
-	                              NULL)) {
+	                              &value)) {
 		return NULL;
 	}
 
@@ -221,8 +217,8 @@ nm_ip6_config_get_nameservers (NMIP6Config *config)
  *
  * Gets the domain names.
  *
- * Returns: (element-type utf8): the #GPtrArray containing domains as strings.
- * This is the internal copy used by the configuration, and must not be modified.
+ * Returns: the #GPtrArray containing domains as strings. This is the 
+ * internal copy used by the configuration, and must not be modified.
  **/
 const GPtrArray *
 nm_ip6_config_get_domains (NMIP6Config *config)
@@ -239,8 +235,7 @@ nm_ip6_config_get_domains (NMIP6Config *config)
 	if (!_nm_object_get_property (NM_OBJECT (config),
 	                              NM_DBUS_INTERFACE_IP6_CONFIG,
 	                              "Domains",
-	                              &value,
-	                              NULL)) {
+	                              &value)) {
 		return NULL;
 	}
 
@@ -256,9 +251,8 @@ nm_ip6_config_get_domains (NMIP6Config *config)
  *
  * Gets the routes.
  *
- * Returns: (element-type NetworkManager.IP6Route): the #GSList containing
- * #NMIP6Route<!-- -->s. This is the internal copy used by the configuration,
- * and must not be modified.
+ * Returns: the #GSList containing #NMSettingIP6Route<!-- -->s. This is the 
+ * internal copy used by the configuration, and must not be modified.
  **/
 const GSList *
 nm_ip6_config_get_routes (NMIP6Config *config)
@@ -266,7 +260,7 @@ nm_ip6_config_get_routes (NMIP6Config *config)
 	NMIP6ConfigPrivate *priv;
 	GValue value = { 0, };
 
-	g_return_val_if_fail (NM_IS_IP6_CONFIG (config), NULL);
+	g_return_val_if_fail (NM_IS_IP6_CONFIG (config), 0);
 
 	priv = NM_IP6_CONFIG_GET_PRIVATE (config);
 	if (priv->routes)
@@ -275,8 +269,7 @@ nm_ip6_config_get_routes (NMIP6Config *config)
 	if (!_nm_object_get_property (NM_OBJECT (config),
 	                              NM_DBUS_INTERFACE_IP6_CONFIG,
 	                              "Routes",
-	                              &value,
-	                              NULL)) {
+	                              &value)) {
 		return NULL;
 	}
 
diff --git a/libnm-glib/nm-object-cache.c b/libnm-glib/nm-object-cache.c
index c43b4273..fdbca00f 100644
--- a/libnm-glib/nm-object-cache.c
+++ b/libnm-glib/nm-object-cache.c
@@ -67,6 +67,6 @@ _nm_object_cache_get (const char *path)
 
 	_init_cache ();
 	object = g_hash_table_lookup (cache, path);
-	return object ? g_object_ref (object) : NULL;
+	return object;
 }
 
diff --git a/libnm-glib/nm-object-cache.h b/libnm-glib/nm-object-cache.h
index 2348dcfa..b8cf2121 100644
--- a/libnm-glib/nm-object-cache.h
+++ b/libnm-glib/nm-object-cache.h
@@ -29,7 +29,6 @@
 
 G_BEGIN_DECLS
 
-/* Returns referenced object from the cache */
 NMObject *_nm_object_cache_get (const char *path);
 void _nm_object_cache_add (NMObject *object);
 void _nm_object_cache_remove_by_object (NMObject *object);
diff --git a/libnm-glib/nm-object-private.h b/libnm-glib/nm-object-private.h
index 4410df22..93514cbe 100644
--- a/libnm-glib/nm-object-private.h
+++ b/libnm-glib/nm-object-private.h
@@ -17,7 +17,7 @@
  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
  * Boston, MA 02110-1301 USA.
  *
- * Copyright (C) 2008 - 2011 Red Hat, Inc.
+ * Copyright (C) 2008 Red Hat, Inc.
  */
 
 #ifndef NM_OBJECT_PRIVATE_H
@@ -37,11 +37,9 @@ typedef struct {
 } NMPropertiesChangedInfo;
 
 
-void _nm_object_handle_properties_changed (NMObject *object,
-                                           DBusGProxy *proxy,
-                                           const NMPropertiesChangedInfo *info);
-
-void _nm_object_process_properties_changed (NMObject *self, GHashTable *properties);
+void             _nm_object_handle_properties_changed (NMObject *object,
+                                                      DBusGProxy *proxy,
+                                                      const NMPropertiesChangedInfo *info);
 
 gboolean _nm_object_demarshal_generic (NMObject *object, GParamSpec *pspec, GValue *value, gpointer field);
 
@@ -50,55 +48,46 @@ void _nm_object_queue_notify (NMObject *object, const char *property);
 /* DBus property accessors */
 
 gboolean _nm_object_get_property (NMObject *object,
-                                  const char *interface,
-                                  const char *prop_name,
-                                  GValue *value,
-                                  GError **error);
+								 const char *interface,
+								 const char *prop_name,
+								 GValue *value);
 
 void _nm_object_set_property (NMObject *object,
-                              const char *interface,
-                              const char *prop_name,
-                              GValue *value);
+							 const char *interface,
+							 const char *prop_name,
+							 GValue *value);
 
 char *_nm_object_get_string_property (NMObject *object,
-                                      const char *interface,
-                                      const char *prop_name,
-                                      GError **error);
+									 const char *interface,
+									 const char *prop_name);
 
 char *_nm_object_get_object_path_property (NMObject *object,
-                                           const char *interface,
-                                           const char *prop_name,
-                                           GError **error);
+										  const char *interface,
+										  const char *prop_name);
 
 gint32 _nm_object_get_int_property (NMObject *object,
-                                    const char *interface,
-                                    const char *prop_name,
-                                    GError **error);
+								   const char *interface,
+								   const char *prop_name);
 
 guint32 _nm_object_get_uint_property (NMObject *object,
-                                      const char *interface,
-                                      const char *prop_name,
-                                      GError **error);
+									 const char *interface,
+									 const char *prop_name);
 
 gboolean _nm_object_get_boolean_property (NMObject *object,
-                                          const char *interface,
-                                          const char *prop_name,
-                                          GError **error);
+										const char *interface,
+										const char *prop_name);
 
 gint8 _nm_object_get_byte_property (NMObject *object,
-                                    const char *interface,
-                                    const char *prop_name,
-                                    GError **error);
+								   const char *interface,
+								   const char *prop_name);
 
 gdouble _nm_object_get_double_property (NMObject *object,
-                                        const char *interface,
-                                        const char *prop_name,
-                                        GError **error);
+									   const char *interface,
+									   const char *prop_name);
 
 GByteArray *_nm_object_get_byte_array_property (NMObject *object,
-                                                const char *interface,
-                                                const char *prop_name,
-                                                GError **error);
+											   const char *interface,
+											   const char *prop_name);
 
 static inline const GPtrArray *
 handle_ptr_array_return (GPtrArray *array)
diff --git a/libnm-glib/nm-object.c b/libnm-glib/nm-object.c
index 8540ccca..85cb6b78 100644
--- a/libnm-glib/nm-object.c
+++ b/libnm-glib/nm-object.c
@@ -18,7 +18,7 @@
  * Boston, MA 02110-1301 USA.
  *
  * Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2011 Red Hat, Inc.
+ * Copyright (C) 2007 - 2008 Red Hat, Inc.
  */
 
 #include <string.h>
@@ -223,7 +223,7 @@ nm_object_class_init (NMObjectClass *nm_object_class)
  *
  * Gets the #NMObject's DBusGConnection.
  *
- * Returns: (transfer none): the connection
+ * Returns: the connection
  **/
 DBusGConnection *
 nm_object_get_connection (NMObject *object)
@@ -369,18 +369,12 @@ out:
 	g_free (prop_name);
 }
 
-void
-_nm_object_process_properties_changed (NMObject *self, GHashTable *properties)
-{
-	g_hash_table_foreach (properties, handle_property_changed, self);
-}
-
 static void
 properties_changed_proxy (DBusGProxy *proxy,
                           GHashTable *properties,
                           gpointer user_data)
 {
-	_nm_object_process_properties_changed (NM_OBJECT (user_data), properties);
+	g_hash_table_foreach (properties, handle_property_changed, user_data);
 }
 
 void
@@ -486,10 +480,9 @@ done:
 
 gboolean
 _nm_object_get_property (NMObject *object,
-                         const char *interface,
-                         const char *prop_name,
-                         GValue *value,
-                         GError **error)
+						const char *interface,
+						const char *prop_name,
+						GValue *value)
 {
 	GError *err = NULL;
 
@@ -497,7 +490,6 @@ _nm_object_get_property (NMObject *object,
 	g_return_val_if_fail (interface != NULL, FALSE);
 	g_return_val_if_fail (prop_name != NULL, FALSE);
 	g_return_val_if_fail (value != NULL, FALSE);
-	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
 	if (!dbus_g_proxy_call_with_timeout (NM_OBJECT_GET_PRIVATE (object)->properties_proxy,
 							"Get", 15000, &err,
@@ -508,10 +500,8 @@ _nm_object_get_property (NMObject *object,
 							G_TYPE_INVALID)) {
 		/* Don't warn about D-Bus no reply/timeout errors; it's mostly noise and
 		 * happens for example when NM quits and the applet is still running.
-		 * And don't warn when 'error' is not NULL, rather propagate 'err' so the caller
-		 * can do something with it. */
-		if (   !error
-		    && !(err->domain == DBUS_GERROR && err->code == DBUS_GERROR_NO_REPLY)) {
+		 */
+		if (!(err->domain == DBUS_GERROR && err->code == DBUS_GERROR_NO_REPLY)) {
 			g_warning ("%s: Error getting '%s' for %s: (%d) %s\n",
 			           __func__,
 			           prop_name,
@@ -519,7 +509,7 @@ _nm_object_get_property (NMObject *object,
 			           err->code,
 			           err->message);
 		}
-		g_propagate_error (error, err);
+		g_error_free (err);
 		return FALSE;
 	}
 
@@ -552,14 +542,13 @@ _nm_object_set_property (NMObject *object,
 
 char *
 _nm_object_get_string_property (NMObject *object,
-                                const char *interface,
-                                const char *prop_name,
-                                GError **error)
+							   const char *interface,
+							   const char *prop_name)
 {
 	char *str = NULL;
 	GValue value = {0,};
 
-	if (_nm_object_get_property (object, interface, prop_name, &value, error)) {
+	if (_nm_object_get_property (object, interface, prop_name, &value)) {
 		if (G_VALUE_HOLDS_STRING (&value))
 			str = g_strdup (g_value_get_string (&value));
 		else if (G_VALUE_HOLDS (&value, DBUS_TYPE_G_OBJECT_PATH))
@@ -572,14 +561,13 @@ _nm_object_get_string_property (NMObject *object,
 
 char *
 _nm_object_get_object_path_property (NMObject *object,
-                                     const char *interface,
-                                     const char *prop_name,
-                                     GError **error)
+									const char *interface,
+									const char *prop_name)
 {
 	char *path = NULL;
 	GValue value = {0,};
 
-	if (_nm_object_get_property (object, interface, prop_name, &value, error)) {
+	if (_nm_object_get_property (object, interface, prop_name, &value)) {
 		path = g_strdup (g_value_get_boxed (&value));
 		g_value_unset (&value);
 	}
@@ -589,14 +577,13 @@ _nm_object_get_object_path_property (NMObject *object,
 
 gint32
 _nm_object_get_int_property (NMObject *object,
-                             const char *interface,
-                             const char *prop_name,
-                             GError **error)
+							const char *interface,
+							const char *prop_name)
 {
 	gint32 i = 0;
 	GValue value = {0,};
 
-	if (_nm_object_get_property (object, interface, prop_name, &value, error)) {
+	if (_nm_object_get_property (object, interface, prop_name, &value)) {
 		i = g_value_get_int (&value);
 		g_value_unset (&value);
 	}
@@ -606,14 +593,13 @@ _nm_object_get_int_property (NMObject *object,
 
 guint32
 _nm_object_get_uint_property (NMObject *object,
-                              const char *interface,
-                              const char *prop_name,
-                              GError **error)
+							 const char *interface,
+							 const char *prop_name)
 {
 	guint32 i = 0;
 	GValue value = {0,};
 
-	if (_nm_object_get_property (object, interface, prop_name, &value, error)) {
+	if (_nm_object_get_property (object, interface, prop_name, &value)) {
 		i = g_value_get_uint (&value);
 		g_value_unset (&value);
 	}
@@ -623,14 +609,13 @@ _nm_object_get_uint_property (NMObject *object,
 
 gboolean
 _nm_object_get_boolean_property (NMObject *object,
-                                 const char *interface,
-                                 const char *prop_name,
-                                 GError **error)
+								const char *interface,
+								const char *prop_name)
 {
-	gboolean b = FALSE;
+	gboolean b = FALSE;  // FIXME: somehow convey failure if needed
 	GValue value = {0,};
 
-	if (_nm_object_get_property (object, interface, prop_name, &value, error)) {
+	if (_nm_object_get_property (object, interface, prop_name, &value)) {
 		b = g_value_get_boolean (&value);
 		g_value_unset (&value);
 	}
@@ -640,14 +625,13 @@ _nm_object_get_boolean_property (NMObject *object,
 
 gint8
 _nm_object_get_byte_property (NMObject *object,
-                              const char *interface,
-                              const char *prop_name,
-                              GError **error)
+							 const char *interface,
+							 const char *prop_name)
 {
 	gint8 b = G_MAXINT8;
 	GValue value = {0,};
 
-	if (_nm_object_get_property (object, interface, prop_name, &value, error)) {
+	if (_nm_object_get_property (object, interface, prop_name, &value)) {
 		b = g_value_get_uchar (&value);
 		g_value_unset (&value);
 	}
@@ -657,14 +641,13 @@ _nm_object_get_byte_property (NMObject *object,
 
 gdouble
 _nm_object_get_double_property (NMObject *object,
-                                const char *interface,
-                                const char *prop_name,
-                                GError **error)
+							   const char *interface,
+							   const char *prop_name)
 {
 	gdouble d = G_MAXDOUBLE;
 	GValue value = {0,};
 
-	if (_nm_object_get_property (object, interface, prop_name, &value, error)) {
+	if (_nm_object_get_property (object, interface, prop_name, &value)) {
 		d = g_value_get_double (&value);
 		g_value_unset (&value);
 	}
@@ -674,14 +657,13 @@ _nm_object_get_double_property (NMObject *object,
 
 GByteArray *
 _nm_object_get_byte_array_property (NMObject *object,
-                                    const char *interface,
-                                    const char *prop_name,
-                                    GError **error)
+								   const char *interface,
+								   const char *prop_name)
 {
-	GByteArray *array = NULL;
+	GByteArray * array = NULL;
 	GValue value = {0,};
 
-	if (_nm_object_get_property (object, interface, prop_name, &value, error)) {
+	if (_nm_object_get_property (object, interface, prop_name, &value)) {
 		GArray * tmp = g_value_get_boxed (&value);
 		int i;
 		unsigned char byte;
diff --git a/libnm-glib/nm-remote-connection-private.h b/libnm-glib/nm-remote-connection-private.h
index 3df57606..22d84ae7 100644
--- a/libnm-glib/nm-remote-connection-private.h
+++ b/libnm-glib/nm-remote-connection-private.h
@@ -28,8 +28,7 @@
 typedef enum {
 	NM_REMOTE_CONNECTION_INIT_RESULT_UNKNOWN = 0,
 	NM_REMOTE_CONNECTION_INIT_RESULT_SUCCESS,
-	NM_REMOTE_CONNECTION_INIT_RESULT_ERROR,
-	NM_REMOTE_CONNECTION_INIT_RESULT_INVISIBLE,
+	NM_REMOTE_CONNECTION_INIT_RESULT_ERROR
 } NMRemoteConnectionInitResult;
 
 #endif  /* __NM_REMOTE_CONNECTION_PRIVATE__ */
diff --git a/libnm-glib/nm-remote-connection.c b/libnm-glib/nm-remote-connection.c
index 57870c62..1039a7d1 100644
--- a/libnm-glib/nm-remote-connection.c
+++ b/libnm-glib/nm-remote-connection.c
@@ -18,7 +18,7 @@
  * Boston, MA 02110-1301 USA.
  *
  * Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2011 Red Hat, Inc.
+ * Copyright (C) 2007 - 2010 Red Hat, Inc.
  */
 
 #include <string.h>
@@ -29,11 +29,15 @@
 #include "nm-remote-connection.h"
 #include "nm-remote-connection-private.h"
 #include "nm-dbus-glib-types.h"
-#include "nm-settings-connection-bindings.h"
+#include "nm-exported-connection-bindings.h"
+#include "nm-settings-connection-interface.h"
 
 #define NM_REMOTE_CONNECTION_BUS "bus"
 
-G_DEFINE_TYPE (NMRemoteConnection, nm_remote_connection, NM_TYPE_CONNECTION)
+static void settings_connection_interface_init (NMSettingsConnectionInterface *klass);
+
+G_DEFINE_TYPE_EXTENDED (NMRemoteConnection, nm_remote_connection, NM_TYPE_CONNECTION, 0,
+                        G_IMPLEMENT_INTERFACE (NM_TYPE_SETTINGS_CONNECTION_INTERFACE, settings_connection_interface_init))
 
 enum {
 	PROP_0,
@@ -43,18 +47,10 @@ enum {
 	LAST_PROP
 };
 
-enum {
-	UPDATED,
-	REMOVED,
-	VISIBLE,
-
-	LAST_SIGNAL
-};
-static guint signals[LAST_SIGNAL] = { 0 };
-
 
 typedef struct {
 	NMRemoteConnection *self;
+	DBusGProxy *proxy;
 	DBusGProxyCall *call;
 	GFunc callback;
 	gpointer user_data;
@@ -63,10 +59,10 @@ typedef struct {
 typedef struct {
 	DBusGConnection *bus;
 	DBusGProxy *proxy;
+	DBusGProxy *secrets_proxy;
 	GSList *calls;
 
 	NMRemoteConnectionInitResult init_result;
-	gboolean visible;
 	gboolean disposed;
 } NMRemoteConnectionPrivate;
 
@@ -92,184 +88,161 @@ static void
 update_cb (DBusGProxy *proxy, GError *error, gpointer user_data)
 {
 	RemoteCall *call = user_data;
-	NMRemoteConnectionCommitFunc func = (NMRemoteConnectionCommitFunc) call->callback;
+	NMSettingsConnectionInterfaceUpdateFunc func = (NMSettingsConnectionInterfaceUpdateFunc) call->callback;
 
-	(*func)(call->self, error, call->user_data);
+	(*func)(NM_SETTINGS_CONNECTION_INTERFACE (call->self), error, call->user_data);
 	remote_call_complete (call->self, call);
 }
 
-/**
- * nm_remote_connection_commit_changes:
- * @connection: the #NMRemoteConnection
- * @callback: (scope async): a function to be called when the commit completes
- * @user_data: caller-specific data to be passed to @callback
- *
- * Save any local changes to the settings and properties of this connection and
- * save them in the settings service.
- **/
-void
-nm_remote_connection_commit_changes (NMRemoteConnection *self,
-                                     NMRemoteConnectionCommitFunc callback,
-                                     gpointer user_data)
+static gboolean
+update (NMSettingsConnectionInterface *connection,
+        NMSettingsConnectionInterfaceUpdateFunc callback,
+        gpointer user_data)
 {
-	NMRemoteConnectionPrivate *priv;
+	NMRemoteConnection *self = NM_REMOTE_CONNECTION (connection);
+	NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (self);
 	GHashTable *settings = NULL;
 	RemoteCall *call;
 
-	g_return_if_fail (self != NULL);
-	g_return_if_fail (NM_IS_REMOTE_CONNECTION (self));
-	g_return_if_fail (callback != NULL);
-
-	priv = NM_REMOTE_CONNECTION_GET_PRIVATE (self);
-
 	call = g_malloc0 (sizeof (RemoteCall));
 	call->self = self;
 	call->callback = (GFunc) callback;
 	call->user_data = user_data;
+	call->proxy = priv->proxy;
 
-	settings = nm_connection_to_hash (NM_CONNECTION (self), NM_SETTING_HASH_FLAG_ALL);
+	settings = nm_connection_to_hash (NM_CONNECTION (self));
 
-	call->call = org_freedesktop_NetworkManager_Settings_Connection_update_async (priv->proxy,
-	                                                                              settings,
-	                                                                              update_cb,
-	                                                                              call);
+	call->call = org_freedesktop_NetworkManagerSettings_Connection_update_async (priv->proxy,
+	                                                                             settings,
+	                                                                             update_cb,
+	                                                                             call);
 	g_assert (call->call);
 	priv->calls = g_slist_append (priv->calls, call);
 
 	g_hash_table_destroy (settings);
+
+	return TRUE;
 }
 
 static void
 delete_cb (DBusGProxy *proxy, GError *error, gpointer user_data)
 {
 	RemoteCall *call = user_data;
-	NMRemoteConnectionDeleteFunc func = (NMRemoteConnectionDeleteFunc) call->callback;
+	NMSettingsConnectionInterfaceDeleteFunc func = (NMSettingsConnectionInterfaceDeleteFunc) call->callback;
 
-	if (func != NULL)
-		(*func)(call->self, error, call->user_data);
+	(*func)(NM_SETTINGS_CONNECTION_INTERFACE (call->self), error, call->user_data);
 	remote_call_complete (call->self, call);
 }
 
-/**
- * nm_remote_connection_delete:
- * @connection: the #NMRemoteConnection
- * @callback: (scope async) (allow-none): a function to be called when the delete completes
- * @user_data: caller-specific data to be passed to @callback
- *
- * Delete the connection.
- **/
-void
-nm_remote_connection_delete (NMRemoteConnection *self,
-                             NMRemoteConnectionDeleteFunc callback,
-                             gpointer user_data)
+static gboolean
+do_delete (NMSettingsConnectionInterface *connection,
+           NMSettingsConnectionInterfaceDeleteFunc callback,
+           gpointer user_data)
 {
-	NMRemoteConnectionPrivate *priv;
+	NMRemoteConnection *self = NM_REMOTE_CONNECTION (connection);
+	NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (self);
 	RemoteCall *call;
 
-	g_return_if_fail (self != NULL);
-	g_return_if_fail (NM_IS_REMOTE_CONNECTION (self));
-
-	priv = NM_REMOTE_CONNECTION_GET_PRIVATE (self);
-
 	call = g_malloc0 (sizeof (RemoteCall));
 	call->self = self;
 	call->callback = (GFunc) callback;
 	call->user_data = user_data;
+	call->proxy = priv->proxy;
 
-	call->call = org_freedesktop_NetworkManager_Settings_Connection_delete_async (priv->proxy,
-	                                                                              delete_cb,
-	                                                                              call);
+	call->call = org_freedesktop_NetworkManagerSettings_Connection_delete_async (priv->proxy,
+	                                                                             delete_cb,
+	                                                                             call);
 	g_assert (call->call);
 	priv->calls = g_slist_append (priv->calls, call);
+
+	return TRUE;
 }
 
 static void
 get_secrets_cb (DBusGProxy *proxy, GHashTable *secrets, GError *error, gpointer user_data)
 {
 	RemoteCall *call = user_data;
-	NMRemoteConnectionGetSecretsFunc func = (NMRemoteConnectionGetSecretsFunc) call->callback;
+	NMSettingsConnectionInterfaceGetSecretsFunc func = (NMSettingsConnectionInterfaceGetSecretsFunc) call->callback;
 
-	(*func)(call->self, error ? NULL : secrets, error, call->user_data);
+	(*func)(NM_SETTINGS_CONNECTION_INTERFACE (call->self), error ? NULL : secrets, error, call->user_data);
 	remote_call_complete (call->self, call);
 }
 
-/**
- * nm_remote_connection_get_secrets:
- * @connection: the #NMRemoteConnection
- * @setting_name: the #NMSetting object name to get secrets for
- * @callback: (scope async): a function to be called when the update completes
- * @user_data: caller-specific data to be passed to @callback
- *
- * Request the connection's secrets.
- **/
-void
-nm_remote_connection_get_secrets (NMRemoteConnection *self,
-                                  const char *setting_name,
-                                  NMRemoteConnectionGetSecretsFunc callback,
-                                  gpointer user_data)
+static gboolean
+get_secrets (NMSettingsConnectionInterface *connection,
+             const char *setting_name,
+             const char **hints,
+             gboolean request_new,
+             NMSettingsConnectionInterfaceGetSecretsFunc callback,
+             gpointer user_data)
 {
-	NMRemoteConnectionPrivate *priv;
+	NMRemoteConnection *self = NM_REMOTE_CONNECTION (connection);
+	NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (self);
 	RemoteCall *call;
 
-	g_return_if_fail (self != NULL);
-	g_return_if_fail (NM_IS_REMOTE_CONNECTION (self));
-	g_return_if_fail (callback != NULL);
-
-	priv = NM_REMOTE_CONNECTION_GET_PRIVATE (self);
-
 	call = g_malloc0 (sizeof (RemoteCall));
 	call->self = self;
 	call->callback = (GFunc) callback;
 	call->user_data = user_data;
-
-	call->call = org_freedesktop_NetworkManager_Settings_Connection_get_secrets_async (priv->proxy,
-	                                                                                   setting_name,
-	                                                                                   get_secrets_cb,
-	                                                                                   call);
+	call->proxy = priv->secrets_proxy;
+
+	call->call = org_freedesktop_NetworkManagerSettings_Connection_Secrets_get_secrets_async (priv->secrets_proxy,
+	                                                                                          setting_name,
+	                                                                                          hints,
+	                                                                                          request_new,
+	                                                                                          get_secrets_cb,
+	                                                                                          call);
 	g_assert (call->call);
 	priv->calls = g_slist_append (priv->calls, call);
+
+	return TRUE;
 }
 
 /****************************************************************/
 
-static void
+static gboolean
 replace_settings (NMRemoteConnection *self, GHashTable *new_settings)
 {
 	GError *error = NULL;
 
-	if (nm_connection_replace_settings (NM_CONNECTION (self), new_settings, &error))
-		g_signal_emit (self, signals[UPDATED], 0, new_settings);
-	else {
-		g_warning ("%s: error updating connection %s settings: (%d) %s",
+	if (!nm_connection_replace_settings (NM_CONNECTION (self), new_settings, &error)) {
+		g_warning ("%s: error updating %s connection %s settings: (%d) %s",
 		           __func__,
+		           (nm_connection_get_scope (NM_CONNECTION (self)) == NM_CONNECTION_SCOPE_USER) ? "user" : "system",
 		           nm_connection_get_path (NM_CONNECTION (self)),
 		           error ? error->code : -1,
 		           (error && error->message) ? error->message : "(unknown)");
 		g_clear_error (&error);
-
-		g_signal_emit (self, signals[REMOVED], 0);
+		return FALSE;
 	}
+
+	/* Emit update irregardless to let listeners figure out what to do with
+	 * the connection; whether to delete / ignore it or not.
+	 */
+	nm_settings_connection_interface_emit_updated (NM_SETTINGS_CONNECTION_INTERFACE (self));
+	return TRUE;
 }
 
 static void
-init_get_settings_cb (DBusGProxy *proxy,
-                      GHashTable *new_settings,
-                      GError *error,
-                      gpointer user_data)
+get_settings_cb (DBusGProxy *proxy,
+                 GHashTable *new_settings,
+                 GError *error,
+                 gpointer user_data)
 {
 	NMRemoteConnection *self = user_data;
 	NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (self);
 
 	if (error) {
-		/* Connection doesn't exist, or isn't visible to this user */
-		if (dbus_g_error_has_name (error, "org.freedesktop.NetworkManager.Settings.PermissionDenied"))
-			priv->init_result = NM_REMOTE_CONNECTION_INIT_RESULT_INVISIBLE;
-		else
-			priv->init_result = NM_REMOTE_CONNECTION_INIT_RESULT_ERROR;
-
+		g_warning ("%s: error getting %s connection %s settings: (%d) %s",
+		           __func__,
+		           (nm_connection_get_scope (NM_CONNECTION (self)) == NM_CONNECTION_SCOPE_USER) ? "user" : "system",
+		           nm_connection_get_path (NM_CONNECTION (self)),
+		           error ? error->code : -1,
+		           (error && error->message) ? error->message : "(unknown)");
+		g_error_free (error);
+		priv->init_result = NM_REMOTE_CONNECTION_INIT_RESULT_ERROR;
 		g_object_notify (G_OBJECT (self), NM_REMOTE_CONNECTION_INIT_RESULT);
 	} else {
-		priv->visible = TRUE;
 		replace_settings (self, new_settings);
 		g_hash_table_destroy (new_settings);
 		priv->init_result = NM_REMOTE_CONNECTION_INIT_RESULT_SUCCESS;
@@ -278,64 +251,34 @@ init_get_settings_cb (DBusGProxy *proxy,
 }
 
 static void
-updated_get_settings_cb (DBusGProxy *proxy,
-                         GHashTable *new_settings,
-                         GError *error,
-                         gpointer user_data)
+updated_cb (DBusGProxy *proxy, GHashTable *settings, gpointer user_data)
 {
-	NMRemoteConnection *self = user_data;
-	NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (self);
-
-	if (error) {
-		GHashTable *hash;
-
-		/* Connection is no longer visible to this user.  Let the settings
-		 * service handle this via 'visible'.  The settings service will emit
-		 * the "removed" signal for us since it handles the lifetime of this
-		 * object.
-		 */
-		hash = g_hash_table_new (g_str_hash, g_str_equal);
-		nm_connection_replace_settings (NM_CONNECTION (self), hash, NULL);
-		g_hash_table_destroy (hash);
-
-		priv->visible = FALSE;
-		g_signal_emit (self, signals[VISIBLE], 0, FALSE);
-	} else {
-		replace_settings (self, new_settings);
-		g_hash_table_destroy (new_settings);
-
-		/* Settings service will handle announcing the connection to clients */
-		if (priv->visible == FALSE) {
-			priv->visible = TRUE;
-			g_signal_emit (self, signals[VISIBLE], 0, TRUE);
-		}
-	}
+	replace_settings (NM_REMOTE_CONNECTION (user_data), settings);
 }
 
 static void
-updated_cb (DBusGProxy *proxy, gpointer user_data)
+removed_cb (DBusGProxy *proxy, gpointer user_data)
 {
-	NMRemoteConnection *self = NM_REMOTE_CONNECTION (user_data);
-	NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (self);
-
-	/* The connection got updated; request the replacement settings */
-	org_freedesktop_NetworkManager_Settings_Connection_get_settings_async (priv->proxy,
-	                                                                       updated_get_settings_cb,
-	                                                                       self);
+	g_signal_emit_by_name (G_OBJECT (user_data), "removed");
 }
 
+/****************************************************************/
+
 static void
-removed_cb (DBusGProxy *proxy, gpointer user_data)
+settings_connection_interface_init (NMSettingsConnectionInterface *klass)
 {
-	g_signal_emit (G_OBJECT (user_data), signals[REMOVED], 0);
+	/* interface implementation */
+	klass->update = update;
+	klass->delete = do_delete;
+	klass->get_secrets = get_secrets;
 }
 
-/****************************************************************/
-
 /**
  * nm_remote_connection_new:
  * @bus: a valid and connected D-Bus connection
+ * @scope: the Connection scope (either user or system)
  * @path: the D-Bus path of the connection as exported by the settings service
+ *  indicated by @scope
  *
  * Creates a new object representing the remote connection.
  *
@@ -343,6 +286,7 @@ removed_cb (DBusGProxy *proxy, gpointer user_data)
  **/
 NMRemoteConnection *
 nm_remote_connection_new (DBusGConnection *bus,
+                          NMConnectionScope scope,
                           const char *path)
 {
 	g_return_val_if_fail (bus != NULL, NULL);
@@ -350,6 +294,7 @@ nm_remote_connection_new (DBusGConnection *bus,
 
 	return (NMRemoteConnection *) g_object_new (NM_TYPE_REMOTE_CONNECTION,
 	                                            NM_REMOTE_CONNECTION_BUS, bus,
+	                                            NM_CONNECTION_SCOPE, scope,
 	                                            NM_CONNECTION_PATH, path,
 	                                            NULL);
 }
@@ -361,6 +306,7 @@ constructor (GType type,
 {
 	GObject *object;
 	NMRemoteConnectionPrivate *priv;
+	const char *service = NM_DBUS_SERVICE_USER_SETTINGS;
 
 	object = G_OBJECT_CLASS (nm_remote_connection_parent_class)->constructor (type, n_construct_params, construct_params);
 	if (!object)
@@ -370,22 +316,32 @@ constructor (GType type,
 	g_assert (priv->bus);
 	g_assert (nm_connection_get_path (NM_CONNECTION (object)));
 
+	if (nm_connection_get_scope (NM_CONNECTION (object)) == NM_CONNECTION_SCOPE_SYSTEM)
+		service = NM_DBUS_SERVICE_SYSTEM_SETTINGS;
+
 	priv->proxy = dbus_g_proxy_new_for_name (priv->bus,
-	                                         NM_DBUS_SERVICE,
+	                                         service,
 	                                         nm_connection_get_path (NM_CONNECTION (object)),
 	                                         NM_DBUS_IFACE_SETTINGS_CONNECTION);
 	g_assert (priv->proxy);
 	dbus_g_proxy_set_default_timeout (priv->proxy, G_MAXINT);
 
-	dbus_g_proxy_add_signal (priv->proxy, "Updated", G_TYPE_INVALID);
+	priv->secrets_proxy = dbus_g_proxy_new_for_name (priv->bus,
+	                                                 service,
+	                                                 nm_connection_get_path (NM_CONNECTION (object)),
+	                                                 NM_DBUS_IFACE_SETTINGS_CONNECTION_SECRETS);
+	g_assert (priv->secrets_proxy);
+	dbus_g_proxy_set_default_timeout (priv->secrets_proxy, G_MAXINT);
+
+	dbus_g_proxy_add_signal (priv->proxy, "Updated", DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT, G_TYPE_INVALID);
 	dbus_g_proxy_connect_signal (priv->proxy, "Updated", G_CALLBACK (updated_cb), object, NULL);
 
 	dbus_g_proxy_add_signal (priv->proxy, "Removed", G_TYPE_INVALID);
 	dbus_g_proxy_connect_signal (priv->proxy, "Removed", G_CALLBACK (removed_cb), object, NULL);
 
-	org_freedesktop_NetworkManager_Settings_Connection_get_settings_async (priv->proxy,
-	                                                                       init_get_settings_cb,
-	                                                                       object);
+	org_freedesktop_NetworkManagerSettings_Connection_get_settings_async (priv->proxy,
+	                                                                      get_settings_cb,
+	                                                                      object);
 	return object;
 }
 
@@ -441,6 +397,7 @@ dispose (GObject *object)
 			remote_call_complete (self, priv->calls->data);
 
 		g_object_unref (priv->proxy);
+		g_object_unref (priv->secrets_proxy);
 		dbus_g_connection_unref (priv->bus);
 	}
 
@@ -478,46 +435,5 @@ nm_remote_connection_class_init (NMRemoteConnectionClass *remote_class)
 		                    NM_REMOTE_CONNECTION_INIT_RESULT_ERROR,
 		                    NM_REMOTE_CONNECTION_INIT_RESULT_UNKNOWN,
 		                    G_PARAM_READABLE));
-
-	/* Signals */
-	/**
-	 * NMRemoteConnection::updated:
-	 * @connection: a #NMConnection
-	 *
-	 * This signal is emitted when a connection changes, and it is
-	 * still visible to the user.
-	 */
-	signals[UPDATED] = 
-		g_signal_new (NM_REMOTE_CONNECTION_UPDATED,
-		              G_TYPE_FROM_CLASS (remote_class),
-		              G_SIGNAL_RUN_FIRST,
-		              G_STRUCT_OFFSET (NMRemoteConnectionClass, updated),
-		              NULL, NULL,
-		              g_cclosure_marshal_VOID__VOID,
-		              G_TYPE_NONE, 0);
-
-	/**
-	 * NMRemoteConnection::removed:
-	 * @connection: a #NMConnection
-	 *
-	 * This signal is emitted when a connection is either deleted or becomes
-	 * invisible to the current user.
-	 */
-	signals[REMOVED] = 
-		g_signal_new (NM_REMOTE_CONNECTION_REMOVED,
-		              G_TYPE_FROM_CLASS (remote_class),
-		              G_SIGNAL_RUN_FIRST,
-		              G_STRUCT_OFFSET (NMRemoteConnectionClass, removed),
-	 	              NULL, NULL,
-		              g_cclosure_marshal_VOID__VOID,
-		              G_TYPE_NONE, 0);
-
-	/* Private signal */
-	signals[VISIBLE] =
-		g_signal_new ("visible",
-		              G_TYPE_FROM_CLASS (remote_class),
-		              G_SIGNAL_RUN_FIRST,
-		              0, NULL, NULL,
-		              g_cclosure_marshal_VOID__BOOLEAN,
-		              G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
 }
+
diff --git a/libnm-glib/nm-remote-connection.h b/libnm-glib/nm-remote-connection.h
index 809927ea..ef5452f9 100644
--- a/libnm-glib/nm-remote-connection.h
+++ b/libnm-glib/nm-remote-connection.h
@@ -18,7 +18,7 @@
  * Boston, MA 02110-1301 USA.
  *
  * Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2011 Red Hat, Inc.
+ * Copyright (C) 2007 - 2009 Red Hat, Inc.
  */
 
 #ifndef __NM_REMOTE_CONNECTION_H__
@@ -38,9 +38,6 @@ G_BEGIN_DECLS
 #define NM_IS_REMOTE_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NM_TYPE_REMOTE_CONNECTION))
 #define NM_REMOTE_CONNECTION_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_REMOTE_CONNECTION, NMRemoteConnectionClass))
 
-#define NM_REMOTE_CONNECTION_UPDATED         "updated"
-#define NM_REMOTE_CONNECTION_REMOVED         "removed"
-
 typedef struct {
 	NMConnection parent;
 } NMRemoteConnection;
@@ -48,12 +45,6 @@ typedef struct {
 typedef struct {
 	NMConnectionClass parent_class;
 
-	/* Signals */
-	void (*updated) (NMRemoteConnection *connection,
-	                 GHashTable *new_settings);
-
-	void (*removed) (NMRemoteConnection *connection);
-
 	/* Padding for future expansion */
 	void (*_reserved1) (void);
 	void (*_reserved2) (void);
@@ -63,36 +54,11 @@ typedef struct {
 	void (*_reserved6) (void);
 } NMRemoteConnectionClass;
 
-typedef void (*NMRemoteConnectionCommitFunc) (NMRemoteConnection *connection,
-                                              GError *error,
-                                              gpointer user_data);
-
-typedef void (*NMRemoteConnectionDeleteFunc) (NMRemoteConnection *connection,
-                                              GError *error,
-                                              gpointer user_data);
-
-typedef void (*NMRemoteConnectionGetSecretsFunc) (NMRemoteConnection *connection,
-                                                  GHashTable *secrets,
-                                                  GError *error,
-                                                  gpointer user_data);
-
 GType nm_remote_connection_get_type (void);
 
 NMRemoteConnection *nm_remote_connection_new (DBusGConnection *bus,
+                                              NMConnectionScope scope,
                                               const char *path);
-
-void nm_remote_connection_commit_changes (NMRemoteConnection *connection,
-                                          NMRemoteConnectionCommitFunc callback,
-                                          gpointer user_data);
-
-void nm_remote_connection_delete (NMRemoteConnection *connection,
-                                  NMRemoteConnectionDeleteFunc callback,
-                                  gpointer user_data);
-
-void nm_remote_connection_get_secrets (NMRemoteConnection *connection,
-                                       const char *setting_name,
-                                       NMRemoteConnectionGetSecretsFunc callback,
-                                       gpointer user_data);
 G_END_DECLS
 
 #endif  /* __NM_REMOTE_CONNECTION__ */
diff --git a/libnm-glib/nm-remote-settings-system.c b/libnm-glib/nm-remote-settings-system.c
new file mode 100644
index 00000000..95098c7e
--- /dev/null
+++ b/libnm-glib/nm-remote-settings-system.c
@@ -0,0 +1,375 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * libnm_glib -- Access network status & information from glib applications
+ *
+ * This library 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 of the License, or (at your option) any later version.
+ *
+ * This library 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 this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2008 Novell, Inc.
+ * Copyright (C) 2009 - 2010 Red Hat, Inc.
+ */
+
+#include <string.h>
+#include <NetworkManager.h>
+#include <nm-connection.h>
+
+#include "nm-marshal.h"
+#include "nm-dbus-glib-types.h"
+#include "nm-remote-settings-system.h"
+#include "nm-settings-system-bindings.h"
+#include "nm-settings-system-interface.h"
+
+static void settings_system_interface_init (NMSettingsSystemInterface *klass);
+
+G_DEFINE_TYPE_EXTENDED (NMRemoteSettingsSystem, nm_remote_settings_system, NM_TYPE_REMOTE_SETTINGS, 0,
+                        G_IMPLEMENT_INTERFACE (NM_TYPE_SETTINGS_SYSTEM_INTERFACE, settings_system_interface_init))
+
+#define NM_REMOTE_SETTINGS_SYSTEM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_REMOTE_SETTINGS_SYSTEM, NMRemoteSettingsSystemPrivate))
+
+typedef struct {
+	DBusGProxy *proxy;
+	DBusGProxy *props_proxy;
+
+	char *hostname;
+	gboolean can_modify;
+
+	NMSettingsSystemPermissions permissions;
+	gboolean have_permissions;
+
+	gboolean disposed;
+} NMRemoteSettingsSystemPrivate;
+
+static void
+properties_changed_cb (DBusGProxy *proxy,
+                       GHashTable *properties,
+                       gpointer user_data)
+{
+	NMRemoteSettingsSystem *self = NM_REMOTE_SETTINGS_SYSTEM (user_data);
+	NMRemoteSettingsSystemPrivate *priv = NM_REMOTE_SETTINGS_SYSTEM_GET_PRIVATE (self);
+	GHashTableIter iter;
+	gpointer key, tmp;
+
+	g_hash_table_iter_init (&iter, properties);
+	while (g_hash_table_iter_next (&iter, &key, &tmp)) {
+		GValue *value = tmp;
+
+		if (!strcmp ((const char *) key, "Hostname")) {
+			g_free (priv->hostname);
+			priv->hostname = g_value_dup_string (value);
+			g_object_notify (G_OBJECT (self), NM_SETTINGS_SYSTEM_INTERFACE_HOSTNAME);
+		}
+
+		if (!strcmp ((const char *) key, "CanModify")) {
+			priv->can_modify = g_value_get_boolean (value);
+			g_object_notify (G_OBJECT (self), NM_SETTINGS_SYSTEM_INTERFACE_CAN_MODIFY);
+		}
+	}
+}
+
+static void
+get_all_cb  (DBusGProxy *proxy,
+             DBusGProxyCall *call,
+             gpointer user_data)
+{
+	NMRemoteSettingsSystem *self = NM_REMOTE_SETTINGS_SYSTEM (user_data);
+	GHashTable *props = NULL;
+	GError *error = NULL;
+
+	if (!dbus_g_proxy_end_call (proxy, call, &error,
+	                            DBUS_TYPE_G_MAP_OF_VARIANT, &props,
+	                            G_TYPE_INVALID)) {
+		/* Don't warn when the call times out because the settings service can't
+		 * be activated or whatever.
+		 */
+		if (!(error->domain == DBUS_GERROR && error->code == DBUS_GERROR_NO_REPLY)) {
+			g_warning ("%s: couldn't retrieve system settings properties: (%d) %s.",
+			           __func__,
+			           error ? error->code : -1,
+			           (error && error->message) ? error->message : "(unknown)");
+		}
+		g_clear_error (&error);
+		return;
+	}
+
+	properties_changed_cb (NULL, props, self);
+	g_hash_table_destroy (props);
+}
+
+typedef struct {
+	NMSettingsSystemInterface *settings;
+	NMSettingsSystemSaveHostnameFunc callback;
+	gpointer callback_data;
+} SaveHostnameInfo;
+
+static void
+save_hostname_cb (DBusGProxy *proxy,
+                  DBusGProxyCall *call,
+                  gpointer user_data)
+{
+	SaveHostnameInfo *info = user_data;
+	GError *error = NULL;
+
+	dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID);
+	info->callback (info->settings, error, info->callback_data);
+	g_clear_error (&error);
+}
+
+static gboolean
+save_hostname (NMSettingsSystemInterface *settings,
+	           const char *hostname,
+	           NMSettingsSystemSaveHostnameFunc callback,
+	           gpointer user_data)
+{
+	NMRemoteSettingsSystem *self = NM_REMOTE_SETTINGS_SYSTEM (settings);
+	NMRemoteSettingsSystemPrivate *priv = NM_REMOTE_SETTINGS_SYSTEM_GET_PRIVATE (self);
+	SaveHostnameInfo *info;
+
+	info = g_malloc0 (sizeof (SaveHostnameInfo));
+	info->settings = settings;
+	info->callback = callback;
+	info->callback_data = user_data;
+
+	dbus_g_proxy_begin_call (priv->proxy, "SaveHostname",
+	                         save_hostname_cb,
+	                         info,
+	                         g_free,
+	                         G_TYPE_STRING, hostname ? hostname : "",
+	                         G_TYPE_INVALID);
+	return TRUE;
+}
+
+typedef struct {
+	NMSettingsSystemInterface *settings;
+	NMSettingsSystemGetPermissionsFunc callback;
+	gpointer callback_data;
+} GetPermissionsInfo;
+
+static void
+get_permissions_cb  (DBusGProxy *proxy,
+                     DBusGProxyCall *call,
+                     gpointer user_data)
+{
+	GetPermissionsInfo *info = user_data;
+	NMRemoteSettingsSystem *self = NM_REMOTE_SETTINGS_SYSTEM (info->settings);
+	NMRemoteSettingsSystemPrivate *priv = NM_REMOTE_SETTINGS_SYSTEM_GET_PRIVATE (self);
+	NMSettingsSystemPermissions permissions = NM_SETTINGS_SYSTEM_PERMISSION_NONE;
+	GError *error = NULL;
+
+	dbus_g_proxy_end_call (proxy, call, &error,
+	                       G_TYPE_UINT, &permissions,
+	                       G_TYPE_INVALID);
+	priv->permissions = permissions;
+	priv->have_permissions = !error;
+	info->callback (info->settings, permissions, error, info->callback_data);
+	g_clear_error (&error);
+}
+
+static gboolean
+get_permissions (NMSettingsSystemInterface *settings,
+                 NMSettingsSystemGetPermissionsFunc callback,
+                 gpointer user_data)
+{
+	NMRemoteSettingsSystemPrivate *priv = NM_REMOTE_SETTINGS_SYSTEM_GET_PRIVATE (settings);
+	GetPermissionsInfo *info;
+
+	/* Skip D-Bus if we already have permissions */
+	if (priv->have_permissions) {
+		callback (settings, priv->permissions, NULL, user_data);
+		return TRUE;
+	}
+
+	/* Otherwise fetch them from NM */
+	info = g_malloc0 (sizeof (GetPermissionsInfo));
+	info->settings = settings;
+	info->callback = callback;
+	info->callback_data = user_data;
+
+	dbus_g_proxy_begin_call (priv->proxy, "GetPermissions",
+	                         get_permissions_cb,
+	                         info,
+	                         g_free,
+	                         G_TYPE_INVALID);
+	return TRUE;
+}
+
+static void
+check_permissions_cb (DBusGProxy *proxy, gpointer user_data)
+{
+	NMRemoteSettingsSystem *self = NM_REMOTE_SETTINGS_SYSTEM (user_data);
+	NMRemoteSettingsSystemPrivate *priv = NM_REMOTE_SETTINGS_SYSTEM_GET_PRIVATE (self);
+
+	/* Permissions need to be re-fetched */
+	priv->have_permissions = FALSE;
+	g_signal_emit_by_name (self, NM_SETTINGS_SYSTEM_INTERFACE_CHECK_PERMISSIONS);
+}
+
+/****************************************************************/
+
+static void
+settings_system_interface_init (NMSettingsSystemInterface *klass)
+{
+	/* interface implementation */
+	klass->save_hostname = save_hostname;
+	klass->get_permissions = get_permissions;
+}
+
+/**
+ * nm_remote_settings_system_new:
+ * @bus: a valid and connected D-Bus connection
+ *
+ * Creates a new object representing the remote system settings service.
+ *
+ * Returns: the new remote system settings object on success, or %NULL on failure
+ **/
+NMRemoteSettingsSystem *
+nm_remote_settings_system_new (DBusGConnection *bus)
+{
+	g_return_val_if_fail (bus != NULL, NULL);
+
+	return (NMRemoteSettingsSystem *) g_object_new (NM_TYPE_REMOTE_SETTINGS_SYSTEM,
+	                                                NM_REMOTE_SETTINGS_BUS, bus,
+	                                                NM_REMOTE_SETTINGS_SCOPE, NM_CONNECTION_SCOPE_SYSTEM,
+	                                                NULL);
+}
+
+static void
+nm_remote_settings_system_init (NMRemoteSettingsSystem *self)
+{
+}
+
+static GObject *
+constructor (GType type,
+             guint n_construct_params,
+             GObjectConstructParam *construct_params)
+{
+	GObject *object;
+	NMRemoteSettingsSystemPrivate *priv;
+	DBusGConnection *bus = NULL;
+
+	object = G_OBJECT_CLASS (nm_remote_settings_system_parent_class)->constructor (type, n_construct_params, construct_params);
+	if (!object)
+		return NULL;
+
+	priv = NM_REMOTE_SETTINGS_SYSTEM_GET_PRIVATE (object);
+
+	g_object_get (G_OBJECT (object), NM_REMOTE_SETTINGS_BUS, &bus, NULL);
+	g_assert (bus);
+
+	/* D-Bus properties proxy */
+	priv->props_proxy = dbus_g_proxy_new_for_name (bus,
+	                                               NM_DBUS_SERVICE_SYSTEM_SETTINGS,
+	                                               NM_DBUS_PATH_SETTINGS,
+	                                               "org.freedesktop.DBus.Properties");
+	g_assert (priv->props_proxy);
+
+	/* System settings proxy */
+	priv->proxy = dbus_g_proxy_new_for_name (bus,
+	                                         NM_DBUS_SERVICE_SYSTEM_SETTINGS,
+	                                         NM_DBUS_PATH_SETTINGS,
+	                                         NM_DBUS_IFACE_SETTINGS_SYSTEM);
+	g_assert (priv->proxy);
+	dbus_g_proxy_set_default_timeout (priv->proxy, G_MAXINT);
+
+	dbus_g_object_register_marshaller (g_cclosure_marshal_VOID__BOXED,
+	                                   G_TYPE_NONE,
+	                                   DBUS_TYPE_G_MAP_OF_VARIANT,
+	                                   G_TYPE_INVALID);
+	dbus_g_proxy_add_signal (priv->proxy, "PropertiesChanged",
+	                         DBUS_TYPE_G_MAP_OF_VARIANT,
+	                         G_TYPE_INVALID);
+	dbus_g_proxy_connect_signal (priv->proxy, "PropertiesChanged",
+	                             G_CALLBACK (properties_changed_cb),
+	                             object,
+	                             NULL);
+
+	/* Monitor for permissions changes */
+	dbus_g_proxy_add_signal (priv->proxy, "CheckPermissions", G_TYPE_INVALID);
+	dbus_g_proxy_connect_signal (priv->proxy, "CheckPermissions",
+	                             G_CALLBACK (check_permissions_cb),
+	                             object,
+	                             NULL);
+
+	/* Get properties */
+	dbus_g_proxy_begin_call (priv->props_proxy, "GetAll",
+	                         get_all_cb,
+	                         object,
+	                         NULL,
+	                         G_TYPE_STRING, NM_DBUS_IFACE_SETTINGS_SYSTEM,
+	                         G_TYPE_INVALID);
+
+	dbus_g_connection_unref (bus);
+
+	return object;
+}
+
+static void
+dispose (GObject *object)
+{
+	NMRemoteSettingsSystemPrivate *priv = NM_REMOTE_SETTINGS_SYSTEM_GET_PRIVATE (object);
+
+	if (priv->disposed)
+		return;
+
+	priv->disposed = TRUE;
+
+	g_free (priv->hostname);
+
+	g_object_unref (priv->props_proxy);
+	g_object_unref (priv->proxy);
+
+	G_OBJECT_CLASS (nm_remote_settings_system_parent_class)->dispose (object);
+}
+
+static void
+get_property (GObject *object, guint prop_id,
+              GValue *value, GParamSpec *pspec)
+{
+	NMRemoteSettingsSystemPrivate *priv = NM_REMOTE_SETTINGS_SYSTEM_GET_PRIVATE (object);
+
+	switch (prop_id) {
+	case NM_SETTINGS_SYSTEM_INTERFACE_PROP_HOSTNAME:
+		g_value_set_string (value, priv->hostname);
+		break;
+	case NM_SETTINGS_SYSTEM_INTERFACE_PROP_CAN_MODIFY:
+		g_value_set_boolean (value, priv->can_modify);
+		break;
+	default:
+		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+		break;
+	}
+}
+
+static void
+nm_remote_settings_system_class_init (NMRemoteSettingsSystemClass *klass)
+{
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+	g_type_class_add_private (klass, sizeof (NMRemoteSettingsSystemPrivate));
+
+	/* Virtual methods */
+	object_class->constructor = constructor;
+	object_class->get_property = get_property;
+	object_class->dispose = dispose;
+
+	/* Properties */
+	g_object_class_override_property (object_class,
+									  NM_SETTINGS_SYSTEM_INTERFACE_PROP_HOSTNAME,
+									  NM_SETTINGS_SYSTEM_INTERFACE_HOSTNAME);
+
+	g_object_class_override_property (object_class,
+									  NM_SETTINGS_SYSTEM_INTERFACE_PROP_CAN_MODIFY,
+									  NM_SETTINGS_SYSTEM_INTERFACE_CAN_MODIFY);
+}
+
diff --git a/libnm-glib/nm-remote-settings-system.h b/libnm-glib/nm-remote-settings-system.h
new file mode 100644
index 00000000..b5182273
--- /dev/null
+++ b/libnm-glib/nm-remote-settings-system.h
@@ -0,0 +1,64 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * libnm_glib -- Access network status & information from glib applications
+ *
+ * This library 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 of the License, or (at your option) any later version.
+ *
+ * This library 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 this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2008 Novell, Inc.
+ * Copyright (C) 2009 Red Hat, Inc.
+ */
+
+#ifndef NM_REMOTE_SETTINGS_SYSTEM_H
+#define NM_REMOTE_SETTINGS_SYSTEM_H
+
+#include <glib.h>
+#include <dbus/dbus-glib.h>
+
+#include "nm-remote-settings.h"
+#include "nm-settings-system-interface.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_REMOTE_SETTINGS_SYSTEM            (nm_remote_settings_system_get_type ())
+#define NM_REMOTE_SETTINGS_SYSTEM(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_REMOTE_SETTINGS_SYSTEM, NMRemoteSettingsSystem))
+#define NM_REMOTE_SETTINGS_SYSTEM_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_REMOTE_SETTINGS_SYSTEM, NMRemoteSettingsSystemClass))
+#define NM_IS_REMOTE_SETTINGS_SYSTEM(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_REMOTE_SETTINGS_SYSTEM))
+#define NM_IS_REMOTE_SETTINGS_SYSTEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NM_TYPE_REMOTE_SETTINGS_SYSTEM))
+#define NM_REMOTE_SETTINGS_SYSTEM_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_REMOTE_SETTINGS_SYSTEM, NMRemoteSettingsSystemClass))
+
+typedef struct {
+	NMRemoteSettings parent;
+} NMRemoteSettingsSystem;
+
+typedef struct {
+	NMRemoteSettingsClass parent;
+
+	/* Padding for future expansion */
+	void (*_reserved1) (void);
+	void (*_reserved2) (void);
+	void (*_reserved3) (void);
+	void (*_reserved4) (void);
+	void (*_reserved5) (void);
+	void (*_reserved6) (void);
+} NMRemoteSettingsSystemClass;
+
+GType nm_remote_settings_system_get_type (void);
+
+NMRemoteSettingsSystem *nm_remote_settings_system_new (DBusGConnection *bus);
+
+G_END_DECLS
+
+#endif /* NM_REMOTE_SETTINGS_SYSTEM_H */
diff --git a/libnm-glib/nm-remote-settings.c b/libnm-glib/nm-remote-settings.c
index e8239d78..6a9a1d71 100644
--- a/libnm-glib/nm-remote-settings.c
+++ b/libnm-glib/nm-remote-settings.c
@@ -18,7 +18,7 @@
  * Boston, MA 02110-1301 USA.
  *
  * Copyright (C) 2008 Novell, Inc.
- * Copyright (C) 2009 - 2011 Red Hat, Inc.
+ * Copyright (C) 2009 - 2010 Red Hat, Inc.
  */
 
 #include <string.h>
@@ -26,30 +26,26 @@
 #include <nm-connection.h>
 
 #include "nm-marshal.h"
-#include "nm-dbus-glib-types.h"
 #include "nm-remote-settings.h"
 #include "nm-settings-bindings.h"
+#include "nm-settings-interface.h"
 #include "nm-remote-connection-private.h"
 
-G_DEFINE_TYPE (NMRemoteSettings, nm_remote_settings, G_TYPE_OBJECT)
+static void settings_interface_init (NMSettingsInterface *class);
+
+G_DEFINE_TYPE_EXTENDED (NMRemoteSettings, nm_remote_settings, G_TYPE_OBJECT, 0,
+                        G_IMPLEMENT_INTERFACE (NM_TYPE_SETTINGS_INTERFACE, settings_interface_init))
 
 #define NM_REMOTE_SETTINGS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_REMOTE_SETTINGS, NMRemoteSettingsPrivate))
 
 typedef struct {
 	DBusGConnection *bus;
+	NMConnectionScope scope;
 
 	DBusGProxy *proxy;
 	GHashTable *connections;
 	GHashTable *pending;  /* Connections we don't have settings for yet */
 	gboolean service_running;
-	guint32 init_left;
-
-	/* AddConnectionInfo objects that are waiting for the connection to become initialized */
-	GSList *add_list;
-	
-	DBusGProxy *props_proxy;
-	char *hostname;
-	gboolean can_modify;
 
 	DBusGProxy *dbus_proxy;
 
@@ -61,124 +57,15 @@ typedef struct {
 enum {
 	PROP_0,
 	PROP_BUS,
+	PROP_SCOPE,
 	PROP_SERVICE_RUNNING,
-	PROP_HOSTNAME,
-	PROP_CAN_MODIFY,
 
 	LAST_PROP
 };
 
-/* Signals */
-enum {
-	NEW_CONNECTION,
-	CONNECTIONS_READ,
-
-	LAST_SIGNAL
-};
-static guint signals[LAST_SIGNAL] = { 0 };
-
-/**********************************************************************/
-
-/**
- * nm_remote_settings_error_quark:
- *
- * Registers an error quark for #NMRemoteSettings if necessary.
- *
- * Returns: the error quark used for #NMRemoteSettings errors.
- **/
-GQuark
-nm_remote_settings_error_quark (void)
-{
-	static GQuark quark;
-
-	if (G_UNLIKELY (!quark))
-		quark = g_quark_from_static_string ("nm-remote-settings-error-quark");
-	return quark;
-}
-
-/* This should really be standard. */
-#define ENUM_ENTRY(NAME, DESC) { NAME, "" #NAME "", DESC }
-
-GType
-nm_remote_settings_error_get_type (void)
-{
-	static GType etype = 0;
-
-	if (etype == 0) {
-		static const GEnumValue values[] = {
-			ENUM_ENTRY (NM_REMOTE_SETTINGS_ERROR_UNKNOWN, "UnknownError"),
-			ENUM_ENTRY (NM_REMOTE_SETTINGS_ERROR_CONNECTION_REMOVED, "ConnectionRemoved"),
-			ENUM_ENTRY (NM_REMOTE_SETTINGS_ERROR_CONNECTION_UNAVAILABLE, "ConnectionUnavailable"),
-			{ 0, 0, 0 }
-		};
-		etype = g_enum_register_static ("NMRemoteSettingsError", values);
-	}
-	return etype;
-}
-
-/**********************************************************************/
-
-typedef struct {
-	NMRemoteSettings *self;
-	NMRemoteSettingsAddConnectionFunc callback;
-	gpointer callback_data;
-	NMRemoteConnection *connection;
-} AddConnectionInfo;
-
-static AddConnectionInfo *
-add_connection_info_find (NMRemoteSettings *self, NMRemoteConnection *connection)
-{
-	NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (self);
-	GSList *iter;
-
-	for (iter = priv->add_list; iter; iter = g_slist_next (iter)) {
-		AddConnectionInfo *info = iter->data;
-
-		if (info->connection == connection)
-			return info;
-	}
-
-	return NULL;
-}
-
-static void
-add_connection_info_dispose (NMRemoteSettings *self, AddConnectionInfo *info)
-{
-	NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (self);
-
-	priv->add_list = g_slist_remove (priv->add_list, info);
-
-	g_free (info);
-}
-
-static void
-add_connection_info_complete (NMRemoteSettings *self,
-                              AddConnectionInfo *info,
-                              GError *error)
-{
-	g_return_if_fail (info != NULL);
-
-	info->callback (info->self, error ? NULL : info->connection, error, info->callback_data);
-	add_connection_info_dispose (self, info);
-}
-
-/**
- * nm_remote_settings_get_connection_by_path:
- * @settings: the %NMRemoteSettings
- * @path: the D-Bus object path of the remote connection
- *
- * Returns the %NMRemoteConnection representing the connection at @path.
- *
- * Returns: (transfer none): the remote connection object on success, or NULL if the object was
- *  not known
- **/
-NMRemoteConnection *
-nm_remote_settings_get_connection_by_path (NMRemoteSettings *settings, const char *path)
+static NMSettingsConnectionInterface *
+get_connection_by_path (NMSettingsInterface *settings, const char *path)
 {
-	g_return_val_if_fail (settings != NULL, NULL);
-	g_return_val_if_fail (NM_IS_REMOTE_SETTINGS (settings), NULL);
-	g_return_val_if_fail (path != NULL, NULL);
-
 	return g_hash_table_lookup (NM_REMOTE_SETTINGS_GET_PRIVATE (settings)->connections, path);
 }
 
@@ -187,68 +74,14 @@ connection_removed_cb (NMRemoteConnection *remote, gpointer user_data)
 {
 	NMRemoteSettings *self = NM_REMOTE_SETTINGS (user_data);
 	NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (self);
-	AddConnectionInfo *addinfo;
-	GError *add_error;
 	const char *path;
 
-	/* Might have been removed while it was waiting to be initialized */
-	addinfo = add_connection_info_find (self, remote);
-	if (addinfo) {
-		add_error = g_error_new_literal (NM_REMOTE_SETTINGS_ERROR,
-		                                 NM_REMOTE_SETTINGS_ERROR_CONNECTION_REMOVED,
-		                                 "Connection removed before it was initialized");
-		add_connection_info_complete (self, addinfo, add_error);
-		g_error_free (add_error);
-	}
-
 	path = nm_connection_get_path (NM_CONNECTION (remote));
 	g_hash_table_remove (priv->connections, path);
 	g_hash_table_remove (priv->pending, path);
 }
 
 static void
-connection_visible_cb (NMRemoteConnection *remote,
-                       gboolean visible,
-                       gpointer user_data)
-{
-	NMRemoteSettings *self = NM_REMOTE_SETTINGS (user_data);
-	NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (self);
-	const char *path;
-
-	path = nm_connection_get_path (NM_CONNECTION (remote));
-	g_assert (path);
-
-	/* When a connection becomes invisible, we put it back in the pending
-	 * hash until it becomes visible again.  When it does, we move it back to
-	 * the normal connections hash.
-	 */
-	if (visible) {
-		/* Connection visible to this user again */
-		if (g_hash_table_lookup (priv->pending, path)) {
-			/* Move connection from pending to visible hash; emit for clients */
-			g_hash_table_insert (priv->connections, g_strdup (path), g_object_ref (remote));
-			g_hash_table_remove (priv->pending, path);
-			g_signal_emit (self, signals[NEW_CONNECTION], 0, remote);
-		}
-	} else {
-		/* Connection now invisible to this user */
-		if (g_hash_table_lookup (priv->connections, path)) {
-			/* Move connection to pending hash and wait for it to become visible again */
-			g_hash_table_insert (priv->pending, g_strdup (path), g_object_ref (remote));
-			g_hash_table_remove (priv->connections, path);
-
-			/* Signal to clients that the connection is gone; but we have to
-			 * block our connection removed handler so we don't destroy
-			 * the connection when the signal is emitted.
-			 */
-			g_signal_handlers_block_by_func (remote, connection_removed_cb, self);
-			g_signal_emit_by_name (remote, NM_REMOTE_CONNECTION_REMOVED);
-			g_signal_handlers_unblock_by_func (remote, connection_removed_cb, self);
-		}
-	}
-}
-
-static void
 connection_init_result_cb (NMRemoteConnection *remote,
                            GParamSpec *pspec,
                            gpointer user_data)
@@ -256,10 +89,7 @@ connection_init_result_cb (NMRemoteConnection *remote,
 	NMRemoteSettings *self = NM_REMOTE_SETTINGS (user_data);
 	NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (self);
 	guint32 init_result = NM_REMOTE_CONNECTION_INIT_RESULT_UNKNOWN;
-	AddConnectionInfo *addinfo;
 	const char *path;
-	GError *add_error = NULL;
-	gboolean remove_from_pending = TRUE;
 
 	/* Disconnect from the init-result signal just to be safe */
 	g_signal_handlers_disconnect_matched (remote,
@@ -276,8 +106,6 @@ connection_init_result_cb (NMRemoteConnection *remote,
 	              NM_REMOTE_CONNECTION_INIT_RESULT, &init_result,
 	              NULL);
 
-	addinfo = add_connection_info_find (self, remote);
-
 	switch (init_result) {
 	case NM_REMOTE_CONNECTION_INIT_RESULT_SUCCESS:
 		/* ref it when adding to ->connections, since removing it from ->pending
@@ -285,69 +113,36 @@ connection_init_result_cb (NMRemoteConnection *remote,
 		 */
 		g_hash_table_insert (priv->connections, g_strdup (path), g_object_ref (remote));
 
-		/* If there's a pending AddConnection request, complete that here before
-		 * signaling new-connection.
-		 */
-		if (addinfo)
-			add_connection_info_complete (self, addinfo, NULL);
-
 		/* Finally, let users know of the new connection now that it has all
 		 * its settings and is valid.
 		 */
-		g_signal_emit (self, signals[NEW_CONNECTION], 0, remote);
+		g_signal_emit_by_name (self, "new-connection", remote);
 		break;
-	case NM_REMOTE_CONNECTION_INIT_RESULT_INVISIBLE:
-		remove_from_pending = FALSE;
-		/* fall through */
 	case NM_REMOTE_CONNECTION_INIT_RESULT_ERROR:
-		/* Complete pending AddConnection callbacks */
-		if (addinfo) {
-			add_error = g_error_new_literal (NM_REMOTE_SETTINGS_ERROR,
-			                                 NM_REMOTE_SETTINGS_ERROR_CONNECTION_UNAVAILABLE,
-			                                 "Connection not visible or not available");
-			add_connection_info_complete (self, addinfo, add_error);
-			g_error_free (add_error);
-		}
-		break;
 	default:
 		break;
 	}
 
-	if (remove_from_pending)
-		g_hash_table_remove (priv->pending, path);
+	g_hash_table_remove (priv->pending, path);
 
 	/* Let listeners know that all connections have been found */
-	priv->init_left--;
-	if (priv->init_left == 0)
-		g_signal_emit (self, signals[CONNECTIONS_READ], 0);
+	if (!g_hash_table_size (priv->pending))
+		g_signal_emit_by_name (self, NM_SETTINGS_INTERFACE_CONNECTIONS_READ);
 }
 
-static NMRemoteConnection *
+static void
 new_connection_cb (DBusGProxy *proxy, const char *path, gpointer user_data)
 {
 	NMRemoteSettings *self = NM_REMOTE_SETTINGS (user_data);
 	NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (self);
-	NMRemoteConnection *connection = NULL;
-
-	/* Make double-sure we don't already have it */
-	connection = g_hash_table_lookup (priv->pending, path);
-	if (connection)
-		return connection;
-	connection = g_hash_table_lookup (priv->connections, path);
-	if (connection)
-		return connection;
-
-	/* Create a new connection object for it */
-	connection = nm_remote_connection_new (priv->bus, path);
+	NMRemoteConnection *connection;
+
+	connection = nm_remote_connection_new (priv->bus, priv->scope, path);
 	if (connection) {
-		g_signal_connect (connection, NM_REMOTE_CONNECTION_REMOVED,
+		g_signal_connect (connection, "removed",
 		                  G_CALLBACK (connection_removed_cb),
 		                  self);
 
-		g_signal_connect (connection, "visible",
-		                  G_CALLBACK (connection_visible_cb),
-		                  self);
-
 		g_signal_connect (connection, "notify::" NM_REMOTE_CONNECTION_INIT_RESULT,
 		                  G_CALLBACK (connection_init_result_cb),
 		                  self);
@@ -358,7 +153,6 @@ new_connection_cb (DBusGProxy *proxy, const char *path, gpointer user_data)
 		 */
 		g_hash_table_insert (priv->pending, g_strdup (path), connection);
 	}
-	return connection;
 }
 
 static void
@@ -368,38 +162,45 @@ fetch_connections_done (DBusGProxy *proxy,
                         gpointer user_data)
 {
 	NMRemoteSettings *self = NM_REMOTE_SETTINGS (user_data);
-	NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (self);
+	NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (self);	
 	int i;
 
 	if (error) {
-		/* Ignore settings service spawn errors */
-		if (   !g_error_matches (error, DBUS_GERROR, DBUS_GERROR_SERVICE_UNKNOWN)
-		    && !g_error_matches (error, DBUS_GERROR, DBUS_GERROR_NAME_HAS_NO_OWNER)) {
-			g_warning ("%s: error fetching connections: (%d) %s.",
-			           __func__,
+		gboolean is_spawn_error = FALSE;
+
+		/* Don't warn if the user settings service wasn't running since that's
+		 * just annoying when running headless.
+		 */
+		if (   g_error_matches (error, DBUS_GERROR, DBUS_GERROR_SERVICE_UNKNOWN)
+		    || g_error_matches (error, DBUS_GERROR, DBUS_GERROR_NAME_HAS_NO_OWNER))
+			is_spawn_error = TRUE;
+
+		if (!is_spawn_error || priv->scope == NM_CONNECTION_SCOPE_SYSTEM) {
+			g_warning ("%s: error fetching %s connections: (%d) %s.",
+				       __func__,
+				       priv->scope == NM_CONNECTION_SCOPE_USER ? "user" : "system",
 				       error->code,
 				       error->message ? error->message : "(unknown)");
 		}
 		g_clear_error (&error);
 
 		/* We tried to read connections and failed */
-		g_signal_emit (self, signals[CONNECTIONS_READ], 0);
+		g_signal_emit_by_name (self, NM_SETTINGS_INTERFACE_CONNECTIONS_READ);
 		return;
 	}
 
 	/* Let listeners know we are done getting connections */
-	if (connections->len == 0)
-		g_signal_emit (self, signals[CONNECTIONS_READ], 0);
-	else {
-		priv->init_left = connections->len;
-		for (i = 0; i < connections->len; i++) {
-			char *path = g_ptr_array_index (connections, i);
-
-			new_connection_cb (proxy, path, user_data);
-			g_free (path);
-		}
+	if (connections->len == 0) {
+		g_signal_emit_by_name (self, NM_SETTINGS_INTERFACE_CONNECTIONS_READ);
+		return;
 	}
 
+	for (i = 0; connections && (i < connections->len); i++) {
+		char *path = g_ptr_array_index (connections, i);
+
+		new_connection_cb (proxy, path, user_data);
+		g_free (path);
+	}
 	g_ptr_array_free (connections, TRUE);
 }
 
@@ -411,36 +212,20 @@ fetch_connections (gpointer user_data)
 
 	priv->fetch_id = 0;
 
-	org_freedesktop_NetworkManager_Settings_list_connections_async (priv->proxy,
-	                                                                fetch_connections_done,
-	                                                                self);
+	org_freedesktop_NetworkManagerSettings_list_connections_async (priv->proxy,
+	                                                               fetch_connections_done,
+	                                                               self);
 	return FALSE;
 }
 
-/**
- * nm_remote_settings_list_connections:
- * @settings: the %NMRemoteSettings
- *
- * Returns: (transfer container) (element-type NMClient.RemoteConnection): a
- * list containing all connections provided by the remote settings service.
- * Each element of the returned list is a %NMRemoteConnection instance, which is
- * owned by the %NMRemoteSettings object and should not be freed by the caller.
- * The returned list is, however, owned by the caller and should be freed
- * using g_slist_free() when no longer required.
- **/
-GSList *
-nm_remote_settings_list_connections (NMRemoteSettings *settings)
+static GSList *
+list_connections (NMSettingsInterface *settings)
 {
-	NMRemoteSettingsPrivate *priv;
+	NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (settings);
 	GSList *list = NULL;
 	GHashTableIter iter;
 	gpointer value;
 
-	g_return_val_if_fail (settings != NULL, NULL);
-	g_return_val_if_fail (NM_IS_REMOTE_SETTINGS (settings), NULL);
-
-	priv = NM_REMOTE_SETTINGS_GET_PRIVATE (settings);
-
 	g_hash_table_iter_init (&iter, priv->connections);
 	while (g_hash_table_iter_next (&iter, NULL, &value))
 		list = g_slist_prepend (list, NM_REMOTE_CONNECTION (value));
@@ -448,77 +233,53 @@ nm_remote_settings_list_connections (NMRemoteSettings *settings)
 	return list;
 }
 
+typedef struct {
+	NMSettingsInterface *self;
+	NMSettingsAddConnectionFunc callback;
+	gpointer callback_data;
+} AddConnectionInfo;
+
 static void
-add_connection_done (DBusGProxy *proxy, DBusGProxyCall *call, gpointer user_data)
+add_connection_done (DBusGProxy *proxy,
+                     GError *error,
+                     gpointer user_data)
 {
 	AddConnectionInfo *info = user_data;
-	GError *error = NULL;
-	char *path = NULL;
 
-	if (dbus_g_proxy_end_call (proxy, call, &error, DBUS_TYPE_G_OBJECT_PATH, &path, G_TYPE_INVALID)) {
-		info->connection = new_connection_cb (proxy, path, info->self);
-		g_assert (info->connection);
-		/* Wait until this connection is fully initialized before calling the callback */
-		g_free (path);
-	} else
-		add_connection_info_complete (info->self, info, error);
-
-	g_clear_error (&error);
+	info->callback (info->self, error, info->callback_data);
+	g_free (info);
 }
 
-/**
- * nm_remote_settings_add_connection:
- * @settings: the %NMRemoteSettings
- * @connection: the connection to add. Note that this object's settings will be
- *   added, not the object itself
- * @callback: (scope async): callback to be called when the add operation completes
- * @user_data: caller-specific data passed to @callback
- *
- * Requests that the remote settings service add the given settings to a new
- * connection.
- *
- * Returns: TRUE if the request was successful, FALSE if it failed
- **/
-gboolean
-nm_remote_settings_add_connection (NMRemoteSettings *settings,
-                                   NMConnection *connection,
-                                   NMRemoteSettingsAddConnectionFunc callback,
-                                   gpointer user_data)
+static gboolean
+add_connection (NMSettingsInterface *settings,
+	            NMConnection *connection,
+	            NMSettingsAddConnectionFunc callback,
+	            gpointer user_data)
 {
-	NMRemoteSettingsPrivate *priv;
+	NMRemoteSettings *self = NM_REMOTE_SETTINGS (settings);
+	NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (self);
 	AddConnectionInfo *info;
 	GHashTable *new_settings;
 
-	g_return_val_if_fail (settings != NULL, FALSE);
-	g_return_val_if_fail (NM_IS_REMOTE_SETTINGS (settings), FALSE);
-	g_return_val_if_fail (connection != NULL, FALSE);
-	g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
-	g_return_val_if_fail (callback != NULL, FALSE);
-
-	priv = NM_REMOTE_SETTINGS_GET_PRIVATE (settings);
-	
 	info = g_malloc0 (sizeof (AddConnectionInfo));
 	info->self = settings;
 	info->callback = callback;
 	info->callback_data = user_data;
 
-	new_settings = nm_connection_to_hash (connection, NM_SETTING_HASH_FLAG_ALL);
-	dbus_g_proxy_begin_call (priv->proxy, "AddConnection",
-	                         add_connection_done,
-	                         info,
-	                         NULL,
-	                         DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT, new_settings,
-	                         G_TYPE_INVALID);
+	new_settings = nm_connection_to_hash (connection);
+	org_freedesktop_NetworkManagerSettings_add_connection_async (priv->proxy,
+	                                                             new_settings,
+	                                                             add_connection_done,
+	                                                             info);
 	g_hash_table_destroy (new_settings);
-
-	priv->add_list = g_slist_append (priv->add_list, info);
-
 	return TRUE;
 }
 
-static void
-clear_one_hash (GHashTable *table)
+static gboolean
+remove_connections (gpointer user_data)
 {
+	NMRemoteSettings *self = NM_REMOTE_SETTINGS (user_data);
+	NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (self);
 	GHashTableIter iter;
 	gpointer value;
 	GSList *list = NULL, *list_iter;
@@ -528,90 +289,18 @@ clear_one_hash (GHashTable *table)
 	 * that explicitly removes the the connection from the hash table somewhere
 	 * else.
 	 */
-	g_hash_table_iter_init (&iter, table);
+	g_hash_table_iter_init (&iter, priv->connections);
 	while (g_hash_table_iter_next (&iter, NULL, &value))
 		list = g_slist_prepend (list, NM_REMOTE_CONNECTION (value));
 
 	for (list_iter = list; list_iter; list_iter = g_slist_next (list_iter))
-		g_signal_emit_by_name (NM_REMOTE_CONNECTION (list_iter->data), NM_REMOTE_CONNECTION_REMOVED);
+		g_signal_emit_by_name (NM_REMOTE_CONNECTION (list_iter->data), "removed");
 	g_slist_free (list);
 
-	g_hash_table_remove_all (table);
-}
-
-static gboolean
-remove_connections (gpointer user_data)
-{
-	NMRemoteSettings *self = NM_REMOTE_SETTINGS (user_data);
-	NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (self);
-
-	clear_one_hash (priv->pending);
-	clear_one_hash (priv->connections);
+	g_hash_table_remove_all (priv->connections);
 	return FALSE;
 }
 
-typedef struct {
-	NMRemoteSettings *settings;
-	NMRemoteSettingsSaveHostnameFunc callback;
-	gpointer callback_data;
-} SaveHostnameInfo;
-
-static void
-save_hostname_cb (DBusGProxy *proxy,
-                  DBusGProxyCall *call,
-                  gpointer user_data)
-{
-	SaveHostnameInfo *info = user_data;
-	GError *error = NULL;
-
-	dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID);
-	info->callback (info->settings, error, info->callback_data);
-	g_clear_error (&error);
-}
-
-/**
- * nm_remote_settings_save_hostname:
- * @settings: the %NMRemoteSettings
- * @hostname: the new persistent hostname to set, or NULL to clear any existing
- *  persistent hostname
- * @callback: (scope async): callback to be called when the hostname operation completes
- * @user_data: caller-specific data passed to @callback
- *
- * Requests that the machine's persistent hostname be set to the specified value
- * or cleared.
- *
- * Returns: TRUE if the request was successful, FALSE if it failed
- **/
-gboolean
-nm_remote_settings_save_hostname (NMRemoteSettings *settings,
-                                  const char *hostname,
-                                  NMRemoteSettingsSaveHostnameFunc callback,
-                                  gpointer user_data)
-{
-	NMRemoteSettingsPrivate *priv;
-	SaveHostnameInfo *info;
-
-	g_return_val_if_fail (settings != NULL, FALSE);
-	g_return_val_if_fail (NM_IS_REMOTE_SETTINGS (settings), FALSE);
-	g_return_val_if_fail (hostname != NULL, FALSE);
-	g_return_val_if_fail (callback != NULL, FALSE);
-	
-	priv = NM_REMOTE_SETTINGS_GET_PRIVATE (settings);
-
-	info = g_malloc0 (sizeof (SaveHostnameInfo));
-	info->settings = settings;
-	info->callback = callback;
-	info->callback_data = user_data;
-
-	dbus_g_proxy_begin_call (priv->proxy, "SaveHostname",
-	                         save_hostname_cb,
-	                         info,
-	                         g_free,
-	                         G_TYPE_STRING, hostname ? hostname : "",
-	                         G_TYPE_INVALID);
-	return TRUE;
-}
-
 static void
 name_owner_changed (DBusGProxy *proxy,
                     const char *name,
@@ -621,7 +310,10 @@ name_owner_changed (DBusGProxy *proxy,
 {
 	NMRemoteSettings *self = NM_REMOTE_SETTINGS (user_data);
 	NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (self);
-	const char *sname = NM_DBUS_SERVICE;
+	const char *sname = NM_DBUS_SERVICE_USER_SETTINGS;
+
+	if (priv->scope == NM_CONNECTION_SCOPE_SYSTEM)
+		sname = NM_DBUS_SERVICE_SYSTEM_SETTINGS;
 
 	if (!strcmp (name, sname)) {
 		if (priv->fetch_id)
@@ -638,80 +330,35 @@ name_owner_changed (DBusGProxy *proxy,
 	}
 }
 
-static void
-properties_changed_cb (DBusGProxy *proxy,
-                       GHashTable *properties,
-                       gpointer user_data)
-{
-	NMRemoteSettings *self = NM_REMOTE_SETTINGS (user_data);
-	NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (self);
-	GHashTableIter iter;
-	gpointer key, tmp;
-
-	g_hash_table_iter_init (&iter, properties);
-	while (g_hash_table_iter_next (&iter, &key, &tmp)) {
-		GValue *value = tmp;
-
-		if (!strcmp ((const char *) key, "Hostname")) {
-			g_free (priv->hostname);
-			priv->hostname = g_value_dup_string (value);
-			g_object_notify (G_OBJECT (self), NM_REMOTE_SETTINGS_HOSTNAME);
-		}
-
-		if (!strcmp ((const char *) key, "CanModify")) {
-			priv->can_modify = g_value_get_boolean (value);
-			g_object_notify (G_OBJECT (self), NM_REMOTE_SETTINGS_CAN_MODIFY);
-		}
-	}
-}
+/****************************************************************/
 
 static void
-get_all_cb  (DBusGProxy *proxy,
-             DBusGProxyCall *call,
-             gpointer user_data)
+settings_interface_init (NMSettingsInterface *iface)
 {
-	NMRemoteSettings *self = NM_REMOTE_SETTINGS (user_data);
-	GHashTable *props = NULL;
-	GError *error = NULL;
-
-	if (!dbus_g_proxy_end_call (proxy, call, &error,
-	                            DBUS_TYPE_G_MAP_OF_VARIANT, &props,
-	                            G_TYPE_INVALID)) {
-		/* Don't warn when the call times out because the settings service can't
-		 * be activated or whatever.
-		 */
-		if (!(error->domain == DBUS_GERROR && error->code == DBUS_GERROR_NO_REPLY)) {
-			g_warning ("%s: couldn't retrieve system settings properties: (%d) %s.",
-			           __func__,
-			           error ? error->code : -1,
-			           (error && error->message) ? error->message : "(unknown)");
-		}
-		g_clear_error (&error);
-		return;
-	}
-
-	properties_changed_cb (NULL, props, self);
-	g_hash_table_destroy (props);
+	/* interface implementation */
+	iface->list_connections = list_connections;
+	iface->get_connection_by_path = get_connection_by_path;
+	iface->add_connection = add_connection;
 }
 
-/****************************************************************/
-
 /**
  * nm_remote_settings_new:
- * @bus: (allow-none): a valid and connected D-Bus connection
+ * @bus: a valid and connected D-Bus connection
+ * @scope: the settings service scope (either user or system)
  *
  * Creates a new object representing the remote settings service.
  *
  * Returns: the new remote settings object on success, or %NULL on failure
  **/
 NMRemoteSettings *
-nm_remote_settings_new (DBusGConnection *bus)
+nm_remote_settings_new (DBusGConnection *bus, NMConnectionScope scope)
 {
-	if (bus == NULL)
-		bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, NULL);
+	g_return_val_if_fail (bus != NULL, NULL);
+	g_return_val_if_fail (scope != NM_CONNECTION_SCOPE_UNKNOWN, NULL);
 
 	return (NMRemoteSettings *) g_object_new (NM_TYPE_REMOTE_SETTINGS,
 	                                          NM_REMOTE_SETTINGS_BUS, bus,
+	                                          NM_REMOTE_SETTINGS_SCOPE, scope,
 	                                          NULL);
 }
 
@@ -731,6 +378,7 @@ constructor (GType type,
 {
 	GObject *object;
 	NMRemoteSettingsPrivate *priv;
+	const char *service = NM_DBUS_SERVICE_USER_SETTINGS;
 	GError *error = NULL;
 
 	object = G_OBJECT_CLASS (nm_remote_settings_parent_class)->constructor (type, n_construct_params, construct_params);
@@ -758,8 +406,12 @@ constructor (GType type,
 	                             G_CALLBACK (name_owner_changed),
 	                             object, NULL);
 
+	/* Settings service proxy */
+	if (priv->scope == NM_CONNECTION_SCOPE_SYSTEM)
+		service = NM_DBUS_SERVICE_SYSTEM_SETTINGS;
+
 	if (!dbus_g_proxy_call (priv->dbus_proxy, "NameHasOwner", &error,
-	                        G_TYPE_STRING, NM_DBUS_SERVICE,
+	                        G_TYPE_STRING, service,
 	                        G_TYPE_INVALID,
 	                        G_TYPE_BOOLEAN, &priv->service_running,
 	                        G_TYPE_INVALID)) {
@@ -772,7 +424,7 @@ constructor (GType type,
 	}
 
 	priv->proxy = dbus_g_proxy_new_for_name (priv->bus,
-	                                         NM_DBUS_SERVICE,
+	                                         service,
 	                                         NM_DBUS_PATH_SETTINGS,
 	                                         NM_DBUS_IFACE_SETTINGS);
 	g_assert (priv->proxy);
@@ -788,43 +440,13 @@ constructor (GType type,
 
 	priv->fetch_id = g_idle_add (fetch_connections, object);
 
-
-	/* D-Bus properties proxy */
-	priv->props_proxy = dbus_g_proxy_new_for_name (priv->bus,
-	                                               NM_DBUS_SERVICE,
-	                                               NM_DBUS_PATH_SETTINGS,
-	                                               "org.freedesktop.DBus.Properties");
-	g_assert (priv->props_proxy);
-
-	/* Monitor properties */
-	dbus_g_object_register_marshaller (g_cclosure_marshal_VOID__BOXED,
-	                                   G_TYPE_NONE,
-	                                   DBUS_TYPE_G_MAP_OF_VARIANT,
-	                                   G_TYPE_INVALID);
-	dbus_g_proxy_add_signal (priv->proxy, "PropertiesChanged",
-	                         DBUS_TYPE_G_MAP_OF_VARIANT,
-	                         G_TYPE_INVALID);
-	dbus_g_proxy_connect_signal (priv->proxy, "PropertiesChanged",
-	                             G_CALLBACK (properties_changed_cb),
-	                             object,
-	                             NULL);
-
-	/* Get properties */
-	dbus_g_proxy_begin_call (priv->props_proxy, "GetAll",
-	                         get_all_cb,
-	                         object,
-	                         NULL,
-	                         G_TYPE_STRING, NM_DBUS_IFACE_SETTINGS,
-	                         G_TYPE_INVALID);	
-
 	return object;
 }
 
 static void
 dispose (GObject *object)
 {
-	NMRemoteSettings *self = NM_REMOTE_SETTINGS (object);
-	NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (self);
+	NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (object);
 
 	if (priv->disposed)
 		return;
@@ -834,20 +456,14 @@ dispose (GObject *object)
 	if (priv->fetch_id)
 		g_source_remove (priv->fetch_id);
 
-	while (g_slist_length (priv->add_list))
-		add_connection_info_dispose (self, (AddConnectionInfo *) priv->add_list->data);
-
 	if (priv->connections)
 		g_hash_table_destroy (priv->connections);
 
 	if (priv->pending)
 		g_hash_table_destroy (priv->pending);
 
-	g_free (priv->hostname);
-
 	g_object_unref (priv->dbus_proxy);
 	g_object_unref (priv->proxy);
-	g_object_unref (priv->props_proxy);
 	dbus_g_connection_unref (priv->bus);
 
 	G_OBJECT_CLASS (nm_remote_settings_parent_class)->dispose (object);
@@ -864,6 +480,9 @@ set_property (GObject *object, guint prop_id,
 		/* Construct only */
 		priv->bus = dbus_g_connection_ref ((DBusGConnection *) g_value_get_boxed (value));
 		break;
+	case PROP_SCOPE:
+		priv->scope = (NMConnectionScope) g_value_get_uint (value);
+		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 		break;
@@ -880,15 +499,12 @@ get_property (GObject *object, guint prop_id,
 	case PROP_BUS:
 		g_value_set_boxed (value, priv->bus);
 		break;
+	case PROP_SCOPE:
+		g_value_set_uint (value, priv->scope);
+		break;
 	case PROP_SERVICE_RUNNING:
 		g_value_set_boolean (value, priv->service_running);
 		break;
-	case PROP_HOSTNAME:
-		g_value_set_string (value, priv->hostname);
-		break;
-	case PROP_CAN_MODIFY:
-		g_value_set_boolean (value, priv->can_modify);
-		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 		break;
@@ -918,46 +534,21 @@ nm_remote_settings_class_init (NMRemoteSettingsClass *class)
 		                     G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
 
 	g_object_class_install_property
+		(object_class, PROP_SCOPE,
+		 g_param_spec_uint (NM_REMOTE_SETTINGS_SCOPE,
+		                    "Scope",
+		                    "NMConnection scope",
+		                    NM_CONNECTION_SCOPE_UNKNOWN,
+		                    NM_CONNECTION_SCOPE_USER,
+		                    NM_CONNECTION_SCOPE_USER,
+		                    G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+	g_object_class_install_property
 		(object_class, PROP_SERVICE_RUNNING,
 		 g_param_spec_boolean (NM_REMOTE_SETTINGS_SERVICE_RUNNING,
 		                       "Service running",
 		                       "Is service running",
 		                       FALSE,
 		                       G_PARAM_READABLE));
-
-	g_object_class_install_property
-		(object_class, PROP_HOSTNAME,
-		 g_param_spec_string (NM_REMOTE_SETTINGS_HOSTNAME,
-		                      "Hostname",
-		                      "Persistent hostname",
-		                      NULL,
-		                      G_PARAM_READABLE));
-
-	g_object_class_install_property
-		(object_class, PROP_CAN_MODIFY,
-		 g_param_spec_boolean (NM_REMOTE_SETTINGS_CAN_MODIFY,
-		                       "CanModify",
-		                       "Can modify anything (hostname, connections, etc)",
-		                       FALSE,
-		                       G_PARAM_READABLE));
-
-	/* Signals */
-	signals[NEW_CONNECTION] = 
-	                g_signal_new (NM_REMOTE_SETTINGS_NEW_CONNECTION,
-	                              G_OBJECT_CLASS_TYPE (object_class),
-	                              G_SIGNAL_RUN_FIRST,
-	                              G_STRUCT_OFFSET (NMRemoteSettingsClass, new_connection),
-	                              NULL, NULL,
-	                              g_cclosure_marshal_VOID__OBJECT,
-	                              G_TYPE_NONE, 1, G_TYPE_OBJECT);
-
-	signals[CONNECTIONS_READ] = 
-	                g_signal_new (NM_REMOTE_SETTINGS_CONNECTIONS_READ,
-	                              G_OBJECT_CLASS_TYPE (object_class),
-	                              G_SIGNAL_RUN_FIRST,
-	                              G_STRUCT_OFFSET (NMRemoteSettingsClass, connections_read),
-	                              NULL, NULL,
-	                              g_cclosure_marshal_VOID__VOID,
-	                              G_TYPE_NONE, 0);
 }
 
diff --git a/libnm-glib/nm-remote-settings.h b/libnm-glib/nm-remote-settings.h
index f6ea5fbe..d3085566 100644
--- a/libnm-glib/nm-remote-settings.h
+++ b/libnm-glib/nm-remote-settings.h
@@ -38,65 +38,17 @@ G_BEGIN_DECLS
 #define NM_IS_REMOTE_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NM_TYPE_REMOTE_SETTINGS))
 #define NM_REMOTE_SETTINGS_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_REMOTE_SETTINGS, NMRemoteSettingsClass))
 
-/**
- * NMRemoteSettingsError:
- * @NM_REMOTE_SETTINGS_ERROR_UNKNOWN: unknown or unclassified error
- * @NM_REMOTE_SETTINGS_ERROR_CONNECTION_REMOVED: the #NMRemoteConnection object
- *   was removed before it was completely initialized
- * @NM_REMOTE_SETTINGS_ERROR_CONNECTION_UNAVAILABLE: the #NMRemoteConnection object
- *   is not visible or otherwise unreadable
- *
- * Describes errors that may result from operations involving a #NMRemoteSettings.
- *
- **/
-typedef enum {
-	NM_REMOTE_SETTINGS_ERROR_UNKNOWN = 0,
-	NM_REMOTE_SETTINGS_ERROR_CONNECTION_REMOVED,
-	NM_REMOTE_SETTINGS_ERROR_CONNECTION_UNAVAILABLE,
-} NMRemoteSettingsError;
-
-#define NM_TYPE_REMOTE_SETTINGS_ERROR (nm_remote_settings_error_get_type ()) 
-GType nm_remote_settings_error_get_type (void);
-
-#define NM_REMOTE_SETTINGS_ERROR nm_remote_settings_error_quark ()
-GQuark nm_remote_settings_error_quark (void);
-
-
-#define NM_REMOTE_SETTINGS_BUS             "bus"
+#define NM_REMOTE_SETTINGS_BUS "bus"
+#define NM_REMOTE_SETTINGS_SCOPE "scope"
 #define NM_REMOTE_SETTINGS_SERVICE_RUNNING "service-running"
-#define NM_REMOTE_SETTINGS_HOSTNAME        "hostname"
-#define NM_REMOTE_SETTINGS_CAN_MODIFY      "can-modify"
-
-#define NM_REMOTE_SETTINGS_NEW_CONNECTION    "new-connection"
-#define NM_REMOTE_SETTINGS_CONNECTIONS_READ  "connections-read"
-
-typedef struct _NMRemoteSettings NMRemoteSettings;
-typedef struct _NMRemoteSettingsClass NMRemoteSettingsClass;
-
 
-typedef void (*NMRemoteSettingsAddConnectionFunc) (NMRemoteSettings *settings,
-                                                   NMRemoteConnection *connection,
-                                                   GError *error,
-                                                   gpointer user_data);
-
-typedef void (*NMRemoteSettingsSaveHostnameFunc) (NMRemoteSettings *settings,
-                                                  GError *error,
-                                                  gpointer user_data);
-
-
-struct _NMRemoteSettings {
+typedef struct {
 	GObject parent;
-};
+} NMRemoteSettings;
 
-struct _NMRemoteSettingsClass {
+typedef struct {
 	GObjectClass parent;
 
-	/* Signals */
-	void (*new_connection) (NMRemoteSettings *settings,
-	                        NMRemoteConnection *connection);
-
-	void (*connections_read) (NMRemoteSettings *settings);
-
 	/* Padding for future expansion */
 	void (*_reserved1) (void);
 	void (*_reserved2) (void);
@@ -104,26 +56,11 @@ struct _NMRemoteSettingsClass {
 	void (*_reserved4) (void);
 	void (*_reserved5) (void);
 	void (*_reserved6) (void);
-};
+} NMRemoteSettingsClass;
 
 GType nm_remote_settings_get_type (void);
 
-NMRemoteSettings *nm_remote_settings_new (DBusGConnection *bus);
-
-GSList *nm_remote_settings_list_connections (NMRemoteSettings *settings);
-
-NMRemoteConnection * nm_remote_settings_get_connection_by_path (NMRemoteSettings *settings,
-                                                                const char *path);
-
-gboolean nm_remote_settings_add_connection (NMRemoteSettings *settings,
-                                            NMConnection *connection,
-                                            NMRemoteSettingsAddConnectionFunc callback,
-                                            gpointer user_data);
-
-gboolean nm_remote_settings_save_hostname (NMRemoteSettings *settings,
-                                           const char *hostname,
-                                           NMRemoteSettingsSaveHostnameFunc callback,
-                                           gpointer user_data);
+NMRemoteSettings *nm_remote_settings_new (DBusGConnection *bus, NMConnectionScope scope);
 
 G_END_DECLS
 
diff --git a/libnm-glib/nm-secret-agent.c b/libnm-glib/nm-secret-agent.c
deleted file mode 100644
index 90bdfbe7..00000000
--- a/libnm-glib/nm-secret-agent.c
+++ /dev/null
@@ -1,988 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/*
- * This library 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 of the License, or (at your option) any later version.
- *
- * This library 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 this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA.
- *
- * (C) Copyright 2010 - 2011 Red Hat, Inc.
- */
-
-#include <config.h>
-#include <ctype.h>
-#include <string.h>
-#include <NetworkManager.h>
-#include <dbus/dbus-glib-lowlevel.h>
-
-#include "nm-secret-agent.h"
-#include "nm-marshal.h"
-#include "NetworkManager.h"
-
-static void impl_secret_agent_get_secrets (NMSecretAgent *self,
-                                           GHashTable *connection_hash,
-                                           const char *connection_path,
-                                           const char *setting_name,
-                                           const char **hints,
-                                           guint32 flags,
-                                           DBusGMethodInvocation *context);
-
-static void impl_secret_agent_cancel_get_secrets (NMSecretAgent *self,
-                                                  const char *connection_path,
-                                                  const char *setting_name,
-                                                  DBusGMethodInvocation *context);
-
-static void impl_secret_agent_save_secrets (NMSecretAgent *self,
-                                            GHashTable *connection_hash,
-                                            const char *connection_path,
-                                            DBusGMethodInvocation *context);
-
-static void impl_secret_agent_delete_secrets (NMSecretAgent *self,
-                                              GHashTable *connection_hash,
-                                              const char *connection_path,
-                                              DBusGMethodInvocation *context);
-
-#include "nm-secret-agent-glue.h"
-
-G_DEFINE_ABSTRACT_TYPE (NMSecretAgent, nm_secret_agent, G_TYPE_OBJECT)
-
-#define NM_SECRET_AGENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
-                                        NM_TYPE_SECRET_AGENT, \
-                                        NMSecretAgentPrivate))
-
-static gboolean auto_register_cb (gpointer user_data);
-
-typedef struct {
-	gboolean registered;
-
-	DBusGConnection *bus;
-	DBusGProxy *dbus_proxy;
-	DBusGProxy *manager_proxy;
-	DBusGProxyCall *reg_call;
-
-	/* GetSecretsInfo structs of in-flight GetSecrets requests */
-	GSList *pending_gets;
-
-	char *nm_owner;
-
-	char *identifier;
-	gboolean auto_register;
-	gboolean suppress_auto;
-	gboolean auto_register_id;
-
-	gboolean disposed;
-} NMSecretAgentPrivate;
-
-enum {
-	PROP_0,
-	PROP_IDENTIFIER,
-	PROP_AUTO_REGISTER,
-
-	LAST_PROP
-};
-
-enum {
-	REGISTRATION_RESULT,
-
-	LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-
-/********************************************************************/
-
-GQuark
-nm_secret_agent_error_quark (void)
-{
-	static GQuark ret = 0;
-
-	if (G_UNLIKELY (ret == 0))
-		ret = g_quark_from_static_string ("nm-secret-agent-error");
-	return ret;
-}
-
-#define ENUM_ENTRY(NAME, DESC) { NAME, "" #NAME "", DESC }
-
-GType
-nm_secret_agent_error_get_type (void)
-{
-	static GType etype = 0;
-
-	if (etype == 0) {
-		static const GEnumValue values[] = {
-			/* Sender is not authorized to make this request */
-			ENUM_ENTRY (NM_SECRET_AGENT_ERROR_NOT_AUTHORIZED, "NotAuthorized"),
-			/* Given connection details do not make a valid connection */
-			ENUM_ENTRY (NM_SECRET_AGENT_ERROR_INVALID_CONNECTION, "InvalidConnection"),
-			/* The request was canceled explicitly by the user */
-			ENUM_ENTRY (NM_SECRET_AGENT_ERROR_USER_CANCELED, "UserCanceled"),
-			/* The request was canceled, but not by the user */
-			ENUM_ENTRY (NM_SECRET_AGENT_ERROR_AGENT_CANCELED, "AgentCanceled"),
-			/* Some internal error prevented returning secrets */
-			ENUM_ENTRY (NM_SECRET_AGENT_ERROR_INTERNAL_ERROR, "InternalError"),
-			/* No secrets could be found to fulfill the request */
-			ENUM_ENTRY (NM_SECRET_AGENT_ERROR_NO_SECRETS, "NoSecrets"),
-			{ 0, 0, 0 }
-		};
-		etype = g_enum_register_static ("NMSecretAgentError", values);
-	}
-	return etype;
-}
-
-/*************************************************************/
-
-static const char *
-get_nm_owner (NMSecretAgent *self)
-{
-	NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (self);
-	GError *error = NULL;
-	char *owner;
-
-	if (!priv->nm_owner) {
-		if (!dbus_g_proxy_call_with_timeout (priv->dbus_proxy,
-			                                 "GetNameOwner", 2000, &error,
-			                                 G_TYPE_STRING, NM_DBUS_SERVICE,
-			                                 G_TYPE_INVALID,
-			                                 G_TYPE_STRING, &owner,
-			                                 G_TYPE_INVALID))
-			return NULL;
-
-		priv->nm_owner = g_strdup (owner);
-		g_free (owner);
-	}
-
-	return priv->nm_owner;
-}
-
-static void
-_internal_unregister (NMSecretAgent *self)
-{
-	NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (self);
-
-	if (priv->registered) {
-		dbus_g_connection_unregister_g_object (priv->bus, G_OBJECT (self));
-		priv->registered = FALSE;
-	}
-}
-
-typedef struct {
-	char *path;
-	char *setting_name;
-	DBusGMethodInvocation *context;
-} GetSecretsInfo;
-
-static void
-get_secrets_info_finalize (NMSecretAgent *self, GetSecretsInfo *info)
-{
-	NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (self);
-
-	g_return_if_fail (info != NULL);
-
-	priv->pending_gets = g_slist_remove (priv->pending_gets, info);
-
-	g_free (info->path);
-	g_free (info->setting_name);
-	memset (info, 0, sizeof (*info));
-	g_free (info);
-}
-
-static void
-name_owner_changed (DBusGProxy *proxy,
-                    const char *name,
-                    const char *old_owner,
-                    const char *new_owner,
-                    gpointer user_data)
-{
-	NMSecretAgent *self = NM_SECRET_AGENT (user_data);
-	NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (self);
-	gboolean old_owner_good = (old_owner && strlen (old_owner));
-	gboolean new_owner_good = (new_owner && strlen (new_owner));
-	GSList *iter;
-
-	if (strcmp (name, NM_DBUS_SERVICE) == 0) {
-		g_free (priv->nm_owner);
-		priv->nm_owner = g_strdup (new_owner);
-
-		if (!old_owner_good && new_owner_good) {
-			/* NM appeared */
-			auto_register_cb (self);
-		} else if (old_owner_good && !new_owner_good) {
-			/* Cancel any pending secrets requests */
-			for (iter = priv->pending_gets; iter; iter = g_slist_next (iter)) {
-				GetSecretsInfo *info = iter->data;
-
-				NM_SECRET_AGENT_GET_CLASS (self)->cancel_get_secrets (self,
-				                                                      info->path,
-				                                                      info->setting_name);
-			}
-			g_slist_free (priv->pending_gets);
-			priv->pending_gets = NULL;
-
-			/* NM disappeared */
-			_internal_unregister (self);
-		} else if (old_owner_good && new_owner_good && strcmp (old_owner, new_owner)) {
-			/* Hmm, NM magically restarted */
-			_internal_unregister (self);
-			auto_register_cb (self);
-		}
-	}
-}
-
-static gboolean
-verify_request (NMSecretAgent *self,
-                DBusGMethodInvocation *context,
-                GHashTable *connection_hash,
-                const char *connection_path,
-                NMConnection **out_connection,
-                GError **error)
-{
-	NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (self);
-	NMConnection *connection = NULL;
-	DBusConnection *bus;
-	char *sender;
-	const char *nm_owner;
-	DBusError dbus_error;
-	uid_t sender_uid = G_MAXUINT;
-	GError *local = NULL;
-
-	g_return_val_if_fail (context != NULL, FALSE);
-
-	/* Verify the sender's UID is 0, and that the sender is the same as
-	 * NetworkManager's bus name owner.
-	 */
-
-	nm_owner = get_nm_owner (self);
-	if (!nm_owner) {
-		g_set_error_literal (error,
-		                     NM_SECRET_AGENT_ERROR,
-		                     NM_SECRET_AGENT_ERROR_NOT_AUTHORIZED,
-		                     "NetworkManager bus name owner unknown.");
-		return FALSE;
-	}
-
-	bus = dbus_g_connection_get_connection (priv->bus);
-	if (!bus) {
-		g_set_error_literal (error,
-		                     NM_SECRET_AGENT_ERROR,
-		                     NM_SECRET_AGENT_ERROR_NOT_AUTHORIZED,
-		                     "Failed to get DBus connection.");
-		return FALSE;
-	}
-
-	sender = dbus_g_method_get_sender (context);
-	if (!sender) {
-		g_set_error_literal (error,
-		                     NM_SECRET_AGENT_ERROR,
-		                     NM_SECRET_AGENT_ERROR_NOT_AUTHORIZED,
-		                     "Failed to get request sender.");
-		return FALSE;
-	}
-
-	/* Check that the sender matches the current NM bus name owner */
-	if (strcmp (sender, nm_owner) != 0) {
-		g_set_error_literal (error,
-		                     NM_SECRET_AGENT_ERROR,
-		                     NM_SECRET_AGENT_ERROR_NOT_AUTHORIZED,
-		                     "Request sender does not match NetworkManager bus name owner.");
-		goto out;
-	}
-
-	dbus_error_init (&dbus_error);
-	sender_uid = dbus_bus_get_unix_user (bus, sender, &dbus_error);
-	if (dbus_error_is_set (&dbus_error)) {
-		g_set_error (error,
-		             NM_SECRET_AGENT_ERROR,
-		             NM_SECRET_AGENT_ERROR_NOT_AUTHORIZED,
-		             "Failed to get request unix user: (%s) %s.",
-		             dbus_error.name, dbus_error.message);
-		dbus_error_free (&dbus_error);
-		goto out;
-	}
-
-	if (0 != sender_uid) {
-		g_set_error_literal (error,
-		                     NM_SECRET_AGENT_ERROR,
-		                     NM_SECRET_AGENT_ERROR_NOT_AUTHORIZED,
-		                     "Request sender is not root.");
-		goto out;
-	}
-
-	/* And make sure the connection is actually valid */
-	if (connection_hash) {
-		connection = nm_connection_new_from_hash (connection_hash, &local);
-		if (connection && connection_path) {
-			nm_connection_set_path (connection, connection_path);
-		} else {
-			g_set_error (error,
-				         NM_SECRET_AGENT_ERROR,
-				         NM_SECRET_AGENT_ERROR_INVALID_CONNECTION,
-				         "Invalid connection: (%d) %s",
-				         local ? local->code : -1,
-				         (local && local->message) ? local->message : "(unknown)");
-			g_clear_error (&local);
-		}
-	}
-
-out:
-	if (out_connection)
-		*out_connection = connection;
-	g_free (sender);
-
-	return !!connection;
-}
-
-static void
-get_secrets_cb (NMSecretAgent *self,
-                NMConnection *connection,
-                GHashTable *secrets,
-                GError *error,
-                gpointer user_data)
-{
-	GetSecretsInfo *info = user_data;
-
-	if (error)
-		dbus_g_method_return_error (info->context, error);
-	else
-		dbus_g_method_return (info->context, secrets);
-
-	/* Remove the request from internal tracking */
-	get_secrets_info_finalize (self, info);
-}
-
-static void
-impl_secret_agent_get_secrets (NMSecretAgent *self,
-                               GHashTable *connection_hash,
-                               const char *connection_path,
-                               const char *setting_name,
-                               const char **hints,
-                               guint32 flags,
-                               DBusGMethodInvocation *context)
-{
-	NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (self);
-	GError *error = NULL;
-	NMConnection *connection = NULL;
-	GetSecretsInfo *info;
-
-	/* Make sure the request comes from NetworkManager and is valid */
-	if (!verify_request (self, context, connection_hash, connection_path, &connection, &error)) {
-		dbus_g_method_return_error (context, error);
-		g_clear_error (&error);
-		return;
-	}
-
-	info = g_malloc0 (sizeof (GetSecretsInfo));
-	info->path = g_strdup (connection_path);
-	info->setting_name = g_strdup (setting_name);
-	info->context = context;
-	priv->pending_gets = g_slist_append (priv->pending_gets, info);
-
-	NM_SECRET_AGENT_GET_CLASS (self)->get_secrets (self,
-	                                               connection,
-	                                               connection_path,
-	                                               setting_name,
-	                                               hints,
-	                                               flags,
-	                                               get_secrets_cb,
-	                                               info);
-	g_object_unref (connection);
-}
-
-static GetSecretsInfo *
-find_get_secrets_info (GSList *list, const char *path, const char *setting_name)
-{
-	GSList *iter;
-
-	for (iter = list; iter; iter = g_slist_next (iter)) {
-		GetSecretsInfo *candidate = iter->data;
-
-		if (   g_strcmp0 (path, candidate->path) == 0
-		    && g_strcmp0 (setting_name, candidate->setting_name) == 0)
-			return candidate;
-	}
-	return NULL;
-}
-
-static void
-impl_secret_agent_cancel_get_secrets (NMSecretAgent *self,
-                                      const char *connection_path,
-                                      const char *setting_name,
-                                      DBusGMethodInvocation *context)
-{
-	NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (self);
-	GError *error = NULL;
-	GetSecretsInfo *info;
-
-	/* Make sure the request comes from NetworkManager and is valid */
-	if (!verify_request (self, context, NULL, NULL, NULL, &error)) {
-		dbus_g_method_return_error (context, error);
-		g_clear_error (&error);
-		return;
-	}
-
-	info = find_get_secrets_info (priv->pending_gets, connection_path, setting_name);
-	if (!info) {
-		g_set_error_literal (&error,
-		                     NM_SECRET_AGENT_ERROR,
-		                     NM_SECRET_AGENT_ERROR_INTERNAL_ERROR,
-		                     "No secrets request in progress for this connection.");
-		dbus_g_method_return_error (context, error);
-		g_clear_error (&error);
-		return;
-	}
-
-	/* Send the cancel request up to the subclass and finalize it */
-	NM_SECRET_AGENT_GET_CLASS (self)->cancel_get_secrets (self,
-	                                                      info->path,
-	                                                      info->setting_name);
-	dbus_g_method_return (context);
-}
-
-static void
-save_secrets_cb (NMSecretAgent *self,
-                 NMConnection *connection,
-                 GError *error,
-                 gpointer user_data)
-{
-	DBusGMethodInvocation *context = user_data;
-
-	if (error)
-		dbus_g_method_return_error (context, error);
-	else
-		dbus_g_method_return (context);
-}
-
-static void
-impl_secret_agent_save_secrets (NMSecretAgent *self,
-                                GHashTable *connection_hash,
-                                const char *connection_path,
-                                DBusGMethodInvocation *context)
-{
-	GError *error = NULL;
-	NMConnection *connection = NULL;
-
-	/* Make sure the request comes from NetworkManager and is valid */
-	if (!verify_request (self, context, connection_hash, connection_path, &connection, &error)) {
-		dbus_g_method_return_error (context, error);
-		g_clear_error (&error);
-		return;
-	}
-
-	NM_SECRET_AGENT_GET_CLASS (self)->save_secrets (self,
-	                                                connection,
-	                                                connection_path,
-	                                                save_secrets_cb,
-	                                                context);
-	g_object_unref (connection);
-}
-
-static void
-delete_secrets_cb (NMSecretAgent *self,
-                   NMConnection *connection,
-                   GError *error,
-                   gpointer user_data)
-{
-	DBusGMethodInvocation *context = user_data;
-
-	if (error)
-		dbus_g_method_return_error (context, error);
-	else
-		dbus_g_method_return (context);
-}
-
-static void
-impl_secret_agent_delete_secrets (NMSecretAgent *self,
-                                  GHashTable *connection_hash,
-                                  const char *connection_path,
-                                  DBusGMethodInvocation *context)
-{
-	GError *error = NULL;
-	NMConnection *connection = NULL;
-
-	/* Make sure the request comes from NetworkManager and is valid */
-	if (!verify_request (self, context, connection_hash, connection_path, &connection, &error)) {
-		dbus_g_method_return_error (context, error);
-		g_clear_error (&error);
-		return;
-	}
-
-	NM_SECRET_AGENT_GET_CLASS (self)->delete_secrets (self,
-	                                                  connection,
-	                                                  connection_path,
-	                                                  delete_secrets_cb,
-	                                                  context);
-	g_object_unref (connection);
-}
-
-/**************************************************************/
-
-static void
-reg_request_cb (DBusGProxy *proxy,
-                DBusGProxyCall *call,
-                gpointer user_data)
-{
-	NMSecretAgent *self = NM_SECRET_AGENT (user_data);
-	NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (self);
-	GError *error = NULL;
-
-	priv->reg_call = NULL;
-
-	if (dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID))
-		priv->registered = TRUE;
-	else {
-		/* If registration failed we shouldn't expose ourselves on the bus */
-		_internal_unregister (self);
-	}
-
-	g_signal_emit (self, signals[REGISTRATION_RESULT], 0, error);
-	g_clear_error (&error);
-}
-
-/**
- * nm_secret_agent_register:
- * @self: a #NMSecretAgent
- *
- * Registers the #NMSecretAgent with the NetworkManager secret manager,
- * indicating to NetworkManager that the agent is able to provide and save
- * secrets for connections on behalf of its user.  Registration is an
- * asynchronous operation and its success or failure is indicated via the
- * 'registration-result' signal.
- *
- * Returns: a new %TRUE if registration was successfully requested (this does
- * not mean registration itself was successful), %FALSE if registration was not
- * successfully requested.
- **/
-gboolean
-nm_secret_agent_register (NMSecretAgent *self)
-{
-	NMSecretAgentPrivate *priv;
-	NMSecretAgentClass *class;
-
-	g_return_val_if_fail (self != NULL, FALSE);
-	g_return_val_if_fail (NM_IS_SECRET_AGENT (self), FALSE);
-
-	priv = NM_SECRET_AGENT_GET_PRIVATE (self);
-
-	g_return_val_if_fail (priv->registered == FALSE, FALSE);
-	g_return_val_if_fail (priv->reg_call == NULL, FALSE);
-	g_return_val_if_fail (priv->bus != NULL, FALSE);
-	g_return_val_if_fail (priv->manager_proxy != NULL, FALSE);
-
-	/* Also make sure the subclass can actually respond to secrets requests */
-	class = NM_SECRET_AGENT_GET_CLASS (self);
-	g_return_val_if_fail (class->get_secrets != NULL, FALSE);
-	g_return_val_if_fail (class->save_secrets != NULL, FALSE);
-	g_return_val_if_fail (class->delete_secrets != NULL, FALSE);
-
-	priv->suppress_auto = FALSE;
-
-	/* Export our secret agent interface before registering with the manager */
-	dbus_g_connection_register_g_object (priv->bus,
-	                                     NM_DBUS_PATH_SECRET_AGENT,
-	                                     G_OBJECT (self));
-
-	priv->reg_call = dbus_g_proxy_begin_call_with_timeout (priv->manager_proxy,
-	                                                       "Register",
-	                                                       reg_request_cb,
-	                                                       self,
-	                                                       NULL,
-	                                                       5000,
-	                                                       G_TYPE_STRING, priv->identifier,
-	                                                       G_TYPE_INVALID);
-
-	return TRUE;
-}
-
-/**
- * nm_secret_agent_unregister:
- * @self: a #NMSecretAgent
- *
- * Unregisters the #NMSecretAgent with the NetworkManager secret manager,
- * indicating to NetworkManager that the agent is will no longer provide or
- * store secrets on behalf of this user.
- *
- * Returns: a new %TRUE if unregistration was successful, %FALSE if it was not.
- **/
-gboolean
-nm_secret_agent_unregister (NMSecretAgent *self)
-{
-	NMSecretAgentPrivate *priv;
-
-	g_return_val_if_fail (self != NULL, FALSE);
-	g_return_val_if_fail (NM_IS_SECRET_AGENT (self), FALSE);
-
-	priv = NM_SECRET_AGENT_GET_PRIVATE (self);
-
-	g_return_val_if_fail (priv->registered == TRUE, FALSE);
-	g_return_val_if_fail (priv->bus != NULL, FALSE);
-	g_return_val_if_fail (priv->manager_proxy != NULL, FALSE);
-
-	dbus_g_proxy_call_no_reply (priv->manager_proxy, "Unregister", G_TYPE_INVALID);
-
-	_internal_unregister (self);
-	priv->suppress_auto = TRUE;
-
-	return TRUE;
-}
-
-static gboolean
-auto_register_cb (gpointer user_data)
-{
-	NMSecretAgent *self = NM_SECRET_AGENT (user_data);
-	NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (self);
-
-	priv->auto_register_id = 0;
-	if (priv->auto_register && !priv->suppress_auto && (priv->reg_call == NULL))
-		nm_secret_agent_register (self);
-	return FALSE;
-}
-
-/**************************************************************/
-
-/**
- * nm_secret_agent_get_secrets:
- * @self: a #NMSecretAgent
- * @connection: the #NMConnection for which we're asked secrets
- * @setting_name: the name of the secret setting
- * @hints: (array zero-terminated=1): hints to the agent
- * @flags: flags that modify the behavior of the request
- * @callback: (scope async): a callback, invoked when the operation is done
- * @callback_data: (closure):
- *
- * Asyncronously retrieve secrets belonging to @connection for the
- * setting @setting_name.  @flags indicate specific behavior that the secret
- * agent should use when performing the request, for example returning only
- * existing secrets without user interaction, or requesting entirely new
- * secrets from the user.
- *
- * VFunc: get_secrets
- */
-void
-nm_secret_agent_get_secrets (NMSecretAgent *self,
-                             NMConnection *connection,
-                             const char *setting_name,
-                             const char **hints,
-                             NMSecretAgentGetSecretsFlags flags,
-                             NMSecretAgentGetSecretsFunc callback,
-                             gpointer callback_data)
-{
-	g_return_if_fail (self != NULL);
-	g_return_if_fail (NM_IS_SECRET_AGENT (self));
-	g_return_if_fail (connection != NULL);
-	g_return_if_fail (NM_IS_CONNECTION (connection));
-	g_return_if_fail (nm_connection_get_path (connection));
-	g_return_if_fail (setting_name != NULL);
-	g_return_if_fail (strlen (setting_name) > 0);
-	g_return_if_fail (callback != NULL);
-
-	NM_SECRET_AGENT_GET_CLASS (self)->get_secrets (self,
-	                                               connection,
-	                                               nm_connection_get_path (connection),
-	                                               setting_name,
-	                                               hints,
-	                                               flags,
-	                                               callback,
-	                                               callback_data);
-}
-
-/**
- * nm_secret_agent_save_secrets:
- * @self: a #NMSecretAgent
- * @connection: a #NMConnection
- * @callback: (scope async): a callback, invoked when the operation is done
- * @callback_data: (closure):
- *
- * Asyncronously ensure that all secrets inside @connection
- * are stored to disk.
- *
- * VFunc: save_secrets
- */
-void
-nm_secret_agent_save_secrets (NMSecretAgent *self,
-                              NMConnection *connection,
-                              NMSecretAgentSaveSecretsFunc callback,
-                              gpointer callback_data)
-{
-	g_return_if_fail (self != NULL);
-	g_return_if_fail (NM_IS_SECRET_AGENT (self));
-	g_return_if_fail (connection != NULL);
-	g_return_if_fail (NM_IS_CONNECTION (connection));
-	g_return_if_fail (nm_connection_get_path (connection));
-
-	NM_SECRET_AGENT_GET_CLASS (self)->save_secrets (self,
-	                                                connection,
-	                                                nm_connection_get_path (connection),
-	                                                callback,
-	                                                callback_data);
-}
-
-/**
- * nm_secret_agent_delete_secrets:
- * @self: a #NMSecretAgent
- * @connection: a #NMConnection
- * @callback: (scope async): a callback, invoked when the operation is done
- * @callback_data: (closure):
- *
- * Asynchronously ask the agent to delete all saved secrets belonging to
- * @connection.
- *
- * VFunc: delete_secrets
- */
-void
-nm_secret_agent_delete_secrets (NMSecretAgent *self,
-                                NMConnection *connection,
-                                NMSecretAgentDeleteSecretsFunc callback,
-                                gpointer callback_data)
-{
-	g_return_if_fail (self != NULL);
-	g_return_if_fail (NM_IS_SECRET_AGENT (self));
-	g_return_if_fail (connection != NULL);
-	g_return_if_fail (NM_IS_CONNECTION (connection));
-	g_return_if_fail (nm_connection_get_path (connection));
-
-	NM_SECRET_AGENT_GET_CLASS (self)->delete_secrets (self,
-	                                                  connection,
-	                                                  nm_connection_get_path (connection),
-	                                                  callback,
-	                                                  callback_data);
-}
-
-/**************************************************************/
-
-static gboolean
-validate_identifier (const char *identifier)
-{
-	const char *p = identifier;
-	size_t id_len;
-
-	/* Length between 3 and 255 characters inclusive */
-	id_len = strlen (identifier);
-	if (id_len < 3 || id_len > 255)
-		return FALSE;
-
-	if ((identifier[0] == '.') || (identifier[id_len - 1] == '.'))
-		return FALSE;
-
-	/* FIXME: do complete validation here */
-	while (p && *p) {
-		if (!isalnum (*p) && (*p != '_') && (*p != '-') && (*p != '.'))
-			return FALSE;
-		if ((*p == '.') && (*(p + 1) == '.'))
-			return FALSE;
-		p++;
-	}
-
-	return TRUE;
-}
-
-static void
-nm_secret_agent_init (NMSecretAgent *self)
-{
-	NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (self);
-	GError *error = NULL;
-
-	priv->bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
-	if (!priv->bus) {
-		g_warning ("Couldn't connect to system bus: %s", error->message);
-		g_error_free (error);
-		return;
-	}
-
-	priv->dbus_proxy = dbus_g_proxy_new_for_name (priv->bus,
-	                                              DBUS_SERVICE_DBUS,
-	                                              DBUS_PATH_DBUS,
-	                                              DBUS_INTERFACE_DBUS);
-	if (!priv->dbus_proxy) {
-		g_warning ("Couldn't create messagebus proxy.");
-		return;
-	}
-
-	dbus_g_object_register_marshaller (_nm_marshal_VOID__STRING_STRING_STRING,
-	                                   G_TYPE_NONE,
-	                                   G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
-	                                   G_TYPE_INVALID);
-	dbus_g_proxy_add_signal (priv->dbus_proxy, "NameOwnerChanged",
-	                         G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
-	                         G_TYPE_INVALID);
-	dbus_g_proxy_connect_signal (priv->dbus_proxy,
-	                             "NameOwnerChanged",
-	                             G_CALLBACK (name_owner_changed),
-	                             self, NULL);
-
-	priv->manager_proxy = dbus_g_proxy_new_for_name (priv->bus,
-	                                                 NM_DBUS_SERVICE,
-	                                                 NM_DBUS_PATH_AGENT_MANAGER,
-	                                                 NM_DBUS_INTERFACE_AGENT_MANAGER);
-	if (!priv->manager_proxy) {
-		g_warning ("Couldn't create NM agent manager proxy.");
-		return;
-	}
-
-	priv->auto_register_id = g_idle_add (auto_register_cb, self);
-}
-
-static void
-get_property (GObject *object,
-              guint prop_id,
-              GValue *value,
-              GParamSpec *pspec)
-{
-	NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (object);
-
-	switch (prop_id) {
-	case PROP_IDENTIFIER:
-		g_value_set_string (value, priv->identifier);
-		break;
-	case PROP_AUTO_REGISTER:
-		g_value_set_boolean (value, priv->auto_register);
-		break;
-	default:
-		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-		break;
-	}
-}
-
-static void
-set_property (GObject *object,
-              guint prop_id,
-              const GValue *value,
-              GParamSpec *pspec)
-{
-	NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (object);
-	const char *identifier;
-
-	switch (prop_id) {
-	case PROP_IDENTIFIER:
-		identifier = g_value_get_string (value);
-
-		g_return_if_fail (validate_identifier (identifier));
-
-		g_free (priv->identifier);
-		priv->identifier = g_strdup (identifier);
-		break;
-	case PROP_AUTO_REGISTER:
-		priv->auto_register = g_value_get_boolean (value);
-		break;
-	default:
-		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-		break;
-	}
-}
-
-static void
-dispose (GObject *object)
-{
-	NMSecretAgent *self = NM_SECRET_AGENT (object);
-	NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (self);
-
-	if (!priv->disposed) {
-		priv->disposed = TRUE;
-
-		if (priv->registered)
-			nm_secret_agent_unregister (self);
-
-		if (priv->auto_register_id)
-			g_source_remove (priv->auto_register_id);
-
-		g_free (priv->identifier);
-		g_free (priv->nm_owner);
-
-		while (priv->pending_gets)
-			get_secrets_info_finalize (self, priv->pending_gets->data);
-
-		if (priv->dbus_proxy)
-			g_object_unref (priv->dbus_proxy);
-
-		if (priv->manager_proxy)
-			g_object_unref (priv->manager_proxy);
-
-		if (priv->bus)
-			dbus_g_connection_unref (priv->bus);
-	}
-
-	G_OBJECT_CLASS (nm_secret_agent_parent_class)->dispose (object);
-}
-
-static void
-nm_secret_agent_class_init (NMSecretAgentClass *class)
-{
-	GObjectClass *object_class = G_OBJECT_CLASS (class);
-
-	g_type_class_add_private (class, sizeof (NMSecretAgentPrivate));
-
-	/* Virtual methods */
-	object_class->dispose = dispose;
-	object_class->get_property = get_property;
-	object_class->set_property = set_property;
-
-	/**
-	 * NMSecretAgent:identifier:
-	 *
-	 * Identifies this agent; only one agent in each user session may use the
-	 * same identifier.  Identifier formatting follows the same rules as
-	 * D-Bus bus names with the exception that the ':' character is not
-	 * allowed.  The valid set of characters is "[A-Z][a-z][0-9]_-." and the
-	 * identifier is limited in length to 255 characters with a minimum
-	 * of 3 characters.  An example valid identifier is 'org.gnome.nm-applet'
-	 * (without quotes).
-	 **/
-	g_object_class_install_property
-		(object_class, PROP_IDENTIFIER,
-		 g_param_spec_string (NM_SECRET_AGENT_IDENTIFIER,
-						      "Identifier",
-						      "Identifier",
-						      NULL,
-						      G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-
-	/**
-	 * NMSecretAgent:auto-register:
-	 *
-	 * If TRUE, the agent will attempt to automatically register itself after
-	 * it is created (via an idle handler) and to re-register itself if
-	 * NetworkManager restarts.  If FALSE, the agent does not automatically
-	 * register with NetworkManager, and nm_secret_agent_register() must be
-	 * called.  If 'auto-register' is TRUE, calling nm_secret_agent_unregister()
-	 * will suppress auto-registration until nm_secret_agent_register() is
-	 * called, which re-enables auto-registration.
-	 **/
-	g_object_class_install_property
-		(object_class, PROP_AUTO_REGISTER,
-		 g_param_spec_boolean (NM_SECRET_AGENT_AUTO_REGISTER,
-						       "Auto Register",
-						       "Auto Register",
-						       TRUE,
-						       G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
-
-	/**
-	 * NMSecretAgent::registration-result:
-	 * @agent: the agent that received the signal
-	 * @error: the error, if any, that occured while registering
-	 *
-	 * Indicates the result of a registration request; if @error is NULL the
-	 * request was successful.
-	 **/
-	signals[REGISTRATION_RESULT] =
-		g_signal_new (NM_SECRET_AGENT_REGISTRATION_RESULT,
-					  G_OBJECT_CLASS_TYPE (object_class),
-					  G_SIGNAL_RUN_FIRST,
-					  0, NULL, NULL,
-					  g_cclosure_marshal_VOID__POINTER,
-					  G_TYPE_NONE, 1, G_TYPE_POINTER);
-
-	dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (class),
-	                                 &dbus_glib_nm_secret_agent_object_info);
-
-	dbus_g_error_domain_register (NM_SECRET_AGENT_ERROR,
-	                              NM_DBUS_INTERFACE_SECRET_AGENT,
-	                              NM_TYPE_SECRET_AGENT_ERROR);
-}
-
diff --git a/libnm-glib/nm-secret-agent.h b/libnm-glib/nm-secret-agent.h
deleted file mode 100644
index 6b209c44..00000000
--- a/libnm-glib/nm-secret-agent.h
+++ /dev/null
@@ -1,189 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* 
- * This library 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 of the License, or (at your option) any later version.
- *
- * This library 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 this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA.
- *
- * (C) Copyright 2010 - 2011 Red Hat, Inc.
- */
-
-#ifndef NM_SECRET_AGENT_H
-#define NM_SECRET_AGENT_H
-
-#include <nm-connection.h>
-
-G_BEGIN_DECLS
-
-#define NM_SECRET_AGENT_ERROR         (nm_secret_agent_error_quark ())
-#define NM_TYPE_SECRET_AGENT_ERROR    (nm_secret_agent_error_get_type ())
-
-GQuark nm_secret_agent_error_quark (void);
-GType nm_secret_agent_error_get_type (void);
-
-typedef enum {
-	NM_SECRET_AGENT_ERROR_NOT_AUTHORIZED = 0,
-	NM_SECRET_AGENT_ERROR_INVALID_CONNECTION,
-	NM_SECRET_AGENT_ERROR_USER_CANCELED,
-	NM_SECRET_AGENT_ERROR_AGENT_CANCELED,
-	NM_SECRET_AGENT_ERROR_INTERNAL_ERROR,
-	NM_SECRET_AGENT_ERROR_NO_SECRETS,
-} NMSecretAgentError;
-
-/**
- * NMSecretAgentGetSecretsFlags:
- * @NM_SECRET_AGENT_GET_SECRETS_FLAG_NONE: no special behavior; by default no
- * user interaction is allowed and requests for secrets are fulfilled from
- * persistent storage, or if no secrets are available an error is returned.
- * @NM_SECRET_AGENT_GET_SECRETS_FLAG_ALLOW_INTERACTION: allows the request to
- * interact with the user, possibly prompting via UI for secrets if any are
- * required, or if none are found in persistent storage.
- * @NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW: explicitly prompt for new
- * secrets from the user.  This flag signals that NetworkManager thinks any
- * existing secrets are invalid or wrong.  This flag implies that interaction
- * is allowed.
- *
- * #NMSecretAgentGetSecretsFlags values modify the behavior of a GetSecrets request.
- */
-typedef enum {
-	NM_SECRET_AGENT_GET_SECRETS_FLAG_NONE = 0x0,
-	NM_SECRET_AGENT_GET_SECRETS_FLAG_ALLOW_INTERACTION = 0x1,
-	NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW = 0x2
-} NMSecretAgentGetSecretsFlags;
-
-#define NM_TYPE_SECRET_AGENT            (nm_secret_agent_get_type ())
-#define NM_SECRET_AGENT(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SECRET_AGENT, NMSecretAgent))
-#define NM_SECRET_AGENT_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SECRET_AGENT, NMSecretAgentClass))
-#define NM_IS_SECRET_AGENT(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SECRET_AGENT))
-#define NM_IS_SECRET_AGENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NM_TYPE_SECRET_AGENT))
-#define NM_SECRET_AGENT_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SECRET_AGENT, NMSecretAgentClass))
-
-#define NM_SECRET_AGENT_IDENTIFIER          "identifier"
-#define NM_SECRET_AGENT_AUTO_REGISTER       "auto-register"
-
-#define NM_SECRET_AGENT_REGISTRATION_RESULT "registration-result"
-
-typedef struct {
-	GObject parent;
-} NMSecretAgent;
-
-typedef void (*NMSecretAgentGetSecretsFunc) (NMSecretAgent *agent,
-                                             NMConnection *connection,
-                                             GHashTable *secrets,
-                                             GError *error,
-                                             gpointer user_data);
-
-typedef void (*NMSecretAgentSaveSecretsFunc) (NMSecretAgent *agent,
-                                              NMConnection *connection,
-                                              GError *error,
-                                              gpointer user_data);
-
-typedef void (*NMSecretAgentDeleteSecretsFunc) (NMSecretAgent *agent,
-                                                NMConnection *connection,
-                                                GError *error,
-                                                gpointer user_data);
-
-typedef struct {
-	GObjectClass parent;
-
-	/* Virtual methods for subclasses */
-
-	/* Called when the subclass should retrieve and return secrets.  Subclass
-	 * must copy or reference any arguments it may require after returning from
-	 * this method, as the arguments will freed (except for 'agent', 'callback',
-	 * and 'callback_data' of course).  If the request is canceled, the callback
-	 * should still be called, but with the NM_SECRET_AGENT_ERROR_AGENT_CANCELED
-	 * error.
-	 */
-	void (*get_secrets) (NMSecretAgent *agent,
-	                     NMConnection *connection,
-	                     const char *connection_path,
-	                     const char *setting_name,
-	                     const char **hints,
-	                     NMSecretAgentGetSecretsFlags flags,
-	                     NMSecretAgentGetSecretsFunc callback,
-	                     gpointer callback_data);
-
-	/* Called when the subclass should cancel an outstanding request to
-	 * get secrets for a given connection.  Canceling the request MUST
-	 * call the callback that was passed along with the initial get_secrets
-	 * call, sending the NM_SECRET_AGENT_ERROR/NM_SECRET_AGENT_ERROR_AGENT_CANCELED
-	 * error to that callback.
-	 */
-	void (*cancel_get_secrets) (NMSecretAgent *agent,
-	                            const char *connection_path,
-	                            const char *setting_name);
-
-	/* Called when the subclass should save the secrets contained in the
-	 * connection to backing storage.  Subclass must copy or reference any
-	 * arguments it may require after returning from this method, as the
-	 * arguments will freed (except for 'agent', 'callback', and 'callback_data'
-	 * of course).
-	 */
-	void (*save_secrets) (NMSecretAgent *agent,
-	                      NMConnection *connection,
-	                      const char *connection_path,
-	                      NMSecretAgentSaveSecretsFunc callback,
-	                      gpointer callback_data);
-
-	/* Called when the subclass should delete the secrets contained in the
-	 * connection from backing storage.  Subclass must copy or reference any
-	 * arguments it may require after returning from this method, as the
-	 * arguments will freed (except for 'agent', 'callback', and 'callback_data'
-	 * of course).
-	 */
-	void (*delete_secrets) (NMSecretAgent *agent,
-	                        NMConnection *connection,
-	                        const char *connection_path,
-	                        NMSecretAgentDeleteSecretsFunc callback,
-	                        gpointer callback_data);
-
-	/* Signals */
-	void (*registration_result) (NMSecretAgent *agent, GError *error);
-
-	/* Padding for future expansion */
-	void (*_reserved1) (void);
-	void (*_reserved2) (void);
-	void (*_reserved3) (void);
-	void (*_reserved4) (void);
-	void (*_reserved5) (void);
-	void (*_reserved6) (void);
-} NMSecretAgentClass;
-
-GType nm_secret_agent_get_type (void);
-
-gboolean nm_secret_agent_register (NMSecretAgent *self);
-
-gboolean nm_secret_agent_unregister (NMSecretAgent *self);
-
-void nm_secret_agent_get_secrets (NMSecretAgent *self,
-                                  NMConnection *connection,
-                                  const char *setting_name,
-                                  const char **hints,
-                                  NMSecretAgentGetSecretsFlags flags,
-                                  NMSecretAgentGetSecretsFunc callback,
-                                  gpointer callback_data);
-
-void nm_secret_agent_save_secrets (NMSecretAgent *self,
-                                   NMConnection *connection,
-                                   NMSecretAgentSaveSecretsFunc callback,
-                                   gpointer callback_data);
-
-void nm_secret_agent_delete_secrets (NMSecretAgent *self,
-                                     NMConnection *connection,
-                                     NMSecretAgentDeleteSecretsFunc callback,
-                                     gpointer callback_data);
-
-G_END_DECLS
-
-#endif /* NM_SECRET_AGENT_H */
diff --git a/libnm-glib/nm-serial-device.c b/libnm-glib/nm-serial-device.c
new file mode 100644
index 00000000..bb45d7c4
--- /dev/null
+++ b/libnm-glib/nm-serial-device.c
@@ -0,0 +1,207 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * libnm_glib -- Access network status & information from glib applications
+ *
+ * This library 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 of the License, or (at your option) any later version.
+ *
+ * This library 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 this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2008 Novell, Inc.
+ */
+
+#include "nm-serial-device.h"
+#include "nm-device-private.h"
+#include "nm-object-private.h"
+#include "nm-marshal.h"
+
+G_DEFINE_ABSTRACT_TYPE (NMSerialDevice, nm_serial_device, NM_TYPE_DEVICE)
+
+#define NM_SERIAL_DEVICE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SERIAL_DEVICE, NMSerialDevicePrivate))
+
+typedef struct {
+	DBusGProxy *proxy;
+
+	guint32 in_bytes;
+	guint32 out_bytes;
+
+	gboolean disposed;
+} NMSerialDevicePrivate;
+
+enum {
+	PPP_STATS,
+
+	LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+/**
+ * nm_serial_device_get_bytes_received:
+ * @self: a #NMSerialDevice
+ *
+ * Gets the amount of bytes received by the serial device.
+ * This counter is reset when the device is activated.
+ *
+ * Returns: bytes received
+ **/
+guint32
+nm_serial_device_get_bytes_received (NMSerialDevice *self)
+{
+	g_return_val_if_fail (NM_IS_SERIAL_DEVICE (self), 0);
+
+	return NM_SERIAL_DEVICE_GET_PRIVATE (self)->in_bytes;
+}
+
+/**
+ * nm_serial_device_get_bytes_sent:
+ * @self: a #NMSerialDevice
+ *
+ * Gets the amount of bytes sent by the serial device.
+ * This counter is reset when the device is activated.
+ *
+ * Returns: bytes sent
+ **/
+guint32
+nm_serial_device_get_bytes_sent (NMSerialDevice *self)
+{
+	g_return_val_if_fail (NM_IS_SERIAL_DEVICE (self), 0);
+
+	return NM_SERIAL_DEVICE_GET_PRIVATE (self)->out_bytes;
+}
+
+static void
+ppp_stats (DBusGProxy *proxy,
+		   guint32 in_bytes,
+		   guint32 out_bytes,
+		   gpointer user_data)
+{
+	NMSerialDevice *self = NM_SERIAL_DEVICE (user_data);
+	NMSerialDevicePrivate *priv = NM_SERIAL_DEVICE_GET_PRIVATE (self);
+
+	priv->in_bytes = in_bytes;
+	priv->out_bytes = out_bytes;
+
+	g_signal_emit (self, signals[PPP_STATS], 0, in_bytes, out_bytes);
+}
+
+static void
+device_state_changed (NMDevice *device, GParamSpec *pspec, gpointer user_data)
+{
+	NMSerialDevicePrivate *priv;
+
+	switch (nm_device_get_state (device)) {
+	case NM_DEVICE_STATE_UNMANAGED:
+	case NM_DEVICE_STATE_UNAVAILABLE:
+	case NM_DEVICE_STATE_DISCONNECTED:
+		priv = NM_SERIAL_DEVICE_GET_PRIVATE (device);
+		priv->in_bytes = priv->out_bytes = 0;
+		break;
+	default:
+		break;
+	}
+}
+
+static void
+nm_serial_device_init (NMSerialDevice *device)
+{
+}
+
+static GObject*
+constructor (GType type,
+			 guint n_construct_params,
+			 GObjectConstructParam *construct_params)
+{
+	GObject *object;
+	NMSerialDevicePrivate *priv;
+
+	object = G_OBJECT_CLASS (nm_serial_device_parent_class)->constructor (type,
+																		  n_construct_params,
+																		  construct_params);
+	if (!object)
+		return NULL;
+
+	priv = NM_SERIAL_DEVICE_GET_PRIVATE (object);
+
+	priv->proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (NM_OBJECT (object)),
+											 NM_DBUS_SERVICE,
+											 nm_object_get_path (NM_OBJECT (object)),
+											 NM_DBUS_INTERFACE_SERIAL_DEVICE);
+
+	dbus_g_object_register_marshaller (_nm_marshal_VOID__UINT_UINT,
+	                                   G_TYPE_NONE,
+	                                   G_TYPE_UINT, G_TYPE_UINT,
+	                                   G_TYPE_INVALID);
+
+	dbus_g_proxy_add_signal (priv->proxy, "PppStats", G_TYPE_UINT, G_TYPE_UINT, G_TYPE_INVALID);
+	dbus_g_proxy_connect_signal (priv->proxy, "PppStats",
+								 G_CALLBACK (ppp_stats),
+								 object,
+								 NULL);
+
+	/* Catch NMDevice::state changes to reset the counters */
+	g_signal_connect (object, "notify::state",
+					  G_CALLBACK (device_state_changed),
+					  object);
+
+	return object;
+}
+
+static void
+dispose (GObject *object)
+{
+	NMSerialDevicePrivate *priv = NM_SERIAL_DEVICE_GET_PRIVATE (object);
+
+	if (priv->disposed) {
+		G_OBJECT_CLASS (nm_serial_device_parent_class)->dispose (object);
+		return;
+	}
+
+	priv->disposed = TRUE;
+
+	g_object_unref (priv->proxy);
+
+	G_OBJECT_CLASS (nm_serial_device_parent_class)->dispose (object);
+}
+
+static void
+nm_serial_device_class_init (NMSerialDeviceClass *device_class)
+{
+	GObjectClass *object_class = G_OBJECT_CLASS (device_class);
+
+	g_type_class_add_private (device_class, sizeof (NMSerialDevicePrivate));
+
+	/* virtual methods */
+	object_class->constructor = constructor;
+	object_class->dispose = dispose;
+
+	/* Signals */
+
+	/**
+	 * NMSerialDevice::ppp-stats:
+	 * @device: the serial device that received the signal
+	 * @in_bytes: the amount of bytes received
+	 * @out_bytes: the amount of bytes sent
+	 *
+	 * Notifies that a #NMAccessPoint is added to the wifi device.
+	 **/
+	signals[PPP_STATS] =
+		g_signal_new ("ppp-stats",
+					  G_OBJECT_CLASS_TYPE (object_class),
+					  G_SIGNAL_RUN_FIRST,
+					  G_STRUCT_OFFSET (NMSerialDeviceClass, ppp_stats),
+					  NULL, NULL,
+					  _nm_marshal_VOID__UINT_UINT,
+					  G_TYPE_NONE, 2,
+					  G_TYPE_UINT, G_TYPE_UINT);
+}
diff --git a/libnm-glib/nm-device-modem.h b/libnm-glib/nm-serial-device.h
index bf84b90d..51f08df3 100644
--- a/libnm-glib/nm-device-modem.h
+++ b/libnm-glib/nm-serial-device.h
@@ -17,34 +17,33 @@
  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
  * Boston, MA 02110-1301 USA.
  *
- * Copyright (C) 2011 Red Hat, Inc.
  * Copyright (C) 2008 Novell, Inc.
  */
 
-#ifndef NM_DEVICE_MODEM_H
-#define NM_DEVICE_MODEM_H
+#ifndef NM_SERIAL_DEVICE_H
+#define NM_SERIAL_DEVICE_H
 
 #include "nm-device.h"
 
 G_BEGIN_DECLS
 
-#define NM_TYPE_DEVICE_MODEM            (nm_device_modem_get_type ())
-#define NM_DEVICE_MODEM(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE_MODEM, NMDeviceModem))
-#define NM_DEVICE_MODEM_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEVICE_MODEM, NMDeviceModemClass))
-#define NM_IS_DEVICE_MODEM(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE_MODEM))
-#define NM_IS_DEVICE_MODEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NM_TYPE_DEVICE_MODEM))
-#define NM_DEVICE_MODEM_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_MODEM, NMDeviceModemClass))
-
-#define NM_DEVICE_MODEM_MODEM_CAPABILITIES   "modem-capabilities"
-#define NM_DEVICE_MODEM_CURRENT_CAPABILITIES "current-capabilities"
+#define NM_TYPE_SERIAL_DEVICE            (nm_serial_device_get_type ())
+#define NM_SERIAL_DEVICE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SERIAL_DEVICE, NMSerialDevice))
+#define NM_SERIAL_DEVICE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SERIAL_DEVICE, NMSerialDeviceClass))
+#define NM_IS_SERIAL_DEVICE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SERIAL_DEVICE))
+#define NM_IS_SERIAL_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NM_TYPE_SERIAL_DEVICE))
+#define NM_SERIAL_DEVICE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SERIAL_DEVICE, NMSerialDeviceClass))
 
 typedef struct {
 	NMDevice parent;
-} NMDeviceModem;
+} NMSerialDevice;
 
 typedef struct {
 	NMDeviceClass parent;
 
+	/* Signals */
+	void (*ppp_stats) (NMSerialDevice *self, guint32 in_bytes, guint32 out_bytes);
+
 	/* Padding for future expansion */
 	void (*_reserved1) (void);
 	void (*_reserved2) (void);
@@ -52,13 +51,13 @@ typedef struct {
 	void (*_reserved4) (void);
 	void (*_reserved5) (void);
 	void (*_reserved6) (void);
-} NMDeviceModemClass;
+} NMSerialDeviceClass;
 
-GType nm_device_modem_get_type (void);
+GType nm_serial_device_get_type (void);
 
-NMDeviceModemCapabilities nm_device_modem_get_modem_capabilities (NMDeviceModem *self);
-NMDeviceModemCapabilities nm_device_modem_get_current_capabilities (NMDeviceModem *self);
+guint32 nm_serial_device_get_bytes_received (NMSerialDevice *self);
+guint32 nm_serial_device_get_bytes_sent     (NMSerialDevice *self);
 
 G_END_DECLS
 
-#endif /* NM_DEVICE_MODEM_H */
+#endif /* NM_SERIAL_DEVICE_H */
diff --git a/libnm-glib/nm-settings-connection-interface.c b/libnm-glib/nm-settings-connection-interface.c
new file mode 100644
index 00000000..868ad047
--- /dev/null
+++ b/libnm-glib/nm-settings-connection-interface.c
@@ -0,0 +1,192 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This library 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 of the License, or (at your option) any later version.
+ *
+ * This library 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 this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2007 - 2008 Novell, Inc.
+ * Copyright (C) 2007 - 2009 Red Hat, Inc.
+ */
+
+#include "nm-settings-connection-interface.h"
+#include "nm-dbus-glib-types.h"
+
+/**
+ * nm_settings_connection_interface_update:
+ * @connection: an object implementing #NMSettingsConnectionInterface
+ * @callback: a function to be called when the update completes
+ * @user_data: caller-specific data to be passed to @callback
+ *
+ * Update the connection with current settings and properties.
+ *
+ * Returns: TRUE on success, FALSE on failure
+ **/
+gboolean
+nm_settings_connection_interface_update (NMSettingsConnectionInterface *connection,
+                                         NMSettingsConnectionInterfaceUpdateFunc callback,
+                                         gpointer user_data)
+{
+	g_return_val_if_fail (connection != NULL, FALSE);
+	g_return_val_if_fail (NM_IS_SETTINGS_CONNECTION_INTERFACE (connection), FALSE);
+	g_return_val_if_fail (callback != NULL, FALSE);
+
+	if (NM_SETTINGS_CONNECTION_INTERFACE_GET_INTERFACE (connection)->update) {
+		return NM_SETTINGS_CONNECTION_INTERFACE_GET_INTERFACE (connection)->update (connection,
+		                                                                            callback,
+		                                                                            user_data);
+	}
+	return FALSE;
+}
+
+/**
+ * nm_settings_connection_interface_delete:
+ * @connection: a objecting implementing #NMSettingsConnectionInterface
+ * @callback: a function to be called when the delete completes
+ * @user_data: caller-specific data to be passed to @callback
+ *
+ * Delete the connection.
+ *
+ * Returns: TRUE on success, FALSE on failure
+ **/
+gboolean
+nm_settings_connection_interface_delete (NMSettingsConnectionInterface *connection,
+                                         NMSettingsConnectionInterfaceDeleteFunc callback,
+                                         gpointer user_data)
+{
+	g_return_val_if_fail (connection != NULL, FALSE);
+	g_return_val_if_fail (NM_IS_SETTINGS_CONNECTION_INTERFACE (connection), FALSE);
+	g_return_val_if_fail (callback != NULL, FALSE);
+
+	if (NM_SETTINGS_CONNECTION_INTERFACE_GET_INTERFACE (connection)->delete) {
+		return NM_SETTINGS_CONNECTION_INTERFACE_GET_INTERFACE (connection)->delete (connection,
+		                                                                            callback,
+		                                                                            user_data);
+	}
+	return FALSE;
+}
+
+/**
+ * nm_settings_connection_interface_get_secrets:
+ * @connection: a object implementing #NMSettingsConnectionInterface
+ * @setting_name: the #NMSetting object name to get secrets for
+ * @hints: #NMSetting key names to get secrets for (optional)
+ * @request_new: hint that new secrets (instead of cached or stored secrets) 
+ *  should be returned
+ * @callback: a function to be called when the update completes
+ * @user_data: caller-specific data to be passed to @callback
+ *
+ * Request the connection's secrets.
+ *
+ * Returns: TRUE on success, FALSE on failure
+ **/
+gboolean
+nm_settings_connection_interface_get_secrets (NMSettingsConnectionInterface *connection,
+                                              const char *setting_name,
+                                              const char **hints,
+                                              gboolean request_new,
+                                              NMSettingsConnectionInterfaceGetSecretsFunc callback,
+                                              gpointer user_data)
+{
+	g_return_val_if_fail (connection != NULL, FALSE);
+	g_return_val_if_fail (NM_IS_SETTINGS_CONNECTION_INTERFACE (connection), FALSE);
+	g_return_val_if_fail (callback != NULL, FALSE);
+
+	if (NM_SETTINGS_CONNECTION_INTERFACE_GET_INTERFACE (connection)->get_secrets) {
+		return NM_SETTINGS_CONNECTION_INTERFACE_GET_INTERFACE (connection)->get_secrets (connection,
+		                                                                                 setting_name,
+		                                                                                 hints,
+		                                                                                 request_new,
+		                                                                                 callback,
+		                                                                                 user_data);
+	}
+	return FALSE;
+}
+
+void
+nm_settings_connection_interface_emit_updated (NMSettingsConnectionInterface *connection)
+{
+	if (NM_SETTINGS_CONNECTION_INTERFACE_GET_INTERFACE (connection)->emit_updated)
+		NM_SETTINGS_CONNECTION_INTERFACE_GET_INTERFACE (connection)->emit_updated (connection);
+	else {
+		NMConnection *tmp;
+		GHashTable *settings;
+
+		tmp = nm_connection_duplicate (NM_CONNECTION (connection));
+		nm_connection_clear_secrets (tmp);
+		settings = nm_connection_to_hash (tmp);
+		g_object_unref (tmp);
+
+		g_signal_emit_by_name (connection, NM_SETTINGS_CONNECTION_INTERFACE_UPDATED, settings);
+		g_hash_table_destroy (settings);
+	}
+}
+
+static void
+nm_settings_connection_interface_init (gpointer g_iface)
+{
+	GType iface_type = G_TYPE_FROM_INTERFACE (g_iface);
+	static gboolean initialized = FALSE;
+
+	if (initialized)
+		return;
+
+	/* Signals */
+	g_signal_new (NM_SETTINGS_CONNECTION_INTERFACE_UPDATED,
+				  iface_type,
+				  G_SIGNAL_RUN_FIRST,
+				  G_STRUCT_OFFSET (NMSettingsConnectionInterface, updated),
+				  NULL, NULL,
+				  g_cclosure_marshal_VOID__BOXED,
+				  G_TYPE_NONE, 1, DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT);
+
+	g_signal_new (NM_SETTINGS_CONNECTION_INTERFACE_REMOVED,
+				  iface_type,
+				  G_SIGNAL_RUN_FIRST,
+				  G_STRUCT_OFFSET (NMSettingsConnectionInterface, removed),
+				  NULL, NULL,
+				  g_cclosure_marshal_VOID__VOID,
+				  G_TYPE_NONE, 0);
+
+	initialized = TRUE;
+}
+
+GType
+nm_settings_connection_interface_get_type (void)
+{
+	static GType itype = 0;
+
+	if (!itype) {
+		const GTypeInfo iinfo = {
+			sizeof (NMSettingsConnectionInterface), /* class_size */
+			nm_settings_connection_interface_init,   /* base_init */
+			NULL,		/* base_finalize */
+			NULL,
+			NULL,		/* class_finalize */
+			NULL,		/* class_data */
+			0,
+			0,              /* n_preallocs */
+			NULL
+		};
+
+		itype = g_type_register_static (G_TYPE_INTERFACE,
+		                                "NMSettingsConnectionInterface",
+		                                &iinfo, 0);
+
+		g_type_interface_add_prerequisite (itype, NM_TYPE_CONNECTION);
+	}
+
+	return itype;
+}
+
diff --git a/libnm-glib/nm-settings-connection-interface.h b/libnm-glib/nm-settings-connection-interface.h
new file mode 100644
index 00000000..7c7a198c
--- /dev/null
+++ b/libnm-glib/nm-settings-connection-interface.h
@@ -0,0 +1,116 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * libnm_glib -- Access network status & information from glib applications
+ *
+ * This library 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 of the License, or (at your option) any later version.
+ *
+ * This library 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 this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2007 - 2008 Novell, Inc.
+ * Copyright (C) 2007 - 2009 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTINGS_CONNECTION_INTERFACE_H__
+#define __NM_SETTINGS_CONNECTION_INTERFACE_H__
+
+#include <glib-object.h>
+#include <dbus/dbus-glib.h>
+
+#include <nm-connection.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTINGS_CONNECTION_INTERFACE               (nm_settings_connection_interface_get_type ())
+#define NM_SETTINGS_CONNECTION_INTERFACE(obj)               (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTINGS_CONNECTION_INTERFACE, NMSettingsConnectionInterface))
+#define NM_IS_SETTINGS_CONNECTION_INTERFACE(obj)            (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SETTINGS_CONNECTION_INTERFACE))
+#define NM_SETTINGS_CONNECTION_INTERFACE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), NM_TYPE_SETTINGS_CONNECTION_INTERFACE, NMSettingsConnectionInterface))
+
+#define NM_SETTINGS_CONNECTION_INTERFACE_UPDATED               "updated"
+#define NM_SETTINGS_CONNECTION_INTERFACE_REMOVED               "removed"
+
+typedef struct _NMSettingsConnectionInterface NMSettingsConnectionInterface;
+
+typedef void (*NMSettingsConnectionInterfaceUpdateFunc) (NMSettingsConnectionInterface *connection,
+                                                         GError *error,
+                                                         gpointer user_data);
+
+typedef void (*NMSettingsConnectionInterfaceDeleteFunc) (NMSettingsConnectionInterface *connection,
+                                                         GError *error,
+                                                         gpointer user_data);
+
+typedef void (*NMSettingsConnectionInterfaceGetSecretsFunc) (NMSettingsConnectionInterface *connection,
+                                                             GHashTable *secrets,
+                                                             GError *error,
+                                                             gpointer user_data);
+
+struct _NMSettingsConnectionInterface {
+	GTypeInterface g_iface;
+
+	/* Methods */
+	gboolean (*update) (NMSettingsConnectionInterface *connection,
+	                    NMSettingsConnectionInterfaceUpdateFunc callback,
+	                    gpointer user_data);
+
+	gboolean (*delete) (NMSettingsConnectionInterface *connection,
+	                    NMSettingsConnectionInterfaceDeleteFunc callback,
+	                    gpointer user_data);
+
+	gboolean (*get_secrets) (NMSettingsConnectionInterface *connection,
+	                         const char *setting_name,
+                             const char **hints,
+                             gboolean request_new,
+                             NMSettingsConnectionInterfaceGetSecretsFunc callback,
+                             gpointer user_data);
+
+	void (*emit_updated) (NMSettingsConnectionInterface *connection);
+
+	/* Signals */
+	/* 'new_settings' hash should *not* contain secrets */
+	void (*updated) (NMSettingsConnectionInterface *connection,
+	                 GHashTable *new_settings);
+
+	void (*removed) (NMSettingsConnectionInterface *connection);
+
+	/* Padding for future expansion */
+	void (*_reserved1) (void);
+	void (*_reserved2) (void);
+	void (*_reserved3) (void);
+	void (*_reserved4) (void);
+	void (*_reserved5) (void);
+	void (*_reserved6) (void);
+};
+
+GType nm_settings_connection_interface_get_type (void);
+
+gboolean nm_settings_connection_interface_update (NMSettingsConnectionInterface *connection,
+                                                  NMSettingsConnectionInterfaceUpdateFunc callback,
+                                                  gpointer user_data);
+
+gboolean nm_settings_connection_interface_delete (NMSettingsConnectionInterface *connection,
+                                                  NMSettingsConnectionInterfaceDeleteFunc callback,
+                                                  gpointer user_data);
+
+gboolean nm_settings_connection_interface_get_secrets (NMSettingsConnectionInterface *connection,
+                                                       const char *setting_name,
+                                                       const char **hints,
+                                                       gboolean request_new,
+                                                       NMSettingsConnectionInterfaceGetSecretsFunc callback,
+                                                       gpointer user_data);
+
+void nm_settings_connection_interface_emit_updated (NMSettingsConnectionInterface *connection);
+
+G_END_DECLS
+
+#endif  /* __NM_SETTINGS_CONNECTION_INTERFACE_H__ */
+
diff --git a/libnm-glib/nm-settings-interface.c b/libnm-glib/nm-settings-interface.c
new file mode 100644
index 00000000..3bd4037a
--- /dev/null
+++ b/libnm-glib/nm-settings-interface.c
@@ -0,0 +1,206 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This library 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 of the License, or (at your option) any later version.
+ *
+ * This library 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 this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2007 - 2008 Novell, Inc.
+ * Copyright (C) 2007 - 2010 Red Hat, Inc.
+ */
+
+#include "nm-settings-interface.h"
+
+
+/**
+ * nm_settings_interface_error_quark:
+ *
+ * Setting error quark.
+ *
+ * Returns: the setting error quark
+ **/
+GQuark
+nm_settings_interface_error_quark (void)
+{
+	static GQuark quark;
+
+	if (G_UNLIKELY (!quark))
+		quark = g_quark_from_static_string ("nm-settings-interface-error-quark");
+	return quark;
+}
+
+/* This should really be standard. */
+#define ENUM_ENTRY(NAME, DESC) { NAME, "" #NAME "", DESC }
+
+GType
+nm_settings_interface_error_get_type (void)
+{
+	static GType etype = 0;
+
+	if (etype == 0) {
+		static const GEnumValue values[] = {
+			/* The connection was invalid. */
+			ENUM_ENTRY (NM_SETTINGS_INTERFACE_ERROR_INVALID_CONNECTION, "InvalidConnection"),
+			/* The connection is read-only; modifications are not allowed. */
+			ENUM_ENTRY (NM_SETTINGS_INTERFACE_ERROR_READ_ONLY_CONNECTION, "ReadOnlyConnection"),
+			/* A bug in the settings service caused the error. */
+			ENUM_ENTRY (NM_SETTINGS_INTERFACE_ERROR_INTERNAL_ERROR, "InternalError"),
+			/* Retrieval or request of secrets failed. */
+			ENUM_ENTRY (NM_SETTINGS_INTERFACE_ERROR_SECRETS_UNAVAILABLE, "SecretsUnavailable"),
+			/* The request for secrets was canceled. */
+			ENUM_ENTRY (NM_SETTINGS_INTERFACE_ERROR_SECRETS_REQUEST_CANCELED, "SecretsRequestCanceled"),
+			/* The request could not be completed because permission was denied. */
+			ENUM_ENTRY (NM_SETTINGS_INTERFACE_ERROR_PERMISSION_DENIED, "PermissionDenied"),
+			/* The requested setting does not existing in this connection. */
+			ENUM_ENTRY (NM_SETTINGS_INTERFACE_ERROR_INVALID_SETTING, "InvalidSetting"),
+			{ 0, 0, 0 },
+		};
+		etype = g_enum_register_static ("NMSettingsInterfaceError", values);
+	}
+	return etype;
+}
+
+
+/**
+ * nm_settings_list_connections:
+ * @settings: a object implementing %NMSettingsInterface
+ *
+ * Returns: all connections known to the object.
+ **/
+GSList *
+nm_settings_interface_list_connections (NMSettingsInterface *settings)
+{
+	g_return_val_if_fail (settings != NULL, NULL);
+	g_return_val_if_fail (NM_IS_SETTINGS_INTERFACE (settings), NULL);
+
+	if (NM_SETTINGS_INTERFACE_GET_INTERFACE (settings)->list_connections)
+		return NM_SETTINGS_INTERFACE_GET_INTERFACE (settings)->list_connections (settings);
+	return NULL;
+}
+
+/**
+ * nm_settings_get_connection_by_path:
+ * @settings: a object implementing %NMSettingsInterface
+ * @path: the D-Bus object path of the remote connection
+ *
+ * Returns the object implementing %NMSettingsConnectionInterface at @path.
+ *
+ * Returns: the remote connection object on success, or NULL if the object was
+ *  not known
+ **/
+NMSettingsConnectionInterface *
+nm_settings_interface_get_connection_by_path (NMSettingsInterface *settings,
+                                              const char *path)
+{
+	g_return_val_if_fail (settings != NULL, NULL);
+	g_return_val_if_fail (NM_IS_SETTINGS_INTERFACE (settings), NULL);
+	g_return_val_if_fail (path != NULL, NULL);
+
+	if (NM_SETTINGS_INTERFACE_GET_INTERFACE (settings)->get_connection_by_path)
+		return NM_SETTINGS_INTERFACE_GET_INTERFACE (settings)->get_connection_by_path (settings, path);
+	return NULL;
+}
+
+/**
+ * nm_settings_interface_add_connection:
+ * @settings: a object implementing %NMSettingsInterface
+ * @connection: the settings to add; note that this object's settings will be
+ *  added, not the object itself
+ * @callback: callback to be called when the add operation completes
+ * @user_data: caller-specific data passed to @callback
+ *
+ * Requests that the settings service add the given settings to a new connection.
+ *
+ * Returns: TRUE if the request was successful, FALSE if it failed
+ **/
+gboolean
+nm_settings_interface_add_connection (NMSettingsInterface *settings,
+                                      NMConnection *connection,
+                                      NMSettingsAddConnectionFunc callback,
+                                      gpointer user_data)
+{
+	g_return_val_if_fail (settings != NULL, FALSE);
+	g_return_val_if_fail (NM_IS_SETTINGS_INTERFACE (settings), FALSE);
+	g_return_val_if_fail (connection != NULL, FALSE);
+	g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
+	g_return_val_if_fail (callback != NULL, FALSE);
+
+	if (NM_SETTINGS_INTERFACE_GET_INTERFACE (settings)->add_connection) {
+		return NM_SETTINGS_INTERFACE_GET_INTERFACE (settings)->add_connection (settings,
+		                                                                       connection,
+		                                                                       callback,
+		                                                                       user_data);
+	}
+	return FALSE;
+}
+
+/*****************************************************************/
+
+static void
+nm_settings_interface_init (gpointer g_iface)
+{
+	GType iface_type = G_TYPE_FROM_INTERFACE (g_iface);
+	static gboolean initialized = FALSE;
+
+	if (initialized)
+		return;
+
+	/* Signals */
+	g_signal_new (NM_SETTINGS_INTERFACE_NEW_CONNECTION,
+				  iface_type,
+				  G_SIGNAL_RUN_FIRST,
+				  G_STRUCT_OFFSET (NMSettingsInterface, new_connection),
+				  NULL, NULL,
+				  g_cclosure_marshal_VOID__OBJECT,
+				  G_TYPE_NONE, 1, G_TYPE_OBJECT);
+
+	g_signal_new (NM_SETTINGS_INTERFACE_CONNECTIONS_READ,
+				  iface_type,
+				  G_SIGNAL_RUN_FIRST,
+				  G_STRUCT_OFFSET (NMSettingsInterface, connections_read),
+				  NULL, NULL,
+				  g_cclosure_marshal_VOID__VOID,
+				  G_TYPE_NONE, 0);
+
+	initialized = TRUE;
+}
+
+GType
+nm_settings_interface_get_type (void)
+{
+	static GType settings_interface_type = 0;
+
+	if (!settings_interface_type) {
+		const GTypeInfo settings_interface_info = {
+			sizeof (NMSettingsInterface), /* class_size */
+			nm_settings_interface_init,   /* base_init */
+			NULL,		/* base_finalize */
+			NULL,
+			NULL,		/* class_finalize */
+			NULL,		/* class_data */
+			0,
+			0,              /* n_preallocs */
+			NULL
+		};
+
+		settings_interface_type = g_type_register_static (G_TYPE_INTERFACE,
+		                                                  "NMSettingsInterface",
+		                                                  &settings_interface_info, 0);
+
+		g_type_interface_add_prerequisite (settings_interface_type, G_TYPE_OBJECT);
+	}
+
+	return settings_interface_type;
+}
+
diff --git a/libnm-glib/nm-settings-interface.h b/libnm-glib/nm-settings-interface.h
new file mode 100644
index 00000000..5920bd82
--- /dev/null
+++ b/libnm-glib/nm-settings-interface.h
@@ -0,0 +1,109 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This library 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 of the License, or (at your option) any later version.
+ *
+ * This library 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 this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2007 - 2008 Novell, Inc.
+ * Copyright (C) 2007 - 2010 Red Hat, Inc.
+ */
+
+#ifndef NM_SETTINGS_INTERFACE_H
+#define NM_SETTINGS_INTERFACE_H
+
+#include <glib-object.h>
+
+#include "NetworkManager.h"
+#include "nm-settings-connection-interface.h"
+
+G_BEGIN_DECLS
+
+typedef enum {
+	NM_SETTINGS_INTERFACE_ERROR_INVALID_CONNECTION = 0,
+	NM_SETTINGS_INTERFACE_ERROR_READ_ONLY_CONNECTION,
+	NM_SETTINGS_INTERFACE_ERROR_INTERNAL_ERROR,
+	NM_SETTINGS_INTERFACE_ERROR_SECRETS_UNAVAILABLE,
+	NM_SETTINGS_INTERFACE_ERROR_SECRETS_REQUEST_CANCELED,
+	NM_SETTINGS_INTERFACE_ERROR_PERMISSION_DENIED,
+	NM_SETTINGS_INTERFACE_ERROR_INVALID_SETTING,
+} NMSettingsInterfaceError;
+
+#define NM_SETTINGS_INTERFACE_ERROR (nm_settings_interface_error_quark ())
+GQuark nm_settings_interface_error_quark (void);
+
+#define NM_TYPE_SETTINGS_INTERFACE_ERROR (nm_settings_interface_error_get_type ()) 
+GType nm_settings_interface_error_get_type (void);
+
+
+#define NM_TYPE_SETTINGS_INTERFACE               (nm_settings_interface_get_type ())
+#define NM_SETTINGS_INTERFACE(obj)               (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTINGS_INTERFACE, NMSettingsInterface))
+#define NM_IS_SETTINGS_INTERFACE(obj)            (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SETTINGS_INTERFACE))
+#define NM_SETTINGS_INTERFACE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), NM_TYPE_SETTINGS_INTERFACE, NMSettingsInterface))
+
+#define NM_SETTINGS_INTERFACE_NEW_CONNECTION   "new-connection"
+#define NM_SETTINGS_INTERFACE_CONNECTIONS_READ "connections-read"
+
+typedef struct _NMSettingsInterface NMSettingsInterface;
+
+typedef void (*NMSettingsAddConnectionFunc) (NMSettingsInterface *settings,
+                                             GError *error,
+                                             gpointer user_data);
+
+struct _NMSettingsInterface {
+	GTypeInterface g_iface;
+
+	/* Methods */
+	/* Returns a list of objects implementing NMSettingsConnectionInterface */
+	GSList * (*list_connections) (NMSettingsInterface *settings);
+
+	NMSettingsConnectionInterface * (*get_connection_by_path) (NMSettingsInterface *settings,
+	                                                           const char *path);
+
+	gboolean (*add_connection) (NMSettingsInterface *settings,
+	                            NMConnection *connection,
+	                            NMSettingsAddConnectionFunc callback,
+	                            gpointer user_data);
+
+	/* Signals */
+	void (*new_connection) (NMSettingsInterface *settings,
+	                        NMSettingsConnectionInterface *connection);
+
+	void (*connections_read) (NMSettingsInterface *settings);
+
+	/* Padding for future expansion */
+	void (*_reserved1) (void);
+	void (*_reserved2) (void);
+	void (*_reserved3) (void);
+	void (*_reserved4) (void);
+	void (*_reserved5) (void);
+	void (*_reserved6) (void);
+};
+
+GType nm_settings_interface_get_type (void);
+
+/* Returns a list of objects implementing NMSettingsConnectionInterface */
+GSList *nm_settings_interface_list_connections (NMSettingsInterface *settings);
+
+NMSettingsConnectionInterface *nm_settings_interface_get_connection_by_path (NMSettingsInterface *settings,
+                                                                             const char *path); 
+
+gboolean nm_settings_interface_add_connection (NMSettingsInterface *settings,
+                                               NMConnection *connection,
+                                               NMSettingsAddConnectionFunc callback,
+                                               gpointer user_data);
+
+G_END_DECLS
+
+#endif /* NM_SETTINGS_INTERFACE_H */
diff --git a/libnm-glib/nm-settings-service.c b/libnm-glib/nm-settings-service.c
new file mode 100644
index 00000000..6266d10d
--- /dev/null
+++ b/libnm-glib/nm-settings-service.c
@@ -0,0 +1,372 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager system settings service
+ *
+ * This library 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 of the License, or (at your option) any later version.
+ *
+ * This library 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 this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ * (C) Copyright 2008 Novell, Inc.
+ * (C) Copyright 2008 - 2009 Red Hat, Inc.
+ */
+
+#include <string.h>
+#include <NetworkManager.h>
+#include <dbus/dbus-glib-lowlevel.h>
+
+#include "nm-settings-service.h"
+#include "nm-settings-interface.h"
+#include "nm-exported-connection.h"
+
+static gboolean impl_settings_list_connections (NMSettingsService *self,
+                                                GPtrArray **connections,
+                                                GError **error);
+
+static void impl_settings_add_connection (NMSettingsService *self,
+                                          GHashTable *settings,
+                                          DBusGMethodInvocation *context);
+
+#include "nm-settings-glue.h"
+
+static void settings_interface_init (NMSettingsInterface *class);
+
+G_DEFINE_TYPE_EXTENDED (NMSettingsService, nm_settings_service, G_TYPE_OBJECT, G_TYPE_FLAG_ABSTRACT,
+                        G_IMPLEMENT_INTERFACE (NM_TYPE_SETTINGS_INTERFACE, settings_interface_init))
+
+#define NM_SETTINGS_SERVICE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
+                                            NM_TYPE_SETTINGS_SERVICE, \
+                                            NMSettingsServicePrivate))
+
+typedef struct {
+	DBusGConnection *bus;
+	NMConnectionScope scope;
+	gboolean exported;
+
+	gboolean disposed;
+} NMSettingsServicePrivate;
+
+enum {
+	PROP_0,
+	PROP_BUS,
+	PROP_SCOPE,
+
+	LAST_PROP
+};
+
+
+/**************************************************************/
+
+void
+nm_settings_service_export (NMSettingsService *self)
+{
+	NMSettingsServicePrivate *priv;
+
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (NM_IS_SETTINGS_SERVICE (self));
+
+	priv = NM_SETTINGS_SERVICE_GET_PRIVATE (self);
+
+	g_return_if_fail (priv->bus != NULL);
+
+	/* Don't allow exporting twice */
+	g_return_if_fail (priv->exported == FALSE);
+
+	dbus_g_connection_register_g_object (priv->bus,
+	                                     NM_DBUS_PATH_SETTINGS,
+	                                     G_OBJECT (self));
+	priv->exported = TRUE;
+}
+
+/**************************************************************/
+
+static GSList *
+list_connections (NMSettingsInterface *settings)
+{
+	/* Must always be implemented */
+	g_assert (NM_SETTINGS_SERVICE_GET_CLASS (settings)->list_connections);
+	return NM_SETTINGS_SERVICE_GET_CLASS (settings)->list_connections (NM_SETTINGS_SERVICE (settings));
+}
+
+static gboolean
+impl_settings_list_connections (NMSettingsService *self,
+                                GPtrArray **connections,
+                                GError **error)
+{
+	GSList *list = NULL, *iter;
+
+	list = list_connections (NM_SETTINGS_INTERFACE (self));
+	*connections = g_ptr_array_sized_new (g_slist_length (list) + 1);
+	for (iter = list; iter; iter = g_slist_next (iter)) {
+		g_ptr_array_add (*connections,
+		                 g_strdup (nm_connection_get_path (NM_CONNECTION (iter->data))));
+	}
+	g_slist_free (list);
+	return TRUE;
+}
+
+static NMSettingsConnectionInterface *
+get_connection_by_path (NMSettingsInterface *settings, const char *path)
+{
+	NMExportedConnection *connection = NULL;
+	GSList *list = NULL, *iter;
+
+	list = list_connections (settings);
+	for (iter = list; iter; iter = g_slist_next (iter)) {
+		if (!strcmp (nm_connection_get_path (NM_CONNECTION (iter->data)), path)) {
+			connection = NM_EXPORTED_CONNECTION (iter->data);
+			break;
+		}
+	}
+	g_slist_free (list);
+
+	return (NMSettingsConnectionInterface *) connection;
+}
+
+NMExportedConnection *
+nm_settings_service_get_connection_by_path (NMSettingsService *self,
+                                            const char *path)
+{
+	g_return_val_if_fail (self != NULL, NULL);
+	g_return_val_if_fail (NM_IS_SETTINGS_SERVICE (self), NULL);
+
+	return (NMExportedConnection *) get_connection_by_path (NM_SETTINGS_INTERFACE (self), path);
+}
+
+static gboolean
+add_connection (NMSettingsInterface *settings,
+                NMConnection *connection,
+                NMSettingsAddConnectionFunc callback,
+                gpointer user_data)
+{
+	NMSettingsService *self = NM_SETTINGS_SERVICE (settings);
+	GError *error = NULL;
+	gboolean success = FALSE;
+
+	if (NM_SETTINGS_SERVICE_GET_CLASS (self)->add_connection) {
+		NM_SETTINGS_SERVICE_GET_CLASS (self)->add_connection (NM_SETTINGS_SERVICE (self),
+		                                                      connection,
+		                                                      NULL,
+		                                                      callback,
+		                                                      user_data);
+		success = TRUE;
+	} else {
+		error = g_error_new (NM_SETTINGS_INTERFACE_ERROR,
+		                     NM_SETTINGS_INTERFACE_ERROR_INTERNAL_ERROR,
+		                     "%s: %s:%d add_connection() not implemented",
+		                     __func__, __FILE__, __LINE__);
+		callback (settings, error, user_data);
+		g_error_free (error);
+	}
+
+	return success;
+}
+
+static void
+dbus_add_connection_cb (NMSettingsInterface *settings,
+                        GError *error,
+                        gpointer user_data)
+{
+	DBusGMethodInvocation *context = user_data;
+
+	if (error)
+		dbus_g_method_return_error (context, error);
+	else
+		dbus_g_method_return (context);
+}
+
+static void
+impl_settings_add_connection (NMSettingsService *self,
+                              GHashTable *settings,
+                              DBusGMethodInvocation *context)
+{
+	NMConnection *tmp;
+	GError *error = NULL;
+
+	/* Check if the settings are valid first */
+	tmp = nm_connection_new_from_hash (settings, &error);
+	if (!tmp) {
+		g_assert (error);
+		dbus_g_method_return_error (context, error);
+		g_error_free (error);
+		return;
+	}
+
+	if (NM_SETTINGS_SERVICE_GET_CLASS (self)->add_connection) {
+		NM_SETTINGS_SERVICE_GET_CLASS (self)->add_connection (NM_SETTINGS_SERVICE (self),
+		                                                      tmp,
+		                                                      context,
+		                                                      dbus_add_connection_cb,
+		                                                      context);
+	} else {
+		error = g_error_new (NM_SETTINGS_INTERFACE_ERROR,
+		                     NM_SETTINGS_INTERFACE_ERROR_INTERNAL_ERROR,
+		                     "%s: %s:%d add_connection() not implemented",
+		                     __func__, __FILE__, __LINE__);
+		dbus_g_method_return_error (context, error);
+		g_error_free (error);
+	}
+
+	g_object_unref (tmp);
+}
+
+void
+nm_settings_service_export_connection (NMSettingsService *self,
+                                       NMSettingsConnectionInterface *connection)
+{
+	NMSettingsServicePrivate *priv = NM_SETTINGS_SERVICE_GET_PRIVATE (self);
+	static guint32 ec_counter = 0;
+	char *path;
+
+	g_return_if_fail (connection != NULL);
+	g_return_if_fail (NM_IS_SETTINGS_CONNECTION_INTERFACE (connection));
+	g_return_if_fail (priv->bus != NULL);
+
+	/* Don't allow exporting twice */
+	g_return_if_fail (nm_connection_get_path (NM_CONNECTION (connection)) == NULL);
+
+	path = g_strdup_printf ("%s/%u", NM_DBUS_PATH_SETTINGS, ec_counter++);
+	nm_connection_set_path (NM_CONNECTION (connection), path);
+	nm_connection_set_scope (NM_CONNECTION (connection), priv->scope);
+
+	dbus_g_connection_register_g_object (priv->bus, path, G_OBJECT (connection));
+	g_free (path);
+}
+
+/**************************************************************/
+
+static void
+settings_interface_init (NMSettingsInterface *iface)
+{
+	/* interface implementation */
+	iface->list_connections = list_connections;
+	iface->get_connection_by_path = get_connection_by_path;
+	iface->add_connection = add_connection;
+
+	dbus_g_object_type_install_info (G_TYPE_FROM_INTERFACE (iface),
+	                                 &dbus_glib_nm_settings_object_info);
+}
+
+static GObject *
+constructor (GType type,
+             guint n_construct_params,
+             GObjectConstructParam *construct_params)
+{
+	GObject *object;
+
+	object = G_OBJECT_CLASS (nm_settings_service_parent_class)->constructor (type, n_construct_params, construct_params);
+	if (object) {
+		g_assert (NM_SETTINGS_SERVICE_GET_PRIVATE (object)->scope != NM_CONNECTION_SCOPE_UNKNOWN);
+	}
+	return object;
+}
+
+static void
+nm_settings_service_init (NMSettingsService *self)
+{
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+              const GValue *value, GParamSpec *pspec)
+{
+	NMSettingsServicePrivate *priv = NM_SETTINGS_SERVICE_GET_PRIVATE (object);
+	DBusGConnection *bus;
+
+	switch (prop_id) {
+	case PROP_BUS:
+		/* Construct only */
+		bus = g_value_get_boxed (value);
+		if (bus)
+			priv->bus = dbus_g_connection_ref (bus);
+		break;
+	case PROP_SCOPE:
+		/* Construct only */
+		priv->scope = g_value_get_uint (value);
+		break;
+	default:
+		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+		break;
+	}
+}
+
+static void
+get_property (GObject *object, guint prop_id,
+              GValue *value, GParamSpec *pspec)
+{
+	NMSettingsServicePrivate *priv = NM_SETTINGS_SERVICE_GET_PRIVATE (object);
+
+	switch (prop_id) {
+	case PROP_BUS:
+		g_value_set_boxed (value, priv->bus);
+		break;
+	case PROP_SCOPE:
+		g_value_set_uint (value, priv->scope);
+		break;
+	default:
+		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+		break;
+	}
+}
+
+static void
+dispose (GObject *object)
+{
+	NMSettingsServicePrivate *priv = NM_SETTINGS_SERVICE_GET_PRIVATE (object);
+
+	if (!priv->disposed) {
+		priv->disposed = TRUE;
+		if (priv->bus)
+			dbus_g_connection_unref (priv->bus);
+	}
+
+	G_OBJECT_CLASS (nm_settings_service_parent_class)->dispose (object);
+}
+
+static void
+nm_settings_service_class_init (NMSettingsServiceClass *class)
+{
+	GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+	g_type_class_add_private (class, sizeof (NMSettingsServicePrivate));
+
+	/* Virtual methods */
+	object_class->dispose = dispose;
+	object_class->constructor = constructor;
+	object_class->get_property = get_property;
+	object_class->set_property = set_property;
+
+	/**
+	 * NMSettingsService:bus:
+	 *
+	 * The %DBusGConnection which this object is exported on
+	 **/
+	g_object_class_install_property (object_class, PROP_BUS,
+	                                 g_param_spec_boxed (NM_SETTINGS_SERVICE_BUS,
+	                                                     "Bus",
+	                                                     "Bus",
+	                                                     DBUS_TYPE_G_CONNECTION,
+	                                                     G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+	/**
+	 * NMSettingsService:scope:
+	 *
+	 * The capabilities of the device.
+	 **/
+	g_object_class_install_property (object_class, PROP_SCOPE,
+	                                 g_param_spec_uint (NM_SETTINGS_SERVICE_SCOPE,
+	                                                    "Scope",
+	                                                    "Scope",
+	                                                    NM_CONNECTION_SCOPE_SYSTEM,
+	                                                    NM_CONNECTION_SCOPE_USER,
+	                                                    NM_CONNECTION_SCOPE_USER,
+	                                                    G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+}
diff --git a/libnm-glib/nm-settings-service.h b/libnm-glib/nm-settings-service.h
new file mode 100644
index 00000000..9f4b95fc
--- /dev/null
+++ b/libnm-glib/nm-settings-service.h
@@ -0,0 +1,82 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager system settings service
+ *
+ * This library 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 of the License, or (at your option) any later version.
+ *
+ * This library 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 this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ * (C) Copyright 2009 Red Hat, Inc.
+ */
+
+#ifndef NM_SETTINGS_SERVICE_H
+#define NM_SETTINGS_SERVICE_H
+
+#include <dbus/dbus-glib.h>
+#include <dbus/dbus-glib-lowlevel.h>
+#include <nm-exported-connection.h>
+#include <nm-settings-interface.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTINGS_SERVICE            (nm_settings_service_get_type ())
+#define NM_SETTINGS_SERVICE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTINGS_SERVICE, NMSettingsService))
+#define NM_SETTINGS_SERVICE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SETTINGS_SERVICE, NMSettingsServiceClass))
+#define NM_IS_SETTINGS_SERVICE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SETTINGS_SERVICE))
+#define NM_IS_SETTINGS_SERVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NM_TYPE_SETTINGS_SERVICE))
+#define NM_SETTINGS_SERVICE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SETTINGS_SERVICE, NMSettingsServiceClass))
+
+#define NM_SETTINGS_SERVICE_BUS "bus"
+#define NM_SETTINGS_SERVICE_SCOPE "scope"
+
+typedef struct {
+	GObject parent;
+} NMSettingsService;
+
+typedef struct {
+	GObjectClass parent;
+
+	/* Returned list must contain all NMExportedConnection objects exported
+	 * by the settings service.  The list (but not the NMExportedConnection
+	 * objects) will be freed by caller.
+	 */
+	GSList * (*list_connections) (NMSettingsService *self);
+
+	void (*add_connection) (NMSettingsService *self,
+	                        NMConnection *connection,
+	                        DBusGMethodInvocation *context, /* Only present for D-Bus calls */
+	                        NMSettingsAddConnectionFunc callback,
+	                        gpointer user_data);
+
+	/* Padding for future expansion */
+	void (*_reserved1) (void);
+	void (*_reserved2) (void);
+	void (*_reserved3) (void);
+	void (*_reserved4) (void);
+	void (*_reserved5) (void);
+	void (*_reserved6) (void);
+} NMSettingsServiceClass;
+
+GType nm_settings_service_get_type (void);
+
+NMExportedConnection *nm_settings_service_get_connection_by_path (NMSettingsService *self,
+                                                                  const char *path);
+
+void nm_settings_service_export (NMSettingsService *self);
+
+void nm_settings_service_export_connection (NMSettingsService *self,
+                                            NMSettingsConnectionInterface *exported);
+
+G_END_DECLS
+
+#endif /* NM_SETTINGS_SERVICE_H */
diff --git a/libnm-glib/nm-settings-system-interface.c b/libnm-glib/nm-settings-system-interface.c
new file mode 100644
index 00000000..0f59377a
--- /dev/null
+++ b/libnm-glib/nm-settings-system-interface.c
@@ -0,0 +1,150 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This library 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 of the License, or (at your option) any later version.
+ *
+ * This library 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 this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2007 - 2008 Novell, Inc.
+ * Copyright (C) 2007 - 2008 Red Hat, Inc.
+ */
+
+#include "nm-settings-interface.h"
+#include "nm-settings-system-interface.h"
+
+
+/**
+ * nm_settings_system_interface_save_hostname:
+ * @settings: a object implementing %NMSettingsSystemInterface
+ * @hostname: the new persistent hostname to set, or NULL to clear any existing
+ *  persistent hostname
+ * @callback: callback to be called when the hostname operation completes
+ * @user_data: caller-specific data passed to @callback
+ *
+ * Requests that the machine's persistent hostname be set to the specified value
+ * or cleared.
+ *
+ * Returns: TRUE if the request was successful, FALSE if it failed
+ **/
+gboolean
+nm_settings_system_interface_save_hostname (NMSettingsSystemInterface *settings,
+                                            const char *hostname,
+                                            NMSettingsSystemSaveHostnameFunc callback,
+                                            gpointer user_data)
+{
+	g_return_val_if_fail (settings != NULL, FALSE);
+	g_return_val_if_fail (NM_IS_SETTINGS_SYSTEM_INTERFACE (settings), FALSE);
+	g_return_val_if_fail (hostname != NULL, FALSE);
+	g_return_val_if_fail (callback != NULL, FALSE);
+
+	if (NM_SETTINGS_SYSTEM_INTERFACE_GET_INTERFACE (settings)->save_hostname) {
+		return NM_SETTINGS_SYSTEM_INTERFACE_GET_INTERFACE (settings)->save_hostname (settings,
+		                                                                             hostname,
+		                                                                             callback,
+		                                                                             user_data);
+	}
+	return FALSE;
+}
+
+/**
+ * nm_settings_system_interface_get_permissions:
+ * @settings: a object implementing %NMSettingsSystemInterface
+ * @callback: callback to be called when the permissions operation completes
+ * @user_data: caller-specific data passed to @callback
+ *
+ * Requests an indication of the operations the caller is permitted to perform
+ * including those that may require authorization.
+ *
+ * Returns: TRUE if the request was successful, FALSE if it failed
+ **/
+gboolean
+nm_settings_system_interface_get_permissions (NMSettingsSystemInterface *settings,
+                                              NMSettingsSystemGetPermissionsFunc callback,
+                                              gpointer user_data)
+{
+	g_return_val_if_fail (settings != NULL, FALSE);
+	g_return_val_if_fail (NM_IS_SETTINGS_SYSTEM_INTERFACE (settings), FALSE);
+	g_return_val_if_fail (callback != NULL, FALSE);
+
+	if (NM_SETTINGS_SYSTEM_INTERFACE_GET_INTERFACE (settings)->get_permissions)
+		return NM_SETTINGS_SYSTEM_INTERFACE_GET_INTERFACE (settings)->get_permissions (settings, callback, user_data);
+	return FALSE;
+}
+
+static void
+nm_settings_system_interface_init (gpointer g_iface)
+{
+	GType iface_type = G_TYPE_FROM_INTERFACE (g_iface);
+	static gboolean initialized = FALSE;
+
+	if (initialized)
+		return;
+
+	/* Properties */
+	g_object_interface_install_property
+		(g_iface,
+		 g_param_spec_string (NM_SETTINGS_SYSTEM_INTERFACE_HOSTNAME,
+							  "Hostname",
+							  "Persistent hostname",
+							  NULL,
+							  G_PARAM_READABLE));
+
+	g_object_interface_install_property
+		(g_iface,
+		 g_param_spec_boolean (NM_SETTINGS_SYSTEM_INTERFACE_CAN_MODIFY,
+		                       "CanModify",
+		                       "Can modify anything (hostname, connections, etc)",
+		                       FALSE,
+		                       G_PARAM_READABLE));
+
+	/* Signals */
+	g_signal_new (NM_SETTINGS_SYSTEM_INTERFACE_CHECK_PERMISSIONS,
+				  iface_type,
+				  G_SIGNAL_RUN_FIRST,
+				  G_STRUCT_OFFSET (NMSettingsSystemInterface, check_permissions),
+				  NULL, NULL,
+				  g_cclosure_marshal_VOID__VOID,
+				  G_TYPE_NONE, 0);
+
+	initialized = TRUE;
+}
+
+GType
+nm_settings_system_interface_get_type (void)
+{
+	static GType itype = 0;
+
+	if (!itype) {
+		const GTypeInfo iinfo = {
+			sizeof (NMSettingsSystemInterface), /* class_size */
+			nm_settings_system_interface_init,   /* base_init */
+			NULL,		/* base_finalize */
+			NULL,
+			NULL,		/* class_finalize */
+			NULL,		/* class_data */
+			0,
+			0,              /* n_preallocs */
+			NULL
+		};
+
+		itype = g_type_register_static (G_TYPE_INTERFACE,
+		                                "NMSettingsSystemInterface",
+		                                &iinfo, 0);
+
+		g_type_interface_add_prerequisite (itype, NM_TYPE_SETTINGS_INTERFACE);
+	}
+
+	return itype;
+}
+
diff --git a/libnm-glib/nm-settings-system-interface.h b/libnm-glib/nm-settings-system-interface.h
new file mode 100644
index 00000000..d0165561
--- /dev/null
+++ b/libnm-glib/nm-settings-system-interface.h
@@ -0,0 +1,108 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This library 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 of the License, or (at your option) any later version.
+ *
+ * This library 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 this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2007 - 2008 Novell, Inc.
+ * Copyright (C) 2007 - 2009 Red Hat, Inc.
+ */
+
+#ifndef NM_SETTINGS_SYSTEM_INTERFACE_H
+#define NM_SETTINGS_SYSTEM_INTERFACE_H
+
+#include <glib-object.h>
+
+#include "NetworkManager.h"
+
+G_BEGIN_DECLS
+
+typedef enum {
+	NM_SETTINGS_SYSTEM_PERMISSION_NONE = 0x0,
+	NM_SETTINGS_SYSTEM_PERMISSION_CONNECTION_MODIFY = 0x1,
+	NM_SETTINGS_SYSTEM_PERMISSION_WIFI_SHARE_PROTECTED = 0x2,
+	NM_SETTINGS_SYSTEM_PERMISSION_WIFI_SHARE_OPEN = 0x4,
+	NM_SETTINGS_SYSTEM_PERMISSION_HOSTNAME_MODIFY = 0x8
+} NMSettingsSystemPermissions;
+
+#define NM_TYPE_SETTINGS_SYSTEM_INTERFACE               (nm_settings_system_interface_get_type ())
+#define NM_SETTINGS_SYSTEM_INTERFACE(obj)               (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTINGS_SYSTEM_INTERFACE, NMSettingsSystemInterface))
+#define NM_IS_SETTINGS_SYSTEM_INTERFACE(obj)            (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SETTINGS_SYSTEM_INTERFACE))
+#define NM_SETTINGS_SYSTEM_INTERFACE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), NM_TYPE_SETTINGS_SYSTEM_INTERFACE, NMSettingsSystemInterface))
+
+#define NM_SETTINGS_SYSTEM_INTERFACE_HOSTNAME          "hostname"
+#define NM_SETTINGS_SYSTEM_INTERFACE_CAN_MODIFY        "can-modify"
+
+#define NM_SETTINGS_SYSTEM_INTERFACE_CHECK_PERMISSIONS "check-permissions"
+
+typedef enum {
+	NM_SETTINGS_SYSTEM_INTERFACE_PROP_FIRST = 0x1000,
+
+	NM_SETTINGS_SYSTEM_INTERFACE_PROP_HOSTNAME = NM_SETTINGS_SYSTEM_INTERFACE_PROP_FIRST,
+	NM_SETTINGS_SYSTEM_INTERFACE_PROP_CAN_MODIFY
+} NMSettingsSystemInterfaceProp;
+
+
+typedef struct _NMSettingsSystemInterface NMSettingsSystemInterface;
+
+
+typedef void (*NMSettingsSystemSaveHostnameFunc) (NMSettingsSystemInterface *settings,
+                                                  GError *error,
+                                                  gpointer user_data);
+
+typedef void (*NMSettingsSystemGetPermissionsFunc) (NMSettingsSystemInterface *settings,
+                                                    NMSettingsSystemPermissions permissions,
+                                                    GError *error,
+                                                    gpointer user_data);
+
+struct _NMSettingsSystemInterface {
+	GTypeInterface g_iface;
+
+	/* Methods */
+	gboolean (*save_hostname) (NMSettingsSystemInterface *settings,
+	                           const char *hostname,
+	                           NMSettingsSystemSaveHostnameFunc callback,
+	                           gpointer user_data);
+
+	gboolean (*get_permissions) (NMSettingsSystemInterface *settings,
+	                             NMSettingsSystemGetPermissionsFunc callback,
+	                             gpointer user_data);
+
+	/* Signals */
+	void (*check_permissions) (NMSettingsSystemInterface *settings);
+
+	/* Padding for future expansion */
+	void (*_reserved1) (void);
+	void (*_reserved2) (void);
+	void (*_reserved3) (void);
+	void (*_reserved4) (void);
+	void (*_reserved5) (void);
+	void (*_reserved6) (void);
+};
+
+GType nm_settings_system_interface_get_type (void);
+
+gboolean nm_settings_system_interface_save_hostname (NMSettingsSystemInterface *settings,
+                                                     const char *hostname,
+                                                     NMSettingsSystemSaveHostnameFunc callback,
+                                                     gpointer user_data);
+
+gboolean nm_settings_system_interface_get_permissions (NMSettingsSystemInterface *settings,
+                                                       NMSettingsSystemGetPermissionsFunc callback,
+                                                       gpointer user_data);
+
+G_END_DECLS
+
+#endif /* NM_SETTINGS_SYSTEM_INTERFACE_H */
diff --git a/libnm-glib/nm-types.c b/libnm-glib/nm-types.c
index a2d6d2b4..cf9e084c 100644
--- a/libnm-glib/nm-types.c
+++ b/libnm-glib/nm-types.c
@@ -52,7 +52,7 @@ nm_ssid_get_type (void)
 	static GType our_type = 0;
 
 	if (our_type == 0)
-		our_type = g_boxed_type_register_static (g_intern_static_string ("NMSsid"),
+		our_type = g_boxed_type_register_static (g_intern_static_string ("nm-ssid"),
 		                                         (GBoxedCopyFunc) nm_ssid_copy,
 		                                         (GBoxedFreeFunc) nm_ssid_free);
 	return our_type;
@@ -105,7 +105,7 @@ nm_uint_array_get_type (void)
 	static GType our_type = 0;
 
 	if (our_type == 0)
-		our_type = g_boxed_type_register_static (g_intern_static_string ("NMUintArray"),
+		our_type = g_boxed_type_register_static (g_intern_static_string ("nm-uint-array"),
 		                                         (GBoxedCopyFunc) nm_uint_array_copy,
 		                                         (GBoxedFreeFunc) nm_uint_array_free);
 	return our_type;
@@ -163,7 +163,7 @@ nm_string_array_get_type (void)
 	static GType our_type = 0;
 
 	if (our_type == 0)
-		our_type = g_boxed_type_register_static (g_intern_static_string ("NMStringArray"),
+		our_type = g_boxed_type_register_static (g_intern_static_string ("nm-string-array"),
 		                                         (GBoxedCopyFunc) nm_string_array_copy,
 		                                         (GBoxedFreeFunc) nm_string_array_free);
 	return our_type;
@@ -224,7 +224,7 @@ nm_object_array_get_type (void)
 	static GType our_type = 0;
 
 	if (our_type == 0)
-		our_type = g_boxed_type_register_static (g_intern_static_string ("NMObjectArray"),
+		our_type = g_boxed_type_register_static (g_intern_static_string ("nm-object-array"),
 		                                         (GBoxedCopyFunc) nm_object_array_copy,
 		                                         (GBoxedFreeFunc) nm_object_array_free);
 	return our_type;
@@ -253,9 +253,9 @@ _nm_object_array_demarshal (GValue *value,
 
 			path = g_ptr_array_index (array, i);
 			object = G_OBJECT (_nm_object_cache_get (path));
-			if (object)
-				g_ptr_array_add (temp, object);
-			else {
+			if (object) {
+				g_ptr_array_add (temp, g_object_ref (object));
+			} else {
 				object = (*func) (connection, path);
 				if (object)
 					g_ptr_array_add (temp, object);
@@ -306,7 +306,7 @@ nm_ip6_address_object_array_get_type (void)
 	static GType our_type = 0;
 
 	if (our_type == 0)
-		our_type = g_boxed_type_register_static (g_intern_static_string ("NMIP6AddressObjectArray"),
+		our_type = g_boxed_type_register_static (g_intern_static_string ("nm-ip6-address-object-array"),
 		                                         (GBoxedCopyFunc) nm_ip6_address_object_array_copy,
 		                                         (GBoxedFreeFunc) nm_ip6_address_object_array_free);
 	return our_type;
@@ -348,7 +348,7 @@ nm_ip6_address_array_get_type (void)
 	static GType our_type = 0;
 
 	if (our_type == 0)
-		our_type = g_boxed_type_register_static (g_intern_static_string ("NMIP6AddressArray"),
+		our_type = g_boxed_type_register_static (g_intern_static_string ("nm-ip6-address-array"),
 		                                         (GBoxedCopyFunc) nm_ip6_address_array_copy,
 		                                         (GBoxedFreeFunc) nm_ip6_address_array_free);
 	return our_type;
@@ -415,7 +415,7 @@ nm_ip6_route_object_array_get_type (void)
 	static GType our_type = 0;
 
 	if (our_type == 0)
-		our_type = g_boxed_type_register_static (g_intern_static_string ("NMIP6RouteObjectArray"),
+		our_type = g_boxed_type_register_static (g_intern_static_string ("nm-ip6-route-object-array"),
 		                                         (GBoxedCopyFunc) nm_ip6_route_object_array_copy,
 		                                         (GBoxedFreeFunc) nm_ip6_route_object_array_free);
 	return our_type;
diff --git a/libnm-glib/nm-vpn-connection.c b/libnm-glib/nm-vpn-connection.c
index dd219b2a..6910b6f6 100644
--- a/libnm-glib/nm-vpn-connection.c
+++ b/libnm-glib/nm-vpn-connection.c
@@ -18,7 +18,7 @@
  * Boston, MA 02110-1301 USA.
  *
  * Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2011 Red Hat, Inc.
+ * Copyright (C) 2007 - 2010 Red Hat, Inc.
  */
 
 #include <string.h>
@@ -60,23 +60,14 @@ enum {
 static guint signals[LAST_SIGNAL] = { 0 };
 
 
-/**
- * nm_vpn_connection_new:
- * @connection: the #DBusGConnection
- * @path: the DBus object path of the new connection
- *
- * Creates a new #NMVPNConnection.
- *
- * Returns: (transfer full): a new connection object
- **/
 GObject *
-nm_vpn_connection_new (DBusGConnection *connection, const char *path)
+nm_vpn_connection_new (DBusGConnection *dbus_connection, const char *path)
 {
-	g_return_val_if_fail (connection != NULL, NULL);
+	g_return_val_if_fail (dbus_connection != NULL, NULL);
 	g_return_val_if_fail (path != NULL, NULL);
 
 	return g_object_new (NM_TYPE_VPN_CONNECTION, 
-	                     NM_OBJECT_DBUS_CONNECTION, connection,
+	                     NM_OBJECT_DBUS_CONNECTION, dbus_connection,
 	                     NM_OBJECT_DBUS_PATH, path,
 	                     NULL);
 }
@@ -95,8 +86,7 @@ nm_vpn_connection_get_banner (NMVPNConnection *vpn)
 	if (!priv->banner) {
 		priv->banner = _nm_object_get_string_property (NM_OBJECT (vpn),
 		                                               NM_DBUS_INTERFACE_VPN_CONNECTION,
-		                                               DBUS_PROP_BANNER,
-		                                               NULL);
+		                                               DBUS_PROP_BANNER);
 		if (priv->banner && !strlen (priv->banner)) {
 			g_free (priv->banner);
 			priv->banner = NULL;
@@ -116,8 +106,7 @@ nm_vpn_connection_get_vpn_state (NMVPNConnection *vpn)
 	if (priv->vpn_state == NM_VPN_CONNECTION_STATE_UNKNOWN) {
 		priv->vpn_state = _nm_object_get_uint_property (NM_OBJECT (vpn),
 		                                                NM_DBUS_INTERFACE_VPN_CONNECTION,
-		                                                DBUS_PROP_VPN_STATE,
-		                                                NULL);
+		                                                DBUS_PROP_VPN_STATE);
 	}
 	return priv->vpn_state;
 }
@@ -186,7 +175,9 @@ finalize (GObject *object)
 {
 	NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (object);
 
-	g_free (priv->banner);
+	if (priv->banner)
+		g_free (priv->banner);
+
 	g_object_unref (priv->proxy);
 
 	G_OBJECT_CLASS (nm_vpn_connection_parent_class)->finalize (object);
diff --git a/libnm-glib/nm-vpn-connection.h b/libnm-glib/nm-vpn-connection.h
index 8541e704..e03a80c7 100644
--- a/libnm-glib/nm-vpn-connection.h
+++ b/libnm-glib/nm-vpn-connection.h
@@ -65,7 +65,7 @@ typedef struct {
 
 GType nm_vpn_connection_get_type (void);
 
-GObject * nm_vpn_connection_new (DBusGConnection *connection, const char *path);
+GObject * nm_vpn_connection_new (DBusGConnection *dbus_connection, const char *path);
 
 NMVPNConnectionState  nm_vpn_connection_get_vpn_state  (NMVPNConnection *vpn);
 const char *          nm_vpn_connection_get_banner (NMVPNConnection *vpn);
diff --git a/libnm-glib/nm-vpn-plugin-utils.c b/libnm-glib/nm-vpn-plugin-utils.c
deleted file mode 100644
index 8234a919..00000000
--- a/libnm-glib/nm-vpn-plugin-utils.c
+++ /dev/null
@@ -1,188 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/*
- * This library 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 of the License, or (at your option) any later version.
- *
- * This library 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 this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2011 Red Hat, Inc.
- */
-
-#include <errno.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-
-#include "nm-vpn-plugin-utils.h"
-#include "nm-setting-private.h"
-
-#define DATA_KEY_TAG "DATA_KEY="
-#define DATA_VAL_TAG "DATA_VAL="
-#define SECRET_KEY_TAG "SECRET_KEY="
-#define SECRET_VAL_TAG "SECRET_VAL="
-
-static void
-free_secret (gpointer data)
-{
-	char *secret = data;
-
-	memset (secret, 0, strlen (secret));
-	g_free (secret);
-}
-
-/**
- * nm_vpn_plugin_utils_read_vpn_details:
- * @fd: file descriptor to read from, usually stdin (0)
- * @out_data: (out) (transfer full): on successful return, a hash table
- * (mapping char*:char*) containing the key/value pairs of VPN data items
- * @out_secrets: (out) (transfer full): on successful return, a hash table
- * (mapping char*:char*) containing the key/value pairsof VPN secrets
- *
- * Parses key/value pairs from a file descriptor (normally stdin) passed by
- * an applet when the applet calls the authentication dialog of the VPN plugin.
- *
- * Returns: %TRUE if reading values was successful, %FALSE if not
- **/
-gboolean
-nm_vpn_plugin_utils_read_vpn_details (int fd,
-                                      GHashTable **out_data,
-                                      GHashTable **out_secrets)
-{
-	GHashTable *data, *secrets;
-	gboolean success = FALSE;
-	char *key = NULL, *val = NULL;
-	GString *line;
-	gchar c;
-
-	if (out_data)
-		g_return_val_if_fail (*out_data == NULL, FALSE);
-	if (out_secrets)
-		g_return_val_if_fail (*out_secrets == NULL, FALSE);
-
-	data = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
-	secrets = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, free_secret);
-
-	line = g_string_new (NULL);
-
-	/* Read stdin for data and secret items until we get a DONE */
-	while (1) {
-		ssize_t nr;
-		GHashTable *hash = NULL;
-
-		errno = 0;
-		nr = read (fd, &c, 1);
-		if (nr == -1) {
-			if (errno == EAGAIN) {
-				g_usleep (100);
-				continue;
-			}
-			break;
-		}
-
-		if (c != '\n') {
-			g_string_append_c (line, c);
-			continue;
-		}
-
-		/* Check for the finish marker */
-		if (strcmp (line->str, "DONE") == 0)
-			break;
-
-		/* Otherwise it's a data/secret item */
-		if (strncmp (line->str, DATA_KEY_TAG, strlen (DATA_KEY_TAG)) == 0) {
-			hash = data;
-			key = g_strdup (line->str + strlen (DATA_KEY_TAG));
-		} else if (strncmp (line->str, DATA_VAL_TAG, strlen (DATA_VAL_TAG)) == 0) {
-			hash = data;
-			val = g_strdup (line->str + strlen (DATA_VAL_TAG));
-		} else if (strncmp (line->str, SECRET_KEY_TAG, strlen (SECRET_KEY_TAG)) == 0) {
-			hash = secrets;
-			key = g_strdup (line->str + strlen (SECRET_KEY_TAG));
-		} else if (strncmp (line->str, SECRET_VAL_TAG, strlen (SECRET_VAL_TAG)) == 0) {
-			hash = secrets;
-			val = g_strdup (line->str + strlen (SECRET_VAL_TAG));
-		}
-		g_string_truncate (line, 0);
-
-		if (key && val && hash) {
-			g_hash_table_insert (hash, key, val);
-			key = NULL;
-			val = NULL;
-			success = TRUE;  /* Got at least one value */
-		}
-	}
-
-	if (success) {
-		if (out_data)
-			*out_data = data;
-		else
-			g_hash_table_destroy (data);
-
-		if (out_secrets)
-			*out_secrets = secrets;
-		else
-			g_hash_table_destroy (secrets);
-	} else {
-		g_hash_table_destroy (data);
-		g_hash_table_destroy (secrets);
-	}
-
-	g_string_free (line, TRUE);
-	return success;
-}
-
-/**
- * nm_vpn_plugin_utils_get_secret_flags:
- * @data: hash table containing VPN key/value pair data items
- * @secret_name: VPN secret key name for which to retrieve flags for
- * @out_flags: (out): on success, the flags associated with @secret_name
- *
- * Given a VPN secret key name, attempts to find the corresponding flags data
- * item in @data.  If found, converts the flags data item to
- * #NMSettingSecretFlags and returns it.
- *
- * Returns: %TRUE if the flag data item was found and successfully converted
- * to flags, %FALSE if not
- **/
-gboolean
-nm_vpn_plugin_utils_get_secret_flags (GHashTable *data,
-                                      const char *secret_name,
-                                      NMSettingSecretFlags *out_flags)
-{
-	char *flag_name;
-	const char *val;
-	unsigned long tmp;
-	gboolean success = FALSE;
-
-	g_return_val_if_fail (data != NULL, FALSE);
-	g_return_val_if_fail (secret_name != NULL, FALSE);
-	g_return_val_if_fail (out_flags != NULL, FALSE);
-	g_return_val_if_fail (*out_flags == NM_SETTING_SECRET_FLAG_NONE, FALSE);
-
-	flag_name = g_strdup_printf ("%s-flags", secret_name);
-
-	/* Try new flags value first */
-	val = g_hash_table_lookup (data, flag_name);
-	if (val) {
-		errno = 0;
-		tmp = strtoul (val, NULL, 10);
-		if (errno == 0 && tmp <= NM_SETTING_SECRET_FLAGS_ALL) {
-			*out_flags = (NMSettingSecretFlags) tmp;
-			success = TRUE;
-		}
-	}
-
-	g_free (flag_name);
-	return success;
-}
-
diff --git a/libnm-glib/nm-vpn-plugin-utils.h b/libnm-glib/nm-vpn-plugin-utils.h
deleted file mode 100644
index aab73c4e..00000000
--- a/libnm-glib/nm-vpn-plugin-utils.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/*
- * This library 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 of the License, or (at your option) any later version.
- *
- * This library 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 this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2011 Red Hat, Inc.
- */
-
-#ifndef NM_VPN_PLUGIN_UTILS_H
-#define NM_VPN_PLUGIN_UTILS_H
-
-#include <glib.h>
-#include <nm-setting.h>
-
-G_BEGIN_DECLS
-
-gboolean nm_vpn_plugin_utils_read_vpn_details (int fd,
-                                               GHashTable **out_data,
-                                               GHashTable **out_secrets);
-
-gboolean nm_vpn_plugin_utils_get_secret_flags (GHashTable *data,
-                                               const char *secret_name,
-                                               NMSettingSecretFlags *out_flags);
-
-G_END_DECLS
-
-#endif /* NM_VPN_PLUGIN_UTILS_H */
diff --git a/libnm-glib/nm-vpn-plugin.c b/libnm-glib/nm-vpn-plugin.c
index 4c3813e3..fe7a2b63 100644
--- a/libnm-glib/nm-vpn-plugin.c
+++ b/libnm-glib/nm-vpn-plugin.c
@@ -259,10 +259,10 @@ connect_timer_expired (gpointer data)
 	NMVPNPlugin *plugin = NM_VPN_PLUGIN (data);
 	GError *err = NULL;
 
-	g_message ("Connect timer expired, disconnecting.");
+	nm_info ("Connect timer expired, disconnecting.");
 	nm_vpn_plugin_disconnect (plugin, &err);
 	if (err) {
-		g_warning ("Disconnect failed: %s", err->message);
+		nm_warning ("Disconnect failed: %s", err->message);
 		g_error_free (err);
 	}
 
@@ -367,11 +367,11 @@ impl_vpn_plugin_connect (NMVPNPlugin *plugin,
 
 	connection = nm_connection_new_from_hash (properties, error);
 	if (!connection) {
-		g_warning ("%s: Invalid connection: '%s' / '%s' invalid: %d",
-		           __func__,
-		           g_type_name (nm_connection_lookup_setting_type_by_quark ((*error)->domain)),
-		           (*error)->message,
-		           (*error)->code);
+		nm_warning ("%s: Invalid connection: '%s' / '%s' invalid: %d",
+		            __func__,
+		            g_type_name (nm_connection_lookup_setting_type_by_quark ((*error)->domain)),
+		            (*error)->message,
+		            (*error)->code);
 	} else {
 		success = nm_vpn_plugin_connect (plugin, connection, error);
 		g_object_unref (connection);
@@ -558,7 +558,7 @@ constructor (GType type,
 
  err:
 	if (err) {
-		g_warning ("Failed to initialize VPN plugin: %s", err->message);
+		nm_warning ("%s", err->message);
 		g_error_free (err);
 	}
 
@@ -633,7 +633,7 @@ dispose (GObject *object)
 		nm_vpn_plugin_disconnect (plugin, &err);
 
 	if (err) {
-		g_warning ("Error disconnecting VPN connection: %s", err->message);
+		nm_warning ("%s", err->message);
 		g_error_free (err);
 	}
 
diff --git a/libnm-glib/nm-wimax-nsp.c b/libnm-glib/nm-wimax-nsp.c
deleted file mode 100644
index c33633e9..00000000
--- a/libnm-glib/nm-wimax-nsp.c
+++ /dev/null
@@ -1,366 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/*
- * libnm_glib -- Access network status & information from glib applications
- *
- * This library 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 of the License, or (at your option) any later version.
- *
- * This library 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 this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2011 Red Hat, Inc.
- */
-
-#include <config.h>
-#include <string.h>
-
-#include <nm-connection.h>
-#include <nm-setting-connection.h>
-#include <nm-setting-wimax.h>
-
-#include "nm-wimax-nsp.h"
-#include "NetworkManager.h"
-#include "nm-types-private.h"
-#include "nm-object-private.h"
-
-G_DEFINE_TYPE (NMWimaxNsp, nm_wimax_nsp, NM_TYPE_OBJECT)
-
-#define NM_WIMAX_NSP_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_WIMAX_NSP, NMWimaxNspPrivate))
-
-typedef struct {
-	gboolean disposed;
-	DBusGProxy *proxy;
-
-	char *name;
-	guint32 signal_quality;
-	NMWimaxNspNetworkType network_type;
-} NMWimaxNspPrivate;
-
-enum {
-	PROP_0,
-	PROP_NAME,
-	PROP_SIGNAL_QUALITY,
-	PROP_NETWORK_TYPE,
-
-	LAST_PROP
-};
-
-#define DBUS_PROP_NAME "Name"
-#define DBUS_PROP_SIGNAL_QUALITY "SignalQuality"
-#define DBUS_PROP_NETWORK_TYPE "NetworkType"
-
-/**
- * nm_wimax_nsp_new:
- * @connection: the #DBusGConnection
- * @path: the D-Bus object path of the WiMAX NSP
- *
- * Creates a new #NMWimaxNsp.
- *
- * Returns: (transfer full): a new WiMAX NSP
- **/
-GObject *
-nm_wimax_nsp_new (DBusGConnection *connection, const char *path)
-{
-	g_return_val_if_fail (connection != NULL, NULL);
-	g_return_val_if_fail (path != NULL, NULL);
-
-	return (GObject *) g_object_new (NM_TYPE_WIMAX_NSP,
-									 NM_OBJECT_DBUS_CONNECTION, connection,
-									 NM_OBJECT_DBUS_PATH, path,
-									 NULL);
-}
-
-/**
- * nm_wimax_nsp_get_name:
- * @nsp: a #NMWimaxNsp
- *
- * Gets the name of the wimax NSP
- *
- * Returns: the name
- **/
-const char *
-nm_wimax_nsp_get_name (NMWimaxNsp *nsp)
-{
-	NMWimaxNspPrivate *priv;
-
-	g_return_val_if_fail (NM_IS_WIMAX_NSP (nsp), NULL);
-
-	priv = NM_WIMAX_NSP_GET_PRIVATE (nsp);
-	if (!priv->name)
-		priv->name = _nm_object_get_string_property (NM_OBJECT (nsp),
-		                                             NM_DBUS_INTERFACE_WIMAX_NSP,
-		                                             DBUS_PROP_NAME,
-		                                             NULL);
-
-	return priv->name;
-}
-
-/**
- * nm_wimax_nsp_get_signal_quality:
- * @nsp: a #NMWimaxNsp
- *
- * Gets the WPA signal quality of the wimax NSP.
- *
- * Returns: the signal quality
- **/
-guint32
-nm_wimax_nsp_get_signal_quality (NMWimaxNsp *nsp)
-{
-	NMWimaxNspPrivate *priv;
-
-	g_return_val_if_fail (NM_IS_WIMAX_NSP (nsp), 0);
-
-	priv = NM_WIMAX_NSP_GET_PRIVATE (nsp);
-	if (!priv->signal_quality) {
-		priv->signal_quality = _nm_object_get_uint_property (NM_OBJECT (nsp),
-		                                                     NM_DBUS_INTERFACE_WIMAX_NSP,
-		                                                     DBUS_PROP_SIGNAL_QUALITY,
-		                                                     NULL);
-	}
-
-	return priv->signal_quality;
-}
-
-/**
- * nm_wimax_nsp_get_network_type:
- * @nsp: a #NMWimaxNsp
- *
- * Gets the network type of the wimax NSP.
- *
- * Returns: the network type
- **/
-NMWimaxNspNetworkType
-nm_wimax_nsp_get_network_type (NMWimaxNsp *nsp)
-{
-	NMWimaxNspPrivate *priv;
-
-	g_return_val_if_fail (NM_IS_WIMAX_NSP (nsp), NM_WIMAX_NSP_NETWORK_TYPE_UNKNOWN);
-
-	priv = NM_WIMAX_NSP_GET_PRIVATE (nsp);
-	if (!priv->network_type) {
-		priv->network_type = _nm_object_get_uint_property (NM_OBJECT (nsp),
-		                                                   NM_DBUS_INTERFACE_WIMAX_NSP,
-		                                                   DBUS_PROP_NETWORK_TYPE,
-		                                                   NULL);
-	}
-
-	return priv->network_type;
-}
-
-/**
- * nm_wimax_nsp_filter_connections:
- * @nsp: an #NMWimaxNsp to filter connections for
- * @connections: a list of #NMConnection objects to filter
- *
- * Filters a given list of connections for a given #NMWimaxNsp object and
- * return connections which may be activated with the access point.  Any
- * returned connections will match the @nsp's network name and other attributes.
- *
- * Returns: (transfer container) (element-type NetworkManager.Connection): a
- * list of #NMConnection objects that could be activated with the given @nsp.
- * The elements of the list are owned by their creator and should not be freed
- * by the caller, but the returned list itself is owned by the caller and should
- * be freed with g_slist_free() when it is no longer required.
- **/
-GSList *
-nm_wimax_nsp_filter_connections (NMWimaxNsp *nsp, const GSList *connections)
-{
-	GSList *filtered = NULL;
-	const GSList *iter;
-
-	for (iter = connections; iter; iter = g_slist_next (iter)) {
-		NMConnection *candidate = NM_CONNECTION (iter->data);
-		NMSettingConnection *s_con;
-		NMSettingWimax *s_wimax;
-		const char *ctype;
-		const char *nsp_name;
-		const char *setting_name;
-
-		s_con = (NMSettingConnection *) nm_connection_get_setting (candidate, NM_TYPE_SETTING_CONNECTION);
-		g_assert (s_con);
-		ctype = nm_setting_connection_get_connection_type (s_con);
-		if (strcmp (ctype, NM_SETTING_WIMAX_SETTING_NAME) != 0)
-			continue;
-
-		s_wimax = (NMSettingWimax *) nm_connection_get_setting (candidate, NM_TYPE_SETTING_WIMAX);
-		if (!s_wimax)
-			continue;
-
-		setting_name = nm_setting_wimax_get_network_name (s_wimax);
-		if (!setting_name)
-			continue;
-
-		nsp_name = nm_wimax_nsp_get_name (nsp);
-		g_warn_if_fail (nsp_name != NULL);
-		if (g_strcmp0 (nsp_name, setting_name) != 0)
-			continue;
-
-		/* Connection applies to this device */
-		filtered = g_slist_prepend (filtered, candidate);
-	}
-
-	return g_slist_reverse (filtered);
-}
-
-/************************************************************/
-
-static void
-nm_wimax_nsp_init (NMWimaxNsp *nsp)
-{
-}
-
-static void
-dispose (GObject *object)
-{
-	NMWimaxNspPrivate *priv = NM_WIMAX_NSP_GET_PRIVATE (object);
-
-	if (priv->disposed) {
-		G_OBJECT_CLASS (nm_wimax_nsp_parent_class)->dispose (object);
-		return;
-	}
-
-	priv->disposed = TRUE;
-
-	g_object_unref (priv->proxy);
-
-	G_OBJECT_CLASS (nm_wimax_nsp_parent_class)->dispose (object);
-}
-
-static void
-finalize (GObject *object)
-{
-	NMWimaxNspPrivate *priv = NM_WIMAX_NSP_GET_PRIVATE (object);
-
-	g_free (priv->name);
-
-	G_OBJECT_CLASS (nm_wimax_nsp_parent_class)->finalize (object);
-}
-
-static void
-get_property (GObject *object,
-              guint prop_id,
-              GValue *value,
-              GParamSpec *pspec)
-{
-	NMWimaxNsp *nsp = NM_WIMAX_NSP (object);
-
-	switch (prop_id) {
-	case PROP_NAME:
-		g_value_set_string (value, nm_wimax_nsp_get_name (nsp));
-		break;
-	case PROP_SIGNAL_QUALITY:
-		g_value_set_uint (value, nm_wimax_nsp_get_signal_quality (nsp));
-		break;
-	case PROP_NETWORK_TYPE:
-		g_value_set_uint (value, nm_wimax_nsp_get_network_type (nsp));
-		break;
-	default:
-		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-		break;
-	}
-}
-
-static void
-register_for_property_changed (NMWimaxNsp *nsp)
-{
-	NMWimaxNspPrivate *priv = NM_WIMAX_NSP_GET_PRIVATE (nsp);
-	const NMPropertiesChangedInfo property_changed_info[] = {
-		{ NM_WIMAX_NSP_SIGNAL_QUALITY, _nm_object_demarshal_generic, &priv->signal_quality },
-		{ NULL },
-	};
-
-	_nm_object_handle_properties_changed (NM_OBJECT (nsp),
-										  priv->proxy,
-										  property_changed_info);
-}
-
-static GObject*
-constructor (GType type,
-			 guint n_construct_params,
-			 GObjectConstructParam *construct_params)
-{
-	NMObject *object;
-	NMWimaxNspPrivate *priv;
-
-	object = (NMObject *) G_OBJECT_CLASS (nm_wimax_nsp_parent_class)->constructor (type,
-																				   n_construct_params,
-																				   construct_params);
-	if (!object)
-		return NULL;
-
-	priv = NM_WIMAX_NSP_GET_PRIVATE (object);
-
-	priv->proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (object),
-											 NM_DBUS_SERVICE,
-											 nm_object_get_path (object),
-											 NM_DBUS_INTERFACE_WIMAX_NSP);
-
-	register_for_property_changed (NM_WIMAX_NSP (object));
-
-	return G_OBJECT (object);
-}
-
-
-static void
-nm_wimax_nsp_class_init (NMWimaxNspClass *nsp_class)
-{
-	GObjectClass *object_class = G_OBJECT_CLASS (nsp_class);
-
-	g_type_class_add_private (nsp_class, sizeof (NMWimaxNspPrivate));
-
-	/* virtual methods */
-	object_class->constructor = constructor;
-	object_class->get_property = get_property;
-	object_class->dispose = dispose;
-	object_class->finalize = finalize;
-
-	/* properties */
-
-	/**
-	 * NMWimaxNsp:name:
-	 *
-	 * The name of the WiMAX NSP.
-	 **/
-	g_object_class_install_property
-		(object_class, PROP_NAME,
-		 g_param_spec_string (NM_WIMAX_NSP_NAME,
-							  "Name",
-							  "Name",
-							  NULL,
-							  G_PARAM_READABLE));
-
-	/**
-	 * NMWimaxNsp:signal-quality:
-	 *
-	 * The signal quality of the WiMAX NSP.
-	 **/
-	g_object_class_install_property
-		(object_class, PROP_SIGNAL_QUALITY,
-		 g_param_spec_uint (NM_WIMAX_NSP_SIGNAL_QUALITY,
-		                    "Signal Quality",
-		                    "Signal Quality",
-		                    0, 100, 0,
-		                    G_PARAM_READABLE));
-
-	/**
-	 * NMWimaxNsp:network-type:
-	 *
-	 * The network type of the WiMAX NSP.
-	 **/
-	g_object_class_install_property
-		(object_class, PROP_NETWORK_TYPE,
-		 g_param_spec_uint (NM_WIMAX_NSP_NETWORK_TYPE,
-		                    "Network Type",
-		                    "Network Type",
-		                    0, G_MAXUINT32, 0,
-		                    G_PARAM_READABLE));
-}
diff --git a/libnm-glib/nm-wimax-nsp.h b/libnm-glib/nm-wimax-nsp.h
deleted file mode 100644
index 07736ae4..00000000
--- a/libnm-glib/nm-wimax-nsp.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/*
- * libnm_glib -- Access network status & information from glib applications
- *
- * This library 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 of the License, or (at your option) any later version.
- *
- * This library 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 this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2011 Red Hat, Inc.
- * Copyright (C) 2009 Novell, Inc.
- */
-
-#ifndef NM_WIMAX_NSP_H
-#define NM_WIMAX_NSP_H
-
-#include <glib.h>
-#include <glib-object.h>
-#include <NetworkManager.h>
-#include "nm-object.h"
-
-G_BEGIN_DECLS
-
-#define NM_TYPE_WIMAX_NSP            (nm_wimax_nsp_get_type ())
-#define NM_WIMAX_NSP(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_WIMAX_NSP, NMWimaxNsp))
-#define NM_WIMAX_NSP_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_WIMAX_NSP, NMWimaxNspClass))
-#define NM_IS_WIMAX_NSP(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_WIMAX_NSP))
-#define NM_IS_WIMAX_NSP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NM_TYPE_WIMAX_NSP))
-#define NM_WIMAX_NSP_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_WIMAX_NSP, NMWimaxNspClass))
-
-#define NM_WIMAX_NSP_NAME           "name"
-#define NM_WIMAX_NSP_SIGNAL_QUALITY "signal-quality"
-#define NM_WIMAX_NSP_NETWORK_TYPE   "network-type"
-
-typedef enum {
-	NM_WIMAX_NSP_NETWORK_TYPE_UNKNOWN         = 0,
-	NM_WIMAX_NSP_NETWORK_TYPE_HOME            = 1,
-	NM_WIMAX_NSP_NETWORK_TYPE_PARTNER         = 2,
-	NM_WIMAX_NSP_NETWORK_TYPE_ROAMING_PARTNER = 3
-} NMWimaxNspNetworkType;
-
-typedef struct {
-	NMObject parent;
-} NMWimaxNsp;
-
-typedef struct {
-	NMObjectClass parent;
-
-	/* Padding for future expansion */
-	void (*_reserved1) (void);
-	void (*_reserved2) (void);
-	void (*_reserved3) (void);
-	void (*_reserved4) (void);
-	void (*_reserved5) (void);
-	void (*_reserved6) (void);
-} NMWimaxNspClass;
-
-GType nm_wimax_nsp_get_type (void);
-
-GObject *nm_wimax_nsp_new (DBusGConnection *connection, const char *path);
-
-const char           * nm_wimax_nsp_get_name           (NMWimaxNsp *nsp);
-guint32                nm_wimax_nsp_get_signal_quality (NMWimaxNsp *nsp);
-NMWimaxNspNetworkType  nm_wimax_nsp_get_network_type   (NMWimaxNsp *nsp);
-
-GSList *               nm_wimax_nsp_filter_connections (NMWimaxNsp *nsp,
-                                                        const GSList *connections);
-
-G_END_DECLS
-
-#endif /* NM_WIMAX_NSP_H */
diff --git a/libnm-glib/tests/Makefile.am b/libnm-glib/tests/Makefile.am
deleted file mode 100644
index 06aee712..00000000
--- a/libnm-glib/tests/Makefile.am
+++ /dev/null
@@ -1,35 +0,0 @@
-INCLUDES = \
-	-I$(top_srcdir)/include \
-	-I$(top_srcdir)/libnm-util \
-	-I$(top_srcdir)/libnm-glib
-
-noinst_PROGRAMS = test-remote-settings-client
-
-####### remote settings client test #######
-
-test_remote_settings_client_SOURCES = \
-	test-remote-settings-client.c
-
-test_remote_settings_client_CPPFLAGS = \
-	$(GLIB_CFLAGS) \
-	$(DBUS_CFLAGS)
-
-test_remote_settings_client_LDADD = \
-	$(top_builddir)/libnm-util/libnm-util.la \
-	$(top_builddir)/libnm-glib/libnm-glib-test.la \
-	$(GLIB_LIBS) \
-	$(DBUS_LIBS)
-
-###########################################
-
-TEST_RSS_BIN = test-remote-settings-service.py
-
-EXTRA_DIST = $(TEST_RSS_BIN)
-
-if WITH_TESTS
-
-check-local: test-remote-settings-client
-	$(abs_builddir)/test-remote-settings-client $(abs_srcdir) $(TEST_RSS_BIN)
-
-endif
-
diff --git a/libnm-glib/tests/Makefile.in b/libnm-glib/tests/Makefile.in
deleted file mode 100644
index 96c0a3cd..00000000
--- a/libnm-glib/tests/Makefile.in
+++ /dev/null
@@ -1,634 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-noinst_PROGRAMS = test-remote-settings-client$(EXEEXT)
-subdir = libnm-glib/tests
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gtk-doc.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/introspection.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libnl-check.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-PROGRAMS = $(noinst_PROGRAMS)
-am_test_remote_settings_client_OBJECTS = test_remote_settings_client-test-remote-settings-client.$(OBJEXT)
-test_remote_settings_client_OBJECTS =  \
-	$(am_test_remote_settings_client_OBJECTS)
-am__DEPENDENCIES_1 =
-test_remote_settings_client_DEPENDENCIES =  \
-	$(top_builddir)/libnm-util/libnm-util.la \
-	$(top_builddir)/libnm-glib/libnm-glib-test.la \
-	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
-am__v_lt_0 = --silent
-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
-depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
-	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
-	$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
-am__v_CC_0 = @echo "  CC    " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
-am__v_at_0 = @
-CCLD = $(CC)
-LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
-am__v_CCLD_0 = @echo "  CCLD  " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
-am__v_GEN_0 = @echo "  GEN   " $@;
-SOURCES = $(test_remote_settings_client_SOURCES)
-DIST_SOURCES = $(test_remote_settings_client_SOURCES)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DBUS_CFLAGS = @DBUS_CFLAGS@
-DBUS_LIBS = @DBUS_LIBS@
-DBUS_SYS_DIR = @DBUS_SYS_DIR@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DHCLIENT_PATH = @DHCLIENT_PATH@
-DHCLIENT_VERSION = @DHCLIENT_VERSION@
-DHCPCD_PATH = @DHCPCD_PATH@
-DISABLE_DEPRECATED = @DISABLE_DEPRECATED@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GMODULE_CFLAGS = @GMODULE_CFLAGS@
-GMODULE_LIBS = @GMODULE_LIBS@
-GMSGFMT = @GMSGFMT@
-GMSGFMT_015 = @GMSGFMT_015@
-GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
-GNUTLS_LIBS = @GNUTLS_LIBS@
-GREP = @GREP@
-GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_MKPDF = @GTKDOC_MKPDF@
-GTKDOC_REBASE = @GTKDOC_REBASE@
-GUDEV_CFLAGS = @GUDEV_CFLAGS@
-GUDEV_LIBS = @GUDEV_LIBS@
-HTML_DIR = @HTML_DIR@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
-INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
-INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
-INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
-INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
-INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
-INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
-INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
-INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
-IPTABLES_PATH = @IPTABLES_PATH@
-IWMX_SDK_CFLAGS = @IWMX_SDK_CFLAGS@
-IWMX_SDK_LIBS = @IWMX_SDK_LIBS@
-KERNEL_FIRMWARE_DIR = @KERNEL_FIRMWARE_DIR@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBDL = @LIBDL@
-LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
-LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
-LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
-LIBICONV = @LIBICONV@
-LIBINTL = @LIBINTL@
-LIBM = @LIBM@
-LIBNL_CFLAGS = @LIBNL_CFLAGS@
-LIBNL_LIBS = @LIBNL_LIBS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBICONV = @LTLIBICONV@
-LTLIBINTL = @LTLIBINTL@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-MSGFMT = @MSGFMT@
-MSGFMT_015 = @MSGFMT_015@
-MSGMERGE = @MSGMERGE@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
-NM_MICRO_VERSION = @NM_MICRO_VERSION@
-NM_MINOR_VERSION = @NM_MINOR_VERSION@
-NM_VERSION = @NM_VERSION@
-NSS_CFLAGS = @NSS_CFLAGS@
-NSS_LIBS = @NSS_LIBS@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKGCONFIG_PATH = @PKGCONFIG_PATH@
-PKG_CONFIG = @PKG_CONFIG@
-PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
-PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
-POLKIT_CFLAGS = @POLKIT_CFLAGS@
-POLKIT_LIBS = @POLKIT_LIBS@
-POSUB = @POSUB@
-PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@
-RANLIB = @RANLIB@
-RESOLVCONF_PATH = @RESOLVCONF_PATH@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-SYSTEM_CA_PATH = @SYSTEM_CA_PATH@
-UDEV_BASE_DIR = @UDEV_BASE_DIR@
-USE_NLS = @USE_NLS@
-UUID_CFLAGS = @UUID_CFLAGS@
-UUID_LIBS = @UUID_LIBS@
-VERSION = @VERSION@
-XGETTEXT = @XGETTEXT@
-XGETTEXT_015 = @XGETTEXT_015@
-XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-systemdsystemunitdir = @systemdsystemunitdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-INCLUDES = \
-	-I$(top_srcdir)/include \
-	-I$(top_srcdir)/libnm-util \
-	-I$(top_srcdir)/libnm-glib
-
-
-####### remote settings client test #######
-test_remote_settings_client_SOURCES = \
-	test-remote-settings-client.c
-
-test_remote_settings_client_CPPFLAGS = \
-	$(GLIB_CFLAGS) \
-	$(DBUS_CFLAGS)
-
-test_remote_settings_client_LDADD = \
-	$(top_builddir)/libnm-util/libnm-util.la \
-	$(top_builddir)/libnm-glib/libnm-glib-test.la \
-	$(GLIB_LIBS) \
-	$(DBUS_LIBS)
-
-
-###########################################
-TEST_RSS_BIN = test-remote-settings-service.py
-EXTRA_DIST = $(TEST_RSS_BIN)
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu libnm-glib/tests/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu libnm-glib/tests/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstPROGRAMS:
-	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
-	echo " rm -f" $$list; \
-	rm -f $$list || exit $$?; \
-	test -n "$(EXEEXT)" || exit 0; \
-	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
-	echo " rm -f" $$list; \
-	rm -f $$list
-test-remote-settings-client$(EXEEXT): $(test_remote_settings_client_OBJECTS) $(test_remote_settings_client_DEPENDENCIES) 
-	@rm -f test-remote-settings-client$(EXEEXT)
-	$(AM_V_CCLD)$(LINK) $(test_remote_settings_client_OBJECTS) $(test_remote_settings_client_LDADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_remote_settings_client-test-remote-settings-client.Po@am__quote@
-
-.c.o:
-@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
-@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
-@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
-@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(COMPILE) -c -o $@ $<
-
-.c.obj:
-@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
-@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
-@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
-@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-
-.c.lo:
-@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
-@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
-@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Plo
-@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-test_remote_settings_client-test-remote-settings-client.o: test-remote-settings-client.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_remote_settings_client_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_remote_settings_client-test-remote-settings-client.o -MD -MP -MF $(DEPDIR)/test_remote_settings_client-test-remote-settings-client.Tpo -c -o test_remote_settings_client-test-remote-settings-client.o `test -f 'test-remote-settings-client.c' || echo '$(srcdir)/'`test-remote-settings-client.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_remote_settings_client-test-remote-settings-client.Tpo $(DEPDIR)/test_remote_settings_client-test-remote-settings-client.Po
-@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='test-remote-settings-client.c' object='test_remote_settings_client-test-remote-settings-client.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_remote_settings_client_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_remote_settings_client-test-remote-settings-client.o `test -f 'test-remote-settings-client.c' || echo '$(srcdir)/'`test-remote-settings-client.c
-
-test_remote_settings_client-test-remote-settings-client.obj: test-remote-settings-client.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_remote_settings_client_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_remote_settings_client-test-remote-settings-client.obj -MD -MP -MF $(DEPDIR)/test_remote_settings_client-test-remote-settings-client.Tpo -c -o test_remote_settings_client-test-remote-settings-client.obj `if test -f 'test-remote-settings-client.c'; then $(CYGPATH_W) 'test-remote-settings-client.c'; else $(CYGPATH_W) '$(srcdir)/test-remote-settings-client.c'; fi`
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_remote_settings_client-test-remote-settings-client.Tpo $(DEPDIR)/test_remote_settings_client-test-remote-settings-client.Po
-@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='test-remote-settings-client.c' object='test_remote_settings_client-test-remote-settings-client.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_remote_settings_client_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_remote_settings_client-test-remote-settings-client.obj `if test -f 'test-remote-settings-client.c'; then $(CYGPATH_W) 'test-remote-settings-client.c'; else $(CYGPATH_W) '$(srcdir)/test-remote-settings-client.c'; fi`
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-@WITH_TESTS_FALSE@check-local:
-check-am: all-am
-	$(MAKE) $(AM_MAKEFLAGS) check-local
-check: check-am
-all-am: Makefile $(PROGRAMS)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: check-am install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am check-local clean \
-	clean-generic clean-libtool clean-noinstPROGRAMS ctags \
-	distclean distclean-compile distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags uninstall uninstall-am
-
-
-@WITH_TESTS_TRUE@check-local: test-remote-settings-client
-@WITH_TESTS_TRUE@	$(abs_builddir)/test-remote-settings-client $(abs_srcdir) $(TEST_RSS_BIN)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/libnm-glib/tests/test-remote-settings-client.c b/libnm-glib/tests/test-remote-settings-client.c
deleted file mode 100644
index ad62075d..00000000
--- a/libnm-glib/tests/test-remote-settings-client.c
+++ /dev/null
@@ -1,406 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2010 - 2011 Red Hat, Inc.
- *
- */
-
-#include <dbus/dbus.h>
-#include <dbus/dbus-glib.h>
-#include <dbus/dbus-glib-lowlevel.h>
-#include <glib.h>
-#include <string.h>
-#include <sys/types.h>
-#include <signal.h>
-
-#include <NetworkManager.h>
-
-#include <nm-setting-connection.h>
-#include <nm-setting-wired.h>
-#include <nm-utils.h>
-
-#include "nm-remote-settings.h"
-
-static GPid spid = 0;
-static NMRemoteSettings *settings = NULL;
-DBusGConnection *bus = NULL;
-NMRemoteConnection *remote = NULL;
-
-/*******************************************************************/
-
-static void
-cleanup (void)
-{
-	if (settings)
-		g_object_unref (settings);
-	kill (spid, SIGTERM);
-}
-
-#define test_assert(condition) \
-do { \
-	if (!G_LIKELY (condition)) \
-		cleanup (); \
-	g_assert (condition); \
-} while (0)
-
-/*******************************************************************/
-
-static void
-add_cb (NMRemoteSettings *s,
-        NMRemoteConnection *connection,
-        GError *error,
-        gpointer user_data)
-{
-	if (error)
-		g_warning ("Add error: %s", error->message);
-
-	*((gboolean *) user_data) = TRUE;
-	remote = connection;
-}
-
-#define TEST_CON_ID "blahblahblah"
-
-static void
-test_add_connection (void)
-{
-	NMConnection *connection;
-	NMSettingConnection *s_con;
-	NMSettingWired *s_wired;
-	char *uuid;
-	gboolean success;
-	time_t start, now;
-	gboolean done = FALSE;
-
-	connection = nm_connection_new ();
-
-	s_con = (NMSettingConnection *) nm_setting_connection_new ();
-	uuid = nm_utils_uuid_generate ();
-	g_object_set (G_OBJECT (s_con),
-	              NM_SETTING_CONNECTION_ID, TEST_CON_ID,
-	              NM_SETTING_CONNECTION_UUID, uuid,
-	              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
-	              NULL);
-	g_free (uuid);
-	nm_connection_add_setting (connection, NM_SETTING (s_con));
-
-	s_wired = (NMSettingWired *) nm_setting_wired_new ();
-	nm_connection_add_setting (connection, NM_SETTING (s_wired));
-
-	success = nm_remote_settings_add_connection (settings,
-	                                             connection,
-	                                             add_cb,
-	                                             &done);
-	test_assert (success == TRUE);
-
-	start = time (NULL);
-	do {
-		now = time (NULL);
-		g_main_context_iteration (NULL, FALSE);
-	} while ((done == FALSE) && (now - start < 5));
-	test_assert (done == TRUE);
-	test_assert (remote != NULL);
-
-	/* Make sure the connection is the same as what we added */
-	test_assert (nm_connection_compare (connection,
-	                                    NM_CONNECTION (remote),
-	                                    NM_SETTING_COMPARE_FLAG_EXACT) == TRUE);
-}
-
-/*******************************************************************/
-
-static void
-set_visible_cb (DBusGProxy *proxy,
-                DBusGProxyCall *call,
-                gpointer user_data)
-{
-	GError *error = NULL;
-	gboolean success;
-
-	success = dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID);
-	if (!success)
-		g_warning ("Failed to change connection visibility: %s", error->message);
-	test_assert (success == TRUE);
-	test_assert (error == NULL);
-}
-
-static void
-invis_removed_cb (NMRemoteConnection *connection, gboolean *done)
-{
-	*done = TRUE;
-}
-
-static void
-invis_has_settings_cb (NMSetting *setting,
-                       const char *key,
-                       const GValue *value,
-                       GParamFlags flags,
-                       gpointer user_data)
-{
-	*((gboolean *) user_data) = TRUE;
-}
-
-static void
-test_make_invisible (void)
-{
-	time_t start, now;
-	GSList *list, *iter;
-	DBusGProxy *proxy;
-	gboolean done = FALSE, has_settings = FALSE;
-	char *path;
-
-	test_assert (remote != NULL);
-
-	/* Listen for the remove event when the connection becomes invisible */
-	g_signal_connect (remote, "removed", G_CALLBACK (invis_removed_cb), &done);
-
-	path = g_strdup (nm_connection_get_path (NM_CONNECTION (remote)));
-	proxy = dbus_g_proxy_new_for_name (bus,
-	                                   NM_DBUS_SERVICE,
-	                                   path,
-	                                   NM_DBUS_IFACE_SETTINGS_CONNECTION);
-	test_assert (proxy != NULL);
-
-	/* Bypass the NMRemoteSettings object so we can test it independently */
-	dbus_g_proxy_begin_call (proxy, "SetVisible", set_visible_cb, NULL, NULL,
-	                         G_TYPE_BOOLEAN, FALSE, G_TYPE_INVALID);
-
-	/* Wait for the connection to be removed */
-	start = time (NULL);
-	do {
-		now = time (NULL);
-		g_main_context_iteration (NULL, FALSE);
-	} while ((done == FALSE) && (now - start < 5));
-	test_assert (done == TRUE);
-
-	/* Ensure NMRemoteSettings no longer has the connection */
-	list = nm_remote_settings_list_connections (settings);
-	for (iter = list; iter; iter = g_slist_next (iter)) {
-		NMConnection *candidate = NM_CONNECTION (iter->data);
-
-		test_assert ((gpointer) remote != (gpointer) candidate);
-		test_assert (strcmp (path, nm_connection_get_path (candidate)) != 0);
-	}
-
-	/* And ensure the invisible connection no longer has any settings */
-	nm_connection_for_each_setting_value (NM_CONNECTION (remote),
-	                                      invis_has_settings_cb,
-	                                      &has_settings);
-	test_assert (has_settings == FALSE);
-
-	g_free (path);
-	g_object_unref (proxy);
-}
-
-/*******************************************************************/
-
-static void
-vis_new_connection_cb (NMRemoteSettings *foo,
-                       NMRemoteConnection *connection,
-                       NMRemoteConnection **new)
-{
-	*new = connection;
-}
-
-static void
-test_make_visible (void)
-{
-	time_t start, now;
-	GSList *list, *iter;
-	DBusGProxy *proxy;
-	gboolean found = FALSE;
-	char *path;
-	NMRemoteConnection *new = NULL;
-
-	test_assert (remote != NULL);
-
-	/* Wait for the new-connection signal when the connection is visible again */
-	g_signal_connect (settings, NM_REMOTE_SETTINGS_NEW_CONNECTION,
-	                  G_CALLBACK (vis_new_connection_cb), &new);
-
-	path = g_strdup (nm_connection_get_path (NM_CONNECTION (remote)));
-	proxy = dbus_g_proxy_new_for_name (bus,
-	                                   NM_DBUS_SERVICE,
-	                                   path,
-	                                   NM_DBUS_IFACE_SETTINGS_CONNECTION);
-	test_assert (proxy != NULL);
-
-	/* Bypass the NMRemoteSettings object so we can test it independently */
-	dbus_g_proxy_begin_call (proxy, "SetVisible", set_visible_cb, NULL, NULL,
-	                         G_TYPE_BOOLEAN, TRUE, G_TYPE_INVALID);
-
-
-	/* Wait for the settings service to announce the connection again */
-	start = time (NULL);
-	do {
-		now = time (NULL);
-		g_main_context_iteration (NULL, FALSE);
-	} while ((new == NULL) && (now - start < 5));
-
-	/* Ensure the new connection is the same as the one we made visible again */
-	test_assert (new == remote);
-
-	/* Ensure NMRemoteSettings has the connection */
-	list = nm_remote_settings_list_connections (settings);
-	for (iter = list; iter; iter = g_slist_next (iter)) {
-		NMConnection *candidate = NM_CONNECTION (iter->data);
-
-		if ((gpointer) remote == (gpointer) candidate) {
-			test_assert (strcmp (path, nm_connection_get_path (candidate)) == 0);
-			test_assert (strcmp (TEST_CON_ID, nm_connection_get_id (candidate)) == 0);
-			found = TRUE;
-			break;
-		}
-	}
-	test_assert (found == TRUE);
-
-	g_free (path);
-	g_object_unref (proxy);
-}
-
-/*******************************************************************/
-
-static void
-deleted_cb (DBusGProxy *proxy,
-            DBusGProxyCall *call,
-            gpointer user_data)
-{
-	GError *error = NULL;
-	gboolean success;
-
-	success = dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID);
-	if (!success)
-		g_warning ("Failed to delete connection: %s", error->message);
-	test_assert (success == TRUE);
-	test_assert (error == NULL);
-}
-
-static void
-removed_cb (NMRemoteConnection *connection, gboolean *done)
-{
-	*done = TRUE;
-}
-
-static void
-test_remove_connection (void)
-{
-	NMRemoteConnection *connection;
-	time_t start, now;
-	GSList *list, *iter;
-	DBusGProxy *proxy;
-	gboolean done = FALSE;
-	char *path;
-
-	/* Find a connection to delete */
-	list = nm_remote_settings_list_connections (settings);
-	test_assert (g_slist_length (list) > 0);
-
-	connection = NM_REMOTE_CONNECTION (list->data);
-	path = g_strdup (nm_connection_get_path (NM_CONNECTION (connection)));
-	g_signal_connect (connection, "removed", G_CALLBACK (removed_cb), &done);
-
-	proxy = dbus_g_proxy_new_for_name (bus,
-	                                   NM_DBUS_SERVICE,
-	                                   path,
-	                                   NM_DBUS_IFACE_SETTINGS_CONNECTION);
-	test_assert (proxy != NULL);
-
-	/* Bypass the NMRemoteSettings object so we can test it independently */
-	dbus_g_proxy_begin_call (proxy, "Delete", deleted_cb, NULL, NULL, G_TYPE_INVALID);
-
-	start = time (NULL);
-	do {
-		now = time (NULL);
-		g_main_context_iteration (NULL, FALSE);
-	} while ((done == FALSE) && (now - start < 5));
-	test_assert (done == TRUE);
-
-	/* Ensure NMRemoteSettings no longer has the connection */
-	list = nm_remote_settings_list_connections (settings);
-	for (iter = list; iter; iter = g_slist_next (iter)) {
-		NMConnection *candidate = NM_CONNECTION (iter->data);
-
-		test_assert ((gpointer) connection != (gpointer) candidate);
-		test_assert (strcmp (path, nm_connection_get_path (candidate)) != 0);
-	}
-
-	g_free (path);
-	g_object_unref (proxy);
-}
-
-/*******************************************************************/
-
-#if GLIB_CHECK_VERSION(2,25,12)
-typedef GTestFixtureFunc TCFunc;
-#else
-typedef void (*TCFunc)(void);
-#endif
-
-#define TESTCASE(t, d) g_test_create_case (#t, 0, d, NULL, (TCFunc) t, NULL)
-
-int main (int argc, char **argv)
-{
-	GTestSuite *suite;
-    char *service_argv[3] = { NULL, NULL, NULL };
-	int ret;
-	GError *error = NULL;
-	int i = 100;
-
-	g_assert (argc == 3);
-
-	g_type_init ();
-	
-	g_test_init (&argc, &argv, NULL);
-
-	bus = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
-	if (!bus) {
-		g_warning ("Error connecting to D-Bus: %s", error->message);
-		g_assert (error == NULL);
-	}
-
-	service_argv[0] = g_strdup_printf ("%s/%s", argv[1], argv[2]);
-	if (!g_spawn_async (argv[1], service_argv, NULL, 0, NULL, NULL, &spid, &error)) {
-		g_warning ("Error spawning %s: %s", argv[2], error->message);
-		g_assert (error == NULL);
-	}
-
-	/* Wait until the service is registered on the bus */
-	while (i > 0) {
-		g_usleep (G_USEC_PER_SEC / 50);
-		if (dbus_bus_name_has_owner (dbus_g_connection_get_connection (bus),
-		                             "org.freedesktop.NetworkManager",
-		                             NULL))
-			break;
-		i--;
-	}
-	test_assert (i > 0);
-
-	settings = nm_remote_settings_new (bus);
-	test_assert (settings != NULL);
-
-	suite = g_test_get_root ();
-
-	g_test_suite_add (suite, TESTCASE (test_add_connection, NULL));
-	g_test_suite_add (suite, TESTCASE (test_make_invisible, NULL));
-	g_test_suite_add (suite, TESTCASE (test_make_visible, NULL));
-	g_test_suite_add (suite, TESTCASE (test_remove_connection, NULL));
-
-	ret = g_test_run ();
-
-	cleanup ();
-
-	return ret;
-}
-
diff --git a/libnm-glib/tests/test-remote-settings-service.py b/libnm-glib/tests/test-remote-settings-service.py
deleted file mode 100755
index 86542005..00000000
--- a/libnm-glib/tests/test-remote-settings-service.py
+++ /dev/null
@@ -1,131 +0,0 @@
-#!/usr/bin/env python
-# -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
-
-import glib
-import gobject
-import sys
-import dbus
-import dbus.service
-import dbus.mainloop.glib
-
-IFACE_SETTINGS = 'org.freedesktop.NetworkManager.Settings'
-IFACE_CONNECTION = 'org.freedesktop.NetworkManager.Settings.Connection'
-IFACE_DBUS = 'org.freedesktop.DBus'
-
-class UnknownInterfaceException(dbus.DBusException):
-    _dbus_error_name = IFACE_DBUS + '.UnknownInterface'
-
-class UnknownPropertyException(dbus.DBusException):
-    _dbus_error_name = IFACE_DBUS + '.UnknownProperty'
-
-class PermissionDeniedException(dbus.DBusException):
-    _dbus_error_name = IFACE_SETTINGS + '.PermissionDenied'
-
-mainloop = gobject.MainLoop()
-
-class Connection(dbus.service.Object):
-    def __init__(self, bus, object_path, settings, remove_func):
-        dbus.service.Object.__init__(self, bus, object_path)
-        self.path = object_path
-        self.settings = settings
-        self.remove_func = remove_func
-        self.visible = True
-
-    @dbus.service.method(dbus_interface=IFACE_CONNECTION, in_signature='', out_signature='a{sa{sv}}')
-    def GetSettings(self):
-        if not self.visible:
-            raise PermissionDeniedException()
-        return self.settings
-
-    @dbus.service.method(dbus_interface=IFACE_CONNECTION, in_signature='b', out_signature='')
-    def SetVisible(self, vis):
-        self.visible = vis
-        self.Updated()
-
-    @dbus.service.method(dbus_interface=IFACE_CONNECTION, in_signature='', out_signature='')
-    def Delete(self):
-        self.remove_func(self)
-        self.Removed()
-
-    @dbus.service.signal(IFACE_CONNECTION, signature='')
-    def Removed(self):
-        pass
-
-    @dbus.service.signal(IFACE_CONNECTION, signature='')
-    def Updated(self):
-        pass
-
-class Settings(dbus.service.Object):
-    def __init__(self, bus, object_path):
-        dbus.service.Object.__init__(self, bus, object_path)
-        self.connections = {}
-        self.bus = bus
-        self.counter = 1
-        self.props = {}
-        self.props['Hostname'] = "foobar.baz"
-        self.props['CanModify'] = True
-
-    @dbus.service.method(dbus_interface=IFACE_SETTINGS, in_signature='', out_signature='ao')
-    def ListConnections(self):
-        connections = []
-        return self.connections.keys()
-
-    @dbus.service.method(dbus_interface=IFACE_SETTINGS, in_signature='a{sa{sv}}', out_signature='o')
-    def AddConnection(self, settings):
-        path = "/org/freedesktop/NetworkManager/Settings/Connection/%d" % self.counter
-        self.counter = self.counter + 1
-        self.connections[path] = Connection(self.bus, path, settings, self.delete_connection)
-        print "Added connection %s" % path
-        return path
-
-    def delete_connection(self, connection):
-        del self.connections[connection.path]
-
-    @dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE, in_signature='s', out_signature='a{sv}')
-    def GetAll(self, iface):
-        if iface != IFACE_SETTINGS:
-            raise UnknownInterfaceException()
-        return self.props
-
-    @dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE, in_signature='ss', out_signature='v')
-    def Get(self, iface, name):
-        if iface != IFACE_SETTINGS:
-            raise UnknownInterfaceException()
-        if not name in self.props.keys():
-            raise UnknownPropertyException()
-        return self.props[name]
-
-    @dbus.service.signal(IFACE_SETTINGS, signature='o')
-    def NewConnection(self, path):
-        pass
-
-    @dbus.service.method(IFACE_SETTINGS, in_signature='', out_signature='')
-    def Quit(self):
-        mainloop.quit()
-
-def quit_cb(user_data):
-    mainloop.quit()
-
-def main():
-    dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
-
-    bus = dbus.SessionBus()
-    obj = Settings(bus, "/org/freedesktop/NetworkManager/Settings")
-    if not bus.request_name("org.freedesktop.NetworkManager"):
-        sys.exit(1)
-
-    print "Service started"
-
-    gobject.timeout_add_seconds(20, quit_cb, None)
-
-    try:
-        mainloop.run()
-    except Exception, e:
-        pass
-
-    print "Service stopped"
-    sys.exit(0)
-
-if __name__ == '__main__':
-    main()
-