about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--Makefile.in8
-rw-r--r--NEWS118
-rw-r--r--TODO120
-rw-r--r--callouts/Makefile.in8
-rw-r--r--callouts/tests/Makefile.in8
-rw-r--r--cli/Makefile.in8
-rw-r--r--cli/src/Makefile.in8
-rw-r--r--cli/src/connections.c107
-rw-r--r--cli/src/devices.c67
-rw-r--r--cli/src/network-manager.c9
-rw-r--r--cli/src/settings.c221
-rw-r--r--cli/src/utils.c3
-rw-r--r--config.h.in12
-rwxr-xr-xconfigure365
-rw-r--r--configure.ac52
-rw-r--r--data/Makefile.in8
-rw-r--r--docs/Makefile.in8
-rw-r--r--docs/api/Makefile.in8
-rw-r--r--docs/api/html/NetworkManager.devhelp28
-rw-r--r--docs/api/html/NetworkManager.devhelp228
-rw-r--r--docs/api/html/index.html32
-rw-r--r--docs/api/html/ix01.html2
-rw-r--r--docs/api/html/ref-migrating.html58
-rw-r--r--docs/api/html/ref-settings.html36
-rw-r--r--docs/api/html/spec.html132
-rw-r--r--docs/api/spec.html132
-rw-r--r--docs/api/version.xml2
-rw-r--r--docs/libnm-glib/Makefile.am2
-rw-r--r--docs/libnm-glib/Makefile.in10
-rw-r--r--docs/libnm-glib/html/NMDevice.html5
-rw-r--r--docs/libnm-glib/html/NMRemoteConnection.html12
-rw-r--r--docs/libnm-glib/html/NMRemoteSettings.html7
-rw-r--r--docs/libnm-glib/html/NMSecretAgent.html36
-rw-r--r--docs/libnm-glib/html/ch02.html2
-rw-r--r--docs/libnm-glib/html/index.html2
-rw-r--r--docs/libnm-util/Makefile.in8
-rw-r--r--docs/libnm-util/html/NMConnection.html93
-rw-r--r--docs/libnm-util/html/NMSetting.html85
-rw-r--r--docs/libnm-util/html/api-index-full.html431
-rw-r--r--docs/libnm-util/html/ch01.html2
-rw-r--r--docs/libnm-util/html/index.sgml5
-rw-r--r--docs/libnm-util/html/libnm-util-nm-utils.html12
-rw-r--r--docs/libnm-util/html/libnm-util.devhelp5
-rw-r--r--docs/libnm-util/html/libnm-util.devhelp25
-rw-r--r--docs/libnm-util/libnm-util-sections.txt4
-rw-r--r--examples/C/Makefile.in8
-rw-r--r--examples/C/glib/Makefile.in8
-rw-r--r--examples/C/qt/Makefile.in8
-rw-r--r--examples/C/qt/add-connection-wired.cpp2
-rw-r--r--examples/Makefile.in8
-rw-r--r--examples/python/Makefile.am5
-rw-r--r--examples/python/Makefile.in11
-rw-r--r--include/Makefile.in8
-rw-r--r--include/nm-glib-compat.h15
-rw-r--r--include/nm-version.h2
-rw-r--r--include/wireless-helper.h2
-rw-r--r--initscript/Arch/Makefile.in8
-rw-r--r--initscript/Debian/Makefile.in8
-rw-r--r--initscript/Gentoo/Makefile.in8
-rw-r--r--initscript/Makefile.in8
-rw-r--r--initscript/Mandriva/Makefile.in8
-rw-r--r--initscript/RedHat/Makefile.in8
-rw-r--r--initscript/SUSE/Makefile.in8
-rw-r--r--initscript/Slackware/Makefile.in8
-rw-r--r--initscript/linexa/Makefile.in8
-rw-r--r--initscript/paldo/Makefile.in8
-rw-r--r--introspection/Makefile.in8
-rw-r--r--introspection/all.xml.in1
-rw-r--r--libnm-glib/Makefile.in8
-rw-r--r--libnm-glib/nm-device.c5
-rw-r--r--libnm-glib/nm-object.c25
-rw-r--r--libnm-glib/nm-remote-connection.c15
-rw-r--r--libnm-glib/nm-remote-settings.c10
-rw-r--r--libnm-glib/nm-secret-agent.c18
-rw-r--r--libnm-glib/nm-secret-agent.h18
-rw-r--r--libnm-glib/tests/Makefile.in8
-rw-r--r--libnm-util/Makefile.am2
-rw-r--r--libnm-util/Makefile.in10
-rw-r--r--libnm-util/libnm-util.ver3
-rw-r--r--libnm-util/nm-connection.c90
-rw-r--r--libnm-util/nm-connection.h6
-rw-r--r--libnm-util/nm-param-spec-specialized.c7
-rw-r--r--libnm-util/nm-setting-gsm.c2
-rw-r--r--libnm-util/nm-setting-serial.c5
-rw-r--r--libnm-util/nm-setting-vpn.c25
-rw-r--r--libnm-util/nm-setting.c59
-rw-r--r--libnm-util/nm-setting.h26
-rw-r--r--libnm-util/nm-utils.c10
-rw-r--r--libnm-util/tests/Makefile.in8
-rw-r--r--libnm-util/tests/certs/Makefile.in8
-rw-r--r--man/Makefile.in8
-rw-r--r--man/nmcli.126
-rw-r--r--man/nmcli.1.in26
-rw-r--r--marshallers/Makefile.in8
-rw-r--r--po/de.po340
-rw-r--r--po/es.po601
-rw-r--r--po/fi.po1885
-rw-r--r--po/gl.po1666
-rw-r--r--po/hr.po2264
-rw-r--r--po/pl.po918
-rw-r--r--po/sl.po1567
-rw-r--r--policy/Makefile.in8
-rw-r--r--policy/org.freedesktop.NetworkManager.policy24
-rw-r--r--src/Makefile.am6
-rw-r--r--src/Makefile.in68
-rw-r--r--src/NetworkManagerUtils.c4
-rw-r--r--src/backends/Makefile.in8
-rw-r--r--src/backends/NetworkManagerGeneric.c16
-rw-r--r--src/bluez-manager/Makefile.in8
-rw-r--r--src/dhcp-manager/Makefile.in8
-rw-r--r--src/dhcp-manager/nm-dhcp-client.c2
-rw-r--r--src/dhcp-manager/tests/Makefile.in8
-rw-r--r--src/dns-manager/Makefile.in8
-rw-r--r--src/dns-manager/nm-dns-bind.c3
-rw-r--r--src/dns-manager/nm-dns-dnsmasq.c73
-rw-r--r--src/dns-manager/nm-dns-manager.c3
-rw-r--r--src/dns-manager/nm-dns-plugin.c6
-rw-r--r--src/dns-manager/nm-dns-plugin.h6
-rw-r--r--src/dnsmasq-manager/Makefile.in8
-rw-r--r--src/ip6-manager/Makefile.in8
-rw-r--r--src/ip6-manager/nm-ip6-manager.c59
-rw-r--r--src/logging/Makefile.in8
-rw-r--r--src/logging/nm-logging.c7
-rw-r--r--src/main.c185
-rw-r--r--src/modem-manager/Makefile.in8
-rw-r--r--src/modem-manager/nm-modem-manager.c29
-rw-r--r--src/modem-manager/nm-modem.c14
-rw-r--r--src/nm-config.c247
-rw-r--r--src/nm-config.h55
-rw-r--r--src/nm-crash-logger.c1
-rw-r--r--src/nm-device-ethernet.c96
-rw-r--r--src/nm-device-olpc-mesh.c12
-rw-r--r--src/nm-device-wifi.c267
-rw-r--r--src/nm-device.c54
-rw-r--r--src/nm-manager.c67
-rw-r--r--src/nm-manager.h7
-rw-r--r--src/nm-netlink-compat.c105
-rw-r--r--src/nm-netlink-compat.h207
-rw-r--r--src/nm-netlink-monitor.c98
-rw-r--r--src/nm-netlink-monitor.h4
-rw-r--r--src/nm-netlink-utils.c426
-rw-r--r--src/nm-netlink-utils.h80
-rw-r--r--src/nm-policy.c20
-rw-r--r--src/nm-system.c1014
-rw-r--r--src/nm-system.h35
-rw-r--r--src/nm-udev-manager.c76
-rw-r--r--src/nm-wifi-ap.c99
-rw-r--r--src/nm-wifi-ap.h9
-rw-r--r--src/ppp-manager/Makefile.in8
-rw-r--r--src/ppp-manager/nm-ppp-manager.c4
-rw-r--r--src/settings/Makefile.in8
-rw-r--r--src/settings/nm-settings-connection.c289
-rw-r--r--src/settings/nm-settings.c62
-rw-r--r--src/settings/nm-settings.h2
-rw-r--r--src/settings/plugins/Makefile.in8
-rw-r--r--src/settings/plugins/ifcfg-rh/Makefile.in8
-rw-r--r--src/settings/plugins/ifcfg-rh/plugin.c6
-rw-r--r--src/settings/plugins/ifcfg-rh/reader.c4
-rw-r--r--src/settings/plugins/ifcfg-rh/shvar.c20
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/Makefile.in8
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.in8
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c202
-rw-r--r--src/settings/plugins/ifcfg-rh/writer.c3
-rw-r--r--src/settings/plugins/ifcfg-suse/Makefile.in8
-rw-r--r--src/settings/plugins/ifnet/Makefile.in8
-rw-r--r--src/settings/plugins/ifnet/connection_parser.c18
-rw-r--r--src/settings/plugins/ifnet/net_utils.c2
-rw-r--r--src/settings/plugins/ifnet/tests/Makefile.in8
-rw-r--r--src/settings/plugins/ifnet/tests/net2
-rw-r--r--src/settings/plugins/ifnet/tests/test_all.c48
-rw-r--r--src/settings/plugins/ifnet/tests/wpa_supplicant.conf3
-rw-r--r--src/settings/plugins/ifupdown/Makefile.in8
-rw-r--r--src/settings/plugins/ifupdown/tests/Makefile.in8
-rw-r--r--src/settings/plugins/keyfile/Makefile.in8
-rw-r--r--src/settings/plugins/keyfile/reader.c176
-rw-r--r--src/settings/plugins/keyfile/tests/Makefile.in8
-rw-r--r--src/settings/plugins/keyfile/tests/keyfiles/Makefile.am2
-rw-r--r--src/settings/plugins/keyfile/tests/keyfiles/Makefile.in10
-rw-r--r--src/settings/plugins/keyfile/tests/keyfiles/Test_Intlike_SSID11
-rw-r--r--src/settings/plugins/keyfile/tests/keyfiles/Test_Intlike_SSID_211
-rw-r--r--src/settings/plugins/keyfile/tests/test-keyfile.c246
-rw-r--r--src/settings/plugins/keyfile/writer.c45
-rw-r--r--src/settings/tests/Makefile.in8
-rw-r--r--src/supplicant-manager/Makefile.in8
-rw-r--r--src/supplicant-manager/nm-supplicant-config.c2
-rw-r--r--src/supplicant-manager/nm-supplicant-manager.c69
-rw-r--r--src/supplicant-manager/tests/Makefile.in8
-rw-r--r--src/tests/Makefile.in8
-rw-r--r--src/vpn-manager/Makefile.in8
-rw-r--r--src/vpn-manager/nm-vpn-connection-base.c16
-rw-r--r--src/vpn-manager/nm-vpn-connection-base.h5
-rw-r--r--src/vpn-manager/nm-vpn-connection.c62
-rw-r--r--src/vpn-manager/nm-vpn-connection.h3
-rw-r--r--src/vpn-manager/nm-vpn-manager.c24
-rw-r--r--src/vpn-manager/nm-vpn-manager.h8
-rw-r--r--src/vpn-manager/nm-vpn-service.c5
-rw-r--r--src/vpn-manager/nm-vpn-service.h3
-rw-r--r--src/wimax/Makefile.in8
-rw-r--r--src/wimax/iwmxsdk.c77
-rw-r--r--src/wimax/iwmxsdk.h2
-rw-r--r--src/wimax/nm-device-wimax.c115
-rw-r--r--test/Makefile.in8
-rw-r--r--tools/Makefile.in8
203 files changed, 12584 insertions, 4862 deletions
diff --git a/Makefile.in b/Makefile.in
index da04d938..35557071 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -235,8 +235,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/NEWS b/NEWS
index b27a9b2e..63f39e01 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,122 @@
 ==============================================
+NetworkManager-0.9.2
+Overview of changes since NetworkManager-0.9.0
+==============================================
+
+* Support for libnl2 and libnl3 and various memory leak fixes
+* Bug fixes for the ifnet config plugin
+* Ensure IPv6 link-local DNS servers work correctly in the dnsmasq DNS plugin
+* Add ability for nmcli to delete connections
+* Fix setup of connection sharing with newer iptables versions
+* Ensure WiMAX activation emits correct signals (fixes initial signal strength)
+* Fix an issue with duplicated keyfile connections
+* Ensure the 'novj' options is passed through to pppd
+* Store timestamps for VPN connections too
+* Fix a crash when deleting default wired connections
+* Fix a security issue in the ifcfg-rh plugin with newlines in file names
+* Fix the "SpecificObject" property for active VPN connection objects
+* Improve handling of rfkill on some platforms
+* Spaces no longer used in ifcfg config file names
+* IPv6 RAs are now accepted when forwarding is configured
+* dnsmasq local caching nameserver plugin cache size bumped to 400 entries (from 150)
+* Fix handling of SSIDs in the keyfile plugin
+* Fix some GObject Introspection annotations in libnm-glib and libnm-util
+* Fix setting hostnames from DHCP
+
+
+==============================================
+NetworkManager-0.9.0
+Overview of changes since NetworkManager-0.8.x
+==============================================
+
+This is a new stable release of NetworkManager.  Notable changes include:
+
+* All connections and configuration now managed by NetworkManager
+* Secrets for any connection can now be stored in user session or by NetworkManager
+* All secrets can now be requested each time
+* Fast User Switching support
+* Support for WiMAX mobile broadband
+* Connections can now be restricted to one or more users
+* Support for 802.1X certificate subject matching for greater security
+* Requires wpa_supplicant 0.7 or later
+* Better support for AP roaming using nl80211 and background scanning
+* Simplified D-Bus API for easier client usage
+* Support for GObject Introspection in libnm-glib and libnm-util
+
+
+==============================================
+NetworkManager-0.8.6
+Overview of changes since NetworkManager-0.8.4
+==============================================
+
+This is a new stable release of NetworkManager.  Notable changes include:
+
+* Fix handling of WINS server address in libnm-glib
+* Fix checks for s390 CTC device types
+* Fix export of nm_device_get_ip_iface() in libnm-glib
+* Fix export of IPv6 DNS GValue conversion functions in libnm-glib
+* Recognize and manage platform 'gadget' devices
+* Send only "short" hostname, not FQDN, to DHCP servers
+* Allow "_" as a valid character for GSM APNs
+* Handle shared connections in the ifnet plugin
+* Fix Ad-Hoc frequency selection for user-created Ad-Hoc networks
+* Allow failed connections to be retried when Ethernet carrier bounces
+* Allow usage of paths for certificates and keys in the keyfile plugin
+* Fix crash requesting system VPN secrets
+* Add ability to blacklist certain MAC addresses for wired & wifi connections
+* Ensure users are authorized to share wifi networks (CVE-2011-2176)
+
+
+==============================================
+NetworkManager-0.8.4
+Overview of changes since NetworkManager-0.8.2
+==============================================
+
+This is a new stable release of NetworkManager.  Notable changes include:
+
+* Preliminary support for Exherbo Linux
+* Logging fixes to suppress unnecessary messages
+* Ensure removed devices are cleaned up
+* Fix potential 64-bit crash updating timestamps
+* IPv6 setup, routing, and compliance fixes
+* Fix WWAN enable/disable handling
+* Handle reverse DNS lookups with local caching nameserver configurations
+* Ensure usable DNS configuration is written when NetworkManager quits
+* No longer updates /etc/hosts when hostname changes
+* Request WPAD option from DHCP servers
+* Allow use of paths for certificates and keys in connection keyfiles
+* Allow operation without any DHCP client installed
+* Fix operation with newer versions of dnsmasq
+* nmcli support for WWAN connections
+* Persistent hostname sent to DHCP servers by default
+* Allow disabing PPP support at build time
+* Red Hat/Fedora ifcfg plugin fixes for handling S390 CTC device configuration
+* Red Hat/Fedora ifcfg plugin fixes for handling IPADDR config items
+* Shutdown crash fixes
+* Memory leak fixes
+* Documentation fixes and updates
+* and much more...
+
+==============================================
+NetworkManager-0.8.2
+Overview of changes since NetworkManager-0.8.1
+==============================================
+
+This is a new stable release of NetworkManager.  Notable changes include:
+
+* Native local caching nameserver support using dnsmasq
+* Automatically detect addition and removal of new VPN plugins
+* Support for handling suspend/resume signals from UPower
+* Ensure users are allowed to enable/disable WiFi and networking
+* Ensure WiFi enable state is perserved across reboot and suspend
+* Better handling of /etc/hosts and preservation of custom hostnames
+* Support for the systemd session management service
+* Better handling of 'keyfile' system connection errors
+* Support for S390 network devices
+* and much more...
+
+
+==============================================
 NetworkManager-0.7.0
 Overview of changes since NetworkManager-0.6.6
 ==============================================
diff --git a/TODO b/TODO
index 369be1e5..3b8438ac 100644
--- a/TODO
+++ b/TODO
@@ -495,3 +495,123 @@ a bridge or bond and shouldn't be automatically started by NetworkManager or
 displayed as separate connections in the user interface.
 
 TO BE CONTINUED
+
+
+* Better Tablet/Mobile Behavior
+
+There are a few components to this:
+
+1) kernel driver and hardware capabilities: most mobile devices use periodic
+background scanning to quickly determine whether a known SSID is available and
+notify the connection manager to connect to it.  This typically requires special
+capabilities and good powersave/sleep support from the WiFi kernel driver.
+There is a background scanning API in nl80211, but we need to determine how many
+SSIDs each driver allows for background scanning, and based on that number, give
+the driver the most recent N SSIDs.  We still need to periodically wake the
+device up and do a full scan just in case the user is near a known SSID that was
+not in the N top recently used networks.  This is also beneficial to normal
+desktop use-cases.
+
+wpa_supplicant doesn't currently provide an explicit interface for sending SSIDs
+to the driver for background scanning, but could simply send a list using
+configured networks.  However, NM currently does not send *all* configured
+connections' SSIDs to the supplicant, so that's something we should do first
+to optimize connection times.  To do this, NM would need to order all networks
+using the NM timestamp and convert that into a supplicant priority number, which
+would need to be adjusted periodically when the timestamp was updated.  This
+would involve tracking each network (exposed by the supplicant as a D-Bus
+object) and making sure they were added, deleted, and updated when the backing
+NMConnection objects changed.  One complication is that the supplicant
+requires secrets for various network types when the network is added via D-Bus,
+and NetworkManager might not have those secrets yet.  We may need to modify
+the supplicant allow for *all* secrets (PSKs, WEP keys, etc) to be requested
+on-demand, not just EAP secrets like 802.1x passwords.  We then need to fix
+up the supplicant's D-Bus interface to actually send requests for secrets out
+over D-Bus (like wpa_supplicant_eap_param_needed() does for the socket-based
+control interface) and to handle the resulting reply from a D-Bus client like
+wpa_supplicant_ctrl_iface_ctrl_rsp() does.
+
+With the secrets request stuff and priority handling in place, wpa_supplicant
+would control network selection and roaming (based on the priorities NM gave it
+of course) instead of NetworkManager itself, and hopefully lead to a faster WiFi
+connection process.
+
+2) single-device-at-a-time with overlapping connections: this is also probably
+the best route to go for desktop use-cases as well.  Instead of bringing all
+available connections up, only bring up the "best" connection at any given
+time based on the current priority list (which is rougly Ethernet > WiFi >
+3G/Bluetooth/WiMAX).  However, to ensure seamless connectivity, when one
+connection begins to degrade, the next-best connection should be started before
+the current one is terminated, such that there is a small amount of overlap.
+Consequently the same behavior should be used when a better connection becomes
+available.  This behavior should be suspended when special connections like
+Internet Connection Sharing ones are started, where clearly the priorities
+are different (ie, for Mobile Hotspot 3G > WiFi).
+
+
+* IP over Infiniband (IPoIB)
+
+These interfaces are similar to Ethernet interfaces with a few distinct
+differences:
+
+  1) they have 64-bit MAC addresses (GUIDs in Infiniband parlance)
+  2) DHCP clients need to be modified to handle IPoIB
+  3) they have a different ARP type and different L2 options
+
+By default the interfaces do not have IP capability, but they gain that
+capability when certain kernel modules (ib_ipoib.ko) are loaded, which causes
+the IP-capable interface is created.  The IP-capable interfaces apparently have
+ARPHRD_INFINIBAND set, which is likely what NM should use to identify them.
+
+One outstanding question is whether NM should (a) detect all Infiniband
+interfaces and load ib_ipoib.ko only when there is a defined NMConnection for
+an Infiniband interface, or (b) whether NM should automatically load ib_ipoib.ko
+for every Infiniband interface, or (c) whether NM should only manage Infiniband
+interfaces that already have associated IP-capable interfaces (ie, something
+else is responsible for loading ib_ipoib.ko).  Depending on our implementation,
+(a) might not be possible, because if IPoIB connections are treated similar to
+plain Ethernet connections, we may not have any information about whether a
+specific NMConnection is Infiniband other than the MAC address.
+
+It turns out that on some distros other components (like system services) may
+load ib_ipoib.ko for us.  For exmaple, the 'rdma' package on Fedora/RHEL systems
+contains /etc/rc.d/init.d/rdma which uses values in /etc/rdma/rdma.conf to load
+ib_ipoib.ko at system startup if the user has requested it via IPOIB_LOAD=yes.
+For the time being, if the some other component of the system loads IP for us,
+NetworkManager should probably still recognize the Infiniband interface, but
+leave it in unmanaged mode if there is no available IPoIB interface associated
+with the Infiniband one.  i.e. for now, NM should not automatically load
+ib_ipoib.ko.
+
+The second question is whether to fold IPoIB support into the NMDeviceEthernet
+class as was done for s390 network interfaces, or whether to create a subclass
+of NMDevice:
+
+1) extend NMDeviceEthernet: this would involve loosening the assumption that
+hardware addresses (the 'hw-address'/'perm-hw-address' properties of
+NMDeviceEthernet and the 'mac-address'/'cloned-mac-address' properties of
+NMSettingWired) are 48 bits wide and instead can be either 48 or 64 bits wide.
+
+2) create a new NMDevice subclass for Infiniband devices tailored to Infiniband
+specific behavior and attributes.  This would be a lot more code since we'd have
+to duplicate much of what NMDeviceEthernet already does, plus add the
+Infiniband device class to libnm-glib.  This also would be the least invasive
+from an API standpoint since the existing API would be unchanged, except for
+the addition of a new value in the NMDeviceType enum, which clients should
+ignore if they don't understand it.  (Need to coordinate additions to this enum
+between 0.8.x and 0.9.x since 0.9.x has more device types, but we want to make
+sure new device types get the same number for both branches).
+
+For Infiniband specific options we could either fold them into NMSettingEthernet
+or create a new NMSettingInfiniband class.  Current Infiniband specific options
+are partitions/P_Keys, datagram vs. connected mode, and MTU.  The default MTU
+varies with the 'mode'; for datagram it is currently 2044, while for connected
+mode it is currently 65520.  Given that we only have 2 IB-specific options
+we should probably just fold them into NMSettingEthernet similar to what was
+done for s390-specific options.
+
+For some general (and also Red Hat/Fedora specific) information see:
+
+http://tools.ietf.org/html/rfc4392
+http://rhkernel.org/#RHEL6+2.6.32-71.18.2.el6/Documentation/infiniband/ipoib.txt
+
diff --git a/callouts/Makefile.in b/callouts/Makefile.in
index 763d7fb2..a064732c 100644
--- a/callouts/Makefile.in
+++ b/callouts/Makefile.in
@@ -279,8 +279,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/callouts/tests/Makefile.in b/callouts/tests/Makefile.in
index 4c8fa909..b4b7807e 100644
--- a/callouts/tests/Makefile.in
+++ b/callouts/tests/Makefile.in
@@ -188,8 +188,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/cli/Makefile.in b/cli/Makefile.in
index bd3d8737..b3b3fc5a 100644
--- a/cli/Makefile.in
+++ b/cli/Makefile.in
@@ -192,8 +192,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/cli/src/Makefile.in b/cli/src/Makefile.in
index 33aa3f2b..11c1d50c 100644
--- a/cli/src/Makefile.in
+++ b/cli/src/Makefile.in
@@ -189,8 +189,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/cli/src/connections.c b/cli/src/connections.c
index 5febc58a..7d4fffc0 100644
--- a/cli/src/connections.c
+++ b/cli/src/connections.c
@@ -141,39 +141,26 @@ typedef struct {
 	char **argv;
 } ArgsInfo;
 
-extern GMainLoop *loop;   /* glib main loop variable */
+/* glib main loop variable - defined in nmcli.c */
+extern GMainLoop *loop;
 
 static ArgsInfo args_info;
 
-/* static function prototypes */
-static void usage (void);
-static void quit (void);
-static void show_connection (NMConnection *data, gpointer user_data);
-static NMConnection *find_connection (GSList *list, const char *filter_type, const char *filter_val);
-static gboolean find_device_for_connection (NmCli *nmc, NMConnection *connection, const char *iface, const char *ap,
-                                            const char *nsp, NMDevice **device, const char **spec_object, GError **error);
-static const char *active_connection_state_to_string (NMActiveConnectionState state);
-static void active_connection_state_cb (NMActiveConnection *active, GParamSpec *pspec, gpointer user_data);
-static void get_connections_cb (NMRemoteSettings *settings, gpointer user_data);
-static NMCResultCode do_connections_list (NmCli *nmc, int argc, char **argv);
-static NMCResultCode do_connections_status (NmCli *nmc, int argc, char **argv);
-static NMCResultCode do_connection_up (NmCli *nmc, int argc, char **argv);
-static NMCResultCode do_connection_down (NmCli *nmc, int argc, char **argv);
-
 static void
 usage (void)
 {
 	fprintf (stderr,
 	         _("Usage: nmcli con { COMMAND | help }\n"
-	         "  COMMAND := { list | status | up | down }\n\n"
+	         "  COMMAND := { list | status | up | down | delete }\n\n"
 	         "  list [id <id> | uuid <id>]\n"
 	         "  status\n"
 #if WITH_WIMAX
-	         "  up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [nsp <name>] [--nowait] [--timeout <timeout>]\n"
+	         "  up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--nowait] [--timeout <timeout>]\n"
 #else
-	         "  up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout <timeout>]\n"
+	         "  up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout <timeout>]\n"
 #endif
-	         "  down id <id> | uuid <id>\n"));
+	         "  down id <id> | uuid <id>\n"
+	         "  delete id <id> | uuid <id>\n"));
 }
 
 /* The real commands that do something - i.e. not 'help', etc. */
@@ -182,6 +169,7 @@ static const char *real_con_commands[] = {
 	"status",
 	"up",
 	"down",
+	"delete",
 	NULL
 };
 
@@ -1073,7 +1061,7 @@ find_device_for_connection (NmCli *nmc,
 	g_assert (s_con);
 	con_type = nm_setting_connection_get_connection_type (s_con);
 
-	if (strcmp (con_type, "vpn") == 0) {
+	if (strcmp (con_type, NM_SETTING_VPN_SETTING_NAME) == 0) {
 		/* VPN connections */
 		NMActiveConnection *active = NULL;
 		if (iface) {
@@ -1116,22 +1104,22 @@ find_device_for_connection (NmCli *nmc,
 				}
 			}
 
-			if (found_device && ap && !strcmp (con_type, "802-11-wireless") && NM_IS_DEVICE_WIFI (dev)) {
-				char *hwaddr_up = g_ascii_strup (ap, -1);
+			if (found_device && ap && !strcmp (con_type, NM_SETTING_WIRELESS_SETTING_NAME) && NM_IS_DEVICE_WIFI (dev)) {
+				char *bssid_up = g_ascii_strup (ap, -1);
 				const GPtrArray *aps = nm_device_wifi_get_access_points (NM_DEVICE_WIFI (dev));
 				found_device = NULL;  /* Mark as not found; set to the device again later, only if AP matches */
 
 				for (j = 0; aps && (j < aps->len); j++) {
 					NMAccessPoint *candidate_ap = g_ptr_array_index (aps, j);
-					const char *candidate_hwaddr = nm_access_point_get_hw_address (candidate_ap);
+					const char *candidate_bssid = nm_access_point_get_bssid (candidate_ap);
 
-					if (!strcmp (hwaddr_up, candidate_hwaddr)) {
+					if (!strcmp (bssid_up, candidate_bssid)) {
 						found_device = dev;
 						*spec_object = nm_object_get_path (NM_OBJECT (candidate_ap));
 						break;
 					}
 				}
-				g_free (hwaddr_up);
+				g_free (bssid_up);
 			}
 
 #if WITH_WIMAX
@@ -1576,6 +1564,66 @@ error:
 }
 
 static NMCResultCode
+do_connection_delete (NmCli *nmc, int argc, char **argv)
+{
+	NMConnection *connection = NULL;
+	const char *selector = NULL;
+	const char *id = NULL;
+	GError *error = NULL;
+
+	nmc->should_wait = FALSE;
+
+	while (argc > 0) {
+		if (strcmp (*argv, "id") == 0 || strcmp (*argv, "uuid") == 0) {
+			selector = *argv;
+			if (next_arg (&argc, &argv) != 0) {
+				g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *argv);
+				nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+				goto error;
+			}
+			id = *argv;
+		}
+		else
+			fprintf (stderr, _("Unknown parameter: %s\n"), *argv);
+
+		argc--;
+		argv++;
+	}
+
+	if (!id) {
+		g_string_printf (nmc->return_text, _("Error: id or uuid has to be specified."));
+		nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+		goto error;
+	}
+
+	if (!nmc_is_nm_running (nmc, &error)) {
+		if (error) {
+			g_string_printf (nmc->return_text, _("Error: Can't find out if NetworkManager is running: %s."), error->message);
+			nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+			g_error_free (error);
+		} else {
+			g_string_printf (nmc->return_text, _("Error: NetworkManager is not running."));
+			nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING;
+		}
+		goto error;
+	}
+
+	connection = find_connection (nmc->system_connections, selector, id);
+
+	if (!connection) {
+		g_string_printf (nmc->return_text, _("Error: Unknown connection: %s."), id);
+		nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+		goto error;
+	}
+
+	/* Delete the connection */
+	nm_remote_connection_delete (NM_REMOTE_CONNECTION (connection), NULL, NULL);
+
+error:
+	return nmc->return_value;
+}
+
+static NMCResultCode
 parse_cmd (NmCli *nmc, int argc, char **argv)
 {
 	GError *error = NULL;
@@ -1600,6 +1648,9 @@ parse_cmd (NmCli *nmc, int argc, char **argv)
 		else if (matches(*argv, "down") == 0) {
 			nmc->return_value = do_connection_down (nmc, argc-1, argv+1);
 		}
+		else if (matches(*argv, "delete") == 0) {
+			nmc->return_value = do_connection_delete (nmc, argc-1, argv+1);
+		}
 		else if (matches (*argv, "help") == 0) {
 			usage ();
 			nmc->should_wait = FALSE;
@@ -1672,6 +1723,7 @@ do_connections (NmCli *nmc, int argc, char **argv)
 		if (error || !bus) {
 			g_string_printf (nmc->return_text, _("Error: could not connect to D-Bus."));
 			nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+			nmc->should_wait = FALSE;
 			return nmc->return_value;
 		}
 
@@ -1679,8 +1731,8 @@ do_connections (NmCli *nmc, int argc, char **argv)
 		if (!(nmc->system_settings = nm_remote_settings_new (bus))) {
 			g_string_printf (nmc->return_text, _("Error: Could not get system settings."));
 			nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+			nmc->should_wait = FALSE;
 			return nmc->return_value;
-
 		}
 
 		/* find out whether settings service is running */
@@ -1689,6 +1741,7 @@ do_connections (NmCli *nmc, int argc, char **argv)
 		if (!nmc->system_settings_running) {
 			g_string_printf (nmc->return_text, _("Error: Can't obtain connections: settings service is not running."));
 			nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+			nmc->should_wait = FALSE;
 			return nmc->return_value;
 		}
 
diff --git a/cli/src/devices.c b/cli/src/devices.c
index c6228ba1..500d2341 100644
--- a/cli/src/devices.c
+++ b/cli/src/devices.c
@@ -236,18 +236,8 @@ static NmcOutputField nmc_fields_dev_wimax_list[] = {
 #endif
 
 
-/* static function prototypes */
-static void usage (void);
-static const char *device_state_to_string (NMDeviceState state);
-static NMCResultCode do_devices_status (NmCli *nmc, int argc, char **argv);
-static NMCResultCode do_devices_list (NmCli *nmc, int argc, char **argv);
-static NMCResultCode do_device_disconnect (NmCli *nmc, int argc, char **argv);
-static NMCResultCode do_device_wifi (NmCli *nmc, int argc, char **argv);
-#if WITH_WIMAX
-static NMCResultCode do_device_wimax (NmCli *nmc, int argc, char **argv);
-#endif
-
-extern GMainLoop *loop;   /* glib main loop variable */
+/* glib main loop variable - defined in nmcli.c */
+extern GMainLoop *loop;
 
 static void
 usage (void)
@@ -262,7 +252,7 @@ usage (void)
 	         "  status\n"
 	         "  list [iface <iface>]\n"
 	         "  disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-	         "  wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+	         "  wifi [list [iface <iface>] [bssid <BSSID>]]\n"
 #if WITH_WIMAX
 	         "  wimax [list [iface <iface>] [nsp <name>]]\n\n"
 #endif
@@ -441,15 +431,15 @@ detail_access_point (gpointer data, gpointer user_data)
 	NM80211ApSecurityFlags wpa_flags, rsn_flags;
 	guint32 freq, bitrate;
 	guint8 strength;
-	const GByteArray *ssid; 
-	const char *hwaddr;
+	const GByteArray *ssid;
+	const char *bssid;
 	NM80211Mode mode;
 	char *freq_str, *ssid_str, *bitrate_str, *strength_str, *wpa_flags_str, *rsn_flags_str;
 	GString *security_str;
 	char *ap_name;
 
 	if (info->active_bssid) {
-		const char *current_bssid = nm_access_point_get_hw_address (ap);
+		const char *current_bssid = nm_access_point_get_bssid (ap);
 		if (current_bssid && !strcmp (current_bssid, info->active_bssid))
 			active = TRUE;
 	}
@@ -459,7 +449,7 @@ detail_access_point (gpointer data, gpointer user_data)
 	wpa_flags = nm_access_point_get_wpa_flags (ap);
 	rsn_flags = nm_access_point_get_rsn_flags (ap);
 	ssid = nm_access_point_get_ssid (ap);
-	hwaddr = nm_access_point_get_hw_address (ap);
+	bssid = nm_access_point_get_bssid (ap);
 	freq = nm_access_point_get_frequency (ap);
 	mode = nm_access_point_get_mode (ap);
 	bitrate = nm_access_point_get_max_bitrate (ap);
@@ -497,7 +487,7 @@ detail_access_point (gpointer data, gpointer user_data)
 	ap_name = g_strdup_printf ("AP%d", info->index++); /* AP */
 	info->nmc->allowed_fields[0].value = ap_name;
 	info->nmc->allowed_fields[1].value = ssid_str;
-	info->nmc->allowed_fields[2].value = hwaddr;
+	info->nmc->allowed_fields[2].value = bssid;
 	info->nmc->allowed_fields[3].value = mode == NM_802_11_MODE_ADHOC ? _("Ad-Hoc") : mode == NM_802_11_MODE_INFRA ? _("Infrastructure") : _("Unknown");
 	info->nmc->allowed_fields[4].value = freq_str;
 	info->nmc->allowed_fields[5].value = bitrate_str;
@@ -725,7 +715,7 @@ show_device_info (gpointer data, gpointer user_data)
 			if (!strcasecmp (nmc_fields_dev_list_sections[section_idx].name, nmc_fields_dev_list_sections[3].name)) {
 				if (state == NM_DEVICE_STATE_ACTIVATED) {
 					active_ap = nm_device_wifi_get_active_access_point (NM_DEVICE_WIFI (device));
-					active_bssid = active_ap ? nm_access_point_get_hw_address (active_ap) : NULL;
+					active_bssid = active_ap ? nm_access_point_get_bssid (active_ap) : NULL;
 				}
 
 				nmc->allowed_fields = nmc_fields_dev_wifi_list;
@@ -1275,7 +1265,7 @@ show_acces_point_info (NMDevice *device, NmCli *nmc)
 
 	if (nm_device_get_state (device) == NM_DEVICE_STATE_ACTIVATED) {
 		active_ap = nm_device_wifi_get_active_access_point (NM_DEVICE_WIFI (device));
-		active_bssid = active_ap ? nm_access_point_get_hw_address (active_ap) : NULL;
+		active_bssid = active_ap ? nm_access_point_get_bssid (active_ap) : NULL;
 	}
 
 	info = g_malloc0 (sizeof (APInfo));
@@ -1296,7 +1286,7 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv)
 	NMDevice *device = NULL;
 	NMAccessPoint *ap = NULL;
 	const char *iface = NULL;
-	const char *hwaddr_user = NULL;
+	const char *bssid_user = NULL;
 	const GPtrArray *devices;
 	const GPtrArray *aps;
 	APInfo *info;
@@ -1316,13 +1306,14 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv)
 				goto error;
 			}
 			iface = *argv;
-		} else if (strcmp (*argv, "hwaddr") == 0) {
+		} else if (strcmp (*argv, "bssid") == 0 || strcmp (*argv, "hwaddr") == 0) {
+			/* hwaddr is deprecated and will be removed later */
 			if (next_arg (&argc, &argv) != 0) {
 				g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *argv);
 				nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
 				goto error;
 			}
-			hwaddr_user = *argv;
+			bssid_user = *argv;
 		} else {
 			fprintf (stderr, _("Unknown parameter: %s\n"), *argv);
 		}
@@ -1392,21 +1383,21 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv)
 		}
 
 		if (NM_IS_DEVICE_WIFI (device)) {
-			if (hwaddr_user) {
+			if (bssid_user) {
 				/* Specific AP requested - list only that */
 				aps = nm_device_wifi_get_access_points (NM_DEVICE_WIFI (device));
 				for (j = 0; aps && (j < aps->len); j++) {
-					char *hwaddr_up;
+					char *bssid_up;
 					NMAccessPoint *candidate_ap = g_ptr_array_index (aps, j);
-					const char *candidate_hwaddr = nm_access_point_get_hw_address (candidate_ap);
+					const char *candidate_bssid = nm_access_point_get_bssid (candidate_ap);
 
-					hwaddr_up = g_ascii_strup (hwaddr_user, -1);
-					if (!strcmp (hwaddr_up, candidate_hwaddr))
+					bssid_up = g_ascii_strup (bssid_user, -1);
+					if (!strcmp (bssid_up, candidate_bssid))
 						ap = candidate_ap;
-					g_free (hwaddr_up);
+					g_free (bssid_up);
 				}
 				if (!ap) {
-				 	g_string_printf (nmc->return_text, _("Error: Access point with hwaddr '%s' not found."), hwaddr_user);
+				 	g_string_printf (nmc->return_text, _("Error: Access point with bssid '%s' not found."), bssid_user);
 					nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
 					goto error;
 				}
@@ -1430,7 +1421,7 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv)
 	} else {
 		/* List APs for all devices */
 		print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
-		if (hwaddr_user) {
+		if (bssid_user) {
 			/* Specific AP requested - list only that */
 			for (i = 0; devices && (i < devices->len); i++) {
 				NMDevice *dev = g_ptr_array_index (devices, i);
@@ -1440,12 +1431,12 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv)
 
 				aps = nm_device_wifi_get_access_points (NM_DEVICE_WIFI (dev));
 				for (j = 0; aps && (j < aps->len); j++) {
-					char *hwaddr_up;
+					char *bssid_up;
 					NMAccessPoint *candidate_ap = g_ptr_array_index (aps, j);
-					const char *candidate_hwaddr = nm_access_point_get_hw_address (candidate_ap);
+					const char *candidate_bssid = nm_access_point_get_bssid (candidate_ap);
 
-					hwaddr_up = g_ascii_strup (hwaddr_user, -1);
-					if (!strcmp (hwaddr_up, candidate_hwaddr)) {
+					bssid_up = g_ascii_strup (bssid_user, -1);
+					if (!strcmp (bssid_up, candidate_bssid)) {
 						ap = candidate_ap;
 
 						info = g_malloc0 (sizeof (APInfo));
@@ -1456,11 +1447,11 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv)
 						detail_access_point (ap, info);
 						g_free (info);
 					}
-					g_free (hwaddr_up);
+					g_free (bssid_up);
 				}
 			}
 			if (!ap) {
-			 	g_string_printf (nmc->return_text, _("Error: Access point with hwaddr '%s' not found."), hwaddr_user);
+			 	g_string_printf (nmc->return_text, _("Error: Access point with bssid '%s' not found."), bssid_user);
 				nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
 				goto error;
 			}
@@ -1667,7 +1658,7 @@ do_device_wimax_list (NmCli *nmc, int argc, char **argv)
 				}
 			}
 			if (!nsp) {
-			 	g_string_printf (nmc->return_text, _("Error: Access point with hwaddr '%s' not found."), nsp_user);
+			 	g_string_printf (nmc->return_text, _("Error: Access point with nsp '%s' not found."), nsp_user);
 				nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
 				goto error;
 			}
diff --git a/cli/src/network-manager.c b/cli/src/network-manager.c
index ac9a3841..c23c9fae 100644
--- a/cli/src/network-manager.c
+++ b/cli/src/network-manager.c
@@ -57,16 +57,9 @@ static NmcOutputField nmc_fields_nm_status[] = {
 #define NMC_FIELDS_NM_WWAN           "WWAN"
 #define NMC_FIELDS_NM_WIMAX          "WIMAX"
 
-
+/* glib main loop variable - defined in nmcli.c */
 extern GMainLoop *loop;
 
-/* static function prototypes */
-static void usage (void);
-static void quit (void);
-static const char *nm_state_to_string (NMState state);
-static NMCResultCode show_nm_status (NmCli *nmc);
-
-
 static void
 usage (void)
 {
diff --git a/cli/src/settings.c b/cli/src/settings.c
index c2385370..ccbe9589 100644
--- a/cli/src/settings.c
+++ b/cli/src/settings.c
@@ -14,7 +14,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * (C) Copyright 2010 Red Hat, Inc.
+ * (C) Copyright 2010 - 2011 Red Hat, Inc.
  */
 
 #include "config.h"
@@ -39,6 +39,7 @@ static NmcOutputField nmc_fields_setting_connection[] = {
 	SETTING_FIELD (NM_SETTING_CONNECTION_AUTOCONNECT, 13),  /* 4 */
 	SETTING_FIELD (NM_SETTING_CONNECTION_TIMESTAMP, 10),    /* 5 */
 	SETTING_FIELD (NM_SETTING_CONNECTION_READ_ONLY, 10),    /* 6 */
+	SETTING_FIELD (NM_SETTING_CONNECTION_PERMISSIONS, 30),  /* 7 */
 	{NULL, NULL, 0, NULL, 0}
 };
 #define NMC_FIELDS_SETTING_CONNECTION_ALL     "name"","\
@@ -47,19 +48,24 @@ static NmcOutputField nmc_fields_setting_connection[] = {
                                               NM_SETTING_CONNECTION_TYPE","\
                                               NM_SETTING_CONNECTION_AUTOCONNECT","\
                                               NM_SETTING_CONNECTION_TIMESTAMP","\
-                                              NM_SETTING_CONNECTION_READ_ONLY
+                                              NM_SETTING_CONNECTION_READ_ONLY","\
+                                              NM_SETTING_CONNECTION_PERMISSIONS
 #define NMC_FIELDS_SETTING_CONNECTION_COMMON  NMC_FIELDS_SETTING_CONNECTION_ALL
 
 /* Available fields for NM_SETTING_WIRED_SETTING_NAME */
 static NmcOutputField nmc_fields_setting_wired[] = {
-	SETTING_FIELD ("name",  17),                             /* 0 */
-	SETTING_FIELD (NM_SETTING_WIRED_PORT, 8),                /* 1 */
-	SETTING_FIELD (NM_SETTING_WIRED_SPEED, 10),              /* 2 */
-	SETTING_FIELD (NM_SETTING_WIRED_DUPLEX, 10),             /* 3 */
-	SETTING_FIELD (NM_SETTING_WIRED_AUTO_NEGOTIATE, 15),     /* 4 */
-	SETTING_FIELD (NM_SETTING_WIRED_MAC_ADDRESS, 19),        /* 5 */
-	SETTING_FIELD (NM_SETTING_WIRED_CLONED_MAC_ADDRESS, 19), /* 6 */
-	SETTING_FIELD (NM_SETTING_WIRED_MTU, 6),                 /* 7 */
+	SETTING_FIELD ("name",  17),                                  /* 0 */
+	SETTING_FIELD (NM_SETTING_WIRED_PORT, 8),                     /* 1 */
+	SETTING_FIELD (NM_SETTING_WIRED_SPEED, 10),                   /* 2 */
+	SETTING_FIELD (NM_SETTING_WIRED_DUPLEX, 10),                  /* 3 */
+	SETTING_FIELD (NM_SETTING_WIRED_AUTO_NEGOTIATE, 15),          /* 4 */
+	SETTING_FIELD (NM_SETTING_WIRED_MAC_ADDRESS, 19),             /* 5 */
+	SETTING_FIELD (NM_SETTING_WIRED_CLONED_MAC_ADDRESS, 19),      /* 6 */
+	SETTING_FIELD (NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST, 39),   /* 7 */
+	SETTING_FIELD (NM_SETTING_WIRED_MTU, 6),                      /* 8 */
+	SETTING_FIELD (NM_SETTING_WIRED_S390_SUBCHANNELS, 20),        /* 9 */
+	SETTING_FIELD (NM_SETTING_WIRED_S390_NETTYPE, 15),            /* 10 */
+	SETTING_FIELD (NM_SETTING_WIRED_S390_OPTIONS, 20),            /* 11 */
 	{NULL, NULL, 0, NULL, 0}
 };
 #define NMC_FIELDS_SETTING_WIRED_ALL     "name"","\
@@ -69,7 +75,11 @@ static NmcOutputField nmc_fields_setting_wired[] = {
                                          NM_SETTING_WIRED_AUTO_NEGOTIATE","\
                                          NM_SETTING_WIRED_MAC_ADDRESS","\
                                          NM_SETTING_WIRED_CLONED_MAC_ADDRESS","\
-                                         NM_SETTING_WIRED_MTU
+                                         NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST","\
+                                         NM_SETTING_WIRED_MTU","\
+                                         NM_SETTING_WIRED_S390_SUBCHANNELS","\
+                                         NM_SETTING_WIRED_S390_NETTYPE","\
+                                         NM_SETTING_WIRED_S390_OPTIONS
 #define NMC_FIELDS_SETTING_WIRED_COMMON  NMC_FIELDS_SETTING_WIRED_ALL
 
 /* Available fields for NM_SETTING_802_1X_SETTING_NAME */
@@ -80,22 +90,26 @@ static NmcOutputField nmc_fields_setting_8021X[] = {
 	SETTING_FIELD (NM_SETTING_802_1X_ANONYMOUS_IDENTITY, 15),           /* 3 */
 	SETTING_FIELD (NM_SETTING_802_1X_CA_CERT, 10),                      /* 4 */
 	SETTING_FIELD (NM_SETTING_802_1X_CA_PATH, 10),                      /* 5 */
-	SETTING_FIELD (NM_SETTING_802_1X_CLIENT_CERT, 10),                  /* 6 */
-	SETTING_FIELD (NM_SETTING_802_1X_PHASE1_PEAPVER, 10),               /* 7 */
-	SETTING_FIELD (NM_SETTING_802_1X_PHASE1_PEAPLABEL, 10),             /* 8 */
-	SETTING_FIELD (NM_SETTING_802_1X_PHASE1_FAST_PROVISIONING, 10),     /* 9 */
-	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_AUTH, 10),                  /* 10 */
-	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_AUTHEAP, 10),               /* 11 */
-	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_CA_CERT, 20),               /* 12 */
-	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_CA_PATH, 20),               /* 13 */
-	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_CLIENT_CERT, 20),           /* 14 */
-	SETTING_FIELD (NM_SETTING_802_1X_PASSWORD, 10),                     /* 15 */
-	SETTING_FIELD (NM_SETTING_802_1X_PRIVATE_KEY, 15),                  /* 16 */
-	SETTING_FIELD (NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD, 20),         /* 17 */
-	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_PRIVATE_KEY, 20),           /* 18 */
-	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD, 20),  /* 19 */
-	SETTING_FIELD (NM_SETTING_802_1X_PIN, 8),                           /* 20 */
-	SETTING_FIELD (NM_SETTING_802_1X_SYSTEM_CA_CERTS, 17),              /* 21 */
+	SETTING_FIELD (NM_SETTING_802_1X_SUBJECT_MATCH, 10),                /* 6 */
+	SETTING_FIELD (NM_SETTING_802_1X_ALTSUBJECT_MATCHES, 10),           /* 7 */
+	SETTING_FIELD (NM_SETTING_802_1X_CLIENT_CERT, 10),                  /* 8 */
+	SETTING_FIELD (NM_SETTING_802_1X_PHASE1_PEAPVER, 10),               /* 9 */
+	SETTING_FIELD (NM_SETTING_802_1X_PHASE1_PEAPLABEL, 10),             /* 10 */
+	SETTING_FIELD (NM_SETTING_802_1X_PHASE1_FAST_PROVISIONING, 10),     /* 11 */
+	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_AUTH, 10),                  /* 12 */
+	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_AUTHEAP, 10),               /* 13 */
+	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_CA_CERT, 20),               /* 14 */
+	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_CA_PATH, 20),               /* 15 */
+	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH, 10),         /* 16 */
+	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES, 10),    /* 17 */
+	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_CLIENT_CERT, 20),           /* 18 */
+	SETTING_FIELD (NM_SETTING_802_1X_PASSWORD, 10),                     /* 19 */
+	SETTING_FIELD (NM_SETTING_802_1X_PRIVATE_KEY, 15),                  /* 20 */
+	SETTING_FIELD (NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD, 20),         /* 21 */
+	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_PRIVATE_KEY, 20),           /* 22 */
+	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD, 20),  /* 23 */
+	SETTING_FIELD (NM_SETTING_802_1X_PIN, 8),                           /* 24 */
+	SETTING_FIELD (NM_SETTING_802_1X_SYSTEM_CA_CERTS, 17),              /* 25 */
 	{NULL, NULL, 0, NULL, 0}
 };
 #define NMC_FIELDS_SETTING_802_1X_ALL     "name"","\
@@ -104,6 +118,8 @@ static NmcOutputField nmc_fields_setting_8021X[] = {
                                           NM_SETTING_802_1X_ANONYMOUS_IDENTITY","\
                                           NM_SETTING_802_1X_CA_CERT","\
                                           NM_SETTING_802_1X_CA_PATH","\
+                                          NM_SETTING_802_1X_SUBJECT_MATCH","\
+                                          NM_SETTING_802_1X_ALTSUBJECT_MATCHES","\
                                           NM_SETTING_802_1X_CLIENT_CERT","\
                                           NM_SETTING_802_1X_PHASE1_PEAPVER","\
                                           NM_SETTING_802_1X_PHASE1_PEAPLABEL","\
@@ -112,6 +128,8 @@ static NmcOutputField nmc_fields_setting_8021X[] = {
                                           NM_SETTING_802_1X_PHASE2_AUTHEAP","\
                                           NM_SETTING_802_1X_PHASE2_CA_CERT","\
                                           NM_SETTING_802_1X_PHASE2_CA_PATH","\
+                                          NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH","\
+                                          NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES","\
                                           NM_SETTING_802_1X_PHASE2_CLIENT_CERT","\
                                           NM_SETTING_802_1X_PASSWORD","\
                                           NM_SETTING_802_1X_PRIVATE_KEY","\
@@ -134,9 +152,10 @@ static NmcOutputField nmc_fields_setting_wireless[] = {
 	SETTING_FIELD (NM_SETTING_WIRELESS_TX_POWER, 10),                  /* 7 */
 	SETTING_FIELD (NM_SETTING_WIRELESS_MAC_ADDRESS, 19),               /* 8 */
 	SETTING_FIELD (NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, 19),        /* 9 */
-	SETTING_FIELD (NM_SETTING_WIRELESS_MTU, 6),                        /* 10 */
-	SETTING_FIELD (NM_SETTING_WIRELESS_SEEN_BSSIDS, 35),               /* 11 */
-	SETTING_FIELD (NM_SETTING_WIRELESS_SEC, 10),                       /* 12 */
+	SETTING_FIELD (NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST, 39),     /* 10 */
+	SETTING_FIELD (NM_SETTING_WIRELESS_MTU, 6),                        /* 11 */
+	SETTING_FIELD (NM_SETTING_WIRELESS_SEEN_BSSIDS, 35),               /* 12 */
+	SETTING_FIELD (NM_SETTING_WIRELESS_SEC, 10),                       /* 13 */
 	{NULL, NULL, 0, NULL, 0}
 };
 #define NMC_FIELDS_SETTING_WIRELESS_ALL     "name"","\
@@ -149,6 +168,7 @@ static NmcOutputField nmc_fields_setting_wireless[] = {
                                             NM_SETTING_WIRELESS_TX_POWER","\
                                             NM_SETTING_WIRELESS_MAC_ADDRESS","\
                                             NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS","\
+                                            NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST","\
                                             NM_SETTING_WIRELESS_MTU","\
                                             NM_SETTING_WIRELESS_SEEN_BSSIDS","\
                                             NM_SETTING_WIRELESS_SEC
@@ -204,6 +224,7 @@ static NmcOutputField nmc_fields_setting_ip4_config[] = {
 	SETTING_FIELD (NM_SETTING_IP4_CONFIG_DHCP_SEND_HOSTNAME, 19),      /* 9 */
 	SETTING_FIELD (NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME, 14),           /* 10 */
 	SETTING_FIELD (NM_SETTING_IP4_CONFIG_NEVER_DEFAULT, 15),           /* 11 */
+	SETTING_FIELD (NM_SETTING_IP4_CONFIG_MAY_FAIL, 12),                /* 12 */
 	{NULL, NULL, 0, NULL, 0}
 };
 #define NMC_FIELDS_SETTING_IP4_CONFIG_ALL     "name"","\
@@ -217,7 +238,8 @@ static NmcOutputField nmc_fields_setting_ip4_config[] = {
                                               NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID","\
                                               NM_SETTING_IP4_CONFIG_DHCP_SEND_HOSTNAME","\
                                               NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME","\
-                                              NM_SETTING_IP4_CONFIG_NEVER_DEFAULT
+                                              NM_SETTING_IP4_CONFIG_NEVER_DEFAULT","\
+                                              NM_SETTING_IP4_CONFIG_MAY_FAIL
 #define NMC_FIELDS_SETTING_IP4_CONFIG_COMMON  NMC_FIELDS_SETTING_IP4_CONFIG_ALL
 
 /* Available fields for NM_SETTING_IP6_CONFIG_SETTING_NAME */
@@ -231,6 +253,7 @@ static NmcOutputField nmc_fields_setting_ip6_config[] = {
 	SETTING_FIELD (NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES, 19),      /* 6 */
 	SETTING_FIELD (NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS, 16),         /* 7 */
 	SETTING_FIELD (NM_SETTING_IP6_CONFIG_NEVER_DEFAULT, 15),           /* 8 */
+	SETTING_FIELD (NM_SETTING_IP6_CONFIG_MAY_FAIL, 12),                /* 9 */
 	{NULL, NULL, 0, NULL, 0}
 };
 #define NMC_FIELDS_SETTING_IP6_CONFIG_ALL     "name"","\
@@ -241,7 +264,8 @@ static NmcOutputField nmc_fields_setting_ip6_config[] = {
                                               NM_SETTING_IP6_CONFIG_ROUTES","\
                                               NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES","\
                                               NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS","\
-                                              NM_SETTING_IP6_CONFIG_NEVER_DEFAULT
+                                              NM_SETTING_IP6_CONFIG_NEVER_DEFAULT","\
+                                              NM_SETTING_IP6_CONFIG_MAY_FAIL
 #define NMC_FIELDS_SETTING_IP6_CONFIG_COMMON  NMC_FIELDS_SETTING_IP4_CONFIG_ALL
 
 /* Available fields for NM_SETTING_SERIAL_SETTING_NAME */
@@ -480,6 +504,10 @@ allowed_bands_to_string (guint32 bands)
 		g_string_append (band_str, _("WCDMA 3GPP UMTS 900 MHz, "));
 	if (bands & NM_SETTING_GSM_BAND_U17IX)
 		g_string_append (band_str, _("WCDMA 3GPP UMTS 1700 MHz, "));
+	if (bands & NM_SETTING_GSM_BAND_U1900)
+		g_string_append (band_str, _("WCDMA 3GPP UMTS 1900 MHz, "));
+	if (bands & NM_SETTING_GSM_BAND_U2600)
+		g_string_append (band_str, _("WCDMA 3GPP UMTS 2600 MHz, "));
 
 	if (band_str->str[band_str->len-1] == '(')
 		g_string_assign (band_str, _("unknown"));
@@ -491,13 +519,16 @@ allowed_bands_to_string (guint32 bands)
 	return g_string_free (band_str, FALSE);
 }
 
-
 gboolean
 setting_connection_details (NMSetting *setting, NmCli *nmc)
 {
 	NMSettingConnection *s_con;
 	guint64 timestamp;
 	char *timestamp_str;
+	const char *perm_item;
+	const char *perm_type;
+	GString *perm = NULL;
+	int i;
 	guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
 	guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
 	guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
@@ -513,6 +544,15 @@ setting_connection_details (NMSetting *setting, NmCli *nmc)
 	timestamp = nm_setting_connection_get_timestamp (s_con);
 	timestamp_str = g_strdup_printf ("%" G_GUINT64_FORMAT, timestamp);
 
+	/* get permissions */
+	perm = g_string_new (NULL);
+	for (i = 0; i < nm_setting_connection_get_num_permissions (s_con); i++) {
+		nm_setting_connection_get_permission (s_con, i, &perm_type, &perm_item, NULL);
+		g_string_append_printf (perm, "%s:%s,", perm_type, perm_item);
+	}
+	if (perm->len > 0)
+		g_string_truncate (perm, perm->len-1); /* remove trailing , */
+
 	nmc->allowed_fields[0].value = NM_SETTING_CONNECTION_SETTING_NAME;
 	nmc->allowed_fields[1].value = nm_setting_connection_get_id (s_con);
 	nmc->allowed_fields[2].value = nm_setting_connection_get_uuid (s_con);
@@ -520,11 +560,13 @@ setting_connection_details (NMSetting *setting, NmCli *nmc)
 	nmc->allowed_fields[4].value = nm_setting_connection_get_autoconnect (s_con) ? _("yes") : _("no");
 	nmc->allowed_fields[5].value = timestamp_str;
 	nmc->allowed_fields[6].value = nm_setting_connection_get_read_only (s_con) ? ("yes") : _("no");
+	nmc->allowed_fields[7].value = perm->str;
 
 	nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
 	print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
 
 	g_free (timestamp_str);
+	g_string_free (perm, TRUE);
 
 	return TRUE;
 }
@@ -534,7 +576,11 @@ setting_wired_details (NMSetting *setting, NmCli *nmc)
 {
 	NMSettingWired *s_wired;
 	const GByteArray *mac;
+	const GSList *iter;
+	const GPtrArray *s390_channels;
+	int i;
 	char *speed_str, *mtu_str, *device_mac_str = NULL, *cloned_mac_str = NULL;
+	GString *mac_blacklist_s, *s390_channels_s, *s390_options_s;
 	guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
 	guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
 	guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
@@ -556,6 +602,29 @@ setting_wired_details (NMSetting *setting, NmCli *nmc)
 	if (mac)
 		cloned_mac_str = g_strdup_printf ("%02X:%02X:%02X:%02X:%02X:%02X", mac->data[0], mac->data[1], mac->data[2], mac->data[3], mac->data[4], mac->data[5]);
 
+	mac_blacklist_s = g_string_new (NULL);
+	iter = nm_setting_wired_get_mac_address_blacklist (s_wired);
+	while (iter) {
+		g_string_append_printf (mac_blacklist_s, "%s,", (char *) iter->data);
+		iter = iter->next;
+	}
+	g_string_truncate (mac_blacklist_s, mac_blacklist_s->len-1);  /* chop off trailing ',' */
+
+	s390_channels_s = g_string_new (NULL);
+	s390_channels = nm_setting_wired_get_s390_subchannels (s_wired);
+	for (i = 0; s390_channels && i < s390_channels->len; i++)
+		g_string_append_printf (s390_channels_s, "%s,", (char *) g_ptr_array_index (s390_channels, i));
+	g_string_truncate (s390_channels_s, s390_channels_s->len-1);  /* chop off trailing ',' */
+
+	s390_options_s = g_string_new (NULL);
+	for (i = 0; i < nm_setting_wired_get_num_s390_options (s_wired); i++) {
+		const char *key, *value;
+
+		nm_setting_wired_get_s390_option (s_wired, i, &key, &value);
+		g_string_append_printf (s390_options_s, "%s=%s,", key, value);
+	}
+	g_string_truncate (s390_options_s, s390_options_s->len-1);  /* chop off trailing ',' */
+
 	nmc->allowed_fields[0].value = NM_SETTING_WIRED_SETTING_NAME;
 	nmc->allowed_fields[1].value = nm_setting_wired_get_port (s_wired);
 	nmc->allowed_fields[2].value = speed_str;
@@ -563,7 +632,11 @@ setting_wired_details (NMSetting *setting, NmCli *nmc)
 	nmc->allowed_fields[4].value = nm_setting_wired_get_auto_negotiate (s_wired) ? _("yes") : _("no");
 	nmc->allowed_fields[5].value = device_mac_str;
 	nmc->allowed_fields[6].value = cloned_mac_str;
-	nmc->allowed_fields[7].value = strcmp (mtu_str, "0") ? mtu_str : _("auto");
+	nmc->allowed_fields[7].value = mac_blacklist_s->str;
+	nmc->allowed_fields[8].value = strcmp (mtu_str, "0") ? mtu_str : _("auto");
+	nmc->allowed_fields[9].value = s390_channels_s->str;
+	nmc->allowed_fields[10].value = nm_setting_wired_get_s390_nettype (s_wired);
+	nmc->allowed_fields[11].value = s390_options_s->str;
 
 	nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
 	print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
@@ -572,6 +645,9 @@ setting_wired_details (NMSetting *setting, NmCli *nmc)
 	g_free (device_mac_str);
 	g_free (cloned_mac_str);
 	g_free (mtu_str);
+	g_string_free (mac_blacklist_s, TRUE);
+	g_string_free (s390_channels_s, TRUE);
+	g_string_free (s390_options_s, TRUE);
 
 	return TRUE;
 }
@@ -581,7 +657,7 @@ setting_802_1X_details (NMSetting *setting, NmCli *nmc)
 {
 	NMSetting8021x *s_8021X;
 	NMSetting8021xCKScheme scheme;
-	GString *eap_str;
+	GString *eap_str, *alt_sub_match, *phase2_alt_sub_match;
 	char *ca_cert_str = NULL, *client_cert_str = NULL, *phase2_ca_cert_str = NULL;
 	char *phase2_client_cert_str = NULL, *private_key_str = NULL, *phase2_private_key_str = NULL;
 	int i;
@@ -639,28 +715,42 @@ setting_802_1X_details (NMSetting *setting, NmCli *nmc)
 	if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
 		phase2_private_key_str = g_strdup (nm_setting_802_1x_get_phase2_private_key_path (s_8021X));
 
+	alt_sub_match = g_string_new (NULL);
+	for (i = 0; i < nm_setting_802_1x_get_num_altsubject_matches (s_8021X); i++)
+		g_string_append_printf (alt_sub_match, "%s,", nm_setting_802_1x_get_altsubject_match (s_8021X, i));
+	g_string_truncate (alt_sub_match, alt_sub_match->len-1);  /* chop off trailing ',' */
+
+	phase2_alt_sub_match = g_string_new (NULL);
+	for (i = 0; i < nm_setting_802_1x_get_num_phase2_altsubject_matches (s_8021X); i++)
+		g_string_append_printf (phase2_alt_sub_match, "%s,", nm_setting_802_1x_get_phase2_altsubject_match (s_8021X, i));
+	g_string_truncate (phase2_alt_sub_match, phase2_alt_sub_match->len-1);  /* chop off trailing ',' */
+
 	nmc->allowed_fields[0].value = NM_SETTING_802_1X_SETTING_NAME;
 	nmc->allowed_fields[1].value = eap_str->str;
 	nmc->allowed_fields[2].value = nm_setting_802_1x_get_identity (s_8021X);
 	nmc->allowed_fields[3].value = nm_setting_802_1x_get_anonymous_identity (s_8021X);
 	nmc->allowed_fields[4].value = ca_cert_str;
 	nmc->allowed_fields[5].value = nm_setting_802_1x_get_ca_path (s_8021X);
-	nmc->allowed_fields[6].value = client_cert_str;
-	nmc->allowed_fields[7].value = nm_setting_802_1x_get_phase1_peapver (s_8021X);
-	nmc->allowed_fields[8].value = nm_setting_802_1x_get_phase1_peaplabel (s_8021X);
-	nmc->allowed_fields[9].value = nm_setting_802_1x_get_phase1_fast_provisioning (s_8021X);
-	nmc->allowed_fields[10].value = nm_setting_802_1x_get_phase2_auth (s_8021X);
-	nmc->allowed_fields[11].value = nm_setting_802_1x_get_phase2_autheap (s_8021X);
-	nmc->allowed_fields[12].value = phase2_ca_cert_str;
-	nmc->allowed_fields[13].value = nm_setting_802_1x_get_phase2_ca_path (s_8021X);
-	nmc->allowed_fields[14].value = phase2_client_cert_str;
-	nmc->allowed_fields[15].value = nm_setting_802_1x_get_password (s_8021X);
-	nmc->allowed_fields[16].value = private_key_str;
-	nmc->allowed_fields[17].value = nm_setting_802_1x_get_private_key_password (s_8021X);
-	nmc->allowed_fields[18].value = phase2_private_key_str;
-	nmc->allowed_fields[19].value = nm_setting_802_1x_get_phase2_private_key_password (s_8021X);
-	nmc->allowed_fields[20].value = nm_setting_802_1x_get_pin (s_8021X);
-	nmc->allowed_fields[21].value = nm_setting_802_1x_get_system_ca_certs (s_8021X) ? _("yes") : _("no");
+	nmc->allowed_fields[6].value = nm_setting_802_1x_get_subject_match (s_8021X);
+	nmc->allowed_fields[7].value = alt_sub_match->str;
+	nmc->allowed_fields[8].value = client_cert_str;
+	nmc->allowed_fields[9].value = nm_setting_802_1x_get_phase1_peapver (s_8021X);
+	nmc->allowed_fields[10].value = nm_setting_802_1x_get_phase1_peaplabel (s_8021X);
+	nmc->allowed_fields[11].value = nm_setting_802_1x_get_phase1_fast_provisioning (s_8021X);
+	nmc->allowed_fields[12].value = nm_setting_802_1x_get_phase2_auth (s_8021X);
+	nmc->allowed_fields[13].value = nm_setting_802_1x_get_phase2_autheap (s_8021X);
+	nmc->allowed_fields[14].value = phase2_ca_cert_str;
+	nmc->allowed_fields[15].value = nm_setting_802_1x_get_phase2_ca_path (s_8021X);
+	nmc->allowed_fields[16].value = nm_setting_802_1x_get_phase2_subject_match (s_8021X);
+	nmc->allowed_fields[17].value = phase2_alt_sub_match->str;
+	nmc->allowed_fields[18].value = phase2_client_cert_str;
+	nmc->allowed_fields[19].value = nm_setting_802_1x_get_password (s_8021X);
+	nmc->allowed_fields[20].value = private_key_str;
+	nmc->allowed_fields[21].value = nm_setting_802_1x_get_private_key_password (s_8021X);
+	nmc->allowed_fields[22].value = phase2_private_key_str;
+	nmc->allowed_fields[23].value = nm_setting_802_1x_get_phase2_private_key_password (s_8021X);
+	nmc->allowed_fields[24].value = nm_setting_802_1x_get_pin (s_8021X);
+	nmc->allowed_fields[25].value = nm_setting_802_1x_get_system_ca_certs (s_8021X) ? _("yes") : _("no");
 
 	nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
 	print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
@@ -672,6 +762,8 @@ setting_802_1X_details (NMSetting *setting, NmCli *nmc)
 	g_free (private_key_str);
 	g_free (phase2_private_key_str);
 	g_string_free (eap_str, TRUE);
+	g_string_free (alt_sub_match, TRUE);
+	g_string_free (phase2_alt_sub_match, TRUE);
 
 	return TRUE;
 }
@@ -684,7 +776,8 @@ setting_wireless_details (NMSetting *setting, NmCli *nmc)
 	const GByteArray *ssid, *bssid, *mac;
 	char *ssid_str, *channel_str, *rate_str, *tx_power_str, *mtu_str;
 	char *device_mac_str = NULL, *cloned_mac_str = NULL, *bssid_str = NULL;
-	GString *seen_bssids;
+	GString *mac_blacklist, *seen_bssids;
+	const GSList *iter;
 	guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
 	guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
 	guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
@@ -712,6 +805,15 @@ setting_wireless_details (NMSetting *setting, NmCli *nmc)
 	mac = nm_setting_wireless_get_cloned_mac_address (s_wireless);
 	if (mac)
 		cloned_mac_str = g_strdup_printf ("%02X:%02X:%02X:%02X:%02X:%02X", mac->data[0], mac->data[1], mac->data[2], mac->data[3], mac->data[4], mac->data[5]);
+
+	mac_blacklist = g_string_new (NULL);
+	iter = nm_setting_wireless_get_mac_address_blacklist (s_wireless);
+	while (iter) {
+		g_string_append_printf (mac_blacklist, "%s,", (char *) iter->data);
+		iter = iter->next;
+	}
+	g_string_truncate (mac_blacklist, mac_blacklist->len-1);  /* chop off trailing ',' */
+
 	seen_bssids = g_string_new (NULL);
 	for (i = 0; i < nm_setting_wireless_get_num_seen_bssids (s_wireless); i++) {
 		if (i > 0)
@@ -729,9 +831,10 @@ setting_wireless_details (NMSetting *setting, NmCli *nmc)
 	nmc->allowed_fields[7].value = tx_power_str;
 	nmc->allowed_fields[8].value = device_mac_str ? device_mac_str : _("not set");
 	nmc->allowed_fields[9].value = cloned_mac_str ? cloned_mac_str : _("not set");
-	nmc->allowed_fields[10].value = strcmp (mtu_str, "0") ?  mtu_str : _("auto");
-	nmc->allowed_fields[11].value = seen_bssids->str;
-	nmc->allowed_fields[12].value = nm_setting_wireless_get_security (s_wireless);
+	nmc->allowed_fields[10].value = mac_blacklist->str;
+	nmc->allowed_fields[11].value = strcmp (mtu_str, "0") ?  mtu_str : _("auto");
+	nmc->allowed_fields[12].value = seen_bssids->str;
+	nmc->allowed_fields[13].value = nm_setting_wireless_get_security (s_wireless);
 
 	nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
 	print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
@@ -745,6 +848,7 @@ setting_wireless_details (NMSetting *setting, NmCli *nmc)
 	g_free (cloned_mac_str);
 	g_free (mtu_str);
 	g_string_free (seen_bssids, TRUE);
+	g_string_free (mac_blacklist, TRUE);
 
 	return TRUE;
 }
@@ -940,6 +1044,7 @@ setting_ip4_config_details (NMSetting *setting, NmCli *nmc)
 	nmc->allowed_fields[9].value = nm_setting_ip4_config_get_dhcp_send_hostname (s_ip4) ? _("yes") : _("no");
 	nmc->allowed_fields[10].value = nm_setting_ip4_config_get_dhcp_hostname (s_ip4);
 	nmc->allowed_fields[11].value = nm_setting_ip4_config_get_never_default (s_ip4) ? _("yes") : _("no");
+	nmc->allowed_fields[12].value = nm_setting_ip4_config_get_may_fail (s_ip4) ? _("yes") : _("no");
 
 	nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
 	print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
@@ -1019,6 +1124,11 @@ setting_ip6_config_details (NMSetting *setting, NmCli *nmc)
 		g_string_append (addr_str, tmp);
 		g_free (tmp);
 
+		memset (buf, 0, sizeof (buf));
+		ip = nm_ip6_address_get_gateway (addr);
+		inet_ntop (AF_INET6, (const void *) ip, buf, sizeof (buf));
+		g_string_append_printf (addr_str, ", gw = %s", buf);
+
 		g_string_append (addr_str, " }");
 	}
 
@@ -1067,6 +1177,7 @@ setting_ip6_config_details (NMSetting *setting, NmCli *nmc)
 	nmc->allowed_fields[6].value = nm_setting_ip6_config_get_ignore_auto_routes (s_ip6) ? _("yes") : _("no");
 	nmc->allowed_fields[7].value = nm_setting_ip6_config_get_ignore_auto_dns (s_ip6) ? _("yes") : _("no");
 	nmc->allowed_fields[8].value = nm_setting_ip6_config_get_never_default (s_ip6) ? _("yes") : _("no");
+	nmc->allowed_fields[9].value = nm_setting_ip6_config_get_may_fail (s_ip6) ? _("yes") : _("no");
 
 	nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
 	print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
diff --git a/cli/src/utils.c b/cli/src/utils.c
index 3c4e4f36..c5637e4f 100644
--- a/cli/src/utils.c
+++ b/cli/src/utils.c
@@ -194,6 +194,7 @@ print_fields (const NmcPrintFields fields, const NmcOutputField field_values[])
 	if (multiline) {
 	/* --- Multiline mode --- */
 		enum { ML_HEADER_WIDTH = 79 };
+		enum { ML_VALUE_INDENT = 40 };
 		if (main_header && pretty) {
 			/* Print the main header */
 			int header_width = nmc_string_screen_width (fields.header_name, NULL) + 4;
@@ -218,7 +219,7 @@ print_fields (const NmcPrintFields fields, const NmcOutputField field_values[])
 				tmp = g_strdup_printf ("%s%s%s:", section_prefix ? field_values[0].value : "",
 				                                  section_prefix ? "." : "",
 				                                  _(field_values[idx].name_l10n));
-				printf ("%-*s%s\n", terse ? 0 : 32, tmp, field_values[idx].value ? field_values[idx].value : not_set_str);
+				printf ("%-*s%s\n", terse ? 0 : ML_VALUE_INDENT, tmp, field_values[idx].value ? field_values[idx].value : not_set_str);
 				g_free (tmp);
 			}
 			if (pretty) {
diff --git a/config.h.in b/config.h.in
index bdbd783e..2a002e91 100644
--- a/config.h.in
+++ b/config.h.in
@@ -3,6 +3,9 @@
 /* Define if building universal (internal helper macro) */
 #undef AC_APPLE_UNIVERSAL_BUILD
 
+/* Define if you have GNU backtrace extensions */
+#undef ENABLE_CRASHTRACE
+
 /* Define to 1 if translation of program messages to the user's native
    language is requested. */
 #undef ENABLE_NLS
@@ -44,6 +47,15 @@
 /* Define to 1 if you have the <inttypes.h> header file. */
 #undef HAVE_INTTYPES_H
 
+/* Define if you require libnl-1 legacy support */
+#undef HAVE_LIBNL1
+
+/* Define if you require specific libnl-2 support */
+#undef HAVE_LIBNL2
+
+/* Define if you require specific libnl-3 support */
+#undef HAVE_LIBNL3
+
 /* Define to 1 if you have the <memory.h> header file. */
 #undef HAVE_MEMORY_H
 
diff --git a/configure b/configure
index 637c085b..c6a844fd 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68 for NetworkManager 0.9.0.
+# Generated by GNU Autoconf 2.68 for NetworkManager 0.9.1.95.
 #
 # Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=NetworkManager>.
 #
@@ -571,8 +571,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='NetworkManager'
 PACKAGE_TARNAME='NetworkManager'
-PACKAGE_VERSION='0.9.0'
-PACKAGE_STRING='NetworkManager 0.9.0'
+PACKAGE_VERSION='0.9.1.95'
+PACKAGE_STRING='NetworkManager 0.9.1.95'
 PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=NetworkManager'
 PACKAGE_URL=''
 
@@ -668,6 +668,14 @@ UUID_LIBS
 UUID_CFLAGS
 LIBNL_LIBS
 LIBNL_CFLAGS
+LIBNL1_LIBS
+LIBNL1_CFLAGS
+LIBNL2_LIBS
+LIBNL2_CFLAGS
+LIBNL_ROUTE3_LIBS
+LIBNL_ROUTE3_CFLAGS
+LIBNL3_LIBS
+LIBNL3_CFLAGS
 WITH_CONSOLEKIT_FALSE
 WITH_CONSOLEKIT_TRUE
 HAVE_SYSTEMD_FALSE
@@ -934,6 +942,7 @@ with_resolvconf
 with_iptables
 with_system_ca_path
 with_kernel_firmware_dir
+enable_crashtrace
 enable_more_warnings
 with_html_dir
 enable_gtk_doc
@@ -969,8 +978,14 @@ GIO_CFLAGS
 GIO_LIBS
 QT_CFLAGS
 QT_LIBS
-LIBNL_CFLAGS
-LIBNL_LIBS
+LIBNL3_CFLAGS
+LIBNL3_LIBS
+LIBNL_ROUTE3_CFLAGS
+LIBNL_ROUTE3_LIBS
+LIBNL2_CFLAGS
+LIBNL2_LIBS
+LIBNL1_CFLAGS
+LIBNL1_LIBS
 UUID_CFLAGS
 UUID_LIBS
 IWMX_SDK_CFLAGS
@@ -1523,7 +1538,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures NetworkManager 0.9.0 to adapt to many kinds of systems.
+\`configure' configures NetworkManager 0.9.1.95 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1593,7 +1608,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of NetworkManager 0.9.0:";;
+     short | recursive ) echo "Configuration of NetworkManager 0.9.1.95:";;
    esac
   cat <<\_ACEOF
 
@@ -1620,6 +1635,7 @@ Optional Features:
   --enable-wimax          enable WiMAX support
   --enable-polkit         enable PolicyKit support
   --enable-ppp            enable PPP/PPPoE support
+  --disable-crashtrace    Disable GNU backtrace extensions
   --enable-more-warnings  Maximum compiler warnings
   --enable-gtk-doc        use gtk-doc to build documentation [[default=no]]
   --enable-gtk-doc-html   build documentation in html format [[default=yes]]
@@ -1703,9 +1719,19 @@ Some influential environment variables:
   GIO_LIBS    linker flags for GIO, overriding pkg-config
   QT_CFLAGS   C compiler flags for QT, overriding pkg-config
   QT_LIBS     linker flags for QT, overriding pkg-config
-  LIBNL_CFLAGS
-              C compiler flags for LIBNL, overriding pkg-config
-  LIBNL_LIBS  linker flags for LIBNL, overriding pkg-config
+  LIBNL3_CFLAGS
+              C compiler flags for LIBNL3, overriding pkg-config
+  LIBNL3_LIBS linker flags for LIBNL3, overriding pkg-config
+  LIBNL_ROUTE3_CFLAGS
+              C compiler flags for LIBNL_ROUTE3, overriding pkg-config
+  LIBNL_ROUTE3_LIBS
+              linker flags for LIBNL_ROUTE3, overriding pkg-config
+  LIBNL2_CFLAGS
+              C compiler flags for LIBNL2, overriding pkg-config
+  LIBNL2_LIBS linker flags for LIBNL2, overriding pkg-config
+  LIBNL1_CFLAGS
+              C compiler flags for LIBNL1, overriding pkg-config
+  LIBNL1_LIBS linker flags for LIBNL1, overriding pkg-config
   UUID_CFLAGS C compiler flags for UUID, overriding pkg-config
   UUID_LIBS   linker flags for UUID, overriding pkg-config
   IWMX_SDK_CFLAGS
@@ -1787,7 +1813,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-NetworkManager configure 0.9.0
+NetworkManager configure 0.9.1.95
 generated by GNU Autoconf 2.68
 
 Copyright (C) 2010 Free Software Foundation, Inc.
@@ -2331,7 +2357,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by NetworkManager $as_me 0.9.0, which was
+It was created by NetworkManager $as_me 0.9.1.95, which was
 generated by GNU Autoconf 2.68.  Invocation command line was
 
   $ $0 $@
@@ -3152,7 +3178,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='NetworkManager'
- VERSION='0.9.0'
+ VERSION='0.9.1.95'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -16279,8 +16305,8 @@ fi
 
 NM_MAJOR_VERSION=0
 NM_MINOR_VERSION=9
-NM_MICRO_VERSION=0
-NM_VERSION=0.9.0
+NM_MICRO_VERSION=1
+NM_VERSION=0.9.1.95
 
 
 
@@ -20828,37 +20854,38 @@ cat >>confdefs.h <<_ACEOF
 _ACEOF
 
 
+have_libnl="no"
 
 pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBNL" >&5
-$as_echo_n "checking for LIBNL... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBNL3" >&5
+$as_echo_n "checking for LIBNL3... " >&6; }
 
-if test -n "$LIBNL_CFLAGS"; then
-    pkg_cv_LIBNL_CFLAGS="$LIBNL_CFLAGS"
+if test -n "$LIBNL3_CFLAGS"; then
+    pkg_cv_LIBNL3_CFLAGS="$LIBNL3_CFLAGS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnl-1 >= 1.0-pre8\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "libnl-1 >= 1.0-pre8") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnl-3.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libnl-3.0") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_LIBNL_CFLAGS=`$PKG_CONFIG --cflags "libnl-1 >= 1.0-pre8" 2>/dev/null`
+  pkg_cv_LIBNL3_CFLAGS=`$PKG_CONFIG --cflags "libnl-3.0" 2>/dev/null`
 else
   pkg_failed=yes
 fi
  else
     pkg_failed=untried
 fi
-if test -n "$LIBNL_LIBS"; then
-    pkg_cv_LIBNL_LIBS="$LIBNL_LIBS"
+if test -n "$LIBNL3_LIBS"; then
+    pkg_cv_LIBNL3_LIBS="$LIBNL3_LIBS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnl-1 >= 1.0-pre8\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "libnl-1 >= 1.0-pre8") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnl-3.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libnl-3.0") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_LIBNL_LIBS=`$PKG_CONFIG --libs "libnl-1 >= 1.0-pre8" 2>/dev/null`
+  pkg_cv_LIBNL3_LIBS=`$PKG_CONFIG --libs "libnl-3.0" 2>/dev/null`
 else
   pkg_failed=yes
 fi
@@ -20878,49 +20905,269 @@ else
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
-	        LIBNL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libnl-1 >= 1.0-pre8" 2>&1`
+	        LIBNL3_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libnl-3.0" 2>&1`
         else
-	        LIBNL_PKG_ERRORS=`$PKG_CONFIG --print-errors "libnl-1 >= 1.0-pre8" 2>&1`
+	        LIBNL3_PKG_ERRORS=`$PKG_CONFIG --print-errors "libnl-3.0" 2>&1`
         fi
 	# Put the nasty error message in config.log where it belongs
-	echo "$LIBNL_PKG_ERRORS" >&5
+	echo "$LIBNL3_PKG_ERRORS" >&5
 
-	as_fn_error $? "Package requirements (libnl-1 >= 1.0-pre8) were not met:
+	have_libnl3=no
+elif test $pkg_failed = untried; then
+     	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+	have_libnl3=no
+else
+	LIBNL3_CFLAGS=$pkg_cv_LIBNL3_CFLAGS
+	LIBNL3_LIBS=$pkg_cv_LIBNL3_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	have_libnl3=yes
+fi
 
-$LIBNL_PKG_ERRORS
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBNL_ROUTE3" >&5
+$as_echo_n "checking for LIBNL_ROUTE3... " >&6; }
 
-Consider adjusting the PKG_CONFIG_PATH environment variable if you
-installed software in a non-standard prefix.
+if test -n "$LIBNL_ROUTE3_CFLAGS"; then
+    pkg_cv_LIBNL_ROUTE3_CFLAGS="$LIBNL_ROUTE3_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnl-route-3.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libnl-route-3.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_LIBNL_ROUTE3_CFLAGS=`$PKG_CONFIG --cflags "libnl-route-3.0" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$LIBNL_ROUTE3_LIBS"; then
+    pkg_cv_LIBNL_ROUTE3_LIBS="$LIBNL_ROUTE3_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnl-route-3.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libnl-route-3.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_LIBNL_ROUTE3_LIBS=`$PKG_CONFIG --libs "libnl-route-3.0" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
 
-Alternatively, you may set the environment variables LIBNL_CFLAGS
-and LIBNL_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details." "$LINENO" 5
 
+
+if test $pkg_failed = yes; then
+   	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        LIBNL_ROUTE3_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libnl-route-3.0" 2>&1`
+        else
+	        LIBNL_ROUTE3_PKG_ERRORS=`$PKG_CONFIG --print-errors "libnl-route-3.0" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$LIBNL_ROUTE3_PKG_ERRORS" >&5
+
+	have_libnl_route3=no
 elif test $pkg_failed = untried; then
      	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "The pkg-config script could not be found or is too old.  Make sure it
-is in your PATH or set the PKG_CONFIG environment variable to the full
-path to pkg-config.
+	have_libnl_route3=no
+else
+	LIBNL_ROUTE3_CFLAGS=$pkg_cv_LIBNL_ROUTE3_CFLAGS
+	LIBNL_ROUTE3_LIBS=$pkg_cv_LIBNL_ROUTE3_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	have_libnl_route3=yes
+fi
+if (test "${have_libnl3}" = "yes" -a "${have_libnl_route3}" = "yes"); then
 
-Alternatively, you may set the environment variables LIBNL_CFLAGS
-and LIBNL_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.
+$as_echo "#define HAVE_LIBNL3 1" >>confdefs.h
 
-To get pkg-config, see <http://pkg-config.freedesktop.org/>.
-See \`config.log' for more details" "$LINENO" 5; }
+	LIBNL_CFLAGS="$LIBNL3_CFLAGS $LIBNL_ROUTE3_CFLAGS"
+	LIBNL_LIBS="$LIBNL3_LIBS $LIBNL_ROUTE3_LIBS"
+	libnl_version="3"
+	have_libnl="yes"
+else
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBNL2" >&5
+$as_echo_n "checking for LIBNL2... " >&6; }
 
+if test -n "$LIBNL2_CFLAGS"; then
+    pkg_cv_LIBNL2_CFLAGS="$LIBNL2_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnl-2.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libnl-2.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_LIBNL2_CFLAGS=`$PKG_CONFIG --cflags "libnl-2.0" 2>/dev/null`
 else
-	LIBNL_CFLAGS=$pkg_cv_LIBNL_CFLAGS
-	LIBNL_LIBS=$pkg_cv_LIBNL_LIBS
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$LIBNL2_LIBS"; then
+    pkg_cv_LIBNL2_LIBS="$LIBNL2_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnl-2.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libnl-2.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_LIBNL2_LIBS=`$PKG_CONFIG --libs "libnl-2.0" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+   	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        LIBNL2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libnl-2.0" 2>&1`
+        else
+	        LIBNL2_PKG_ERRORS=`$PKG_CONFIG --print-errors "libnl-2.0" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$LIBNL2_PKG_ERRORS" >&5
+
+	have_libnl2=no
+elif test $pkg_failed = untried; then
+     	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+	have_libnl2=no
+else
+	LIBNL2_CFLAGS=$pkg_cv_LIBNL2_CFLAGS
+	LIBNL2_LIBS=$pkg_cv_LIBNL2_LIBS
         { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
+	have_libnl2=yes
+fi
+	if (test "${have_libnl2}" = "yes"); then
+
+$as_echo "#define HAVE_LIBNL2 1" >>confdefs.h
+
+		LIBNL_CFLAGS="$LIBNL2_CFLAGS"
+		LIBNL_LIBS="$LIBNL2_LIBS"
+		libnl_version="2"
+		have_libnl="yes"
+	else
 
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBNL1" >&5
+$as_echo_n "checking for LIBNL1... " >&6; }
+
+if test -n "$LIBNL1_CFLAGS"; then
+    pkg_cv_LIBNL1_CFLAGS="$LIBNL1_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnl-1 >= 1.0-pre8\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libnl-1 >= 1.0-pre8") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_LIBNL1_CFLAGS=`$PKG_CONFIG --cflags "libnl-1 >= 1.0-pre8" 2>/dev/null`
+else
+  pkg_failed=yes
 fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$LIBNL1_LIBS"; then
+    pkg_cv_LIBNL1_LIBS="$LIBNL1_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnl-1 >= 1.0-pre8\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libnl-1 >= 1.0-pre8") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_LIBNL1_LIBS=`$PKG_CONFIG --libs "libnl-1 >= 1.0-pre8" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
 
 
+if test $pkg_failed = yes; then
+   	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        LIBNL1_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libnl-1 >= 1.0-pre8" 2>&1`
+        else
+	        LIBNL1_PKG_ERRORS=`$PKG_CONFIG --print-errors "libnl-1 >= 1.0-pre8" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$LIBNL1_PKG_ERRORS" >&5
+
+	have_libnl1=no
+elif test $pkg_failed = untried; then
+     	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+	have_libnl1=no
+else
+	LIBNL1_CFLAGS=$pkg_cv_LIBNL1_CFLAGS
+	LIBNL1_LIBS=$pkg_cv_LIBNL1_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	have_libnl1=yes
+fi
+		if (test "${have_libnl1}" = "yes"); then
+
+$as_echo "#define HAVE_LIBNL1 1" >>confdefs.h
+
+			LIBNL_CFLAGS="$LIBNL1_CFLAGS"
+			LIBNL_LIBS="$LIBNL1_LIBS"
+			libnl_version="1"
+			have_libnl="yes"
+		fi
+	fi
+fi
+
+if (test "${have_libnl}" = "no"); then
+	as_fn_error $? "libnl development header are required" "$LINENO" 5
+fi
+
+
+
+if (test "${libnl_version}" = "1"); then
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libnl address caching bug" >&5
 $as_echo_n "checking for libnl address caching bug... " >&6; }
@@ -21012,6 +21259,7 @@ $as_echo "?" >&6; }
        ;;
 esac
 
+fi
 
 
 pkg_failed=no
@@ -21956,6 +22204,19 @@ _ACEOF
 
 
 
+# Check whether --enable-crashtrace was given.
+if test "${enable_crashtrace+set}" = set; then :
+  enableval=$enable_crashtrace; enable_crashtrace=${enableval}
+else
+  enable_crashtrace=yes
+fi
+
+if test x"$enable_crashtrace" = xyes; then
+
+$as_echo "#define ENABLE_CRASHTRACE 1" >>confdefs.h
+
+fi
+
 # Check whether --enable-more-warnings was given.
 if test "${enable_more_warnings+set}" = set; then :
   enableval=$enable_more_warnings; set_more_warnings="$enableval"
@@ -22929,7 +23190,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by NetworkManager $as_me 0.9.0, which was
+This file was extended by NetworkManager $as_me 0.9.1.95, which was
 generated by GNU Autoconf 2.68.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -22995,7 +23256,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-NetworkManager config.status 0.9.0
+NetworkManager config.status 0.9.1.95
 configured by $0, generated by GNU Autoconf 2.68,
   with options \\"\$ac_cs_config\\"
 
@@ -25316,6 +25577,8 @@ else
 	echo PPP support: no
 fi
 
+echo libnl version: ${libnl_version}
+
 echo
 echo Building documentation: ${with_docs}
 echo Building tests: ${with_tests}
diff --git a/configure.ac b/configure.ac
index c557c6be..75b99781 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3,9 +3,10 @@ AC_PREREQ([2.63])
 dnl The NM version number
 m4_define([nm_major_version], [0])
 m4_define([nm_minor_version], [9])
-m4_define([nm_micro_version], [0])
+m4_define([nm_micro_version], [1])
+m4_define([nm_nano_version],  [95])
 m4_define([nm_version],
-          [nm_major_version.nm_minor_version.nm_micro_version])
+          [nm_major_version.nm_minor_version.nm_micro_version.nm_nano_version])
 
 AC_INIT([NetworkManager], [nm_version],
         [http://bugzilla.gnome.org/enter_bug.cgi?product=NetworkManager],
@@ -312,10 +313,44 @@ else
 fi
 AC_DEFINE_UNQUOTED(NO_CONSOLEKIT, $no_ck, [Define to disable use of ConsoleKit])
 
-PKG_CHECK_MODULES(LIBNL, libnl-1 >= 1.0-pre8)
+have_libnl="no"
+PKG_CHECK_MODULES(LIBNL3, libnl-3.0, [have_libnl3=yes], [have_libnl3=no])
+PKG_CHECK_MODULES(LIBNL_ROUTE3, libnl-route-3.0, [have_libnl_route3=yes], [have_libnl_route3=no])
+if (test "${have_libnl3}" = "yes" -a "${have_libnl_route3}" = "yes"); then
+	AC_DEFINE(HAVE_LIBNL3, 1, [Define if you require specific libnl-3 support])
+	LIBNL_CFLAGS="$LIBNL3_CFLAGS $LIBNL_ROUTE3_CFLAGS"
+	LIBNL_LIBS="$LIBNL3_LIBS $LIBNL_ROUTE3_LIBS"
+	libnl_version="3"
+	have_libnl="yes"
+else
+	PKG_CHECK_MODULES(LIBNL2, libnl-2.0, [have_libnl2=yes], [have_libnl2=no])
+	if (test "${have_libnl2}" = "yes"); then
+		AC_DEFINE(HAVE_LIBNL2, 1, [Define if you require specific libnl-2 support])
+		LIBNL_CFLAGS="$LIBNL2_CFLAGS"
+		LIBNL_LIBS="$LIBNL2_LIBS"
+		libnl_version="2"
+		have_libnl="yes"
+	else
+		PKG_CHECK_MODULES(LIBNL1, libnl-1 >= 1.0-pre8, [have_libnl1=yes], [have_libnl1=no])
+		if (test "${have_libnl1}" = "yes"); then
+			AC_DEFINE(HAVE_LIBNL1, 1, [Define if you require libnl-1 legacy support])
+			LIBNL_CFLAGS="$LIBNL1_CFLAGS"
+			LIBNL_LIBS="$LIBNL1_LIBS"
+			libnl_version="1"
+			have_libnl="yes"
+		fi
+	fi
+fi
+
+if (test "${have_libnl}" = "no"); then
+	AC_MSG_ERROR([libnl development header are required])
+fi
 AC_SUBST(LIBNL_CFLAGS)
 AC_SUBST(LIBNL_LIBS)
-NM_LIBNL_CHECK
+
+if (test "${libnl_version}" = "1"); then
+	NM_LIBNL_CHECK
+fi
 
 PKG_CHECK_MODULES(UUID, uuid)
 AC_SUBST(UUID_CFLAGS)
@@ -576,6 +611,13 @@ fi
 AC_DEFINE_UNQUOTED(KERNEL_FIRMWARE_DIR, "$KERNEL_FIRMWARE_DIR", [Define to path of the kernel firmware directory])
 AC_SUBST(KERNEL_FIRMWARE_DIR)
 
+AC_ARG_ENABLE(crashtrace,
+              AS_HELP_STRING([--disable-crashtrace], [Disable GNU backtrace extensions]),
+              [enable_crashtrace=${enableval}], [enable_crashtrace=yes])
+if test x"$enable_crashtrace" = xyes; then
+  AC_DEFINE(ENABLE_CRASHTRACE, 1, [Define if you have GNU backtrace extensions])
+fi
+
 NM_COMPILER_WARNINGS
 
 GTK_DOC_CHECK(1.0)
@@ -738,6 +780,8 @@ else
 	echo PPP support: no
 fi
 
+echo libnl version: ${libnl_version}
+
 echo
 echo Building documentation: ${with_docs}
 echo Building tests: ${with_tests}
diff --git a/data/Makefile.in b/data/Makefile.in
index a5061e00..08280c96 100644
--- a/data/Makefile.in
+++ b/data/Makefile.in
@@ -177,8 +177,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/docs/Makefile.in b/docs/Makefile.in
index 91ce98e5..334c16cf 100644
--- a/docs/Makefile.in
+++ b/docs/Makefile.in
@@ -192,8 +192,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/docs/api/Makefile.in b/docs/api/Makefile.in
index 47874caf..043ecf8a 100644
--- a/docs/api/Makefile.in
+++ b/docs/api/Makefile.in
@@ -196,8 +196,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/docs/api/html/NetworkManager.devhelp b/docs/api/html/NetworkManager.devhelp
index 225718a4..a6c6d17d 100644
--- a/docs/api/html/NetworkManager.devhelp
+++ b/docs/api/html/NetworkManager.devhelp
@@ -4,23 +4,23 @@
   <chapters>
     <sub name="D-Bus API Reference" link="ref-dbus.html"/>
     <sub name="Network Configuration Setting Specification" link="ref-settings.html">
-      <sub name="Configuration Settings" link="ref-settings.html#id499631"/>
+      <sub name="Configuration Settings" link="ref-settings.html#id443345"/>
       <sub name="Secret flag types" link="secrets-flags.html"/>
     </sub>
     <sub name="Migrating from NetworkManager 0.8 to NetworkManager 0.9" link="ref-migrating.html">
-      <sub name="Architecture and D-Bus API Changes in 0.9" link="ref-migrating.html#id515244">
-        <sub name="Elimination of the User Settings Service" link="ref-migrating.html#id506888"/>
-        <sub name="User Secret Agents" link="ref-migrating.html#id490940"/>
-        <sub name="Settings Service Interface Changes" link="ref-migrating.html#id478937"/>
-        <sub name="Connection Object Interface Changes" link="ref-migrating.html#id496154"/>
-        <sub name="Permissions Methods Consolidation" link="ref-migrating.html#id469504"/>
-        <sub name="AddConnection Returns Object Path of New Connection" link="ref-migrating.html#id485456"/>
-        <sub name="Support for WiMAX Devices" link="ref-migrating.html#id490040"/>
-        <sub name="New Device States" link="ref-migrating.html#id507718"/>
-        <sub name="New Active Connection State" link="ref-migrating.html#id515265"/>
-        <sub name="Consolidated Modem Devices" link="ref-migrating.html#id515394"/>
-        <sub name="Secret Property Flags" link="ref-migrating.html#id479874"/>
-        <sub name="Deprecated Methods Removed" link="ref-migrating.html#id474466"/>
+      <sub name="Architecture and D-Bus API Changes in 0.9" link="ref-migrating.html#id458958">
+        <sub name="Elimination of the User Settings Service" link="ref-migrating.html#id450602"/>
+        <sub name="User Secret Agents" link="ref-migrating.html#id434654"/>
+        <sub name="Settings Service Interface Changes" link="ref-migrating.html#id422651"/>
+        <sub name="Connection Object Interface Changes" link="ref-migrating.html#id439868"/>
+        <sub name="Permissions Methods Consolidation" link="ref-migrating.html#id413219"/>
+        <sub name="AddConnection Returns Object Path of New Connection" link="ref-migrating.html#id429171"/>
+        <sub name="Support for WiMAX Devices" link="ref-migrating.html#id433755"/>
+        <sub name="New Device States" link="ref-migrating.html#id451432"/>
+        <sub name="New Active Connection State" link="ref-migrating.html#id458979"/>
+        <sub name="Consolidated Modem Devices" link="ref-migrating.html#id459108"/>
+        <sub name="Secret Property Flags" link="ref-migrating.html#id423588"/>
+        <sub name="Deprecated Methods Removed" link="ref-migrating.html#id418180"/>
       </sub>
     </sub>
     <sub name="Index" link="ix01.html"/>
diff --git a/docs/api/html/NetworkManager.devhelp2 b/docs/api/html/NetworkManager.devhelp2
index e5538797..2c08e0b1 100644
--- a/docs/api/html/NetworkManager.devhelp2
+++ b/docs/api/html/NetworkManager.devhelp2
@@ -4,23 +4,23 @@
   <chapters>
     <sub name="D-Bus API Reference" link="ref-dbus.html"/>
     <sub name="Network Configuration Setting Specification" link="ref-settings.html">
-      <sub name="Configuration Settings" link="ref-settings.html#id499631"/>
+      <sub name="Configuration Settings" link="ref-settings.html#id443345"/>
       <sub name="Secret flag types" link="secrets-flags.html"/>
     </sub>
     <sub name="Migrating from NetworkManager 0.8 to NetworkManager 0.9" link="ref-migrating.html">
-      <sub name="Architecture and D-Bus API Changes in 0.9" link="ref-migrating.html#id515244">
-        <sub name="Elimination of the User Settings Service" link="ref-migrating.html#id506888"/>
-        <sub name="User Secret Agents" link="ref-migrating.html#id490940"/>
-        <sub name="Settings Service Interface Changes" link="ref-migrating.html#id478937"/>
-        <sub name="Connection Object Interface Changes" link="ref-migrating.html#id496154"/>
-        <sub name="Permissions Methods Consolidation" link="ref-migrating.html#id469504"/>
-        <sub name="AddConnection Returns Object Path of New Connection" link="ref-migrating.html#id485456"/>
-        <sub name="Support for WiMAX Devices" link="ref-migrating.html#id490040"/>
-        <sub name="New Device States" link="ref-migrating.html#id507718"/>
-        <sub name="New Active Connection State" link="ref-migrating.html#id515265"/>
-        <sub name="Consolidated Modem Devices" link="ref-migrating.html#id515394"/>
-        <sub name="Secret Property Flags" link="ref-migrating.html#id479874"/>
-        <sub name="Deprecated Methods Removed" link="ref-migrating.html#id474466"/>
+      <sub name="Architecture and D-Bus API Changes in 0.9" link="ref-migrating.html#id458958">
+        <sub name="Elimination of the User Settings Service" link="ref-migrating.html#id450602"/>
+        <sub name="User Secret Agents" link="ref-migrating.html#id434654"/>
+        <sub name="Settings Service Interface Changes" link="ref-migrating.html#id422651"/>
+        <sub name="Connection Object Interface Changes" link="ref-migrating.html#id439868"/>
+        <sub name="Permissions Methods Consolidation" link="ref-migrating.html#id413219"/>
+        <sub name="AddConnection Returns Object Path of New Connection" link="ref-migrating.html#id429171"/>
+        <sub name="Support for WiMAX Devices" link="ref-migrating.html#id433755"/>
+        <sub name="New Device States" link="ref-migrating.html#id451432"/>
+        <sub name="New Active Connection State" link="ref-migrating.html#id458979"/>
+        <sub name="Consolidated Modem Devices" link="ref-migrating.html#id459108"/>
+        <sub name="Secret Property Flags" link="ref-migrating.html#id423588"/>
+        <sub name="Deprecated Methods Removed" link="ref-migrating.html#id418180"/>
       </sub>
     </sub>
     <sub name="Index" link="ix01.html"/>
diff --git a/docs/api/html/index.html b/docs/api/html/index.html
index c734b922..84aa84c9 100644
--- a/docs/api/html/index.html
+++ b/docs/api/html/index.html
@@ -22,11 +22,11 @@
 	    <code class="email">&lt;<a class="email" href="mailto:dcbw@redhat.com">dcbw@redhat.com</a>&gt;</code><br>
 	  </p></div></div>
 </div></div></div>
-<div><p class="releaseinfo">Version 0.9.0
+<div><p class="releaseinfo">Version 0.9.1.95
 </p></div>
 <div><p class="copyright">Copyright © 2011 The NetworkManager Authors</p></div>
 <div><div class="legalnotice">
-<a name="id429511"></a><p>
+<a name="id373226"></a><p>
 	Permission is granted to copy, distribute and/or modify this
 	document under the terms of the <em class="citetitle">GNU Free
 	Documentation License</em>, Version 1.1 or any later
@@ -61,25 +61,25 @@
 <dt><span class="chapter"><a href="ref-dbus.html">D-Bus API Reference</a></span></dt>
 <dt><span class="chapter"><a href="ref-settings.html">Network Configuration Setting Specification</a></span></dt>
 <dd><dl>
-<dt><span class="section"><a href="ref-settings.html#id499631">Configuration Settings</a></span></dt>
+<dt><span class="section"><a href="ref-settings.html#id443345">Configuration Settings</a></span></dt>
 <dt><span class="section"><a href="secrets-flags.html">Secret flag types</a></span></dt>
 </dl></dd>
 <dt><span class="chapter"><a href="ref-migrating.html">Migrating from NetworkManager 0.8 to NetworkManager 0.9</a></span></dt>
 <dd><dl>
-<dt><span class="section"><a href="ref-migrating.html#id515244">Architecture and D-Bus API Changes in 0.9</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id458958">Architecture and D-Bus API Changes in 0.9</a></span></dt>
 <dd><dl>
-<dt><span class="section"><a href="ref-migrating.html#id506888">Elimination of the User Settings Service</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id490940">User Secret Agents</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id478937">Settings Service Interface Changes</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id496154">Connection Object Interface Changes</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id469504">Permissions Methods Consolidation</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id485456">AddConnection Returns Object Path of New Connection</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id490040">Support for WiMAX Devices</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id507718">New Device States</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id515265">New Active Connection State</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id515394">Consolidated Modem Devices</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id479874">Secret Property Flags</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id474466">Deprecated Methods Removed</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id450602">Elimination of the User Settings Service</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id434654">User Secret Agents</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id422651">Settings Service Interface Changes</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id439868">Connection Object Interface Changes</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id413219">Permissions Methods Consolidation</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id429171">AddConnection Returns Object Path of New Connection</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id433755">Support for WiMAX Devices</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id451432">New Device States</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id458979">New Active Connection State</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id459108">Consolidated Modem Devices</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id423588">Secret Property Flags</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id418180">Deprecated Methods Removed</a></span></dt>
 </dl></dd>
 </dl></dd>
 <dt><span class="index"><a href="ix01.html">Index</a></span></dt>
diff --git a/docs/api/html/ix01.html b/docs/api/html/ix01.html
index ffcd2110..00cfa690 100644
--- a/docs/api/html/ix01.html
+++ b/docs/api/html/ix01.html
@@ -21,7 +21,7 @@
 </tr></table>
 <div class="index">
 <div class="titlepage"><div><div><h2 class="title">
-<a name="id459403"></a>Index</h2></div></div></div>
+<a name="id403117"></a>Index</h2></div></div></div>
 <div class="index"></div>
 </div>
 <div class="footer">
diff --git a/docs/api/html/ref-migrating.html b/docs/api/html/ref-migrating.html
index a3221b04..5e5471b1 100644
--- a/docs/api/html/ref-migrating.html
+++ b/docs/api/html/ref-migrating.html
@@ -23,20 +23,20 @@
 <div class="titlepage"><div><div><h2 class="title">
 <a name="ref-migrating"></a>Migrating from NetworkManager 0.8 to NetworkManager 0.9</h2></div></div></div>
 <div class="toc"><dl>
-<dt><span class="section"><a href="ref-migrating.html#id515244">Architecture and D-Bus API Changes in 0.9</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id458958">Architecture and D-Bus API Changes in 0.9</a></span></dt>
 <dd><dl>
-<dt><span class="section"><a href="ref-migrating.html#id506888">Elimination of the User Settings Service</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id490940">User Secret Agents</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id478937">Settings Service Interface Changes</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id496154">Connection Object Interface Changes</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id469504">Permissions Methods Consolidation</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id485456">AddConnection Returns Object Path of New Connection</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id490040">Support for WiMAX Devices</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id507718">New Device States</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id515265">New Active Connection State</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id515394">Consolidated Modem Devices</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id479874">Secret Property Flags</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id474466">Deprecated Methods Removed</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id450602">Elimination of the User Settings Service</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id434654">User Secret Agents</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id422651">Settings Service Interface Changes</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id439868">Connection Object Interface Changes</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id413219">Permissions Methods Consolidation</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id429171">AddConnection Returns Object Path of New Connection</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id433755">Support for WiMAX Devices</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id451432">New Device States</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id458979">New Active Connection State</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id459108">Consolidated Modem Devices</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id423588">Secret Property Flags</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id418180">Deprecated Methods Removed</a></span></dt>
 </dl></dd>
 </dl></div>
 <p>
@@ -50,14 +50,14 @@
   </p>
 <div class="section">
 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id515244"></a>Architecture and D-Bus API Changes in 0.9</h2></div></div></div>
+<a name="id458958"></a>Architecture and D-Bus API Changes in 0.9</h2></div></div></div>
 <p>
       This section details the architectural and D-Bus API changes in
       NetworkManager 0.9.
     </p>
 <div class="section">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="id506888"></a>Elimination of the User Settings Service</h3></div></div></div>
+<a name="id450602"></a>Elimination of the User Settings Service</h3></div></div></div>
 <p>
       Previously there were two "settings services", or D-Bus services that
       provided and saved network configuration information.  NetworkManager
@@ -103,7 +103,7 @@
 </div>
 <div class="section">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="id490940"></a>User Secret Agents</h3></div></div></div>
+<a name="id434654"></a>User Secret Agents</h3></div></div></div>
 <p>
       Even with the elimination of the user settings service, in some cases it
       is still desirable to store secrets in the user's session and not in
@@ -152,7 +152,7 @@
 </div>
 <div class="section">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="id478937"></a>Settings Service Interface Changes</h3></div></div></div>
+<a name="id422651"></a>Settings Service Interface Changes</h3></div></div></div>
 <p>
       With the elimination of the user settings service, the old
       <code class="literal">org.freedesktop.NetworkManagerUserSettings</code> and
@@ -188,7 +188,7 @@
 </div>
 <div class="section">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="id496154"></a>Connection Object Interface Changes</h3></div></div></div>
+<a name="id439868"></a>Connection Object Interface Changes</h3></div></div></div>
 <p>
       Consistent with the interface changes to the Settings object, the
       Connection object's D-Bus interface has changed to
@@ -222,7 +222,7 @@
 </div>
 <div class="section">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="id469504"></a>Permissions Methods Consolidation</h3></div></div></div>
+<a name="id413219"></a>Permissions Methods Consolidation</h3></div></div></div>
 <p>
       Previously there were two D-Bus method calls to retrieve the list of
       operations that a user client could perform, and two signals notifying
@@ -254,7 +254,7 @@
       are now string-based permissions.  The mapping is as follows:
       </p>
 <div class="table">
-<a name="id502282"></a><p class="title"><b>Table 17. </b></p>
+<a name="id445996"></a><p class="title"><b>Table 17. </b></p>
 <div class="table-contents"><table border="1">
 <colgroup>
 <col>
@@ -305,7 +305,7 @@
 </div>
 <div class="section">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="id485456"></a>AddConnection Returns Object Path of New Connection</h3></div></div></div>
+<a name="id429171"></a>AddConnection Returns Object Path of New Connection</h3></div></div></div>
 <p>
       The <a class="ulink" href="spec.html#org.freedesktop.NetworkManager.Settings" target="_top">
       <code class="literal">org.freedesktop.NetworkManager.Settings.AddConnection</code>
@@ -323,7 +323,7 @@
 </div>
 <div class="section">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="id490040"></a>Support for WiMAX Devices</h3></div></div></div>
+<a name="id433755"></a>Support for WiMAX Devices</h3></div></div></div>
 <p>
       NetworkManager now supports Intel WiMAX mobile broadband devices.  A
       corresponding device type (<code class="literal">NM_DEVICE_TYPE_WIMAX</code>) and
@@ -346,7 +346,7 @@
 </div>
 <div class="section">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="id507718"></a>New Device States</h3></div></div></div>
+<a name="id451432"></a>New Device States</h3></div></div></div>
 <p>
       A few <a class="ulink" href="spec.html#type-NM_DEVICE_STATE" target="_top">new device states</a>
       have been added, and all device states have been renumbered for flexibility.
@@ -361,7 +361,7 @@
 </div>
 <div class="section">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="id515265"></a>New Active Connection State</h3></div></div></div>
+<a name="id458979"></a>New Active Connection State</h3></div></div></div>
 <p>
       Along with the new device states, an
       <a class="ulink" href="spec.html#type-NM_ACTIVE_CONNECTION_STATE" target="_top">additional
@@ -377,7 +377,7 @@
 </div>
 <div class="section">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="id515394"></a>Consolidated Modem Devices</h3></div></div></div>
+<a name="id459108"></a>Consolidated Modem Devices</h3></div></div></div>
 <p>
       Many new mobile broadband devices support multiple access families, like
       Qualcomm Gobi cards (CDMA/EVDO and GSM/UMTS), or multi-mode EVDO/LTE
@@ -413,7 +413,7 @@
 </div>
 <div class="section">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="id479874"></a>Secret Property Flags</h3></div></div></div>
+<a name="id423588"></a>Secret Property Flags</h3></div></div></div>
 <p>
       In the Connection object's configuration properties, each setting's secret
       properties (like WiFi passphrases, or public key passwords, etc) now has
@@ -422,7 +422,7 @@
       following values:
       </p>
 <div class="table">
-<a name="id479882"></a><p class="title"><b>Table 18. </b></p>
+<a name="id423596"></a><p class="title"><b>Table 18. </b></p>
 <div class="table-contents"><table border="1">
 <colgroup>
 <col>
@@ -484,7 +484,7 @@
 </div>
 <div class="section">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="id474466"></a>Deprecated Methods Removed</h3></div></div></div>
+<a name="id418180"></a>Deprecated Methods Removed</h3></div></div></div>
 <p>
       A few methods and signals of the <code class="literal">org.freedesktop.NetworkManager</code>
       interface deprecated in version 0.7 have been removed.  All the
@@ -494,7 +494,7 @@
       their replacements:
       </p>
 <div class="table">
-<a name="id474480"></a><p class="title"><b>Table 19. </b></p>
+<a name="id418194"></a><p class="title"><b>Table 19. </b></p>
 <div class="table-contents"><table border="1">
 <colgroup>
 <col>
diff --git a/docs/api/html/ref-settings.html b/docs/api/html/ref-settings.html
index 5db0ccd8..59994af9 100644
--- a/docs/api/html/ref-settings.html
+++ b/docs/api/html/ref-settings.html
@@ -23,7 +23,7 @@
 <div class="titlepage"><div><div><h2 class="title">
 <a name="ref-settings"></a>Network Configuration Setting Specification</h2></div></div></div>
 <div class="toc"><dl>
-<dt><span class="section"><a href="ref-settings.html#id499631">Configuration Settings</a></span></dt>
+<dt><span class="section"><a href="ref-settings.html#id443345">Configuration Settings</a></span></dt>
 <dt><span class="section"><a href="secrets-flags.html">Secret flag types</a></span></dt>
 </dl></div>
 <p>
@@ -35,11 +35,11 @@
     </p>
 <div class="section">
 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id499631"></a>Configuration Settings</h2></div></div></div>
+<a name="id443345"></a>Configuration Settings</h2></div></div></div>
 <p>
 </p>
 <div class="table">
-<a name="id502860"></a><p class="title"><b>Table 1. 802-1x setting</b></p>
+<a name="id446574"></a><p class="title"><b>Table 1. 802-1x setting</b></p>
 <div class="table-contents"><table summary="802-1x setting" border="1">
 <colgroup>
 <col>
@@ -228,7 +228,7 @@
 <p><br class="table-break">
 </p>
 <div class="table">
-<a name="id486852"></a><p class="title"><b>Table 2. bluetooth setting</b></p>
+<a name="id430566"></a><p class="title"><b>Table 2. bluetooth setting</b></p>
 <div class="table-contents"><table summary="bluetooth setting" border="1">
 <colgroup>
 <col>
@@ -267,7 +267,7 @@
 <p><br class="table-break">
 </p>
 <div class="table">
-<a name="id486984"></a><p class="title"><b>Table 3. cdma setting</b></p>
+<a name="id430698"></a><p class="title"><b>Table 3. cdma setting</b></p>
 <div class="table-contents"><table summary="cdma setting" border="1">
 <colgroup>
 <col>
@@ -318,7 +318,7 @@
 <p><br class="table-break">
 </p>
 <div class="table">
-<a name="id487182"></a><p class="title"><b>Table 4. connection setting</b></p>
+<a name="id430897"></a><p class="title"><b>Table 4. connection setting</b></p>
 <div class="table-contents"><table summary="connection setting" border="1">
 <colgroup>
 <col>
@@ -387,7 +387,7 @@
 <p><br class="table-break">
 </p>
 <div class="table">
-<a name="id487483"></a><p class="title"><b>Table 5. gsm setting</b></p>
+<a name="id431198"></a><p class="title"><b>Table 5. gsm setting</b></p>
 <div class="table-contents"><table summary="gsm setting" border="1">
 <colgroup>
 <col>
@@ -480,7 +480,7 @@
 <p><br class="table-break">
 </p>
 <div class="table">
-<a name="id487908"></a><p class="title"><b>Table 6. ipv4 setting</b></p>
+<a name="id431623"></a><p class="title"><b>Table 6. ipv4 setting</b></p>
 <div class="table-contents"><table summary="ipv4 setting" border="1">
 <colgroup>
 <col>
@@ -579,7 +579,7 @@
 <p><br class="table-break">
 </p>
 <div class="table">
-<a name="id516867"></a><p class="title"><b>Table 7. ipv6 setting</b></p>
+<a name="id460581"></a><p class="title"><b>Table 7. ipv6 setting</b></p>
 <div class="table-contents"><table summary="ipv6 setting" border="1">
 <colgroup>
 <col>
@@ -660,7 +660,7 @@
 <p><br class="table-break">
 </p>
 <div class="table">
-<a name="id517185"></a><p class="title"><b>Table 8. 802-11-olpc-mesh setting</b></p>
+<a name="id460899"></a><p class="title"><b>Table 8. 802-11-olpc-mesh setting</b></p>
 <div class="table-contents"><table summary="802-11-olpc-mesh setting" border="1">
 <colgroup>
 <col>
@@ -705,7 +705,7 @@
 <p><br class="table-break">
 </p>
 <div class="table">
-<a name="id517323"></a><p class="title"><b>Table 9. ppp setting</b></p>
+<a name="id461037"></a><p class="title"><b>Table 9. ppp setting</b></p>
 <div class="table-contents"><table summary="ppp setting" border="1">
 <colgroup>
 <col>
@@ -840,7 +840,7 @@
 <p><br class="table-break">
 </p>
 <div class="table">
-<a name="id517853"></a><p class="title"><b>Table 10. pppoe setting</b></p>
+<a name="id461567"></a><p class="title"><b>Table 10. pppoe setting</b></p>
 <div class="table-contents"><table summary="pppoe setting" border="1">
 <colgroup>
 <col>
@@ -891,7 +891,7 @@
 <p><br class="table-break">
 </p>
 <div class="table">
-<a name="id518018"></a><p class="title"><b>Table 11. serial setting</b></p>
+<a name="id461732"></a><p class="title"><b>Table 11. serial setting</b></p>
 <div class="table-contents"><table summary="serial setting" border="1">
 <colgroup>
 <col>
@@ -948,7 +948,7 @@
 <p><br class="table-break">
 </p>
 <div class="table">
-<a name="id518231"></a><p class="title"><b>Table 12. vpn setting</b></p>
+<a name="id461945"></a><p class="title"><b>Table 12. vpn setting</b></p>
 <div class="table-contents"><table summary="vpn setting" border="1">
 <colgroup>
 <col>
@@ -999,7 +999,7 @@
 <p><br class="table-break">
 </p>
 <div class="table">
-<a name="id518437"></a><p class="title"><b>Table 13. wimax setting</b></p>
+<a name="id462151"></a><p class="title"><b>Table 13. wimax setting</b></p>
 <div class="table-contents"><table summary="wimax setting" border="1">
 <colgroup>
 <col>
@@ -1038,7 +1038,7 @@
 <p><br class="table-break">
 </p>
 <div class="table">
-<a name="id518575"></a><p class="title"><b>Table 14. 802-3-ethernet setting</b></p>
+<a name="id462289"></a><p class="title"><b>Table 14. 802-3-ethernet setting</b></p>
 <div class="table-contents"><table summary="802-3-ethernet setting" border="1">
 <colgroup>
 <col>
@@ -1131,7 +1131,7 @@
 <p><br class="table-break">
 </p>
 <div class="table">
-<a name="id519016"></a><p class="title"><b>Table 15. 802-11-wireless setting</b></p>
+<a name="id462730"></a><p class="title"><b>Table 15. 802-11-wireless setting</b></p>
 <div class="table-contents"><table summary="802-11-wireless setting" border="1">
 <colgroup>
 <col>
@@ -1236,7 +1236,7 @@
 <p><br class="table-break">
 </p>
 <div class="table">
-<a name="id519524"></a><p class="title"><b>Table 16. 802-11-wireless-security setting</b></p>
+<a name="id463239"></a><p class="title"><b>Table 16. 802-11-wireless-security setting</b></p>
 <div class="table-contents"><table summary="802-11-wireless-security setting" border="1">
 <colgroup>
 <col>
diff --git a/docs/api/html/spec.html b/docs/api/html/spec.html
index c8abf6ca..3d38d7e3 100644
--- a/docs/api/html/spec.html
+++ b/docs/api/html/spec.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ascii" /><title>NetworkManager D-Bus Interface Specification version 0.9.0</title><style type="text/css">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ascii" /><title>NetworkManager D-Bus Interface Specification version 0.9.1.95</title><style type="text/css">
 
           body {
             font-family: sans-serif;
@@ -98,7 +98,7 @@
             margin-right: 4em;
           }
 
-        </style></head><body><h1 class="topbox">NetworkManager D-Bus Interface Specification</h1><h2>Version 0.9.0</h2><div>Copyright (C) 2008 - 2011 Red Hat, Inc.</div><div>Copyright (C) 2008 - 2009 Novell, Inc.</div><div class="license">
+        </style></head><body><h1 class="topbox">NetworkManager D-Bus Interface Specification</h1><h2>Version 0.9.1.95</h2><div>Copyright (C) 2008 - 2011 Red Hat, Inc.</div><div>Copyright (C) 2008 - 2009 Novell, Inc.</div><div class="license">
 <p>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 of the License, or
@@ -112,7 +112,7 @@ General Public License for more details.</p>
 <p>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.</p>
-</div><h2>Interfaces</h2><ul><li><code><a href="#org.freedesktop.NetworkManager">org.freedesktop.NetworkManager</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.AccessPoint">org.freedesktop.NetworkManager.AccessPoint</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device">org.freedesktop.NetworkManager.Device</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Wired">org.freedesktop.NetworkManager.Device.Wired</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Wireless">org.freedesktop.NetworkManager.Device.Wireless</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Modem">org.freedesktop.NetworkManager.Device.Modem</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Bluetooth">org.freedesktop.NetworkManager.Device.Bluetooth</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.OlpcMesh">org.freedesktop.NetworkManager.Device.OlpcMesh</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.WiMax">org.freedesktop.NetworkManager.Device.WiMax</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.WiMax.Nsp">org.freedesktop.NetworkManager.WiMax.Nsp</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.IP4Config">org.freedesktop.NetworkManager.IP4Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.IP6Config">org.freedesktop.NetworkManager.IP6Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.DHCP4Config">org.freedesktop.NetworkManager.DHCP4Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.DHCP6Config">org.freedesktop.NetworkManager.DHCP6Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Settings">org.freedesktop.NetworkManager.Settings</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Settings.Connection">org.freedesktop.NetworkManager.Settings.Connection</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Connection.Active">org.freedesktop.NetworkManager.Connection.Active</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.AgentManager">org.freedesktop.NetworkManager.AgentManager</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.VPN.Connection">org.freedesktop.NetworkManager.VPN.Connection</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.VPN.Plugin">org.freedesktop.NetworkManager.VPN.Plugin</a></code></li></ul>
+</div><h2>Interfaces</h2><ul><li><code><a href="#org.freedesktop.NetworkManager">org.freedesktop.NetworkManager</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.AccessPoint">org.freedesktop.NetworkManager.AccessPoint</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device">org.freedesktop.NetworkManager.Device</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Wired">org.freedesktop.NetworkManager.Device.Wired</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Wireless">org.freedesktop.NetworkManager.Device.Wireless</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Modem">org.freedesktop.NetworkManager.Device.Modem</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Bluetooth">org.freedesktop.NetworkManager.Device.Bluetooth</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.OlpcMesh">org.freedesktop.NetworkManager.Device.OlpcMesh</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.WiMax">org.freedesktop.NetworkManager.Device.WiMax</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.WiMax.Nsp">org.freedesktop.NetworkManager.WiMax.Nsp</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.IP4Config">org.freedesktop.NetworkManager.IP4Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.IP6Config">org.freedesktop.NetworkManager.IP6Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.DHCP4Config">org.freedesktop.NetworkManager.DHCP4Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.DHCP6Config">org.freedesktop.NetworkManager.DHCP6Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Settings">org.freedesktop.NetworkManager.Settings</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Settings.Connection">org.freedesktop.NetworkManager.Settings.Connection</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Connection.Active">org.freedesktop.NetworkManager.Connection.Active</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.AgentManager">org.freedesktop.NetworkManager.AgentManager</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.SecretAgent">org.freedesktop.NetworkManager.SecretAgent</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.VPN.Connection">org.freedesktop.NetworkManager.VPN.Connection</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.VPN.Plugin">org.freedesktop.NetworkManager.VPN.Plugin</a></code></li></ul>
   <h1><a name="org.freedesktop.NetworkManager" id="org.freedesktop.NetworkManager"></a>org.freedesktop.NetworkManager</h1><h2>Methods:</h2><div class="method"><h3><a name="org.freedesktop.NetworkManager.GetDevices" id="org.freedesktop.NetworkManager.GetDevices">GetDevices</a> (
         
         ) &#8594;
@@ -1169,6 +1169,129 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         unregistered when they disconnect from D-Bus.
       </div></div><p>Interface has no signals.</p><p>Interface has no properties.</p>
 
+
+    <h1><a name="org.freedesktop.NetworkManager.SecretAgent" id="org.freedesktop.NetworkManager.SecretAgent"></a>org.freedesktop.NetworkManager.SecretAgent</h1>
+            Private D-Bus interface used by secret agents that store and provide
+            secrets to NetworkManager.  If an agent provides secrets to
+            NetworkManager as part of connection creation, and the some of those
+            secrets are "agent owned" the agent should store those secrets
+            itself and should not expect its SaveSecrets() method to be called.
+            SaveSecrets() will be called eg if some program other than the
+            agent itself (like a connection editor) changes the secrets out of
+            band.
+        <h2>Methods:</h2><div class="method"><h3><a name="org.freedesktop.NetworkManager.SecretAgent.GetSecrets" id="org.freedesktop.NetworkManager.SecretAgent.GetSecrets">GetSecrets</a> (
+        a{sa{sv}}: connection, o: connection_path, s: setting_name, as: hints, u: flags
+        ) &#8594;
+        a{sa{sv}}</h3><div class="docstring">
+                Retrieve and return stored secrets, if any, or request new
+                secrets from the agent's user.
+            </div><div><h4>Parameters</h4><dl><dt><code>connection</code> -
+      <code>a{sa{sv}}</code>
+      (<a xmlns="" href="#type-String_String_Variant_Map_Map">String_String_Variant_Map_Map</a>)
+    </dt><dd>
+                    Nested settings maps containing the connection for which
+                    secrets are being requested.  This may contain system-owned
+                    secrets if the agent has successfully authenticated to
+                    modify system network settings and the GetSecrets request
+                    flags allow user interaction.
+                </dd><dt><code>connection_path</code> -
+      <code>o</code></dt><dd>
+                    Object path of the connection for which secrets are being
+                    requested.
+                </dd><dt><code>setting_name</code> -
+      <code>s</code></dt><dd>
+                    Setting name for which secrets are being requested.
+                </dd><dt><code>hints</code> -
+      <code>as</code></dt><dd>
+                    Array of strings of key names in the requested setting for
+                    which NetworkManager thinks a secrets may be required,
+                    and/or well-known identifiers and data that may be useful
+                    to the client in processing the secrets request. The Agent
+                    should return any secrets it has, or that it thinks are
+                    required, regardless of what hints NetworkManager sends
+                    in this request.
+                </dd><dt><code>flags</code> -
+      <code>u</code>
+      (<a xmlns="" href="#type-NM_SECRET_AGENT_GET_SECRETS_FLAGS">NM_SECRET_AGENT_GET_SECRETS_FLAGS</a>)
+    </dt><dd>
+                    Flags which modify the behavior of the secrets request.
+                    If true, new secrets are assumed to be invalid or incorrect,
+                    and the agent should ask the user for new secrets.  If false,
+                    existing secrets should be retrieved from storage and 
+                    returned without interrupting the user.
+                </dd></dl></div><div><h4>Returns</h4><dl><dt><code>secrets</code> -
+      <code>a{sa{sv}}</code>
+      (<a xmlns="" href="#type-String_String_Variant_Map_Map">String_String_Variant_Map_Map</a>)
+    </dt><dd>
+                    Nested settings maps containing secrets.  Each setting MUST
+                    contain at least the 'name' field, containing the name of
+                    the setting, and one or more secrets.
+                </dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.SecretAgent.CancelGetSecrets" id="org.freedesktop.NetworkManager.SecretAgent.CancelGetSecrets">CancelGetSecrets</a> (
+        o: connection_path, s: setting_name
+        ) &#8594;
+        nothing</h3><div class="docstring">
+                Cancel a pending GetSecrets request for secrets of the given
+                connection.  Any matching request should be canceled.
+            </div><div><h4>Parameters</h4><dl><dt><code>connection_path</code> -
+      <code>o</code></dt><dd>
+                    Object path of the connection for which, if secrets are being
+                    requested, the request should be canceled.
+                </dd><dt><code>setting_name</code> -
+      <code>s</code></dt><dd>
+                    Setting name for which secrets for this connection were
+                    originally being requested.
+                </dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.SecretAgent.SaveSecrets" id="org.freedesktop.NetworkManager.SecretAgent.SaveSecrets">SaveSecrets</a> (
+        a{sa{sv}}: connection, o: connection_path
+        ) &#8594;
+        nothing</h3><div class="docstring">
+                Save given secrets to backing storage.
+            </div><div><h4>Parameters</h4><dl><dt><code>connection</code> -
+      <code>a{sa{sv}}</code>
+      (<a xmlns="" href="#type-String_String_Variant_Map_Map">String_String_Variant_Map_Map</a>)
+    </dt><dd>
+                    Nested settings maps containing the entire connection
+                    (including secrets), for which the agent should save the
+                    secrets to backing storage.  This method will not be called
+                    when the agent itself is the process creating or updating
+                    a connection; in that case the agent is assumed to have
+                    already saved those secrets since it had them already.
+                </dd><dt><code>connection_path</code> -
+      <code>o</code></dt><dd>
+                    Object path of the connection for which the agent should
+                    save secrets to backing storage.
+                </dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.SecretAgent.DeleteSecrets" id="org.freedesktop.NetworkManager.SecretAgent.DeleteSecrets">DeleteSecrets</a> (
+        a{sa{sv}}: connection, o: connection_path
+        ) &#8594;
+        nothing</h3><div class="docstring">
+                Delete secrets from backing storage.
+            </div><div><h4>Parameters</h4><dl><dt><code>connection</code> -
+      <code>a{sa{sv}}</code>
+      (<a xmlns="" href="#type-String_String_Variant_Map_Map">String_String_Variant_Map_Map</a>)
+    </dt><dd>
+                    Nested settings maps containing the connection properties
+                    (sans secrets), for which the agent should delete the
+                    secrets from backing storage.
+                </dd><dt><code>connection_path</code> -
+      <code>o</code></dt><dd>
+                    Object path of the connection for which the agent should
+                    delete secrets from backing storage.
+                </dd></dl></div></div><p>Interface has no signals.</p><p>Interface has no properties.</p><h2>Sets of flags:</h2><h3 xmlns=""><a name="type-NM_SECRET_AGENT_GET_SECRETS_FLAGS" id="type-NM_SECRET_AGENT_GET_SECRETS_FLAGS">NM_SECRET_AGENT_GET_SECRETS_FLAGS</a></h3>
+            Flags modifying the behavior of GetSecrets request.
+          <dl><dt><code>NM_SECRET_AGENT_GET_SECRETS_FLAG_NONE = 0x0</code></dt><dd>
+              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.
+            </dd><dt><code>NM_SECRET_AGENT_GET_SECRETS_FLAG_ALLOW_INTERACTION = 0x1</code></dt><dd>
+              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.
+            </dd><dt><code>NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW = 0x2</code></dt><dd>
+              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.
+            </dd></dl>
+
+
   <h1><a name="org.freedesktop.NetworkManager.VPN.Connection" id="org.freedesktop.NetworkManager.VPN.Connection"></a>org.freedesktop.NetworkManager.VPN.Connection</h1>
       Represents an active connection to a Virtual Private Network.
     <p>Interface has no methods.</p><h2>Signals:</h2><div class="signal"><h3><a name="org.freedesktop.NetworkManager.VPN.Connection.PropertiesChanged" id="org.freedesktop.NetworkManager.VPN.Connection.PropertiesChanged">PropertiesChanged</a> (
@@ -1379,7 +1502,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
   <h2><a name="org.freedesktop.NetworkManager.VPN.Error.BadArguments" id="org.freedesktop.NetworkManager.VPN.Error.BadArguments"></a>org.freedesktop.NetworkManager.VPN.Error.BadArguments</h2>Invalid arguments were passed with the request.  FIXME: too general.
   <h2><a name="org.freedesktop.NetworkManager.VPN.Error.LaunchFailed" id="org.freedesktop.NetworkManager.VPN.Error.LaunchFailed"></a>org.freedesktop.NetworkManager.VPN.Error.LaunchFailed</h2>A binary providing the service failed to launch.
   <h2><a name="org.freedesktop.NetworkManager.VPN.Error.ConnectionInvalid" id="org.freedesktop.NetworkManager.VPN.Error.ConnectionInvalid"></a>org.freedesktop.NetworkManager.VPN.Error.ConnectionInvalid</h2>The request could not be processed because the VPN connection settings were invalid.
-<h1>Index</h1><h2>Index of interfaces</h2><ul><li><code><a href="#org.freedesktop.NetworkManager">org.freedesktop.NetworkManager</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.AccessPoint">org.freedesktop.NetworkManager.AccessPoint</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device">org.freedesktop.NetworkManager.Device</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Wired">org.freedesktop.NetworkManager.Device.Wired</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Wireless">org.freedesktop.NetworkManager.Device.Wireless</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Modem">org.freedesktop.NetworkManager.Device.Modem</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Bluetooth">org.freedesktop.NetworkManager.Device.Bluetooth</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.OlpcMesh">org.freedesktop.NetworkManager.Device.OlpcMesh</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.WiMax">org.freedesktop.NetworkManager.Device.WiMax</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.WiMax.Nsp">org.freedesktop.NetworkManager.WiMax.Nsp</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.IP4Config">org.freedesktop.NetworkManager.IP4Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.IP6Config">org.freedesktop.NetworkManager.IP6Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.DHCP4Config">org.freedesktop.NetworkManager.DHCP4Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.DHCP6Config">org.freedesktop.NetworkManager.DHCP6Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Settings">org.freedesktop.NetworkManager.Settings</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Settings.Connection">org.freedesktop.NetworkManager.Settings.Connection</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Connection.Active">org.freedesktop.NetworkManager.Connection.Active</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.AgentManager">org.freedesktop.NetworkManager.AgentManager</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.VPN.Connection">org.freedesktop.NetworkManager.VPN.Connection</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.VPN.Plugin">org.freedesktop.NetworkManager.VPN.Plugin</a></code></li></ul><h2>Index of types</h2><ul><li><code><a href="#type-NM_802_11_AP_FLAGS">NM_802_11_AP_FLAGS</a></code>
+<h1>Index</h1><h2>Index of interfaces</h2><ul><li><code><a href="#org.freedesktop.NetworkManager">org.freedesktop.NetworkManager</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.AccessPoint">org.freedesktop.NetworkManager.AccessPoint</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device">org.freedesktop.NetworkManager.Device</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Wired">org.freedesktop.NetworkManager.Device.Wired</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Wireless">org.freedesktop.NetworkManager.Device.Wireless</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Modem">org.freedesktop.NetworkManager.Device.Modem</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Bluetooth">org.freedesktop.NetworkManager.Device.Bluetooth</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.OlpcMesh">org.freedesktop.NetworkManager.Device.OlpcMesh</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.WiMax">org.freedesktop.NetworkManager.Device.WiMax</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.WiMax.Nsp">org.freedesktop.NetworkManager.WiMax.Nsp</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.IP4Config">org.freedesktop.NetworkManager.IP4Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.IP6Config">org.freedesktop.NetworkManager.IP6Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.DHCP4Config">org.freedesktop.NetworkManager.DHCP4Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.DHCP6Config">org.freedesktop.NetworkManager.DHCP6Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Settings">org.freedesktop.NetworkManager.Settings</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Settings.Connection">org.freedesktop.NetworkManager.Settings.Connection</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Connection.Active">org.freedesktop.NetworkManager.Connection.Active</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.AgentManager">org.freedesktop.NetworkManager.AgentManager</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.SecretAgent">org.freedesktop.NetworkManager.SecretAgent</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.VPN.Connection">org.freedesktop.NetworkManager.VPN.Connection</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.VPN.Plugin">org.freedesktop.NetworkManager.VPN.Plugin</a></code></li></ul><h2>Index of types</h2><ul><li><code><a href="#type-NM_802_11_AP_FLAGS">NM_802_11_AP_FLAGS</a></code>
     - u</li><li><code><a href="#type-NM_802_11_AP_SEC">NM_802_11_AP_SEC</a></code>
     - u</li><li><code><a href="#type-NM_802_11_DEVICE_CAP">NM_802_11_DEVICE_CAP</a></code>
     - u</li><li><code><a href="#type-NM_802_11_MODE">NM_802_11_MODE</a></code>
@@ -1390,6 +1513,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
     - u</li><li><code><a href="#type-NM_DEVICE_STATE">NM_DEVICE_STATE</a></code>
     - u</li><li><code><a href="#type-NM_DEVICE_STATE_REASON">NM_DEVICE_STATE_REASON</a></code>
     - u</li><li><code><a href="#type-NM_DEVICE_TYPE">NM_DEVICE_TYPE</a></code>
+    - u</li><li><code><a href="#type-NM_SECRET_AGENT_GET_SECRETS_FLAGS">NM_SECRET_AGENT_GET_SECRETS_FLAGS</a></code>
     - u</li><li><code><a href="#type-NM_STATE">NM_STATE</a></code>
     - u</li><li><code><a href="#type-NM_VPN_CONNECTION_STATE">NM_VPN_CONNECTION_STATE</a></code>
     - u</li><li><code><a href="#type-NM_VPN_CONNECTION_STATE_REASON">NM_VPN_CONNECTION_STATE_REASON</a></code>
diff --git a/docs/api/spec.html b/docs/api/spec.html
index c8abf6ca..3d38d7e3 100644
--- a/docs/api/spec.html
+++ b/docs/api/spec.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ascii" /><title>NetworkManager D-Bus Interface Specification version 0.9.0</title><style type="text/css">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ascii" /><title>NetworkManager D-Bus Interface Specification version 0.9.1.95</title><style type="text/css">
 
           body {
             font-family: sans-serif;
@@ -98,7 +98,7 @@
             margin-right: 4em;
           }
 
-        </style></head><body><h1 class="topbox">NetworkManager D-Bus Interface Specification</h1><h2>Version 0.9.0</h2><div>Copyright (C) 2008 - 2011 Red Hat, Inc.</div><div>Copyright (C) 2008 - 2009 Novell, Inc.</div><div class="license">
+        </style></head><body><h1 class="topbox">NetworkManager D-Bus Interface Specification</h1><h2>Version 0.9.1.95</h2><div>Copyright (C) 2008 - 2011 Red Hat, Inc.</div><div>Copyright (C) 2008 - 2009 Novell, Inc.</div><div class="license">
 <p>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 of the License, or
@@ -112,7 +112,7 @@ General Public License for more details.</p>
 <p>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.</p>
-</div><h2>Interfaces</h2><ul><li><code><a href="#org.freedesktop.NetworkManager">org.freedesktop.NetworkManager</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.AccessPoint">org.freedesktop.NetworkManager.AccessPoint</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device">org.freedesktop.NetworkManager.Device</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Wired">org.freedesktop.NetworkManager.Device.Wired</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Wireless">org.freedesktop.NetworkManager.Device.Wireless</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Modem">org.freedesktop.NetworkManager.Device.Modem</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Bluetooth">org.freedesktop.NetworkManager.Device.Bluetooth</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.OlpcMesh">org.freedesktop.NetworkManager.Device.OlpcMesh</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.WiMax">org.freedesktop.NetworkManager.Device.WiMax</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.WiMax.Nsp">org.freedesktop.NetworkManager.WiMax.Nsp</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.IP4Config">org.freedesktop.NetworkManager.IP4Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.IP6Config">org.freedesktop.NetworkManager.IP6Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.DHCP4Config">org.freedesktop.NetworkManager.DHCP4Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.DHCP6Config">org.freedesktop.NetworkManager.DHCP6Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Settings">org.freedesktop.NetworkManager.Settings</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Settings.Connection">org.freedesktop.NetworkManager.Settings.Connection</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Connection.Active">org.freedesktop.NetworkManager.Connection.Active</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.AgentManager">org.freedesktop.NetworkManager.AgentManager</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.VPN.Connection">org.freedesktop.NetworkManager.VPN.Connection</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.VPN.Plugin">org.freedesktop.NetworkManager.VPN.Plugin</a></code></li></ul>
+</div><h2>Interfaces</h2><ul><li><code><a href="#org.freedesktop.NetworkManager">org.freedesktop.NetworkManager</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.AccessPoint">org.freedesktop.NetworkManager.AccessPoint</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device">org.freedesktop.NetworkManager.Device</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Wired">org.freedesktop.NetworkManager.Device.Wired</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Wireless">org.freedesktop.NetworkManager.Device.Wireless</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Modem">org.freedesktop.NetworkManager.Device.Modem</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Bluetooth">org.freedesktop.NetworkManager.Device.Bluetooth</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.OlpcMesh">org.freedesktop.NetworkManager.Device.OlpcMesh</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.WiMax">org.freedesktop.NetworkManager.Device.WiMax</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.WiMax.Nsp">org.freedesktop.NetworkManager.WiMax.Nsp</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.IP4Config">org.freedesktop.NetworkManager.IP4Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.IP6Config">org.freedesktop.NetworkManager.IP6Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.DHCP4Config">org.freedesktop.NetworkManager.DHCP4Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.DHCP6Config">org.freedesktop.NetworkManager.DHCP6Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Settings">org.freedesktop.NetworkManager.Settings</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Settings.Connection">org.freedesktop.NetworkManager.Settings.Connection</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Connection.Active">org.freedesktop.NetworkManager.Connection.Active</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.AgentManager">org.freedesktop.NetworkManager.AgentManager</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.SecretAgent">org.freedesktop.NetworkManager.SecretAgent</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.VPN.Connection">org.freedesktop.NetworkManager.VPN.Connection</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.VPN.Plugin">org.freedesktop.NetworkManager.VPN.Plugin</a></code></li></ul>
   <h1><a name="org.freedesktop.NetworkManager" id="org.freedesktop.NetworkManager"></a>org.freedesktop.NetworkManager</h1><h2>Methods:</h2><div class="method"><h3><a name="org.freedesktop.NetworkManager.GetDevices" id="org.freedesktop.NetworkManager.GetDevices">GetDevices</a> (
         
         ) &#8594;
@@ -1169,6 +1169,129 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         unregistered when they disconnect from D-Bus.
       </div></div><p>Interface has no signals.</p><p>Interface has no properties.</p>
 
+
+    <h1><a name="org.freedesktop.NetworkManager.SecretAgent" id="org.freedesktop.NetworkManager.SecretAgent"></a>org.freedesktop.NetworkManager.SecretAgent</h1>
+            Private D-Bus interface used by secret agents that store and provide
+            secrets to NetworkManager.  If an agent provides secrets to
+            NetworkManager as part of connection creation, and the some of those
+            secrets are "agent owned" the agent should store those secrets
+            itself and should not expect its SaveSecrets() method to be called.
+            SaveSecrets() will be called eg if some program other than the
+            agent itself (like a connection editor) changes the secrets out of
+            band.
+        <h2>Methods:</h2><div class="method"><h3><a name="org.freedesktop.NetworkManager.SecretAgent.GetSecrets" id="org.freedesktop.NetworkManager.SecretAgent.GetSecrets">GetSecrets</a> (
+        a{sa{sv}}: connection, o: connection_path, s: setting_name, as: hints, u: flags
+        ) &#8594;
+        a{sa{sv}}</h3><div class="docstring">
+                Retrieve and return stored secrets, if any, or request new
+                secrets from the agent's user.
+            </div><div><h4>Parameters</h4><dl><dt><code>connection</code> -
+      <code>a{sa{sv}}</code>
+      (<a xmlns="" href="#type-String_String_Variant_Map_Map">String_String_Variant_Map_Map</a>)
+    </dt><dd>
+                    Nested settings maps containing the connection for which
+                    secrets are being requested.  This may contain system-owned
+                    secrets if the agent has successfully authenticated to
+                    modify system network settings and the GetSecrets request
+                    flags allow user interaction.
+                </dd><dt><code>connection_path</code> -
+      <code>o</code></dt><dd>
+                    Object path of the connection for which secrets are being
+                    requested.
+                </dd><dt><code>setting_name</code> -
+      <code>s</code></dt><dd>
+                    Setting name for which secrets are being requested.
+                </dd><dt><code>hints</code> -
+      <code>as</code></dt><dd>
+                    Array of strings of key names in the requested setting for
+                    which NetworkManager thinks a secrets may be required,
+                    and/or well-known identifiers and data that may be useful
+                    to the client in processing the secrets request. The Agent
+                    should return any secrets it has, or that it thinks are
+                    required, regardless of what hints NetworkManager sends
+                    in this request.
+                </dd><dt><code>flags</code> -
+      <code>u</code>
+      (<a xmlns="" href="#type-NM_SECRET_AGENT_GET_SECRETS_FLAGS">NM_SECRET_AGENT_GET_SECRETS_FLAGS</a>)
+    </dt><dd>
+                    Flags which modify the behavior of the secrets request.
+                    If true, new secrets are assumed to be invalid or incorrect,
+                    and the agent should ask the user for new secrets.  If false,
+                    existing secrets should be retrieved from storage and 
+                    returned without interrupting the user.
+                </dd></dl></div><div><h4>Returns</h4><dl><dt><code>secrets</code> -
+      <code>a{sa{sv}}</code>
+      (<a xmlns="" href="#type-String_String_Variant_Map_Map">String_String_Variant_Map_Map</a>)
+    </dt><dd>
+                    Nested settings maps containing secrets.  Each setting MUST
+                    contain at least the 'name' field, containing the name of
+                    the setting, and one or more secrets.
+                </dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.SecretAgent.CancelGetSecrets" id="org.freedesktop.NetworkManager.SecretAgent.CancelGetSecrets">CancelGetSecrets</a> (
+        o: connection_path, s: setting_name
+        ) &#8594;
+        nothing</h3><div class="docstring">
+                Cancel a pending GetSecrets request for secrets of the given
+                connection.  Any matching request should be canceled.
+            </div><div><h4>Parameters</h4><dl><dt><code>connection_path</code> -
+      <code>o</code></dt><dd>
+                    Object path of the connection for which, if secrets are being
+                    requested, the request should be canceled.
+                </dd><dt><code>setting_name</code> -
+      <code>s</code></dt><dd>
+                    Setting name for which secrets for this connection were
+                    originally being requested.
+                </dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.SecretAgent.SaveSecrets" id="org.freedesktop.NetworkManager.SecretAgent.SaveSecrets">SaveSecrets</a> (
+        a{sa{sv}}: connection, o: connection_path
+        ) &#8594;
+        nothing</h3><div class="docstring">
+                Save given secrets to backing storage.
+            </div><div><h4>Parameters</h4><dl><dt><code>connection</code> -
+      <code>a{sa{sv}}</code>
+      (<a xmlns="" href="#type-String_String_Variant_Map_Map">String_String_Variant_Map_Map</a>)
+    </dt><dd>
+                    Nested settings maps containing the entire connection
+                    (including secrets), for which the agent should save the
+                    secrets to backing storage.  This method will not be called
+                    when the agent itself is the process creating or updating
+                    a connection; in that case the agent is assumed to have
+                    already saved those secrets since it had them already.
+                </dd><dt><code>connection_path</code> -
+      <code>o</code></dt><dd>
+                    Object path of the connection for which the agent should
+                    save secrets to backing storage.
+                </dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.SecretAgent.DeleteSecrets" id="org.freedesktop.NetworkManager.SecretAgent.DeleteSecrets">DeleteSecrets</a> (
+        a{sa{sv}}: connection, o: connection_path
+        ) &#8594;
+        nothing</h3><div class="docstring">
+                Delete secrets from backing storage.
+            </div><div><h4>Parameters</h4><dl><dt><code>connection</code> -
+      <code>a{sa{sv}}</code>
+      (<a xmlns="" href="#type-String_String_Variant_Map_Map">String_String_Variant_Map_Map</a>)
+    </dt><dd>
+                    Nested settings maps containing the connection properties
+                    (sans secrets), for which the agent should delete the
+                    secrets from backing storage.
+                </dd><dt><code>connection_path</code> -
+      <code>o</code></dt><dd>
+                    Object path of the connection for which the agent should
+                    delete secrets from backing storage.
+                </dd></dl></div></div><p>Interface has no signals.</p><p>Interface has no properties.</p><h2>Sets of flags:</h2><h3 xmlns=""><a name="type-NM_SECRET_AGENT_GET_SECRETS_FLAGS" id="type-NM_SECRET_AGENT_GET_SECRETS_FLAGS">NM_SECRET_AGENT_GET_SECRETS_FLAGS</a></h3>
+            Flags modifying the behavior of GetSecrets request.
+          <dl><dt><code>NM_SECRET_AGENT_GET_SECRETS_FLAG_NONE = 0x0</code></dt><dd>
+              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.
+            </dd><dt><code>NM_SECRET_AGENT_GET_SECRETS_FLAG_ALLOW_INTERACTION = 0x1</code></dt><dd>
+              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.
+            </dd><dt><code>NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW = 0x2</code></dt><dd>
+              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.
+            </dd></dl>
+
+
   <h1><a name="org.freedesktop.NetworkManager.VPN.Connection" id="org.freedesktop.NetworkManager.VPN.Connection"></a>org.freedesktop.NetworkManager.VPN.Connection</h1>
       Represents an active connection to a Virtual Private Network.
     <p>Interface has no methods.</p><h2>Signals:</h2><div class="signal"><h3><a name="org.freedesktop.NetworkManager.VPN.Connection.PropertiesChanged" id="org.freedesktop.NetworkManager.VPN.Connection.PropertiesChanged">PropertiesChanged</a> (
@@ -1379,7 +1502,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
   <h2><a name="org.freedesktop.NetworkManager.VPN.Error.BadArguments" id="org.freedesktop.NetworkManager.VPN.Error.BadArguments"></a>org.freedesktop.NetworkManager.VPN.Error.BadArguments</h2>Invalid arguments were passed with the request.  FIXME: too general.
   <h2><a name="org.freedesktop.NetworkManager.VPN.Error.LaunchFailed" id="org.freedesktop.NetworkManager.VPN.Error.LaunchFailed"></a>org.freedesktop.NetworkManager.VPN.Error.LaunchFailed</h2>A binary providing the service failed to launch.
   <h2><a name="org.freedesktop.NetworkManager.VPN.Error.ConnectionInvalid" id="org.freedesktop.NetworkManager.VPN.Error.ConnectionInvalid"></a>org.freedesktop.NetworkManager.VPN.Error.ConnectionInvalid</h2>The request could not be processed because the VPN connection settings were invalid.
-<h1>Index</h1><h2>Index of interfaces</h2><ul><li><code><a href="#org.freedesktop.NetworkManager">org.freedesktop.NetworkManager</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.AccessPoint">org.freedesktop.NetworkManager.AccessPoint</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device">org.freedesktop.NetworkManager.Device</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Wired">org.freedesktop.NetworkManager.Device.Wired</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Wireless">org.freedesktop.NetworkManager.Device.Wireless</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Modem">org.freedesktop.NetworkManager.Device.Modem</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Bluetooth">org.freedesktop.NetworkManager.Device.Bluetooth</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.OlpcMesh">org.freedesktop.NetworkManager.Device.OlpcMesh</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.WiMax">org.freedesktop.NetworkManager.Device.WiMax</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.WiMax.Nsp">org.freedesktop.NetworkManager.WiMax.Nsp</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.IP4Config">org.freedesktop.NetworkManager.IP4Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.IP6Config">org.freedesktop.NetworkManager.IP6Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.DHCP4Config">org.freedesktop.NetworkManager.DHCP4Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.DHCP6Config">org.freedesktop.NetworkManager.DHCP6Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Settings">org.freedesktop.NetworkManager.Settings</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Settings.Connection">org.freedesktop.NetworkManager.Settings.Connection</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Connection.Active">org.freedesktop.NetworkManager.Connection.Active</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.AgentManager">org.freedesktop.NetworkManager.AgentManager</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.VPN.Connection">org.freedesktop.NetworkManager.VPN.Connection</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.VPN.Plugin">org.freedesktop.NetworkManager.VPN.Plugin</a></code></li></ul><h2>Index of types</h2><ul><li><code><a href="#type-NM_802_11_AP_FLAGS">NM_802_11_AP_FLAGS</a></code>
+<h1>Index</h1><h2>Index of interfaces</h2><ul><li><code><a href="#org.freedesktop.NetworkManager">org.freedesktop.NetworkManager</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.AccessPoint">org.freedesktop.NetworkManager.AccessPoint</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device">org.freedesktop.NetworkManager.Device</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Wired">org.freedesktop.NetworkManager.Device.Wired</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Wireless">org.freedesktop.NetworkManager.Device.Wireless</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Modem">org.freedesktop.NetworkManager.Device.Modem</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.Bluetooth">org.freedesktop.NetworkManager.Device.Bluetooth</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.OlpcMesh">org.freedesktop.NetworkManager.Device.OlpcMesh</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Device.WiMax">org.freedesktop.NetworkManager.Device.WiMax</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.WiMax.Nsp">org.freedesktop.NetworkManager.WiMax.Nsp</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.IP4Config">org.freedesktop.NetworkManager.IP4Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.IP6Config">org.freedesktop.NetworkManager.IP6Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.DHCP4Config">org.freedesktop.NetworkManager.DHCP4Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.DHCP6Config">org.freedesktop.NetworkManager.DHCP6Config</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Settings">org.freedesktop.NetworkManager.Settings</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Settings.Connection">org.freedesktop.NetworkManager.Settings.Connection</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.Connection.Active">org.freedesktop.NetworkManager.Connection.Active</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.AgentManager">org.freedesktop.NetworkManager.AgentManager</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.SecretAgent">org.freedesktop.NetworkManager.SecretAgent</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.VPN.Connection">org.freedesktop.NetworkManager.VPN.Connection</a></code></li><li><code><a href="#org.freedesktop.NetworkManager.VPN.Plugin">org.freedesktop.NetworkManager.VPN.Plugin</a></code></li></ul><h2>Index of types</h2><ul><li><code><a href="#type-NM_802_11_AP_FLAGS">NM_802_11_AP_FLAGS</a></code>
     - u</li><li><code><a href="#type-NM_802_11_AP_SEC">NM_802_11_AP_SEC</a></code>
     - u</li><li><code><a href="#type-NM_802_11_DEVICE_CAP">NM_802_11_DEVICE_CAP</a></code>
     - u</li><li><code><a href="#type-NM_802_11_MODE">NM_802_11_MODE</a></code>
@@ -1390,6 +1513,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
     - u</li><li><code><a href="#type-NM_DEVICE_STATE">NM_DEVICE_STATE</a></code>
     - u</li><li><code><a href="#type-NM_DEVICE_STATE_REASON">NM_DEVICE_STATE_REASON</a></code>
     - u</li><li><code><a href="#type-NM_DEVICE_TYPE">NM_DEVICE_TYPE</a></code>
+    - u</li><li><code><a href="#type-NM_SECRET_AGENT_GET_SECRETS_FLAGS">NM_SECRET_AGENT_GET_SECRETS_FLAGS</a></code>
     - u</li><li><code><a href="#type-NM_STATE">NM_STATE</a></code>
     - u</li><li><code><a href="#type-NM_VPN_CONNECTION_STATE">NM_VPN_CONNECTION_STATE</a></code>
     - u</li><li><code><a href="#type-NM_VPN_CONNECTION_STATE_REASON">NM_VPN_CONNECTION_STATE_REASON</a></code>
diff --git a/docs/api/version.xml b/docs/api/version.xml
index ac39a106..dbd0ed64 100644
--- a/docs/api/version.xml
+++ b/docs/api/version.xml
@@ -1 +1 @@
-0.9.0
+0.9.1.95
diff --git a/docs/libnm-glib/Makefile.am b/docs/libnm-glib/Makefile.am
index 7dfea79a..dcca994b 100644
--- a/docs/libnm-glib/Makefile.am
+++ b/docs/libnm-glib/Makefile.am
@@ -64,7 +64,7 @@ HTML_IMAGES = libnm-glib.png
 content_files = 
 
 # Other files to distribute.
-extra_files =
+extra_files = libnm-glib.png
 
 
 # CFLAGS and LDFLAGS for compiling scan program. Only needed
diff --git a/docs/libnm-glib/Makefile.in b/docs/libnm-glib/Makefile.in
index 775d33be..7ebf62ad 100644
--- a/docs/libnm-glib/Makefile.in
+++ b/docs/libnm-glib/Makefile.in
@@ -159,8 +159,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
@@ -341,7 +349,7 @@ HTML_IMAGES = libnm-glib.png
 content_files = 
 
 # Other files to distribute.
-extra_files = 
+extra_files = libnm-glib.png
 
 # CFLAGS and LDFLAGS for compiling scan program. Only needed
 # if $(DOC_MODULE).types is non-empty.
diff --git a/docs/libnm-glib/html/NMDevice.html b/docs/libnm-glib/html/NMDevice.html
index 2b01b135..94866102 100644
--- a/docs/libnm-glib/html/NMDevice.html
+++ b/docs/libnm-glib/html/NMDevice.html
@@ -729,12 +729,13 @@ request.
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
-<td>callback to be called when disconnect operation completes. <span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>]</span>
+<td>callback to be called when disconnect
+operation completes. <span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
 </td>
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
-<td>caller-specific data passed to <em class="parameter"><code>callback</code></em>
+<td>caller-specific data passed to <em class="parameter"><code>callback</code></em>. <span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span>
 </td>
 </tr>
 </tbody>
diff --git a/docs/libnm-glib/html/NMRemoteConnection.html b/docs/libnm-glib/html/NMRemoteConnection.html
index 87aaf32b..bbdd59fd 100644
--- a/docs/libnm-glib/html/NMRemoteConnection.html
+++ b/docs/libnm-glib/html/NMRemoteConnection.html
@@ -221,12 +221,13 @@ save them in the settings service.
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
-<td>a function to be called when the commit completes. <span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>]</span>
+<td>a function to be called when the
+commit completes. <span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>][allow none]</span>
 </td>
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
-<td>caller-specific data to be passed to <em class="parameter"><code>callback</code></em>
+<td>caller-specific data to be passed to <em class="parameter"><code>callback</code></em>. <span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span>
 </td>
 </tr>
 </tbody>
@@ -256,7 +257,7 @@ Delete the connection.
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
-<td>caller-specific data to be passed to <em class="parameter"><code>callback</code></em>
+<td>caller-specific data to be passed to <em class="parameter"><code>callback</code></em>. <span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span>
 </td>
 </tr>
 </tbody>
@@ -286,12 +287,13 @@ Request the connection's secrets.
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
-<td>a function to be called when the update completes. <span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>]</span>
+<td>a function to be called when the update completes;
+must not be NULL. <span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>]</span>
 </td>
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
-<td>caller-specific data to be passed to <em class="parameter"><code>callback</code></em>
+<td>caller-specific data to be passed to <em class="parameter"><code>callback</code></em>. <span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span>
 </td>
 </tr>
 </tbody>
diff --git a/docs/libnm-glib/html/NMRemoteSettings.html b/docs/libnm-glib/html/NMRemoteSettings.html
index 0457a567..09f803ff 100644
--- a/docs/libnm-glib/html/NMRemoteSettings.html
+++ b/docs/libnm-glib/html/NMRemoteSettings.html
@@ -421,7 +421,7 @@ added, not the object itself</td>
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
-<td>caller-specific data passed to <em class="parameter"><code>callback</code></em>
+<td>caller-specific data passed to <em class="parameter"><code>callback</code></em>. <span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span>
 </td>
 </tr>
 <tr>
@@ -457,12 +457,13 @@ persistent hostname</td>
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
-<td>callback to be called when the hostname operation completes. <span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>]</span>
+<td>callback to be called when the
+hostname operation completes. <span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>][allow none]</span>
 </td>
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
-<td>caller-specific data passed to <em class="parameter"><code>callback</code></em>
+<td>caller-specific data passed to <em class="parameter"><code>callback</code></em>. <span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span>
 </td>
 </tr>
 <tr>
diff --git a/docs/libnm-glib/html/NMSecretAgent.html b/docs/libnm-glib/html/NMSecretAgent.html
index 4b08499c..ff6be0da 100644
--- a/docs/libnm-glib/html/NMSecretAgent.html
+++ b/docs/libnm-glib/html/NMSecretAgent.html
@@ -75,15 +75,15 @@ enum                <a class="link" href="NMSecretAgent.html#NMSecretAgentGetSec
                                                          <em class="parameter"><code>const <span class="type">char</span> **hints</code></em>,
                                                          <em class="parameter"><code><a class="link" href="NMSecretAgent.html#NMSecretAgentGetSecretsFlags" title="enum NMSecretAgentGetSecretsFlags"><span class="type">NMSecretAgentGetSecretsFlags</span></a> flags</code></em>,
                                                          <em class="parameter"><code><a class="link" href="NMSecretAgent.html#NMSecretAgentGetSecretsFunc" title="NMSecretAgentGetSecretsFunc ()"><span class="type">NMSecretAgentGetSecretsFunc</span></a> callback</code></em>,
-                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> callback_data</code></em>);
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="NMSecretAgent.html#nm-secret-agent-save-secrets" title="nm_secret_agent_save_secrets ()">nm_secret_agent_save_secrets</a>        (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *self</code></em>,
                                                          <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
                                                          <em class="parameter"><code><a class="link" href="NMSecretAgent.html#NMSecretAgentSaveSecretsFunc" title="NMSecretAgentSaveSecretsFunc ()"><span class="type">NMSecretAgentSaveSecretsFunc</span></a> callback</code></em>,
-                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> callback_data</code></em>);
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="NMSecretAgent.html#nm-secret-agent-delete-secrets" title="nm_secret_agent_delete_secrets ()">nm_secret_agent_delete_secrets</a>      (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *self</code></em>,
                                                          <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
                                                          <em class="parameter"><code><a class="link" href="NMSecretAgent.html#NMSecretAgentDeleteSecretsFunc" title="NMSecretAgentDeleteSecretsFunc ()"><span class="type">NMSecretAgentDeleteSecretsFunc</span></a> callback</code></em>,
-                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> callback_data</code></em>);
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
 </pre>
 </div>
 <div class="refsect1">
@@ -263,7 +263,7 @@ is allowed.
 	/* 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
+	 * and 'user_data' of course).  If the request is canceled, the callback
 	 * should still be called, but with the NM_SECRET_AGENT_ERROR_AGENT_CANCELED
 	 * error.
 	 */
@@ -274,7 +274,7 @@ is allowed.
 	                     const char **hints,
 	                     NMSecretAgentGetSecretsFlags flags,
 	                     NMSecretAgentGetSecretsFunc callback,
-	                     gpointer callback_data);
+	                     gpointer user_data);
 
 	/* Called when the subclass should cancel an outstanding request to
 	 * get secrets for a given connection.  Canceling the request MUST
@@ -289,26 +289,26 @@ is allowed.
 	/* 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'
+	 * arguments will freed (except for 'agent', 'callback', and 'user_data'
 	 * of course).
 	 */
 	void (*save_secrets) (NMSecretAgent *agent,
 	                      NMConnection *connection,
 	                      const char *connection_path,
 	                      NMSecretAgentSaveSecretsFunc callback,
-	                      gpointer callback_data);
+	                      gpointer user_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'
+	 * arguments will freed (except for 'agent', 'callback', and 'user_data'
 	 * of course).
 	 */
 	void (*delete_secrets) (NMSecretAgent *agent,
 	                        NMConnection *connection,
 	                        const char *connection_path,
 	                        NMSecretAgentDeleteSecretsFunc callback,
-	                        gpointer callback_data);
+	                        gpointer user_data);
 
 	/* Signals */
 	void (*registration_result) (NMSecretAgent *agent, GError *error);
@@ -393,7 +393,7 @@ store secrets on behalf of this user.
                                                          <em class="parameter"><code>const <span class="type">char</span> **hints</code></em>,
                                                          <em class="parameter"><code><a class="link" href="NMSecretAgent.html#NMSecretAgentGetSecretsFlags" title="enum NMSecretAgentGetSecretsFlags"><span class="type">NMSecretAgentGetSecretsFlags</span></a> flags</code></em>,
                                                          <em class="parameter"><code><a class="link" href="NMSecretAgent.html#NMSecretAgentGetSecretsFunc" title="NMSecretAgentGetSecretsFunc ()"><span class="type">NMSecretAgentGetSecretsFunc</span></a> callback</code></em>,
-                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> callback_data</code></em>);</pre>
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
 <p>
 Asyncronously retrieve secrets belonging to <em class="parameter"><code>connection</code></em> for the
 setting <em class="parameter"><code>setting_name</code></em>.  <em class="parameter"><code>flags</code></em> indicate specific behavior that the secret
@@ -435,8 +435,8 @@ VFunc: get_secrets
 </td>
 </tr>
 <tr>
-<td><p><span class="term"><em class="parameter"><code>callback_data</code></em> :</span></p></td>
-<td>. <span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>caller-specific data to be passed to <em class="parameter"><code>callback</code></em>. <span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span>
 </td>
 </tr>
 </tbody>
@@ -448,7 +448,7 @@ VFunc: get_secrets
 <pre class="programlisting"><span class="returnvalue">void</span>                nm_secret_agent_save_secrets        (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *self</code></em>,
                                                          <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
                                                          <em class="parameter"><code><a class="link" href="NMSecretAgent.html#NMSecretAgentSaveSecretsFunc" title="NMSecretAgentSaveSecretsFunc ()"><span class="type">NMSecretAgentSaveSecretsFunc</span></a> callback</code></em>,
-                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> callback_data</code></em>);</pre>
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
 <p>
 Asyncronously ensure that all secrets inside <em class="parameter"><code>connection</code></em>
 are stored to disk.
@@ -475,8 +475,8 @@ VFunc: save_secrets
 </td>
 </tr>
 <tr>
-<td><p><span class="term"><em class="parameter"><code>callback_data</code></em> :</span></p></td>
-<td>. <span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>caller-specific data to be passed to <em class="parameter"><code>callback</code></em>. <span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span>
 </td>
 </tr>
 </tbody>
@@ -488,7 +488,7 @@ VFunc: save_secrets
 <pre class="programlisting"><span class="returnvalue">void</span>                nm_secret_agent_delete_secrets      (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *self</code></em>,
                                                          <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
                                                          <em class="parameter"><code><a class="link" href="NMSecretAgent.html#NMSecretAgentDeleteSecretsFunc" title="NMSecretAgentDeleteSecretsFunc ()"><span class="type">NMSecretAgentDeleteSecretsFunc</span></a> callback</code></em>,
-                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> callback_data</code></em>);</pre>
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
 <p>
 Asynchronously ask the agent to delete all saved secrets belonging to
 <em class="parameter"><code>connection</code></em>.
@@ -515,8 +515,8 @@ VFunc: delete_secrets
 </td>
 </tr>
 <tr>
-<td><p><span class="term"><em class="parameter"><code>callback_data</code></em> :</span></p></td>
-<td>. <span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>caller-specific data to be passed to <em class="parameter"><code>callback</code></em>. <span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span>
 </td>
 </tr>
 </tbody>
diff --git a/docs/libnm-glib/html/ch02.html b/docs/libnm-glib/html/ch02.html
index 4aa9ceee..5ed579ad 100644
--- a/docs/libnm-glib/html/ch02.html
+++ b/docs/libnm-glib/html/ch02.html
@@ -21,7 +21,7 @@
 </tr></table>
 <div class="chapter">
 <div class="titlepage"><div><div><h2 class="title">
-<a name="id446675"></a>libnm-glib API Reference</h2></div></div></div>
+<a name="id395407"></a>libnm-glib API Reference</h2></div></div></div>
 <div class="toc"><dl>
 <dt>
 <span class="refentrytitle"><a href="NMClient.html">NMClient</a></span><span class="refpurpose"></span>
diff --git a/docs/libnm-glib/html/index.html b/docs/libnm-glib/html/index.html
index 10f59ff8..c64038ed 100644
--- a/docs/libnm-glib/html/index.html
+++ b/docs/libnm-glib/html/index.html
@@ -29,7 +29,7 @@
     </p></div>
 <div><p class="copyright">Copyright © 2011 The NetworkManager Authors</p></div>
 <div><div class="legalnotice">
-<a name="id417078"></a><p>
+<a name="id365810"></a><p>
 	Permission is granted to copy, distribute and/or modify this
 	document under the terms of the <em class="citetitle">GNU Free
 	Documentation License</em>, Version 1.1 or any later
diff --git a/docs/libnm-util/Makefile.in b/docs/libnm-util/Makefile.in
index 0b90a06e..43d198aa 100644
--- a/docs/libnm-util/Makefile.in
+++ b/docs/libnm-util/Makefile.in
@@ -159,8 +159,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/docs/libnm-util/html/NMConnection.html b/docs/libnm-util/html/NMConnection.html
index c700c0d9..3eb0788a 100644
--- a/docs/libnm-util/html/NMConnection.html
+++ b/docs/libnm-util/html/NMConnection.html
@@ -82,6 +82,10 @@ enum                <a class="link" href="NMConnection.html#NMConnectionError">N
 const <span class="returnvalue">char</span> *        <a class="link" href="NMConnection.html#nm-connection-need-secrets" title="nm_connection_need_secrets ()">nm_connection_need_secrets</a>          (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> **hints</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="NMConnection.html#nm-connection-clear-secrets" title="nm_connection_clear_secrets ()">nm_connection_clear_secrets</a>         (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="NMConnection.html#nm-connection-clear-secrets-with-flags" title="nm_connection_clear_secrets_with_flags ()">nm_connection_clear_secrets_with_flags</a>
+                                                        (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingClearSecretsWithFlagsFn" title="NMSettingClearSecretsWithFlagsFn ()"><span class="type">NMSettingClearSecretsWithFlagsFn</span></a> func</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="NMConnection.html#nm-connection-update-secrets" title="nm_connection_update_secrets ()">nm_connection_update_secrets</a>        (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
                                                          <em class="parameter"><code>const <span class="type">char</span> *setting_name</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *secrets</code></em>,
@@ -89,6 +93,8 @@ const <span class="returnvalue">char</span> *        <a class="link" href="NMCon
 <span class="returnvalue">void</span>                <a class="link" href="NMConnection.html#nm-connection-set-path" title="nm_connection_set_path ()">nm_connection_set_path</a>              (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
                                                          <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);
 const <span class="returnvalue">char</span> *        <a class="link" href="NMConnection.html#nm-connection-get-path" title="nm_connection_get_path ()">nm_connection_get_path</a>              (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="NMConnection.html#nm-connection-is-type" title="nm_connection_is_type ()">nm_connection_is_type</a>               (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *type</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="NMConnection.html#nm-connection-for-each-setting-value" title="nm_connection_for_each_setting_value ()">nm_connection_for_each_setting_value</a>
                                                         (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
                                                          <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingValueIterFn" title="NMSettingValueIterFn ()"><span class="type">NMSettingValueIterFn</span></a> func</code></em>,
@@ -153,6 +159,7 @@ const <span class="returnvalue">char</span> *        <a class="link" href="NMCon
 <div class="refsect1">
 <a name="NMConnection.signals"></a><h2>Signals</h2>
 <pre class="synopsis">
+  "<a class="link" href="NMConnection.html#NMConnection-secrets-cleared" title='The "secrets-cleared" signal'>secrets-cleared</a>"                                : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a>
   "<a class="link" href="NMConnection.html#NMConnection-secrets-updated" title='The "secrets-updated" signal'>secrets-updated</a>"                                : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a>
 </pre>
 </div>
@@ -700,6 +707,38 @@ keeping secret data in memory when not needed.
 </div>
 <hr>
 <div class="refsect2">
+<a name="nm-connection-clear-secrets-with-flags"></a><h3>nm_connection_clear_secrets_with_flags ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                nm_connection_clear_secrets_with_flags
+                                                        (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingClearSecretsWithFlagsFn" title="NMSettingClearSecretsWithFlagsFn ()"><span class="type">NMSettingClearSecretsWithFlagsFn</span></a> func</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Clears and frees secrets determined by <em class="parameter"><code>func</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>func</code></em> :</span></p></td>
+<td>function to be called to determine whether a
+specific secret should be cleared or not. <span class="annotation">[<acronym title="The callback is valid only during the call to the method."><span class="acronym">scope call</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>caller-supplied data passed to <em class="parameter"><code>func</code></em>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
 <a name="nm-connection-update-secrets"></a><h3>nm_connection_update_secrets ()</h3>
 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            nm_connection_update_secrets        (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
                                                          <em class="parameter"><code>const <span class="type">char</span> *setting_name</code></em>,
@@ -796,6 +835,37 @@ Returns the connection's D-Bus path.
 </div>
 <hr>
 <div class="refsect2">
+<a name="nm-connection-is-type"></a><h3>nm_connection_is_type ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            nm_connection_is_type               (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *type</code></em>);</pre>
+<p>
+A convenience function to check if the given <em class="parameter"><code>connection</code></em> is a particular
+type (ie wired, wifi, ppp, etc). Checks the <a class="link" href="NMSettingConnection.html#NMSettingConnection--type" title='The "type" property'><span class="type">"type"</span></a>
+property of the connection and matches that against <em class="parameter"><code>type</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>type</code></em> :</span></p></td>
+<td>a setting name to check the connection's type against (like
+<a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-SETTING-NAME:CAPS" title="NM_SETTING_WIRELESS_SETTING_NAME"><code class="literal">NM_SETTING_WIRELESS_SETTING_NAME</code></a> or <a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-SETTING-NAME:CAPS" title="NM_SETTING_WIRED_SETTING_NAME"><code class="literal">NM_SETTING_WIRED_SETTING_NAME</code></a>)</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the connection is of the given <em class="parameter"><code>type</code></em>, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
 <a name="nm-connection-for-each-setting-value"></a><h3>nm_connection_for_each_setting_value ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>                nm_connection_for_each_setting_value
                                                         (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
@@ -1344,6 +1414,29 @@ of the D-Bus path of the connection as provided by a settings service.
 <div class="refsect1">
 <a name="NMConnection.signal-details"></a><h2>Signal Details</h2>
 <div class="refsect2">
+<a name="NMConnection-secrets-cleared"></a><h3>The <code class="literal">"secrets-cleared"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>      user_data)       : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a></pre>
+<p>
+The ::secrets-cleared signal is emitted when the secrets of a connection
+are cleared.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the object on which the signal is emitted</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
 <a name="NMConnection-secrets-updated"></a><h3>The <code class="literal">"secrets-updated"</code> signal</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection,
                                                         <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>        *setting_name,
diff --git a/docs/libnm-util/html/NMSetting.html b/docs/libnm-util/html/NMSetting.html
index 0cc1fd03..eec15973 100644
--- a/docs/libnm-util/html/NMSetting.html
+++ b/docs/libnm-util/html/NMSetting.html
@@ -56,6 +56,10 @@ enum                <a class="link" href="NMSetting.html#NMSettingError">NMSetti
 enum                <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags">NMSettingSecretFlags</a>;
 enum                <a class="link" href="NMSetting.html#NMSettingCompareFlags" title="enum NMSettingCompareFlags">NMSettingCompareFlags</a>;
                     <a class="link" href="NMSetting.html#NMSetting-struct" title="NMSetting">NMSetting</a>;
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            (<a class="link" href="NMSetting.html#NMSettingClearSecretsWithFlagsFn" title="NMSettingClearSecretsWithFlagsFn ()">*NMSettingClearSecretsWithFlagsFn</a>) (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *secret</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> flags</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
                     <a class="link" href="NMSetting.html#NMSettingClass" title="NMSettingClass">NMSettingClass</a>;
 <span class="returnvalue">void</span>                (<a class="link" href="NMSetting.html#NMSettingValueIterFn" title="NMSettingValueIterFn ()">*NMSettingValueIterFn</a>)             (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>,
                                                          <em class="parameter"><code>const <span class="type">char</span> *key</code></em>,
@@ -87,6 +91,9 @@ enum                <a class="link" href="NMSetting.html#NMSettingDiffResult" ti
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
 <span class="returnvalue">char</span> *              <a class="link" href="NMSetting.html#nm-setting-to-string" title="nm_setting_to_string ()">nm_setting_to_string</a>                (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="NMSetting.html#nm-setting-clear-secrets" title="nm_setting_clear_secrets ()">nm_setting_clear_secrets</a>            (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="NMSetting.html#nm-setting-clear-secrets-with-flags" title="nm_setting_clear_secrets_with_flags ()">nm_setting_clear_secrets_with_flags</a> (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingClearSecretsWithFlagsFn" title="NMSettingClearSecretsWithFlagsFn ()"><span class="type">NMSettingClearSecretsWithFlagsFn</span></a> func</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *         <a class="link" href="NMSetting.html#nm-setting-need-secrets" title="nm_setting_need_secrets ()">nm_setting_need_secrets</a>             (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>);
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="NMSetting.html#nm-setting-update-secrets" title="nm_setting_update_secrets ()">nm_setting_update_secrets</a>           (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *secrets</code></em>,
@@ -380,6 +387,42 @@ It should only be accessed through the functions described below.
 </div>
 <hr>
 <div class="refsect2">
+<a name="NMSettingClearSecretsWithFlagsFn"></a><h3>NMSettingClearSecretsWithFlagsFn ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            (*NMSettingClearSecretsWithFlagsFn) (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *secret</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> flags</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>The setting for which secrets are being iterated</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>secret</code></em> :</span></p></td>
+<td>The secret's name</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>flags</code></em> :</span></p></td>
+<td>The secret's flags, eg <a class="link" href="NMSetting.html#NM-SETTING-SECRET-FLAG-AGENT-OWNED:CAPS"><code class="literal">NM_SETTING_SECRET_FLAG_AGENT_OWNED</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>User data passed to <a class="link" href="NMConnection.html#nm-connection-clear-secrets-with-flags" title="nm_connection_clear_secrets_with_flags ()"><code class="function">nm_connection_clear_secrets_with_flags()</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to clear the secret, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> to not clear the secret</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
 <a name="NMSettingClass"></a><h3>NMSettingClass</h3>
 <pre class="programlisting">typedef struct {
 	GObjectClass parent;
@@ -414,10 +457,14 @@ It should only be accessed through the functions described below.
 	                                  const GParamSpec *prop_spec,
 	                                  NMSettingCompareFlags flags);
 
+	void        (*clear_secrets_with_flags) (NMSetting *setting,
+	                                         GParamSpec *pspec,
+	                                         NMSettingClearSecretsWithFlagsFn func,
+	                                         gpointer user_data);
+
 	/* Padding for future expansion */
 	void (*_reserved1) (void);
 	void (*_reserved2) (void);
-	void (*_reserved3) (void);
 } NMSettingClass;
 </pre>
 <p>
@@ -635,8 +682,9 @@ failed validation, and in what way that property failed validation.
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>all_settings</code></em> :</span></p></td>
-<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> of all settings in the connection from which <em class="parameter"><code>setting</code></em>
-came</td>
+<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> of all settings
+in the connection from which <em class="parameter"><code>setting</code></em> came. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMSetting]</span>
+</td>
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
@@ -851,6 +899,37 @@ leakage of information.
 </div>
 <hr>
 <div class="refsect2">
+<a name="nm-setting-clear-secrets-with-flags"></a><h3>nm_setting_clear_secrets_with_flags ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                nm_setting_clear_secrets_with_flags (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingClearSecretsWithFlagsFn" title="NMSettingClearSecretsWithFlagsFn ()"><span class="type">NMSettingClearSecretsWithFlagsFn</span></a> func</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Clears and frees secrets determined by <em class="parameter"><code>func</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>func</code></em> :</span></p></td>
+<td>function to be called to determine whether a
+specific secret should be cleared or not. <span class="annotation">[<acronym title="The callback is valid only during the call to the method."><span class="acronym">scope call</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>caller-supplied data passed to <em class="parameter"><code>func</code></em>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
 <a name="nm-setting-need-secrets"></a><h3>nm_setting_need_secrets ()</h3>
 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *         nm_setting_need_secrets             (<em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>);</pre>
 <p>
diff --git a/docs/libnm-util/html/api-index-full.html b/docs/libnm-util/html/api-index-full.html
index f47ea2c9..d2b7bdbe 100644
--- a/docs/libnm-util/html/api-index-full.html
+++ b/docs/libnm-util/html/api-index-full.html
@@ -21,20 +21,10 @@
 <td><a accesskey="n" href="annotation-glossary.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
 </tr>
 <tr><td colspan="5" class="shortcuts">
-<a class="shortcut" href="#idx8">8</a>
-                      | 
-                   <a class="shortcut" href="#idxA">A</a>
-                      | 
-                   <a class="shortcut" href="#idxB">B</a>
-                      | 
-                   <a class="shortcut" href="#idxC">C</a>
-                      | 
-                   <a class="shortcut" href="#idxD">D</a>
+<a class="shortcut" href="#idxC">C</a>
                       | 
                    <a class="shortcut" href="#idxI">I</a>
                       | 
-                   <a class="shortcut" href="#idxM">M</a>
-                      | 
                    <a class="shortcut" href="#idxS">S</a>
                       | 
                    <a class="shortcut" href="#idxT">T</a>
@@ -49,36 +39,13 @@
 <div class="index">
 <div class="titlepage"><div><div><h2 class="title">
 <a name="api-index-full"></a>API Index</h2></div></div></div>
-<a name="idx"></a><a name="idx8"></a><h3 class="title">8</h3>
-<dt>
-NM80211ApFlags, enum in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NM80211ApSecurityFlags, enum in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NM80211Mode, enum in NetworkManager
-</dt>
-<dd></dd>
-<a name="idxA"></a><h3 class="title">A</h3>
-<dt>
-NMActiveConnectionState, enum in NetworkManager
-</dt>
-<dd></dd>
-<a name="idxB"></a><h3 class="title">B</h3>
-<dt>
-NMBluetoothCapabilities, enum in NetworkManager
-</dt>
-<dd></dd>
-<a name="idxC"></a><h3 class="title">C</h3>
+<a name="idx"></a><a name="idxC"></a><h3 class="title">C</h3>
 <dt>
-NM_CHECK_VERSION, macro in nm-version
+<a class="link" href="NMConnection.html#NMConnection-struct" title="NMConnection">NMConnection</a>, struct in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="NMConnection.html#NMConnection-struct" title="NMConnection">NMConnection</a>, struct in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+<a class="link" href="NMConnection.html#NMConnection-secrets-cleared" title='The "secrets-cleared" signal'>NMConnection::secrets-cleared</a>, object signal in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
 </dt>
 <dd></dd>
 <dt>
@@ -106,6 +73,10 @@ NM_CHECK_VERSION, macro in nm-version
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="NMConnection.html#nm-connection-clear-secrets-with-flags" title="nm_connection_clear_secrets_with_flags ()">nm_connection_clear_secrets_with_flags</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="NMConnection.html#nm-connection-compare" title="nm_connection_compare ()">nm_connection_compare</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
 </dt>
 <dd></dd>
@@ -222,6 +193,10 @@ NM_CHECK_VERSION, macro in nm-version
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="NMConnection.html#nm-connection-is-type" title="nm_connection_is_type ()">nm_connection_is_type</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="NMConnection.html#nm-connection-lookup-setting-type" title="nm_connection_lookup_setting_type ()">nm_connection_lookup_setting_type</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
 </dt>
 <dd></dd>
@@ -269,275 +244,6 @@ NM_CHECK_VERSION, macro in nm-version
 <a class="link" href="NMConnection.html#nm-connection-verify" title="nm_connection_verify ()">nm_connection_verify</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
 </dt>
 <dd></dd>
-<a name="idxD"></a><h3 class="title">D</h3>
-<dt>
-NM_DBUS_IFACE_SETTINGS, macro in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_IFACE_SETTINGS_CONNECTION, macro in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_IFACE_SETTINGS_CONNECTION_SECRETS, macro in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_INTERFACE, macro in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_INTERFACE_ACCESS_POINT, macro in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_INTERFACE_ACTIVE_CONNECTION, macro in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_INTERFACE_AGENT_MANAGER, macro in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_INTERFACE_DEVICE, macro in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_INTERFACE_DEVICE_BLUETOOTH, macro in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_INTERFACE_DEVICE_MODEM, macro in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_INTERFACE_DEVICE_WIMAX, macro in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_INTERFACE_DEVICE_WIRED, macro in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_INTERFACE_DEVICE_WIRELESS, macro in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_INTERFACE_DHCP4_CONFIG, macro in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_INTERFACE_DHCP6_CONFIG, macro in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_INTERFACE_IP4_CONFIG, macro in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_INTERFACE_IP6_CONFIG, macro in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_INTERFACE_SECRET_AGENT, macro in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_INTERFACE_VPN, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_INTERFACE_VPN_CONNECTION, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_INTERFACE_WIMAX_NSP, macro in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_INVALID_VPN_CONNECTION, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_NO_ACTIVE_VPN_CONNECTION, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_NO_VPN_CONNECTIONS, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_PATH, macro in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_PATH_ACCESS_POINT, macro in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_PATH_AGENT_MANAGER, macro in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_PATH_SECRET_AGENT, macro in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_PATH_SETTINGS, macro in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_PATH_SETTINGS_CONNECTION, macro in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_PATH_VPN, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_PATH_VPN_CONNECTION, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_PATH_WIMAX_NSP, macro in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_SERVICE, macro in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UCHAR, macro in nm-dbus-glib-types
-</dt>
-<dd></dd>
-<dt>
-DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UINT, macro in nm-dbus-glib-types
-</dt>
-<dd></dd>
-<dt>
-DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS, macro in nm-dbus-glib-types
-</dt>
-<dd></dd>
-<dt>
-DBUS_TYPE_G_ARRAY_OF_IP6_ROUTE, macro in nm-dbus-glib-types
-</dt>
-<dd></dd>
-<dt>
-DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH, macro in nm-dbus-glib-types
-</dt>
-<dd></dd>
-<dt>
-DBUS_TYPE_G_ARRAY_OF_STRING, macro in nm-dbus-glib-types
-</dt>
-<dd></dd>
-<dt>
-DBUS_TYPE_G_ARRAY_OF_UINT, macro in nm-dbus-glib-types
-</dt>
-<dd></dd>
-<dt>
-DBUS_TYPE_G_IP6_ADDRESS, macro in nm-dbus-glib-types
-</dt>
-<dd></dd>
-<dt>
-DBUS_TYPE_G_IP6_ROUTE, macro in nm-dbus-glib-types
-</dt>
-<dd></dd>
-<dt>
-DBUS_TYPE_G_LIST_OF_STRING, macro in nm-dbus-glib-types
-</dt>
-<dd></dd>
-<dt>
-DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT, macro in nm-dbus-glib-types
-</dt>
-<dd></dd>
-<dt>
-DBUS_TYPE_G_MAP_OF_STRING, macro in nm-dbus-glib-types
-</dt>
-<dd></dd>
-<dt>
-DBUS_TYPE_G_MAP_OF_VARIANT, macro in nm-dbus-glib-types
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_VPN_ALREADY_STARTED, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_VPN_ALREADY_STOPPED, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_VPN_BAD_ARGUMENTS, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_VPN_SIGNAL_CONNECT_FAILED, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_VPN_SIGNAL_IP4_CONFIG, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_VPN_SIGNAL_IP_CONFIG_BAD, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_VPN_SIGNAL_LAUNCH_FAILED, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_VPN_SIGNAL_LOGIN_BANNER, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_VPN_SIGNAL_LOGIN_FAILED, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_VPN_SIGNAL_STATE_CHANGE, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_VPN_SIGNAL_VPN_CONFIG_BAD, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_VPN_STARTING_IN_PROGRESS, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_VPN_STOPPING_IN_PROGRESS, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_DBUS_VPN_WRONG_STATE, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NMDeviceCapabilities, enum in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NMDeviceModemCapabilities, enum in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NMDeviceState, enum in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NMDeviceStateReason, enum in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NMDeviceType, enum in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NMDeviceWifiCapabilities, enum in NetworkManager
-</dt>
-<dd></dd>
 <a name="idxI"></a><h3 class="title">I</h3>
 <dt>
 <a class="link" href="NMSettingIP4Config.html#NMIP4Address">NMIP4Address</a>, typedef in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
@@ -763,19 +469,6 @@ NMDeviceWifiCapabilities, enum in NetworkManager
 <a class="link" href="NMSettingIP6Config.html#nm-ip6-route-unref" title="nm_ip6_route_unref ()">nm_ip6_route_unref</a>, function in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
 </dt>
 <dd></dd>
-<a name="idxM"></a><h3 class="title">M</h3>
-<dt>
-NM_MAJOR_VERSION, macro in nm-version
-</dt>
-<dd></dd>
-<dt>
-NM_MICRO_VERSION, macro in nm-version
-</dt>
-<dd></dd>
-<dt>
-NM_MINOR_VERSION, macro in nm-version
-</dt>
-<dd></dd>
 <a name="idxS"></a><h3 class="title">S</h3>
 <dt>
 <a class="link" href="NMSetting.html#NMSetting-struct" title="NMSetting">NMSetting</a>, struct in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
@@ -966,6 +659,10 @@ NM_MINOR_VERSION, macro in nm-version
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="NMSetting.html#NMSettingClearSecretsWithFlagsFn" title="NMSettingClearSecretsWithFlagsFn ()">NMSettingClearSecretsWithFlagsFn</a>, user_function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="NMSetting.html#NMSettingCompareFlags" title="enum NMSettingCompareFlags">NMSettingCompareFlags</a>, enum in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
 </dt>
 <dd></dd>
@@ -2098,6 +1795,10 @@ NM_MINOR_VERSION, macro in nm-version
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="NMSetting.html#nm-setting-clear-secrets-with-flags" title="nm_setting_clear_secrets_with_flags ()">nm_setting_clear_secrets_with_flags</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="NMSetting.html#nm-setting-compare" title="nm_setting_compare ()">nm_setting_compare</a>, function in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
 </dt>
 <dd></dd>
@@ -3661,14 +3362,6 @@ NM_SETTING_SECRET_FLAGS_ALL, macro in nm-setting-private
 <a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-TX-POWER:CAPS" title="NM_SETTING_WIRELESS_TX_POWER">NM_SETTING_WIRELESS_TX_POWER</a>, macro in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
 </dt>
 <dd></dd>
-<dt>
-NMState, enum in NetworkManager
-</dt>
-<dd></dd>
-<dt>
-NM_STATE_CONNECTED, macro in NetworkManager
-</dt>
-<dd></dd>
 <a name="idxT"></a><h3 class="title">T</h3>
 <dt>
 <a class="link" href="NMConnection.html#NM-TYPE-CONNECTION-ERROR:CAPS" title="NM_TYPE_CONNECTION_ERROR">NM_TYPE_CONNECTION_ERROR</a>, macro in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
@@ -3865,93 +3558,9 @@ NM_STATE_CONNECTED, macro in NetworkManager
 <dd></dd>
 <a name="idxV"></a><h3 class="title">V</h3>
 <dt>
-NMVPNConnectionState, enum in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NMVPNConnectionStateReason, enum in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
 <a class="link" href="NMSettingVPN.html#NMVPNIterFunc" title="NMVPNIterFunc ()">NMVPNIterFunc</a>, user_function in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
 </dt>
 <dd></dd>
-<dt>
-NMVPNPluginFailure, enum in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NMVPNServiceState, enum in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_VPN_DBUS_PLUGIN_INTERFACE, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_VPN_DBUS_PLUGIN_PATH, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_VPN_PLUGIN_IP4_CONFIG_ADDRESS, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_VPN_PLUGIN_IP4_CONFIG_BANNER, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_VPN_PLUGIN_IP4_CONFIG_DNS, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_VPN_PLUGIN_IP4_CONFIG_DOMAIN, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_VPN_PLUGIN_IP4_CONFIG_GATEWAY, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_VPN_PLUGIN_IP4_CONFIG_INT_GATEWAY, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_VPN_PLUGIN_IP4_CONFIG_MSS, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_VPN_PLUGIN_IP4_CONFIG_MTU, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_VPN_PLUGIN_IP4_CONFIG_NBNS, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_VPN_PLUGIN_IP4_CONFIG_NEVER_DEFAULT, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_VPN_PLUGIN_IP4_CONFIG_PREFIX, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_VPN_PLUGIN_IP4_CONFIG_PTP, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_VPN_PLUGIN_IP4_CONFIG_ROUTES, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
-<dt>
-NM_VPN_PLUGIN_IP4_CONFIG_TUNDEV, macro in NetworkManagerVPN
-</dt>
-<dd></dd>
 <a name="idxW"></a><h3 class="title">W</h3>
 <dt>
 <a class="link" href="NMSettingWirelessSecurity.html#NMWepKeyType" title="enum NMWepKeyType">NMWepKeyType</a>, enum in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
diff --git a/docs/libnm-util/html/ch01.html b/docs/libnm-util/html/ch01.html
index d97a8939..e21c769e 100644
--- a/docs/libnm-util/html/ch01.html
+++ b/docs/libnm-util/html/ch01.html
@@ -21,7 +21,7 @@
 </tr></table>
 <div class="chapter">
 <div class="titlepage"><div><div><h2 class="title">
-<a name="id503033"></a>libnm-util API Reference</h2></div></div></div>
+<a name="id408143"></a>libnm-util API Reference</h2></div></div></div>
 <div class="toc"><dl>
 <dt>
 <span class="refentrytitle"><a href="NMConnection.html">NMConnection</a></span><span class="refpurpose"> — Describes a connection to specific network or provider</span>
diff --git a/docs/libnm-util/html/index.sgml b/docs/libnm-util/html/index.sgml
index eda2a542..306a2efd 100644
--- a/docs/libnm-util/html/index.sgml
+++ b/docs/libnm-util/html/index.sgml
@@ -33,9 +33,11 @@
 <ANCHOR id="nm-connection-verify" href="libnm-util/NMConnection.html#nm-connection-verify">
 <ANCHOR id="nm-connection-need-secrets" href="libnm-util/NMConnection.html#nm-connection-need-secrets">
 <ANCHOR id="nm-connection-clear-secrets" href="libnm-util/NMConnection.html#nm-connection-clear-secrets">
+<ANCHOR id="nm-connection-clear-secrets-with-flags" href="libnm-util/NMConnection.html#nm-connection-clear-secrets-with-flags">
 <ANCHOR id="nm-connection-update-secrets" href="libnm-util/NMConnection.html#nm-connection-update-secrets">
 <ANCHOR id="nm-connection-set-path" href="libnm-util/NMConnection.html#nm-connection-set-path">
 <ANCHOR id="nm-connection-get-path" href="libnm-util/NMConnection.html#nm-connection-get-path">
+<ANCHOR id="nm-connection-is-type" href="libnm-util/NMConnection.html#nm-connection-is-type">
 <ANCHOR id="nm-connection-for-each-setting-value" href="libnm-util/NMConnection.html#nm-connection-for-each-setting-value">
 <ANCHOR id="nm-connection-to-hash" href="libnm-util/NMConnection.html#nm-connection-to-hash">
 <ANCHOR id="nm-connection-dump" href="libnm-util/NMConnection.html#nm-connection-dump">
@@ -61,6 +63,7 @@
 <ANCHOR id="NMConnection.property-details" href="libnm-util/NMConnection.html#NMConnection.property-details">
 <ANCHOR id="NMConnection--path" href="libnm-util/NMConnection.html#NMConnection--path">
 <ANCHOR id="NMConnection.signal-details" href="libnm-util/NMConnection.html#NMConnection.signal-details">
+<ANCHOR id="NMConnection-secrets-cleared" href="libnm-util/NMConnection.html#NMConnection-secrets-cleared">
 <ANCHOR id="NMConnection-secrets-updated" href="libnm-util/NMConnection.html#NMConnection-secrets-updated">
 <ANCHOR id="NMSetting" href="libnm-util/NMSetting.html">
 <ANCHOR id="NMSetting.synopsis" href="libnm-util/NMSetting.html#NMSetting.synopsis">
@@ -95,6 +98,7 @@
 <ANCHOR id="NM-SETTING-COMPARE-FLAG-IGNORE-AGENT-OWNED-SECRETS:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-COMPARE-FLAG-IGNORE-AGENT-OWNED-SECRETS:CAPS">
 <ANCHOR id="NM-SETTING-COMPARE-FLAG-IGNORE-NOT-SAVED-SECRETS:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-COMPARE-FLAG-IGNORE-NOT-SAVED-SECRETS:CAPS">
 <ANCHOR id="NMSetting-struct" href="libnm-util/NMSetting.html#NMSetting-struct">
+<ANCHOR id="NMSettingClearSecretsWithFlagsFn" href="libnm-util/NMSetting.html#NMSettingClearSecretsWithFlagsFn">
 <ANCHOR id="NMSettingClass" href="libnm-util/NMSetting.html#NMSettingClass">
 <ANCHOR id="NMSettingValueIterFn" href="libnm-util/NMSetting.html#NMSettingValueIterFn">
 <ANCHOR id="nm-setting-get-type" href="libnm-util/NMSetting.html#nm-setting-get-type">
@@ -116,6 +120,7 @@
 <ANCHOR id="nm-setting-enumerate-values" href="libnm-util/NMSetting.html#nm-setting-enumerate-values">
 <ANCHOR id="nm-setting-to-string" href="libnm-util/NMSetting.html#nm-setting-to-string">
 <ANCHOR id="nm-setting-clear-secrets" href="libnm-util/NMSetting.html#nm-setting-clear-secrets">
+<ANCHOR id="nm-setting-clear-secrets-with-flags" href="libnm-util/NMSetting.html#nm-setting-clear-secrets-with-flags">
 <ANCHOR id="nm-setting-need-secrets" href="libnm-util/NMSetting.html#nm-setting-need-secrets">
 <ANCHOR id="nm-setting-update-secrets" href="libnm-util/NMSetting.html#nm-setting-update-secrets">
 <ANCHOR id="nm-setting-get-secret-flags" href="libnm-util/NMSetting.html#nm-setting-get-secret-flags">
diff --git a/docs/libnm-util/html/libnm-util-nm-utils.html b/docs/libnm-util/html/libnm-util-nm-utils.html
index 00c11126..d4440e8d 100644
--- a/docs/libnm-util/html/libnm-util-nm-utils.html
+++ b/docs/libnm-util/html/libnm-util-nm-utils.html
@@ -507,7 +507,8 @@ extended in the future.
 <tbody>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
-<td>a list of <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> objects</td>
+<td>a list of <a class="link" href="NMSettingIP4Config.html#NMIP4Address"><span class="type">NMIP4Address</span></a> objects. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMIP4Address]</span>
+</td>
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
@@ -561,7 +562,8 @@ be extended in the future.
 <tbody>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
-<td>a list of <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> objects</td>
+<td>a list of <a class="link" href="NMSettingIP4Config.html#NMIP4Route"><span class="type">NMIP4Route</span></a> objects. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMIP4Route]</span>
+</td>
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
@@ -675,7 +677,8 @@ future.
 <tbody>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
-<td>a list of <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> objects</td>
+<td>a list of <a class="link" href="NMSettingIP6Config.html#NMIP6Address"><span class="type">NMIP6Address</span></a> objects. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMIP6Address]</span>
+</td>
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
@@ -730,7 +733,8 @@ guaranteed to be stable and may be extended in the future.
 <tbody>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
-<td>a list of <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> objects</td>
+<td>a list of <a class="link" href="NMSettingIP6Config.html#NMIP6Route"><span class="type">NMIP6Route</span></a> objects. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMIP6Route]</span>
+</td>
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
diff --git a/docs/libnm-util/html/libnm-util.devhelp b/docs/libnm-util/html/libnm-util.devhelp
index 21ba39f2..7e48f817 100644
--- a/docs/libnm-util/html/libnm-util.devhelp
+++ b/docs/libnm-util/html/libnm-util.devhelp
@@ -50,9 +50,11 @@
     <function name="nm_connection_verify ()" link="NMConnection.html#nm-connection-verify"/>
     <function name="nm_connection_need_secrets ()" link="NMConnection.html#nm-connection-need-secrets"/>
     <function name="nm_connection_clear_secrets ()" link="NMConnection.html#nm-connection-clear-secrets"/>
+    <function name="nm_connection_clear_secrets_with_flags ()" link="NMConnection.html#nm-connection-clear-secrets-with-flags"/>
     <function name="nm_connection_update_secrets ()" link="NMConnection.html#nm-connection-update-secrets"/>
     <function name="nm_connection_set_path ()" link="NMConnection.html#nm-connection-set-path"/>
     <function name="nm_connection_get_path ()" link="NMConnection.html#nm-connection-get-path"/>
+    <function name="nm_connection_is_type ()" link="NMConnection.html#nm-connection-is-type"/>
     <function name="nm_connection_for_each_setting_value ()" link="NMConnection.html#nm-connection-for-each-setting-value"/>
     <function name="nm_connection_to_hash ()" link="NMConnection.html#nm-connection-to-hash"/>
     <function name="nm_connection_dump ()" link="NMConnection.html#nm-connection-dump"/>
@@ -76,6 +78,7 @@
     <function name="nm_connection_get_setting_wireless ()" link="NMConnection.html#nm-connection-get-setting-wireless"/>
     <function name="nm_connection_get_setting_wireless_security ()" link="NMConnection.html#nm-connection-get-setting-wireless-security"/>
     <function name="The &quot;path&quot; property" link="NMConnection.html#NMConnection--path"/>
+    <function name="The &quot;secrets-cleared&quot; signal" link="NMConnection.html#NMConnection-secrets-cleared"/>
     <function name="The &quot;secrets-updated&quot; signal" link="NMConnection.html#NMConnection-secrets-updated"/>
     <function name="enum NMSettingError" link="NMSetting.html#NMSettingError"/>
     <function name="NM_TYPE_SETTING_ERROR" link="NMSetting.html#NM-TYPE-SETTING-ERROR:CAPS"/>
@@ -89,6 +92,7 @@
     <function name="enum NMSettingSecretFlags" link="NMSetting.html#NMSettingSecretFlags"/>
     <function name="enum NMSettingCompareFlags" link="NMSetting.html#NMSettingCompareFlags"/>
     <function name="NMSetting" link="NMSetting.html#NMSetting-struct"/>
+    <function name="NMSettingClearSecretsWithFlagsFn ()" link="NMSetting.html#NMSettingClearSecretsWithFlagsFn"/>
     <function name="NMSettingClass" link="NMSetting.html#NMSettingClass"/>
     <function name="NMSettingValueIterFn ()" link="NMSetting.html#NMSettingValueIterFn"/>
     <function name="nm_setting_get_type ()" link="NMSetting.html#nm-setting-get-type"/>
@@ -104,6 +108,7 @@
     <function name="nm_setting_enumerate_values ()" link="NMSetting.html#nm-setting-enumerate-values"/>
     <function name="nm_setting_to_string ()" link="NMSetting.html#nm-setting-to-string"/>
     <function name="nm_setting_clear_secrets ()" link="NMSetting.html#nm-setting-clear-secrets"/>
+    <function name="nm_setting_clear_secrets_with_flags ()" link="NMSetting.html#nm-setting-clear-secrets-with-flags"/>
     <function name="nm_setting_need_secrets ()" link="NMSetting.html#nm-setting-need-secrets"/>
     <function name="nm_setting_update_secrets ()" link="NMSetting.html#nm-setting-update-secrets"/>
     <function name="nm_setting_get_secret_flags ()" link="NMSetting.html#nm-setting-get-secret-flags"/>
diff --git a/docs/libnm-util/html/libnm-util.devhelp2 b/docs/libnm-util/html/libnm-util.devhelp2
index a6544ddd..3c4ec11b 100644
--- a/docs/libnm-util/html/libnm-util.devhelp2
+++ b/docs/libnm-util/html/libnm-util.devhelp2
@@ -50,9 +50,11 @@
     <keyword type="function" name="nm_connection_verify ()" link="NMConnection.html#nm-connection-verify"/>
     <keyword type="function" name="nm_connection_need_secrets ()" link="NMConnection.html#nm-connection-need-secrets"/>
     <keyword type="function" name="nm_connection_clear_secrets ()" link="NMConnection.html#nm-connection-clear-secrets"/>
+    <keyword type="function" name="nm_connection_clear_secrets_with_flags ()" link="NMConnection.html#nm-connection-clear-secrets-with-flags"/>
     <keyword type="function" name="nm_connection_update_secrets ()" link="NMConnection.html#nm-connection-update-secrets"/>
     <keyword type="function" name="nm_connection_set_path ()" link="NMConnection.html#nm-connection-set-path"/>
     <keyword type="function" name="nm_connection_get_path ()" link="NMConnection.html#nm-connection-get-path"/>
+    <keyword type="function" name="nm_connection_is_type ()" link="NMConnection.html#nm-connection-is-type"/>
     <keyword type="function" name="nm_connection_for_each_setting_value ()" link="NMConnection.html#nm-connection-for-each-setting-value"/>
     <keyword type="function" name="nm_connection_to_hash ()" link="NMConnection.html#nm-connection-to-hash"/>
     <keyword type="function" name="nm_connection_dump ()" link="NMConnection.html#nm-connection-dump"/>
@@ -76,6 +78,7 @@
     <keyword type="function" name="nm_connection_get_setting_wireless ()" link="NMConnection.html#nm-connection-get-setting-wireless"/>
     <keyword type="function" name="nm_connection_get_setting_wireless_security ()" link="NMConnection.html#nm-connection-get-setting-wireless-security"/>
     <keyword type="property" name="The &quot;path&quot; property" link="NMConnection.html#NMConnection--path"/>
+    <keyword type="signal" name="The &quot;secrets-cleared&quot; signal" link="NMConnection.html#NMConnection-secrets-cleared"/>
     <keyword type="signal" name="The &quot;secrets-updated&quot; signal" link="NMConnection.html#NMConnection-secrets-updated"/>
     <keyword type="enum" name="enum NMSettingError" link="NMSetting.html#NMSettingError"/>
     <keyword type="macro" name="NM_TYPE_SETTING_ERROR" link="NMSetting.html#NM-TYPE-SETTING-ERROR:CAPS"/>
@@ -89,6 +92,7 @@
     <keyword type="enum" name="enum NMSettingSecretFlags" link="NMSetting.html#NMSettingSecretFlags"/>
     <keyword type="enum" name="enum NMSettingCompareFlags" link="NMSetting.html#NMSettingCompareFlags"/>
     <keyword type="struct" name="NMSetting" link="NMSetting.html#NMSetting-struct"/>
+    <keyword type="function" name="NMSettingClearSecretsWithFlagsFn ()" link="NMSetting.html#NMSettingClearSecretsWithFlagsFn"/>
     <keyword type="struct" name="NMSettingClass" link="NMSetting.html#NMSettingClass"/>
     <keyword type="function" name="NMSettingValueIterFn ()" link="NMSetting.html#NMSettingValueIterFn"/>
     <keyword type="function" name="nm_setting_get_type ()" link="NMSetting.html#nm-setting-get-type"/>
@@ -104,6 +108,7 @@
     <keyword type="function" name="nm_setting_enumerate_values ()" link="NMSetting.html#nm-setting-enumerate-values"/>
     <keyword type="function" name="nm_setting_to_string ()" link="NMSetting.html#nm-setting-to-string"/>
     <keyword type="function" name="nm_setting_clear_secrets ()" link="NMSetting.html#nm-setting-clear-secrets"/>
+    <keyword type="function" name="nm_setting_clear_secrets_with_flags ()" link="NMSetting.html#nm-setting-clear-secrets-with-flags"/>
     <keyword type="function" name="nm_setting_need_secrets ()" link="NMSetting.html#nm-setting-need-secrets"/>
     <keyword type="function" name="nm_setting_update_secrets ()" link="NMSetting.html#nm-setting-update-secrets"/>
     <keyword type="function" name="nm_setting_get_secret_flags ()" link="NMSetting.html#nm-setting-get-secret-flags"/>
diff --git a/docs/libnm-util/libnm-util-sections.txt b/docs/libnm-util/libnm-util-sections.txt
index 06bd0d32..8a3cf261 100644
--- a/docs/libnm-util/libnm-util-sections.txt
+++ b/docs/libnm-util/libnm-util-sections.txt
@@ -657,6 +657,7 @@ NM_SETTING_NAME
 NMSettingSecretFlags
 NMSettingCompareFlags
 NMSetting
+NMSettingClearSecretsWithFlagsFn
 NMSettingClass
 NMSettingValueIterFn
 nm_setting_get_type
@@ -672,6 +673,7 @@ nm_setting_diff
 nm_setting_enumerate_values
 nm_setting_to_string
 nm_setting_clear_secrets
+nm_setting_clear_secrets_with_flags
 nm_setting_need_secrets
 nm_setting_update_secrets
 nm_setting_get_secret_flags
@@ -769,9 +771,11 @@ nm_connection_diff
 nm_connection_verify
 nm_connection_need_secrets
 nm_connection_clear_secrets
+nm_connection_clear_secrets_with_flags
 nm_connection_update_secrets
 nm_connection_set_path
 nm_connection_get_path
+nm_connection_is_type
 nm_connection_for_each_setting_value
 nm_connection_to_hash
 nm_connection_dump
diff --git a/examples/C/Makefile.in b/examples/C/Makefile.in
index ea5932e6..a7a04ce9 100644
--- a/examples/C/Makefile.in
+++ b/examples/C/Makefile.in
@@ -193,8 +193,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/examples/C/glib/Makefile.in b/examples/C/glib/Makefile.in
index 1d637510..2d10c11d 100644
--- a/examples/C/glib/Makefile.in
+++ b/examples/C/glib/Makefile.in
@@ -239,8 +239,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/examples/C/qt/Makefile.in b/examples/C/qt/Makefile.in
index a07fe015..d52d61b1 100644
--- a/examples/C/qt/Makefile.in
+++ b/examples/C/qt/Makefile.in
@@ -196,8 +196,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/examples/C/qt/add-connection-wired.cpp b/examples/C/qt/add-connection-wired.cpp
index f9e3f6c1..475eafff 100644
--- a/examples/C/qt/add-connection-wired.cpp
+++ b/examples/C/qt/add-connection-wired.cpp
@@ -72,4 +72,6 @@ int main() {
         QDBusConnection::systemBus());

 

     addConnection(interface, "__Test connection__");

+

+    return 0;

 }

diff --git a/examples/Makefile.in b/examples/Makefile.in
index a84d601c..735b9665 100644
--- a/examples/Makefile.in
+++ b/examples/Makefile.in
@@ -192,8 +192,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/examples/python/Makefile.am b/examples/python/Makefile.am
index 7fa376ef..59e16088 100644
--- a/examples/python/Makefile.am
+++ b/examples/python/Makefile.am
@@ -6,6 +6,5 @@ EXTRA_DIST = \
 	list-connections.py \
 	show-bssids.py \
 	disconnect-device.py \
-	get-active-connections.py
-
-
+	get-active-connections.py \
+	list-devices.py
diff --git a/examples/python/Makefile.in b/examples/python/Makefile.in
index 983f843d..59f379e3 100644
--- a/examples/python/Makefile.in
+++ b/examples/python/Makefile.in
@@ -152,8 +152,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
@@ -461,7 +469,8 @@ uninstall-am:
 	list-connections.py \
 	show-bssids.py \
 	disconnect-device.py \
-	get-active-connections.py
+	get-active-connections.py \
+	list-devices.py
 
 # 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.
diff --git a/include/Makefile.in b/include/Makefile.in
index fda755a2..27d7ad02 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -179,8 +179,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/include/nm-glib-compat.h b/include/nm-glib-compat.h
index 9c1fe347..4b968710 100644
--- a/include/nm-glib-compat.h
+++ b/include/nm-glib-compat.h
@@ -16,7 +16,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * (C) Copyright 2008 Red Hat, Inc.
+ * (C) Copyright 2008 - 2011 Red Hat, Inc.
  */
 
 #ifndef NM_GLIB_COMPAT_H
@@ -24,14 +24,9 @@
 
 #include <glib.h>
 
-#if !GLIB_CHECK_VERSION(2,14,0)
-
-#define g_timeout_add_seconds(i, f, d) \
-	g_timeout_add (i * G_USEC_PER_SEC, f, d)
-
-#define g_timeout_add_seconds_full(p, i, f, d, n) \
-	g_timeout_add_full (p, i * G_USEC_PER_SEC, f, d, n)
-
-#endif /* !GLIB_CHECK_VERSION(2,14,0) */
+#if !GLIB_CHECK_VERSION(2,31,0)
+#define g_value_set_schar g_value_set_char
+#define g_value_get_schar g_value_get_char
+#endif
 
 #endif  /* NM_GLIB_COMPAT_H */
diff --git a/include/nm-version.h b/include/nm-version.h
index 3d3adfba..b893219d 100644
--- a/include/nm-version.h
+++ b/include/nm-version.h
@@ -43,7 +43,7 @@
  * Evaluates to the micro version number of NetworkManager which this source
  * compiled against.
  */
-#define NM_MICRO_VERSION (0)
+#define NM_MICRO_VERSION (1)
 
 /**
  * NM_CHECK_VERSION:
diff --git a/include/wireless-helper.h b/include/wireless-helper.h
index d150ef7d..2e4509a8 100644
--- a/include/wireless-helper.h
+++ b/include/wireless-helper.h
@@ -27,6 +27,6 @@
 #include <sys/types.h>
 #include <linux/types.h>
 #include <sys/socket.h>
-#include <net/if.h>
+#include <linux/if.h>
 #include <wireless.h>
 
diff --git a/initscript/Arch/Makefile.in b/initscript/Arch/Makefile.in
index 86adf2b2..3b7349d4 100644
--- a/initscript/Arch/Makefile.in
+++ b/initscript/Arch/Makefile.in
@@ -177,8 +177,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/initscript/Debian/Makefile.in b/initscript/Debian/Makefile.in
index 8b3384b6..73daae51 100644
--- a/initscript/Debian/Makefile.in
+++ b/initscript/Debian/Makefile.in
@@ -177,8 +177,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/initscript/Gentoo/Makefile.in b/initscript/Gentoo/Makefile.in
index 5a1514ed..dd92b10e 100644
--- a/initscript/Gentoo/Makefile.in
+++ b/initscript/Gentoo/Makefile.in
@@ -177,8 +177,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/initscript/Makefile.in b/initscript/Makefile.in
index 582c9dd5..becf7c4b 100644
--- a/initscript/Makefile.in
+++ b/initscript/Makefile.in
@@ -202,8 +202,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/initscript/Mandriva/Makefile.in b/initscript/Mandriva/Makefile.in
index d1006a13..f0412c2a 100644
--- a/initscript/Mandriva/Makefile.in
+++ b/initscript/Mandriva/Makefile.in
@@ -177,8 +177,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/initscript/RedHat/Makefile.in b/initscript/RedHat/Makefile.in
index 4449798b..2329b6e0 100644
--- a/initscript/RedHat/Makefile.in
+++ b/initscript/RedHat/Makefile.in
@@ -177,8 +177,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/initscript/SUSE/Makefile.in b/initscript/SUSE/Makefile.in
index 5621ccdb..bbc5a8a6 100644
--- a/initscript/SUSE/Makefile.in
+++ b/initscript/SUSE/Makefile.in
@@ -153,8 +153,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/initscript/Slackware/Makefile.in b/initscript/Slackware/Makefile.in
index df3222ff..8a84419c 100644
--- a/initscript/Slackware/Makefile.in
+++ b/initscript/Slackware/Makefile.in
@@ -177,8 +177,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/initscript/linexa/Makefile.in b/initscript/linexa/Makefile.in
index 0b6124e2..de30d93a 100644
--- a/initscript/linexa/Makefile.in
+++ b/initscript/linexa/Makefile.in
@@ -177,8 +177,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/initscript/paldo/Makefile.in b/initscript/paldo/Makefile.in
index d7550c6a..c2a53bdf 100644
--- a/initscript/paldo/Makefile.in
+++ b/initscript/paldo/Makefile.in
@@ -177,8 +177,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/introspection/Makefile.in b/introspection/Makefile.in
index 95c3c47e..a92e5793 100644
--- a/introspection/Makefile.in
+++ b/introspection/Makefile.in
@@ -153,8 +153,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/introspection/all.xml.in b/introspection/all.xml.in
index 4d2c2721..bcb8d045 100644
--- a/introspection/all.xml.in
+++ b/introspection/all.xml.in
@@ -43,6 +43,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
 <xi:include href="nm-settings-connection.xml"/>
 <xi:include href="nm-active-connection.xml"/>
 <xi:include href="nm-agent-manager.xml"/>
+<xi:include href="nm-secret-agent.xml"/>
 <xi:include href="nm-vpn-connection.xml"/>
 <xi:include href="nm-vpn-plugin.xml"/>
 
diff --git a/libnm-glib/Makefile.in b/libnm-glib/Makefile.in
index 9728f7d9..513c607f 100644
--- a/libnm-glib/Makefile.in
+++ b/libnm-glib/Makefile.in
@@ -348,8 +348,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/libnm-glib/nm-device.c b/libnm-glib/nm-device.c
index f06c1e4a..1f9f3671 100644
--- a/libnm-glib/nm-device.c
+++ b/libnm-glib/nm-device.c
@@ -1475,8 +1475,9 @@ deactivate_cb (DBusGProxy *proxy,
 /**
  * nm_device_disconnect:
  * @device: a #NMDevice
- * @callback: (scope async): callback to be called when disconnect operation completes
- * @user_data: caller-specific data passed to @callback
+ * @callback: (scope async) (allow-none): callback to be called when disconnect
+ * operation completes
+ * @user_data: (closure): caller-specific data passed to @callback
  *
  * Disconnects the device if currently connected, and prevents the device from
  * automatically connecting to networks until the next manual network connection
diff --git a/libnm-glib/nm-object.c b/libnm-glib/nm-object.c
index cbcf2919..9a8a60f7 100644
--- a/libnm-glib/nm-object.c
+++ b/libnm-glib/nm-object.c
@@ -28,6 +28,7 @@
 #include "nm-object-cache.h"
 #include "nm-object-private.h"
 #include "nm-dbus-glib-types.h"
+#include "nm-glib-compat.h"
 
 #define DEBUG 0
 
@@ -438,11 +439,11 @@ _nm_object_handle_properties_changed (NMObject *object,
 	}
 }
 
-#define HANDLE_TYPE(ucase, lcase) \
+#define HANDLE_TYPE(ucase, lcase, getter) \
 	} else if (pspec->value_type == G_TYPE_##ucase) { \
 		if (G_VALUE_HOLDS_##ucase (value)) { \
 			g##lcase *param = (g##lcase *) field; \
-			*param = g_value_get_##lcase (value); \
+			*param = g_value_get_##getter (value); \
 		} else { \
 			success = FALSE; \
 			goto done; \
@@ -474,16 +475,16 @@ _nm_object_demarshal_generic (NMObject *object,
 			success = FALSE;
 			goto done;
 		}
-	HANDLE_TYPE(BOOLEAN, boolean)
-	HANDLE_TYPE(CHAR, char)
-	HANDLE_TYPE(UCHAR, uchar)
-	HANDLE_TYPE(DOUBLE, double)
-	HANDLE_TYPE(INT, int)
-	HANDLE_TYPE(UINT, uint)
-	HANDLE_TYPE(INT64, int)
-	HANDLE_TYPE(UINT64, uint)
-	HANDLE_TYPE(LONG, long)
-	HANDLE_TYPE(ULONG, ulong)
+	HANDLE_TYPE(BOOLEAN, boolean, boolean)
+	HANDLE_TYPE(CHAR, char, schar)
+	HANDLE_TYPE(UCHAR, uchar, uchar)
+	HANDLE_TYPE(DOUBLE, double, double)
+	HANDLE_TYPE(INT, int, int)
+	HANDLE_TYPE(UINT, uint, uint)
+	HANDLE_TYPE(INT64, int, int)
+	HANDLE_TYPE(UINT64, uint, uint)
+	HANDLE_TYPE(LONG, long, long)
+	HANDLE_TYPE(ULONG, ulong, ulong)
 	} else {
 		g_warning ("%s: %s/%s unhandled type %s.",
 		           __func__, G_OBJECT_TYPE_NAME (object), pspec->name,
diff --git a/libnm-glib/nm-remote-connection.c b/libnm-glib/nm-remote-connection.c
index 57870c62..9e190d9e 100644
--- a/libnm-glib/nm-remote-connection.c
+++ b/libnm-glib/nm-remote-connection.c
@@ -94,15 +94,17 @@ update_cb (DBusGProxy *proxy, GError *error, gpointer user_data)
 	RemoteCall *call = user_data;
 	NMRemoteConnectionCommitFunc func = (NMRemoteConnectionCommitFunc) call->callback;
 
-	(*func)(call->self, error, call->user_data);
+	if (func != NULL)
+		(*func)(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
+ * @callback: (scope async) (allow-none): a function to be called when the
+ * commit completes
+ * @user_data: (closure): 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.
@@ -154,7 +156,7 @@ delete_cb (DBusGProxy *proxy, GError *error, gpointer user_data)
  * 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
+ * @user_data: (closure): caller-specific data to be passed to @callback
  *
  * Delete the connection.
  **/
@@ -197,8 +199,9 @@ get_secrets_cb (DBusGProxy *proxy, GHashTable *secrets, GError *error, gpointer
  * 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
+ * @callback: (scope async): a function to be called when the update completes;
+ * must not be NULL
+ * @user_data: (closure): caller-specific data to be passed to @callback
  *
  * Request the connection's secrets.
  **/
diff --git a/libnm-glib/nm-remote-settings.c b/libnm-glib/nm-remote-settings.c
index b6aaabb0..7658623f 100644
--- a/libnm-glib/nm-remote-settings.c
+++ b/libnm-glib/nm-remote-settings.c
@@ -501,7 +501,7 @@ add_connection_done (DBusGProxy *proxy, DBusGProxyCall *call, gpointer user_data
  * @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
+ * @user_data: (closure): caller-specific data passed to @callback
  *
  * Requests that the remote settings service add the given settings to a new
  * connection.
@@ -594,7 +594,8 @@ save_hostname_cb (DBusGProxy *proxy,
 	GError *error = NULL;
 
 	dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID);
-	info->callback (info->settings, error, info->callback_data);
+	if (info->callback != NULL)
+		info->callback (info->settings, error, info->callback_data);
 	g_clear_error (&error);
 }
 
@@ -603,8 +604,9 @@ save_hostname_cb (DBusGProxy *proxy,
  * @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
+ * @callback: (scope async) (allow-none): callback to be called when the
+ * hostname operation completes
+ * @user_data: (closure): caller-specific data passed to @callback
  *
  * Requests that the machine's persistent hostname be set to the specified value
  * or cleared.
diff --git a/libnm-glib/nm-secret-agent.c b/libnm-glib/nm-secret-agent.c
index 90bdfbe7..1b413171 100644
--- a/libnm-glib/nm-secret-agent.c
+++ b/libnm-glib/nm-secret-agent.c
@@ -656,7 +656,7 @@ auto_register_cb (gpointer user_data)
  * @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):
+ * @user_data: (closure): caller-specific data to be passed to @callback
  *
  * Asyncronously retrieve secrets belonging to @connection for the
  * setting @setting_name.  @flags indicate specific behavior that the secret
@@ -673,7 +673,7 @@ nm_secret_agent_get_secrets (NMSecretAgent *self,
                              const char **hints,
                              NMSecretAgentGetSecretsFlags flags,
                              NMSecretAgentGetSecretsFunc callback,
-                             gpointer callback_data)
+                             gpointer user_data)
 {
 	g_return_if_fail (self != NULL);
 	g_return_if_fail (NM_IS_SECRET_AGENT (self));
@@ -691,7 +691,7 @@ nm_secret_agent_get_secrets (NMSecretAgent *self,
 	                                               hints,
 	                                               flags,
 	                                               callback,
-	                                               callback_data);
+	                                               user_data);
 }
 
 /**
@@ -699,7 +699,7 @@ nm_secret_agent_get_secrets (NMSecretAgent *self,
  * @self: a #NMSecretAgent
  * @connection: a #NMConnection
  * @callback: (scope async): a callback, invoked when the operation is done
- * @callback_data: (closure):
+ * @user_data: (closure): caller-specific data to be passed to @callback
  *
  * Asyncronously ensure that all secrets inside @connection
  * are stored to disk.
@@ -710,7 +710,7 @@ void
 nm_secret_agent_save_secrets (NMSecretAgent *self,
                               NMConnection *connection,
                               NMSecretAgentSaveSecretsFunc callback,
-                              gpointer callback_data)
+                              gpointer user_data)
 {
 	g_return_if_fail (self != NULL);
 	g_return_if_fail (NM_IS_SECRET_AGENT (self));
@@ -722,7 +722,7 @@ nm_secret_agent_save_secrets (NMSecretAgent *self,
 	                                                connection,
 	                                                nm_connection_get_path (connection),
 	                                                callback,
-	                                                callback_data);
+	                                                user_data);
 }
 
 /**
@@ -730,7 +730,7 @@ nm_secret_agent_save_secrets (NMSecretAgent *self,
  * @self: a #NMSecretAgent
  * @connection: a #NMConnection
  * @callback: (scope async): a callback, invoked when the operation is done
- * @callback_data: (closure):
+ * @user_data: (closure): caller-specific data to be passed to @callback
  *
  * Asynchronously ask the agent to delete all saved secrets belonging to
  * @connection.
@@ -741,7 +741,7 @@ void
 nm_secret_agent_delete_secrets (NMSecretAgent *self,
                                 NMConnection *connection,
                                 NMSecretAgentDeleteSecretsFunc callback,
-                                gpointer callback_data)
+                                gpointer user_data)
 {
 	g_return_if_fail (self != NULL);
 	g_return_if_fail (NM_IS_SECRET_AGENT (self));
@@ -753,7 +753,7 @@ nm_secret_agent_delete_secrets (NMSecretAgent *self,
 	                                                  connection,
 	                                                  nm_connection_get_path (connection),
 	                                                  callback,
-	                                                  callback_data);
+	                                                  user_data);
 }
 
 /**************************************************************/
diff --git a/libnm-glib/nm-secret-agent.h b/libnm-glib/nm-secret-agent.h
index 6b209c44..2e0cce40 100644
--- a/libnm-glib/nm-secret-agent.h
+++ b/libnm-glib/nm-secret-agent.h
@@ -101,7 +101,7 @@ typedef struct {
 	/* 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
+	 * and 'user_data' of course).  If the request is canceled, the callback
 	 * should still be called, but with the NM_SECRET_AGENT_ERROR_AGENT_CANCELED
 	 * error.
 	 */
@@ -112,7 +112,7 @@ typedef struct {
 	                     const char **hints,
 	                     NMSecretAgentGetSecretsFlags flags,
 	                     NMSecretAgentGetSecretsFunc callback,
-	                     gpointer callback_data);
+	                     gpointer user_data);
 
 	/* Called when the subclass should cancel an outstanding request to
 	 * get secrets for a given connection.  Canceling the request MUST
@@ -127,26 +127,26 @@ typedef struct {
 	/* 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'
+	 * arguments will freed (except for 'agent', 'callback', and 'user_data'
 	 * of course).
 	 */
 	void (*save_secrets) (NMSecretAgent *agent,
 	                      NMConnection *connection,
 	                      const char *connection_path,
 	                      NMSecretAgentSaveSecretsFunc callback,
-	                      gpointer callback_data);
+	                      gpointer user_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'
+	 * arguments will freed (except for 'agent', 'callback', and 'user_data'
 	 * of course).
 	 */
 	void (*delete_secrets) (NMSecretAgent *agent,
 	                        NMConnection *connection,
 	                        const char *connection_path,
 	                        NMSecretAgentDeleteSecretsFunc callback,
-	                        gpointer callback_data);
+	                        gpointer user_data);
 
 	/* Signals */
 	void (*registration_result) (NMSecretAgent *agent, GError *error);
@@ -172,17 +172,17 @@ void nm_secret_agent_get_secrets (NMSecretAgent *self,
                                   const char **hints,
                                   NMSecretAgentGetSecretsFlags flags,
                                   NMSecretAgentGetSecretsFunc callback,
-                                  gpointer callback_data);
+                                  gpointer user_data);
 
 void nm_secret_agent_save_secrets (NMSecretAgent *self,
                                    NMConnection *connection,
                                    NMSecretAgentSaveSecretsFunc callback,
-                                   gpointer callback_data);
+                                   gpointer user_data);
 
 void nm_secret_agent_delete_secrets (NMSecretAgent *self,
                                      NMConnection *connection,
                                      NMSecretAgentDeleteSecretsFunc callback,
-                                     gpointer callback_data);
+                                     gpointer user_data);
 
 G_END_DECLS
 
diff --git a/libnm-glib/tests/Makefile.in b/libnm-glib/tests/Makefile.in
index d4d5e6b5..d3c3ecaa 100644
--- a/libnm-glib/tests/Makefile.in
+++ b/libnm-glib/tests/Makefile.in
@@ -188,8 +188,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/libnm-util/Makefile.am b/libnm-util/Makefile.am
index 0a29e9c5..1327565a 100644
--- a/libnm-util/Makefile.am
+++ b/libnm-util/Makefile.am
@@ -69,7 +69,7 @@ libnm_util_la_LIBADD = $(GLIB_LIBS) $(DBUS_LIBS) $(UUID_LIBS)
 SYMBOL_VIS_FILE=$(srcdir)/libnm-util.ver
 
 libnm_util_la_LDFLAGS = -Wl,--version-script=$(SYMBOL_VIS_FILE) \
-	-version-info "2:0:0"
+	-version-info "4:0:2"
 
 if WITH_GNUTLS
 libnm_util_la_SOURCES += crypto_gnutls.c
diff --git a/libnm-util/Makefile.in b/libnm-util/Makefile.in
index d251ea8c..188b0a5e 100644
--- a/libnm-util/Makefile.in
+++ b/libnm-util/Makefile.in
@@ -314,8 +314,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
@@ -492,7 +500,7 @@ libnm_util_la_LIBADD = $(GLIB_LIBS) $(DBUS_LIBS) $(UUID_LIBS) \
 	$(am__append_3) $(am__append_6)
 SYMBOL_VIS_FILE = $(srcdir)/libnm-util.ver
 libnm_util_la_LDFLAGS = -Wl,--version-script=$(SYMBOL_VIS_FILE) \
-	-version-info "2:0:0"
+	-version-info "4:0:2"
 
 libnm_util_includedir = $(includedir)/NetworkManager
 
diff --git a/libnm-util/libnm-util.ver b/libnm-util/libnm-util.ver
index 6052c275..53c2482e 100644
--- a/libnm-util/libnm-util.ver
+++ b/libnm-util/libnm-util.ver
@@ -2,6 +2,7 @@
 global:
 	nm_connection_add_setting;
 	nm_connection_clear_secrets;
+	nm_connection_clear_secrets_with_flags;
 	nm_connection_compare;
 	nm_connection_create_setting;
 	nm_connection_diff;
@@ -31,6 +32,7 @@ global:
 	nm_connection_get_setting_wireless_security;
 	nm_connection_get_type;
 	nm_connection_get_uuid;
+	nm_connection_is_type;
 	nm_connection_lookup_setting_type;
 	nm_connection_lookup_setting_type_by_quark;
 	nm_connection_need_secrets;
@@ -174,6 +176,7 @@ global:
 	nm_setting_cdma_get_username;
 	nm_setting_cdma_new;
 	nm_setting_clear_secrets;
+	nm_setting_clear_secrets_with_flags;
 	nm_setting_compare;
 	nm_setting_connection_add_permission;
 	nm_setting_connection_error_get_type;
diff --git a/libnm-util/nm-connection.c b/libnm-util/nm-connection.c
index 91fc3afa..cdc3b81f 100644
--- a/libnm-util/nm-connection.c
+++ b/libnm-util/nm-connection.c
@@ -127,7 +127,7 @@ enum {
 
 enum {
 	SECRETS_UPDATED,
-
+	SECRETS_CLEARED,
 	LAST_SIGNAL
 };
 
@@ -950,12 +950,6 @@ nm_connection_need_secrets (NMConnection *connection,
 	return name;
 }
 
-static void
-clear_setting_secrets (gpointer key, gpointer data, gpointer user_data)
-{
-	nm_setting_clear_secrets (NM_SETTING (data));
-}
-
 /**
  * nm_connection_clear_secrets:
  * @connection: the #NMConnection
@@ -966,12 +960,42 @@ clear_setting_secrets (gpointer key, gpointer data, gpointer user_data)
 void
 nm_connection_clear_secrets (NMConnection *connection)
 {
-	NMConnectionPrivate *priv;
+	GHashTableIter iter;
+	NMSetting *setting;
 
 	g_return_if_fail (NM_IS_CONNECTION (connection));
 
-	priv = NM_CONNECTION_GET_PRIVATE (connection);
-	g_hash_table_foreach (priv->settings, clear_setting_secrets, NULL);
+	g_hash_table_iter_init (&iter, NM_CONNECTION_GET_PRIVATE (connection)->settings);
+	while (g_hash_table_iter_next (&iter, NULL, (gpointer) &setting))
+		nm_setting_clear_secrets (setting);
+
+	g_signal_emit (connection, signals[SECRETS_CLEARED], 0);
+}
+
+/**
+ * nm_connection_clear_secrets_with_flags:
+ * @connection: the #NMConnection
+ * @func: (scope call): function to be called to determine whether a
+ *     specific secret should be cleared or not
+ * @user_data: caller-supplied data passed to @func
+ *
+ * Clears and frees secrets determined by @func.
+ **/
+void
+nm_connection_clear_secrets_with_flags (NMConnection *connection,
+                                        NMSettingClearSecretsWithFlagsFn func,
+                                        gpointer user_data)
+{
+	GHashTableIter iter;
+	NMSetting *setting;
+
+	g_return_if_fail (NM_IS_CONNECTION (connection));
+
+	g_hash_table_iter_init (&iter, NM_CONNECTION_GET_PRIVATE (connection)->settings);
+	while (g_hash_table_iter_next (&iter, NULL, (gpointer) &setting))
+		nm_setting_clear_secrets_with_flags (setting, func, user_data);
+
+	g_signal_emit (connection, signals[SECRETS_CLEARED], 0);
 }
 
 /**
@@ -1027,6 +1051,37 @@ nm_connection_to_hash (NMConnection *connection, NMSettingHashFlags flags)
 }
 
 /**
+ * nm_connection_is_type:
+ * @connection: the #NMConnection
+ * @type: a setting name to check the connection's type against (like 
+ * %NM_SETTING_WIRELESS_SETTING_NAME or %NM_SETTING_WIRED_SETTING_NAME)
+ *
+ * A convenience function to check if the given @connection is a particular
+ * type (ie wired, wifi, ppp, etc). Checks the #NMSettingConnection:type
+ * property of the connection and matches that against @type.
+ *
+ * Returns: %TRUE if the connection is of the given @type, %FALSE if not
+ **/
+gboolean
+nm_connection_is_type (NMConnection *connection, const char *type)
+{
+	NMSettingConnection *s_con;
+	const char *type2;
+
+	g_return_val_if_fail (connection != NULL, FALSE);
+	g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
+	g_return_val_if_fail (type != NULL, FALSE);
+
+	s_con = nm_connection_get_setting_connection (connection);
+	g_assert (s_con);
+
+	type2 = nm_setting_connection_get_connection_type (s_con);
+	g_assert (type2);
+
+	return !strcmp (type2, type);
+}
+
+/**
  * nm_connection_for_each_setting_value:
  * @connection: the #NMConnection
  * @func: (scope call): user-supplied function called for each setting's property
@@ -1609,5 +1664,20 @@ nm_connection_class_init (NMConnectionClass *klass)
 					  g_cclosure_marshal_VOID__STRING,
 					  G_TYPE_NONE, 1,
 					  G_TYPE_STRING);
+
+	/**
+	* NMConnection::secrets-cleared:
+	* @connection: the object on which the signal is emitted
+	*
+	* The ::secrets-cleared signal is emitted when the secrets of a connection
+	* are cleared.
+	*/
+	signals[SECRETS_CLEARED] =
+		g_signal_new ("secrets-cleared",
+		              G_OBJECT_CLASS_TYPE (object_class),
+		              G_SIGNAL_RUN_FIRST,
+		              0, NULL, NULL,
+		              g_cclosure_marshal_VOID__VOID,
+		              G_TYPE_NONE, 0);
 }
 
diff --git a/libnm-util/nm-connection.h b/libnm-util/nm-connection.h
index 3cd18747..069dc84c 100644
--- a/libnm-util/nm-connection.h
+++ b/libnm-util/nm-connection.h
@@ -147,6 +147,10 @@ const char *  nm_connection_need_secrets  (NMConnection *connection,
 
 void          nm_connection_clear_secrets (NMConnection *connection);
 
+void          nm_connection_clear_secrets_with_flags (NMConnection *connection,
+                                                      NMSettingClearSecretsWithFlagsFn func,
+                                                      gpointer user_data);
+
 gboolean      nm_connection_update_secrets (NMConnection *connection,
                                             const char *setting_name,
                                             GHashTable *secrets,
@@ -157,6 +161,8 @@ void          nm_connection_set_path      (NMConnection *connection,
 
 const char *  nm_connection_get_path      (NMConnection *connection);
 
+gboolean      nm_connection_is_type (NMConnection *connection, const char *type);
+
 void          nm_connection_for_each_setting_value (NMConnection *connection,
                                                     NMSettingValueIterFn func,
                                                     gpointer user_data);
diff --git a/libnm-util/nm-param-spec-specialized.c b/libnm-util/nm-param-spec-specialized.c
index 7e921bca..82ec6a40 100644
--- a/libnm-util/nm-param-spec-specialized.c
+++ b/libnm-util/nm-param-spec-specialized.c
@@ -19,11 +19,12 @@
  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
  * Boston, MA 02110-1301 USA.
  *
- * (C) Copyright 2007 - 2010 Red Hat, Inc.
+ * (C) Copyright 2007 - 2011 Red Hat, Inc.
  * (C) Copyright 2007 - 2008 Novell, Inc.
  */
 
 #include "nm-param-spec-specialized.h"
+#include "nm-glib-compat.h"
 
 struct _NMParamSpecSpecialized {
 	GParamSpec parent;
@@ -92,8 +93,8 @@ _gvalues_compare_fixed (const GValue *value1, const GValue *value2)
 
 	switch (G_VALUE_TYPE (value1)) {
 	case G_TYPE_CHAR: {
-		gchar val1 = g_value_get_char (value1);
-		gchar val2 = g_value_get_char (value2);
+		gchar val1 = g_value_get_schar (value1);
+		gchar val2 = g_value_get_schar (value2);
 		if (val1 != val2)
 			ret = val1 < val2 ? -1 : val1 > val2;
 		break;
diff --git a/libnm-util/nm-setting-gsm.c b/libnm-util/nm-setting-gsm.c
index 7033541b..80d3fd31 100644
--- a/libnm-util/nm-setting-gsm.c
+++ b/libnm-util/nm-setting-gsm.c
@@ -768,7 +768,7 @@ nm_setting_gsm_class_init (NMSettingGsmClass *setting_class)
 	g_object_class_install_property
 		(object_class, PROP_HOME_ONLY,
 		 g_param_spec_boolean (NM_SETTING_GSM_HOME_ONLY,
-						  "PIN",
+						  "Home Only",
 						  "When TRUE, only connections to the home network will "
 						  "be allowed.  Connections to roaming networks will "
 						  "not be made.",
diff --git a/libnm-util/nm-setting-serial.c b/libnm-util/nm-setting-serial.c
index 7ed15e9e..24e6253e 100644
--- a/libnm-util/nm-setting-serial.c
+++ b/libnm-util/nm-setting-serial.c
@@ -26,6 +26,7 @@
 #include <string.h>
 
 #include "nm-setting-serial.h"
+#include "nm-glib-compat.h"
 
 /**
  * SECTION:nm-setting-serial
@@ -214,7 +215,7 @@ set_property (GObject *object, guint prop_id,
 		priv->bits = g_value_get_uint (value);
 		break;
 	case PROP_PARITY:
-		priv->parity = g_value_get_char (value);
+		priv->parity = g_value_get_schar (value);
 		break;
 	case PROP_STOPBITS:
 		priv->stopbits = g_value_get_uint (value);
@@ -242,7 +243,7 @@ get_property (GObject *object, guint prop_id,
 		g_value_set_uint (value, nm_setting_serial_get_bits (setting));
 		break;
 	case PROP_PARITY:
-		g_value_set_char (value, nm_setting_serial_get_parity (setting));
+		g_value_set_schar (value, nm_setting_serial_get_parity (setting));
 		break;
 	case PROP_STOPBITS:
 		g_value_set_uint (value, nm_setting_serial_get_stopbits (setting));
diff --git a/libnm-util/nm-setting-vpn.c b/libnm-util/nm-setting-vpn.c
index 50091cb9..755c1a45 100644
--- a/libnm-util/nm-setting-vpn.c
+++ b/libnm-util/nm-setting-vpn.c
@@ -612,6 +612,30 @@ compare_property (NMSetting *setting,
 }
 
 static void
+clear_secrets_with_flags (NMSetting *setting,
+	                      GParamSpec *pspec,
+	                      NMSettingClearSecretsWithFlagsFn func,
+	                      gpointer user_data)
+{
+	NMSettingVPNPrivate *priv = NM_SETTING_VPN_GET_PRIVATE (setting);
+	GHashTableIter iter;
+	const char *secret;
+
+	if (priv->secrets == NULL)
+		return;
+
+	/* Iterate through secrets hash and check each entry */
+	g_hash_table_iter_init (&iter, priv->secrets);
+	while (g_hash_table_iter_next (&iter, (gpointer) &secret, NULL)) {
+		NMSettingSecretFlags flags = NM_SETTING_SECRET_FLAG_NONE;
+
+		nm_setting_get_secret_flags (setting, secret, &flags, NULL);
+		if (func (setting, pspec->name, flags, user_data) == TRUE)
+			g_hash_table_iter_remove (&iter);
+	}
+}
+
+static void
 destroy_one_secret (gpointer data)
 {
 	char *secret = (char *) data;
@@ -733,6 +757,7 @@ nm_setting_vpn_class_init (NMSettingVPNClass *setting_class)
 	parent_class->set_secret_flags  = set_secret_flags;
 	parent_class->need_secrets      = need_secrets;
 	parent_class->compare_property  = compare_property;
+	parent_class->clear_secrets_with_flags = clear_secrets_with_flags;
 
 	/* Properties */
 	/**
diff --git a/libnm-util/nm-setting.c b/libnm-util/nm-setting.c
index 3573f888..2b3bdc58 100644
--- a/libnm-util/nm-setting.c
+++ b/libnm-util/nm-setting.c
@@ -308,8 +308,8 @@ nm_setting_get_name (NMSetting *setting)
 /**
  * nm_setting_verify:
  * @setting: the #NMSetting to verify
- * @all_settings: a #GSList of all settings in the connection from which @setting
- * came
+ * @all_settings: (element-type NMSetting): a #GSList of all settings
+ *     in the connection from which @setting came
  * @error: location to store error, or %NULL
  *
  * Validates the setting.  Each setting's properties have allowed values, and
@@ -648,6 +648,60 @@ nm_setting_clear_secrets (NMSetting *setting)
 	g_free (property_specs);
 }
 
+static void
+clear_secrets_with_flags (NMSetting *setting,
+	                      GParamSpec *pspec,
+	                      NMSettingClearSecretsWithFlagsFn func,
+	                      gpointer user_data)
+{
+	GValue value = { 0 };
+	NMSettingSecretFlags flags = NM_SETTING_SECRET_FLAG_NONE;
+
+	/* Clear the secret if the user function says to do so */
+	nm_setting_get_secret_flags (setting, pspec->name, &flags, NULL);
+	if (func (setting, pspec->name, flags, user_data) == TRUE) {
+		g_value_init (&value, pspec->value_type);
+		g_param_value_set_default (pspec, &value);
+		g_object_set_property (G_OBJECT (setting), pspec->name, &value);
+		g_value_unset (&value);
+	}
+}
+
+/**
+ * nm_setting_clear_secrets_with_flags:
+ * @setting: the #NMSetting
+ * @func: (scope call): function to be called to determine whether a
+ *     specific secret should be cleared or not
+ * @user_data: caller-supplied data passed to @func
+ *
+ * Clears and frees secrets determined by @func.
+ **/
+void
+nm_setting_clear_secrets_with_flags (NMSetting *setting,
+                                     NMSettingClearSecretsWithFlagsFn func,
+                                     gpointer user_data)
+{
+	GParamSpec **property_specs;
+	guint n_property_specs;
+	guint i;
+
+	g_return_if_fail (setting);
+	g_return_if_fail (NM_IS_SETTING (setting));
+	g_return_if_fail (func != NULL);
+
+	property_specs = g_object_class_list_properties (G_OBJECT_GET_CLASS (setting), &n_property_specs);
+	for (i = 0; i < n_property_specs; i++) {
+		if (property_specs[i]->flags & NM_SETTING_PARAM_SECRET) {
+			NM_SETTING_GET_CLASS (setting)->clear_secrets_with_flags (setting,
+			                                                          property_specs[i],
+			                                                          func,
+			                                                          user_data);
+		}
+	}
+
+	g_free (property_specs);
+}
+
 /**
  * nm_setting_need_secrets:
  * @setting: the #NMSetting
@@ -1029,6 +1083,7 @@ nm_setting_class_init (NMSettingClass *setting_class)
 	setting_class->get_secret_flags = get_secret_flags;
 	setting_class->set_secret_flags = set_secret_flags;
 	setting_class->compare_property = compare_property;
+	setting_class->clear_secrets_with_flags = clear_secrets_with_flags;
 
 	/* Properties */
 
diff --git a/libnm-util/nm-setting.h b/libnm-util/nm-setting.h
index e21efd81..3edf2a1f 100644
--- a/libnm-util/nm-setting.h
+++ b/libnm-util/nm-setting.h
@@ -150,6 +150,21 @@ typedef struct {
 	GObject parent;
 } NMSetting;
 
+
+/**
+ * NMSettingClearSecretsWithFlagsFn:
+ * @setting: The setting for which secrets are being iterated
+ * @secret: The secret's name
+ * @flags: The secret's flags, eg %NM_SETTING_SECRET_FLAG_AGENT_OWNED
+ * @user_data: User data passed to nm_connection_clear_secrets_with_flags()
+ *
+ * Returns: %TRUE to clear the secret, %FALSE to not clear the secret
+ */
+typedef gboolean (*NMSettingClearSecretsWithFlagsFn) (NMSetting *setting,
+                                                      const char *secret,
+                                                      NMSettingSecretFlags flags,
+                                                      gpointer user_data);
+
 typedef struct {
 	GObjectClass parent;
 
@@ -183,10 +198,14 @@ typedef struct {
 	                                  const GParamSpec *prop_spec,
 	                                  NMSettingCompareFlags flags);
 
+	void        (*clear_secrets_with_flags) (NMSetting *setting,
+	                                         GParamSpec *pspec,
+	                                         NMSettingClearSecretsWithFlagsFn func,
+	                                         gpointer user_data);
+
 	/* Padding for future expansion */
 	void (*_reserved1) (void);
 	void (*_reserved2) (void);
-	void (*_reserved3) (void);
 } NMSettingClass;
 
 /**
@@ -269,6 +288,11 @@ char       *nm_setting_to_string      (NMSetting *setting);
 
 /* Secrets */
 void        nm_setting_clear_secrets  (NMSetting *setting);
+
+void        nm_setting_clear_secrets_with_flags (NMSetting *setting,
+                                                 NMSettingClearSecretsWithFlagsFn func,
+                                                 gpointer user_data);
+
 GPtrArray  *nm_setting_need_secrets   (NMSetting *setting);
 gboolean    nm_setting_update_secrets (NMSetting *setting,
                                        GHashTable *secrets,
diff --git a/libnm-util/nm-utils.c b/libnm-util/nm-utils.c
index d8bcf349..9d4418e4 100644
--- a/libnm-util/nm-utils.c
+++ b/libnm-util/nm-utils.c
@@ -490,7 +490,7 @@ nm_utils_gvalue_hash_dup (GHashTable *hash)
 }
 
 /**
- * nm_utils_slist_free:
+ * nm_utils_slist_free: (skip)
  * @list: a #GSList
  * @elem_destroy_fn: user function called for each element in @list
  *
@@ -1373,7 +1373,7 @@ nm_utils_ip4_addresses_from_gvalue (const GValue *value)
 
 /**
  * nm_utils_ip4_addresses_to_gvalue:
- * @list: a list of #NMIP4Address objects
+ * @list: (element-type NMIP4Address): a list of #NMIP4Address objects
  * @value: a pointer to a #GValue into which to place the converted addresses,
  * which should be unset by the caller (when no longer needed) with
  * g_value_unset().
@@ -1456,7 +1456,7 @@ nm_utils_ip4_routes_from_gvalue (const GValue *value)
 
 /**
  * nm_utils_ip4_routes_to_gvalue:
- * @list: a list of #NMIP4Route objects
+ * @list: (element-type NMIP4Route): a list of #NMIP4Route objects
  * @value: a pointer to a #GValue into which to place the converted routes,
  * which should be unset by the caller (when no longer needed) with
  * g_value_unset().
@@ -1664,7 +1664,7 @@ nm_utils_ip6_addresses_from_gvalue (const GValue *value)
 
 /**
  * nm_utils_ip6_addresses_to_gvalue:
- * @list: a list of #NMIP6Address objects
+ * @list: (element-type NMIP6Address): a list of #NMIP6Address objects
  * @value: a pointer to a #GValue into which to place the converted addresses,
  * which should be unset by the caller (when no longer needed) with
  * g_value_unset().
@@ -1786,7 +1786,7 @@ nm_utils_ip6_routes_from_gvalue (const GValue *value)
 
 /**
  * nm_utils_ip6_routes_to_gvalue:
- * @list: a list of #NMIP6Route objects
+ * @list: (element-type NMIP6Route): a list of #NMIP6Route objects
  * @value: a pointer to a #GValue into which to place the converted routes,
  * which should be unset by the caller (when no longer needed) with
  * g_value_unset().
diff --git a/libnm-util/tests/Makefile.in b/libnm-util/tests/Makefile.in
index c4919ffc..b8aa1791 100644
--- a/libnm-util/tests/Makefile.in
+++ b/libnm-util/tests/Makefile.in
@@ -250,8 +250,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/libnm-util/tests/certs/Makefile.in b/libnm-util/tests/certs/Makefile.in
index 5149078b..b0fbee9e 100644
--- a/libnm-util/tests/certs/Makefile.in
+++ b/libnm-util/tests/certs/Makefile.in
@@ -161,8 +161,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/man/Makefile.in b/man/Makefile.in
index ef05bde1..dd6dfdf6 100644
--- a/man/Makefile.in
+++ b/man/Makefile.in
@@ -185,8 +185,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/man/nmcli.1 b/man/nmcli.1
index 5afb802b..03ed664c 100644
--- a/man/nmcli.1
+++ b/man/nmcli.1
@@ -20,9 +20,9 @@
 .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111,
 .\" USA.
 .\"
-.\" Copyright (C) 2010 Red Hat, Inc.
+.\" Copyright (C) 2010 - 2011 Red Hat, Inc.
 .\"
-.TH NMCLI "1" "22 September 2010"
+.TH NMCLI "1" "6 September 2011"
 
 .SH NAME
 nmcli \- command-line tool for controlling NetworkManager
@@ -201,7 +201,7 @@ Connections
 .br
 Get information about NetworkManager's connections.
 .TP
-.SS \fICOMMAND\fP := { list | status | up | down }
+.SS \fICOMMAND\fP := { list | status | up | down | delete }
 .sp
 .RS
 .TP
@@ -226,7 +226,7 @@ Print status of active connections.
 No simple reference.
 .fi
 .TP
-.B up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [\-\-nowait] [\-\-timeout <timeout>]
+.B up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [\-\-nowait] [\-\-timeout <timeout>]
 .br
 Activate a connection.  The connection is identified by its name using \fIid\fP
 or UUID using \fIuuid\fP.  For requiring particular device to activate
@@ -255,6 +255,18 @@ interface: org.freedesktop.NetworkManager
 method:    DeactivateConnection
 arguments: according to arguments
 .fi
+.TP
+.B delete id <id> | uuid <id>
+.br
+Delete a configured connection.  The connection to delete is specified with
+\fIid\fP (connection name) or \fIuuid\fP (connection UUID).
+.br
+.nf
+\fBReference to D-Bus:\fP
+interface: org.freedesktop.NetworkManager.Settings.Connection
+method:    Delete
+arguments: none
+.fi
 .RE
 
 .TP
@@ -303,9 +315,9 @@ method:    Disconnect
 arguments: none
 .fi
 .TP
-.B wifi [list [iface <iface>] [hwaddr <hwaddr>]]
+.B wifi [list [iface <iface>] [bssid <BSSID>]]
 .br
-List available WiFi access points.  \fIiface\fP and \fIhwaddr\fP options
+List available WiFi access points.  \fIiface\fP and \fIbssid\fP options
 can be used to get just APs for particular interface or specific AP,
 respectively.
 .br
@@ -329,7 +341,7 @@ or null.
 .RE
 Notes about localization:
 .br
-Be aware that \fInmcli\fP is localized and that's why the output depends on 
+Be aware that \fInmcli\fP is localized and that's why the output depends on
 your environment. It's important to realize that especially when you parse the
 output.
 .br
diff --git a/man/nmcli.1.in b/man/nmcli.1.in
index 5afb802b..03ed664c 100644
--- a/man/nmcli.1.in
+++ b/man/nmcli.1.in
@@ -20,9 +20,9 @@
 .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111,
 .\" USA.
 .\"
-.\" Copyright (C) 2010 Red Hat, Inc.
+.\" Copyright (C) 2010 - 2011 Red Hat, Inc.
 .\"
-.TH NMCLI "1" "22 September 2010"
+.TH NMCLI "1" "6 September 2011"
 
 .SH NAME
 nmcli \- command-line tool for controlling NetworkManager
@@ -201,7 +201,7 @@ Connections
 .br
 Get information about NetworkManager's connections.
 .TP
-.SS \fICOMMAND\fP := { list | status | up | down }
+.SS \fICOMMAND\fP := { list | status | up | down | delete }
 .sp
 .RS
 .TP
@@ -226,7 +226,7 @@ Print status of active connections.
 No simple reference.
 .fi
 .TP
-.B up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [\-\-nowait] [\-\-timeout <timeout>]
+.B up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [\-\-nowait] [\-\-timeout <timeout>]
 .br
 Activate a connection.  The connection is identified by its name using \fIid\fP
 or UUID using \fIuuid\fP.  For requiring particular device to activate
@@ -255,6 +255,18 @@ interface: org.freedesktop.NetworkManager
 method:    DeactivateConnection
 arguments: according to arguments
 .fi
+.TP
+.B delete id <id> | uuid <id>
+.br
+Delete a configured connection.  The connection to delete is specified with
+\fIid\fP (connection name) or \fIuuid\fP (connection UUID).
+.br
+.nf
+\fBReference to D-Bus:\fP
+interface: org.freedesktop.NetworkManager.Settings.Connection
+method:    Delete
+arguments: none
+.fi
 .RE
 
 .TP
@@ -303,9 +315,9 @@ method:    Disconnect
 arguments: none
 .fi
 .TP
-.B wifi [list [iface <iface>] [hwaddr <hwaddr>]]
+.B wifi [list [iface <iface>] [bssid <BSSID>]]
 .br
-List available WiFi access points.  \fIiface\fP and \fIhwaddr\fP options
+List available WiFi access points.  \fIiface\fP and \fIbssid\fP options
 can be used to get just APs for particular interface or specific AP,
 respectively.
 .br
@@ -329,7 +341,7 @@ or null.
 .RE
 Notes about localization:
 .br
-Be aware that \fInmcli\fP is localized and that's why the output depends on 
+Be aware that \fInmcli\fP is localized and that's why the output depends on
 your environment. It's important to realize that especially when you parse the
 output.
 .br
diff --git a/marshallers/Makefile.in b/marshallers/Makefile.in
index 5e2e86db..5901c3a4 100644
--- a/marshallers/Makefile.in
+++ b/marshallers/Makefile.in
@@ -183,8 +183,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/po/de.po b/po/de.po
index eb02b0f8..0aa41eea 100644
--- a/po/de.po
+++ b/po/de.po
@@ -15,8 +15,8 @@ msgstr ""
 "Project-Id-Version: NetworkManager HEAD\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 "product=NetworkManager&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2011-03-31 15:25+0000\n"
-"PO-Revision-Date: 2011-03-31 21:08+0200\n"
+"POT-Creation-Date: 2011-08-20 15:25+0000\n"
+"PO-Revision-Date: 2011-08-31 13:16+0100\n"
 "Last-Translator: Christian Kirbach <Christian.Kirbach@googlemail.com>\n"
 "Language-Team: Deutsch <gnome-de@gnome.org>\n"
 "MIME-Version: 1.0\n"
@@ -121,12 +121,12 @@ msgstr ""
 "nowait] [--timeout <timeout>]\n"
 "  down id <Kennung> | uuid <Kennung>\n"
 
-#: ../cli/src/connections.c:220 ../cli/src/connections.c:542
+#: ../cli/src/connections.c:220 ../cli/src/connections.c:544
 #, c-format
 msgid "Error: 'con list': %s"
 msgstr "Fehler: »Verb. Liste«: %s"
 
-#: ../cli/src/connections.c:222 ../cli/src/connections.c:544
+#: ../cli/src/connections.c:222 ../cli/src/connections.c:546
 #, c-format
 msgid "Error: 'con list': %s; allowed fields: %s"
 msgstr "Fehler: »Verb. Liste«: %s; erlaubte Felder: %s"
@@ -135,15 +135,15 @@ msgstr "Fehler: »Verb. Liste«: %s; erlaubte Felder: %s"
 msgid "Connection details"
 msgstr "Verbindungsinformationen"
 
-#: ../cli/src/connections.c:417
+#: ../cli/src/connections.c:419
 msgid "never"
 msgstr "nie"
 
 #. "CAPABILITIES"
 #. Print header
 #. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:418 ../cli/src/connections.c:419
-#: ../cli/src/connections.c:597 ../cli/src/connections.c:599
+#: ../cli/src/connections.c:420 ../cli/src/connections.c:421
+#: ../cli/src/connections.c:599 ../cli/src/connections.c:601
 #: ../cli/src/devices.c:509 ../cli/src/devices.c:562 ../cli/src/devices.c:687
 #: ../cli/src/devices.c:713 ../cli/src/devices.c:714 ../cli/src/devices.c:715
 #: ../cli/src/devices.c:716 ../cli/src/devices.c:717 ../cli/src/settings.c:520
@@ -162,8 +162,8 @@ msgstr "nie"
 msgid "yes"
 msgstr "ja"
 
-#: ../cli/src/connections.c:418 ../cli/src/connections.c:419
-#: ../cli/src/connections.c:597 ../cli/src/connections.c:599
+#: ../cli/src/connections.c:420 ../cli/src/connections.c:421
+#: ../cli/src/connections.c:599 ../cli/src/connections.c:601
 #: ../cli/src/devices.c:509 ../cli/src/devices.c:562 ../cli/src/devices.c:687
 #: ../cli/src/devices.c:713 ../cli/src/devices.c:714 ../cli/src/devices.c:715
 #: ../cli/src/devices.c:716 ../cli/src/devices.c:717 ../cli/src/settings.c:520
@@ -182,14 +182,14 @@ msgstr "ja"
 msgid "no"
 msgstr "nein"
 
-#: ../cli/src/connections.c:493
+#: ../cli/src/connections.c:495
 msgid "Connection list"
 msgstr "Verbindungsliste"
 
-#: ../cli/src/connections.c:506 ../cli/src/connections.c:1378
-#: ../cli/src/connections.c:1393 ../cli/src/connections.c:1402
-#: ../cli/src/connections.c:1412 ../cli/src/connections.c:1424
-#: ../cli/src/connections.c:1519 ../cli/src/devices.c:1190
+#: ../cli/src/connections.c:508 ../cli/src/connections.c:1368
+#: ../cli/src/connections.c:1383 ../cli/src/connections.c:1392
+#: ../cli/src/connections.c:1402 ../cli/src/connections.c:1414
+#: ../cli/src/connections.c:1509 ../cli/src/devices.c:1190
 #: ../cli/src/devices.c:1200 ../cli/src/devices.c:1314
 #: ../cli/src/devices.c:1321 ../cli/src/devices.c:1534
 #: ../cli/src/devices.c:1541
@@ -197,42 +197,42 @@ msgstr "Verbindungsliste"
 msgid "Error: %s argument is missing."
 msgstr "Fehler: Argument %s fehlt."
 
-#: ../cli/src/connections.c:519
+#: ../cli/src/connections.c:521
 #, c-format
 msgid "Error: %s - no such connection."
 msgstr "Fehler: Verbindung %s existiert nicht."
 
-#: ../cli/src/connections.c:525 ../cli/src/connections.c:1437
-#: ../cli/src/connections.c:1536 ../cli/src/devices.c:987
+#: ../cli/src/connections.c:527 ../cli/src/connections.c:1427
+#: ../cli/src/connections.c:1526 ../cli/src/devices.c:987
 #: ../cli/src/devices.c:1067 ../cli/src/devices.c:1214
 #: ../cli/src/devices.c:1327 ../cli/src/devices.c:1547
 #, c-format
 msgid "Unknown parameter: %s\n"
 msgstr "Unbekannter Parameter: %s\n"
 
-#: ../cli/src/connections.c:534
+#: ../cli/src/connections.c:536
 #, c-format
 msgid "Error: no valid parameter specified."
 msgstr "Fehler: Es wurde kein gültiger Parameter angegeben."
 
-#: ../cli/src/connections.c:549 ../cli/src/connections.c:1627
+#: ../cli/src/connections.c:551 ../cli/src/connections.c:1617
 #: ../cli/src/devices.c:1755 ../cli/src/network-manager.c:463
 #, c-format
 msgid "Error: %s."
 msgstr "Fehler: %s."
 
-#: ../cli/src/connections.c:637
+#: ../cli/src/connections.c:639
 #, c-format
 msgid "Error: 'con status': %s"
 msgstr "Fehler: »Verb. Status«: %s"
 
-#: ../cli/src/connections.c:639
+#: ../cli/src/connections.c:641
 #, c-format
 msgid "Error: 'con status': %s; allowed fields: %s"
 msgstr "Fehler: »Verb. Status«: %s; erlaubte Felder: %s"
 
-#: ../cli/src/connections.c:647 ../cli/src/connections.c:1452
-#: ../cli/src/connections.c:1551 ../cli/src/devices.c:1014
+#: ../cli/src/connections.c:649 ../cli/src/connections.c:1442
+#: ../cli/src/connections.c:1541 ../cli/src/devices.c:1014
 #: ../cli/src/devices.c:1076 ../cli/src/devices.c:1229
 #: ../cli/src/devices.c:1357 ../cli/src/devices.c:1576
 #, c-format
@@ -240,227 +240,228 @@ msgid "Error: Can't find out if NetworkManager is running: %s."
 msgstr ""
 "Fehler: Es kann nicht erkannt werden, ob NetworkManager ausgeführt wird: %s."
 
-#: ../cli/src/connections.c:651 ../cli/src/connections.c:1456
-#: ../cli/src/connections.c:1555 ../cli/src/devices.c:1018
+#: ../cli/src/connections.c:653 ../cli/src/connections.c:1446
+#: ../cli/src/connections.c:1545 ../cli/src/devices.c:1018
 #: ../cli/src/devices.c:1080 ../cli/src/devices.c:1233
 #: ../cli/src/devices.c:1361 ../cli/src/devices.c:1580
 #, c-format
 msgid "Error: NetworkManager is not running."
 msgstr "Fehler: NetworkManager wird nicht ausgeführt"
 
-#: ../cli/src/connections.c:659
+#: ../cli/src/connections.c:661
 msgid "Active connections"
 msgstr "Aktive Verbindungen"
 
-#: ../cli/src/connections.c:1095
+#: ../cli/src/connections.c:1085
 #, c-format
 msgid "no active connection on device '%s'"
 msgstr "Keine aktive Verbindung auf Gerät »%s«"
 
-#: ../cli/src/connections.c:1103
+#: ../cli/src/connections.c:1093
 #, c-format
 msgid "no active connection or device"
 msgstr "Keine aktive Verbindung oder Gerät"
 
-#: ../cli/src/connections.c:1174
+#: ../cli/src/connections.c:1164
 #, c-format
 msgid "device '%s' not compatible with connection '%s'"
 msgstr "Gerät »%s« ist nicht mit der Verbindung »%s« kompatibel"
 
-#: ../cli/src/connections.c:1176
+#: ../cli/src/connections.c:1166
 #, c-format
 msgid "no device found for connection '%s'"
 msgstr "Für die Verbindung »%s« wurde kein Gerät gefunden"
 
-#: ../cli/src/connections.c:1187
+#: ../cli/src/connections.c:1177
 msgid "activating"
 msgstr "wird aktiviert"
 
-#: ../cli/src/connections.c:1189
+#: ../cli/src/connections.c:1179
 msgid "activated"
 msgstr "aktiviert"
 
-#: ../cli/src/connections.c:1191 ../cli/src/devices.c:304
+#: ../cli/src/connections.c:1181 ../cli/src/devices.c:304
 msgid "deactivating"
 msgstr "wird deaktiviert"
 
-#: ../cli/src/connections.c:1194 ../cli/src/connections.c:1217
-#: ../cli/src/connections.c:1250 ../cli/src/devices.c:308
+#: ../cli/src/connections.c:1184 ../cli/src/connections.c:1207
+#: ../cli/src/connections.c:1240 ../cli/src/devices.c:308
 #: ../cli/src/devices.c:688 ../cli/src/network-manager.c:118
 #: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:183
-#: ../cli/src/network-manager.c:298 ../cli/src/network-manager.c:353
-#: ../cli/src/network-manager.c:391 ../cli/src/network-manager.c:430
-#: ../cli/src/settings.c:485 ../cli/src/utils.c:396
+#: ../cli/src/network-manager.c:192 ../cli/src/network-manager.c:298
+#: ../cli/src/network-manager.c:353 ../cli/src/network-manager.c:391
+#: ../cli/src/network-manager.c:430 ../cli/src/settings.c:485
+#: ../cli/src/utils.c:396
 msgid "unknown"
 msgstr "unbekannt"
 
-#: ../cli/src/connections.c:1203
+#: ../cli/src/connections.c:1193
 msgid "VPN connecting (prepare)"
 msgstr "VPN wird verbunden (wird vorbereitet)"
 
-#: ../cli/src/connections.c:1205
+#: ../cli/src/connections.c:1195
 msgid "VPN connecting (need authentication)"
 msgstr "VPN wird verbunden (Legitimierung wird benötigt)"
 
-#: ../cli/src/connections.c:1207
+#: ../cli/src/connections.c:1197
 msgid "VPN connecting"
 msgstr "VPN wird verbunden"
 
-#: ../cli/src/connections.c:1209
+#: ../cli/src/connections.c:1199
 msgid "VPN connecting (getting IP configuration)"
 msgstr "VPN wird verbunden (IP-Einstellungen werden ermittelt)"
 
-#: ../cli/src/connections.c:1211
+#: ../cli/src/connections.c:1201
 msgid "VPN connected"
 msgstr "VPN verbunden"
 
-#: ../cli/src/connections.c:1213
+#: ../cli/src/connections.c:1203
 msgid "VPN connection failed"
 msgstr "VPN-Verbindung gescheitert"
 
-#: ../cli/src/connections.c:1215
+#: ../cli/src/connections.c:1205
 msgid "VPN disconnected"
 msgstr "VPN getrennt"
 
-#: ../cli/src/connections.c:1226
+#: ../cli/src/connections.c:1216
 msgid "unknown reason"
 msgstr "unbekannter Grund"
 
-#: ../cli/src/connections.c:1228
+#: ../cli/src/connections.c:1218
 msgid "none"
 msgstr "kein"
 
-#: ../cli/src/connections.c:1230
+#: ../cli/src/connections.c:1220
 msgid "the user was disconnected"
 msgstr "Der Benutzer wurde getrennt"
 
-#: ../cli/src/connections.c:1232
+#: ../cli/src/connections.c:1222
 msgid "the base network connection was interrupted"
 msgstr "Die Basisverbindung wurde unterbrochen"
 
-#: ../cli/src/connections.c:1234
+#: ../cli/src/connections.c:1224
 msgid "the VPN service stopped unexpectedly"
 msgstr "Der VPN-Dienst wurde unerwartet gestoppt"
 
-#: ../cli/src/connections.c:1236
+#: ../cli/src/connections.c:1226
 msgid "the VPN service returned invalid configuration"
 msgstr "Der VPN-Dienst gab ungültige Einstellungen zurück"
 
-#: ../cli/src/connections.c:1238
+#: ../cli/src/connections.c:1228
 msgid "the connection attempt timed out"
 msgstr "Der Verbindungsversuch benötigte zu viel Zeit"
 
-#: ../cli/src/connections.c:1240
+#: ../cli/src/connections.c:1230
 msgid "the VPN service did not start in time"
 msgstr "Der VPN-Dienst wurde nicht rechtzeitig gestartet"
 
-#: ../cli/src/connections.c:1242
+#: ../cli/src/connections.c:1232
 msgid "the VPN service failed to start"
 msgstr "Der VPN-Dienst konnte nicht gestartet werden"
 
-#: ../cli/src/connections.c:1244
+#: ../cli/src/connections.c:1234
 msgid "no valid VPN secrets"
 msgstr "Keine gültigen VPN-Schlüssel"
 
-#: ../cli/src/connections.c:1246
+#: ../cli/src/connections.c:1236
 msgid "invalid VPN secrets"
 msgstr "Ungültige VPN-Schlüssel"
 
-#: ../cli/src/connections.c:1248
+#: ../cli/src/connections.c:1238
 msgid "the connection was removed"
 msgstr "Die Verbindung wurde entfernt"
 
-#: ../cli/src/connections.c:1262
+#: ../cli/src/connections.c:1252
 #, c-format
 msgid "state: %s\n"
 msgstr "Status: %s\n"
 
-#: ../cli/src/connections.c:1265 ../cli/src/connections.c:1291
+#: ../cli/src/connections.c:1255 ../cli/src/connections.c:1281
 #, c-format
 msgid "Connection activated\n"
 msgstr "Verbindung aktiviert\n"
 
-#: ../cli/src/connections.c:1268
+#: ../cli/src/connections.c:1258
 #, c-format
 msgid "Error: Connection activation failed."
 msgstr "Fehler: Aktivierung der Verbindung ist gescheitert."
 
-#: ../cli/src/connections.c:1287
+#: ../cli/src/connections.c:1277
 #, c-format
 msgid "state: %s (%d)\n"
 msgstr "Status: %s (%d)\n"
 
-#: ../cli/src/connections.c:1297
+#: ../cli/src/connections.c:1287
 #, c-format
 msgid "Error: Connection activation failed: %s."
 msgstr "Fehler: Aktivierung der Verbindung ist gescheitert: %s."
 
-#: ../cli/src/connections.c:1314 ../cli/src/devices.c:1136
+#: ../cli/src/connections.c:1304 ../cli/src/devices.c:1136
 #, c-format
 msgid "Error: Timeout %d sec expired."
 msgstr "Fehler: Zeitbeschränkung von %d Sekunden ist abgelaufen."
 
-#: ../cli/src/connections.c:1327
+#: ../cli/src/connections.c:1317
 #, c-format
 msgid "Error: Connection activation failed: %s"
 msgstr "Fehler: Aktivierung der Verbindung ist gescheitert: %s"
 
-#: ../cli/src/connections.c:1333
+#: ../cli/src/connections.c:1323
 #, c-format
 msgid "Active connection state: %s\n"
 msgstr "Status der aktiven Verbindung: %s\n"
 
-#: ../cli/src/connections.c:1334
+#: ../cli/src/connections.c:1324
 #, c-format
 msgid "Active connection path: %s\n"
 msgstr "Pfad der aktiven Verbindung: %s\n"
 
-#: ../cli/src/connections.c:1386 ../cli/src/connections.c:1527
+#: ../cli/src/connections.c:1376 ../cli/src/connections.c:1517
 #, c-format
 msgid "Error: Unknown connection: %s."
 msgstr "Fehler: Unbekannte Verbindung: %s."
 
-#: ../cli/src/connections.c:1432 ../cli/src/devices.c:1208
+#: ../cli/src/connections.c:1422 ../cli/src/devices.c:1208
 #, c-format
 msgid "Error: timeout value '%s' is not valid."
 msgstr "Fehler: Der Wert »%s« ist keine gültige Zeitangabe."
 
-#: ../cli/src/connections.c:1445 ../cli/src/connections.c:1544
+#: ../cli/src/connections.c:1435 ../cli/src/connections.c:1534
 #, c-format
 msgid "Error: id or uuid has to be specified."
 msgstr "Fehler: id oder uuid müssen angegeben werden."
 
-#: ../cli/src/connections.c:1473
+#: ../cli/src/connections.c:1463
 #, c-format
 msgid "Error: No suitable device found: %s."
 msgstr "Fehler: Es wurde kein passendes Gerät gefunden: %s."
 
-#: ../cli/src/connections.c:1475
+#: ../cli/src/connections.c:1465
 #, c-format
 msgid "Error: No suitable device found."
 msgstr "Fehler: Es wurde kein passendes Gerät gefunden."
 
-#: ../cli/src/connections.c:1580
+#: ../cli/src/connections.c:1570
 #, c-format
 msgid "Warning: Connection not active\n"
 msgstr "Warnung: Verbindung ist nicht aktiv\n"
 
-#: ../cli/src/connections.c:1618
+#: ../cli/src/connections.c:1608
 #, c-format
 msgid "Error: 'con' command '%s' is not valid."
 msgstr "Fehler: Der »con«-Befehl »%s« ist ungültig."
 
-#: ../cli/src/connections.c:1683
+#: ../cli/src/connections.c:1673
 #, c-format
 msgid "Error: could not connect to D-Bus."
 msgstr "Fehler: Verbindung zu D-Bus konnte nicht hergestellt werden."
 
-#: ../cli/src/connections.c:1690
+#: ../cli/src/connections.c:1680
 #, c-format
 msgid "Error: Could not get system settings."
 msgstr "Fehler: Systemeinstellungen konnten nicht ermittelt werden."
 
-#: ../cli/src/connections.c:1700
+#: ../cli/src/connections.c:1690
 #, c-format
 msgid "Error: Can't obtain connections: settings service is not running."
 msgstr ""
@@ -1418,111 +1419,129 @@ msgstr ""
 "überein. Eine Ausführung kann mit »--nocheck« erzwungen werden, aber die "
 "Resultate sind unvorhersehbar."
 
-#: ../libnm-util/crypto.c:127
+#: ../libnm-util/crypto.c:133
 #, c-format
 msgid "PEM key file had no end tag '%s'."
 msgstr "PEM-Schlüsseldatei hat kein abschließendes Tag »%s«."
 
-#: ../libnm-util/crypto.c:140
+#: ../libnm-util/crypto.c:146
 #, c-format
 msgid "Doesn't look like a PEM private key file."
 msgstr "Das sieht nicht nach einer privaten PEM-Schlüsseldatei aus."
 
-#: ../libnm-util/crypto.c:148
+#: ../libnm-util/crypto.c:154
 #, c-format
 msgid "Not enough memory to store PEM file data."
 msgstr "Nicht genügend freier Speicher zum Speichern der PEM-Datendatei."
 
-#: ../libnm-util/crypto.c:164
+#: ../libnm-util/crypto.c:170
 #, c-format
 msgid "Malformed PEM file: Proc-Type was not first tag."
 msgstr "Fehlerhafte PEM-Datei: Proc-Type ist nicht das erste Tag."
 
-#: ../libnm-util/crypto.c:172
+#: ../libnm-util/crypto.c:178
 #, c-format
 msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
 msgstr "Fehlerhafte PEM-Datei: unbekannter Proc-Type-Tag »%s«."
 
-#: ../libnm-util/crypto.c:182
+#: ../libnm-util/crypto.c:188
 #, c-format
 msgid "Malformed PEM file: DEK-Info was not the second tag."
 msgstr "Fehlerhafte PEM-Datei: DEK-Info ist nicht das zweite Tag."
 
-#: ../libnm-util/crypto.c:193
+#: ../libnm-util/crypto.c:199
 #, c-format
 msgid "Malformed PEM file: no IV found in DEK-Info tag."
 msgstr "Fehlerhafte PEM-Datei: kein IV im DEK-Info-Tag gefunden."
 
-#: ../libnm-util/crypto.c:200
+#: ../libnm-util/crypto.c:206
 #, c-format
 msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
 msgstr "Fehlerhafte PEM-Datei: falsches Format des IV im DEK-Info-Tag."
 
-#: ../libnm-util/crypto.c:213
+#: ../libnm-util/crypto.c:219
 #, c-format
 msgid "Malformed PEM file: unknown private key cipher '%s'."
 msgstr "Fehlerhafte PEM-Datei: Unbekannter privater Schlüsselstrom »%s«."
 
-#: ../libnm-util/crypto.c:232
+#: ../libnm-util/crypto.c:238
 #, c-format
 msgid "Could not decode private key."
 msgstr "Der private Schlüssel konnte nicht entschlüsselt werden."
 
-#: ../libnm-util/crypto.c:268 ../libnm-util/crypto.c:554
+#: ../libnm-util/crypto.c:284
+msgid "Failed to find expected PKCS#8 start tag."
+msgstr "Auffinden der erwarteten PKCS#8-Startmarkierung scheiterte."
+
+#: ../libnm-util/crypto.c:292
+#, c-format
+msgid "Failed to find expected PKCS#8 end tag '%s'."
+msgstr "Auffinden der erwarteten PKCS#8-Endmarkierung »%s« scheiterte."
+
+#: ../libnm-util/crypto.c:312
+msgid "Not enough memory to store private key data."
+msgstr ""
+"Nicht genug freier Speicher zum Speichern der Daten des privaten Schlüssels."
+
+#: ../libnm-util/crypto.c:317
+msgid "Failed to decode PKCS#8 private key."
+msgstr "Die Entschlüsselung des privaten  PKCS#8-Schlüssels scheiterte."
+
+#: ../libnm-util/crypto.c:339 ../libnm-util/crypto.c:625
 #, c-format
 msgid "Not enough memory to store certificate data."
 msgstr "Nicht genug freier Speicher zum Speichern des Zertifikats."
 
-#: ../libnm-util/crypto.c:294
+#: ../libnm-util/crypto.c:365
 #, c-format
 msgid "IV must be an even number of bytes in length."
 msgstr "IV muss eine gerade Anzahl an Byte lang sein."
 
-#: ../libnm-util/crypto.c:303
+#: ../libnm-util/crypto.c:374
 #, c-format
 msgid "Not enough memory to store the IV."
 msgstr "Nicht genug freier Speicher zum Speichern des IV."
 
-#: ../libnm-util/crypto.c:314
+#: ../libnm-util/crypto.c:385
 #, c-format
 msgid "IV contains non-hexadecimal digits."
 msgstr "IV enthält nicht-hexadezimale Zeichen."
 
-#: ../libnm-util/crypto.c:352 ../libnm-util/crypto_gnutls.c:149
-#: ../libnm-util/crypto_gnutls.c:267 ../libnm-util/crypto_nss.c:171
-#: ../libnm-util/crypto_nss.c:336
+#: ../libnm-util/crypto.c:423 ../libnm-util/crypto_gnutls.c:147
+#: ../libnm-util/crypto_gnutls.c:265 ../libnm-util/crypto_nss.c:167
+#: ../libnm-util/crypto_nss.c:332
 #, c-format
 msgid "Private key cipher '%s' was unknown."
 msgstr "Privater Schlüsselstrom »%s« ist unbekannt."
 
-#: ../libnm-util/crypto.c:361
+#: ../libnm-util/crypto.c:432
 #, c-format
 msgid "Not enough memory to decrypt private key."
 msgstr "Nicht genug freier Speicher zum Entschlüsseln des privaten Schlüssels."
 
-#: ../libnm-util/crypto.c:426
+#: ../libnm-util/crypto.c:497
 #, c-format
 msgid "Not enough memory to store decrypted private key."
 msgstr ""
 "Nicht genug freier Speicher zum Speichern des entschlüsselten privaten "
 "Schlüssels."
 
-#: ../libnm-util/crypto.c:471
+#: ../libnm-util/crypto.c:542
 #, c-format
 msgid "Unable to determine private key type."
 msgstr "Der Typ des privaten Schlüssels konnte nicht bestimmt werden."
 
-#: ../libnm-util/crypto.c:526
+#: ../libnm-util/crypto.c:597
 #, c-format
 msgid "PEM certificate had no start tag '%s'."
 msgstr "PEM-Zertifikat hatte kein Start-Tag »%s«."
 
-#: ../libnm-util/crypto.c:535
+#: ../libnm-util/crypto.c:606
 #, c-format
 msgid "PEM certificate had no end tag '%s'."
 msgstr "PEM-Zertifikat hatte kein abschließendes Tag »%s«."
 
-#: ../libnm-util/crypto.c:559
+#: ../libnm-util/crypto.c:630
 #, c-format
 msgid "Failed to decode certificate."
 msgstr "Die Entschlüsselung des Zertifikats scheiterte."
@@ -1531,254 +1550,264 @@ msgstr "Die Entschlüsselung des Zertifikats scheiterte."
 msgid "Failed to initialize the crypto engine."
 msgstr "Die Initialisierung der crypto-engine scheiterte."
 
-#: ../libnm-util/crypto_gnutls.c:94
+#: ../libnm-util/crypto_gnutls.c:92
 #, c-format
 msgid "Failed to initialize the MD5 engine: %s / %s."
 msgstr "Die Initialisierung der MD5-engine %s / %s scheiterte."
 
-#: ../libnm-util/crypto_gnutls.c:157
+#: ../libnm-util/crypto_gnutls.c:155
 #, c-format
 msgid "Invalid IV length (must be at least %zd)."
 msgstr "Ungültige IV-Länge (muss mindestens %zd betragen)."
 
-#: ../libnm-util/crypto_gnutls.c:166 ../libnm-util/crypto_nss.c:188
+#: ../libnm-util/crypto_gnutls.c:164 ../libnm-util/crypto_nss.c:184
 #, c-format
 msgid "Not enough memory for decrypted key buffer."
 msgstr ""
 "Nicht genug freier Speicher zum Zwischenspeichern des entschlüsselten "
 "Schlüssels."
 
-#: ../libnm-util/crypto_gnutls.c:174
+#: ../libnm-util/crypto_gnutls.c:172
 #, c-format
 msgid "Failed to initialize the decryption cipher context: %s / %s."
 msgstr ""
 "Die Initialisierung des Entschlüsselung-Chiffrekontextes scheiterte: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:183
+#: ../libnm-util/crypto_gnutls.c:181
 #, c-format
 msgid "Failed to set symmetric key for decryption: %s / %s."
 msgstr ""
 "Das Anlegen der symmetrischen Schlüssel zum Entschlüsseln scheiterte: %s / %"
 "s."
 
-#: ../libnm-util/crypto_gnutls.c:192
+#: ../libnm-util/crypto_gnutls.c:190
 #, c-format
 msgid "Failed to set IV for decryption: %s / %s."
 msgstr "Das Anlegen des IV zum Entschlüsseln scheiterte: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:201
+#: ../libnm-util/crypto_gnutls.c:199
 #, c-format
 msgid "Failed to decrypt the private key: %s / %s."
 msgstr "Die Entschlüsselung des privaten Schlüssels scheiterte: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:211 ../libnm-util/crypto_nss.c:267
+#: ../libnm-util/crypto_gnutls.c:209 ../libnm-util/crypto_nss.c:263
 #, c-format
 msgid "Failed to decrypt the private key: unexpected padding length."
 msgstr ""
 "Die Entschlüsselung des privaten Schlüssels scheiterte: Unerwartete "
 "Zeilenlänge."
 
-#: ../libnm-util/crypto_gnutls.c:222 ../libnm-util/crypto_nss.c:278
+#: ../libnm-util/crypto_gnutls.c:220 ../libnm-util/crypto_nss.c:274
 #, c-format
 msgid "Failed to decrypt the private key."
 msgstr "Die Entschlüsselung des privaten Schlüssels scheiterte."
 
-#: ../libnm-util/crypto_gnutls.c:287 ../libnm-util/crypto_nss.c:356
+#: ../libnm-util/crypto_gnutls.c:285 ../libnm-util/crypto_nss.c:352
 #, c-format
 msgid "Could not allocate memory for encrypting."
 msgstr ""
 "Es konnte nicht genügend freier Speicher zum Verschlüsseln angefordert "
 "werden."
 
-#: ../libnm-util/crypto_gnutls.c:295
+#: ../libnm-util/crypto_gnutls.c:293
 #, c-format
 msgid "Failed to initialize the encryption cipher context: %s / %s."
 msgstr ""
 "Die Initialisierung des Verschlüsselung-Chiffrekontextes scheiterte: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:304
+#: ../libnm-util/crypto_gnutls.c:302
 #, c-format
 msgid "Failed to set symmetric key for encryption: %s / %s."
 msgstr ""
 "Das Anlegen des symmetrischen Schlüssels zum Verschlüsseln scheiterte: %s / %"
 "s."
 
-#: ../libnm-util/crypto_gnutls.c:314
+#: ../libnm-util/crypto_gnutls.c:312
 #, c-format
 msgid "Failed to set IV for encryption: %s / %s."
 msgstr "Das Anlegen des IV zur Verschlüsselung scheiterte: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:323
+#: ../libnm-util/crypto_gnutls.c:321
 #, c-format
 msgid "Failed to encrypt the data: %s / %s."
 msgstr "Die Verschlüsselung der Daten scheiterte: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:363
+#: ../libnm-util/crypto_gnutls.c:361
 #, c-format
 msgid "Error initializing certificate data: %s"
 msgstr "Die Initialisierung der Zertifikatsdaten schlug fehl: %s"
 
-#: ../libnm-util/crypto_gnutls.c:385
+#: ../libnm-util/crypto_gnutls.c:383
 #, c-format
 msgid "Couldn't decode certificate: %s"
 msgstr "Zertifikat konnte nicht entschlüsselt werden: %s"
 
-#: ../libnm-util/crypto_gnutls.c:409
+#: ../libnm-util/crypto_gnutls.c:407
 #, c-format
 msgid "Couldn't initialize PKCS#12 decoder: %s"
 msgstr "PKCS#12-Decoder konnte nicht initialisiert werden: %s"
 
-#: ../libnm-util/crypto_gnutls.c:422
+#: ../libnm-util/crypto_gnutls.c:420
 #, c-format
 msgid "Couldn't decode PKCS#12 file: %s"
 msgstr "PKCS#12 konnte nicht entschlüsselt werden: %s"
 
-#: ../libnm-util/crypto_gnutls.c:434
+#: ../libnm-util/crypto_gnutls.c:432
 #, c-format
 msgid "Couldn't verify PKCS#12 file: %s"
 msgstr "PKCS#12-Datei konnte nicht überprüft werden: %s"
 
+#: ../libnm-util/crypto_gnutls.c:460
+#, c-format
+msgid "Couldn't initialize PKCS#8 decoder: %s"
+msgstr "PKCS#8-Decoder konnte nicht initialisiert werden: %s"
+
+#: ../libnm-util/crypto_gnutls.c:483
+#, c-format
+msgid "Couldn't decode PKCS#8 file: %s"
+msgstr "PKCS#8-Datei konnte nicht entschlüsselt werden: %s"
+
 #: ../libnm-util/crypto_nss.c:56
 #, c-format
 msgid "Failed to initialize the crypto engine: %d."
 msgstr "Die Initialisierung der crypto-engine scheiterte: %d."
 
-#: ../libnm-util/crypto_nss.c:111
+#: ../libnm-util/crypto_nss.c:107
 #, c-format
 msgid "Failed to initialize the MD5 context: %d."
 msgstr "Die Initialisierung des MD5-Kontexts scheiterte: %d."
 
-#: ../libnm-util/crypto_nss.c:179
+#: ../libnm-util/crypto_nss.c:175
 #, c-format
 msgid "Invalid IV length (must be at least %d)."
 msgstr "Ungültige IV-Länge (muss mindestens %d betragen)."
 
-#: ../libnm-util/crypto_nss.c:196
+#: ../libnm-util/crypto_nss.c:192
 #, c-format
 msgid "Failed to initialize the decryption cipher slot."
 msgstr "Die Initialisierung des Entschlüsselungsstromslots scheiterte."
 
-#: ../libnm-util/crypto_nss.c:206
+#: ../libnm-util/crypto_nss.c:202
 #, c-format
 msgid "Failed to set symmetric key for decryption."
 msgstr ""
 "Das Anlegen des symmetrischen Schlüssels zur Entschlüsselung scheiterte."
 
-#: ../libnm-util/crypto_nss.c:216
+#: ../libnm-util/crypto_nss.c:212
 #, c-format
 msgid "Failed to set IV for decryption."
 msgstr "Das Anlegen des IV zur Entschlüsselung scheiterte."
 
-#: ../libnm-util/crypto_nss.c:224
+#: ../libnm-util/crypto_nss.c:220
 #, c-format
 msgid "Failed to initialize the decryption context."
 msgstr "Die Initialisierung des Entschlüsselungskontexts scheiterte."
 
-#: ../libnm-util/crypto_nss.c:237
+#: ../libnm-util/crypto_nss.c:233
 #, c-format
 msgid "Failed to decrypt the private key: %d."
 msgstr "Das Entschlüsseln des privaten Schlüssels scheiterte: %d."
 
-#: ../libnm-util/crypto_nss.c:245
+#: ../libnm-util/crypto_nss.c:241
 #, c-format
 msgid "Failed to decrypt the private key: decrypted data too large."
 msgstr ""
 "Das Entschlüsseln des privaten Schlüssels scheiterte: Die entschlüsselten "
 "Daten sind zu groß."
 
-#: ../libnm-util/crypto_nss.c:256
+#: ../libnm-util/crypto_nss.c:252
 #, c-format
 msgid "Failed to finalize decryption of the private key: %d."
 msgstr ""
 "Das Abschließen der Entschlüsselung des privaten Schlüssels scheiterte: %d."
 
-#: ../libnm-util/crypto_nss.c:364
+#: ../libnm-util/crypto_nss.c:360
 #, c-format
 msgid "Failed to initialize the encryption cipher slot."
 msgstr "Die Initialisierung des Verschlüsselungsstromslots scheiterte."
 
-#: ../libnm-util/crypto_nss.c:372
+#: ../libnm-util/crypto_nss.c:368
 #, c-format
 msgid "Failed to set symmetric key for encryption."
 msgstr ""
 "Das Anlegen des symmetrischen Schlüssels zur Verschlüsselung scheiterte."
 
-#: ../libnm-util/crypto_nss.c:380
+#: ../libnm-util/crypto_nss.c:376
 #, c-format
 msgid "Failed to set IV for encryption."
 msgstr "Das Anlegen des IV zur Verschlüsselung scheiterte."
 
-#: ../libnm-util/crypto_nss.c:388
+#: ../libnm-util/crypto_nss.c:384
 #, c-format
 msgid "Failed to initialize the encryption context."
-msgstr "Die Initialisierung des Verschlusselungskontexts scheiterte."
+msgstr "Die Initialisierung des Verschlüsselungskontexts scheiterte."
 
-#: ../libnm-util/crypto_nss.c:396
+#: ../libnm-util/crypto_nss.c:392
 #, c-format
 msgid "Failed to encrypt: %d."
 msgstr "Das Verschlüsseln scheiterte: %d."
 
-#: ../libnm-util/crypto_nss.c:404
+#: ../libnm-util/crypto_nss.c:400
 #, c-format
 msgid "Unexpected amount of data after encrypting."
 msgstr "Unerwartete Datenmenge nach der Verschlüsselung."
 
-#: ../libnm-util/crypto_nss.c:447
+#: ../libnm-util/crypto_nss.c:443
 #, c-format
 msgid "Couldn't decode certificate: %d"
 msgstr "Das Zertifikat konnte nicht entschlüsselt werden: %d"
 
-#: ../libnm-util/crypto_nss.c:482
+#: ../libnm-util/crypto_nss.c:478
 #, c-format
 msgid "Couldn't convert password to UCS2: %d"
 msgstr "Das Passwort konnte nicht zu UCS2 konvertiert werden: %d"
 
-#: ../libnm-util/crypto_nss.c:510
+#: ../libnm-util/crypto_nss.c:506
 #, c-format
 msgid "Couldn't initialize PKCS#12 decoder: %d"
 msgstr "PKCS#12-Decoder konnte nicht initialisiert werden: %d"
 
-#: ../libnm-util/crypto_nss.c:519
+#: ../libnm-util/crypto_nss.c:515
 #, c-format
 msgid "Couldn't decode PKCS#12 file: %d"
 msgstr "PKCS#12-Datei konnte nicht verschlüsselt werden: %d"
 
-#: ../libnm-util/crypto_nss.c:528
+#: ../libnm-util/crypto_nss.c:524
 #, c-format
 msgid "Couldn't verify PKCS#12 file: %d"
 msgstr "PKCS#12-Datei konnte nicht überprüft werden: %d"
 
-#: ../libnm-util/crypto_nss.c:557
+#: ../libnm-util/crypto_nss.c:568
 msgid "Could not generate random data."
 msgstr "Es konnten keine Zufallsdaten generiert werden."
 
-#: ../libnm-util/nm-utils.c:1989
+#: ../libnm-util/nm-utils.c:2000
 #, c-format
 msgid "Not enough memory to make encryption key."
 msgstr ""
 "Nicht genügend freier Speicher zur Erstellung des Verschlüsselungsschlüssels."
 
-#: ../libnm-util/nm-utils.c:2099
+#: ../libnm-util/nm-utils.c:2110
 msgid "Could not allocate memory for PEM file creation."
 msgstr ""
 "Es konnte nicht genügend freier Speicher zur Erstellung der PEM-Datei "
 "angefordert werden."
 
-#: ../libnm-util/nm-utils.c:2111
+#: ../libnm-util/nm-utils.c:2122
 #, c-format
 msgid "Could not allocate memory for writing IV to PEM file."
 msgstr ""
 "Es konnte nicht genügend freier Speicher zum Schreiben des IV in die PEM-"
 "Datei angefordert werden."
 
-#: ../libnm-util/nm-utils.c:2123
+#: ../libnm-util/nm-utils.c:2134
 #, c-format
 msgid "Could not allocate memory for writing encrypted key to PEM file."
 msgstr ""
 "Es konnte nicht genügend freier Speicher zum Schreiben des verschlüsselten "
 "Schlüssels in die PEM-Datei angefordert werden."
 
-#: ../libnm-util/nm-utils.c:2142
+#: ../libnm-util/nm-utils.c:2153
 #, c-format
 msgid "Could not allocate memory for PEM file data."
 msgstr ""
@@ -1899,14 +1928,14 @@ msgstr ""
 "Die Systemrichtlinien verhindern Verbindungsfreigaben über ein offenes WLAN-"
 "Netzwerk"
 
-#: ../src/main.c:519
+#: ../src/main.c:530
 #, c-format
 msgid "Invalid option.  Please use --help to see a list of valid options.\n"
 msgstr ""
 "Ungültige Option.  Verwenden Sie --help um eine Liste der verfügbaren "
 "Optionen zu erhalten.\n"
 
-#: ../src/main.c:590
+#: ../src/main.c:611
 #, c-format
 msgid "%s.  Please use --help to see a list of valid options.\n"
 msgstr ""
@@ -1943,13 +1972,13 @@ msgstr "»dhcpcd« konnte nicht gefunden werden."
 msgid "unsupported DHCP client '%s'"
 msgstr "Nicht unterstützter DHCP-Client »%s«"
 
-#: ../src/dns-manager/nm-dns-manager.c:367
+#: ../src/dns-manager/nm-dns-manager.c:376
 msgid "NOTE: the libc resolver may not support more than 3 nameservers."
 msgstr ""
 "HINWEIS: Der libc-resolver unterstützt eventuell nicht mehr als drei "
 "Nameserver."
 
-#: ../src/dns-manager/nm-dns-manager.c:369
+#: ../src/dns-manager/nm-dns-manager.c:378
 msgid "The nameservers listed below may not be recognized."
 msgstr "Die nachfolgend gelisteten Nameserver werden eventuell nicht erkannt."
 
@@ -1983,22 +2012,22 @@ msgstr "PAN-Verbindung %d"
 msgid "DUN connection %d"
 msgstr "DUN-Verbindung %d"
 
-#: ../src/nm-device-ethernet.c:1681
+#: ../src/nm-device-ethernet.c:1723
 #, c-format
 msgid "PPPoE connection %d"
 msgstr "PPPoE-Verbindung %d"
 
-#: ../src/nm-device-ethernet.c:1681 ../src/settings/nm-settings-utils.c:50
+#: ../src/nm-device-ethernet.c:1723 ../src/settings/nm-settings-utils.c:50
 #, c-format
 msgid "Wired connection %d"
 msgstr "Kabelgebundene Verbindung %d"
 
-#: ../src/nm-device-olpc-mesh.c:423
+#: ../src/nm-device-olpc-mesh.c:393
 #, c-format
 msgid "Mesh %d"
 msgstr "Maschennetz %d‬"
 
-#: ../src/nm-manager.c:660
+#: ../src/nm-manager.c:657
 #, c-format
 msgid "VPN connection %d"
 msgstr "VPN-Verbindung %d"
@@ -2051,7 +2080,7 @@ msgstr "Der netlink-Gruppe konnte nicht beigetreten werden: %s"
 msgid "error updating link cache: %s"
 msgstr "Die Aktualisierung des Verbindungszwischenspeichers schlug fehl: %s"
 
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3464
+#: ../src/settings/plugins/ifcfg-rh/reader.c:3575
 #: ../src/settings/plugins/ifnet/connection_parser.c:51
 msgid "System"
 msgstr "System"
@@ -2080,9 +2109,6 @@ msgstr "System"
 #~ msgid "Error: Could not get user settings."
 #~ msgstr "Fehler: Benutzereinstellungen konnten nicht ermittelt werden."
 
-#~ msgid "Not enough memory to store file data."
-#~ msgstr "Nicht genug freier Speicher zum Speichern der Datei."
-
 #~ msgid "Allow use of user-specific connections"
 #~ msgstr "Die Verwendung von benutzerspezifischen Verbindungen erlauben"
 
diff --git a/po/es.po b/po/es.po
index 802d482f..08815ef0 100644
--- a/po/es.po
+++ b/po/es.po
@@ -15,15 +15,15 @@ msgstr ""
 "Project-Id-Version: NetworkManager.master\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 "product=NetworkManager&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2011-05-18 03:24+0000\n"
-"PO-Revision-Date: 2011-03-13 15:03+0100\n"
+"POT-Creation-Date: 2011-09-24 03:25+0000\n"
+"PO-Revision-Date: 2011-10-01 13:57+0200\n"
 "Last-Translator: Jorge González <jorgegonz@svn.gnome.org>\n"
-"Language-Team: Español <gnome-es-list@gnome.org>\n"
+"Language-Team: Español; Castellano <gnome-es-list@gnome.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
 
 #: ../cli/src/connections.c:64 ../cli/src/connections.c:78
 #: ../cli/src/devices.c:101 ../cli/src/devices.c:114 ../cli/src/devices.c:124
@@ -97,22 +97,34 @@ msgstr "AUTOCONECTAR"
 msgid "READONLY"
 msgstr "SÓLOLECTURA"
 
-#: ../cli/src/connections.c:167
-#, c-format
+#: ../cli/src/connections.c:153
+#, c-format
+#| msgid ""
+#| "Usage: nmcli con { COMMAND | help }\n"
+#| "  COMMAND := { list | status | up | down }\n"
+#| "\n"
+#| "  list [id <id> | uuid <id>]\n"
+#| "  status\n"
+#| "  up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [nsp <name>] [--"
+#| "nowait] [--timeout <timeout>]\n"
+#| "  up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--"
+#| "timeout <timeout>]\n"
+#| "  down id <id> | uuid <id>\n"
 msgid ""
 "Usage: nmcli con { COMMAND | help }\n"
-"  COMMAND := { list | status | up | down }\n"
+"  COMMAND := { list | status | up | down | delete }\n"
 "\n"
 "  list [id <id> | uuid <id>]\n"
 "  status\n"
-"  up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [nsp <name>] [--"
+"  up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--"
 "nowait] [--timeout <timeout>]\n"
-"  up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout "
+"  up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout "
 "<timeout>]\n"
 "  down id <id> | uuid <id>\n"
+"  delete id <id> | uuid <id>\n"
 msgstr ""
 "Uso: nmcli con { COMANDO | help }\n"
-"  COMANDO := { list | status | up | down }\n"
+"  COMANDO := { list | status | up | down | delete }\n"
 "\n"
 "  list [id <id> | uuid <id>]\n"
 "  status\n"
@@ -121,347 +133,355 @@ msgstr ""
 "  up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout "
 "<timeout>]\n"
 "  down id <id> | uuid <id>\n"
+"  delete id <id> | uuid <id>\n"
 
-#: ../cli/src/connections.c:220 ../cli/src/connections.c:542
+#: ../cli/src/connections.c:208 ../cli/src/connections.c:532
 #, c-format
 msgid "Error: 'con list': %s"
 msgstr "Error: «con list»: %s"
 
-#: ../cli/src/connections.c:222 ../cli/src/connections.c:544
+#: ../cli/src/connections.c:210 ../cli/src/connections.c:534
 #, c-format
 msgid "Error: 'con list': %s; allowed fields: %s"
 msgstr "Error: «con list»: %s; campos permitidos: %s"
 
-#: ../cli/src/connections.c:230
+#: ../cli/src/connections.c:218
 msgid "Connection details"
 msgstr "Detalles de conexiones"
 
-#: ../cli/src/connections.c:417
+#: ../cli/src/connections.c:407
 msgid "never"
 msgstr "nunca"
 
 #. "CAPABILITIES"
 #. Print header
 #. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:418 ../cli/src/connections.c:419
-#: ../cli/src/connections.c:597 ../cli/src/connections.c:599
-#: ../cli/src/devices.c:509 ../cli/src/devices.c:562 ../cli/src/devices.c:687
-#: ../cli/src/devices.c:713 ../cli/src/devices.c:714 ../cli/src/devices.c:715
-#: ../cli/src/devices.c:716 ../cli/src/devices.c:717 ../cli/src/settings.c:520
-#: ../cli/src/settings.c:563 ../cli/src/settings.c:663
-#: ../cli/src/settings.c:937 ../cli/src/settings.c:938
-#: ../cli/src/settings.c:940 ../cli/src/settings.c:942
-#: ../cli/src/settings.c:1067 ../cli/src/settings.c:1068
-#: ../cli/src/settings.c:1069 ../cli/src/settings.c:1148
-#: ../cli/src/settings.c:1149 ../cli/src/settings.c:1150
-#: ../cli/src/settings.c:1151 ../cli/src/settings.c:1152
-#: ../cli/src/settings.c:1153 ../cli/src/settings.c:1154
-#: ../cli/src/settings.c:1155 ../cli/src/settings.c:1156
-#: ../cli/src/settings.c:1157 ../cli/src/settings.c:1158
-#: ../cli/src/settings.c:1159 ../cli/src/settings.c:1160
-#: ../cli/src/settings.c:1235
+#: ../cli/src/connections.c:408 ../cli/src/connections.c:409
+#: ../cli/src/connections.c:587 ../cli/src/connections.c:589
+#: ../cli/src/devices.c:499 ../cli/src/devices.c:552 ../cli/src/devices.c:677
+#: ../cli/src/devices.c:703 ../cli/src/devices.c:704 ../cli/src/devices.c:705
+#: ../cli/src/devices.c:706 ../cli/src/devices.c:707 ../cli/src/settings.c:560
+#: ../cli/src/settings.c:632 ../cli/src/settings.c:753
+#: ../cli/src/settings.c:1041 ../cli/src/settings.c:1042
+#: ../cli/src/settings.c:1044 ../cli/src/settings.c:1046
+#: ../cli/src/settings.c:1047 ../cli/src/settings.c:1177
+#: ../cli/src/settings.c:1178 ../cli/src/settings.c:1179
+#: ../cli/src/settings.c:1180 ../cli/src/settings.c:1259
+#: ../cli/src/settings.c:1260 ../cli/src/settings.c:1261
+#: ../cli/src/settings.c:1262 ../cli/src/settings.c:1263
+#: ../cli/src/settings.c:1264 ../cli/src/settings.c:1265
+#: ../cli/src/settings.c:1266 ../cli/src/settings.c:1267
+#: ../cli/src/settings.c:1268 ../cli/src/settings.c:1269
+#: ../cli/src/settings.c:1270 ../cli/src/settings.c:1271
+#: ../cli/src/settings.c:1346
 msgid "yes"
 msgstr "sí"
 
-#: ../cli/src/connections.c:418 ../cli/src/connections.c:419
-#: ../cli/src/connections.c:597 ../cli/src/connections.c:599
-#: ../cli/src/devices.c:509 ../cli/src/devices.c:562 ../cli/src/devices.c:687
-#: ../cli/src/devices.c:713 ../cli/src/devices.c:714 ../cli/src/devices.c:715
-#: ../cli/src/devices.c:716 ../cli/src/devices.c:717 ../cli/src/settings.c:520
-#: ../cli/src/settings.c:522 ../cli/src/settings.c:563
-#: ../cli/src/settings.c:663 ../cli/src/settings.c:937
-#: ../cli/src/settings.c:938 ../cli/src/settings.c:940
-#: ../cli/src/settings.c:942 ../cli/src/settings.c:1067
-#: ../cli/src/settings.c:1068 ../cli/src/settings.c:1069
-#: ../cli/src/settings.c:1148 ../cli/src/settings.c:1149
-#: ../cli/src/settings.c:1150 ../cli/src/settings.c:1151
-#: ../cli/src/settings.c:1152 ../cli/src/settings.c:1153
-#: ../cli/src/settings.c:1154 ../cli/src/settings.c:1155
-#: ../cli/src/settings.c:1156 ../cli/src/settings.c:1157
-#: ../cli/src/settings.c:1158 ../cli/src/settings.c:1159
-#: ../cli/src/settings.c:1160 ../cli/src/settings.c:1235
+#: ../cli/src/connections.c:408 ../cli/src/connections.c:409
+#: ../cli/src/connections.c:587 ../cli/src/connections.c:589
+#: ../cli/src/devices.c:499 ../cli/src/devices.c:552 ../cli/src/devices.c:677
+#: ../cli/src/devices.c:703 ../cli/src/devices.c:704 ../cli/src/devices.c:705
+#: ../cli/src/devices.c:706 ../cli/src/devices.c:707 ../cli/src/settings.c:560
+#: ../cli/src/settings.c:562 ../cli/src/settings.c:632
+#: ../cli/src/settings.c:753 ../cli/src/settings.c:1041
+#: ../cli/src/settings.c:1042 ../cli/src/settings.c:1044
+#: ../cli/src/settings.c:1046 ../cli/src/settings.c:1047
+#: ../cli/src/settings.c:1177 ../cli/src/settings.c:1178
+#: ../cli/src/settings.c:1179 ../cli/src/settings.c:1180
+#: ../cli/src/settings.c:1259 ../cli/src/settings.c:1260
+#: ../cli/src/settings.c:1261 ../cli/src/settings.c:1262
+#: ../cli/src/settings.c:1263 ../cli/src/settings.c:1264
+#: ../cli/src/settings.c:1265 ../cli/src/settings.c:1266
+#: ../cli/src/settings.c:1267 ../cli/src/settings.c:1268
+#: ../cli/src/settings.c:1269 ../cli/src/settings.c:1270
+#: ../cli/src/settings.c:1271 ../cli/src/settings.c:1346
 msgid "no"
 msgstr "no"
 
-#: ../cli/src/connections.c:493
+#: ../cli/src/connections.c:483
 msgid "Connection list"
 msgstr "Lista de conexiones"
 
-#: ../cli/src/connections.c:506 ../cli/src/connections.c:1378
-#: ../cli/src/connections.c:1393 ../cli/src/connections.c:1402
-#: ../cli/src/connections.c:1412 ../cli/src/connections.c:1424
-#: ../cli/src/connections.c:1519 ../cli/src/devices.c:1190
-#: ../cli/src/devices.c:1200 ../cli/src/devices.c:1314
-#: ../cli/src/devices.c:1321 ../cli/src/devices.c:1534
-#: ../cli/src/devices.c:1541
+#: ../cli/src/connections.c:496 ../cli/src/connections.c:1356
+#: ../cli/src/connections.c:1371 ../cli/src/connections.c:1380
+#: ../cli/src/connections.c:1390 ../cli/src/connections.c:1402
+#: ../cli/src/connections.c:1497 ../cli/src/connections.c:1580
+#: ../cli/src/devices.c:1180 ../cli/src/devices.c:1190
+#: ../cli/src/devices.c:1304 ../cli/src/devices.c:1312
+#: ../cli/src/devices.c:1525 ../cli/src/devices.c:1532
 #, c-format
 msgid "Error: %s argument is missing."
 msgstr "Error: falta el argumento %s."
 
-#: ../cli/src/connections.c:519
+#: ../cli/src/connections.c:509
 #, c-format
 msgid "Error: %s - no such connection."
 msgstr "Error: %s - no hay tal conexión."
 
-#: ../cli/src/connections.c:525 ../cli/src/connections.c:1437
-#: ../cli/src/connections.c:1536 ../cli/src/devices.c:987
-#: ../cli/src/devices.c:1067 ../cli/src/devices.c:1214
-#: ../cli/src/devices.c:1327 ../cli/src/devices.c:1547
+#: ../cli/src/connections.c:515 ../cli/src/connections.c:1415
+#: ../cli/src/connections.c:1514 ../cli/src/connections.c:1587
+#: ../cli/src/devices.c:977 ../cli/src/devices.c:1057
+#: ../cli/src/devices.c:1204 ../cli/src/devices.c:1318
+#: ../cli/src/devices.c:1538
 #, c-format
 msgid "Unknown parameter: %s\n"
 msgstr "Parámetro desconocido: %s\n"
 
-#: ../cli/src/connections.c:534
+#: ../cli/src/connections.c:524
 #, c-format
 msgid "Error: no valid parameter specified."
 msgstr "Error: no se especificó un parámetro válido."
 
-#: ../cli/src/connections.c:549 ../cli/src/connections.c:1627
-#: ../cli/src/devices.c:1755 ../cli/src/network-manager.c:463
+#: ../cli/src/connections.c:539 ../cli/src/connections.c:1668
+#: ../cli/src/devices.c:1746 ../cli/src/network-manager.c:456
 #, c-format
 msgid "Error: %s."
 msgstr "Error: %s."
 
-#: ../cli/src/connections.c:637
+#: ../cli/src/connections.c:627
 #, c-format
 msgid "Error: 'con status': %s"
 msgstr "Error: «con status»: %s"
 
-#: ../cli/src/connections.c:639
+#: ../cli/src/connections.c:629
 #, c-format
 msgid "Error: 'con status': %s; allowed fields: %s"
 msgstr "Error: «con status»: %s; campos permitidos: %s"
 
-#: ../cli/src/connections.c:647 ../cli/src/connections.c:1452
-#: ../cli/src/connections.c:1551 ../cli/src/devices.c:1014
-#: ../cli/src/devices.c:1076 ../cli/src/devices.c:1229
-#: ../cli/src/devices.c:1357 ../cli/src/devices.c:1576
+#: ../cli/src/connections.c:637 ../cli/src/connections.c:1430
+#: ../cli/src/connections.c:1529 ../cli/src/connections.c:1601
+#: ../cli/src/devices.c:1004 ../cli/src/devices.c:1066
+#: ../cli/src/devices.c:1219 ../cli/src/devices.c:1348
+#: ../cli/src/devices.c:1567
 #, c-format
 msgid "Error: Can't find out if NetworkManager is running: %s."
 msgstr "Error: no se puede saber si NetworkManager se está ejecutando: %s."
 
-#: ../cli/src/connections.c:651 ../cli/src/connections.c:1456
-#: ../cli/src/connections.c:1555 ../cli/src/devices.c:1018
-#: ../cli/src/devices.c:1080 ../cli/src/devices.c:1233
-#: ../cli/src/devices.c:1361 ../cli/src/devices.c:1580
+#: ../cli/src/connections.c:641 ../cli/src/connections.c:1434
+#: ../cli/src/connections.c:1533 ../cli/src/connections.c:1605
+#: ../cli/src/devices.c:1008 ../cli/src/devices.c:1070
+#: ../cli/src/devices.c:1223 ../cli/src/devices.c:1352
+#: ../cli/src/devices.c:1571
 #, c-format
 msgid "Error: NetworkManager is not running."
 msgstr "Error: NetworkManager no se está ejecutando."
 
-#: ../cli/src/connections.c:659
+#: ../cli/src/connections.c:649
 msgid "Active connections"
 msgstr "Conexiones activas"
 
-#: ../cli/src/connections.c:1095
+#: ../cli/src/connections.c:1073
 #, c-format
 msgid "no active connection on device '%s'"
 msgstr "conexión no activa en el dispositivo «%s»"
 
-#: ../cli/src/connections.c:1103
+#: ../cli/src/connections.c:1081
 #, c-format
 msgid "no active connection or device"
 msgstr "conexión o dispositivo no activo"
 
-#: ../cli/src/connections.c:1174
+#: ../cli/src/connections.c:1152
 #, c-format
 msgid "device '%s' not compatible with connection '%s'"
 msgstr "dispositivo «%s» incompatible con conexión «%s»"
 
-#: ../cli/src/connections.c:1176
+#: ../cli/src/connections.c:1154
 #, c-format
 msgid "no device found for connection '%s'"
 msgstr "no se encontró dispositivo para conexión «%s»"
 
-#: ../cli/src/connections.c:1187
+#: ../cli/src/connections.c:1165
 msgid "activating"
 msgstr "activando"
 
-#: ../cli/src/connections.c:1189
+#: ../cli/src/connections.c:1167
 msgid "activated"
 msgstr "activada"
 
-#: ../cli/src/connections.c:1191 ../cli/src/devices.c:304
+#: ../cli/src/connections.c:1169 ../cli/src/devices.c:294
 msgid "deactivating"
 msgstr "desactivando"
 
-#: ../cli/src/connections.c:1194 ../cli/src/connections.c:1217
-#: ../cli/src/connections.c:1250 ../cli/src/devices.c:308
-#: ../cli/src/devices.c:688 ../cli/src/network-manager.c:118
-#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:183
-#: ../cli/src/network-manager.c:192 ../cli/src/network-manager.c:298
-#: ../cli/src/network-manager.c:353 ../cli/src/network-manager.c:391
-#: ../cli/src/network-manager.c:430 ../cli/src/settings.c:485
-#: ../cli/src/utils.c:396
+#: ../cli/src/connections.c:1172 ../cli/src/connections.c:1195
+#: ../cli/src/connections.c:1228 ../cli/src/devices.c:298
+#: ../cli/src/devices.c:678 ../cli/src/network-manager.c:111
+#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:176
+#: ../cli/src/network-manager.c:185 ../cli/src/network-manager.c:291
+#: ../cli/src/network-manager.c:346 ../cli/src/network-manager.c:384
+#: ../cli/src/network-manager.c:423 ../cli/src/settings.c:513
+#: ../cli/src/utils.c:397
 msgid "unknown"
 msgstr "desconocido"
 
-#: ../cli/src/connections.c:1203
+#: ../cli/src/connections.c:1181
 msgid "VPN connecting (prepare)"
 msgstr "Conectando VPN (preparar)"
 
-#: ../cli/src/connections.c:1205
+#: ../cli/src/connections.c:1183
 msgid "VPN connecting (need authentication)"
 msgstr "Conectando VPN (necesita autenticación)"
 
-#: ../cli/src/connections.c:1207
+#: ../cli/src/connections.c:1185
 msgid "VPN connecting"
 msgstr "Conectando VPN"
 
-#: ../cli/src/connections.c:1209
+#: ../cli/src/connections.c:1187
 msgid "VPN connecting (getting IP configuration)"
 msgstr "Conectando VPN (obteniendo configuración IP)"
 
-#: ../cli/src/connections.c:1211
+#: ../cli/src/connections.c:1189
 msgid "VPN connected"
 msgstr "VPN conectada"
 
-#: ../cli/src/connections.c:1213
+#: ../cli/src/connections.c:1191
 msgid "VPN connection failed"
 msgstr "Falló la conexión VPN"
 
-#: ../cli/src/connections.c:1215
+#: ../cli/src/connections.c:1193
 msgid "VPN disconnected"
 msgstr "VPN desconectada"
 
-#: ../cli/src/connections.c:1226
+#: ../cli/src/connections.c:1204
 msgid "unknown reason"
 msgstr "razón desconocida"
 
-#: ../cli/src/connections.c:1228
+#: ../cli/src/connections.c:1206
 msgid "none"
 msgstr "ninguna"
 
-#: ../cli/src/connections.c:1230
+#: ../cli/src/connections.c:1208
 msgid "the user was disconnected"
 msgstr "el usuario estaba desconectado"
 
-#: ../cli/src/connections.c:1232
+#: ../cli/src/connections.c:1210
 msgid "the base network connection was interrupted"
 msgstr "se interrumpió la conexión de red de base"
 
-#: ../cli/src/connections.c:1234
+#: ../cli/src/connections.c:1212
 msgid "the VPN service stopped unexpectedly"
 msgstr "el servicio VPN se detuvo inesperadamente"
 
-#: ../cli/src/connections.c:1236
+#: ../cli/src/connections.c:1214
 msgid "the VPN service returned invalid configuration"
 msgstr "el servicio VPN retornó una configuración no válida"
 
-#: ../cli/src/connections.c:1238
+#: ../cli/src/connections.c:1216
 msgid "the connection attempt timed out"
 msgstr "se agotaron los intentos de conexión"
 
-#: ../cli/src/connections.c:1240
+#: ../cli/src/connections.c:1218
 msgid "the VPN service did not start in time"
 msgstr "el servicio VPN no inició a tiempo"
 
-#: ../cli/src/connections.c:1242
+#: ../cli/src/connections.c:1220
 msgid "the VPN service failed to start"
 msgstr "el servicio VPN falló en el inicio"
 
-#: ../cli/src/connections.c:1244
+#: ../cli/src/connections.c:1222
 msgid "no valid VPN secrets"
 msgstr "secretos VPN inválidos"
 
-#: ../cli/src/connections.c:1246
+#: ../cli/src/connections.c:1224
 msgid "invalid VPN secrets"
 msgstr "secretos VPN válidos"
 
-#: ../cli/src/connections.c:1248
+#: ../cli/src/connections.c:1226
 msgid "the connection was removed"
 msgstr "se eliminó la conexión"
 
-#: ../cli/src/connections.c:1262
+#: ../cli/src/connections.c:1240
 #, c-format
 msgid "state: %s\n"
 msgstr "estado: %s\n"
 
-#: ../cli/src/connections.c:1265 ../cli/src/connections.c:1291
+#: ../cli/src/connections.c:1243 ../cli/src/connections.c:1269
 #, c-format
 msgid "Connection activated\n"
 msgstr "Conexión activada\n"
 
-#: ../cli/src/connections.c:1268
+#: ../cli/src/connections.c:1246
 #, c-format
 msgid "Error: Connection activation failed."
 msgstr "Error: falló la activación de la conexión."
 
-#: ../cli/src/connections.c:1287
+#: ../cli/src/connections.c:1265
 #, c-format
 msgid "state: %s (%d)\n"
 msgstr "estado: %s (%d)\n"
 
-#: ../cli/src/connections.c:1297
+#: ../cli/src/connections.c:1275
 #, c-format
 msgid "Error: Connection activation failed: %s."
 msgstr "Error: falló la activación de la conexión: %s."
 
-#: ../cli/src/connections.c:1314 ../cli/src/devices.c:1136
+#: ../cli/src/connections.c:1292 ../cli/src/devices.c:1126
 #, c-format
 msgid "Error: Timeout %d sec expired."
 msgstr "Error: expiró la pausa de %d segundos."
 
-#: ../cli/src/connections.c:1327
+#: ../cli/src/connections.c:1305
 #, c-format
 msgid "Error: Connection activation failed: %s"
 msgstr "Error: falló la activación de la conexión: %s"
 
-#: ../cli/src/connections.c:1333
+#: ../cli/src/connections.c:1311
 #, c-format
 msgid "Active connection state: %s\n"
 msgstr "Estado de la conexión activa: %s\n"
 
-#: ../cli/src/connections.c:1334
+#: ../cli/src/connections.c:1312
 #, c-format
 msgid "Active connection path: %s\n"
 msgstr "Ruta de la conexión activa: %s\n"
 
-#: ../cli/src/connections.c:1386 ../cli/src/connections.c:1527
+#: ../cli/src/connections.c:1364 ../cli/src/connections.c:1505
+#: ../cli/src/connections.c:1614
 #, c-format
 msgid "Error: Unknown connection: %s."
 msgstr "Error: conexión desconocida: %s."
 
-#: ../cli/src/connections.c:1432 ../cli/src/devices.c:1208
+#: ../cli/src/connections.c:1410 ../cli/src/devices.c:1198
 #, c-format
 msgid "Error: timeout value '%s' is not valid."
 msgstr "Error: valor de pausa «%s» inválido."
 
-#: ../cli/src/connections.c:1445 ../cli/src/connections.c:1544
+#: ../cli/src/connections.c:1423 ../cli/src/connections.c:1522
+#: ../cli/src/connections.c:1594
 #, c-format
 msgid "Error: id or uuid has to be specified."
 msgstr "Error: se debe especificar un id o uuid."
 
-#: ../cli/src/connections.c:1473
+#: ../cli/src/connections.c:1451
 #, c-format
 msgid "Error: No suitable device found: %s."
 msgstr "Error: no se encontró un dispositivo apropiado: %s."
 
-#: ../cli/src/connections.c:1475
+#: ../cli/src/connections.c:1453
 #, c-format
 msgid "Error: No suitable device found."
 msgstr "Error: no se encontró un dispositivo apropiado."
 
-#: ../cli/src/connections.c:1580
+#: ../cli/src/connections.c:1558
 #, c-format
 msgid "Warning: Connection not active\n"
 msgstr "Advertencia: conexión inactiva\n"
 
-#: ../cli/src/connections.c:1618
+#: ../cli/src/connections.c:1659
 #, c-format
 msgid "Error: 'con' command '%s' is not valid."
 msgstr "Error: comando «con» «%s» no es válido."
 
-#: ../cli/src/connections.c:1683
+#: ../cli/src/connections.c:1724
 #, c-format
 msgid "Error: could not connect to D-Bus."
 msgstr "Error: no se pudo conectar con D-Bus."
 
-#: ../cli/src/connections.c:1690
+#: ../cli/src/connections.c:1732
 #, c-format
 msgid "Error: Could not get system settings."
 msgstr "Error: no se pudo obtener configuración de sistema."
 
-#: ../cli/src/connections.c:1700
+#: ../cli/src/connections.c:1742
 #, c-format
 msgid "Error: Can't obtain connections: settings service is not running."
 msgstr ""
@@ -686,8 +706,21 @@ msgstr "INDICADORES-RSN"
 msgid "ACTIVE"
 msgstr "ACTIVO"
 
-#: ../cli/src/devices.c:256
-#, c-format
+#: ../cli/src/devices.c:246
+#, c-format
+#| msgid ""
+#| "Usage: nmcli dev { COMMAND | help }\n"
+#| "\n"
+#| "  COMMAND := { status | list | disconnect | wifi | wimax }\n"
+#| "\n"
+#| "  COMMAND := { status | list | disconnect | wifi }\n"
+#| "\n"
+#| "  status\n"
+#| "  list [iface <iface>]\n"
+#| "  disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
+#| "  wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+#| "  wimax [list [iface <iface>] [nsp <name>]]\n"
+#| "\n"
 msgid ""
 "Usage: nmcli dev { COMMAND | help }\n"
 "\n"
@@ -698,12 +731,14 @@ msgid ""
 "  status\n"
 "  list [iface <iface>]\n"
 "  disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-"  wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+"  wifi [list [iface <iface>] [bssid <BSSID>]]\n"
 "  wimax [list [iface <iface>] [nsp <name>]]\n"
 "\n"
 msgstr ""
 "Uso: nmcli dev { COMANDO | help }\n"
 "\n"
+"  COMANDO := { status | list | disconnect | wifi | wimax }\n"
+"\n"
 "  COMANDO := { status | list | disconnect | wifi }\n"
 "\n"
 "  status\n"
@@ -713,256 +748,262 @@ msgstr ""
 "  wimax [list [iface <iface>] [nsp <name>]]\n"
 "\n"
 
-#: ../cli/src/devices.c:284
+#: ../cli/src/devices.c:274
 msgid "unmanaged"
 msgstr "sin gestión"
 
-#: ../cli/src/devices.c:286
+#: ../cli/src/devices.c:276
 msgid "unavailable"
 msgstr "no disponible"
 
-#: ../cli/src/devices.c:288 ../cli/src/network-manager.c:115
+#: ../cli/src/devices.c:278 ../cli/src/network-manager.c:108
 msgid "disconnected"
 msgstr "desconectado"
 
-#: ../cli/src/devices.c:290
+#: ../cli/src/devices.c:280
 msgid "connecting (prepare)"
 msgstr "conectando (preparar)"
 
-#: ../cli/src/devices.c:292
+#: ../cli/src/devices.c:282
 msgid "connecting (configuring)"
 msgstr "conectando (configurando)"
 
-#: ../cli/src/devices.c:294
+#: ../cli/src/devices.c:284
 msgid "connecting (need authentication)"
 msgstr "conectando (necesita autenticación)"
 
-#: ../cli/src/devices.c:296
+#: ../cli/src/devices.c:286
 msgid "connecting (getting IP configuration)"
 msgstr "conectando (obteniendo configuración IP)"
 
-#: ../cli/src/devices.c:298
+#: ../cli/src/devices.c:288
 msgid "connecting (checking IP connectivity)"
 msgstr "conectando (comprobando conectividad IP)"
 
-#: ../cli/src/devices.c:300
+#: ../cli/src/devices.c:290
 msgid "connecting (starting secondary connections)"
 msgstr "conectando (iniciando conexiones secundarias)"
 
-#: ../cli/src/devices.c:302 ../cli/src/network-manager.c:111
+#: ../cli/src/devices.c:292 ../cli/src/network-manager.c:104
 msgid "connected"
 msgstr "conectado"
 
-#: ../cli/src/devices.c:306
+#: ../cli/src/devices.c:296
 msgid "connection failed"
 msgstr "conexión falló"
 
-#: ../cli/src/devices.c:331 ../cli/src/devices.c:341 ../cli/src/devices.c:501
-#: ../cli/src/devices.c:545
+#: ../cli/src/devices.c:321 ../cli/src/devices.c:331 ../cli/src/devices.c:491
+#: ../cli/src/devices.c:535
 msgid "Unknown"
 msgstr "desconocido"
 
-#: ../cli/src/devices.c:374
+#: ../cli/src/devices.c:364
 msgid "(none)"
 msgstr "(ninguno)"
 
-#: ../cli/src/devices.c:399
+#: ../cli/src/devices.c:389
 #, c-format
 msgid "%s: error converting IP4 address 0x%X"
 msgstr "%s: error convirtiendo dirección IP4 0x%X"
 
-#: ../cli/src/devices.c:470
+#: ../cli/src/devices.c:460
 #, c-format
 msgid "%u MHz"
 msgstr "%u MHz"
 
-#: ../cli/src/devices.c:471
+#: ../cli/src/devices.c:461
 #, c-format
 msgid "%u MB/s"
 msgstr "%u MB/s"
 
-#: ../cli/src/devices.c:480
+#: ../cli/src/devices.c:470
 msgid "Encrypted: "
 msgstr "Encriptado: "
 
-#: ../cli/src/devices.c:485
+#: ../cli/src/devices.c:475
 msgid "WEP "
 msgstr "WEP"
 
-#: ../cli/src/devices.c:487
+#: ../cli/src/devices.c:477
 msgid "WPA "
 msgstr "WPA"
 
-#: ../cli/src/devices.c:489
+#: ../cli/src/devices.c:479
 msgid "WPA2 "
 msgstr "WPA2"
 
-#: ../cli/src/devices.c:492
+#: ../cli/src/devices.c:482
 msgid "Enterprise "
 msgstr "Empresa"
 
-#: ../cli/src/devices.c:501
+#: ../cli/src/devices.c:491
 msgid "Ad-Hoc"
 msgstr "Ad-Hoc"
 
-#: ../cli/src/devices.c:501
+#: ../cli/src/devices.c:491
 msgid "Infrastructure"
 msgstr "Infraestructura"
 
-#: ../cli/src/devices.c:536
+#: ../cli/src/devices.c:526
 msgid "Home"
 msgstr "Casa"
 
-#: ../cli/src/devices.c:539
+#: ../cli/src/devices.c:529
 msgid "Partner"
 msgstr "Asociado"
 
-#: ../cli/src/devices.c:542
+#: ../cli/src/devices.c:532
 msgid "Roaming"
 msgstr "Roaming"
 
-#: ../cli/src/devices.c:612
+#: ../cli/src/devices.c:602
 #, c-format
 msgid "Error: 'dev list': %s"
 msgstr "Error: «dev list»: %s"
 
-#: ../cli/src/devices.c:614
+#: ../cli/src/devices.c:604
 #, c-format
 msgid "Error: 'dev list': %s; allowed fields: %s"
 msgstr "Error: «dev list»: %s; campos permitidos: %s"
 
-#: ../cli/src/devices.c:623
+#: ../cli/src/devices.c:613
 msgid "Device details"
 msgstr "Detalles de los dispositivos"
 
-#: ../cli/src/devices.c:657 ../cli/src/devices.c:1152 ../cli/src/utils.c:342
+#: ../cli/src/devices.c:647 ../cli/src/devices.c:1142 ../cli/src/utils.c:343
 msgid "(unknown)"
 msgstr "(desconocido)"
 
-#: ../cli/src/devices.c:658
+#: ../cli/src/devices.c:648
 msgid "unknown)"
 msgstr "desconocido"
 
-#: ../cli/src/devices.c:684
+#: ../cli/src/devices.c:674
 #, c-format
 msgid "%u Mb/s"
 msgstr "%u Mb/s"
 
 #. Print header
 #. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:757
+#: ../cli/src/devices.c:747
 msgid "on"
 msgstr "encendido"
 
-#: ../cli/src/devices.c:757
+#: ../cli/src/devices.c:747
 msgid "off"
 msgstr "apagado"
 
-#: ../cli/src/devices.c:1004
+#: ../cli/src/devices.c:994
 #, c-format
 msgid "Error: 'dev status': %s"
 msgstr "Error: «dev status»: %s"
 
-#: ../cli/src/devices.c:1006
+#: ../cli/src/devices.c:996
 #, c-format
 msgid "Error: 'dev status': %s; allowed fields: %s"
 msgstr "Error: «dev status»: %s; campos permitidos: %s"
 
-#: ../cli/src/devices.c:1029
+#: ../cli/src/devices.c:1019
 msgid "Status of devices"
 msgstr "Estado de los dispositivos"
 
-#: ../cli/src/devices.c:1060
+#: ../cli/src/devices.c:1050
 #, c-format
 msgid "Error: '%s' argument is missing."
 msgstr "Error: falta el argumento «%s»."
 
-#: ../cli/src/devices.c:1101 ../cli/src/devices.c:1253
-#: ../cli/src/devices.c:1389 ../cli/src/devices.c:1608
+#: ../cli/src/devices.c:1091 ../cli/src/devices.c:1243
+#: ../cli/src/devices.c:1380 ../cli/src/devices.c:1599
 #, c-format
 msgid "Error: Device '%s' not found."
 msgstr "Error: no se encontró el dispositivo «%s»."
 
-#: ../cli/src/devices.c:1124
+#: ../cli/src/devices.c:1114
 #, c-format
 msgid "Success: Device '%s' successfully disconnected."
 msgstr "Éxito: dispositivo «%s» desconectado correctamente."
 
-#: ../cli/src/devices.c:1149
+#: ../cli/src/devices.c:1139
 #, c-format
 msgid "Error: Device '%s' (%s) disconnecting failed: %s"
 msgstr "Error: falló la desconexión del dispositivo «%s» (%s): %s"
 
-#: ../cli/src/devices.c:1157
+#: ../cli/src/devices.c:1147
 #, c-format
 msgid "Device state: %d (%s)\n"
 msgstr "Estado del dispositivo: %d (%s)\n"
 
-#: ../cli/src/devices.c:1222
+#: ../cli/src/devices.c:1212
 #, c-format
 msgid "Error: iface has to be specified."
 msgstr "Error: se debe especificar iface."
 
-#: ../cli/src/devices.c:1347
+#: ../cli/src/devices.c:1338
 #, c-format
 msgid "Error: 'dev wifi': %s"
 msgstr "Error: «dev wifi» «%s»"
 
-#: ../cli/src/devices.c:1349
+#: ../cli/src/devices.c:1340
 #, c-format
 msgid "Error: 'dev wifi': %s; allowed fields: %s"
 msgstr "Error: «dev wifi»: %s; campos permitidos: %s"
 
-#: ../cli/src/devices.c:1372
+#: ../cli/src/devices.c:1363
 msgid "WiFi scan list"
 msgstr "lista de análisis WiFi"
 
-#: ../cli/src/devices.c:1409 ../cli/src/devices.c:1463
-#: ../cli/src/devices.c:1670
+#: ../cli/src/devices.c:1400 ../cli/src/devices.c:1454
 #, c-format
-msgid "Error: Access point with hwaddr '%s' not found."
-msgstr "Error: no se encontró el punto de acceso con hwaddr «%s»."
+#| msgid "Error: Access point with hwaddr '%s' not found."
+msgid "Error: Access point with bssid '%s' not found."
+msgstr "Error: no se encontró el punto de acceso con bssid «%s»."
 
-#: ../cli/src/devices.c:1426
+#: ../cli/src/devices.c:1417
 #, c-format
 msgid "Error: Device '%s' is not a WiFi device."
 msgstr "Error: el dispositivo «%s» no es un dispositivo WiFi."
 
-#: ../cli/src/devices.c:1490
+#: ../cli/src/devices.c:1481
 #, c-format
 msgid "Error: 'dev wifi' command '%s' is not valid."
 msgstr "Error: comando «dev wifi» «%s» inválido."
 
-#: ../cli/src/devices.c:1566
+#: ../cli/src/devices.c:1557
 #, c-format
 msgid "Error: 'dev wimax': %s"
 msgstr "Error: «dev wimax» «%s»"
 
-#: ../cli/src/devices.c:1568
+#: ../cli/src/devices.c:1559
 #, c-format
 msgid "Error: 'dev wimax': %s; allowed fields: %s"
 msgstr "Error: «dev wimax»: %s; campos permitidos: %s"
 
-#: ../cli/src/devices.c:1591
+#: ../cli/src/devices.c:1582
 msgid "WiMAX NSP list"
 msgstr "Lista PSR WiMAX"
 
-#: ../cli/src/devices.c:1628
+#: ../cli/src/devices.c:1619
 #, c-format
 msgid "Error: NSP with name '%s' not found."
 msgstr "Error: no se encontró el PSR con el nombre «%s»."
 
-#: ../cli/src/devices.c:1639
+#: ../cli/src/devices.c:1630
 #, c-format
 msgid "Error: Device '%s' is not a WiMAX device."
 msgstr "Error: el dispositivo «%s» no es un dispositivo WiMAX."
 
-#: ../cli/src/devices.c:1697
+#: ../cli/src/devices.c:1661
+#, c-format
+#| msgid "Error: Access point with hwaddr '%s' not found."
+msgid "Error: Access point with nsp '%s' not found."
+msgstr "Error: no se encontró el punto de acceso con nsp «%s»."
+
+#: ../cli/src/devices.c:1688
 #, c-format
 msgid "Error: 'dev wimax' command '%s' is not valid."
 msgstr "Error: comando «dev wimax» «%s» no válido."
 
-#: ../cli/src/devices.c:1747
+#: ../cli/src/devices.c:1738
 #, c-format
 msgid "Error: 'dev' command '%s' is not valid."
 msgstr "Error: comando «dev» «%s» no válido."
@@ -1011,7 +1052,7 @@ msgstr "HARDWARE-WIMAX"
 msgid "WIMAX"
 msgstr "WIMAX"
 
-#: ../cli/src/network-manager.c:74
+#: ../cli/src/network-manager.c:67
 #, c-format
 msgid ""
 "Usage: nmcli nm { COMMAND | help }\n"
@@ -1042,136 +1083,136 @@ msgstr ""
 "  wimax [on|off]\n"
 "\n"
 
-#: ../cli/src/network-manager.c:103
+#: ../cli/src/network-manager.c:96
 msgid "asleep"
 msgstr "dormido"
 
-#: ../cli/src/network-manager.c:105
+#: ../cli/src/network-manager.c:98
 msgid "connecting"
 msgstr "conectando"
 
-#: ../cli/src/network-manager.c:107
+#: ../cli/src/network-manager.c:100
 msgid "connected (local only)"
 msgstr "conectado (sólo local)"
 
-#: ../cli/src/network-manager.c:109
+#: ../cli/src/network-manager.c:102
 msgid "connected (site only)"
 msgstr "conectado (sólo el sitio)"
 
-#: ../cli/src/network-manager.c:113
+#: ../cli/src/network-manager.c:106
 msgid "disconnecting"
 msgstr "desconectando"
 
-#: ../cli/src/network-manager.c:153
+#: ../cli/src/network-manager.c:146
 #, c-format
 msgid "Error: 'nm status': %s"
 msgstr "Error: «nm status»: %s"
 
-#: ../cli/src/network-manager.c:155
+#: ../cli/src/network-manager.c:148
 #, c-format
 msgid "Error: 'nm status': %s; allowed fields: %s"
 msgstr "Error: «nm status»: %s; campos permitidos: %s"
 
 #. create NMClient
-#: ../cli/src/network-manager.c:168 ../cli/src/network-manager.c:169
-#: ../cli/src/network-manager.c:170 ../cli/src/network-manager.c:171
-#: ../cli/src/network-manager.c:172 ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:296
-#: ../cli/src/network-manager.c:351 ../cli/src/network-manager.c:389
-#: ../cli/src/network-manager.c:428
+#: ../cli/src/network-manager.c:161 ../cli/src/network-manager.c:162
+#: ../cli/src/network-manager.c:163 ../cli/src/network-manager.c:164
+#: ../cli/src/network-manager.c:165 ../cli/src/network-manager.c:167
+#: ../cli/src/network-manager.c:168 ../cli/src/network-manager.c:289
+#: ../cli/src/network-manager.c:344 ../cli/src/network-manager.c:382
+#: ../cli/src/network-manager.c:421
 msgid "enabled"
 msgstr "activado"
 
-#: ../cli/src/network-manager.c:168 ../cli/src/network-manager.c:169
-#: ../cli/src/network-manager.c:170 ../cli/src/network-manager.c:171
-#: ../cli/src/network-manager.c:172 ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:296
-#: ../cli/src/network-manager.c:351 ../cli/src/network-manager.c:389
-#: ../cli/src/network-manager.c:428
+#: ../cli/src/network-manager.c:161 ../cli/src/network-manager.c:162
+#: ../cli/src/network-manager.c:163 ../cli/src/network-manager.c:164
+#: ../cli/src/network-manager.c:165 ../cli/src/network-manager.c:167
+#: ../cli/src/network-manager.c:168 ../cli/src/network-manager.c:289
+#: ../cli/src/network-manager.c:344 ../cli/src/network-manager.c:382
+#: ../cli/src/network-manager.c:421
 msgid "disabled"
 msgstr "desactivado"
 
-#: ../cli/src/network-manager.c:188
+#: ../cli/src/network-manager.c:181
 msgid "NetworkManager status"
 msgstr "Estado de NetworkManager"
 
 #. Print header
-#: ../cli/src/network-manager.c:191
+#: ../cli/src/network-manager.c:184
 msgid "running"
 msgstr "ejecutando"
 
-#: ../cli/src/network-manager.c:191
+#: ../cli/src/network-manager.c:184
 msgid "not running"
 msgstr "no ejecutando"
 
-#: ../cli/src/network-manager.c:222 ../cli/src/utils.c:322
+#: ../cli/src/network-manager.c:215 ../cli/src/utils.c:323
 #, c-format
 msgid "Error: Couldn't connect to system bus: %s"
 msgstr "Error: no se pudo conectar con el bus del sistema: %s"
 
-#: ../cli/src/network-manager.c:233
+#: ../cli/src/network-manager.c:226
 #, c-format
 msgid "Error: Couldn't create D-Bus object proxy."
 msgstr "Error: no se pudo crear un objeto proxy en D-Bus."
 
-#: ../cli/src/network-manager.c:239
+#: ../cli/src/network-manager.c:232
 #, c-format
 msgid "Error in sleep: %s"
 msgstr "Error al dormir: %s"
 
-#: ../cli/src/network-manager.c:283 ../cli/src/network-manager.c:338
-#: ../cli/src/network-manager.c:376 ../cli/src/network-manager.c:415
+#: ../cli/src/network-manager.c:276 ../cli/src/network-manager.c:331
+#: ../cli/src/network-manager.c:369 ../cli/src/network-manager.c:408
 #, c-format
 msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
 msgstr "Error: «--fields» valor «%s» no es válido aquí; campos permitidos: %s"
 
-#: ../cli/src/network-manager.c:291
+#: ../cli/src/network-manager.c:284
 msgid "Networking enabled"
 msgstr "Red activada"
 
-#: ../cli/src/network-manager.c:307
+#: ../cli/src/network-manager.c:300
 #, c-format
 msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
 msgstr "Error: parámetro «enable» inválido: «%s»; use «true» o «false»."
 
-#: ../cli/src/network-manager.c:317
+#: ../cli/src/network-manager.c:310
 #, c-format
 msgid "Error: Sleeping status is not exported by NetworkManager."
 msgstr "Error: NetworkManager no exporta el estado para dormir."
 
-#: ../cli/src/network-manager.c:325
+#: ../cli/src/network-manager.c:318
 #, c-format
 msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
 msgstr "Error: parámetro «wifi» inválido: «%s»."
 
-#: ../cli/src/network-manager.c:346
+#: ../cli/src/network-manager.c:339
 msgid "WiFi enabled"
 msgstr "WiFi activado"
 
-#: ../cli/src/network-manager.c:362
+#: ../cli/src/network-manager.c:355
 #, c-format
 msgid "Error: invalid 'wifi' parameter: '%s'."
 msgstr "Error: parámetro «wifi» inválido: «%s»."
 
-#: ../cli/src/network-manager.c:384
+#: ../cli/src/network-manager.c:377
 msgid "WWAN enabled"
 msgstr "WWAN activado"
 
-#: ../cli/src/network-manager.c:400
+#: ../cli/src/network-manager.c:393
 #, c-format
 msgid "Error: invalid 'wwan' parameter: '%s'."
 msgstr "Error: parámetro «wwan» inválido: «%s»."
 
-#: ../cli/src/network-manager.c:423
+#: ../cli/src/network-manager.c:416
 msgid "WiMAX enabled"
 msgstr "WiMAX activado"
 
-#: ../cli/src/network-manager.c:439
+#: ../cli/src/network-manager.c:432
 #, c-format
 msgid "Error: invalid 'wimax' parameter: '%s'."
 msgstr "Error: parámetro «wimax» inválido: «%s»."
 
-#: ../cli/src/network-manager.c:452
+#: ../cli/src/network-manager.c:445
 #, c-format
 msgid "Error: 'nm' command '%s' is not valid."
 msgstr "Error: comando «nm» command «%s» inválido."
@@ -1284,79 +1325,89 @@ msgstr "Error: no se pudo crear un objeto NMClient."
 msgid "Success"
 msgstr "Éxito"
 
-#: ../cli/src/settings.c:423
+#: ../cli/src/settings.c:447
 #, c-format
 msgid "%d (hex-ascii-key)"
 msgstr "%d (clave-hex-ascii)"
 
-#: ../cli/src/settings.c:425
+#: ../cli/src/settings.c:449
 #, c-format
 msgid "%d (104/128-bit passphrase)"
 msgstr "%d (frase de acceso 104/128-bits)"
 
-#: ../cli/src/settings.c:428
+#: ../cli/src/settings.c:452
 #, c-format
 msgid "%d (unknown)"
 msgstr "%d (desconocido)"
 
-#: ../cli/src/settings.c:454
+#: ../cli/src/settings.c:478
 msgid "0 (unknown)"
 msgstr "0 (desconocido)"
 
-#: ../cli/src/settings.c:460
+#: ../cli/src/settings.c:484
 msgid "any, "
 msgstr "cualquiera,"
 
-#: ../cli/src/settings.c:462
+#: ../cli/src/settings.c:486
 msgid "900 MHz, "
 msgstr "900 MHz, "
 
-#: ../cli/src/settings.c:464
+#: ../cli/src/settings.c:488
 msgid "1800 MHz, "
 msgstr "1800 MHz, "
 
-#: ../cli/src/settings.c:466
+#: ../cli/src/settings.c:490
 msgid "1900 MHz, "
 msgstr "1900 MHz, "
 
-#: ../cli/src/settings.c:468
+#: ../cli/src/settings.c:492
 msgid "850 MHz, "
 msgstr "850 MHz, "
 
-#: ../cli/src/settings.c:470
+#: ../cli/src/settings.c:494
 msgid "WCDMA 3GPP UMTS 2100 MHz, "
 msgstr "WCDMA 3GPP UMTS 2100 MHz, "
 
-#: ../cli/src/settings.c:472
+#: ../cli/src/settings.c:496
 msgid "WCDMA 3GPP UMTS 1800 MHz, "
 msgstr "WCDMA 3GPP UMTS 1800 MHz, "
 
-#: ../cli/src/settings.c:474
+#: ../cli/src/settings.c:498
 msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
 msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
 
-#: ../cli/src/settings.c:476
+#: ../cli/src/settings.c:500
 msgid "WCDMA 3GPP UMTS 800 MHz, "
 msgstr "WCDMA 3GPP UMTS 800 MHz, "
 
-#: ../cli/src/settings.c:478
+#: ../cli/src/settings.c:502
 msgid "WCDMA 3GPP UMTS 850 MHz, "
 msgstr "WCDMA 3GPP UMTS 850 MHz, "
 
-#: ../cli/src/settings.c:480
+#: ../cli/src/settings.c:504
 msgid "WCDMA 3GPP UMTS 900 MHz, "
 msgstr "WCDMA 3GPP UMTS 900 MHz, "
 
-#: ../cli/src/settings.c:482
+#: ../cli/src/settings.c:506
 msgid "WCDMA 3GPP UMTS 1700 MHz, "
 msgstr "WCDMA 3GPP UMTS 1700 MHz, "
 
-#: ../cli/src/settings.c:566 ../cli/src/settings.c:732
+#: ../cli/src/settings.c:508
+#| msgid "WCDMA 3GPP UMTS 900 MHz, "
+msgid "WCDMA 3GPP UMTS 1900 MHz, "
+msgstr "WCDMA 3GPP UMTS 1900 MHz, "
+
+#: ../cli/src/settings.c:510
+#| msgid "WCDMA 3GPP UMTS 2100 MHz, "
+msgid "WCDMA 3GPP UMTS 2600 MHz, "
+msgstr "WCDMA 3GPP UMTS 2600 MHz, "
+
+#: ../cli/src/settings.c:636 ../cli/src/settings.c:835
 msgid "auto"
 msgstr "auto"
 
-#: ../cli/src/settings.c:727 ../cli/src/settings.c:730
-#: ../cli/src/settings.c:731 ../cli/src/utils.c:176
+#: ../cli/src/settings.c:829 ../cli/src/settings.c:832
+#: ../cli/src/settings.c:833 ../cli/src/utils.c:176
 msgid "not set"
 msgstr "no establecido"
 
@@ -1380,18 +1431,18 @@ msgstr "Opción «--terse» requiere especificar «--fields»"
 msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
 msgstr "Opción «--terse» requiere valores de «--fields» específicos, no «%s»"
 
-#: ../cli/src/utils.c:333
+#: ../cli/src/utils.c:334
 #, c-format
 msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"
 msgstr ""
 "Error: no se pudo crear un objeto proxy en D-Bus para org.freedesktop.DBus"
 
-#: ../cli/src/utils.c:341
+#: ../cli/src/utils.c:342
 #, c-format
 msgid "Error: NameHasOwner request failed: %s"
 msgstr "Error: falló la solicitud NameHasOwner: %s"
 
-#: ../cli/src/utils.c:386
+#: ../cli/src/utils.c:387
 #, c-format
 msgid ""
 "Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
@@ -1400,14 +1451,15 @@ msgstr ""
 "Advertencia: las versiones de nmcli (%s) y de NetworkManager (%s) no "
 "coinciden. Use «--nocheck» para evitar el aviso.\n"
 
-#: ../cli/src/utils.c:395
+#: ../cli/src/utils.c:396
 #, c-format
 msgid ""
 "Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force "
 "execution using --nocheck, but the results are unpredictable."
 msgstr ""
 "Error: las versiones de nmcli (%s) y de NetworkManager (%s) no coinciden. "
-"Fuerce la ejecución usando «--nocheck», pero los resultados son impredecibles."
+"Fuerce la ejecución usando «--nocheck», pero los resultados son "
+"impredecibles."
 
 #: ../libnm-util/crypto.c:133
 #, c-format
@@ -1470,12 +1522,11 @@ msgid "Failed to find expected PKCS#8 end tag '%s'."
 msgstr "Falló al buscar la etiqueta de final «%s» de PKCS#8."
 
 #: ../libnm-util/crypto.c:312
-#| msgid "Not enough memory to store file data."
 msgid "Not enough memory to store private key data."
-msgstr "No hay memoria suficiente para almacenar los datos de la clave privada."
+msgstr ""
+"No hay memoria suficiente para almacenar los datos de la clave privada."
 
 #: ../libnm-util/crypto.c:317
-#| msgid "Failed to decrypt the private key."
 msgid "Failed to decode PKCS#8 private key."
 msgstr "Falló al descifrar la clave privada PKCS#8."
 
@@ -1637,13 +1688,11 @@ msgstr "No se pudo verificar el archivo PKCS#12: %s"
 
 #: ../libnm-util/crypto_gnutls.c:460
 #, c-format
-#| msgid "Couldn't initialize PKCS#12 decoder: %s"
 msgid "Couldn't initialize PKCS#8 decoder: %s"
 msgstr "No se pudo inicializar el decodificador PKCS#8: %s"
 
 #: ../libnm-util/crypto_gnutls.c:483
 #, c-format
-#| msgid "Couldn't decode PKCS#12 file: %s"
 msgid "Couldn't decode PKCS#8 file: %s"
 msgstr "No se pudo decodificar el archivo PKCS#8: %s"
 
@@ -1934,13 +1983,13 @@ msgstr "se pudo encontrar «dhcpcd»."
 msgid "unsupported DHCP client '%s'"
 msgstr "«%s» cliente DHCP sin soporte "
 
-#: ../src/dns-manager/nm-dns-manager.c:369
+#: ../src/dns-manager/nm-dns-manager.c:376
 msgid "NOTE: the libc resolver may not support more than 3 nameservers."
 msgstr ""
 "NOTA: el resolutor de nombres de libc puede que no soporte más de 3 "
 "servidores de nombres."
 
-#: ../src/dns-manager/nm-dns-manager.c:371
+#: ../src/dns-manager/nm-dns-manager.c:378
 msgid "The nameservers listed below may not be recognized."
 msgstr "Puede que los servidores de nombres listados abajo no se reconozcan."
 
@@ -1974,72 +2023,72 @@ msgstr "Conexión PAN %d"
 msgid "DUN connection %d"
 msgstr "Conexión DUN %d"
 
-#: ../src/nm-device-ethernet.c:1681
+#: ../src/nm-device-ethernet.c:1724
 #, c-format
 msgid "PPPoE connection %d"
 msgstr "Conexión PPPoE %d"
 
-#: ../src/nm-device-ethernet.c:1681 ../src/settings/nm-settings-utils.c:50
+#: ../src/nm-device-ethernet.c:1724 ../src/settings/nm-settings-utils.c:50
 #, c-format
 msgid "Wired connection %d"
 msgstr "Conexión cableada %d"
 
-#: ../src/nm-device-olpc-mesh.c:423
+#: ../src/nm-device-olpc-mesh.c:393
 #, c-format
 msgid "Mesh %d"
 msgstr "Malla %d"
 
-#: ../src/nm-manager.c:673
+#: ../src/nm-manager.c:670
 #, c-format
 msgid "VPN connection %d"
 msgstr "Conexión VPN %d"
 
-#: ../src/nm-netlink-monitor.c:100 ../src/nm-netlink-monitor.c:231
-#: ../src/nm-netlink-monitor.c:653
+#: ../src/nm-netlink-monitor.c:101 ../src/nm-netlink-monitor.c:234
+#: ../src/nm-netlink-monitor.c:661
 #, c-format
 msgid "error processing netlink message: %s"
 msgstr "error al procesar el mensaje de netlink: %s"
 
-#: ../src/nm-netlink-monitor.c:214
+#: ../src/nm-netlink-monitor.c:216
 msgid "error occurred while waiting for data on socket"
 msgstr "ha ocurrido un error mientras esperaban datos en un socket"
 
-#: ../src/nm-netlink-monitor.c:254
+#: ../src/nm-netlink-monitor.c:260
 #, c-format
 msgid "unable to connect to netlink for monitoring link status: %s"
 msgstr ""
 "no se puede conectar con netlink para monitorizar el estado del enlace: %s"
 
-#: ../src/nm-netlink-monitor.c:265
+#: ../src/nm-netlink-monitor.c:271
 #, c-format
 msgid "unable to enable netlink handle credential passing: %s"
 msgstr "no se puede activar el manejador netlink para pasar credenciales: %s"
 
-#: ../src/nm-netlink-monitor.c:291 ../src/nm-netlink-monitor.c:353
+#: ../src/nm-netlink-monitor.c:294 ../src/nm-netlink-monitor.c:354
 #, c-format
 msgid "unable to allocate netlink handle for monitoring link status: %s"
 msgstr ""
 "no se puede asignar el manejador netlink para monitorizar el estado del "
 "enlace: %s"
 
-#: ../src/nm-netlink-monitor.c:376
+#: ../src/nm-netlink-monitor.c:379
 #, c-format
 msgid "unable to allocate netlink link cache for monitoring link status: %s"
 msgstr ""
 "no se puede asignar el enlace a la cache de netlink para monitorizar el "
 "estado del enlace: %s"
 
-#: ../src/nm-netlink-monitor.c:502
+#: ../src/nm-netlink-monitor.c:506
 #, c-format
 msgid "unable to join netlink group: %s"
 msgstr "no pudo unirse al grupo netlink: %s"
 
-#: ../src/nm-netlink-monitor.c:629 ../src/nm-netlink-monitor.c:642
+#: ../src/nm-netlink-monitor.c:637 ../src/nm-netlink-monitor.c:650
 #, c-format
 msgid "error updating link cache: %s"
 msgstr "error al actualizar el enlace caché: %s"
 
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3512
+#: ../src/settings/plugins/ifcfg-rh/reader.c:3575
 #: ../src/settings/plugins/ifnet/connection_parser.c:51
 msgid "System"
 msgstr "Sistema"
diff --git a/po/fi.po b/po/fi.po
index 31187e9f..8a7517f6 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -4,302 +4,1848 @@
 #
 # Ilkka Tuohela <hile@iki.fi>, 2005-2008.
 #
+# Additional Launchpad translators with re-licensable originally BSD licensed contributions:
+# Christian Hellberg (https://launchpad.net/~christian-hellberg), Heikki Kulhia (https://launchpad.net/~hessuk), Heikki Mäntysaari <heikkim@gmail.com>, Jere Sokka (https://launchpad.net/~jerry-sokka), Jiri Grönroos <jiri.gronroos@iki.fi>, Joonas Pajuniva (https://launchpad.net/~joonas-pajuniva), Jussi Aalto, Lazy (https://launchpad.net/~ubuntu-bugs-oittaa), Matti Karnaattu (https://launchpad.net/~mattikarnaattu), Miko-Matias Grönvalli (https://launchpad.net/~matias-gronvall), Pasi Tarhonen (https://launchpad.net/~pasi-tarhonen), Sorkkarauta (https://launchpad.net/~sorkkarauta), Timo Jyrinki <timo.jyrinki@iki.fi>, Tomi Juntunen (https://launchpad.net/~tojuntu), Toni Lähdekorpi <toni@lygon.net>, vilQuri <vili.lehto@pp.inet.fi>.
+#
 msgid ""
 msgstr ""
 "Project-Id-Version: NetworkManager\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-11-29 20:22+0300\n"
-"PO-Revision-Date: 2008-11-29 20:00+0300\n"
-"Last-Translator: Ilkka Tuohela <hile@iki.fi>\n"
+"POT-Creation-Date: 2011-09-12 16:51+0300\n"
+"PO-Revision-Date: 2011-09-12 16:51+0300\n"
+"Last-Translator: Timo Jyrinki <timo.jyrinki@iki.fi>\n"
 "Language-Team: Finnish <gnome-fi-laatu@lists.sourceforge.net>\n"
+"Language: fi\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Launchpad-Export-Date: 2011-09-12 13:20+0000\n"
+"X-Generator: Launchpad (build 13910)\n"
+
+#: ../cli/src/connections.c:64 ../cli/src/connections.c:78
+#: ../cli/src/devices.c:101 ../cli/src/devices.c:114 ../cli/src/devices.c:124
+#: ../cli/src/devices.c:134 ../cli/src/devices.c:148 ../cli/src/devices.c:162
+#: ../cli/src/devices.c:173 ../cli/src/devices.c:184 ../cli/src/devices.c:193
+#: ../cli/src/devices.c:202 ../cli/src/devices.c:224
+msgid "NAME"
+msgstr "NIMI"
+
+#. 0
+#: ../cli/src/connections.c:65 ../cli/src/connections.c:79
+msgid "UUID"
+msgstr "UUID"
+
+#. 1
+#: ../cli/src/connections.c:66
+msgid "DEVICES"
+msgstr "LAITTEET"
+
+#. 2
+#: ../cli/src/connections.c:67
+msgid "DEFAULT"
+msgstr "OLETUS"
+
+#. 3
+#: ../cli/src/connections.c:68
+msgid "SPEC-OBJECT"
+msgstr "SPEC-KOHDE"
+
+#. 4
+#: ../cli/src/connections.c:69
+msgid "VPN"
+msgstr "VPN"
+
+#. 5
+#. 6
+#. 2
+#. 11
+#. 5
+#: ../cli/src/connections.c:70 ../cli/src/connections.c:85
+#: ../cli/src/devices.c:69 ../cli/src/devices.c:214 ../cli/src/devices.c:230
+msgid "DBUS-PATH"
+msgstr ""
+
+#. 1
+#. 0
+#. 1
+#. 2
+#: ../cli/src/connections.c:80 ../cli/src/devices.c:67
+#: ../cli/src/devices.c:103 ../cli/src/devices.c:227
+msgid "TYPE"
+msgstr "TYYPPI"
+
+#. 2
+#: ../cli/src/connections.c:81
+msgid "TIMESTAMP"
+msgstr "AIKALEIMA"
+
+#. 3
+#: ../cli/src/connections.c:82
+msgid "TIMESTAMP-REAL"
+msgstr "AIKALEIMA-TODELLINEN"
 
-#: ../libnm-util/crypto.c:120
+#. 4
+#: ../cli/src/connections.c:83
+msgid "AUTOCONNECT"
+msgstr "AUTOMAATTINEN YHTEYDENMUODOSTUS"
+
+#. 5
+#: ../cli/src/connections.c:84
+msgid "READONLY"
+msgstr "VAIN LUKU"
+
+#: ../cli/src/connections.c:153
+#, c-format
+msgid ""
+"Usage: nmcli con { COMMAND | help }\n"
+"  COMMAND := { list | status | up | down | delete }\n"
+"\n"
+"  list [id <id> | uuid <id>]\n"
+"  status\n"
+"  up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--"
+"nowait] [--timeout <timeout>]\n"
+"  up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout "
+"<timeout>]\n"
+"  down id <id> | uuid <id>\n"
+"  delete id <id> | uuid <id>\n"
+msgstr ""
+
+#: ../cli/src/connections.c:208 ../cli/src/connections.c:532
+#, c-format
+msgid "Error: 'con list': %s"
+msgstr ""
+
+#: ../cli/src/connections.c:210 ../cli/src/connections.c:534
+#, c-format
+msgid "Error: 'con list': %s; allowed fields: %s"
+msgstr ""
+
+#: ../cli/src/connections.c:218
+msgid "Connection details"
+msgstr "Yhteyden tiedot"
+
+#: ../cli/src/connections.c:407
+msgid "never"
+msgstr "ei koskaan"
+
+#. "CAPABILITIES"
+#. Print header
+#. "WIFI-PROPERTIES"
+#: ../cli/src/connections.c:408 ../cli/src/connections.c:409
+#: ../cli/src/connections.c:587 ../cli/src/connections.c:589
+#: ../cli/src/devices.c:499 ../cli/src/devices.c:552 ../cli/src/devices.c:677
+#: ../cli/src/devices.c:703 ../cli/src/devices.c:704 ../cli/src/devices.c:705
+#: ../cli/src/devices.c:706 ../cli/src/devices.c:707 ../cli/src/settings.c:560
+#: ../cli/src/settings.c:632 ../cli/src/settings.c:753
+#: ../cli/src/settings.c:1041 ../cli/src/settings.c:1042
+#: ../cli/src/settings.c:1044 ../cli/src/settings.c:1046
+#: ../cli/src/settings.c:1047 ../cli/src/settings.c:1177
+#: ../cli/src/settings.c:1178 ../cli/src/settings.c:1179
+#: ../cli/src/settings.c:1180 ../cli/src/settings.c:1259
+#: ../cli/src/settings.c:1260 ../cli/src/settings.c:1261
+#: ../cli/src/settings.c:1262 ../cli/src/settings.c:1263
+#: ../cli/src/settings.c:1264 ../cli/src/settings.c:1265
+#: ../cli/src/settings.c:1266 ../cli/src/settings.c:1267
+#: ../cli/src/settings.c:1268 ../cli/src/settings.c:1269
+#: ../cli/src/settings.c:1270 ../cli/src/settings.c:1271
+#: ../cli/src/settings.c:1346
+msgid "yes"
+msgstr "kyllä"
+
+#: ../cli/src/connections.c:408 ../cli/src/connections.c:409
+#: ../cli/src/connections.c:587 ../cli/src/connections.c:589
+#: ../cli/src/devices.c:499 ../cli/src/devices.c:552 ../cli/src/devices.c:677
+#: ../cli/src/devices.c:703 ../cli/src/devices.c:704 ../cli/src/devices.c:705
+#: ../cli/src/devices.c:706 ../cli/src/devices.c:707 ../cli/src/settings.c:560
+#: ../cli/src/settings.c:562 ../cli/src/settings.c:632
+#: ../cli/src/settings.c:753 ../cli/src/settings.c:1041
+#: ../cli/src/settings.c:1042 ../cli/src/settings.c:1044
+#: ../cli/src/settings.c:1046 ../cli/src/settings.c:1047
+#: ../cli/src/settings.c:1177 ../cli/src/settings.c:1178
+#: ../cli/src/settings.c:1179 ../cli/src/settings.c:1180
+#: ../cli/src/settings.c:1259 ../cli/src/settings.c:1260
+#: ../cli/src/settings.c:1261 ../cli/src/settings.c:1262
+#: ../cli/src/settings.c:1263 ../cli/src/settings.c:1264
+#: ../cli/src/settings.c:1265 ../cli/src/settings.c:1266
+#: ../cli/src/settings.c:1267 ../cli/src/settings.c:1268
+#: ../cli/src/settings.c:1269 ../cli/src/settings.c:1270
+#: ../cli/src/settings.c:1271 ../cli/src/settings.c:1346
+msgid "no"
+msgstr "ei"
+
+#: ../cli/src/connections.c:483
+msgid "Connection list"
+msgstr ""
+
+#: ../cli/src/connections.c:496 ../cli/src/connections.c:1356
+#: ../cli/src/connections.c:1371 ../cli/src/connections.c:1380
+#: ../cli/src/connections.c:1390 ../cli/src/connections.c:1402
+#: ../cli/src/connections.c:1497 ../cli/src/connections.c:1580
+#: ../cli/src/devices.c:1180 ../cli/src/devices.c:1190
+#: ../cli/src/devices.c:1304 ../cli/src/devices.c:1312
+#: ../cli/src/devices.c:1525 ../cli/src/devices.c:1532
+#, c-format
+msgid "Error: %s argument is missing."
+msgstr "Virhe: %s-argumentti puuttuu."
+
+#: ../cli/src/connections.c:509
+#, c-format
+msgid "Error: %s - no such connection."
+msgstr "Virhe: %s - ei kyseistä yhteyttä."
+
+#: ../cli/src/connections.c:515 ../cli/src/connections.c:1415
+#: ../cli/src/connections.c:1514 ../cli/src/connections.c:1587
+#: ../cli/src/devices.c:977 ../cli/src/devices.c:1057
+#: ../cli/src/devices.c:1204 ../cli/src/devices.c:1318
+#: ../cli/src/devices.c:1538
+#, c-format
+msgid "Unknown parameter: %s\n"
+msgstr "Tuntematon parametri: %s\n"
+
+#: ../cli/src/connections.c:524
+#, c-format
+msgid "Error: no valid parameter specified."
+msgstr "Virhe: annettu parametri on virheellinen."
+
+#: ../cli/src/connections.c:539 ../cli/src/connections.c:1668
+#: ../cli/src/devices.c:1746 ../cli/src/network-manager.c:456
+#, c-format
+msgid "Error: %s."
+msgstr "Virhe: %s."
+
+#: ../cli/src/connections.c:627
+#, c-format
+msgid "Error: 'con status': %s"
+msgstr ""
+
+#: ../cli/src/connections.c:629
+#, c-format
+msgid "Error: 'con status': %s; allowed fields: %s"
+msgstr ""
+
+#: ../cli/src/connections.c:637 ../cli/src/connections.c:1430
+#: ../cli/src/connections.c:1529 ../cli/src/connections.c:1601
+#: ../cli/src/devices.c:1004 ../cli/src/devices.c:1066
+#: ../cli/src/devices.c:1219 ../cli/src/devices.c:1348
+#: ../cli/src/devices.c:1567
+#, c-format
+msgid "Error: Can't find out if NetworkManager is running: %s."
+msgstr "Virhe: Ei saada selville onko NetworkManager käynnissä: %s."
+
+#: ../cli/src/connections.c:641 ../cli/src/connections.c:1434
+#: ../cli/src/connections.c:1533 ../cli/src/connections.c:1605
+#: ../cli/src/devices.c:1008 ../cli/src/devices.c:1070
+#: ../cli/src/devices.c:1223 ../cli/src/devices.c:1352
+#: ../cli/src/devices.c:1571
+#, c-format
+msgid "Error: NetworkManager is not running."
+msgstr "Virhe: NetworkManager ei ole käynnissä."
+
+#: ../cli/src/connections.c:649
+msgid "Active connections"
+msgstr "Aktiiviset yhteydet"
+
+#: ../cli/src/connections.c:1073
+#, c-format
+msgid "no active connection on device '%s'"
+msgstr "ei aktiivista yhteyttä laitteessa '%s'"
+
+#: ../cli/src/connections.c:1081
+#, c-format
+msgid "no active connection or device"
+msgstr "ei aktiivista yhteyttä tai laitetta"
+
+#: ../cli/src/connections.c:1152
+#, c-format
+msgid "device '%s' not compatible with connection '%s'"
+msgstr "laite '%s' ei ole yhteensopiva yhteyden '%s' kanssa"
+
+#: ../cli/src/connections.c:1154
+#, c-format
+msgid "no device found for connection '%s'"
+msgstr "laitetta yhteydelle '%s' ei löytynyt"
+
+#: ../cli/src/connections.c:1165
+msgid "activating"
+msgstr "akitvoidaan"
+
+#: ../cli/src/connections.c:1167
+msgid "activated"
+msgstr "aktivoitu"
+
+#: ../cli/src/connections.c:1169 ../cli/src/devices.c:294
+msgid "deactivating"
+msgstr ""
+
+#: ../cli/src/connections.c:1172 ../cli/src/connections.c:1195
+#: ../cli/src/connections.c:1228 ../cli/src/devices.c:298
+#: ../cli/src/devices.c:678 ../cli/src/network-manager.c:111
+#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:176
+#: ../cli/src/network-manager.c:185 ../cli/src/network-manager.c:291
+#: ../cli/src/network-manager.c:346 ../cli/src/network-manager.c:384
+#: ../cli/src/network-manager.c:423 ../cli/src/settings.c:513
+#: ../cli/src/utils.c:397
+msgid "unknown"
+msgstr "tuntematon"
+
+#: ../cli/src/connections.c:1181
+msgid "VPN connecting (prepare)"
+msgstr "VPN yhdistää (valmistelu)"
+
+#: ../cli/src/connections.c:1183
+msgid "VPN connecting (need authentication)"
+msgstr "VPN yhdistää (tarvitaan autentikointi)"
+
+#: ../cli/src/connections.c:1185
+msgid "VPN connecting"
+msgstr "VPN yhdistää"
+
+#: ../cli/src/connections.c:1187
+msgid "VPN connecting (getting IP configuration)"
+msgstr "VPN yhdistää (haetaan IP-asetuksia)"
+
+#: ../cli/src/connections.c:1189
+msgid "VPN connected"
+msgstr "VPN yhdistetty"
+
+#: ../cli/src/connections.c:1191
+msgid "VPN connection failed"
+msgstr "VPN-yhteyden avaus epäonnistui"
+
+#: ../cli/src/connections.c:1193
+msgid "VPN disconnected"
+msgstr "VPN-yhteys katkaistu"
+
+#: ../cli/src/connections.c:1204
+msgid "unknown reason"
+msgstr "tuntematon syy"
+
+#: ../cli/src/connections.c:1206
+msgid "none"
+msgstr "ei mitään"
+
+#: ../cli/src/connections.c:1208
+msgid "the user was disconnected"
+msgstr "käyttäjän yhteys katkaistu"
+
+#: ../cli/src/connections.c:1210
+msgid "the base network connection was interrupted"
+msgstr "verkkoyhteys keskeytynyt"
+
+#: ../cli/src/connections.c:1212
+msgid "the VPN service stopped unexpectedly"
+msgstr "VPN-palvelut pysähtyi yllättäen"
+
+#: ../cli/src/connections.c:1214
+msgid "the VPN service returned invalid configuration"
+msgstr "VPN-palvelu palautti virheelliset asetukset"
+
+#: ../cli/src/connections.c:1216
+msgid "the connection attempt timed out"
+msgstr "yhteyden muodostus aikakatkaistiin"
+
+#: ../cli/src/connections.c:1218
+msgid "the VPN service did not start in time"
+msgstr "VPN-palvelu ei käynnistynyt ajoissa"
+
+#: ../cli/src/connections.c:1220
+msgid "the VPN service failed to start"
+msgstr "VPN-palvelu ei käynnistynyt"
+
+#: ../cli/src/connections.c:1222
+msgid "no valid VPN secrets"
+msgstr ""
+
+#: ../cli/src/connections.c:1224
+msgid "invalid VPN secrets"
+msgstr ""
+
+#: ../cli/src/connections.c:1226
+msgid "the connection was removed"
+msgstr "yhteys poistettu"
+
+#: ../cli/src/connections.c:1240
+#, c-format
+msgid "state: %s\n"
+msgstr "tila: %s\n"
+
+#: ../cli/src/connections.c:1243 ../cli/src/connections.c:1269
+#, c-format
+msgid "Connection activated\n"
+msgstr "yhteys aktivoitu\n"
+
+#: ../cli/src/connections.c:1246
+#, c-format
+msgid "Error: Connection activation failed."
+msgstr "Virhe: Yhteyden aktivointi epäonnistui."
+
+#: ../cli/src/connections.c:1265
+#, c-format
+msgid "state: %s (%d)\n"
+msgstr "tila: %s (%d)\n"
+
+#: ../cli/src/connections.c:1275
+#, c-format
+msgid "Error: Connection activation failed: %s."
+msgstr "Virhe: Yhteyden aktivointi epäonnistui: %s"
+
+#: ../cli/src/connections.c:1292 ../cli/src/devices.c:1126
+#, c-format
+msgid "Error: Timeout %d sec expired."
+msgstr "Virhe: Yhteydenmuodostus kesti liian kauan (%d s)"
+
+#: ../cli/src/connections.c:1305
+#, c-format
+msgid "Error: Connection activation failed: %s"
+msgstr "Virhe: Yhteyden aktivointi epäonnistui: %s"
+
+#: ../cli/src/connections.c:1311
+#, c-format
+msgid "Active connection state: %s\n"
+msgstr "Aktiivinen yhteyden tila:%s\n"
+
+#: ../cli/src/connections.c:1312
+#, c-format
+msgid "Active connection path: %s\n"
+msgstr "Aktiivisen yhteyden polku: %s\n"
+
+#: ../cli/src/connections.c:1364 ../cli/src/connections.c:1505
+#: ../cli/src/connections.c:1614
+#, c-format
+msgid "Error: Unknown connection: %s."
+msgstr "Virhe: tuntematon yhteys: %s."
+
+#: ../cli/src/connections.c:1410 ../cli/src/devices.c:1198
+#, c-format
+msgid "Error: timeout value '%s' is not valid."
+msgstr "Virhe: Kytkentäajan asetus '%s' virheellinen"
+
+#: ../cli/src/connections.c:1423 ../cli/src/connections.c:1522
+#: ../cli/src/connections.c:1594
+#, c-format
+msgid "Error: id or uuid has to be specified."
+msgstr ""
+
+#: ../cli/src/connections.c:1451
+#, c-format
+msgid "Error: No suitable device found: %s."
+msgstr "Virhe: Soveltuvaa laitetta ei löytynyt: %s."
+
+#: ../cli/src/connections.c:1453
+#, c-format
+msgid "Error: No suitable device found."
+msgstr "Virhe: Soveltuvaa laitetta ei löytynyt."
+
+#: ../cli/src/connections.c:1558
+#, c-format
+msgid "Warning: Connection not active\n"
+msgstr "Varoitus: Ei aktiivista yhteyttä\n"
+
+#: ../cli/src/connections.c:1659
+#, c-format
+msgid "Error: 'con' command '%s' is not valid."
+msgstr ""
+
+#: ../cli/src/connections.c:1724
+#, c-format
+msgid "Error: could not connect to D-Bus."
+msgstr ""
+
+#: ../cli/src/connections.c:1732
+#, c-format
+msgid "Error: Could not get system settings."
+msgstr "Virhe: Järjestelmäasetuksia ei saada."
+
+#: ../cli/src/connections.c:1742
+#, c-format
+msgid "Error: Can't obtain connections: settings service is not running."
+msgstr ""
+
+#. 0
+#. 9
+#. 3
+#: ../cli/src/devices.c:66 ../cli/src/devices.c:102 ../cli/src/devices.c:212
+#: ../cli/src/devices.c:228
+msgid "DEVICE"
+msgstr ""
+
+#. 1
+#. 4
+#. 1
+#: ../cli/src/devices.c:68 ../cli/src/devices.c:106
+#: ../cli/src/network-manager.c:39
+msgid "STATE"
+msgstr "TILA"
+
+#: ../cli/src/devices.c:78
+msgid "GENERAL"
+msgstr "YLEISTÄ"
+
+#. 0
+#: ../cli/src/devices.c:79
+msgid "CAPABILITIES"
+msgstr ""
+
+#. 1
+#: ../cli/src/devices.c:80
+msgid "WIFI-PROPERTIES"
+msgstr ""
+
+#. 2
+#: ../cli/src/devices.c:81
+msgid "AP"
+msgstr ""
+
+#. 3
+#: ../cli/src/devices.c:82
+msgid "WIRED-PROPERTIES"
+msgstr ""
+
+#. 4
+#: ../cli/src/devices.c:83
+msgid "WIMAX-PROPERTIES"
+msgstr ""
+
+#. 5
+#. 0
+#: ../cli/src/devices.c:84 ../cli/src/devices.c:225
+msgid "NSP"
+msgstr ""
+
+#. 6
+#: ../cli/src/devices.c:85
+msgid "IP4-SETTINGS"
+msgstr "IP4-ASETUKSET"
+
+#. 7
+#: ../cli/src/devices.c:86
+msgid "IP4-DNS"
+msgstr ""
+
+#. 8
+#: ../cli/src/devices.c:87
+msgid "IP6-SETTINGS"
+msgstr ""
+
+#. 9
+#: ../cli/src/devices.c:88
+msgid "IP6-DNS"
+msgstr ""
+
+#. 2
+#: ../cli/src/devices.c:104
+msgid "DRIVER"
+msgstr "OHJAIN"
+
+#. 3
+#: ../cli/src/devices.c:105
+msgid "HWADDR"
+msgstr ""
+
+#. 0
+#: ../cli/src/devices.c:115
+msgid "CARRIER-DETECT"
+msgstr ""
+
+#. 1
+#: ../cli/src/devices.c:116
+msgid "SPEED"
+msgstr "NOPEUS"
+
+#. 0
+#: ../cli/src/devices.c:125
+msgid "CARRIER"
+msgstr ""
+
+#. 0
+#: ../cli/src/devices.c:135
+msgid "WEP"
+msgstr "WEP"
+
+#. 1
+#: ../cli/src/devices.c:136
+msgid "WPA"
+msgstr "WPA"
+
+#. 2
+#: ../cli/src/devices.c:137
+msgid "WPA2"
+msgstr "WPA2"
+
+#. 3
+#: ../cli/src/devices.c:138
+msgid "TKIP"
+msgstr "TKIP"
+
+#. 4
+#: ../cli/src/devices.c:139
+msgid "CCMP"
+msgstr ""
+
+#. 0
+#: ../cli/src/devices.c:149
+msgid "CTR-FREQ"
+msgstr ""
+
+#. 1
+#: ../cli/src/devices.c:150
+msgid "RSSI"
+msgstr ""
+
+#. 2
+#: ../cli/src/devices.c:151
+msgid "CINR"
+msgstr ""
+
+#. 3
+#: ../cli/src/devices.c:152
+msgid "TX-POW"
+msgstr ""
+
+#. 4
+#: ../cli/src/devices.c:153
+msgid "BSID"
+msgstr ""
+
+#. 0
+#: ../cli/src/devices.c:163 ../cli/src/devices.c:174
+msgid "ADDRESS"
+msgstr ""
+
+#. 1
+#: ../cli/src/devices.c:164 ../cli/src/devices.c:175
+msgid "PREFIX"
+msgstr ""
+
+#. 2
+#: ../cli/src/devices.c:165 ../cli/src/devices.c:176
+msgid "GATEWAY"
+msgstr ""
+
+#. 0
+#: ../cli/src/devices.c:185 ../cli/src/devices.c:194
+msgid "DNS"
+msgstr "DNS"
+
+#. 0
+#: ../cli/src/devices.c:203
+msgid "SSID"
+msgstr ""
+
+#. 1
+#: ../cli/src/devices.c:204
+msgid "BSSID"
+msgstr ""
+
+#. 2
+#: ../cli/src/devices.c:205
+msgid "MODE"
+msgstr "TILA"
+
+#. 3
+#: ../cli/src/devices.c:206
+msgid "FREQ"
+msgstr "TAAJ"
+
+#. 4
+#: ../cli/src/devices.c:207
+msgid "RATE"
+msgstr "NOPEUS"
+
+#. 5
+#. 1
+#: ../cli/src/devices.c:208 ../cli/src/devices.c:226
+msgid "SIGNAL"
+msgstr ""
+
+#. 6
+#: ../cli/src/devices.c:209
+msgid "SECURITY"
+msgstr "TURVALLISUUS"
+
+#. 7
+#: ../cli/src/devices.c:210
+msgid "WPA-FLAGS"
+msgstr "WPA-LIPUT"
+
+#. 8
+#: ../cli/src/devices.c:211
+msgid "RSN-FLAGS"
+msgstr "RSN-LIPUT"
+
+#. 10
+#. 4
+#: ../cli/src/devices.c:213 ../cli/src/devices.c:229
+msgid "ACTIVE"
+msgstr "AKTIIVINEN"
+
+#: ../cli/src/devices.c:246
+#, c-format
+msgid ""
+"Usage: nmcli dev { COMMAND | help }\n"
+"\n"
+"  COMMAND := { status | list | disconnect | wifi | wimax }\n"
+"\n"
+"  COMMAND := { status | list | disconnect | wifi }\n"
+"\n"
+"  status\n"
+"  list [iface <iface>]\n"
+"  disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
+"  wifi [list [iface <iface>] [bssid <BSSID>]]\n"
+"  wimax [list [iface <iface>] [nsp <name>]]\n"
+"\n"
+msgstr ""
+
+#: ../cli/src/devices.c:274
+msgid "unmanaged"
+msgstr "hallinnoimaton"
+
+#: ../cli/src/devices.c:276
+msgid "unavailable"
+msgstr ""
+
+#: ../cli/src/devices.c:278 ../cli/src/network-manager.c:108
+msgid "disconnected"
+msgstr ""
+
+#: ../cli/src/devices.c:280
+msgid "connecting (prepare)"
+msgstr "yhdistetään (valmistellaan)"
+
+#: ../cli/src/devices.c:282
+msgid "connecting (configuring)"
+msgstr "yhdistetään (määritellään)"
+
+#: ../cli/src/devices.c:284
+msgid "connecting (need authentication)"
+msgstr "yhdistetään (tarvitsee valtuutuksen)"
+
+#: ../cli/src/devices.c:286
+msgid "connecting (getting IP configuration)"
+msgstr "yhdistetään (haetaan IP määrittelyjä)"
+
+#: ../cli/src/devices.c:288
+msgid "connecting (checking IP connectivity)"
+msgstr "yhdistää (tarkastaa IP yhteyttä)"
+
+#: ../cli/src/devices.c:290
+msgid "connecting (starting secondary connections)"
+msgstr "yhdistää (käynnistää toisen tason yhteydet)"
+
+#: ../cli/src/devices.c:292 ../cli/src/network-manager.c:104
+msgid "connected"
+msgstr ""
+
+#: ../cli/src/devices.c:296
+msgid "connection failed"
+msgstr "yhdistäminen epäonnistui"
+
+#: ../cli/src/devices.c:321 ../cli/src/devices.c:331 ../cli/src/devices.c:491
+#: ../cli/src/devices.c:535
+msgid "Unknown"
+msgstr "Tuntematon"
+
+#: ../cli/src/devices.c:364
+msgid "(none)"
+msgstr ""
+
+#: ../cli/src/devices.c:389
+#, c-format
+msgid "%s: error converting IP4 address 0x%X"
+msgstr ""
+
+#: ../cli/src/devices.c:460
+#, c-format
+msgid "%u MHz"
+msgstr "%u MHz"
+
+#: ../cli/src/devices.c:461
+#, c-format
+msgid "%u MB/s"
+msgstr ""
+
+#: ../cli/src/devices.c:470
+msgid "Encrypted: "
+msgstr ""
+
+#: ../cli/src/devices.c:475
+msgid "WEP "
+msgstr "WEP "
+
+#: ../cli/src/devices.c:477
+msgid "WPA "
+msgstr "WPA "
+
+#: ../cli/src/devices.c:479
+msgid "WPA2 "
+msgstr "WPA2 "
+
+#: ../cli/src/devices.c:482
+msgid "Enterprise "
+msgstr ""
+
+#: ../cli/src/devices.c:491
+msgid "Ad-Hoc"
+msgstr ""
+
+#: ../cli/src/devices.c:491
+msgid "Infrastructure"
+msgstr ""
+
+#: ../cli/src/devices.c:526
+msgid "Home"
+msgstr ""
+
+#: ../cli/src/devices.c:529
+msgid "Partner"
+msgstr ""
+
+#: ../cli/src/devices.c:532
+msgid "Roaming"
+msgstr ""
+
+#: ../cli/src/devices.c:602
+#, c-format
+msgid "Error: 'dev list': %s"
+msgstr ""
+
+#: ../cli/src/devices.c:604
+#, c-format
+msgid "Error: 'dev list': %s; allowed fields: %s"
+msgstr ""
+
+#: ../cli/src/devices.c:613
+msgid "Device details"
+msgstr "Laitetiedot"
+
+#: ../cli/src/devices.c:647 ../cli/src/devices.c:1142 ../cli/src/utils.c:343
+msgid "(unknown)"
+msgstr "(tuntematon)"
+
+#: ../cli/src/devices.c:648
+msgid "unknown)"
+msgstr "tuntematon)"
+
+#: ../cli/src/devices.c:674
+#, c-format
+msgid "%u Mb/s"
+msgstr ""
+
+#. Print header
+#. "WIRED-PROPERTIES"
+#: ../cli/src/devices.c:747
+msgid "on"
+msgstr ""
+
+#: ../cli/src/devices.c:747
+msgid "off"
+msgstr ""
+
+#: ../cli/src/devices.c:994
+#, c-format
+msgid "Error: 'dev status': %s"
+msgstr "Virhe: 'laitetila': %s"
+
+#: ../cli/src/devices.c:996
+#, c-format
+msgid "Error: 'dev status': %s; allowed fields: %s"
+msgstr "Virhe: 'laitetila': %s; sallitut kentät: %s"
+
+#: ../cli/src/devices.c:1019
+msgid "Status of devices"
+msgstr "Laitteiden tilat"
+
+#: ../cli/src/devices.c:1050
+#, c-format
+msgid "Error: '%s' argument is missing."
+msgstr ""
+
+#: ../cli/src/devices.c:1091 ../cli/src/devices.c:1243
+#: ../cli/src/devices.c:1380 ../cli/src/devices.c:1599
+#, c-format
+msgid "Error: Device '%s' not found."
+msgstr "Virhe: laitetta '%s' ei löytynyt."
+
+#: ../cli/src/devices.c:1114
+#, c-format
+msgid "Success: Device '%s' successfully disconnected."
+msgstr ""
+
+#: ../cli/src/devices.c:1139
+#, c-format
+msgid "Error: Device '%s' (%s) disconnecting failed: %s"
+msgstr ""
+
+#: ../cli/src/devices.c:1147
+#, c-format
+msgid "Device state: %d (%s)\n"
+msgstr "Laitteen tila: %d (%s)\n"
+
+#: ../cli/src/devices.c:1212
+#, c-format
+msgid "Error: iface has to be specified."
+msgstr ""
+
+#: ../cli/src/devices.c:1338
+#, c-format
+msgid "Error: 'dev wifi': %s"
+msgstr ""
+
+#: ../cli/src/devices.c:1340
+#, c-format
+msgid "Error: 'dev wifi': %s; allowed fields: %s"
+msgstr ""
+
+#: ../cli/src/devices.c:1363
+msgid "WiFi scan list"
+msgstr ""
+
+#: ../cli/src/devices.c:1400 ../cli/src/devices.c:1454
+#, c-format
+msgid "Error: Access point with bssid '%s' not found."
+msgstr "Virhe: Tukiasemaa bssid:llä '%s' ei löytynyt."
+
+#: ../cli/src/devices.c:1417
+#, c-format
+msgid "Error: Device '%s' is not a WiFi device."
+msgstr ""
+
+#: ../cli/src/devices.c:1481
+#, c-format
+msgid "Error: 'dev wifi' command '%s' is not valid."
+msgstr ""
+
+#: ../cli/src/devices.c:1557
+#, c-format
+msgid "Error: 'dev wimax': %s"
+msgstr ""
+
+#: ../cli/src/devices.c:1559
+#, c-format
+msgid "Error: 'dev wimax': %s; allowed fields: %s"
+msgstr ""
+
+#: ../cli/src/devices.c:1582
+msgid "WiMAX NSP list"
+msgstr ""
+
+#: ../cli/src/devices.c:1619
+#, c-format
+msgid "Error: NSP with name '%s' not found."
+msgstr ""
+
+#: ../cli/src/devices.c:1630
+#, c-format
+msgid "Error: Device '%s' is not a WiMAX device."
+msgstr ""
+
+#: ../cli/src/devices.c:1661
+#, c-format
+msgid "Error: Access point with nsp '%s' not found."
+msgstr "Virhe: Tukiasemaa nsp:llä '%s' ei löytynyt."
+
+#: ../cli/src/devices.c:1688
+#, c-format
+msgid "Error: 'dev wimax' command '%s' is not valid."
+msgstr ""
+
+#: ../cli/src/devices.c:1738
+#, c-format
+msgid "Error: 'dev' command '%s' is not valid."
+msgstr ""
+
+#: ../cli/src/network-manager.c:37
+msgid "RUNNING"
+msgstr ""
+
+#. 0
+#: ../cli/src/network-manager.c:38
+msgid "VERSION"
+msgstr ""
+
+#. 2
+#: ../cli/src/network-manager.c:40
+msgid "NET-ENABLED"
+msgstr ""
+
+#. 3
+#: ../cli/src/network-manager.c:41
+msgid "WIFI-HARDWARE"
+msgstr ""
+
+#. 4
+#: ../cli/src/network-manager.c:42
+msgid "WIFI"
+msgstr ""
+
+#. 5
+#: ../cli/src/network-manager.c:43
+msgid "WWAN-HARDWARE"
+msgstr ""
+
+#. 6
+#: ../cli/src/network-manager.c:44
+msgid "WWAN"
+msgstr ""
+
+#. 7
+#: ../cli/src/network-manager.c:45
+msgid "WIMAX-HARDWARE"
+msgstr ""
+
+#. 8
+#: ../cli/src/network-manager.c:46
+msgid "WIMAX"
+msgstr ""
+
+#: ../cli/src/network-manager.c:67
+#, c-format
+msgid ""
+"Usage: nmcli nm { COMMAND | help }\n"
+"\n"
+"  COMMAND := { status | enable | sleep | wifi | wwan | wimax }\n"
+"\n"
+"  COMMAND := { status | enable | sleep | wifi | wwan }\n"
+"\n"
+"  status\n"
+"  enable [true|false]\n"
+"  sleep [true|false]\n"
+"  wifi [on|off]\n"
+"  wwan [on|off]\n"
+"  wimax [on|off]\n"
+"\n"
+msgstr ""
+
+#: ../cli/src/network-manager.c:96
+msgid "asleep"
+msgstr ""
+
+#: ../cli/src/network-manager.c:98
+msgid "connecting"
+msgstr ""
+
+#: ../cli/src/network-manager.c:100
+msgid "connected (local only)"
+msgstr ""
+
+#: ../cli/src/network-manager.c:102
+msgid "connected (site only)"
+msgstr ""
+
+#: ../cli/src/network-manager.c:106
+msgid "disconnecting"
+msgstr ""
+
+#: ../cli/src/network-manager.c:146
+#, c-format
+msgid "Error: 'nm status': %s"
+msgstr ""
+
+#: ../cli/src/network-manager.c:148
+#, c-format
+msgid "Error: 'nm status': %s; allowed fields: %s"
+msgstr ""
+
+#. create NMClient
+#: ../cli/src/network-manager.c:161 ../cli/src/network-manager.c:162
+#: ../cli/src/network-manager.c:163 ../cli/src/network-manager.c:164
+#: ../cli/src/network-manager.c:165 ../cli/src/network-manager.c:167
+#: ../cli/src/network-manager.c:168 ../cli/src/network-manager.c:289
+#: ../cli/src/network-manager.c:344 ../cli/src/network-manager.c:382
+#: ../cli/src/network-manager.c:421
+msgid "enabled"
+msgstr ""
+
+#: ../cli/src/network-manager.c:161 ../cli/src/network-manager.c:162
+#: ../cli/src/network-manager.c:163 ../cli/src/network-manager.c:164
+#: ../cli/src/network-manager.c:165 ../cli/src/network-manager.c:167
+#: ../cli/src/network-manager.c:168 ../cli/src/network-manager.c:289
+#: ../cli/src/network-manager.c:344 ../cli/src/network-manager.c:382
+#: ../cli/src/network-manager.c:421
+msgid "disabled"
+msgstr ""
+
+#: ../cli/src/network-manager.c:181
+msgid "NetworkManager status"
+msgstr ""
+
+#. Print header
+#: ../cli/src/network-manager.c:184
+msgid "running"
+msgstr ""
+
+#: ../cli/src/network-manager.c:184
+msgid "not running"
+msgstr ""
+
+#: ../cli/src/network-manager.c:215 ../cli/src/utils.c:323
+#, c-format
+msgid "Error: Couldn't connect to system bus: %s"
+msgstr ""
+
+#: ../cli/src/network-manager.c:226
+#, c-format
+msgid "Error: Couldn't create D-Bus object proxy."
+msgstr ""
+
+#: ../cli/src/network-manager.c:232
+#, c-format
+msgid "Error in sleep: %s"
+msgstr ""
+
+#: ../cli/src/network-manager.c:276 ../cli/src/network-manager.c:331
+#: ../cli/src/network-manager.c:369 ../cli/src/network-manager.c:408
+#, c-format
+msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
+msgstr ""
+
+#: ../cli/src/network-manager.c:284
+msgid "Networking enabled"
+msgstr ""
+
+#: ../cli/src/network-manager.c:300
+#, c-format
+msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
+msgstr ""
+
+#: ../cli/src/network-manager.c:310
+#, c-format
+msgid "Error: Sleeping status is not exported by NetworkManager."
+msgstr ""
+
+#: ../cli/src/network-manager.c:318
+#, c-format
+msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
+msgstr ""
+
+#: ../cli/src/network-manager.c:339
+msgid "WiFi enabled"
+msgstr ""
+
+#: ../cli/src/network-manager.c:355
+#, c-format
+msgid "Error: invalid 'wifi' parameter: '%s'."
+msgstr ""
+
+#: ../cli/src/network-manager.c:377
+msgid "WWAN enabled"
+msgstr ""
+
+#: ../cli/src/network-manager.c:393
+#, c-format
+msgid "Error: invalid 'wwan' parameter: '%s'."
+msgstr ""
+
+#: ../cli/src/network-manager.c:416
+msgid "WiMAX enabled"
+msgstr ""
+
+#: ../cli/src/network-manager.c:432
+#, c-format
+msgid "Error: invalid 'wimax' parameter: '%s'."
+msgstr ""
+
+#: ../cli/src/network-manager.c:445
+#, c-format
+msgid "Error: 'nm' command '%s' is not valid."
+msgstr ""
+
+#: ../cli/src/nmcli.c:64
+#, c-format
+msgid ""
+"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
+"\n"
+"OPTIONS\n"
+"  -t[erse]                                   terse output\n"
+"  -p[retty]                                  pretty output\n"
+"  -m[ode] tabular|multiline                  output mode\n"
+"  -f[ields] <field1,field2,...>|all|common   specify fields to output\n"
+"  -e[scape] yes|no                           escape columns separators in "
+"values\n"
+"  -n[ocheck]                                 don't check nmcli and "
+"NetworkManager versions\n"
+"  -v[ersion]                                 show program version\n"
+"  -h[elp]                                    print this help\n"
+"\n"
+"OBJECT\n"
+"  nm          NetworkManager status\n"
+"  con         NetworkManager connections\n"
+"  dev         devices managed by NetworkManager\n"
+"\n"
+msgstr ""
+
+#: ../cli/src/nmcli.c:109
+#, c-format
+msgid "Error: Object '%s' is unknown, try 'nmcli help'."
+msgstr ""
+
+#: ../cli/src/nmcli.c:139
+#, c-format
+msgid "Error: Option '--terse' is specified the second time."
+msgstr ""
+
+#: ../cli/src/nmcli.c:144
+#, c-format
+msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
+msgstr ""
+
+#: ../cli/src/nmcli.c:152
+#, c-format
+msgid "Error: Option '--pretty' is specified the second time."
+msgstr ""
+
+#: ../cli/src/nmcli.c:157
+#, c-format
+msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
+msgstr ""
+
+#: ../cli/src/nmcli.c:167 ../cli/src/nmcli.c:183
+#, c-format
+msgid "Error: missing argument for '%s' option."
+msgstr ""
+
+#: ../cli/src/nmcli.c:176 ../cli/src/nmcli.c:192
+#, c-format
+msgid "Error: '%s' is not valid argument for '%s' option."
+msgstr ""
+
+#: ../cli/src/nmcli.c:199
+#, c-format
+msgid "Error: fields for '%s' options are missing."
+msgstr ""
+
+#: ../cli/src/nmcli.c:207
+#, c-format
+msgid "nmcli tool, version %s\n"
+msgstr ""
+
+#: ../cli/src/nmcli.c:213
+#, c-format
+msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
+msgstr ""
+
+#: ../cli/src/nmcli.c:232
+#, c-format
+msgid "Caught signal %d, shutting down..."
+msgstr ""
+
+#: ../cli/src/nmcli.c:257
+msgid "Error: Could not create NMClient object."
+msgstr ""
+
+#: ../cli/src/nmcli.c:273
+msgid "Success"
+msgstr ""
+
+#: ../cli/src/settings.c:447
+#, c-format
+msgid "%d (hex-ascii-key)"
+msgstr ""
+
+#: ../cli/src/settings.c:449
+#, c-format
+msgid "%d (104/128-bit passphrase)"
+msgstr ""
+
+#: ../cli/src/settings.c:452
+#, c-format
+msgid "%d (unknown)"
+msgstr "%d (tuntematon)"
+
+#: ../cli/src/settings.c:478
+msgid "0 (unknown)"
+msgstr "0 (tuntematon)"
+
+#: ../cli/src/settings.c:484
+msgid "any, "
+msgstr ""
+
+#: ../cli/src/settings.c:486
+msgid "900 MHz, "
+msgstr "900 MHz, "
+
+#: ../cli/src/settings.c:488
+msgid "1800 MHz, "
+msgstr "1800 MHz, "
+
+#: ../cli/src/settings.c:490
+msgid "1900 MHz, "
+msgstr "1900 MHz, "
+
+#: ../cli/src/settings.c:492
+msgid "850 MHz, "
+msgstr "850 MHz, "
+
+#: ../cli/src/settings.c:494
+msgid "WCDMA 3GPP UMTS 2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 2100 MHz, "
+
+#: ../cli/src/settings.c:496
+msgid "WCDMA 3GPP UMTS 1800 MHz, "
+msgstr "WCDMA 3GPP UMTS 1800 MHz, "
+
+#: ../cli/src/settings.c:498
+msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
+
+#: ../cli/src/settings.c:500
+msgid "WCDMA 3GPP UMTS 800 MHz, "
+msgstr "WCDMA 3GPP UMTS 800 MHz, "
+
+#: ../cli/src/settings.c:502
+msgid "WCDMA 3GPP UMTS 850 MHz, "
+msgstr "WCDMA 3GPP UMTS 850 MHz, "
+
+#: ../cli/src/settings.c:504
+msgid "WCDMA 3GPP UMTS 900 MHz, "
+msgstr "WCDMA 3GPP UMTS 900 MHz, "
+
+#: ../cli/src/settings.c:506
+msgid "WCDMA 3GPP UMTS 1700 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700 MHz, "
+
+#: ../cli/src/settings.c:508
+msgid "WCDMA 3GPP UMTS 1900 MHz, "
+msgstr "WCDMA 3GPP UMTS 1900 MHz, "
+
+#: ../cli/src/settings.c:510
+msgid "WCDMA 3GPP UMTS 2600 MHz, "
+msgstr "WCDMA 3GPP UMTS 2100 MHz, "
+
+#: ../cli/src/settings.c:636 ../cli/src/settings.c:835
+msgid "auto"
+msgstr "auto"
+
+#: ../cli/src/settings.c:829 ../cli/src/settings.c:832
+#: ../cli/src/settings.c:833 ../cli/src/utils.c:176
+msgid "not set"
+msgstr "ei asetettu"
+
+#: ../cli/src/utils.c:128
+#, c-format
+msgid "field '%s' has to be alone"
+msgstr ""
+
+#: ../cli/src/utils.c:131
+#, c-format
+msgid "invalid field '%s'"
+msgstr ""
+
+#: ../cli/src/utils.c:150
+#, c-format
+msgid "Option '--terse' requires specifying '--fields'"
+msgstr ""
+
+#: ../cli/src/utils.c:154
+#, c-format
+msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
+msgstr ""
+
+#: ../cli/src/utils.c:334
+#, c-format
+msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"
+msgstr ""
+
+#: ../cli/src/utils.c:342
+#, c-format
+msgid "Error: NameHasOwner request failed: %s"
+msgstr ""
+
+#: ../cli/src/utils.c:387
+#, c-format
+msgid ""
+"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
+"nocheck to suppress the warning.\n"
+msgstr ""
+
+#: ../cli/src/utils.c:396
+#, c-format
+msgid ""
+"Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force "
+"execution using --nocheck, but the results are unpredictable."
+msgstr ""
+
+#: ../libnm-util/crypto.c:133
 #, c-format
 msgid "PEM key file had no end tag '%s'."
 msgstr "PEM-avaintiedostossa ei ole loppumerkkiä \"%s\"."
 
-#: ../libnm-util/crypto.c:130
+#: ../libnm-util/crypto.c:146
 #, c-format
 msgid "Doesn't look like a PEM private key file."
 msgstr "Tämä ei näytä PEM-muotoiselta salaisen avaimen tiedostolta."
 
-#: ../libnm-util/crypto.c:138
+#: ../libnm-util/crypto.c:154
 #, c-format
 msgid "Not enough memory to store PEM file data."
 msgstr "Muisti ei riitä PEM-tiedoston sisällön tallentamiseen."
 
-#: ../libnm-util/crypto.c:154
+#: ../libnm-util/crypto.c:170
 #, c-format
 msgid "Malformed PEM file: Proc-Type was not first tag."
 msgstr "Virheellinen PEM-tiedosto: ensimmäinen merkintä ei ollut Proc-Type."
 
-#: ../libnm-util/crypto.c:162
+#: ../libnm-util/crypto.c:178
 #, c-format
 msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
 msgstr "Virheellinen PEM-tiedosto: tuntematon Proc-Type-merkintä \"%s\"."
 
-#: ../libnm-util/crypto.c:172
+#: ../libnm-util/crypto.c:188
 #, c-format
 msgid "Malformed PEM file: DEK-Info was not the second tag."
 msgstr "Virheellinen PEM-tiedosto: DEK-Info ei ollut toinen merkintä."
 
-#: ../libnm-util/crypto.c:183
+#: ../libnm-util/crypto.c:199
 #, c-format
 msgid "Malformed PEM file: no IV found in DEK-Info tag."
 msgstr "Virheellinen PEM-tiedosto: alustusvektoria ei löytynyt DEK-Infosta."
 
-#: ../libnm-util/crypto.c:190
+#: ../libnm-util/crypto.c:206
 #, c-format
 msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
 msgstr "Virheellinen PEM-tiedosto: alustusvektori DEK-Infossa on virheellinen."
 
-#: ../libnm-util/crypto.c:203
+#: ../libnm-util/crypto.c:219
 #, c-format
 msgid "Malformed PEM file: unknown private key cipher '%s'."
 msgstr "Virheellinen PEM-tiedosto: tuntematon salaisen avaimen sifferi \"%s\"."
 
-#: ../libnm-util/crypto.c:222
+#: ../libnm-util/crypto.c:238
 #, c-format
 msgid "Could not decode private key."
 msgstr "Salaista avainta ei voitu purkaa."
 
-#: ../libnm-util/crypto.c:267
-#, c-format
-msgid "PEM certificate '%s' had no end tag '%s'."
-msgstr "PEM-varmenne \"%s\" ei sisällä päätösmerkkiä \"%s\"."
+#: ../libnm-util/crypto.c:284
+msgid "Failed to find expected PKCS#8 start tag."
+msgstr ""
 
-#: ../libnm-util/crypto.c:277
+#: ../libnm-util/crypto.c:292
 #, c-format
-msgid "Failed to decode certificate."
-msgstr "Varmennetta ei voitu purkaa."
+msgid "Failed to find expected PKCS#8 end tag '%s'."
+msgstr ""
+
+#: ../libnm-util/crypto.c:312
+msgid "Not enough memory to store private key data."
+msgstr ""
 
-#: ../libnm-util/crypto.c:286
+#: ../libnm-util/crypto.c:317
+msgid "Failed to decode PKCS#8 private key."
+msgstr ""
+
+#: ../libnm-util/crypto.c:339 ../libnm-util/crypto.c:625
 #, c-format
 msgid "Not enough memory to store certificate data."
 msgstr "Muisti ei riitä varmenteen tietojen tallennukseen."
 
-#: ../libnm-util/crypto.c:294
-#, c-format
-msgid "Not enough memory to store file data."
-msgstr "Muisti ei riitä tiedoston sisällön tallentamiseen."
-
-#: ../libnm-util/crypto.c:324
+#: ../libnm-util/crypto.c:365
 #, c-format
 msgid "IV must be an even number of bytes in length."
 msgstr "Alustusvektorin täytyy olla parillisen tavumäärän pituinen."
 
-#: ../libnm-util/crypto.c:333
+#: ../libnm-util/crypto.c:374
 #, c-format
 msgid "Not enough memory to store the IV."
 msgstr "Muisti ei riitä alustusvektorin tallennukseen."
 
-#: ../libnm-util/crypto.c:344
+#: ../libnm-util/crypto.c:385
 #, c-format
 msgid "IV contains non-hexadecimal digits."
 msgstr "Alustusvektori sisältää muita kuin heksadesimaalisia merkkejä."
 
-#: ../libnm-util/crypto.c:382 ../libnm-util/crypto_gnutls.c:143
-#: ../libnm-util/crypto_nss.c:169
+#: ../libnm-util/crypto.c:423 ../libnm-util/crypto_gnutls.c:147
+#: ../libnm-util/crypto_gnutls.c:265 ../libnm-util/crypto_nss.c:167
+#: ../libnm-util/crypto_nss.c:332
 #, c-format
 msgid "Private key cipher '%s' was unknown."
 msgstr "Salaisen avaimen sifferi \"%s\" oli tuntematon."
 
-#: ../libnm-util/crypto.c:391
+#: ../libnm-util/crypto.c:432
 #, c-format
 msgid "Not enough memory to decrypt private key."
 msgstr "Muisti ei riitä salaisen avaimen purkamiseen."
 
-#: ../libnm-util/crypto.c:511
+#: ../libnm-util/crypto.c:497
+#, c-format
+msgid "Not enough memory to store decrypted private key."
+msgstr "Muisti ei riitä puretun salaisen avaimen tallennukseen."
+
+#: ../libnm-util/crypto.c:542
 #, c-format
 msgid "Unable to determine private key type."
 msgstr "Salaisen avaimen tyyppiä ei voi selvittää."
 
-#: ../libnm-util/crypto.c:530
+#: ../libnm-util/crypto.c:597
 #, c-format
-msgid "Not enough memory to store decrypted private key."
-msgstr "Muisti ei riitä puretun salaisen avaimen tallennukseen."
+msgid "PEM certificate had no start tag '%s'."
+msgstr ""
 
-#: ../libnm-util/crypto_gnutls.c:46
+#: ../libnm-util/crypto.c:606
+#, c-format
+msgid "PEM certificate had no end tag '%s'."
+msgstr ""
+
+#: ../libnm-util/crypto.c:630
+#, c-format
+msgid "Failed to decode certificate."
+msgstr "Varmennetta ei voitu purkaa."
+
+#: ../libnm-util/crypto_gnutls.c:50
 msgid "Failed to initialize the crypto engine."
 msgstr "Salausmoottoria ei voitu alustaa."
 
-#: ../libnm-util/crypto_gnutls.c:90
+#: ../libnm-util/crypto_gnutls.c:92
 #, c-format
 msgid "Failed to initialize the MD5 engine: %s / %s."
-msgstr "MD5-moottoria ei voitu alustaa: %s / %s."
+msgstr "MD5-moottorin alustus epäonnistui: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:155
+#, c-format
+msgid "Invalid IV length (must be at least %zd)."
+msgstr "Alustusvektorin pituus ei kelpaa (täytyy olla vähintään %zd)"
 
-#: ../libnm-util/crypto_gnutls.c:152 ../libnm-util/crypto_nss.c:178
+#: ../libnm-util/crypto_gnutls.c:164 ../libnm-util/crypto_nss.c:184
 #, c-format
 msgid "Not enough memory for decrypted key buffer."
 msgstr "Muisti ei riitä puretulle avainpuskurille."
 
-#: ../libnm-util/crypto_gnutls.c:160
+#: ../libnm-util/crypto_gnutls.c:172
 #, c-format
 msgid "Failed to initialize the decryption cipher context: %s / %s."
 msgstr "Virhe alustettaessa purkusifferin kontekstia: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:169
+#: ../libnm-util/crypto_gnutls.c:181
 #, c-format
 msgid "Failed to set symmetric key for decryption: %s / %s."
 msgstr "Virhe asetettaessa symmetristä salausavainta: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:178
+#: ../libnm-util/crypto_gnutls.c:190
 #, c-format
 msgid "Failed to set IV for decryption: %s / %s."
 msgstr "Alustusvektoria purkua varten ei voitu alustaa: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:187
+#: ../libnm-util/crypto_gnutls.c:199
 #, c-format
 msgid "Failed to decrypt the private key: %s / %s."
 msgstr "Salaista avainta ei voitu purkaa: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:200
+#: ../libnm-util/crypto_gnutls.c:209 ../libnm-util/crypto_nss.c:263
+#, c-format
+msgid "Failed to decrypt the private key: unexpected padding length."
+msgstr "Henkilökohtaisen avaimen purku epäonnistui: odottamaton täytepituus."
+
+#: ../libnm-util/crypto_gnutls.c:220 ../libnm-util/crypto_nss.c:274
 #, c-format
 msgid "Failed to decrypt the private key."
 msgstr "Salaisen avaimen purku epäonnistui."
 
-#: ../libnm-util/crypto_gnutls.c:235
+#: ../libnm-util/crypto_gnutls.c:285 ../libnm-util/crypto_nss.c:352
+#, c-format
+msgid "Could not allocate memory for encrypting."
+msgstr "Muistin varaus salausta varten ei onnistunut."
+
+#: ../libnm-util/crypto_gnutls.c:293
+#, c-format
+msgid "Failed to initialize the encryption cipher context: %s / %s."
+msgstr "Salauksen sisällön alustus epäonnistui: %s / %s"
+
+#: ../libnm-util/crypto_gnutls.c:302
+#, c-format
+msgid "Failed to set symmetric key for encryption: %s / %s."
+msgstr "Virhe asetettaessa salauksen symmetristä avainta: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:312
+#, c-format
+msgid "Failed to set IV for encryption: %s / %s."
+msgstr "Salauksen alustusvektorin asettaminen epäonnistui: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:321
+#, c-format
+msgid "Failed to encrypt the data: %s / %s."
+msgstr "Virhe tietojen salaamisessa: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:361
 #, c-format
 msgid "Error initializing certificate data: %s"
 msgstr "Virhe alustettaessa varmenteen tietoja: %s"
 
-#: ../libnm-util/crypto_gnutls.c:257
+#: ../libnm-util/crypto_gnutls.c:383
 #, c-format
 msgid "Couldn't decode certificate: %s"
 msgstr "Varmennetta ei voitu purkaa: %s"
 
-#: ../libnm-util/crypto_gnutls.c:281
+#: ../libnm-util/crypto_gnutls.c:407
 #, c-format
 msgid "Couldn't initialize PKCS#12 decoder: %s"
 msgstr "PKCS#12-tulkkia ei voitu alustaa: %s"
 
-#: ../libnm-util/crypto_gnutls.c:294
+#: ../libnm-util/crypto_gnutls.c:420
 #, c-format
 msgid "Couldn't decode PKCS#12 file: %s"
 msgstr "PKCS#12-tiedostoa ei voitu purkaa: %s"
 
-#: ../libnm-util/crypto_gnutls.c:306
+#: ../libnm-util/crypto_gnutls.c:432
 #, c-format
 msgid "Couldn't verify PKCS#12 file: %s"
 msgstr "PKCS#12-tiedostoa ei voitu varmentaa: %s"
 
-#: ../libnm-util/crypto_nss.c:57
+#: ../libnm-util/crypto_gnutls.c:460
+#, c-format
+msgid "Couldn't initialize PKCS#8 decoder: %s"
+msgstr ""
+
+#: ../libnm-util/crypto_gnutls.c:483
+#, c-format
+msgid "Couldn't decode PKCS#8 file: %s"
+msgstr ""
+
+#: ../libnm-util/crypto_nss.c:56
 #, c-format
 msgid "Failed to initialize the crypto engine: %d."
 msgstr "Salausmoottoria ei voitu alustaa: %d."
 
-#: ../libnm-util/crypto_nss.c:111
+#: ../libnm-util/crypto_nss.c:107
 #, c-format
 msgid "Failed to initialize the MD5 context: %d."
 msgstr "MD5-kontekstia ei voitu alustaa: %d."
 
-#: ../libnm-util/crypto_nss.c:186
+#: ../libnm-util/crypto_nss.c:175
+#, c-format
+msgid "Invalid IV length (must be at least %d)."
+msgstr "Alustusvektorin pituus ei kelpaa (täytyy olla vähintään %d)."
+
+#: ../libnm-util/crypto_nss.c:192
 #, c-format
 msgid "Failed to initialize the decryption cipher slot."
 msgstr "Salausmenetelmän lohkoa ei voitu alustaa."
 
-#: ../libnm-util/crypto_nss.c:196
+#: ../libnm-util/crypto_nss.c:202
 #, c-format
 msgid "Failed to set symmetric key for decryption."
 msgstr "Symmetristä salausavainta ei voitu asettaa."
 
-#: ../libnm-util/crypto_nss.c:206
+#: ../libnm-util/crypto_nss.c:212
 #, c-format
 msgid "Failed to set IV for decryption."
 msgstr "Salauksen purun aloitusvektorin asetus epäonnistui."
 
-#: ../libnm-util/crypto_nss.c:214
+#: ../libnm-util/crypto_nss.c:220
 #, c-format
 msgid "Failed to initialize the decryption context."
 msgstr "Salauksen purun kontekstia ei voitu alustaa."
 
-#: ../libnm-util/crypto_nss.c:227
+#: ../libnm-util/crypto_nss.c:233
 #, c-format
 msgid "Failed to decrypt the private key: %d."
-msgstr "Salaista avainta ei voitu purkaa: %d."
+msgstr "Salaisen avaimen purku epäonnistui: %d"
 
-#: ../libnm-util/crypto_nss.c:239
+#: ../libnm-util/crypto_nss.c:241
+#, c-format
+msgid "Failed to decrypt the private key: decrypted data too large."
+msgstr ""
+"Henkilökohtaisen avaimen purkaminen ei onnistu: käsiteltävää dataa on liikaa."
+
+#: ../libnm-util/crypto_nss.c:252
 #, c-format
 msgid "Failed to finalize decryption of the private key: %d."
 msgstr "Salaisen avaimen salauksen purkua ei voitu viimeistellä: %d."
 
-#: ../libnm-util/crypto_nss.c:284
+#: ../libnm-util/crypto_nss.c:360
+#, c-format
+msgid "Failed to initialize the encryption cipher slot."
+msgstr "Salausavainpaikan alustus epäonnistui."
+
+#: ../libnm-util/crypto_nss.c:368
+#, c-format
+msgid "Failed to set symmetric key for encryption."
+msgstr "Symmetrisen avaimen asettaminen salausta varten ei onnistunut."
+
+#: ../libnm-util/crypto_nss.c:376
+#, c-format
+msgid "Failed to set IV for encryption."
+msgstr "Salauksen alustusvektorin asettaminen epäonnistui."
+
+#: ../libnm-util/crypto_nss.c:384
+#, c-format
+msgid "Failed to initialize the encryption context."
+msgstr "Salauskontekstin alustus epäonnistui."
+
+#: ../libnm-util/crypto_nss.c:392
+#, c-format
+msgid "Failed to encrypt: %d."
+msgstr "Virhe salauksessa: %d."
+
+#: ../libnm-util/crypto_nss.c:400
+#, c-format
+msgid "Unexpected amount of data after encrypting."
+msgstr "Odottamaton määrä tietoa salauksen jälkeen."
+
+#: ../libnm-util/crypto_nss.c:443
 #, c-format
 msgid "Couldn't decode certificate: %d"
 msgstr "Varmennetta ei voitu tulkita: %d"
 
-#: ../libnm-util/crypto_nss.c:319
+#: ../libnm-util/crypto_nss.c:478
 #, c-format
 msgid "Couldn't convert password to UCS2: %d"
 msgstr "Salasanaa ei voitu muuntaa UCS2-muotoon: %d"
 
-#: ../libnm-util/crypto_nss.c:347
+#: ../libnm-util/crypto_nss.c:506
 #, c-format
 msgid "Couldn't initialize PKCS#12 decoder: %d"
 msgstr "PKCS#12-tulkkia ei voitu alustaa: %d"
 
-#: ../libnm-util/crypto_nss.c:356
+#: ../libnm-util/crypto_nss.c:515
 #, c-format
 msgid "Couldn't decode PKCS#12 file: %d"
 msgstr "PKCS#12-tiedostoa ei voitu tulkita: %d"
 
-#: ../libnm-util/crypto_nss.c:365
+#: ../libnm-util/crypto_nss.c:524
 #, c-format
 msgid "Couldn't verify PKCS#12 file: %d"
 msgstr "PKCS#12-tiedostoa ei voitu varmistaa: %d"
 
-#: ../src/nm-netlink-monitor.c:194 ../src/nm-netlink-monitor.c:454
-#, c-format
-msgid "error processing netlink message: %s"
-msgstr "virhe käsiteltäessä netlink-viestiä: %s"
+#: ../libnm-util/crypto_nss.c:568
+msgid "Could not generate random data."
+msgstr "Ei voitu tuottaa satunnaista dataa."
 
-#: ../src/nm-netlink-monitor.c:251
+#: ../libnm-util/nm-utils.c:2000
 #, c-format
-msgid "unable to allocate netlink handle for monitoring link status: %s"
-msgstr "ei voitu varata netlink-kahvaa linkin tilan tarkkailulle: %s"
+msgid "Not enough memory to make encryption key."
+msgstr "Ei tarpeeksi muistia salausavaimen luomiseksi."
+
+#: ../libnm-util/nm-utils.c:2110
+msgid "Could not allocate memory for PEM file creation."
+msgstr "Muistin varaus PEM-tiedoston luontia varten ei onnistunut."
 
-#: ../src/nm-netlink-monitor.c:261
+#: ../libnm-util/nm-utils.c:2122
 #, c-format
-msgid "unable to connect to netlink for monitoring link status: %s"
+msgid "Could not allocate memory for writing IV to PEM file."
 msgstr ""
-"ei voitu yhdistää netlink-pistokkeeseen linkin tilan tarkkailua varten: %s"
+"Muistinvaraus epäonnistui kirjoitettaessa alustusvektoria PEM-tiedostoon."
 
-#: ../src/nm-netlink-monitor.c:269
+#: ../libnm-util/nm-utils.c:2134
 #, c-format
-msgid "unable to join netlink group for monitoring link status: %s"
-msgstr "ei voit liittyä netlink-ryhmään linkin tilan tarkkailua varten: %s"
+msgid "Could not allocate memory for writing encrypted key to PEM file."
+msgstr ""
+"Muistinvaraus epäonnistui kirjoitettaessa salattua avainta PEM-tiedostoon."
 
-#: ../src/nm-netlink-monitor.c:277
+#: ../libnm-util/nm-utils.c:2153
 #, c-format
-msgid "unable to allocate netlink link cache for monitoring link status: %s"
+msgid "Could not allocate memory for PEM file data."
+msgstr "Muistinvaraus PEM-tiedoston luomiseksi epäonnistui."
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
+msgid "Allow control of network connections"
 msgstr ""
-"ei voitu varata netlink-linkin välimuistia inkin tilan tarkkailua varten %s"
 
-#: ../src/nm-netlink-monitor.c:418
-#, c-format
-msgid "error updating link cache: %s"
-msgstr "virhe päivitettäessä linkkivälimuistia: %s"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2
+msgid "Connection sharing via a protected WiFi network"
+msgstr "Yhteyden jakaminen suojatun langattoman verkon kautta"
 
-#: ../src/nm-netlink-monitor.c:484
-msgid "error occurred while waiting for data on socket"
-msgstr "virhe odotettaessa tietoja pistokkeesta"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
+msgid "Connection sharing via an open WiFi network"
+msgstr "Yhteyden jakaminen avoimen langattoman verkon kautta"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
+msgid "Enable or disable WiFi devices"
+msgstr ""
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+msgid "Enable or disable WiMAX mobile broadband devices"
+msgstr ""
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
+msgid "Enable or disable mobile broadband devices"
+msgstr ""
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
+msgid "Enable or disable system networking"
+msgstr ""
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
+msgid "Modify network connections for all users"
+msgstr ""
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
+msgid "Modify persistent system hostname"
+msgstr "Muuta järjestelmän verkkonimeä"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
+msgid "Modify personal network connections"
+msgstr ""
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
+msgid ""
+"Put NetworkManager to sleep or wake it up (should only be used by system "
+"power management)"
+msgstr ""
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
+msgid "System policy prevents control of network connections"
+msgstr ""
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:13
+msgid "System policy prevents enabling or disabling WiFi devices"
+msgstr ""
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:14
+msgid ""
+"System policy prevents enabling or disabling WiMAX mobile broadband devices"
+msgstr ""
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:15
+msgid "System policy prevents enabling or disabling mobile broadband devices"
+msgstr ""
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:16
+msgid "System policy prevents enabling or disabling system networking"
+msgstr ""
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:17
+msgid "System policy prevents modification of network settings for all users"
+msgstr ""
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:18
+msgid "System policy prevents modification of personal network settings"
+msgstr ""
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:19
+msgid "System policy prevents modification of the persistent system hostname"
+msgstr "Tietoturvakäytäntö estää tietokoneen nimen muuttamisen"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:20
+msgid "System policy prevents putting NetworkManager to sleep or waking it up"
+msgstr ""
 
-#: ../src/NetworkManager.c:293
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:21
+msgid "System policy prevents sharing connections via a protected WiFi network"
+msgstr ""
+"Tietoturvakäytäntö estää yhteyksien jakamisen suojatun langattoman verkon "
+"kautta"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:22
+msgid "System policy prevents sharing connections via an open WiFi network"
+msgstr ""
+"Tietoturvakäytäntö estää yhteyksien jakamisen avoimen langattoman verkon "
+"kautta"
+
+#: ../src/main.c:530
 #, c-format
 msgid "Invalid option.  Please use --help to see a list of valid options.\n"
 msgstr ""
 "Virheellinen valitsin: Antamalla --help näet luettelon kelvollisista\n"
 "valitsimista.\n"
 
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:88
+#: ../src/main.c:611
+#, c-format
+msgid "%s.  Please use --help to see a list of valid options.\n"
+msgstr ""
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:62
 msgid "# Created by NetworkManager\n"
 msgstr "# NetworkManagerin luoma\n"
 
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:94
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:69
 #, c-format
 msgid ""
 "# Merged from %s\n"
@@ -308,21 +1854,160 @@ msgstr ""
 "# Yhdistetty tiedostosta %s\n"
 "\n"
 
-#: ../src/dns-manager/nm-dns-manager.c:256
+#: ../src/dhcp-manager/nm-dhcp-manager.c:284
+msgid "no usable DHCP client could be found."
+msgstr "DHCP-asiakasta ei käytettävissä"
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+msgid "'dhclient' could be found."
+msgstr "'dhclient' ei löydetty."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:303
+msgid "'dhcpcd' could be found."
+msgstr ""
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:311
+#, c-format
+msgid "unsupported DHCP client '%s'"
+msgstr ""
+
+#: ../src/dns-manager/nm-dns-manager.c:376
 msgid "NOTE: the libc resolver may not support more than 3 nameservers."
 msgstr "HUOMAUTUS: libc-nimenselvennys ei ehkä tue kuin kolmea nimipalvelinta."
 
-#: ../src/dns-manager/nm-dns-manager.c:258
+#: ../src/dns-manager/nm-dns-manager.c:378
 msgid "The nameservers listed below may not be recognized."
 msgstr "Alla olevaa nimipalvelinluetteloa ei voitu tunnistaa."
 
-#: ../system-settings/src/main.c:380
+#: ../src/logging/nm-logging.c:149
+#, c-format
+msgid "Unknown log level '%s'"
+msgstr ""
+
+#: ../src/logging/nm-logging.c:174
+#, c-format
+msgid "Unknown log domain '%s'"
+msgstr ""
+
+#: ../src/modem-manager/nm-modem-cdma.c:296 ../src/nm-device-bt.c:355
+#, c-format
+msgid "CDMA connection %d"
+msgstr ""
+
+#: ../src/modem-manager/nm-modem-gsm.c:499 ../src/nm-device-bt.c:351
+#, c-format
+msgid "GSM connection %d"
+msgstr ""
+
+#: ../src/nm-device-bt.c:326
+#, c-format
+msgid "PAN connection %d"
+msgstr ""
+
+#: ../src/nm-device-bt.c:359
+#, c-format
+msgid "DUN connection %d"
+msgstr ""
+
+#: ../src/nm-device-ethernet.c:1724
+#, c-format
+msgid "PPPoE connection %d"
+msgstr ""
+
+#: ../src/nm-device-ethernet.c:1724 ../src/settings/nm-settings-utils.c:50
+#, c-format
+msgid "Wired connection %d"
+msgstr ""
+
+#: ../src/nm-device-olpc-mesh.c:393
 #, c-format
-msgid "Auto %s"
-msgstr "Auto-%s"
+msgid "Mesh %d"
+msgstr ""
+
+#: ../src/nm-manager.c:657
+#, c-format
+msgid "VPN connection %d"
+msgstr ""
+
+#: ../src/nm-netlink-monitor.c:101 ../src/nm-netlink-monitor.c:234
+#: ../src/nm-netlink-monitor.c:667
+#, c-format
+msgid "error processing netlink message: %s"
+msgstr "virhe käsiteltäessä netlink-viestiä: %s"
+
+#: ../src/nm-netlink-monitor.c:216
+msgid "error occurred while waiting for data on socket"
+msgstr "virhe odotettaessa tietoja pistokkeesta"
+
+#: ../src/nm-netlink-monitor.c:260
+#, c-format
+msgid "unable to connect to netlink for monitoring link status: %s"
+msgstr ""
+"ei voitu yhdistää netlink-pistokkeeseen linkin tilan tarkkailua varten: %s"
+
+#: ../src/nm-netlink-monitor.c:271
+#, c-format
+msgid "unable to enable netlink handle credential passing: %s"
+msgstr ""
+
+#: ../src/nm-netlink-monitor.c:297 ../src/nm-netlink-monitor.c:360
+#, c-format
+msgid "unable to allocate netlink handle for monitoring link status: %s"
+msgstr "ei voitu varata netlink-kahvaa linkin tilan tarkkailulle: %s"
+
+#: ../src/nm-netlink-monitor.c:385
+#, c-format
+msgid "unable to allocate netlink link cache for monitoring link status: %s"
+msgstr ""
+"ei voitu varata netlink-linkin välimuistia linkin tilan tarkkailua varten %s"
+
+#: ../src/nm-netlink-monitor.c:512
+#, c-format
+msgid "unable to join netlink group: %s"
+msgstr "Verkkolinkkiryhmään %s ei voida liittyä"
+
+#: ../src/nm-netlink-monitor.c:643 ../src/nm-netlink-monitor.c:656
+#, c-format
+msgid "error updating link cache: %s"
+msgstr "virhe päivitettäessä linkkivälimuistia: %s"
+
+#: ../src/settings/plugins/ifcfg-rh/reader.c:3575
+#: ../src/settings/plugins/ifnet/connection_parser.c:51
+msgid "System"
+msgstr "Järjestelmä"
+
+#~ msgid "Auto %s"
+#~ msgstr "Auto-%s"
+
+#~ msgid "Not enough memory to store file data."
+#~ msgstr "Muisti ei riitä tiedoston sisällön tallentamiseen."
+
+#~ msgid "System policy prevents modification of system settings"
+#~ msgstr "Tietoturvakäytäntö estää järjestelmäasetusten muuttamisen"
+
+#~ msgid "Modify system connections"
+#~ msgstr "Muokkaa järjestelmän yhteyksiä"
+
+#~ msgid "PEM certificate '%s' had no end tag '%s'."
+#~ msgstr "PEM-varmenteessa \"%s\" ei ole lopputunnistetta \"%s\"."
+
+#~ msgid "System connections"
+#~ msgstr "Järjestelmäyhteydet"
+
+#~ msgid "system"
+#~ msgstr "järjestelmä"
+
+#~ msgid "User connections"
+#~ msgstr "Käyttäjän yhteydet"
+
+#~ msgid "DBUS-SERVICE"
+#~ msgstr "DBUS-PALVELU"
+
+#~ msgid "user"
+#~ msgstr "käyttäjä"
 
-#~ msgid "Not enough memory to create private key decryption key."
-#~ msgstr "Muisti ei riitä luomaan salaisen avaimen purkuavainta."
+#~ msgid "SCOPE"
+#~ msgstr "ALUE"
 
-#~ msgid "Auto Wired"
-#~ msgstr "Automaattinen kiinteä"
+#~ msgid "Error: Obtaining active connection for '%s' failed."
+#~ msgstr "Virhe: Aktiivista yhteyttä '%s' ei saatu."
diff --git a/po/gl.po b/po/gl.po
index 62dc71f3..7242f4dd 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -4,978 +4,1244 @@
 #
 # Ignacio Casal Quinteiro <icq@cvs.gnome.org>, 2007, 2008.
 # Miguel Anxo Bouzada <mbouzada@gmail.com>, 2010.
+# Fran Diéguez <frandieguez@gnome.org>, 2011.
+#
 msgid ""
 msgstr ""
 "Project-Id-Version: gl\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-11 21:19+0000\n"
-"PO-Revision-Date: 2010-08-23 00:53+0000\n"
-"Last-Translator: Francisco Diéguez <Unknown>\n"
-"Language-Team: Galego <proxecto@trasno.net>\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=NetworkManager&keywords=I18N+L10N&component=general\n"
+"POT-Creation-Date: 2011-08-24 19:48+0000\n"
+"PO-Revision-Date: 2011-08-25 01:12+0000\n"
+"Last-Translator: Fran Diéguez <Unknown>\n"
+"Language-Team: Galician <gnome-l10n-gl@gnome.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2010-08-23 01:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#: ../cli/src/connections.c:60 ../cli/src/connections.c:75
-#: ../cli/src/devices.c:88 ../cli/src/devices.c:101 ../cli/src/devices.c:111
-#: ../cli/src/devices.c:121 ../cli/src/devices.c:134 ../cli/src/devices.c:145
-#: ../cli/src/devices.c:156 ../cli/src/devices.c:165 ../cli/src/devices.c:174
+
+#: ../cli/src/connections.c:64 ../cli/src/connections.c:78
+#: ../cli/src/devices.c:101 ../cli/src/devices.c:114 ../cli/src/devices.c:124
+#: ../cli/src/devices.c:134 ../cli/src/devices.c:148 ../cli/src/devices.c:162
+#: ../cli/src/devices.c:173 ../cli/src/devices.c:184 ../cli/src/devices.c:193
+#: ../cli/src/devices.c:202 ../cli/src/devices.c:224
 msgid "NAME"
 msgstr "NOME"
 
 #. 0
-#: ../cli/src/connections.c:61 ../cli/src/connections.c:76
+#: ../cli/src/connections.c:65 ../cli/src/connections.c:79
 msgid "UUID"
 msgstr "UUID"
 
 #. 1
-#: ../cli/src/connections.c:62
+#: ../cli/src/connections.c:66
 msgid "DEVICES"
 msgstr "DISPOSITIVOS"
 
 #. 2
-#: ../cli/src/connections.c:63 ../cli/src/connections.c:78
-msgid "SCOPE"
-msgstr "AMBITO"
-
-#. 3
-#: ../cli/src/connections.c:64
+#: ../cli/src/connections.c:67
 msgid "DEFAULT"
 msgstr "PREDEFINIDO"
 
-#. 4
-#: ../cli/src/connections.c:65
-msgid "DBUS-SERVICE"
-msgstr "DBUS-SERVICE"
-
-#. 5
-#: ../cli/src/connections.c:66
+#. 3
+#: ../cli/src/connections.c:68
 msgid "SPEC-OBJECT"
 msgstr "SPEC-OBXECTO"
 
-#. 6
-#: ../cli/src/connections.c:67
+#. 4
+#: ../cli/src/connections.c:69
 msgid "VPN"
 msgstr "VPN"
 
+#. 5
+#. 6
+#. 2
+#. 11
+#. 5
+#: ../cli/src/connections.c:70 ../cli/src/connections.c:85
+#: ../cli/src/devices.c:69 ../cli/src/devices.c:214 ../cli/src/devices.c:230
+msgid "DBUS-PATH"
+msgstr "DBUS-RUTA"
+
 #. 1
 #. 0
 #. 1
-#: ../cli/src/connections.c:77 ../cli/src/devices.c:62 ../cli/src/devices.c:90
+#. 2
+#: ../cli/src/connections.c:80 ../cli/src/devices.c:67
+#: ../cli/src/devices.c:103 ../cli/src/devices.c:227
 msgid "TYPE"
 msgstr "TIPO"
 
-#. 3
-#: ../cli/src/connections.c:79
+#. 2
+#: ../cli/src/connections.c:81
 msgid "TIMESTAMP"
 msgstr "MARCADETEMPO"
 
-#. 4
-#: ../cli/src/connections.c:80
+#. 3
+#: ../cli/src/connections.c:82
 msgid "TIMESTAMP-REAL"
 msgstr "TIMESTAMP-REAL"
 
-#. 5
-#: ../cli/src/connections.c:81
+#. 4
+#: ../cli/src/connections.c:83
 msgid "AUTOCONNECT"
 msgstr "AUTOCONECTAR"
 
-#. 6
-#: ../cli/src/connections.c:82
+#. 5
+#: ../cli/src/connections.c:84
 msgid "READONLY"
 msgstr "SO-LECTURA"
 
-#: ../cli/src/connections.c:158
-#, c-format
+#: ../cli/src/connections.c:167
+#, c-format
+#| msgid ""
+#| "Usage: nmcli con { COMMAND | help }\n"
+#| "  COMMAND := { list | status | up | down }\n"
+#| "\n"
+#| "  list [id <id> | uuid <id> | system | user]\n"
+#| "  status\n"
+#| "  up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--"
+#| "timeout <timeout>]\n"
+#| "  down id <id> | uuid <id>\n"
 msgid ""
 "Usage: nmcli con { COMMAND | help }\n"
 "  COMMAND := { list | status | up | down }\n"
 "\n"
-"  list [id <id> | uuid <id> | system | user]\n"
+"  list [id <id> | uuid <id>]\n"
 "  status\n"
+"  up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [nsp <name>] [--"
+"nowait] [--timeout <timeout>]\n"
 "  up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout "
 "<timeout>]\n"
 "  down id <id> | uuid <id>\n"
 msgstr ""
-"Uso: nmcli con { ORDE | help }\n"
-"  ORDE := { list | status | up | down }\n"
+"Uso: nmcli con { COMANDO | help }\n"
+"  COMANDO := { list | status | up | down }\n"
 "\n"
-"  list [id <id> | uuid <id> | system | user]\n"
+"  list [id <id> | uuid <id>]\n"
 "  status\n"
-"  up id <id> | uuid <id> [iface <interface>] [ap <hwaddr>] [--nowait] [--"
-"timeout <timeout>]\n"
+"  up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [nsp <name>] [--"
+"nowait] [--timeout <timeout>]\n"
+"  up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout "
+"<timeout>]\n"
 "  down id <id> | uuid <id>\n"
 
-#: ../cli/src/connections.c:198 ../cli/src/connections.c:537
+#: ../cli/src/connections.c:220 ../cli/src/connections.c:544
 #, c-format
 msgid "Error: 'con list': %s"
 msgstr "Erro: 'con list': %s"
 
-#: ../cli/src/connections.c:200 ../cli/src/connections.c:539
+#: ../cli/src/connections.c:222 ../cli/src/connections.c:546
 #, c-format
 msgid "Error: 'con list': %s; allowed fields: %s"
 msgstr "Erro: 'con list': %s; campos permitidos: %s"
 
-#: ../cli/src/connections.c:208
+#: ../cli/src/connections.c:230
 msgid "Connection details"
 msgstr "Detalles da conexión"
 
-#: ../cli/src/connections.c:382 ../cli/src/connections.c:602
-msgid "system"
-msgstr "sistema"
-
-#: ../cli/src/connections.c:382 ../cli/src/connections.c:602
-msgid "user"
-msgstr "usuario"
-
-#: ../cli/src/connections.c:384
+#: ../cli/src/connections.c:419
 msgid "never"
 msgstr "nunca"
 
 #. "CAPABILITIES"
 #. Print header
 #. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:385 ../cli/src/connections.c:386
-#: ../cli/src/connections.c:603 ../cli/src/connections.c:606
-#: ../cli/src/devices.c:432 ../cli/src/devices.c:557 ../cli/src/devices.c:583
-#: ../cli/src/devices.c:584 ../cli/src/devices.c:585 ../cli/src/devices.c:586
-#: ../cli/src/devices.c:587 ../cli/src/settings.c:508
-#: ../cli/src/settings.c:551 ../cli/src/settings.c:652
-#: ../cli/src/settings.c:926 ../cli/src/settings.c:927
-#: ../cli/src/settings.c:929 ../cli/src/settings.c:931
-#: ../cli/src/settings.c:1056 ../cli/src/settings.c:1057
-#: ../cli/src/settings.c:1058 ../cli/src/settings.c:1137
-#: ../cli/src/settings.c:1138 ../cli/src/settings.c:1139
-#: ../cli/src/settings.c:1140 ../cli/src/settings.c:1141
-#: ../cli/src/settings.c:1142 ../cli/src/settings.c:1143
-#: ../cli/src/settings.c:1144 ../cli/src/settings.c:1145
-#: ../cli/src/settings.c:1146 ../cli/src/settings.c:1147
-#: ../cli/src/settings.c:1148 ../cli/src/settings.c:1149
-#: ../cli/src/settings.c:1224
+#: ../cli/src/connections.c:420 ../cli/src/connections.c:421
+#: ../cli/src/connections.c:599 ../cli/src/connections.c:601
+#: ../cli/src/devices.c:509 ../cli/src/devices.c:562 ../cli/src/devices.c:687
+#: ../cli/src/devices.c:713 ../cli/src/devices.c:714 ../cli/src/devices.c:715
+#: ../cli/src/devices.c:716 ../cli/src/devices.c:717 ../cli/src/settings.c:520
+#: ../cli/src/settings.c:563 ../cli/src/settings.c:663
+#: ../cli/src/settings.c:937 ../cli/src/settings.c:938
+#: ../cli/src/settings.c:940 ../cli/src/settings.c:942
+#: ../cli/src/settings.c:1067 ../cli/src/settings.c:1068
+#: ../cli/src/settings.c:1069 ../cli/src/settings.c:1148
+#: ../cli/src/settings.c:1149 ../cli/src/settings.c:1150
+#: ../cli/src/settings.c:1151 ../cli/src/settings.c:1152
+#: ../cli/src/settings.c:1153 ../cli/src/settings.c:1154
+#: ../cli/src/settings.c:1155 ../cli/src/settings.c:1156
+#: ../cli/src/settings.c:1157 ../cli/src/settings.c:1158
+#: ../cli/src/settings.c:1159 ../cli/src/settings.c:1160
+#: ../cli/src/settings.c:1235
 msgid "yes"
 msgstr "si"
 
-#: ../cli/src/connections.c:385 ../cli/src/connections.c:386
-#: ../cli/src/connections.c:603 ../cli/src/connections.c:606
-#: ../cli/src/devices.c:432 ../cli/src/devices.c:557 ../cli/src/devices.c:583
-#: ../cli/src/devices.c:584 ../cli/src/devices.c:585 ../cli/src/devices.c:586
-#: ../cli/src/devices.c:587 ../cli/src/settings.c:508
-#: ../cli/src/settings.c:510 ../cli/src/settings.c:551
-#: ../cli/src/settings.c:652 ../cli/src/settings.c:926
-#: ../cli/src/settings.c:927 ../cli/src/settings.c:929
-#: ../cli/src/settings.c:931 ../cli/src/settings.c:1056
-#: ../cli/src/settings.c:1057 ../cli/src/settings.c:1058
-#: ../cli/src/settings.c:1137 ../cli/src/settings.c:1138
-#: ../cli/src/settings.c:1139 ../cli/src/settings.c:1140
-#: ../cli/src/settings.c:1141 ../cli/src/settings.c:1142
-#: ../cli/src/settings.c:1143 ../cli/src/settings.c:1144
-#: ../cli/src/settings.c:1145 ../cli/src/settings.c:1146
-#: ../cli/src/settings.c:1147 ../cli/src/settings.c:1148
-#: ../cli/src/settings.c:1149 ../cli/src/settings.c:1224
+#: ../cli/src/connections.c:420 ../cli/src/connections.c:421
+#: ../cli/src/connections.c:599 ../cli/src/connections.c:601
+#: ../cli/src/devices.c:509 ../cli/src/devices.c:562 ../cli/src/devices.c:687
+#: ../cli/src/devices.c:713 ../cli/src/devices.c:714 ../cli/src/devices.c:715
+#: ../cli/src/devices.c:716 ../cli/src/devices.c:717 ../cli/src/settings.c:520
+#: ../cli/src/settings.c:522 ../cli/src/settings.c:563
+#: ../cli/src/settings.c:663 ../cli/src/settings.c:937
+#: ../cli/src/settings.c:938 ../cli/src/settings.c:940
+#: ../cli/src/settings.c:942 ../cli/src/settings.c:1067
+#: ../cli/src/settings.c:1068 ../cli/src/settings.c:1069
+#: ../cli/src/settings.c:1148 ../cli/src/settings.c:1149
+#: ../cli/src/settings.c:1150 ../cli/src/settings.c:1151
+#: ../cli/src/settings.c:1152 ../cli/src/settings.c:1153
+#: ../cli/src/settings.c:1154 ../cli/src/settings.c:1155
+#: ../cli/src/settings.c:1156 ../cli/src/settings.c:1157
+#: ../cli/src/settings.c:1158 ../cli/src/settings.c:1159
+#: ../cli/src/settings.c:1160 ../cli/src/settings.c:1235
 msgid "no"
 msgstr "non"
 
-#: ../cli/src/connections.c:458 ../cli/src/connections.c:501
-msgid "System connections"
-msgstr "Conexións do sistema"
+#: ../cli/src/connections.c:495
+#| msgid "Connection details"
+msgid "Connection list"
+msgstr "Lista de conexións"
 
-#: ../cli/src/connections.c:463 ../cli/src/connections.c:514
-msgid "User connections"
-msgstr "Conexións do usuario"
-
-#: ../cli/src/connections.c:475 ../cli/src/connections.c:1335
-#: ../cli/src/connections.c:1351 ../cli/src/connections.c:1360
-#: ../cli/src/connections.c:1371 ../cli/src/connections.c:1456
-#: ../cli/src/devices.c:962 ../cli/src/devices.c:972 ../cli/src/devices.c:1074
-#: ../cli/src/devices.c:1081
+#: ../cli/src/connections.c:508 ../cli/src/connections.c:1368
+#: ../cli/src/connections.c:1383 ../cli/src/connections.c:1392
+#: ../cli/src/connections.c:1402 ../cli/src/connections.c:1414
+#: ../cli/src/connections.c:1509 ../cli/src/devices.c:1190
+#: ../cli/src/devices.c:1200 ../cli/src/devices.c:1314
+#: ../cli/src/devices.c:1321 ../cli/src/devices.c:1534
+#: ../cli/src/devices.c:1541
 #, c-format
 msgid "Error: %s argument is missing."
 msgstr "Erro: falta o argumento %s"
 
-#: ../cli/src/connections.c:488
+#: ../cli/src/connections.c:521
 #, c-format
 msgid "Error: %s - no such connection."
 msgstr "Erro: %s - non existe dita conexión."
 
-#: ../cli/src/connections.c:520 ../cli/src/connections.c:1384
-#: ../cli/src/connections.c:1474 ../cli/src/devices.c:785
-#: ../cli/src/devices.c:852 ../cli/src/devices.c:986 ../cli/src/devices.c:1087
+#: ../cli/src/connections.c:527 ../cli/src/connections.c:1427
+#: ../cli/src/connections.c:1526 ../cli/src/devices.c:987
+#: ../cli/src/devices.c:1067 ../cli/src/devices.c:1214
+#: ../cli/src/devices.c:1327 ../cli/src/devices.c:1547
 #, c-format
 msgid "Unknown parameter: %s\n"
 msgstr "Parámetros descoñecidos: %s\n"
 
-#: ../cli/src/connections.c:529
+#: ../cli/src/connections.c:536
 #, c-format
 msgid "Error: no valid parameter specified."
 msgstr "Erro: non se especificou un parámetro válido"
 
-#: ../cli/src/connections.c:544 ../cli/src/connections.c:1577
-#: ../cli/src/devices.c:1293 ../cli/src/network-manager.c:274
+#: ../cli/src/connections.c:551 ../cli/src/connections.c:1617
+#: ../cli/src/devices.c:1755 ../cli/src/network-manager.c:463
 #, c-format
 msgid "Error: %s."
 msgstr "Erro: %s."
 
-#: ../cli/src/connections.c:650
+#: ../cli/src/connections.c:639
 #, c-format
 msgid "Error: 'con status': %s"
 msgstr "Erro: «con status»: %s"
 
-#: ../cli/src/connections.c:652
+#: ../cli/src/connections.c:641
 #, c-format
 msgid "Error: 'con status': %s; allowed fields: %s"
 msgstr "Erro: «con status»: %s; campos permitidos: %s"
 
-#: ../cli/src/connections.c:659
+#: ../cli/src/connections.c:649 ../cli/src/connections.c:1442
+#: ../cli/src/connections.c:1541 ../cli/src/devices.c:1014
+#: ../cli/src/devices.c:1076 ../cli/src/devices.c:1229
+#: ../cli/src/devices.c:1357 ../cli/src/devices.c:1576
+#, c-format
+msgid "Error: Can't find out if NetworkManager is running: %s."
+msgstr "Erro: non é posíbel determinar se NetworkManager está a funcionar: %s."
+
+#: ../cli/src/connections.c:653 ../cli/src/connections.c:1446
+#: ../cli/src/connections.c:1545 ../cli/src/devices.c:1018
+#: ../cli/src/devices.c:1080 ../cli/src/devices.c:1233
+#: ../cli/src/devices.c:1361 ../cli/src/devices.c:1580
+#, c-format
+msgid "Error: NetworkManager is not running."
+msgstr "Erro: NetworkManager non está a funcionar."
+
+#: ../cli/src/connections.c:661
 msgid "Active connections"
 msgstr "Conexións activas"
 
-#: ../cli/src/connections.c:1027
+#: ../cli/src/connections.c:1085
 #, c-format
 msgid "no active connection on device '%s'"
 msgstr "non hai conexións activas no dispositivo «%s»"
 
-#: ../cli/src/connections.c:1035
+#: ../cli/src/connections.c:1093
 #, c-format
 msgid "no active connection or device"
 msgstr "non hai conexións activas ou dispositivo"
 
-#: ../cli/src/connections.c:1085
+#: ../cli/src/connections.c:1164
 #, c-format
 msgid "device '%s' not compatible with connection '%s'"
 msgstr "o dispositivo «%s» non é compatíbel coa conexión «%s»"
 
-#: ../cli/src/connections.c:1087
+#: ../cli/src/connections.c:1166
 #, c-format
 msgid "no device found for connection '%s'"
 msgstr "non foi posíbel encontrar un dispositivo para a conexión «%s»"
 
-#: ../cli/src/connections.c:1098
+#: ../cli/src/connections.c:1177
 msgid "activating"
 msgstr "activando"
 
-#: ../cli/src/connections.c:1100
+#: ../cli/src/connections.c:1179
 msgid "activated"
 msgstr "activada"
 
-#: ../cli/src/connections.c:1103 ../cli/src/connections.c:1126
-#: ../cli/src/connections.c:1159 ../cli/src/devices.c:246
-#: ../cli/src/devices.c:558 ../cli/src/network-manager.c:92
-#: ../cli/src/network-manager.c:145 ../cli/src/settings.c:473
+#: ../cli/src/connections.c:1181 ../cli/src/devices.c:304
+#| msgid "activating"
+msgid "deactivating"
+msgstr "desactivando"
+
+#: ../cli/src/connections.c:1184 ../cli/src/connections.c:1207
+#: ../cli/src/connections.c:1240 ../cli/src/devices.c:308
+#: ../cli/src/devices.c:688 ../cli/src/network-manager.c:118
+#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:183
+#: ../cli/src/network-manager.c:192 ../cli/src/network-manager.c:298
+#: ../cli/src/network-manager.c:353 ../cli/src/network-manager.c:391
+#: ../cli/src/network-manager.c:430 ../cli/src/settings.c:485
+#: ../cli/src/utils.c:396
 msgid "unknown"
 msgstr "descoñecido"
 
-#: ../cli/src/connections.c:1112
+#: ../cli/src/connections.c:1193
 msgid "VPN connecting (prepare)"
 msgstr "Conectándose á VPN (preparando)"
 
-#: ../cli/src/connections.c:1114
+#: ../cli/src/connections.c:1195
 msgid "VPN connecting (need authentication)"
 msgstr "Conexión VPN (requírese autenticación)"
 
-#: ../cli/src/connections.c:1116
+#: ../cli/src/connections.c:1197
 msgid "VPN connecting"
 msgstr "Conexión VPN"
 
-#: ../cli/src/connections.c:1118
+#: ../cli/src/connections.c:1199
 msgid "VPN connecting (getting IP configuration)"
 msgstr "Conectándose á VPN (obtendo a configuración de IP)"
 
-#: ../cli/src/connections.c:1120
+#: ../cli/src/connections.c:1201
 msgid "VPN connected"
 msgstr "Conectado á VPN"
 
-#: ../cli/src/connections.c:1122
+#: ../cli/src/connections.c:1203
 msgid "VPN connection failed"
 msgstr "Produciuse un fallo ao conectarse á VPN"
 
-#: ../cli/src/connections.c:1124
+#: ../cli/src/connections.c:1205
 msgid "VPN disconnected"
 msgstr "Desconectado á VPN"
 
-#: ../cli/src/connections.c:1135
+#: ../cli/src/connections.c:1216
 msgid "unknown reason"
 msgstr "razón descoñecida"
 
-#: ../cli/src/connections.c:1137
+#: ../cli/src/connections.c:1218
 msgid "none"
 msgstr "ninguna"
 
-#: ../cli/src/connections.c:1139
+#: ../cli/src/connections.c:1220
 msgid "the user was disconnected"
 msgstr "o usuario desconectouse"
 
-#: ../cli/src/connections.c:1141
+#: ../cli/src/connections.c:1222
 msgid "the base network connection was interrupted"
 msgstr "a conexión de rede base foi interrompida"
 
-#: ../cli/src/connections.c:1143
+#: ../cli/src/connections.c:1224
 msgid "the VPN service stopped unexpectedly"
 msgstr "o servizo de VPN deteuse de forma inesperada"
 
-#: ../cli/src/connections.c:1145
+#: ../cli/src/connections.c:1226
 msgid "the VPN service returned invalid configuration"
 msgstr "o servizo de VPN devolveu unha configuración non válida"
 
-#: ../cli/src/connections.c:1147
+#: ../cli/src/connections.c:1228
 msgid "the connection attempt timed out"
 msgstr "o intento de conexión superou o tempo de espera máximo"
 
-#: ../cli/src/connections.c:1149
+#: ../cli/src/connections.c:1230
 msgid "the VPN service did not start in time"
 msgstr "o servizo de VPN non se iniciou a tempo"
 
-#: ../cli/src/connections.c:1151
+#: ../cli/src/connections.c:1232
 msgid "the VPN service failed to start"
 msgstr "o servizo de VPN fallou ao iniciarse"
 
-#: ../cli/src/connections.c:1153
+#: ../cli/src/connections.c:1234
 msgid "no valid VPN secrets"
 msgstr "non hai segredos VPN válidos"
 
-#: ../cli/src/connections.c:1155
+#: ../cli/src/connections.c:1236
 msgid "invalid VPN secrets"
 msgstr "segredos VPN non válidos"
 
-#: ../cli/src/connections.c:1157
+#: ../cli/src/connections.c:1238
 msgid "the connection was removed"
 msgstr "eliminouse a conexión"
 
-#: ../cli/src/connections.c:1171
+#: ../cli/src/connections.c:1252
 #, c-format
 msgid "state: %s\n"
 msgstr "estado: %s\n"
 
-#: ../cli/src/connections.c:1174 ../cli/src/connections.c:1200
+#: ../cli/src/connections.c:1255 ../cli/src/connections.c:1281
 #, c-format
 msgid "Connection activated\n"
 msgstr "Conexión activada\n"
 
-#: ../cli/src/connections.c:1177
+#: ../cli/src/connections.c:1258
 #, c-format
 msgid "Error: Connection activation failed."
 msgstr "Erro: A activación da conexión fallou."
 
-#: ../cli/src/connections.c:1196
+#: ../cli/src/connections.c:1277
 #, c-format
 msgid "state: %s (%d)\n"
 msgstr "estado: %s (%d)\n"
 
-#: ../cli/src/connections.c:1206
+#: ../cli/src/connections.c:1287
 #, c-format
 msgid "Error: Connection activation failed: %s."
 msgstr "Erro: A activación da conexión fallou: %s."
 
-#: ../cli/src/connections.c:1223 ../cli/src/devices.c:909
+#: ../cli/src/connections.c:1304 ../cli/src/devices.c:1136
 #, c-format
 msgid "Error: Timeout %d sec expired."
 msgstr "Erro: Alcanzouse o tempo de espera de %d segundos."
 
-#: ../cli/src/connections.c:1266
+#: ../cli/src/connections.c:1317
 #, c-format
 msgid "Error: Connection activation failed: %s"
 msgstr "Erro: Produciuse un fallo ao activar a conexión: %s"
 
-#: ../cli/src/connections.c:1280
-#, c-format
-msgid "Error: Obtaining active connection for '%s' failed."
-msgstr "Erro: Produciuse un fallo ao obter a conexión activa para «%s»."
-
-#: ../cli/src/connections.c:1289
+#: ../cli/src/connections.c:1323
 #, c-format
 msgid "Active connection state: %s\n"
 msgstr "Estado da conexión activa: %s\n"
 
-#: ../cli/src/connections.c:1290
+#: ../cli/src/connections.c:1324
 #, c-format
 msgid "Active connection path: %s\n"
 msgstr "Camiño da conexión activa: %s\n"
 
-#: ../cli/src/connections.c:1344 ../cli/src/connections.c:1465
+#: ../cli/src/connections.c:1376 ../cli/src/connections.c:1517
 #, c-format
 msgid "Error: Unknown connection: %s."
 msgstr "Erro: Conexión descoñecida: %s."
 
-#: ../cli/src/connections.c:1379 ../cli/src/devices.c:980
+#: ../cli/src/connections.c:1422 ../cli/src/devices.c:1208
 #, c-format
 msgid "Error: timeout value '%s' is not valid."
 msgstr "Erro: O valor do tempo de espera máximo «%s» non é válido."
 
-#: ../cli/src/connections.c:1392 ../cli/src/connections.c:1482
+#: ../cli/src/connections.c:1435 ../cli/src/connections.c:1534
 #, c-format
 msgid "Error: id or uuid has to be specified."
 msgstr "Erro: debe especificar o id ou o uuid."
 
-#: ../cli/src/connections.c:1412
+#: ../cli/src/connections.c:1463
 #, c-format
 msgid "Error: No suitable device found: %s."
 msgstr "Erro: Non se encontrou un dispositivo axeitado: %s."
 
-#: ../cli/src/connections.c:1414
+#: ../cli/src/connections.c:1465
 #, c-format
 msgid "Error: No suitable device found."
 msgstr "Erro: Non se encontrou o dispositivo axeitado."
 
-#: ../cli/src/connections.c:1509
+#: ../cli/src/connections.c:1570
 #, c-format
 msgid "Warning: Connection not active\n"
 msgstr "Aviso: A conexión non está activa.\n"
 
-#: ../cli/src/connections.c:1566
+#: ../cli/src/connections.c:1608
 #, c-format
 msgid "Error: 'con' command '%s' is not valid."
 msgstr "Erro: «con» a orde «%s» non é válida"
 
-#: ../cli/src/connections.c:1602
+#: ../cli/src/connections.c:1673
 #, c-format
 msgid "Error: could not connect to D-Bus."
 msgstr "Erro: non é posíbel conectarse a D-Bus."
 
-#: ../cli/src/connections.c:1609
+#: ../cli/src/connections.c:1680
 #, c-format
 msgid "Error: Could not get system settings."
 msgstr "Erro: Non é posíbel obter as opcións do sistema."
 
-#: ../cli/src/connections.c:1617
-#, c-format
-msgid "Error: Could not get user settings."
-msgstr "Erro: Non é posíbel obter as opcións do usuario."
-
-#: ../cli/src/connections.c:1627
+#: ../cli/src/connections.c:1690
 #, c-format
-msgid "Error: Can't obtain connections: settings services are not running."
+#| msgid "Error: Can't obtain connections: settings services are not running."
+msgid "Error: Can't obtain connections: settings service is not running."
 msgstr ""
-"Erro: Non é posíbel obter as conexións: os servizos de opcións non están "
-"executándose."
+"Erro: Non é posíbel obter as conexións: o servizo de configuracións non "
+"están executándose."
 
 #. 0
 #. 9
-#: ../cli/src/devices.c:61 ../cli/src/devices.c:89 ../cli/src/devices.c:184
+#. 3
+#: ../cli/src/devices.c:66 ../cli/src/devices.c:102 ../cli/src/devices.c:212
+#: ../cli/src/devices.c:228
 msgid "DEVICE"
 msgstr "DISPOSITIVO"
 
 #. 1
 #. 4
-#. 0
-#: ../cli/src/devices.c:63 ../cli/src/devices.c:93
-#: ../cli/src/network-manager.c:36
+#. 1
+#: ../cli/src/devices.c:68 ../cli/src/devices.c:106
+#: ../cli/src/network-manager.c:39
 msgid "STATE"
 msgstr "ESTADO"
 
-#: ../cli/src/devices.c:72
+#: ../cli/src/devices.c:78
 msgid "GENERAL"
 msgstr "XERAL"
 
 #. 0
-#: ../cli/src/devices.c:73
+#: ../cli/src/devices.c:79
 msgid "CAPABILITIES"
 msgstr "CAPACIDADES"
 
 #. 1
-#: ../cli/src/devices.c:74
+#: ../cli/src/devices.c:80
 msgid "WIFI-PROPERTIES"
 msgstr "PROPIEDADES-WIFI"
 
 #. 2
-#: ../cli/src/devices.c:75
+#: ../cli/src/devices.c:81
 msgid "AP"
 msgstr "AP"
 
 #. 3
-#: ../cli/src/devices.c:76
+#: ../cli/src/devices.c:82
 msgid "WIRED-PROPERTIES"
 msgstr "PROPIEDADES-CONCABLES"
 
 #. 4
-#: ../cli/src/devices.c:77
+#: ../cli/src/devices.c:83
+#| msgid "WIFI-PROPERTIES"
+msgid "WIMAX-PROPERTIES"
+msgstr "PROPIEDADES-WIMAX"
+
+#. 5
+#. 0
+#: ../cli/src/devices.c:84 ../cli/src/devices.c:225
+#| msgid "DNS"
+msgid "NSP"
+msgstr "PSR"
+
+#. 6
+#: ../cli/src/devices.c:85
 msgid "IP4-SETTINGS"
 msgstr "CONFIGURACIONS-IP4"
 
-#. 5
-#: ../cli/src/devices.c:78
+#. 7
+#: ../cli/src/devices.c:86
 msgid "IP4-DNS"
 msgstr "IP4-DNS"
 
-#. 6
-#: ../cli/src/devices.c:79
+#. 8
+#: ../cli/src/devices.c:87
 msgid "IP6-SETTINGS"
 msgstr "IP4-CONFIGURACIONS"
 
-#. 7
-#: ../cli/src/devices.c:80
+#. 9
+#: ../cli/src/devices.c:88
 msgid "IP6-DNS"
 msgstr "IP6-DNS"
 
 #. 2
-#: ../cli/src/devices.c:91
+#: ../cli/src/devices.c:104
 msgid "DRIVER"
 msgstr "CONTROLADOR"
 
 #. 3
-#: ../cli/src/devices.c:92
+#: ../cli/src/devices.c:105
 msgid "HWADDR"
 msgstr "ENDEREZO-HARDWARE"
 
 #. 0
-#: ../cli/src/devices.c:102
+#: ../cli/src/devices.c:115
 msgid "CARRIER-DETECT"
 msgstr "DETECTAR-CARRIERV"
 
 #. 1
-#: ../cli/src/devices.c:103
+#: ../cli/src/devices.c:116
 msgid "SPEED"
 msgstr "VELOCIDADE"
 
 #. 0
-#: ../cli/src/devices.c:112
+#: ../cli/src/devices.c:125
 msgid "CARRIER"
 msgstr "CARRIER"
 
 #. 0
-#: ../cli/src/devices.c:122
+#: ../cli/src/devices.c:135
 msgid "WEP"
 msgstr "WEP"
 
 #. 1
-#: ../cli/src/devices.c:123
+#: ../cli/src/devices.c:136
 msgid "WPA"
 msgstr "WPA"
 
 #. 2
-#: ../cli/src/devices.c:124
+#: ../cli/src/devices.c:137
 msgid "WPA2"
 msgstr "WPA2"
 
 #. 3
-#: ../cli/src/devices.c:125
+#: ../cli/src/devices.c:138
 msgid "TKIP"
 msgstr "TKIP"
 
 #. 4
-#: ../cli/src/devices.c:126
+#: ../cli/src/devices.c:139
 msgid "CCMP"
 msgstr "CCMP"
 
 #. 0
-#: ../cli/src/devices.c:135 ../cli/src/devices.c:146
+#: ../cli/src/devices.c:149
+#| msgid "FREQ"
+msgid "CTR-FREQ"
+msgstr "CTR-FREC"
+
+#. 1
+#: ../cli/src/devices.c:150
+#| msgid "SSID"
+msgid "RSSI"
+msgstr "RSSI"
+
+#. 2
+#: ../cli/src/devices.c:151
+msgid "CINR"
+msgstr "CINR"
+
+#. 3
+#: ../cli/src/devices.c:152
+msgid "TX-POW"
+msgstr "TX-POW"
+
+#. 4
+#: ../cli/src/devices.c:153
+#| msgid "BSSID"
+msgid "BSID"
+msgstr "BSID"
+
+#. 0
+#: ../cli/src/devices.c:163 ../cli/src/devices.c:174
 msgid "ADDRESS"
 msgstr "ENDEREZO"
 
 #. 1
-#: ../cli/src/devices.c:136 ../cli/src/devices.c:147
+#: ../cli/src/devices.c:164 ../cli/src/devices.c:175
 msgid "PREFIX"
 msgstr "PREFIXO"
 
 #. 2
-#: ../cli/src/devices.c:137 ../cli/src/devices.c:148
+#: ../cli/src/devices.c:165 ../cli/src/devices.c:176
 msgid "GATEWAY"
 msgstr "PASARELA"
 
 #. 0
-#: ../cli/src/devices.c:157 ../cli/src/devices.c:166
+#: ../cli/src/devices.c:185 ../cli/src/devices.c:194
 msgid "DNS"
 msgstr "DNS"
 
 #. 0
-#: ../cli/src/devices.c:175
+#: ../cli/src/devices.c:203
 msgid "SSID"
 msgstr "SSID"
 
 #. 1
-#: ../cli/src/devices.c:176
+#: ../cli/src/devices.c:204
 msgid "BSSID"
 msgstr "BSSID"
 
 #. 2
-#: ../cli/src/devices.c:177
+#: ../cli/src/devices.c:205
 msgid "MODE"
 msgstr "MODO"
 
 #. 3
-#: ../cli/src/devices.c:178
+#: ../cli/src/devices.c:206
 msgid "FREQ"
 msgstr "FREQ"
 
 #. 4
-#: ../cli/src/devices.c:179
+#: ../cli/src/devices.c:207
 msgid "RATE"
 msgstr "TAXA"
 
 #. 5
-#: ../cli/src/devices.c:180
+#. 1
+#: ../cli/src/devices.c:208 ../cli/src/devices.c:226
 msgid "SIGNAL"
 msgstr "SINAL"
 
 #. 6
-#: ../cli/src/devices.c:181
+#: ../cli/src/devices.c:209
 msgid "SECURITY"
 msgstr "SEGURIDADE"
 
 #. 7
-#: ../cli/src/devices.c:182
+#: ../cli/src/devices.c:210
 msgid "WPA-FLAGS"
 msgstr "OPCIONS-WPA"
 
 #. 8
-#: ../cli/src/devices.c:183
+#: ../cli/src/devices.c:211
 msgid "RSN-FLAGS"
 msgstr "OPCIONS-RSN"
 
 #. 10
-#: ../cli/src/devices.c:185
+#. 4
+#: ../cli/src/devices.c:213 ../cli/src/devices.c:229
 msgid "ACTIVE"
 msgstr "ACTIVA"
 
-#: ../cli/src/devices.c:208
-#, c-format
+#: ../cli/src/devices.c:256
+#, c-format
+#| msgid ""
+#| "Usage: nmcli dev { COMMAND | help }\n"
+#| "\n"
+#| "  COMMAND := { status | list | disconnect | wifi }\n"
+#| "\n"
+#| "  status\n"
+#| "  list [iface <iface>]\n"
+#| "  disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
+#| "  wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+#| "\n"
 msgid ""
 "Usage: nmcli dev { COMMAND | help }\n"
 "\n"
+"  COMMAND := { status | list | disconnect | wifi | wimax }\n"
+"\n"
 "  COMMAND := { status | list | disconnect | wifi }\n"
 "\n"
 "  status\n"
 "  list [iface <iface>]\n"
 "  disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
 "  wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+"  wimax [list [iface <iface>] [nsp <name>]]\n"
 "\n"
 msgstr ""
 "Uso: nmcli dev { ORDE | help }\n"
 "\n"
-"  ORDE := { status | list | disconnect | wifi }\n"
+"  COMANDO := { status | list | disconnect | wifi }\n"
 "\n"
 "  status\n"
-"  list [iface <interface>]\n"
-"  disconnect iface <interface> [--nowait] [--timeout <tempo-de-espera>]\n"
-"  wifi [list [iface <interface>] [hwaddr <enderezo-hardware>]]\n"
+"  list [iface <iface>]\n"
+"  disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
+"  wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+"  wimax [list [iface <iface>] [nsp <name>]]\n"
 "\n"
 
-#: ../cli/src/devices.c:228
+#: ../cli/src/devices.c:284
 msgid "unmanaged"
 msgstr "non xestionada"
 
-#: ../cli/src/devices.c:230
+#: ../cli/src/devices.c:286
 msgid "unavailable"
 msgstr "non dispoñíbel"
 
-#: ../cli/src/devices.c:232 ../cli/src/network-manager.c:89
+#: ../cli/src/devices.c:288 ../cli/src/network-manager.c:115
 msgid "disconnected"
 msgstr "desconectado"
 
-#: ../cli/src/devices.c:234
+#: ../cli/src/devices.c:290
 msgid "connecting (prepare)"
 msgstr "conectando (preparando)"
 
-#: ../cli/src/devices.c:236
+#: ../cli/src/devices.c:292
 msgid "connecting (configuring)"
 msgstr "conectando (configurando)"
 
-#: ../cli/src/devices.c:238
+#: ../cli/src/devices.c:294
 msgid "connecting (need authentication)"
 msgstr "conectando (precisa autenticación)"
 
-#: ../cli/src/devices.c:240
+#: ../cli/src/devices.c:296
 msgid "connecting (getting IP configuration)"
 msgstr "conectando (obtendo a configuración IP)"
 
-#: ../cli/src/devices.c:242 ../cli/src/network-manager.c:87
+#: ../cli/src/devices.c:298
+#| msgid "connecting (getting IP configuration)"
+msgid "connecting (checking IP connectivity)"
+msgstr "conectando (comprobando conectividade IP)"
+
+#: ../cli/src/devices.c:300
+#| msgid "connecting (getting IP configuration)"
+msgid "connecting (starting secondary connections)"
+msgstr "conectando (iniciando conexións secundarias)"
+
+#: ../cli/src/devices.c:302 ../cli/src/network-manager.c:111
 msgid "connected"
 msgstr "conectado"
 
-#: ../cli/src/devices.c:244
+#: ../cli/src/devices.c:306
 msgid "connection failed"
 msgstr "produciuse un fallo na conexión"
 
-#: ../cli/src/devices.c:267 ../cli/src/devices.c:424
+#: ../cli/src/devices.c:331 ../cli/src/devices.c:341 ../cli/src/devices.c:501
+#: ../cli/src/devices.c:545
 msgid "Unknown"
 msgstr "Descoñecido"
 
-#: ../cli/src/devices.c:299
+#: ../cli/src/devices.c:374
 msgid "(none)"
 msgstr "(ningún)"
 
-#: ../cli/src/devices.c:324
+#: ../cli/src/devices.c:399
 #, c-format
 msgid "%s: error converting IP4 address 0x%X"
 msgstr "%s: produciuse un erro ao converter o enderezo IP4 0x%X"
 
-#: ../cli/src/devices.c:393
+#: ../cli/src/devices.c:470
 #, c-format
 msgid "%u MHz"
 msgstr "%u MHz"
 
-#: ../cli/src/devices.c:394
+#: ../cli/src/devices.c:471
 #, c-format
 msgid "%u MB/s"
 msgstr "%u MB/s"
 
-#: ../cli/src/devices.c:403
+#: ../cli/src/devices.c:480
 msgid "Encrypted: "
 msgstr "Cifrado: "
 
-#: ../cli/src/devices.c:408
+#: ../cli/src/devices.c:485
 msgid "WEP "
 msgstr "WEP "
 
-#: ../cli/src/devices.c:410
+#: ../cli/src/devices.c:487
 msgid "WPA "
 msgstr "WPA "
 
-#: ../cli/src/devices.c:412
+#: ../cli/src/devices.c:489
 msgid "WPA2 "
 msgstr "WPA2 "
 
-#: ../cli/src/devices.c:415
+#: ../cli/src/devices.c:492
 msgid "Enterprise "
 msgstr "Empresa "
 
-#: ../cli/src/devices.c:424
+#: ../cli/src/devices.c:501
 msgid "Ad-Hoc"
 msgstr "Ad-Hoc"
 
-#: ../cli/src/devices.c:424
+#: ../cli/src/devices.c:501
 msgid "Infrastructure"
 msgstr "Infraestrutura"
 
-#: ../cli/src/devices.c:486
+#: ../cli/src/devices.c:536
+msgid "Home"
+msgstr "Casa"
+
+#: ../cli/src/devices.c:539
+msgid "Partner"
+msgstr "Asociado"
+
+#: ../cli/src/devices.c:542
+msgid "Roaming"
+msgstr "Roaming"
+
+#: ../cli/src/devices.c:612
 #, c-format
 msgid "Error: 'dev list': %s"
 msgstr "Erro: «dev list»: %s"
 
-#: ../cli/src/devices.c:488
+#: ../cli/src/devices.c:614
 #, c-format
 msgid "Error: 'dev list': %s; allowed fields: %s"
 msgstr "Erro: «dev list»: %s campos permitidos: %s"
 
-#: ../cli/src/devices.c:497
+#: ../cli/src/devices.c:623
 msgid "Device details"
 msgstr "Detalles do dispositivo"
 
-#: ../cli/src/devices.c:527 ../cli/src/devices.c:925
+#: ../cli/src/devices.c:657 ../cli/src/devices.c:1152 ../cli/src/utils.c:342
 msgid "(unknown)"
 msgstr "(descoñecido)"
 
-#: ../cli/src/devices.c:528
+#: ../cli/src/devices.c:658
 msgid "unknown)"
 msgstr "descoñecido)"
 
-#: ../cli/src/devices.c:554
+#: ../cli/src/devices.c:684
 #, c-format
 msgid "%u Mb/s"
 msgstr "%u Mb/s"
 
 #. Print header
 #. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:627
+#: ../cli/src/devices.c:757
 msgid "on"
 msgstr "activado"
 
-#: ../cli/src/devices.c:627
+#: ../cli/src/devices.c:757
 msgid "off"
 msgstr "desactivado"
 
-#: ../cli/src/devices.c:808
+#: ../cli/src/devices.c:1004
 #, c-format
 msgid "Error: 'dev status': %s"
 msgstr "Erro: «dev status»: %s"
 
-#: ../cli/src/devices.c:810
+#: ../cli/src/devices.c:1006
 #, c-format
 msgid "Error: 'dev status': %s; allowed fields: %s"
 msgstr "Erro: «dev status»: %s campos permitidos: %s"
 
-#: ../cli/src/devices.c:817
+#: ../cli/src/devices.c:1029
 msgid "Status of devices"
 msgstr "Estado dos dispositivos"
 
-#: ../cli/src/devices.c:845
+#: ../cli/src/devices.c:1060
 #, c-format
 msgid "Error: '%s' argument is missing."
 msgstr "Erro: falta o argumento «%s»."
 
-#: ../cli/src/devices.c:874 ../cli/src/devices.c:1013
-#: ../cli/src/devices.c:1136
+#: ../cli/src/devices.c:1101 ../cli/src/devices.c:1253
+#: ../cli/src/devices.c:1389 ../cli/src/devices.c:1608
 #, c-format
 msgid "Error: Device '%s' not found."
 msgstr "Erro: Non é posíbel encontrar o dispositivo %s."
 
-#: ../cli/src/devices.c:897
+#: ../cli/src/devices.c:1124
 #, c-format
 msgid "Success: Device '%s' successfully disconnected."
 msgstr "Éxito: O dispositivo «%s» desconectouse correctamente."
 
-#: ../cli/src/devices.c:922
+#: ../cli/src/devices.c:1149
 #, c-format
 msgid "Error: Device '%s' (%s) disconnecting failed: %s"
 msgstr "Erro: Fallou a desconexión do dispositivo «%s» (%s): %s"
 
-#: ../cli/src/devices.c:930
+#: ../cli/src/devices.c:1157
 #, c-format
 msgid "Device state: %d (%s)\n"
 msgstr "Estado do dispositivo: %d (%s)\n"
 
-#: ../cli/src/devices.c:994
+#: ../cli/src/devices.c:1222
 #, c-format
 msgid "Error: iface has to be specified."
 msgstr "Erro: non se especificou a interface."
 
-#: ../cli/src/devices.c:1112
+#: ../cli/src/devices.c:1347
 #, c-format
 msgid "Error: 'dev wifi': %s"
 msgstr "Erro: «dev wifi»: %s"
 
-#: ../cli/src/devices.c:1114
+#: ../cli/src/devices.c:1349
 #, c-format
 msgid "Error: 'dev wifi': %s; allowed fields: %s"
 msgstr "Erro: «dev wiki»: %s; campos permitidos: %s"
 
-#: ../cli/src/devices.c:1121
+#: ../cli/src/devices.c:1372
 msgid "WiFi scan list"
 msgstr "Lista de escaneo WiFi"
 
-#: ../cli/src/devices.c:1156 ../cli/src/devices.c:1210
+#: ../cli/src/devices.c:1409 ../cli/src/devices.c:1463
+#: ../cli/src/devices.c:1670
 #, c-format
 msgid "Error: Access point with hwaddr '%s' not found."
 msgstr "Erro: Non se encontrou o punto de acces co enderezo hardware «%s»."
 
-#: ../cli/src/devices.c:1173
+#: ../cli/src/devices.c:1426
 #, c-format
 msgid "Error: Device '%s' is not a WiFi device."
 msgstr "Erro: O dispositivo «%s» non é un dispositivo WiFi."
 
-#: ../cli/src/devices.c:1237
+#: ../cli/src/devices.c:1490
 #, c-format
 msgid "Error: 'dev wifi' command '%s' is not valid."
 msgstr "Erro: «dev wifi» a orde «%s» non é válida."
 
-#: ../cli/src/devices.c:1284
+#: ../cli/src/devices.c:1566
+#, c-format
+#| msgid "Error: 'dev wifi': %s"
+msgid "Error: 'dev wimax': %s"
+msgstr "Erro: «dev wimax» «%s»"
+
+#: ../cli/src/devices.c:1568
+#, c-format
+#| msgid "Error: 'dev wifi': %s; allowed fields: %s"
+msgid "Error: 'dev wimax': %s; allowed fields: %s"
+msgstr "Erro: «dev wimax»: %s; campos permitidos: %s"
+
+#: ../cli/src/devices.c:1591
+msgid "WiMAX NSP list"
+msgstr "Lista PSR WiMAX"
+
+#: ../cli/src/devices.c:1628
+#, c-format
+#| msgid "Error: Device '%s' not found."
+msgid "Error: NSP with name '%s' not found."
+msgstr "Error: no se encontrou o PSR co nome «%s»."
+
+#: ../cli/src/devices.c:1639
+#, c-format
+#| msgid "Error: Device '%s' is not a WiFi device."
+msgid "Error: Device '%s' is not a WiMAX device."
+msgstr "Error: o dispositivo «%s» non é un dispositivo WiMAX."
+
+#: ../cli/src/devices.c:1697
+#, c-format
+#| msgid "Error: 'dev wifi' command '%s' is not valid."
+msgid "Error: 'dev wimax' command '%s' is not valid."
+msgstr "Error: orde «dev wimax» «%s» non válida."
+
+#: ../cli/src/devices.c:1747
 #, c-format
 msgid "Error: 'dev' command '%s' is not valid."
 msgstr "Erro: «dev» a orde «%s» non é válida."
 
-#: ../cli/src/network-manager.c:35
+#: ../cli/src/network-manager.c:37
 msgid "RUNNING"
 msgstr "EXECUTANDO"
 
-#. 1
-#: ../cli/src/network-manager.c:37
+#. 0
+#: ../cli/src/network-manager.c:38
+msgid "VERSION"
+msgstr "VERSIÓN"
+
+#. 2
+#: ../cli/src/network-manager.c:40
+msgid "NET-ENABLED"
+msgstr "NET-ACTIVADA"
+
+#. 3
+#: ../cli/src/network-manager.c:41
 msgid "WIFI-HARDWARE"
 msgstr "WIFI-HARDWARE"
 
-#. 2
-#: ../cli/src/network-manager.c:38
+#. 4
+#: ../cli/src/network-manager.c:42
 msgid "WIFI"
 msgstr "WIFI"
 
-#. 3
-#: ../cli/src/network-manager.c:39
+#. 5
+#: ../cli/src/network-manager.c:43
 msgid "WWAN-HARDWARE"
 msgstr "WWAN-HARDWARE"
 
-#. 4
-#: ../cli/src/network-manager.c:40
+#. 6
+#: ../cli/src/network-manager.c:44
 msgid "WWAN"
 msgstr "WWAN"
 
-#: ../cli/src/network-manager.c:62
-#, c-format
+#. 7
+#: ../cli/src/network-manager.c:45
+#| msgid "WIFI-HARDWARE"
+msgid "WIMAX-HARDWARE"
+msgstr "HARDWARE-WIMAX"
+
+#. 8
+#: ../cli/src/network-manager.c:46
+msgid "WIMAX"
+msgstr "WIMAX"
+
+#: ../cli/src/network-manager.c:74
+#, c-format
+#| msgid ""
+#| "Usage: nmcli nm { COMMAND | help }\n"
+#| "\n"
+#| "  COMMAND := { status | sleep | wakeup | wifi | wwan }\n"
+#| "\n"
+#| "  status\n"
+#| "  sleep\n"
+#| "  wakeup\n"
+#| "  wifi [on|off]\n"
+#| "  wwan [on|off]\n"
+#| "\n"
 msgid ""
 "Usage: nmcli nm { COMMAND | help }\n"
 "\n"
-"  COMMAND := { status | sleep | wakeup | wifi | wwan }\n"
+"  COMMAND := { status | enable | sleep | wifi | wwan | wimax }\n"
+"\n"
+"  COMMAND := { status | enable | sleep | wifi | wwan }\n"
 "\n"
 "  status\n"
-"  sleep\n"
-"  wakeup\n"
+"  enable [true|false]\n"
+"  sleep [true|false]\n"
 "  wifi [on|off]\n"
 "  wwan [on|off]\n"
+"  wimax [on|off]\n"
 "\n"
 msgstr ""
-"Usage: nmcli nm { ORDE | help }\n"
+"Uso: nmcli nm { ORDE | help }\n"
+"\n"
+"  COMANDO := { status | enable | sleep | wifi | wwan | wimax }\n"
 "\n"
-"  ORDE := { status | sleep | wakeup | wifi | wwan }\n"
+"  COMANDO := { status | enable | sleep | wifi | wwan }\n"
 "\n"
 "  status\n"
-"  sleep\n"
-"  wakeup\n"
+"  enable [true|false]\n"
+"  sleep [true|false]\n"
 "  wifi [on|off]\n"
 "  wwan [on|off]\n"
+"  wimax [on|off]\n"
 "\n"
 
-#: ../cli/src/network-manager.c:83
+#: ../cli/src/network-manager.c:103
 msgid "asleep"
 msgstr "dormido"
 
-#: ../cli/src/network-manager.c:85
+#: ../cli/src/network-manager.c:105
 msgid "connecting"
 msgstr "conectando"
 
-#: ../cli/src/network-manager.c:125
+#: ../cli/src/network-manager.c:107
+msgid "connected (local only)"
+msgstr "conectado (só local)"
+
+#: ../cli/src/network-manager.c:109
+#| msgid "connected"
+msgid "connected (site only)"
+msgstr "conectado (só o sitio)"
+
+#: ../cli/src/network-manager.c:113
+#| msgid "connecting"
+msgid "disconnecting"
+msgstr "desconectando"
+
+#: ../cli/src/network-manager.c:153
 #, c-format
 msgid "Error: 'nm status': %s"
 msgstr "Erro:«'nm status»: %s"
 
-#: ../cli/src/network-manager.c:127
+#: ../cli/src/network-manager.c:155
 #, c-format
 msgid "Error: 'nm status': %s; allowed fields: %s"
 msgstr "Erro: 'nm status': %s; campos permitidos: %s"
 
-#: ../cli/src/network-manager.c:134
-msgid "NetworkManager status"
-msgstr "Estado de NetworkManager"
-
-#. Print header
-#: ../cli/src/network-manager.c:140 ../cli/src/network-manager.c:141
-#: ../cli/src/network-manager.c:142 ../cli/src/network-manager.c:143
-#: ../cli/src/network-manager.c:211 ../cli/src/network-manager.c:243
+#. create NMClient
+#: ../cli/src/network-manager.c:168 ../cli/src/network-manager.c:169
+#: ../cli/src/network-manager.c:170 ../cli/src/network-manager.c:171
+#: ../cli/src/network-manager.c:172 ../cli/src/network-manager.c:174
+#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:296
+#: ../cli/src/network-manager.c:351 ../cli/src/network-manager.c:389
+#: ../cli/src/network-manager.c:428
 msgid "enabled"
 msgstr "activado"
 
-#: ../cli/src/network-manager.c:140 ../cli/src/network-manager.c:141
-#: ../cli/src/network-manager.c:142 ../cli/src/network-manager.c:143
-#: ../cli/src/network-manager.c:211 ../cli/src/network-manager.c:243
+#: ../cli/src/network-manager.c:168 ../cli/src/network-manager.c:169
+#: ../cli/src/network-manager.c:170 ../cli/src/network-manager.c:171
+#: ../cli/src/network-manager.c:172 ../cli/src/network-manager.c:174
+#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:296
+#: ../cli/src/network-manager.c:351 ../cli/src/network-manager.c:389
+#: ../cli/src/network-manager.c:428
 msgid "disabled"
 msgstr "desactivado"
 
-#: ../cli/src/network-manager.c:148
+#: ../cli/src/network-manager.c:188
+msgid "NetworkManager status"
+msgstr "Estado de NetworkManager"
+
+#. Print header
+#: ../cli/src/network-manager.c:191
 msgid "running"
 msgstr "en execución"
 
-#: ../cli/src/network-manager.c:148
+#: ../cli/src/network-manager.c:191
 msgid "not running"
 msgstr "non está a executarse"
 
-#: ../cli/src/network-manager.c:201 ../cli/src/network-manager.c:233
+#: ../cli/src/network-manager.c:222 ../cli/src/utils.c:322
+#, c-format
+msgid "Error: Couldn't connect to system bus: %s"
+msgstr "Erro: Non se puido conectar ao bus do sistema: %s"
+
+#: ../cli/src/network-manager.c:233
+#, c-format
+msgid "Error: Couldn't create D-Bus object proxy."
+msgstr "Erro: Non se puido crear o proxy do obxecto D-Bus."
+
+#: ../cli/src/network-manager.c:239
+#, c-format
+msgid "Error in sleep: %s"
+msgstr "Erro ao durmir: %s"
+
+#: ../cli/src/network-manager.c:283 ../cli/src/network-manager.c:338
+#: ../cli/src/network-manager.c:376 ../cli/src/network-manager.c:415
 #, c-format
 msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
 msgstr "Erro: '--fields' valor '%s' non é válido aquí; campos permitidos: %s"
 
-#: ../cli/src/network-manager.c:209
+#: ../cli/src/network-manager.c:291
+msgid "Networking enabled"
+msgstr "Rede activada"
+
+#: ../cli/src/network-manager.c:307
+#, c-format
+msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
+msgstr ""
+"Erro: o parámetro 'activar' é incorrecto: '%s'; use 'verdadeiro' ou 'falso'."
+
+#: ../cli/src/network-manager.c:317
+#, c-format
+msgid "Error: Sleeping status is not exported by NetworkManager."
+msgstr "Erro: O status dormente non foi exportado polo NetworkManager."
+
+#: ../cli/src/network-manager.c:325
+#, c-format
+msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
+msgstr ""
+"Erro: O parámetro 'durmir' é incorrecto: '%s'; use 'verdadeiro' ou 'falso'."
+
+#: ../cli/src/network-manager.c:346
 msgid "WiFi enabled"
 msgstr "WiFi activada"
 
-#: ../cli/src/network-manager.c:220
+#: ../cli/src/network-manager.c:362
 #, c-format
 msgid "Error: invalid 'wifi' parameter: '%s'."
 msgstr "Erro: parámetro «wifi» non válido: «%s»."
 
-#: ../cli/src/network-manager.c:241
+#: ../cli/src/network-manager.c:384
 msgid "WWAN enabled"
 msgstr "WWAN activada"
 
-#: ../cli/src/network-manager.c:252
+#: ../cli/src/network-manager.c:400
 #, c-format
 msgid "Error: invalid 'wwan' parameter: '%s'."
 msgstr "Erro: parámetro «wwan» non válido: «%s»."
 
-#: ../cli/src/network-manager.c:263
+#: ../cli/src/network-manager.c:423
+#| msgid "WiFi enabled"
+msgid "WiMAX enabled"
+msgstr "WiMAX activado"
+
+#: ../cli/src/network-manager.c:439
+#, c-format
+#| msgid "Error: invalid 'wifi' parameter: '%s'."
+msgid "Error: invalid 'wimax' parameter: '%s'."
+msgstr "Erro: parámetro «wimax» non válido: «%s»."
+
+#: ../cli/src/network-manager.c:452
 #, c-format
 msgid "Error: 'nm' command '%s' is not valid."
 msgstr "Erro: «nm» a orde «%s» non é válida."
 
-#: ../cli/src/nmcli.c:69
-#, c-format
+#: ../cli/src/nmcli.c:64
+#, c-format
+#| msgid ""
+#| "Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
+#| "\n"
+#| "OPTIONS\n"
+#| "  -t[erse]                                   terse output\n"
+#| "  -p[retty]                                  pretty output\n"
+#| "  -m[ode] tabular|multiline                  output mode\n"
+#| "  -f[ields] <field1,field2,...>|all|common   specify fields to output\n"
+#| "  -e[scape] yes|no                           escape columns separators in "
+#| "values\n"
+#| "  -v[ersion]                                 show program version\n"
+#| "  -h[elp]                                    print this help\n"
+#| "\n"
+#| "OBJECT\n"
+#| "  nm          NetworkManager status\n"
+#| "  con         NetworkManager connections\n"
+#| "  dev         devices managed by NetworkManager\n"
+#| "\n"
 msgid ""
 "Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
 "\n"
@@ -986,6 +1252,8 @@ msgid ""
 "  -f[ields] <field1,field2,...>|all|common   specify fields to output\n"
 "  -e[scape] yes|no                           escape columns separators in "
 "values\n"
+"  -n[ocheck]                                 don't check nmcli and "
+"NetworkManager versions\n"
 "  -v[ersion]                                 show program version\n"
 "  -h[elp]                                    print this help\n"
 "\n"
@@ -995,598 +1263,647 @@ msgid ""
 "  dev         devices managed by NetworkManager\n"
 "\n"
 msgstr ""
-"Uso: %s [OPCIÓNS] OBXECTO { ORDE | ayuda }\n"
+"Uso: %s [OPCIÓNS] OBXECTO { ORDE | help }\n"
 "\n"
 "OPCIÓNS\n"
-"  -t[erse]    saída terse \n"
-"  -p[retty]   saída pretty\n"
-"  -v[ersion]  mostrar a versión do programa\n"
-"  -h[elp]     imprimir esta axuda\n"
+"  -t[erse]                                   saída terse \n"
+"  -p[retty]                                  saída pretty\n"
+"  -m[ode] tabular|multiline                  saída mode\n"
+"  -f[ields] <campo1,campo2,...>|all|common   especificar os campos que "
+"mostrar\n"
+"  -e[scape] yes|no                           escapar os separadores de "
+"columnas nos valores\n"
+"  -n[ocheck]                                 non comprobar versións de nmcli "
+"e NetworkManager\n"
+"  -v[ersion]                                 mostrar a versión do programa\n"
+"  -h[elp]                                    mostrar esta axuda\n"
 "\n"
 "OBXECTO\n"
-"  nm          estado do NetworkManager\n"
-"  con         conexións do NetworkManager\n"
-"  dev         dispositivos administrados por NetworkManager\n"
+"  nm          estado de NetworkManager\n"
+"  con         conexións de NetworkManager\n"
+"  dev         dispositivos xestionados por NetworkManager\n"
 "\n"
 
-#: ../cli/src/nmcli.c:113
+#: ../cli/src/nmcli.c:109
 #, c-format
 msgid "Error: Object '%s' is unknown, try 'nmcli help'."
 msgstr "Erro: O obxecto «%s» é descoñecido, tente a executar «nmcli help»."
 
-#: ../cli/src/nmcli.c:143
+#: ../cli/src/nmcli.c:139
 #, c-format
 msgid "Error: Option '--terse' is specified the second time."
 msgstr "Erro: A opción «--terse» especifícase en segundo lugar."
 
-#: ../cli/src/nmcli.c:148
+#: ../cli/src/nmcli.c:144
 #, c-format
 msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
 msgstr "Erro: A opción «--terse» é mutuamente exclusiva con «--pretty»."
 
-#: ../cli/src/nmcli.c:156
+#: ../cli/src/nmcli.c:152
 #, c-format
 msgid "Error: Option '--pretty' is specified the second time."
 msgstr "Erro: A opción «--pretty» especifícase en segundo lugar."
 
-#: ../cli/src/nmcli.c:161
+#: ../cli/src/nmcli.c:157
 #, c-format
 msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
 msgstr "Erro: A opción «--pretty» é mutuamente exclusiva con «--terse»."
 
-#: ../cli/src/nmcli.c:171 ../cli/src/nmcli.c:187
+#: ../cli/src/nmcli.c:167 ../cli/src/nmcli.c:183
 #, c-format
 msgid "Error: missing argument for '%s' option."
 msgstr "Erro: falta o argumento para a opción «%s»."
 
-#: ../cli/src/nmcli.c:180 ../cli/src/nmcli.c:196
+#: ../cli/src/nmcli.c:176 ../cli/src/nmcli.c:192
 #, c-format
 msgid "Error: '%s' is not valid argument for '%s' option."
 msgstr "Erro: «%s» non é un argumento válido para a opción «%s»."
 
-#: ../cli/src/nmcli.c:203
+#: ../cli/src/nmcli.c:199
 #, c-format
 msgid "Error: fields for '%s' options are missing."
 msgstr "Erro: faltan os campos para «%s»."
 
-#: ../cli/src/nmcli.c:209
+#: ../cli/src/nmcli.c:207
 #, c-format
 msgid "nmcli tool, version %s\n"
 msgstr "ferramenta nmcli, versión %s\n"
 
-#: ../cli/src/nmcli.c:215
+#: ../cli/src/nmcli.c:213
 #, c-format
 msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
 msgstr "Erro: A opción «%s» é descoñecida, tente «nmcli --help»"
 
-#: ../cli/src/nmcli.c:234
+#: ../cli/src/nmcli.c:232
 #, c-format
 msgid "Caught signal %d, shutting down..."
 msgstr "Sinal %d capturada, apagando..."
 
-#: ../cli/src/nmcli.c:259
-#, c-format
-msgid "Error: Could not connect to NetworkManager."
-msgstr "Erro: non foi posíbel conectarse a NetworkManager"
+#: ../cli/src/nmcli.c:257
+msgid "Error: Could not create NMClient object."
+msgstr "Erro: non é posíbel crear o obxecto NMClient."
 
-#: ../cli/src/nmcli.c:275
+#: ../cli/src/nmcli.c:273
 msgid "Success"
 msgstr "Éxito"
 
-#: ../cli/src/settings.c:411
+#: ../cli/src/settings.c:423
 #, c-format
 msgid "%d (hex-ascii-key)"
 msgstr "%d (hex-ascii-key)"
 
-#: ../cli/src/settings.c:413
+#: ../cli/src/settings.c:425
 #, c-format
 msgid "%d (104/128-bit passphrase)"
 msgstr "%d (frase de paso 104/128-bit)"
 
-#: ../cli/src/settings.c:416
+#: ../cli/src/settings.c:428
 #, c-format
 msgid "%d (unknown)"
 msgstr "%d (descoñecido)"
 
-#: ../cli/src/settings.c:442
+#: ../cli/src/settings.c:454
 msgid "0 (unknown)"
 msgstr "0 (descoñecido)"
 
-#: ../cli/src/settings.c:448
+#: ../cli/src/settings.c:460
 msgid "any, "
 msgstr "calquera, "
 
-#: ../cli/src/settings.c:450
+#: ../cli/src/settings.c:462
 msgid "900 MHz, "
 msgstr "900 MHz, "
 
-#: ../cli/src/settings.c:452
+#: ../cli/src/settings.c:464
 msgid "1800 MHz, "
 msgstr "1800 MHz, "
 
-#: ../cli/src/settings.c:454
+#: ../cli/src/settings.c:466
 msgid "1900 MHz, "
 msgstr "1900 MHz, "
 
-#: ../cli/src/settings.c:456
+#: ../cli/src/settings.c:468
 msgid "850 MHz, "
 msgstr "850 MHz, "
 
-#: ../cli/src/settings.c:458
+#: ../cli/src/settings.c:470
 msgid "WCDMA 3GPP UMTS 2100 MHz, "
 msgstr "WCDMA 3GPP UMTS 2100 MHz, "
 
-#: ../cli/src/settings.c:460
+#: ../cli/src/settings.c:472
 msgid "WCDMA 3GPP UMTS 1800 MHz, "
 msgstr "WCDMA 3GPP UMTS 1800 MHz, "
 
-#: ../cli/src/settings.c:462
+#: ../cli/src/settings.c:474
 msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
 msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
 
-#: ../cli/src/settings.c:464
+#: ../cli/src/settings.c:476
 msgid "WCDMA 3GPP UMTS 800 MHz, "
 msgstr "WCDMA 3GPP UMTS 800 MHz, "
 
-#: ../cli/src/settings.c:466
+#: ../cli/src/settings.c:478
 msgid "WCDMA 3GPP UMTS 850 MHz, "
 msgstr "WCDMA 3GPP UMTS 850 MHz, "
 
-#: ../cli/src/settings.c:468
+#: ../cli/src/settings.c:480
 msgid "WCDMA 3GPP UMTS 900 MHz, "
 msgstr "WCDMA 3GPP UMTS 900 MHz, "
 
-#: ../cli/src/settings.c:470
+#: ../cli/src/settings.c:482
 msgid "WCDMA 3GPP UMTS 1700 MHz, "
 msgstr "WCDMA 3GPP UMTS 1700 MHz, "
 
-#: ../cli/src/settings.c:554 ../cli/src/settings.c:721
+#: ../cli/src/settings.c:566 ../cli/src/settings.c:732
 msgid "auto"
 msgstr "automático"
 
-#: ../cli/src/settings.c:716 ../cli/src/settings.c:719
-#: ../cli/src/settings.c:720 ../cli/src/utils.c:172
+#: ../cli/src/settings.c:727 ../cli/src/settings.c:730
+#: ../cli/src/settings.c:731 ../cli/src/utils.c:176
 msgid "not set"
 msgstr "non definido"
 
-#: ../cli/src/utils.c:124
+#: ../cli/src/utils.c:128
 #, c-format
 msgid "field '%s' has to be alone"
 msgstr "o campo «%s» ten que estar só"
 
-#: ../cli/src/utils.c:127
+#: ../cli/src/utils.c:131
 #, c-format
 msgid "invalid field '%s'"
 msgstr "campo «%s» non válido"
 
-#: ../cli/src/utils.c:146
+#: ../cli/src/utils.c:150
 #, c-format
 msgid "Option '--terse' requires specifying '--fields'"
 msgstr "A opcións «--terse» require que especifique «--fields»"
 
-#: ../cli/src/utils.c:150
+#: ../cli/src/utils.c:154
 #, c-format
-msgid ""
-"Option '--terse' requires specific '--fields' option values , not '%s'"
+msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
 msgstr ""
 "A opción «--terse» require que especifique os valores da opción «--fields», "
 "non «%s»"
 
-#: ../libnm-util/crypto.c:120
+#: ../cli/src/utils.c:333
+#, c-format
+msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"
+msgstr ""
+"Erro: non é posíbel crear un proxy de obxecto D-Bus para org.freedesktop."
+"DBus."
+
+#: ../cli/src/utils.c:341
+#, c-format
+msgid "Error: NameHasOwner request failed: %s"
+msgstr "Erro: produciuse un fallo na resposta «NameHasOwner»: %s"
+
+#: ../cli/src/utils.c:386
+#, c-format
+msgid ""
+"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
+"nocheck to suppress the warning.\n"
+msgstr ""
+"Advertencia: as versións de nmcli (%s) e de NetworkManager (%s) non "
+"coinciden. Use «--nocheck» para evitar o aviso.\n"
+
+#: ../cli/src/utils.c:395
+#, c-format
+msgid ""
+"Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force "
+"execution using --nocheck, but the results are unpredictable."
+msgstr ""
+"Erro: as versións de nmcli (%s) e de NetworkManager (%s) non coinciden. "
+"Force a execución usando «--nocheck», pero os resultados son impredecíbeis."
+
+#: ../libnm-util/crypto.c:133
 #, c-format
 msgid "PEM key file had no end tag '%s'."
 msgstr "O ficheiro de chave PEM non ten a etiqueta de final «%s»."
 
-#: ../libnm-util/crypto.c:130
+#: ../libnm-util/crypto.c:146
 #, c-format
 msgid "Doesn't look like a PEM private key file."
 msgstr "Non parece un ficheiro de chave privada PEM."
 
-#: ../libnm-util/crypto.c:138
+#: ../libnm-util/crypto.c:154
 #, c-format
 msgid "Not enough memory to store PEM file data."
 msgstr "Non hai memoria abondo para almacenar o ficheiro PEM."
 
-#: ../libnm-util/crypto.c:154
+#: ../libnm-util/crypto.c:170
 #, c-format
 msgid "Malformed PEM file: Proc-Type was not first tag."
 msgstr "Ficheiro PEM malformado: Proc-Type non é a primeira etiqueta."
 
-#: ../libnm-util/crypto.c:162
+#: ../libnm-util/crypto.c:178
 #, c-format
 msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
-msgstr "Ficheiro PEM malformado: a etiqueta Proc-Type «%s »é descoñecida."
+msgstr "O ficheiro PEM é erróneo: a etiqueta Proc-Type «%s» é descoñecida."
 
-#: ../libnm-util/crypto.c:172
+#: ../libnm-util/crypto.c:188
 #, c-format
 msgid "Malformed PEM file: DEK-Info was not the second tag."
 msgstr "Ficheiro PEM malformado: Proc-Type non é a segunda etiqueta."
 
-#: ../libnm-util/crypto.c:183
+#: ../libnm-util/crypto.c:199
 #, c-format
 msgid "Malformed PEM file: no IV found in DEK-Info tag."
-msgstr ""
-"Ficheiro PEM malformado: non se atopou ningún IV na etiqueta DEK-Info"
+msgstr "Ficheiro PEM malformado: non se atopou ningún IV na etiqueta DEK-Info"
 
-#: ../libnm-util/crypto.c:190
+#: ../libnm-util/crypto.c:206
 #, c-format
 msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
-msgstr ""
-"Ficheiro PEM malformado: formato de IV incorrecto na etiqueta DEK-Info"
+msgstr "Ficheiro PEM malformado: formato de IV incorrecto na etiqueta DEK-Info"
 
-#: ../libnm-util/crypto.c:203
+#: ../libnm-util/crypto.c:219
 #, c-format
 msgid "Malformed PEM file: unknown private key cipher '%s'."
-msgstr ""
-"Ficheiro PEM malformado: o cifrado da chave privada «%s» é descoñecido"
+msgstr "Ficheiro PEM malformado: o cifrado da chave privada «%s» é descoñecido"
 
-#: ../libnm-util/crypto.c:222
+#: ../libnm-util/crypto.c:238
 #, c-format
 msgid "Could not decode private key."
 msgstr "Non puido ser decodificada a chave privada."
 
-#: ../libnm-util/crypto.c:267
-#, c-format
-msgid "PEM certificate '%s' had no end tag '%s'."
-msgstr "O certificado PEM «%s» non ten unha etiqueta de final «%s»."
+#: ../libnm-util/crypto.c:284
+msgid "Failed to find expected PKCS#8 start tag."
+msgstr "Produciuse un fallo ao buscar a etiqueta de inicio «%s» de PKCS#8."
 
-#: ../libnm-util/crypto.c:277
+#: ../libnm-util/crypto.c:292
 #, c-format
-msgid "Failed to decode certificate."
-msgstr "Fallou ao decodificar o certificado"
+msgid "Failed to find expected PKCS#8 end tag '%s'."
+msgstr ""
+"Produciuse un fallo ao buscar a etiqueta de finalización «%s» de PKCS#8."
 
-#: ../libnm-util/crypto.c:286
+#: ../libnm-util/crypto.c:312
+#| msgid "Not enough memory to store file data."
+msgid "Not enough memory to store private key data."
+msgstr "No hai memoria dabondo para almacenar os datos da chave privada."
+
+#: ../libnm-util/crypto.c:317
+#| msgid "Failed to decrypt the private key."
+msgid "Failed to decode PKCS#8 private key."
+msgstr "Produciuse un erro ao descifrar a chave privada PKCS#8."
+
+#: ../libnm-util/crypto.c:339 ../libnm-util/crypto.c:625
 #, c-format
 msgid "Not enough memory to store certificate data."
 msgstr "Non hai memoria abondo para almacenar os datos do certificado"
 
-#: ../libnm-util/crypto.c:294
-#, c-format
-msgid "Not enough memory to store file data."
-msgstr "Non hai memoriaabondo para almacenar os datos do ficheiro"
-
-#: ../libnm-util/crypto.c:324
+#: ../libnm-util/crypto.c:365
 #, c-format
 msgid "IV must be an even number of bytes in length."
 msgstr "IV debe ter un número par de bytes en lonxitude."
 
-#: ../libnm-util/crypto.c:333
+#: ../libnm-util/crypto.c:374
 #, c-format
 msgid "Not enough memory to store the IV."
 msgstr "Non hai memoria abondo para almacenar o IV."
 
-#: ../libnm-util/crypto.c:344
+#: ../libnm-util/crypto.c:385
 #, c-format
 msgid "IV contains non-hexadecimal digits."
 msgstr "IV contén díxitos non hexadecimais."
 
-#: ../libnm-util/crypto.c:382 ../libnm-util/crypto_gnutls.c:148
-#: ../libnm-util/crypto_gnutls.c:266 ../libnm-util/crypto_nss.c:171
-#: ../libnm-util/crypto_nss.c:336
+#: ../libnm-util/crypto.c:423 ../libnm-util/crypto_gnutls.c:147
+#: ../libnm-util/crypto_gnutls.c:265 ../libnm-util/crypto_nss.c:167
+#: ../libnm-util/crypto_nss.c:332
 #, c-format
 msgid "Private key cipher '%s' was unknown."
 msgstr "O cifrado «%s» da chave privada é descoñecido."
 
-#: ../libnm-util/crypto.c:391
+#: ../libnm-util/crypto.c:432
 #, c-format
 msgid "Not enough memory to decrypt private key."
 msgstr "Non hai memoria abondo para descifrar esta chave privada."
 
-#: ../libnm-util/crypto.c:511
+#: ../libnm-util/crypto.c:497
+#, c-format
+msgid "Not enough memory to store decrypted private key."
+msgstr "Non hai memoria abondo para almacenar a chave privada descifrada."
+
+#: ../libnm-util/crypto.c:542
 #, c-format
 msgid "Unable to determine private key type."
 msgstr "Non foi posíbel determinar o tipo de chave privada"
 
-#: ../libnm-util/crypto.c:530
+#: ../libnm-util/crypto.c:597
 #, c-format
-msgid "Not enough memory to store decrypted private key."
-msgstr "Non hai memoria abondo para almacenar a chave privada descifrada."
+#| msgid "PEM certificate '%s' had no end tag '%s'."
+msgid "PEM certificate had no start tag '%s'."
+msgstr "O certificado PEM non ten etiqueta de inicio «%s»."
+
+#: ../libnm-util/crypto.c:606
+#, c-format
+#| msgid "PEM certificate '%s' had no end tag '%s'."
+msgid "PEM certificate had no end tag '%s'."
+msgstr "O certificado PEM non ten etiqueta de finalización «%s»."
+
+#: ../libnm-util/crypto.c:630
+#, c-format
+msgid "Failed to decode certificate."
+msgstr "Fallou ao decodificar o certificado"
 
-#: ../libnm-util/crypto_gnutls.c:49
+#: ../libnm-util/crypto_gnutls.c:50
 msgid "Failed to initialize the crypto engine."
 msgstr "Produciuse un erro ao iniciar o motor de cifrado"
 
-#: ../libnm-util/crypto_gnutls.c:93
+#: ../libnm-util/crypto_gnutls.c:92
 #, c-format
 msgid "Failed to initialize the MD5 engine: %s / %s."
 msgstr "Produciuse un erro ao iniciar a arquitectura MD5: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:156
+#: ../libnm-util/crypto_gnutls.c:155
 #, c-format
 msgid "Invalid IV length (must be at least %zd)."
 msgstr "Lonxitude de IV incorrecta (debe ser polo menos %zd)."
 
-#: ../libnm-util/crypto_gnutls.c:165 ../libnm-util/crypto_nss.c:188
+#: ../libnm-util/crypto_gnutls.c:164 ../libnm-util/crypto_nss.c:184
 #, c-format
 msgid "Not enough memory for decrypted key buffer."
 msgstr "Non hai memoria abondo para o búfer da chave descifrada."
 
-#: ../libnm-util/crypto_gnutls.c:173
+#: ../libnm-util/crypto_gnutls.c:172
 #, c-format
 msgid "Failed to initialize the decryption cipher context: %s / %s."
 msgstr ""
 "Produciuse un erro ao inicializar o contexto de cifrado para o descifrado: "
 "%s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:182
+#: ../libnm-util/crypto_gnutls.c:181
 #, c-format
 msgid "Failed to set symmetric key for decryption: %s / %s."
 msgstr ""
 "Produciuse un erro ao establecer a chave simétrica para o descifrado: %s / "
 "%s."
 
-#: ../libnm-util/crypto_gnutls.c:191
+#: ../libnm-util/crypto_gnutls.c:190
 #, c-format
 msgid "Failed to set IV for decryption: %s / %s."
 msgstr "Produciuse un erro ao establecer IV para o descifrado: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:200
+#: ../libnm-util/crypto_gnutls.c:199
 #, c-format
 msgid "Failed to decrypt the private key: %s / %s."
 msgstr "Produciuse un erro ao descifrar a chave privada: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:210 ../libnm-util/crypto_nss.c:267
+#: ../libnm-util/crypto_gnutls.c:209 ../libnm-util/crypto_nss.c:263
 #, c-format
 msgid "Failed to decrypt the private key: unexpected padding length."
 msgstr ""
 "Produciuse un fallo ao descifrar a chave privada: lonxitude de desprazamento "
 "non esperada."
 
-#: ../libnm-util/crypto_gnutls.c:221 ../libnm-util/crypto_nss.c:278
+#: ../libnm-util/crypto_gnutls.c:220 ../libnm-util/crypto_nss.c:274
 #, c-format
 msgid "Failed to decrypt the private key."
 msgstr "Produciuse un erro ao descifrar a chave privada"
 
-#: ../libnm-util/crypto_gnutls.c:286 ../libnm-util/crypto_nss.c:356
+#: ../libnm-util/crypto_gnutls.c:285 ../libnm-util/crypto_nss.c:352
 #, c-format
 msgid "Could not allocate memory for encrypting."
 msgstr "Non foi posíbel asignar a memoria para cifrar."
 
-#: ../libnm-util/crypto_gnutls.c:294
+#: ../libnm-util/crypto_gnutls.c:293
 #, c-format
 msgid "Failed to initialize the encryption cipher context: %s / %s."
 msgstr ""
 "Produciuse un erro ao inicializar o contexto da chave de cifrado: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:303
+#: ../libnm-util/crypto_gnutls.c:302
 #, c-format
 msgid "Failed to set symmetric key for encryption: %s / %s."
 msgstr ""
 "Produciuse un erro ao establecer a chave simétrica para o cifrado: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:313
+#: ../libnm-util/crypto_gnutls.c:312
 #, c-format
 msgid "Failed to set IV for encryption: %s / %s."
 msgstr "Produciuse un erro ao establecer IV para o cifrado: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:322
+#: ../libnm-util/crypto_gnutls.c:321
 #, c-format
 msgid "Failed to encrypt the data: %s / %s."
 msgstr "Produciuse un erro ao cifrar os datos: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:362
+#: ../libnm-util/crypto_gnutls.c:361
 #, c-format
 msgid "Error initializing certificate data: %s"
 msgstr "Produciuse un erro ao iniciar a certificación dos datos: %s"
 
-#: ../libnm-util/crypto_gnutls.c:384
+#: ../libnm-util/crypto_gnutls.c:383
 #, c-format
 msgid "Couldn't decode certificate: %s"
 msgstr "Non se puido decodificar o certificado: %s"
 
-#: ../libnm-util/crypto_gnutls.c:408
+#: ../libnm-util/crypto_gnutls.c:407
 #, c-format
 msgid "Couldn't initialize PKCS#12 decoder: %s"
 msgstr "Non foi posíbel iniciar o decodificador PKCS#12: %s"
 
-#: ../libnm-util/crypto_gnutls.c:421
+#: ../libnm-util/crypto_gnutls.c:420
 #, c-format
 msgid "Couldn't decode PKCS#12 file: %s"
 msgstr "Non foi posíbel decodificar o ficheiro PKCS#12: %s"
 
-#: ../libnm-util/crypto_gnutls.c:433
+#: ../libnm-util/crypto_gnutls.c:432
 #, c-format
 msgid "Couldn't verify PKCS#12 file: %s"
 msgstr "Non foi posíbel verificar o ficheiro PKCS#12: %s"
 
+#: ../libnm-util/crypto_gnutls.c:460
+#, c-format
+#| msgid "Couldn't initialize PKCS#12 decoder: %s"
+msgid "Couldn't initialize PKCS#8 decoder: %s"
+msgstr "Non foi posíbel iniciar o decodificador PKCS#8: %s"
+
+#: ../libnm-util/crypto_gnutls.c:483
+#, c-format
+#| msgid "Couldn't decode PKCS#12 file: %s"
+msgid "Couldn't decode PKCS#8 file: %s"
+msgstr "Non foi posíbel decodificar o ficheiro PKCS#8: %s"
+
 #: ../libnm-util/crypto_nss.c:56
 #, c-format
 msgid "Failed to initialize the crypto engine: %d."
 msgstr "Produciuse un erro ao iniciar o motor de cifrado:%d."
 
-#: ../libnm-util/crypto_nss.c:111
+#: ../libnm-util/crypto_nss.c:107
 #, c-format
 msgid "Failed to initialize the MD5 context: %d."
 msgstr "Produciuse un erro ao iniciar o contexto MD5: %d."
 
-#: ../libnm-util/crypto_nss.c:179
+#: ../libnm-util/crypto_nss.c:175
 #, c-format
 msgid "Invalid IV length (must be at least %d)."
 msgstr "Lonxitude de IV incorrecta (debe ser polo menos %d)."
 
-#: ../libnm-util/crypto_nss.c:196
+#: ../libnm-util/crypto_nss.c:192
 #, c-format
 msgid "Failed to initialize the decryption cipher slot."
 msgstr "Produciuse un erro ao iniciar a rañura de cifrado para o descifrado"
 
-#: ../libnm-util/crypto_nss.c:206
+#: ../libnm-util/crypto_nss.c:202
 #, c-format
 msgid "Failed to set symmetric key for decryption."
-msgstr ""
-"Produciuse un erro ao establecer a chave simétrica para o descifrado."
+msgstr "Produciuse un erro ao establecer a chave simétrica para o descifrado."
 
-#: ../libnm-util/crypto_nss.c:216
+#: ../libnm-util/crypto_nss.c:212
 #, c-format
 msgid "Failed to set IV for decryption."
 msgstr "Produciuse un erro ao establecer IV para o descifrado."
 
-#: ../libnm-util/crypto_nss.c:224
+#: ../libnm-util/crypto_nss.c:220
 #, c-format
 msgid "Failed to initialize the decryption context."
 msgstr "Produciuse un erro ao iniciar o contexto de descifrado."
 
-#: ../libnm-util/crypto_nss.c:237
+#: ../libnm-util/crypto_nss.c:233
 #, c-format
 msgid "Failed to decrypt the private key: %d."
 msgstr "Produciuse un erro ao descifrar a chave privada: %d."
 
-#: ../libnm-util/crypto_nss.c:245
+#: ../libnm-util/crypto_nss.c:241
 #, c-format
 msgid "Failed to decrypt the private key: decrypted data too large."
 msgstr ""
 "Produciuse un erro ao descifrar a chave privada: os datos descifrados son "
 "moi grandes."
 
-#: ../libnm-util/crypto_nss.c:256
+#: ../libnm-util/crypto_nss.c:252
 #, c-format
 msgid "Failed to finalize decryption of the private key: %d."
 msgstr "Produciuse un erro ao finalizar o descifrado da chave privada: %d."
 
-#: ../libnm-util/crypto_nss.c:364
+#: ../libnm-util/crypto_nss.c:360
 #, c-format
 msgid "Failed to initialize the encryption cipher slot."
 msgstr "Produciuse un erro ao inicializar a rañura da cifra de cifrado."
 
-#: ../libnm-util/crypto_nss.c:372
+#: ../libnm-util/crypto_nss.c:368
 #, c-format
 msgid "Failed to set symmetric key for encryption."
 msgstr "Produciuse un erro ao establecer a chave simétrica para o cifrado."
 
-#: ../libnm-util/crypto_nss.c:380
+#: ../libnm-util/crypto_nss.c:376
 #, c-format
 msgid "Failed to set IV for encryption."
 msgstr "Produciuse un erro ao establecer IV para o cifrado."
 
-#: ../libnm-util/crypto_nss.c:388
+#: ../libnm-util/crypto_nss.c:384
 #, c-format
 msgid "Failed to initialize the encryption context."
 msgstr "Produciuse un erro ao inicializar o contexto de cifrado."
 
-#: ../libnm-util/crypto_nss.c:396
+#: ../libnm-util/crypto_nss.c:392
 #, c-format
 msgid "Failed to encrypt: %d."
 msgstr "Produciuse un erro ao cifrar: %d."
 
-#: ../libnm-util/crypto_nss.c:404
+#: ../libnm-util/crypto_nss.c:400
 #, c-format
 msgid "Unexpected amount of data after encrypting."
 msgstr "Tamaño non agardado de datos despois de cifrar."
 
-#: ../libnm-util/crypto_nss.c:447
+#: ../libnm-util/crypto_nss.c:443
 #, c-format
 msgid "Couldn't decode certificate: %d"
 msgstr "Non foi posíbel decodificar o certificado: %d"
 
-#: ../libnm-util/crypto_nss.c:482
+#: ../libnm-util/crypto_nss.c:478
 #, c-format
 msgid "Couldn't convert password to UCS2: %d"
 msgstr "Non foi posíbel converter a chave a UCS2: %d"
 
-#: ../libnm-util/crypto_nss.c:510
+#: ../libnm-util/crypto_nss.c:506
 #, c-format
 msgid "Couldn't initialize PKCS#12 decoder: %d"
 msgstr "Non foi posíbel iniciar o decodificador PKCS#12: %d"
 
-#: ../libnm-util/crypto_nss.c:519
+#: ../libnm-util/crypto_nss.c:515
 #, c-format
 msgid "Couldn't decode PKCS#12 file: %d"
 msgstr "Non fo posíbel decodificar o ficheiro PKCS#12: %d"
 
-#: ../libnm-util/crypto_nss.c:528
+#: ../libnm-util/crypto_nss.c:524
 #, c-format
 msgid "Couldn't verify PKCS#12 file: %d"
 msgstr "Non foi posíbel verficar o ficheiro PKCS#12: %d"
 
-#: ../libnm-util/crypto_nss.c:557
+#: ../libnm-util/crypto_nss.c:568
 msgid "Could not generate random data."
 msgstr "Non foi posíbel xerar datos aleatorios."
 
-#: ../libnm-util/nm-utils.c:1975
+#: ../libnm-util/nm-utils.c:2000
 #, c-format
 msgid "Not enough memory to make encryption key."
 msgstr "Sen memoria abondo para crear a chave de cifrado."
 
-#: ../libnm-util/nm-utils.c:2085
+#: ../libnm-util/nm-utils.c:2110
 msgid "Could not allocate memory for PEM file creation."
 msgstr "Non foi posíbel asignar memoria para a creación do ficheiro PEM,"
 
-#: ../libnm-util/nm-utils.c:2097
+#: ../libnm-util/nm-utils.c:2122
 #, c-format
 msgid "Could not allocate memory for writing IV to PEM file."
 msgstr "Non foi posíbel asignar memoria para escribir IV no ficheiro PEM."
 
-#: ../libnm-util/nm-utils.c:2109
+#: ../libnm-util/nm-utils.c:2134
 #, c-format
 msgid "Could not allocate memory for writing encrypted key to PEM file."
 msgstr ""
 "Non foi posíbel asignar memoria para escribir a chave cifrada no ficheiro "
 "PEM."
 
-#: ../libnm-util/nm-utils.c:2128
+#: ../libnm-util/nm-utils.c:2153
 #, c-format
 msgid "Could not allocate memory for PEM file data."
 msgstr "Non foi posíbel asignar memoria para os datos do ficheiro PEM."
 
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
-msgid "Connection sharing via a protected WiFi network"
-msgstr "Conexión compartida a través dunha rede WiFi protexida"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
-msgid "Connection sharing via an open WiFi network"
-msgstr "Conexión compartida a través dunha rede WiFi aberta"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
-msgid "Modify persistent system hostname"
-msgstr "Modificar o nome persistente do anfitrión do sistema"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
-msgid "Modify system connections"
-msgstr "Modificar as conexións do sistema"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
-msgid "System policy prevents modification of system settings"
-msgstr ""
-"A política do sistema impide a modificación da configuración do sistema"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
-msgid "System policy prevents modification of the persistent system hostname"
-msgstr ""
-"A política do sistema impide a modificación do nome do anfitrión do sistema"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
-msgid ""
-"System policy prevents sharing connections via a protected WiFi network"
-msgstr ""
-"A política do sistema impide compartir conexións a través dunha rede WiFi "
-"protexida"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
-msgid "System policy prevents sharing connections via an open WiFi network"
-msgstr ""
-"A política do sistema impide compartir conexións a través dunha rede WiFi "
-"aberta"
-
 #: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
 msgid "Allow control of network connections"
 msgstr "Permitir o control das conexións de rede"
 
 #: ../policy/org.freedesktop.NetworkManager.policy.in.h:2
-msgid "Allow use of user-specific connections"
-msgstr "Permitir o uso de conexións específicas do usuario"
+msgid "Connection sharing via a protected WiFi network"
+msgstr "Conexión compartida a través dunha rede WiFi protexida"
 
 #: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
+msgid "Connection sharing via an open WiFi network"
+msgstr "Conexión compartida a través dunha rede WiFi aberta"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
 msgid "Enable or disable WiFi devices"
 msgstr "Activar ou desactivar os dispositivos WiFi"
 
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+#| msgid "Enable or disable mobile broadband devices"
+msgid "Enable or disable WiMAX mobile broadband devices"
+msgstr "Activar ou desactivar os dispositivos de banda larga móbil WIMAX"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
 msgid "Enable or disable mobile broadband devices"
 msgstr "Activar ou desactivar os dispositivos de banda ancha móbiles"
 
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
 msgid "Enable or disable system networking"
 msgstr "Activar ou desactivar a rede do sistema"
 
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
+#| msgid "Modify system connections"
+msgid "Modify network connections for all users"
+msgstr "Modificar as conexións de rede para tódolos usuarios"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
+msgid "Modify persistent system hostname"
+msgstr "Modificar o nome persistente do anfitrión do sistema"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
+#| msgid "Allow control of network connections"
+msgid "Modify personal network connections"
+msgstr "Modificar as conexións de rede persoais"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
 msgid ""
 "Put NetworkManager to sleep or wake it up (should only be used by system "
 "power management)"
@@ -1594,101 +1911,87 @@ msgstr ""
 "Poñer o NetworkManager en suspensión e espertalo (só debe ser usado polo "
 "sistema de xestión de rede)"
 
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
 msgid "System policy prevents control of network connections"
 msgstr "A normativa do sistema evita o control das conexións de rede"
 
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:13
 msgid "System policy prevents enabling or disabling WiFi devices"
 msgstr ""
 "A normativa do sistema evita a activación e desactivación dos dispositivos "
 "WiFi"
 
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:14
+#| msgid ""
+#| "System policy prevents enabling or disabling mobile broadband devices"
+msgid ""
+"System policy prevents enabling or disabling WiMAX mobile broadband devices"
+msgstr ""
+"A normativa do sistema evita activar ou desactivar os dispositivos de banda "
+"larga móbil WIMAX."
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:15
 msgid "System policy prevents enabling or disabling mobile broadband devices"
 msgstr ""
 "A normativa do sistema evita a activación ou desactivación dos dispositivos "
 "de banda ancha."
 
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:16
 msgid "System policy prevents enabling or disabling system networking"
 msgstr ""
 "A normativa do sistema evita a activación ou desactivación da rede do sistema"
 
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
-msgid ""
-"System policy prevents putting NetworkManager to sleep or waking it up"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:17
+#| msgid "System policy prevents modification of system settings"
+msgid "System policy prevents modification of network settings for all users"
 msgstr ""
-"A normativa do sistema evita poñer o NetworkManager en suspensión ou "
-"espertalo"
+"A política do sistema impide a modificación da configuración da rede para "
+"tódolos usuarios"
 
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
-msgid "System policy prevents use of user-specific connections"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:18
+#| msgid "System policy prevents modification of system settings"
+msgid "System policy prevents modification of personal network settings"
 msgstr ""
-"A normativa do sistema evita o uso de conexións específicas do usuario"
+"A política do sistema impide a modificación da configuración persoal da rede"
 
-#: ../src/nm-netlink-monitor.c:100 ../src/nm-netlink-monitor.c:231
-#: ../src/nm-netlink-monitor.c:653
-#, c-format
-msgid "error processing netlink message: %s"
-msgstr "produciuse un erro procesando a mensaxe netlink: %s"
-
-#: ../src/nm-netlink-monitor.c:214
-msgid "error occurred while waiting for data on socket"
-msgstr "producouse un erro agardando por datos nun socket"
-
-#: ../src/nm-netlink-monitor.c:254
-#, c-format
-msgid "unable to connect to netlink for monitoring link status: %s"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:19
+msgid "System policy prevents modification of the persistent system hostname"
 msgstr ""
-"non é posíbel conectar ao netlink para monitorizar o estado da lingazón: %s"
+"A política do sistema impide a modificación do nome do anfitrión do sistema"
 
-#: ../src/nm-netlink-monitor.c:265
-#, c-format
-msgid "unable to enable netlink handle credential passing: %s"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:20
+msgid "System policy prevents putting NetworkManager to sleep or waking it up"
 msgstr ""
-"non é posíbel activar a ligazón de rede para xestionar o paso de "
-"creadenciais: %s"
+"A normativa do sistema evita poñer o NetworkManager en suspensión ou "
+"espertalo"
 
-#: ../src/nm-netlink-monitor.c:291 ../src/nm-netlink-monitor.c:353
-#, c-format
-msgid "unable to allocate netlink handle for monitoring link status: %s"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:21
+msgid "System policy prevents sharing connections via a protected WiFi network"
 msgstr ""
-"non é posíbel crear o manexador netlink para monitorizar o estado da "
-"ligazón: %s"
+"A política do sistema impide compartir conexións a través dunha rede WiFi "
+"protexida"
 
-#: ../src/nm-netlink-monitor.c:376
-#, c-format
-msgid "unable to allocate netlink link cache for monitoring link status: %s"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:22
+msgid "System policy prevents sharing connections via an open WiFi network"
 msgstr ""
-"non é posíbel asignar a ligazón á caché netlink para monitorizar o estado da "
-"ligazón: %s"
-
-#: ../src/nm-netlink-monitor.c:502
-#, c-format
-msgid "unable to join netlink group: %s"
-msgstr "non é posíbel unir ao grupo da ligazón de rede: %s"
-
-#: ../src/nm-netlink-monitor.c:629 ../src/nm-netlink-monitor.c:642
-#, c-format
-msgid "error updating link cache: %s"
-msgstr "produciuse un erro ao actualizar a caché de ligazóns: %s"
+"A política do sistema impide compartir conexións a través dunha rede WiFi "
+"aberta"
 
-#: ../src/main.c:498
+#: ../src/main.c:525
 #, c-format
 msgid "Invalid option.  Please use --help to see a list of valid options.\n"
 msgstr "Opción incorrecta. Use --help para ver a lista de opcións válidas.\n"
 
-#: ../src/main.c:569
+#: ../src/main.c:606
 #, c-format
 msgid "%s.  Please use --help to see a list of valid options.\n"
 msgstr "%s. Use --help para ver a lista das opcións válidas.\n"
 
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:328
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:62
 msgid "# Created by NetworkManager\n"
 msgstr "# Creado por NetworkManager\n"
 
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:344
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:69
 #, c-format
 msgid ""
 "# Merged from %s\n"
@@ -1714,38 +2017,275 @@ msgstr "Non foi posíbel encontrar «dhcpcd»."
 msgid "unsupported DHCP client '%s'"
 msgstr "cliente DHCP «%s» non compatíbel"
 
-#: ../src/logging/nm-logging.c:146
+#: ../src/dns-manager/nm-dns-manager.c:376
+msgid "NOTE: the libc resolver may not support more than 3 nameservers."
+msgstr "NOTE: o importador libc non permite máis de 3 nomes de servidores."
+
+#: ../src/dns-manager/nm-dns-manager.c:378
+msgid "The nameservers listed below may not be recognized."
+msgstr "Os nomes de servidores listados a seguir poden non ser recoñecidos"
+
+#: ../src/logging/nm-logging.c:149
 #, c-format
 msgid "Unknown log level '%s'"
 msgstr "Nivel de rexistro «%s» descoñecido"
 
-#: ../src/logging/nm-logging.c:171
+#: ../src/logging/nm-logging.c:174
 #, c-format
 msgid "Unknown log domain '%s'"
 msgstr "Dominio de rexistro «%s» descoñecido"
 
-#: ../src/dns-manager/nm-dns-manager.c:384
-msgid "NOTE: the libc resolver may not support more than 3 nameservers."
-msgstr "NOTE: o importador libc non permite máis de 3 nomes de servidores."
+#: ../src/modem-manager/nm-modem-cdma.c:296 ../src/nm-device-bt.c:355
+#, c-format
+#| msgid "connection failed"
+msgid "CDMA connection %d"
+msgstr "Conexión CDMA %d"
 
-#: ../src/dns-manager/nm-dns-manager.c:386
-msgid "The nameservers listed below may not be recognized."
-msgstr "Os nomes de servidores listados a seguir poden non ser recoñecidos"
+#: ../src/modem-manager/nm-modem-gsm.c:499 ../src/nm-device-bt.c:351
+#, c-format
+#| msgid "connection failed"
+msgid "GSM connection %d"
+msgstr "Conexión GSM %d"
+
+#: ../src/nm-device-bt.c:326
+#, c-format
+#| msgid "VPN connection failed"
+msgid "PAN connection %d"
+msgstr "Conexión PAN %d"
+
+#: ../src/nm-device-bt.c:359
+#, c-format
+#| msgid "VPN connection failed"
+msgid "DUN connection %d"
+msgstr "Conexión DUN %d"
+
+#: ../src/nm-device-ethernet.c:1724
+#, c-format
+#| msgid "VPN connection failed"
+msgid "PPPoE connection %d"
+msgstr "Conexión PPPoE %d"
+
+#: ../src/nm-device-ethernet.c:1724 ../src/settings/nm-settings-utils.c:50
+#, c-format
+#| msgid "Active connections"
+msgid "Wired connection %d"
+msgstr "Conexión cableada %d"
+
+#: ../src/nm-device-olpc-mesh.c:393
+#, c-format
+msgid "Mesh %d"
+msgstr "Malla %d"
+
+#: ../src/nm-manager.c:663
+#, c-format
+#| msgid "VPN connection failed"
+msgid "VPN connection %d"
+msgstr "Conexión VPN %d"
+
+#: ../src/nm-netlink-monitor.c:101 ../src/nm-netlink-monitor.c:234
+#: ../src/nm-netlink-monitor.c:667
+#, c-format
+msgid "error processing netlink message: %s"
+msgstr "produciuse un erro procesando a mensaxe netlink: %s"
+
+#: ../src/nm-netlink-monitor.c:216
+msgid "error occurred while waiting for data on socket"
+msgstr "producouse un erro agardando por datos nun socket"
+
+#: ../src/nm-netlink-monitor.c:260
+#, c-format
+msgid "unable to connect to netlink for monitoring link status: %s"
+msgstr ""
+"non é posíbel conectar ao netlink para monitorizar o estado da lingazón: %s"
+
+#: ../src/nm-netlink-monitor.c:271
+#, c-format
+msgid "unable to enable netlink handle credential passing: %s"
+msgstr ""
+"non é posíbel activar a ligazón de rede para xestionar o paso de "
+"creadenciais: %s"
+
+#: ../src/nm-netlink-monitor.c:297 ../src/nm-netlink-monitor.c:360
+#, c-format
+msgid "unable to allocate netlink handle for monitoring link status: %s"
+msgstr ""
+"non é posíbel crear o manexador netlink para monitorizar o estado da "
+"ligazón: %s"
 
-#: ../src/settings/nm-default-wired-connection.c:157
+#: ../src/nm-netlink-monitor.c:385
 #, c-format
-msgid "Auto %s"
-msgstr "Auto %s"
+msgid "unable to allocate netlink link cache for monitoring link status: %s"
+msgstr ""
+"non é posíbel asignar a ligazón á caché netlink para monitorizar o estado da "
+"ligazón: %s"
 
-#: ../system-settings/plugins/ifcfg-rh/reader.c:3412
+#: ../src/nm-netlink-monitor.c:512
+#, c-format
+msgid "unable to join netlink group: %s"
+msgstr "non é posíbel unir ao grupo da ligazón de rede: %s"
+
+#: ../src/nm-netlink-monitor.c:643 ../src/nm-netlink-monitor.c:656
+#, c-format
+msgid "error updating link cache: %s"
+msgstr "produciuse un erro ao actualizar a caché de ligazóns: %s"
+
+#: ../src/settings/plugins/ifcfg-rh/reader.c:3575
+#: ../src/settings/plugins/ifnet/connection_parser.c:51
 msgid "System"
 msgstr "Sistema"
 
-#, c-format
+#~ msgid "Auto %s"
+#~ msgstr "Auto %s"
+
+#~ msgid "System policy prevents modification of system settings"
+#~ msgstr ""
+#~ "A política do sistema impide a modificación da configuración do sistema"
+
+#~ msgid "Modify system connections"
+#~ msgstr "Modificar as conexións do sistema"
+
+#~ msgid "PEM certificate '%s' had no end tag '%s'."
+#~ msgstr "O certificado PEM «%s» non ten unha etiqueta de final «%s»."
+
+#~ msgid "Not enough memory to store file data."
+#~ msgstr "Non hai memoriaabondo para almacenar os datos do ficheiro"
+
+#~ msgid "SCOPE"
+#~ msgstr "AMBITO"
+
+#~ msgid "DBUS-SERVICE"
+#~ msgstr "DBUS-SERVICE"
+
+#~ msgid "system"
+#~ msgstr "sistema"
+
+#~ msgid "user"
+#~ msgstr "usuario"
+
+#~ msgid "User connections"
+#~ msgstr "Conexións do usuario"
+
+#~ msgid "System connections"
+#~ msgstr "Conexións do sistema"
+
+#~ msgid "Error: Obtaining active connection for '%s' failed."
+#~ msgstr "Erro: Produciuse un fallo ao obter a conexión activa para «%s»."
+
+#~ msgid ""
+#~ "Usage: nmcli con { COMMAND | help }\n"
+#~ "  COMMAND := { list | status | up | down }\n"
+#~ "\n"
+#~ "  list [id <id> | uuid <id> | system | user]\n"
+#~ "  status\n"
+#~ "  up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--"
+#~ "timeout <timeout>]\n"
+#~ "  down id <id> | uuid <id>\n"
+#~ msgstr ""
+#~ "Uso: nmcli con { ORDE | help }\n"
+#~ "  ORDE := { list | status | up | down }\n"
+#~ "\n"
+#~ "  list [id <id> | uuid <id> | system | user]\n"
+#~ "  status\n"
+#~ "  up id <id> | uuid <id> [iface <interface>] [ap <hwaddr>] [--nowait] [--"
+#~ "timeout <timeout>]\n"
+#~ "  down id <id> | uuid <id>\n"
+
+#~ msgid "System policy prevents use of user-specific connections"
+#~ msgstr ""
+#~ "A normativa do sistema evita o uso de conexións específicas do usuario"
+
+#~ msgid "Error: Could not get user settings."
+#~ msgstr "Erro: Non é posíbel obter as opcións do usuario."
+
+#~ msgid "Error: Can't obtain connections: settings services are not running."
+#~ msgstr ""
+#~ "Erro: Non é posíbel obter as conexións: os servizos de opcións non están "
+#~ "executándose."
+
+#~ msgid "Allow use of user-specific connections"
+#~ msgstr "Permitir o uso de conexións específicas do usuario"
+
+#~ msgid ""
+#~ "Usage: nmcli dev { COMMAND | help }\n"
+#~ "\n"
+#~ "  COMMAND := { status | list | disconnect | wifi }\n"
+#~ "\n"
+#~ "  status\n"
+#~ "  list [iface <iface>]\n"
+#~ "  disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
+#~ "  wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Uso: nmcli dev { ORDE | help }\n"
+#~ "\n"
+#~ "  ORDE := { status | list | disconnect | wifi }\n"
+#~ "\n"
+#~ "  status\n"
+#~ "  list [iface <interface>]\n"
+#~ "  disconnect iface <interface> [--nowait] [--timeout <tempo-de-espera>]\n"
+#~ "  wifi [list [iface <interface>] [hwaddr <enderezo-hardware>]]\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
+#~ "\n"
+#~ "OPTIONS\n"
+#~ "  -t[erse]                                   terse output\n"
+#~ "  -p[retty]                                  pretty output\n"
+#~ "  -m[ode] tabular|multiline                  output mode\n"
+#~ "  -f[ields] <field1,field2,...>|all|common   specify fields to output\n"
+#~ "  -e[scape] yes|no                           escape columns separators in "
+#~ "values\n"
+#~ "  -v[ersion]                                 show program version\n"
+#~ "  -h[elp]                                    print this help\n"
+#~ "\n"
+#~ "OBJECT\n"
+#~ "  nm          NetworkManager status\n"
+#~ "  con         NetworkManager connections\n"
+#~ "  dev         devices managed by NetworkManager\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Uso: %s [OPCIÓNS] OBXECTO { ORDE | ayuda }\n"
+#~ "\n"
+#~ "OPCIÓNS\n"
+#~ "  -t[erse]    saída terse \n"
+#~ "  -p[retty]   saída pretty\n"
+#~ "  -v[ersion]  mostrar a versión do programa\n"
+#~ "  -h[elp]     imprimir esta axuda\n"
+#~ "\n"
+#~ "OBXECTO\n"
+#~ "  nm          estado do NetworkManager\n"
+#~ "  con         conexións do NetworkManager\n"
+#~ "  dev         dispositivos administrados por NetworkManager\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: nmcli nm { COMMAND | help }\n"
+#~ "\n"
+#~ "  COMMAND := { status | enable | sleep | wifi | wwan }\n"
+#~ "\n"
+#~ "  status\n"
+#~ "  enable [true|false]\n"
+#~ "  sleep [true|false]\n"
+#~ "  wifi [on|off]\n"
+#~ "  wwan [on|off]\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Uso: nmcli nm { ORDE | axuda }\n"
+#~ "\n"
+#~ "  ORDE := { status | activar | durmir | wifi | wwan }\n"
+#~ "\n"
+#~ "  status\n"
+#~ "  activar [verdadeiro|falso]\n"
+#~ "  durmir [verdadeiro|falso]\n"
+#~ "  wifi [activa|desactivada]\n"
+#~ "  wwan [activa|desactivada]\n"
+#~ "\n"
+
 #~ msgid "unable to join netlink group for monitoring link status: %s"
 #~ msgstr ""
-#~ "non é posíbel unir ao grupo netlink para monitorizar o estado da ligazón: %s"
+#~ "non é posíbel unir ao grupo netlink para monitorizar o estado da ligazón: "
+#~ "%s"
 
-#, c-format
 #~ msgid "unable to connect to netlink: %s"
 #~ msgstr "non é posíbel conectar coa ligazón de rede: %s"
diff --git a/po/hr.po b/po/hr.po
index 3ddfd37d..1d0b4676 100644
--- a/po/hr.po
+++ b/po/hr.po
@@ -1,220 +1,2180 @@
 # NetworkManager
 # Copyright (C) Red Hat, Inc.
 # This file is distributed under the same license as the NetworkManager package.
+#
 # Tomislav Vujec <tvujec@redhat.com>, 2005.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: NetworkManager \n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-02-04 17:28+0100\n"
-"PO-Revision-Date: 2005-02-04 01:08+0100\n"
-"Last-Translator: Tomislav Vujec <tvujec@redhat.com>\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=NetworkManager&keywords=I18N+L10N&component=general\n"
+"POT-Creation-Date: 2011-05-18 03:24+0000\n"
+"PO-Revision-Date: 2011-09-14 02:06+0200\n"
+"Last-Translator: Tomislav Krznar <tomislav.krznar@gmail.com>\n"
 "Language-Team: Croatian <hr@li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<"
+"=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Language: hr\n"
+"X-Generator: Lokalize 1.2\n"
+
+#: ../cli/src/connections.c:64 ../cli/src/connections.c:78
+#: ../cli/src/devices.c:101 ../cli/src/devices.c:114 ../cli/src/devices.c:124
+#: ../cli/src/devices.c:134 ../cli/src/devices.c:148 ../cli/src/devices.c:162
+#: ../cli/src/devices.c:173 ../cli/src/devices.c:184 ../cli/src/devices.c:193
+#: ../cli/src/devices.c:202 ../cli/src/devices.c:224
+msgid "NAME"
+msgstr "NAZIV"
+
+#. 0
+#: ../cli/src/connections.c:65 ../cli/src/connections.c:79
+msgid "UUID"
+msgstr "UUID"
+
+#. 1
+#: ../cli/src/connections.c:66
+msgid "DEVICES"
+msgstr "UREĐAJI"
+
+#. 2
+#: ../cli/src/connections.c:67
+msgid "DEFAULT"
+msgstr "UOBIČAJENO"
+
+#. 3
+#: ../cli/src/connections.c:68
+#, fuzzy
+msgid "SPEC-OBJECT"
+msgstr "SPEC-OBJEKT"
+
+#. 4
+#: ../cli/src/connections.c:69
+msgid "VPN"
+msgstr "VPN"
+
+#. 5
+#. 6
+#. 2
+#. 11
+#. 5
+#: ../cli/src/connections.c:70 ../cli/src/connections.c:85
+#: ../cli/src/devices.c:69 ../cli/src/devices.c:214 ../cli/src/devices.c:230
+msgid "DBUS-PATH"
+msgstr "DBUS-PUTANJA"
+
+#. 1
+#. 0
+#. 1
+#. 2
+#: ../cli/src/connections.c:80 ../cli/src/devices.c:67
+#: ../cli/src/devices.c:103 ../cli/src/devices.c:227
+msgid "TYPE"
+msgstr "TIP"
+
+#. 2
+#: ../cli/src/connections.c:81
+#, fuzzy
+msgid "TIMESTAMP"
+msgstr "VREMENSKA OZNAKA"
+
+#. 3
+#: ../cli/src/connections.c:82
+#, fuzzy
+msgid "TIMESTAMP-REAL"
+msgstr "VREMENSKA OZNAKA-STVARNO"
+
+#. 4
+#: ../cli/src/connections.c:83
+#, fuzzy
+msgid "AUTOCONNECT"
+msgstr "AUTOMATSKO SPAJANJE"
+
+#. 5
+#: ../cli/src/connections.c:84
+#, fuzzy
+msgid "READONLY"
+msgstr "SAMO ZA ČITANJE"
+
+#: ../cli/src/connections.c:167
+#, c-format
+msgid ""
+"Usage: nmcli con { COMMAND | help }\n"
+"  COMMAND := { list | status | up | down }\n"
+"\n"
+"  list [id <id> | uuid <id>]\n"
+"  status\n"
+"  up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [nsp <name>] [--"
+"nowait] [--timeout <timeout>]\n"
+"  up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout "
+"<timeout>]\n"
+"  down id <id> | uuid <id>\n"
+msgstr ""
+"Uporaba: nmcli con { NAREDBA | help }\n"
+"  COMMAND := { list | status | up | down }\n"
+"\n"
+"  list [id <id> | uuid <id>]\n"
+"  status\n"
+"  up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [nsp <name>] [-- "
+"nowait] [--timeout <timeout>]\n"
+"  up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout "
+"<timeout>]\n"
+"  down id <id> | uuid <id>\n"
+
+#: ../cli/src/connections.c:220 ../cli/src/connections.c:542
+#, c-format
+msgid "Error: 'con list': %s"
+msgstr "Greška: 'con list': %s"
+
+#: ../cli/src/connections.c:222 ../cli/src/connections.c:544
+#, c-format
+msgid "Error: 'con list': %s; allowed fields: %s"
+msgstr "Greška: 'con list': %s; dozvoljena polja: %s"
+
+#: ../cli/src/connections.c:230
+msgid "Connection details"
+msgstr "Detalji veze"
+
+#: ../cli/src/connections.c:417
+msgid "never"
+msgstr "nikad"
+
+#. "CAPABILITIES"
+#. Print header
+#. "WIFI-PROPERTIES"
+#: ../cli/src/connections.c:418 ../cli/src/connections.c:419
+#: ../cli/src/connections.c:597 ../cli/src/connections.c:599
+#: ../cli/src/devices.c:509 ../cli/src/devices.c:562 ../cli/src/devices.c:687
+#: ../cli/src/devices.c:713 ../cli/src/devices.c:714 ../cli/src/devices.c:715
+#: ../cli/src/devices.c:716 ../cli/src/devices.c:717 ../cli/src/settings.c:520
+#: ../cli/src/settings.c:563 ../cli/src/settings.c:663
+#: ../cli/src/settings.c:937 ../cli/src/settings.c:938
+#: ../cli/src/settings.c:940 ../cli/src/settings.c:942
+#: ../cli/src/settings.c:1067 ../cli/src/settings.c:1068
+#: ../cli/src/settings.c:1069 ../cli/src/settings.c:1148
+#: ../cli/src/settings.c:1149 ../cli/src/settings.c:1150
+#: ../cli/src/settings.c:1151 ../cli/src/settings.c:1152
+#: ../cli/src/settings.c:1153 ../cli/src/settings.c:1154
+#: ../cli/src/settings.c:1155 ../cli/src/settings.c:1156
+#: ../cli/src/settings.c:1157 ../cli/src/settings.c:1158
+#: ../cli/src/settings.c:1159 ../cli/src/settings.c:1160
+#: ../cli/src/settings.c:1235
+msgid "yes"
+msgstr "da"
+
+#: ../cli/src/connections.c:418 ../cli/src/connections.c:419
+#: ../cli/src/connections.c:597 ../cli/src/connections.c:599
+#: ../cli/src/devices.c:509 ../cli/src/devices.c:562 ../cli/src/devices.c:687
+#: ../cli/src/devices.c:713 ../cli/src/devices.c:714 ../cli/src/devices.c:715
+#: ../cli/src/devices.c:716 ../cli/src/devices.c:717 ../cli/src/settings.c:520
+#: ../cli/src/settings.c:522 ../cli/src/settings.c:563
+#: ../cli/src/settings.c:663 ../cli/src/settings.c:937
+#: ../cli/src/settings.c:938 ../cli/src/settings.c:940
+#: ../cli/src/settings.c:942 ../cli/src/settings.c:1067
+#: ../cli/src/settings.c:1068 ../cli/src/settings.c:1069
+#: ../cli/src/settings.c:1148 ../cli/src/settings.c:1149
+#: ../cli/src/settings.c:1150 ../cli/src/settings.c:1151
+#: ../cli/src/settings.c:1152 ../cli/src/settings.c:1153
+#: ../cli/src/settings.c:1154 ../cli/src/settings.c:1155
+#: ../cli/src/settings.c:1156 ../cli/src/settings.c:1157
+#: ../cli/src/settings.c:1158 ../cli/src/settings.c:1159
+#: ../cli/src/settings.c:1160 ../cli/src/settings.c:1235
+msgid "no"
+msgstr "ne"
+
+#: ../cli/src/connections.c:493
+#| msgid "C_onnect"
+msgid "Connection list"
+msgstr "Lista veza"
+
+#: ../cli/src/connections.c:506 ../cli/src/connections.c:1378
+#: ../cli/src/connections.c:1393 ../cli/src/connections.c:1402
+#: ../cli/src/connections.c:1412 ../cli/src/connections.c:1424
+#: ../cli/src/connections.c:1519 ../cli/src/devices.c:1190
+#: ../cli/src/devices.c:1200 ../cli/src/devices.c:1314
+#: ../cli/src/devices.c:1321 ../cli/src/devices.c:1534
+#: ../cli/src/devices.c:1541
+#, c-format
+msgid "Error: %s argument is missing."
+msgstr "Greška: nedostaje argument %s."
+
+#: ../cli/src/connections.c:519
+#, c-format
+msgid "Error: %s - no such connection."
+msgstr "Greška: %s - veza ne postoji."
+
+#: ../cli/src/connections.c:525 ../cli/src/connections.c:1437
+#: ../cli/src/connections.c:1536 ../cli/src/devices.c:987
+#: ../cli/src/devices.c:1067 ../cli/src/devices.c:1214
+#: ../cli/src/devices.c:1327 ../cli/src/devices.c:1547
+#, c-format
+msgid "Unknown parameter: %s\n"
+msgstr "Nepoznati parametar: %s\n"
+
+#: ../cli/src/connections.c:534
+#, c-format
+msgid "Error: no valid parameter specified."
+msgstr "Greška: nije određen važeći parametar."
+
+#: ../cli/src/connections.c:549 ../cli/src/connections.c:1627
+#: ../cli/src/devices.c:1755 ../cli/src/network-manager.c:463
+#, c-format
+msgid "Error: %s."
+msgstr "Greška: %s."
+
+#: ../cli/src/connections.c:637
+#, c-format
+msgid "Error: 'con status': %s"
+msgstr "Greška: 'con status': %s"
+
+#: ../cli/src/connections.c:639
+#, c-format
+msgid "Error: 'con status': %s; allowed fields: %s"
+msgstr "Greška: 'con status': %s; dozvoljena polja: %s"
+
+#: ../cli/src/connections.c:647 ../cli/src/connections.c:1452
+#: ../cli/src/connections.c:1551 ../cli/src/devices.c:1014
+#: ../cli/src/devices.c:1076 ../cli/src/devices.c:1229
+#: ../cli/src/devices.c:1357 ../cli/src/devices.c:1576
+#, c-format
+msgid "Error: Can't find out if NetworkManager is running: %s."
+msgstr "Greška: Ne mogu otkriti je li NetworkManager pokrenut: %s."
+
+#: ../cli/src/connections.c:651 ../cli/src/connections.c:1456
+#: ../cli/src/connections.c:1555 ../cli/src/devices.c:1018
+#: ../cli/src/devices.c:1080 ../cli/src/devices.c:1233
+#: ../cli/src/devices.c:1361 ../cli/src/devices.c:1580
+#, c-format
+#| msgid "NetworkManager is not running"
+msgid "Error: NetworkManager is not running."
+msgstr "Greška: NetworkManager nije pokrenut."
+
+#: ../cli/src/connections.c:659
+#| msgid "Wired network connection"
+msgid "Active connections"
+msgstr "Aktivne veze"
+
+#: ../cli/src/connections.c:1095
+#, c-format
+msgid "no active connection on device '%s'"
+msgstr "nema aktivne veze na uređaju '%s'"
+
+#: ../cli/src/connections.c:1103
+#, c-format
+msgid "no active connection or device"
+msgstr "nema aktivne veze ili uređaja"
+
+#: ../cli/src/connections.c:1174
+#, c-format
+msgid "device '%s' not compatible with connection '%s'"
+msgstr "uređaj '%s' ne podržava vezu '%s'"
+
+#: ../cli/src/connections.c:1176
+#, c-format
+msgid "no device found for connection '%s'"
+msgstr "nije pronađen uređaj za vezu '%s'"
+
+#: ../cli/src/connections.c:1187
+msgid "activating"
+msgstr "aktiviram"
+
+#: ../cli/src/connections.c:1189
+msgid "activated"
+msgstr "aktivirano"
+
+#: ../cli/src/connections.c:1191 ../cli/src/devices.c:304
+msgid "deactivating"
+msgstr "deaktiviram"
+
+#: ../cli/src/connections.c:1194 ../cli/src/connections.c:1217
+#: ../cli/src/connections.c:1250 ../cli/src/devices.c:308
+#: ../cli/src/devices.c:688 ../cli/src/network-manager.c:118
+#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:183
+#: ../cli/src/network-manager.c:192 ../cli/src/network-manager.c:298
+#: ../cli/src/network-manager.c:353 ../cli/src/network-manager.c:391
+#: ../cli/src/network-manager.c:430 ../cli/src/settings.c:485
+#: ../cli/src/utils.c:396
+msgid "unknown"
+msgstr "nepoznato"
+
+#: ../cli/src/connections.c:1203
+msgid "VPN connecting (prepare)"
+msgstr "VPN spajanje (priprema)"
+
+#: ../cli/src/connections.c:1205
+msgid "VPN connecting (need authentication)"
+msgstr "VPN spajanje (potrebna potvrda)"
+
+#: ../cli/src/connections.c:1207
+#| msgid "No network connection"
+msgid "VPN connecting"
+msgstr "VPN spajanje"
+
+#: ../cli/src/connections.c:1209
+msgid "VPN connecting (getting IP configuration)"
+msgstr "VPN spajanje (dohvat IP konfiguracije)"
+
+#: ../cli/src/connections.c:1211
+msgid "VPN connected"
+msgstr "VPN spojen"
+
+#: ../cli/src/connections.c:1213
+msgid "VPN connection failed"
+msgstr "VPN spajanje neuspješno"
+
+#: ../cli/src/connections.c:1215
+msgid "VPN disconnected"
+msgstr "VPN odspojen"
+
+#: ../cli/src/connections.c:1226
+msgid "unknown reason"
+msgstr "nepoznat razlog"
+
+#: ../cli/src/connections.c:1228
+msgid "none"
+msgstr "nijedan"
+
+#: ../cli/src/connections.c:1230
+msgid "the user was disconnected"
+msgstr "korisnik je odspojen"
+
+#: ../cli/src/connections.c:1232
+#| msgid "Wireless network connection"
+msgid "the base network connection was interrupted"
+msgstr "osnovna mrežna veza je prekinuta"
+
+#: ../cli/src/connections.c:1234
+msgid "the VPN service stopped unexpectedly"
+msgstr "VPN servis je neočekivano zaustavljen"
+
+#: ../cli/src/connections.c:1236
+msgid "the VPN service returned invalid configuration"
+msgstr "VPN servis je vratio nevažeću konfiguraciju"
+
+#: ../cli/src/connections.c:1238
+msgid "the connection attempt timed out"
+msgstr "vrijeme spajanja je prekoračeno"
+
+#: ../cli/src/connections.c:1240
+msgid "the VPN service did not start in time"
+msgstr "VPN servis nije pokrenut pravovremeno"
+
+#: ../cli/src/connections.c:1242
+msgid "the VPN service failed to start"
+msgstr "VPN servis nije pokrenut"
+
+#: ../cli/src/connections.c:1244
+msgid "no valid VPN secrets"
+msgstr "nema važećih VPN tajni"
+
+#: ../cli/src/connections.c:1246
+msgid "invalid VPN secrets"
+msgstr "nevažeće VPN tajne"
+
+#: ../cli/src/connections.c:1248
+msgid "the connection was removed"
+msgstr "veza je uklonjena"
+
+#: ../cli/src/connections.c:1262
+#, c-format
+msgid "state: %s\n"
+msgstr "stanje: %s\n"
+
+#: ../cli/src/connections.c:1265 ../cli/src/connections.c:1291
+#, c-format
+msgid "Connection activated\n"
+msgstr "Veza aktivirana\n"
+
+#: ../cli/src/connections.c:1268
+#, c-format
+msgid "Error: Connection activation failed."
+msgstr "Greška: Aktivacija veze neuspješna."
+
+#: ../cli/src/connections.c:1287
+#, c-format
+msgid "state: %s (%d)\n"
+msgstr "stanje: %s (%d)\n"
+
+#: ../cli/src/connections.c:1297
+#, c-format
+msgid "Error: Connection activation failed: %s."
+msgstr "Greška: Aktivacija veze neuspješna: %s."
+
+#: ../cli/src/connections.c:1314 ../cli/src/devices.c:1136
+#, c-format
+msgid "Error: Timeout %d sec expired."
+msgstr "Greška: Vrijeme spajanja %d sekundi prekoračeno."
+
+#: ../cli/src/connections.c:1327
+#, c-format
+msgid "Error: Connection activation failed: %s"
+msgstr "Greška: Aktivacija veze neuspješna: %s"
+
+#: ../cli/src/connections.c:1333
+#, c-format
+msgid "Active connection state: %s\n"
+msgstr "Stanje aktivne veze: %s\n"
+
+#: ../cli/src/connections.c:1334
+#, c-format
+msgid "Active connection path: %s\n"
+msgstr "Putanja aktivne veze: %s\n"
+
+#: ../cli/src/connections.c:1386 ../cli/src/connections.c:1527
+#, c-format
+msgid "Error: Unknown connection: %s."
+msgstr "Greška: Nepoznata veza: %s."
+
+#: ../cli/src/connections.c:1432 ../cli/src/devices.c:1208
+#, c-format
+msgid "Error: timeout value '%s' is not valid."
+msgstr "Greška: vrijednost vremena spajanja '%s' nije važeća."
+
+#: ../cli/src/connections.c:1445 ../cli/src/connections.c:1544
+#, c-format
+msgid "Error: id or uuid has to be specified."
+msgstr "Greška: id ili uuid mora biti određen."
+
+#: ../cli/src/connections.c:1473
+#, c-format
+msgid "Error: No suitable device found: %s."
+msgstr "Greška: Prikladni uređaji nisu pronađeni: %s."
+
+#: ../cli/src/connections.c:1475
+#, c-format
+msgid "Error: No suitable device found."
+msgstr "Greška: Prikladni uređaji nisu pronađeni."
+
+#: ../cli/src/connections.c:1580
+#, c-format
+msgid "Warning: Connection not active\n"
+msgstr "Upozorenje: Veza nije aktivna\n"
+
+#: ../cli/src/connections.c:1618
+#, c-format
+msgid "Error: 'con' command '%s' is not valid."
+msgstr "Greška: 'con' naredba '%s' nije važeća."
+
+#: ../cli/src/connections.c:1683
+#, c-format
+msgid "Error: could not connect to D-Bus."
+msgstr "Greška: neuspješno spajanje na D-Bus."
+
+#: ../cli/src/connections.c:1690
+#, c-format
+msgid "Error: Could not get system settings."
+msgstr "Greška: Neuspješan dohvat postavki sustava."
+
+#: ../cli/src/connections.c:1700
+#, c-format
+msgid "Error: Can't obtain connections: settings service is not running."
+msgstr "Greška: Neuspješan dohvat veza: servis postavki nije pokrenut."
+
+#. 0
+#. 9
+#. 3
+#: ../cli/src/devices.c:66 ../cli/src/devices.c:102 ../cli/src/devices.c:212
+#: ../cli/src/devices.c:228
+msgid "DEVICE"
+msgstr "UREĐAJ"
+
+#. 1
+#. 4
+#. 1
+#: ../cli/src/devices.c:68 ../cli/src/devices.c:106
+#: ../cli/src/network-manager.c:39
+msgid "STATE"
+msgstr "STANJE"
+
+#: ../cli/src/devices.c:78
+msgid "GENERAL"
+msgstr "OPĆENITO"
+
+#. 0
+#: ../cli/src/devices.c:79
+msgid "CAPABILITIES"
+msgstr "MOGUĆNOSTI"
+
+#. 1
+#: ../cli/src/devices.c:80
+msgid "WIFI-PROPERTIES"
+msgstr "WIFI-SVOJSTVA"
+
+#. 2
+#: ../cli/src/devices.c:81
+msgid "AP"
+msgstr "AP"
+
+#. 3
+#: ../cli/src/devices.c:82
+#, fuzzy
+msgid "WIRED-PROPERTIES"
+msgstr "ŽIČNO-SVOJSTVA"
+
+#. 4
+#: ../cli/src/devices.c:83
+msgid "WIMAX-PROPERTIES"
+msgstr "WIMAX-SVOJSTVA"
+
+#. 5
+#. 0
+#: ../cli/src/devices.c:84 ../cli/src/devices.c:225
+msgid "NSP"
+msgstr "NSP"
+
+#. 6
+#: ../cli/src/devices.c:85
+msgid "IP4-SETTINGS"
+msgstr "IP4-POSTAVKE"
+
+#. 7
+#: ../cli/src/devices.c:86
+msgid "IP4-DNS"
+msgstr "IP4-DNS"
+
+#. 8
+#: ../cli/src/devices.c:87
+msgid "IP6-SETTINGS"
+msgstr "IP6-POSTAVKE"
+
+#. 9
+#: ../cli/src/devices.c:88
+msgid "IP6-DNS"
+msgstr "IP6-DNS"
+
+#. 2
+#: ../cli/src/devices.c:104
+#, fuzzy
+msgid "DRIVER"
+msgstr "DRIVER"
+
+#. 3
+#: ../cli/src/devices.c:105
+#, fuzzy
+msgid "HWADDR"
+msgstr "HWADDR"
+
+#. 0
+#: ../cli/src/devices.c:115
+#, fuzzy
+msgid "CARRIER-DETECT"
+msgstr "OTKRIVANJE-NOSIOCA"
+
+#. 1
+#: ../cli/src/devices.c:116
+msgid "SPEED"
+msgstr "BRZINA"
+
+#. 0
+#: ../cli/src/devices.c:125
+msgid "CARRIER"
+msgstr "NOSIOC"
+
+#. 0
+#: ../cli/src/devices.c:135
+msgid "WEP"
+msgstr "WEP"
+
+#. 1
+#: ../cli/src/devices.c:136
+msgid "WPA"
+msgstr "WPA"
+
+#. 2
+#: ../cli/src/devices.c:137
+msgid "WPA2"
+msgstr "WPA2"
+
+#. 3
+#: ../cli/src/devices.c:138
+msgid "TKIP"
+msgstr "TKIP"
+
+#. 4
+#: ../cli/src/devices.c:139
+msgid "CCMP"
+msgstr "CCMP"
+
+#. 0
+#: ../cli/src/devices.c:149
+#, fuzzy
+msgid "CTR-FREQ"
+msgstr "CTR-FREQ"
+
+#. 1
+#: ../cli/src/devices.c:150
+msgid "RSSI"
+msgstr "RSSI"
+
+#. 2
+#: ../cli/src/devices.c:151
+msgid "CINR"
+msgstr "CINR"
+
+#. 3
+#: ../cli/src/devices.c:152
+#, fuzzy
+msgid "TX-POW"
+msgstr "TX-POW"
+
+#. 4
+#: ../cli/src/devices.c:153
+msgid "BSID"
+msgstr "BSID"
+
+#. 0
+#: ../cli/src/devices.c:163 ../cli/src/devices.c:174
+msgid "ADDRESS"
+msgstr "ADRESA"
+
+#. 1
+#: ../cli/src/devices.c:164 ../cli/src/devices.c:175
+msgid "PREFIX"
+msgstr "PREFIKS"
+
+#. 2
+#: ../cli/src/devices.c:165 ../cli/src/devices.c:176
+#, fuzzy
+msgid "GATEWAY"
+msgstr "GATEWAY"
+
+#. 0
+#: ../cli/src/devices.c:185 ../cli/src/devices.c:194
+msgid "DNS"
+msgstr "DNS"
+
+#. 0
+#: ../cli/src/devices.c:203
+msgid "SSID"
+msgstr "SSID"
+
+#. 1
+#: ../cli/src/devices.c:204
+msgid "BSSID"
+msgstr "BSSID"
+
+#. 2
+#: ../cli/src/devices.c:205
+#, fuzzy
+msgid "MODE"
+msgstr "NAČIN"
+
+#. 3
+#: ../cli/src/devices.c:206
+msgid "FREQ"
+msgstr "FREKVENCIJA"
+
+#. 4
+#: ../cli/src/devices.c:207
+msgid "RATE"
+msgstr "BRZINA"
+
+#. 5
+#. 1
+#: ../cli/src/devices.c:208 ../cli/src/devices.c:226
+msgid "SIGNAL"
+msgstr "SIGNAL"
+
+#. 6
+#: ../cli/src/devices.c:209
+msgid "SECURITY"
+msgstr "SIGURNOST"
+
+#. 7
+#: ../cli/src/devices.c:210
+msgid "WPA-FLAGS"
+msgstr "WPA-ZASTAVICE"
+
+#. 8
+#: ../cli/src/devices.c:211
+msgid "RSN-FLAGS"
+msgstr "RSN-ZASTAVICE"
+
+#. 10
+#. 4
+#: ../cli/src/devices.c:213 ../cli/src/devices.c:229
+msgid "ACTIVE"
+msgstr "AKTIVAN"
+
+#: ../cli/src/devices.c:256
+#, c-format
+msgid ""
+"Usage: nmcli dev { COMMAND | help }\n"
+"\n"
+"  COMMAND := { status | list | disconnect | wifi | wimax }\n"
+"\n"
+"  COMMAND := { status | list | disconnect | wifi }\n"
+"\n"
+"  status\n"
+"  list [iface <iface>]\n"
+"  disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
+"  wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+"  wimax [list [iface <iface>] [nsp <name>]]\n"
+"\n"
+msgstr ""
+"Uporaba: nmcli dev { NAREDBA | help }\n"
+"\n"
+"  NAREDBA := { status | list | disconnect | wifi | wimax }\n"
+"\n"
+"  NAREDBA := { status | list | disconnect | wifi }\n"
+"\n"
+"  status\n"
+"  list [iface <iface>]\n"
+"  disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
+"  wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+"  wimax [list [iface <iface>] [nsp <name>]]\n"
+"\n"
+
+#: ../cli/src/devices.c:284
+msgid "unmanaged"
+msgstr "neupravljan"
+
+#: ../cli/src/devices.c:286
+msgid "unavailable"
+msgstr "nedostupan"
+
+#: ../cli/src/devices.c:288 ../cli/src/network-manager.c:115
+#| msgid "C_onnect"
+msgid "disconnected"
+msgstr "odspojen"
+
+#: ../cli/src/devices.c:290
+msgid "connecting (prepare)"
+msgstr "spajanje (priprema)"
+
+#: ../cli/src/devices.c:292
+msgid "connecting (configuring)"
+msgstr "spajanje (konfiguracija)"
+
+#: ../cli/src/devices.c:294
+msgid "connecting (need authentication)"
+msgstr "spajanje (potrebna potvrda)"
+
+#: ../cli/src/devices.c:296
+msgid "connecting (getting IP configuration)"
+msgstr "spajanje (dohvat IP konfiguracije)"
+
+#: ../cli/src/devices.c:298
+msgid "connecting (checking IP connectivity)"
+msgstr "spajanje (provjera IP spojivosti)"
+
+#: ../cli/src/devices.c:300
+msgid "connecting (starting secondary connections)"
+msgstr "spajanje (pokretanje sekundarnih veza)"
+
+#: ../cli/src/devices.c:302 ../cli/src/network-manager.c:111
+#| msgid "C_onnect"
+msgid "connected"
+msgstr "spojen"
+
+#: ../cli/src/devices.c:306
+msgid "connection failed"
+msgstr "spajanje neuspješno"
+
+#: ../cli/src/devices.c:331 ../cli/src/devices.c:341 ../cli/src/devices.c:501
+#: ../cli/src/devices.c:545
+msgid "Unknown"
+msgstr "Nepoznat"
+
+#: ../cli/src/devices.c:374
+msgid "(none)"
+msgstr "(nijedan)"
+
+#: ../cli/src/devices.c:399
+#, c-format
+msgid "%s: error converting IP4 address 0x%X"
+msgstr "%s: greška pretvorbe IP4 adrese 0x%X"
+
+#: ../cli/src/devices.c:470
+#, c-format
+msgid "%u MHz"
+msgstr "%u MHz"
+
+#: ../cli/src/devices.c:471
+#, c-format
+msgid "%u MB/s"
+msgstr "%u MB/s"
+
+#: ../cli/src/devices.c:480
+msgid "Encrypted: "
+msgstr "Zaštićeno: "
+
+#: ../cli/src/devices.c:485
+msgid "WEP "
+msgstr "WEP "
+
+#: ../cli/src/devices.c:487
+msgid "WPA "
+msgstr "WPA "
+
+#: ../cli/src/devices.c:489
+msgid "WPA2 "
+msgstr "WPA2 "
+
+#: ../cli/src/devices.c:492
+msgid "Enterprise "
+msgstr "Enterprise "
+
+#: ../cli/src/devices.c:501
+msgid "Ad-Hoc"
+msgstr "Ad-Hoc"
+
+#: ../cli/src/devices.c:501
+msgid "Infrastructure"
+msgstr "Infrastruktura"
+
+#: ../cli/src/devices.c:536
+msgid "Home"
+msgstr "Početna"
+
+#: ../cli/src/devices.c:539
+msgid "Partner"
+msgstr "Partner"
+
+#: ../cli/src/devices.c:542
+msgid "Roaming"
+msgstr "Roaming"
+
+#: ../cli/src/devices.c:612
+#, c-format
+msgid "Error: 'dev list': %s"
+msgstr "Greška: 'dev list': %s"
+
+#: ../cli/src/devices.c:614
+#, c-format
+msgid "Error: 'dev list': %s; allowed fields: %s"
+msgstr "Greška: 'dev list': %s; dozvoljena polja: %s"
+
+#: ../cli/src/devices.c:623
+msgid "Device details"
+msgstr "Detalji uređaja"
+
+#: ../cli/src/devices.c:657 ../cli/src/devices.c:1152 ../cli/src/utils.c:342
+msgid "(unknown)"
+msgstr "(nepoznat)"
+
+#: ../cli/src/devices.c:658
+msgid "unknown)"
+msgstr "nepoznat)"
+
+#: ../cli/src/devices.c:684
+#, c-format
+msgid "%u Mb/s"
+msgstr "%u Mb/s"
+
+#. Print header
+#. "WIRED-PROPERTIES"
+#: ../cli/src/devices.c:757
+msgid "on"
+msgstr "uključen"
+
+#: ../cli/src/devices.c:757
+msgid "off"
+msgstr "isključen"
+
+#: ../cli/src/devices.c:1004
+#, c-format
+msgid "Error: 'dev status': %s"
+msgstr "Greška: 'dev status': %s"
+
+#: ../cli/src/devices.c:1006
+#, c-format
+msgid "Error: 'dev status': %s; allowed fields: %s"
+msgstr "Greška: 'dev status': s; dozvoljena polja: %s"
+
+#: ../cli/src/devices.c:1029
+msgid "Status of devices"
+msgstr "Stanje uređaja"
+
+#: ../cli/src/devices.c:1060
+#, c-format
+msgid "Error: '%s' argument is missing."
+msgstr "Greška: nedostaje argument '%s'."
+
+#: ../cli/src/devices.c:1101 ../cli/src/devices.c:1253
+#: ../cli/src/devices.c:1389 ../cli/src/devices.c:1608
+#, c-format
+msgid "Error: Device '%s' not found."
+msgstr "Greška: Uređaj '%s' nije pronađen."
+
+#: ../cli/src/devices.c:1124
+#, c-format
+msgid "Success: Device '%s' successfully disconnected."
+msgstr "Uspjeh: Uređaj '%s' uspješno odspojen."
+
+#: ../cli/src/devices.c:1149
+#, c-format
+msgid "Error: Device '%s' (%s) disconnecting failed: %s"
+msgstr "Greška: Odspajanje uređaja '%s' (%s) neuspješno: %s"
+
+#: ../cli/src/devices.c:1157
+#, c-format
+msgid "Device state: %d (%s)\n"
+msgstr "Stanje uređaja: %d (%s) \n"
+
+#: ../cli/src/devices.c:1222
+#, c-format
+msgid "Error: iface has to be specified."
+msgstr "Greška: iface mora biti određen."
+
+#: ../cli/src/devices.c:1347
+#, c-format
+msgid "Error: 'dev wifi': %s"
+msgstr "Greška: 'dev wifi': %s"
+
+#: ../cli/src/devices.c:1349
+#, c-format
+msgid "Error: 'dev wifi': %s; allowed fields: %s"
+msgstr "Greška: 'dev wifi': %s; dozvoljena polja: %s"
+
+#: ../cli/src/devices.c:1372
+msgid "WiFi scan list"
+msgstr "WiFi rezultati skeniranja"
+
+#: ../cli/src/devices.c:1409 ../cli/src/devices.c:1463
+#: ../cli/src/devices.c:1670
+#, c-format
+msgid "Error: Access point with hwaddr '%s' not found."
+msgstr "Greška: Pristupna točka adrese '%s' nije pronađena."
+
+#: ../cli/src/devices.c:1426
+#, c-format
+msgid "Error: Device '%s' is not a WiFi device."
+msgstr "Greška: Uređaj '%s' nije WiFi uređaj."
+
+#: ../cli/src/devices.c:1490
+#, c-format
+msgid "Error: 'dev wifi' command '%s' is not valid."
+msgstr "Greška: 'dev wifi' naredba '%s' nije važeća."
+
+#: ../cli/src/devices.c:1566
+#, c-format
+msgid "Error: 'dev wimax': %s"
+msgstr "Greška: 'dev wimax': %s"
+
+#: ../cli/src/devices.c:1568
+#, c-format
+msgid "Error: 'dev wimax': %s; allowed fields: %s"
+msgstr "Greška: 'dev wimax': %s; dozvoljena polja: %s"
+
+#: ../cli/src/devices.c:1591
+msgid "WiMAX NSP list"
+msgstr "WiMAX NSP popis"
+
+#: ../cli/src/devices.c:1628
+#, c-format
+msgid "Error: NSP with name '%s' not found."
+msgstr "Greška: NSP imena '%s' nije pronađen."
+
+#: ../cli/src/devices.c:1639
+#, c-format
+msgid "Error: Device '%s' is not a WiMAX device."
+msgstr "Greška: Uređaj '%s' nije WiMAX uređaj."
+
+#: ../cli/src/devices.c:1697
+#, c-format
+msgid "Error: 'dev wimax' command '%s' is not valid."
+msgstr "Greška: 'dev wimax' naredba '%s' nije važeća."
+
+#: ../cli/src/devices.c:1747
+#, c-format
+msgid "Error: 'dev' command '%s' is not valid."
+msgstr "Greška: 'dev' naredba '%s' nije važeća."
+
+#: ../cli/src/network-manager.c:37
+msgid "RUNNING"
+msgstr "POKRENUT"
+
+#. 0
+#: ../cli/src/network-manager.c:38
+msgid "VERSION"
+msgstr "VERZIJA"
+
+#. 2
+#: ../cli/src/network-manager.c:40
+#, fuzzy
+msgid "NET-ENABLED"
+msgstr "MREŽA-OMOGUĆENA"
+
+#. 3
+#: ../cli/src/network-manager.c:41
+#, fuzzy
+msgid "WIFI-HARDWARE"
+msgstr "WIFI-HARDVER"
+
+#. 4
+#: ../cli/src/network-manager.c:42
+msgid "WIFI"
+msgstr "WIFI"
+
+#. 5
+#: ../cli/src/network-manager.c:43
+#, fuzzy
+msgid "WWAN-HARDWARE"
+msgstr "WWAN-HARDVER"
+
+#. 6
+#: ../cli/src/network-manager.c:44
+msgid "WWAN"
+msgstr "WWAN"
+
+#. 7
+#: ../cli/src/network-manager.c:45
+#, fuzzy
+msgid "WIMAX-HARDWARE"
+msgstr "WIMAX-HARDVER"
+
+#. 8
+#: ../cli/src/network-manager.c:46
+msgid "WIMAX"
+msgstr "WIMAX"
+
+#: ../cli/src/network-manager.c:74
+#, c-format
+msgid ""
+"Usage: nmcli nm { COMMAND | help }\n"
+"\n"
+"  COMMAND := { status | enable | sleep | wifi | wwan | wimax }\n"
+"\n"
+"  COMMAND := { status | enable | sleep | wifi | wwan }\n"
+"\n"
+"  status\n"
+"  enable [true|false]\n"
+"  sleep [true|false]\n"
+"  wifi [on|off]\n"
+"  wwan [on|off]\n"
+"  wimax [on|off]\n"
+"\n"
+msgstr ""
+"Uporaba: nmcli nm { NAREDBA | help }\n"
+"\n"
+"  NAREDBA := { status | enable | sleep | wifi | wwan | wimax }\n"
+"\n"
+"  NAREDBA := { status | enable | sleep | wifi | wwan }\n"
+"\n"
+"  status\n"
+"  enable [true|false]\n"
+"  sleep [true|false]\n"
+"  wifi [on|off]\n"
+"  wwan [on|off]\n"
+"  wimax [on|off]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:103
+#, fuzzy
+msgid "asleep"
+msgstr "u stanju čekanja"
+
+#: ../cli/src/network-manager.c:105
+#| msgid "C_onnect"
+msgid "connecting"
+msgstr "spajanje"
+
+#: ../cli/src/network-manager.c:107
+msgid "connected (local only)"
+msgstr "spojen (lokalna veza)"
+
+#: ../cli/src/network-manager.c:109
+msgid "connected (site only)"
+msgstr ""
+
+#: ../cli/src/network-manager.c:113
+msgid "disconnecting"
+msgstr "odspajanje"
+
+#: ../cli/src/network-manager.c:153
+#, c-format
+msgid "Error: 'nm status': %s"
+msgstr "Greška: 'nm status': %s"
+
+#: ../cli/src/network-manager.c:155
+#, c-format
+msgid "Error: 'nm status': %s; allowed fields: %s"
+msgstr "Greška: 'nm status': %s; dozvoljena polja: %s"
+
+#. create NMClient
+#: ../cli/src/network-manager.c:168 ../cli/src/network-manager.c:169
+#: ../cli/src/network-manager.c:170 ../cli/src/network-manager.c:171
+#: ../cli/src/network-manager.c:172 ../cli/src/network-manager.c:174
+#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:296
+#: ../cli/src/network-manager.c:351 ../cli/src/network-manager.c:389
+#: ../cli/src/network-manager.c:428
+msgid "enabled"
+msgstr "omogućen"
+
+#: ../cli/src/network-manager.c:168 ../cli/src/network-manager.c:169
+#: ../cli/src/network-manager.c:170 ../cli/src/network-manager.c:171
+#: ../cli/src/network-manager.c:172 ../cli/src/network-manager.c:174
+#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:296
+#: ../cli/src/network-manager.c:351 ../cli/src/network-manager.c:389
+#: ../cli/src/network-manager.c:428
+msgid "disabled"
+msgstr "onemogućen"
+
+#: ../cli/src/network-manager.c:188
+#| msgid "NetworkManager is not running"
+msgid "NetworkManager status"
+msgstr "NetworkManager stanje"
+
+#. Print header
+#: ../cli/src/network-manager.c:191
+msgid "running"
+msgstr "pokrenut"
+
+#: ../cli/src/network-manager.c:191
+msgid "not running"
+msgstr "nije pokrenut"
 
-#: info-daemon/networks.glade:11
-msgid "Modify Wireless Networks"
-msgstr "Postavke bežičnih mreža"
+#: ../cli/src/network-manager.c:222 ../cli/src/utils.c:322
+#, c-format
+msgid "Error: Couldn't connect to system bus: %s"
+msgstr "Greška: Neuspješno spajanje na sabirnicu sustava: %s"
+
+#: ../cli/src/network-manager.c:233
+#, c-format
+msgid "Error: Couldn't create D-Bus object proxy."
+msgstr ""
+
+#: ../cli/src/network-manager.c:239
+#, c-format
+msgid "Error in sleep: %s"
+msgstr "Pogreška u čekanju: %s"
 
-#: info-daemon/networks.glade:92
-msgid "<span weight=\"bold\">Wireless Networks:</span>"
-msgstr "<span weight=\"bold\">Bežične mreže:</span>"
+#: ../cli/src/network-manager.c:283 ../cli/src/network-manager.c:338
+#: ../cli/src/network-manager.c:376 ../cli/src/network-manager.c:415
+#, c-format
+msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
+msgstr "Greška: '--fields' vrijednost '%s' nije važeća; dozvoljena polja: %s"
+
+#: ../cli/src/network-manager.c:291
+msgid "Networking enabled"
+msgstr "Umrežavanje omogućeno"
+
+#: ../cli/src/network-manager.c:307
+#, c-format
+msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
+msgstr ""
+"Greška: nevažeći 'enable' parametar: '%s'; dozvoljeni su 'true' i 'false'."
 
-#: info-daemon/passphrase.glade:9
-msgid "Wireless Network Key Required"
-msgstr "Potreban je ključ bežične mreže"
+#: ../cli/src/network-manager.c:317
+#, c-format
+msgid "Error: Sleeping status is not exported by NetworkManager."
+msgstr "Greška: NetworkManager nije izveo stanje čekanja."
+
+#: ../cli/src/network-manager.c:325
+#, c-format
+msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
+msgstr ""
+"Greška: nevažeći 'sleep' parametar: '%s'; dozvoljeni su 'true' i 'false'."
+
+#: ../cli/src/network-manager.c:346
+msgid "WiFi enabled"
+msgstr "WiFi omogućen"
+
+#: ../cli/src/network-manager.c:362
+#, c-format
+msgid "Error: invalid 'wifi' parameter: '%s'."
+msgstr "Greška: nevažeći 'wifi' parametar: '%s'."
+
+#: ../cli/src/network-manager.c:384
+msgid "WWAN enabled"
+msgstr "WWAN omogućen"
+
+#: ../cli/src/network-manager.c:400
+#, c-format
+msgid "Error: invalid 'wwan' parameter: '%s'."
+msgstr "Greška: nevažeći 'wwan' parametar: '%s'."
 
-#: info-daemon/passphrase.glade:52
-msgid "_Login to Network"
-msgstr "_Prijava na mrežu"
+#: ../cli/src/network-manager.c:423
+msgid "WiMAX enabled"
+msgstr "WiMAX omogućen"
 
-#: info-daemon/passphrase.glade:100
+#: ../cli/src/network-manager.c:439
+#, c-format
+msgid "Error: invalid 'wimax' parameter: '%s'."
+msgstr "Greška: nevažeći 'wimax' parametar: '%s'."
+
+#: ../cli/src/network-manager.c:452
+#, c-format
+msgid "Error: 'nm' command '%s' is not valid."
+msgstr "Greška: 'nm' naredba '%s' nije važeća."
+
+#: ../cli/src/nmcli.c:64
+#, c-format
 msgid ""
-"<span weight=\"bold\" size=\"larger\">Passphrase Required by Wireless "
-"Network</span>\n"
+"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
+"\n"
+"OPTIONS\n"
+"  -t[erse]                                   terse output\n"
+"  -p[retty]                                  pretty output\n"
+"  -m[ode] tabular|multiline                  output mode\n"
+"  -f[ields] <field1,field2,...>|all|common   specify fields to output\n"
+"  -e[scape] yes|no                           escape columns separators in "
+"values\n"
+"  -n[ocheck]                                 don't check nmcli and "
+"NetworkManager versions\n"
+"  -v[ersion]                                 show program version\n"
+"  -h[elp]                                    print this help\n"
+"\n"
+"OBJECT\n"
+"  nm          NetworkManager status\n"
+"  con         NetworkManager connections\n"
+"  dev         devices managed by NetworkManager\n"
 "\n"
-"A passphrase or encryption key is required to access the wireless network '%"
-"s'."
 msgstr ""
-"<span weight=\"bold\" size=\"larger\">Potrebna je lozinka za bežičnu mrežu</"
-"span>\n"
+"Uporaba: %s [OPCIJE] OBJEKT { NAREDBA | help }\n"
+"\n"
+"OPCIJE\n"
+"  -t[erse]                                   sažet ispis\n"
+"  -p[retty]                                  uljepšan ispis\n"
+"  -m[ode] tabular|multiline                  način ispisa\n"
+"  -f[ields] <field1,field2,...>|all|common   određuje polja koja će se "
+"ispisati\n"
+"  -e[scape] yes|no                           izbacuje razdjelnike stupaca u "
+"vrijednostima\n"
+"  -n[ocheck]                                 bez provjere verzija nmcli i "
+"NetworkManagera\n"
+"  -v[ersion]                                 prikazuje verziju programa\n"
+"  -h[elp]                                    ispisuje ovu pomoć\n"
 "\n"
-"Za pristup mreži '%s', potrebna je lozinka ili ključ."
+"OBJEKT\n"
+"  nm          NetworkManager stanje\n"
+"  con         NetworkManager veze\n"
+"  dev         uređaji kojima upravlja NetworkManager\n"
+"\n"
+
+#: ../cli/src/nmcli.c:109
+#, c-format
+msgid "Error: Object '%s' is unknown, try 'nmcli help'."
+msgstr "Greška: Objekt '%s' je nepoznat, pokušajte 'nmcli help'."
+
+#: ../cli/src/nmcli.c:139
+#, c-format
+msgid "Error: Option '--terse' is specified the second time."
+msgstr "Greška: Opcija '--terse' označena dva puta."
+
+#: ../cli/src/nmcli.c:144
+#, c-format
+msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
+msgstr "Greška: Opcije '--terse' i '--pretty' se međusobno isključuju."
+
+#: ../cli/src/nmcli.c:152
+#, c-format
+msgid "Error: Option '--pretty' is specified the second time."
+msgstr "Greška: Opcija '--pretty' označena dva puta."
+
+#: ../cli/src/nmcli.c:157
+#, c-format
+msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
+msgstr "Greška: Opcije '--pretty' i '--terse' se međusobno isključuju."
+
+#: ../cli/src/nmcli.c:167 ../cli/src/nmcli.c:183
+#, c-format
+msgid "Error: missing argument for '%s' option."
+msgstr "Greška: nedostaje argument za opciju '%s'."
+
+#: ../cli/src/nmcli.c:176 ../cli/src/nmcli.c:192
+#, c-format
+msgid "Error: '%s' is not valid argument for '%s' option."
+msgstr "Greška: nevažeći argument '%s' za opciju '%s'."
+
+#: ../cli/src/nmcli.c:199
+#, c-format
+msgid "Error: fields for '%s' options are missing."
+msgstr "Greška: nedostaju polja za opciju '%s'."
+
+#: ../cli/src/nmcli.c:207
+#, c-format
+msgid "nmcli tool, version %s\n"
+msgstr "nmcli alat, verzija %s\n"
+
+#: ../cli/src/nmcli.c:213
+#, c-format
+msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
+msgstr "Greška: Nepoznata opcija '%s', pokušajte 'nmcli -help'."
+
+#: ../cli/src/nmcli.c:232
+#, c-format
+msgid "Caught signal %d, shutting down..."
+msgstr "Primljen signal %d, isključujem..."
+
+#: ../cli/src/nmcli.c:257
+msgid "Error: Could not create NMClient object."
+msgstr "Greška: Neuspješno stvaranje NMClient objekta."
+
+#: ../cli/src/nmcli.c:273
+msgid "Success"
+msgstr "Uspjeh"
+
+#: ../cli/src/settings.c:423
+#, fuzzy, c-format
+msgid "%d (hex-ascii-key)"
+msgstr "%d (heksadekadski ascii ključ)"
+
+#: ../cli/src/settings.c:425
+#, c-format
+msgid "%d (104/128-bit passphrase)"
+msgstr "%d (104/128-bitna lozinka)"
+
+#: ../cli/src/settings.c:428
+#, c-format
+msgid "%d (unknown)"
+msgstr "%d (nepoznat)"
+
+#: ../cli/src/settings.c:454
+msgid "0 (unknown)"
+msgstr "0 (nepoznat)"
+
+#: ../cli/src/settings.c:460
+msgid "any, "
+msgstr "bilo koji, "
+
+#: ../cli/src/settings.c:462
+msgid "900 MHz, "
+msgstr "900 MHz, "
+
+#: ../cli/src/settings.c:464
+msgid "1800 MHz, "
+msgstr "1800 MHz, "
+
+#: ../cli/src/settings.c:466
+msgid "1900 MHz, "
+msgstr "1900 MHz, "
+
+#: ../cli/src/settings.c:468
+msgid "850 MHz, "
+msgstr "850 MHz, "
+
+#: ../cli/src/settings.c:470
+msgid "WCDMA 3GPP UMTS 2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 2100 MHz, "
+
+#: ../cli/src/settings.c:472
+msgid "WCDMA 3GPP UMTS 1800 MHz, "
+msgstr "WCDMA 3GPP UMTS 1800 MHz, "
+
+#: ../cli/src/settings.c:474
+msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
+
+#: ../cli/src/settings.c:476
+msgid "WCDMA 3GPP UMTS 800 MHz, "
+msgstr "WCDMA 3GPP UMTS 800 MHz, "
+
+#: ../cli/src/settings.c:478
+msgid "WCDMA 3GPP UMTS 850 MHz, "
+msgstr "WCDMA 3GPP UMTS 850 MHz, "
+
+#: ../cli/src/settings.c:480
+msgid "WCDMA 3GPP UMTS 900 MHz, "
+msgstr "WCDMA 3GPP UMTS 900 MHz, "
+
+#: ../cli/src/settings.c:482
+msgid "WCDMA 3GPP UMTS 1700 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700 MHz, "
+
+#: ../cli/src/settings.c:566 ../cli/src/settings.c:732
+msgid "auto"
+msgstr "automatski"
+
+#: ../cli/src/settings.c:727 ../cli/src/settings.c:730
+#: ../cli/src/settings.c:731 ../cli/src/utils.c:176
+msgid "not set"
+msgstr "nije postavljen"
+
+#: ../cli/src/utils.c:128
+#, c-format
+msgid "field '%s' has to be alone"
+msgstr "polje '%s' mora biti samo"
+
+#: ../cli/src/utils.c:131
+#, c-format
+msgid "invalid field '%s'"
+msgstr "nevažeće polje '%s'"
+
+#: ../cli/src/utils.c:150
+#, c-format
+msgid "Option '--terse' requires specifying '--fields'"
+msgstr "Opcija '--terse' zahtijeva označavanje '--fields'"
+
+#: ../cli/src/utils.c:154
+#, c-format
+msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
+msgstr ""
+"Opcija '--terse' zahtijeva označene vrijednosti opcije '--fields', a ne '%s'"
+
+#: ../cli/src/utils.c:333
+#, c-format
+msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"
+msgstr ""
 
-#: info-daemon/passphrase.glade:129 panel-applet/essid.glade:246
-msgid "Key Type:"
-msgstr "Tip ključa:"
+#: ../cli/src/utils.c:341
+#, fuzzy, c-format
+msgid "Error: NameHasOwner request failed: %s"
+msgstr "Greška: NameHasOwner zahtjev neuspješan: %s"
 
-#: info-daemon/passphrase.glade:150 panel-applet/essid.glade:315
+#: ../cli/src/utils.c:386
+#, c-format
 msgid ""
-"128-bit Passphrase (WEP)\n"
-"Ascii Key (WEP)\n"
-"Hex Key (WEP)"
+"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
+"nocheck to suppress the warning.\n"
+msgstr ""
+"Upozorenje: verzije nmcli (%s) i NetworkManager (%s) se ne podudaraju. "
+"Korištenje "
+"--nocheck zanemaruje ovo upozorenje.\n"
+
+#: ../cli/src/utils.c:395
+#, c-format
+msgid ""
+"Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force "
+"execution using --nocheck, but the results are unpredictable."
+msgstr ""
+"Greška: verzije nmcli (%s) i NetworkManager (%s) se ne podudaraju. Korištenje "
+"--nocheck prisiljava izvršavanje, uz moguće neočekivane rezultate.\n."
+
+#: ../libnm-util/crypto.c:133
+#, c-format
+msgid "PEM key file had no end tag '%s'."
+msgstr "Datoteka PEM ključa nema završnu oznaku '%s'."
+
+#: ../libnm-util/crypto.c:146
+#, c-format
+msgid "Doesn't look like a PEM private key file."
+msgstr "Ne izgleda kao datoteka PEM privatnog ključa."
+
+#: ../libnm-util/crypto.c:154
+#, c-format
+msgid "Not enough memory to store PEM file data."
+msgstr "Nedovoljno memorije za spremanje podataka PEM datoteke."
+
+#: ../libnm-util/crypto.c:170
+#, fuzzy, c-format
+msgid "Malformed PEM file: Proc-Type was not first tag."
+msgstr "Deformirana PEM datoteka: Proc-Type nije prva oznaka."
+
+#: ../libnm-util/crypto.c:178
+#, fuzzy, c-format
+msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
+msgstr "Deformirana PEM datoteka: nepoznata Proc-Type oznaka '%s'."
+
+#: ../libnm-util/crypto.c:188
+#, fuzzy, c-format
+msgid "Malformed PEM file: DEK-Info was not the second tag."
+msgstr "Deformirana PEM datoteka: DEK-Info nije druga oznaka."
+
+#: ../libnm-util/crypto.c:199
+#, fuzzy, c-format
+msgid "Malformed PEM file: no IV found in DEK-Info tag."
+msgstr "Deformirana PEM datoteka: IV nije pronađen u DEK-Info oznaci."
+
+#: ../libnm-util/crypto.c:206
+#, fuzzy, c-format
+msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
+msgstr "Deformirana PEM datoteka: nevažeći IV oblik u DEK-Info oznaci."
+
+#: ../libnm-util/crypto.c:219
+#, fuzzy, c-format
+msgid "Malformed PEM file: unknown private key cipher '%s'."
+msgstr "Deformirana PEM datoteka: nepoznata šifra privatnog ključa '%s'."
+
+#: ../libnm-util/crypto.c:238
+#, c-format
+msgid "Could not decode private key."
+msgstr "Neuspješno dekodiranje privatnog ključa."
+
+#: ../libnm-util/crypto.c:284
+msgid "Failed to find expected PKCS#8 start tag."
+msgstr "Neuspješno traženje očekivane PKCS#8 početne oznake."
+
+#: ../libnm-util/crypto.c:292
+#, c-format
+msgid "Failed to find expected PKCS#8 end tag '%s'."
+msgstr "Neuspješno traženje očekivane PKCS#8 krajnje oznake '%s'."
+
+#: ../libnm-util/crypto.c:312
+msgid "Not enough memory to store private key data."
+msgstr "Nedovoljno memorije za spremanje podataka privatnog ključa."
+
+#: ../libnm-util/crypto.c:317
+msgid "Failed to decode PKCS#8 private key."
+msgstr "Neuspješno dekodiranje PKCS#8 privatnog ključa."
+
+#: ../libnm-util/crypto.c:339 ../libnm-util/crypto.c:625
+#, c-format
+msgid "Not enough memory to store certificate data."
+msgstr "Nedovoljno memorije za spremanje podataka certifikata."
+
+#: ../libnm-util/crypto.c:365
+#, c-format
+msgid "IV must be an even number of bytes in length."
+msgstr "IV mora biti dugačak paran broj bajtova."
+
+#: ../libnm-util/crypto.c:374
+#, c-format
+msgid "Not enough memory to store the IV."
+msgstr "Nedovoljno memorije za spremanje IV-a."
+
+#: ../libnm-util/crypto.c:385
+#, c-format
+msgid "IV contains non-hexadecimal digits."
+msgstr "IV sadrži znamenke koje nisu heksadekadske."
+
+#: ../libnm-util/crypto.c:423 ../libnm-util/crypto_gnutls.c:147
+#: ../libnm-util/crypto_gnutls.c:265 ../libnm-util/crypto_nss.c:167
+#: ../libnm-util/crypto_nss.c:332
+#, c-format
+msgid "Private key cipher '%s' was unknown."
+msgstr "Šifra privatnog ključa '%s' je nepoznata."
+
+#: ../libnm-util/crypto.c:432
+#, c-format
+msgid "Not enough memory to decrypt private key."
+msgstr "Nedovoljno memorije za dešifriranje privatnog ključa."
+
+#: ../libnm-util/crypto.c:497
+#, c-format
+msgid "Not enough memory to store decrypted private key."
+msgstr "Nedovoljno memorije za spremanje dešifriranog privatnog ključa."
+
+#: ../libnm-util/crypto.c:542
+#, c-format
+msgid "Unable to determine private key type."
+msgstr "Neuspješno određivanje vrste privatnog ključa."
+
+#: ../libnm-util/crypto.c:597
+#, c-format
+msgid "PEM certificate had no start tag '%s'."
+msgstr "PEM certifikat nema početnu oznaku '%s'."
+
+#: ../libnm-util/crypto.c:606
+#, c-format
+msgid "PEM certificate had no end tag '%s'."
+msgstr "PEM certifikat nema krajnju oznaku '%s'."
+
+#: ../libnm-util/crypto.c:630
+#, c-format
+msgid "Failed to decode certificate."
+msgstr ""
+
+#: ../libnm-util/crypto_gnutls.c:50
+msgid "Failed to initialize the crypto engine."
+msgstr ""
+
+#: ../libnm-util/crypto_gnutls.c:92
+#, c-format
+msgid "Failed to initialize the MD5 engine: %s / %s."
+msgstr ""
+
+#: ../libnm-util/crypto_gnutls.c:155
+#, c-format
+msgid "Invalid IV length (must be at least %zd)."
+msgstr ""
+
+#: ../libnm-util/crypto_gnutls.c:164 ../libnm-util/crypto_nss.c:184
+#, c-format
+msgid "Not enough memory for decrypted key buffer."
+msgstr ""
+
+#: ../libnm-util/crypto_gnutls.c:172
+#, c-format
+msgid "Failed to initialize the decryption cipher context: %s / %s."
+msgstr ""
+
+#: ../libnm-util/crypto_gnutls.c:181
+#, c-format
+msgid "Failed to set symmetric key for decryption: %s / %s."
+msgstr ""
+
+#: ../libnm-util/crypto_gnutls.c:190
+#, c-format
+msgid "Failed to set IV for decryption: %s / %s."
+msgstr ""
+
+#: ../libnm-util/crypto_gnutls.c:199
+#, c-format
+msgid "Failed to decrypt the private key: %s / %s."
+msgstr ""
+
+#: ../libnm-util/crypto_gnutls.c:209 ../libnm-util/crypto_nss.c:263
+#, c-format
+msgid "Failed to decrypt the private key: unexpected padding length."
+msgstr ""
+
+#: ../libnm-util/crypto_gnutls.c:220 ../libnm-util/crypto_nss.c:274
+#, c-format
+msgid "Failed to decrypt the private key."
+msgstr ""
+
+#: ../libnm-util/crypto_gnutls.c:285 ../libnm-util/crypto_nss.c:352
+#, c-format
+msgid "Could not allocate memory for encrypting."
+msgstr ""
+
+#: ../libnm-util/crypto_gnutls.c:293
+#, c-format
+msgid "Failed to initialize the encryption cipher context: %s / %s."
+msgstr ""
+
+#: ../libnm-util/crypto_gnutls.c:302
+#, c-format
+msgid "Failed to set symmetric key for encryption: %s / %s."
+msgstr ""
+
+#: ../libnm-util/crypto_gnutls.c:312
+#, c-format
+msgid "Failed to set IV for encryption: %s / %s."
+msgstr ""
+
+#: ../libnm-util/crypto_gnutls.c:321
+#, c-format
+msgid "Failed to encrypt the data: %s / %s."
+msgstr ""
+
+#: ../libnm-util/crypto_gnutls.c:361
+#, c-format
+msgid "Error initializing certificate data: %s"
+msgstr ""
+
+#: ../libnm-util/crypto_gnutls.c:383
+#, c-format
+msgid "Couldn't decode certificate: %s"
+msgstr ""
+
+#: ../libnm-util/crypto_gnutls.c:407
+#, c-format
+msgid "Couldn't initialize PKCS#12 decoder: %s"
+msgstr ""
+
+#: ../libnm-util/crypto_gnutls.c:420
+#, c-format
+msgid "Couldn't decode PKCS#12 file: %s"
+msgstr ""
+
+#: ../libnm-util/crypto_gnutls.c:432
+#, c-format
+msgid "Couldn't verify PKCS#12 file: %s"
+msgstr ""
+
+#: ../libnm-util/crypto_gnutls.c:460
+#, c-format
+msgid "Couldn't initialize PKCS#8 decoder: %s"
+msgstr ""
+
+#: ../libnm-util/crypto_gnutls.c:483
+#, c-format
+msgid "Couldn't decode PKCS#8 file: %s"
+msgstr ""
+
+#: ../libnm-util/crypto_nss.c:56
+#, c-format
+msgid "Failed to initialize the crypto engine: %d."
+msgstr ""
+
+#: ../libnm-util/crypto_nss.c:107
+#, c-format
+msgid "Failed to initialize the MD5 context: %d."
+msgstr ""
+
+#: ../libnm-util/crypto_nss.c:175
+#, c-format
+msgid "Invalid IV length (must be at least %d)."
 msgstr ""
-"128-bitna lozinka (WEP)\n"
-"Slovčani ključ (WEP)\n"
-"Heksadecimalni ključ (WEP)"
 
-#: info-daemon/passphrase.glade:181
-#: info-daemon/NetworkManagerInfoPassphraseDialog.c:139
-#: panel-applet/NMWirelessAppletOtherNetworkDialog.c:149
-#: panel-applet/essid.glade:270
-msgid "Passphrase:"
-msgstr "Lozinka:"
+#: ../libnm-util/crypto_nss.c:192
+#, c-format
+msgid "Failed to initialize the decryption cipher slot."
+msgstr ""
 
-#: info-daemon/passphrase.glade:209 panel-applet/essid.glade:203
-#: panel-applet/essid.glade:300
-msgid "*"
-msgstr "*"
+#: ../libnm-util/crypto_nss.c:202
+#, c-format
+msgid "Failed to set symmetric key for decryption."
+msgstr ""
+
+#: ../libnm-util/crypto_nss.c:212
+#, c-format
+msgid "Failed to set IV for decryption."
+msgstr ""
+
+#: ../libnm-util/crypto_nss.c:220
+#, c-format
+msgid "Failed to initialize the decryption context."
+msgstr ""
+
+#: ../libnm-util/crypto_nss.c:233
+#, c-format
+msgid "Failed to decrypt the private key: %d."
+msgstr ""
+
+#: ../libnm-util/crypto_nss.c:241
+#, c-format
+msgid "Failed to decrypt the private key: decrypted data too large."
+msgstr ""
+
+#: ../libnm-util/crypto_nss.c:252
+#, c-format
+msgid "Failed to finalize decryption of the private key: %d."
+msgstr ""
+
+#: ../libnm-util/crypto_nss.c:360
+#, c-format
+msgid "Failed to initialize the encryption cipher slot."
+msgstr ""
+
+#: ../libnm-util/crypto_nss.c:368
+#, c-format
+msgid "Failed to set symmetric key for encryption."
+msgstr ""
+
+#: ../libnm-util/crypto_nss.c:376
+#, c-format
+msgid "Failed to set IV for encryption."
+msgstr ""
+
+#: ../libnm-util/crypto_nss.c:384
+#, c-format
+msgid "Failed to initialize the encryption context."
+msgstr ""
+
+#: ../libnm-util/crypto_nss.c:392
+#, c-format
+msgid "Failed to encrypt: %d."
+msgstr ""
+
+#: ../libnm-util/crypto_nss.c:400
+#, c-format
+msgid "Unexpected amount of data after encrypting."
+msgstr ""
+
+#: ../libnm-util/crypto_nss.c:443
+#, c-format
+msgid "Couldn't decode certificate: %d"
+msgstr ""
 
-#: info-daemon/NetworkManagerInfoPassphraseDialog.c:142
-#: panel-applet/NMWirelessAppletOtherNetworkDialog.c:152
-msgid "Ascii Key:"
-msgstr "Slovčani ključ"
+#: ../libnm-util/crypto_nss.c:478
+#, c-format
+msgid "Couldn't convert password to UCS2: %d"
+msgstr ""
 
-#: info-daemon/NetworkManagerInfoPassphraseDialog.c:145
-#: panel-applet/NMWirelessAppletOtherNetworkDialog.c:155
-msgid "Hex Key:"
-msgstr "Heksadecimalni ključ"
+#: ../libnm-util/crypto_nss.c:506
+#, c-format
+msgid "Couldn't initialize PKCS#12 decoder: %d"
+msgstr ""
 
-#: info-daemon/NetworkManagerInfoVPN.c:157
+#: ../libnm-util/crypto_nss.c:515
 #, c-format
-msgid "You must log in to access the private network %s"
-msgstr "Prijava je potrebna za pristup na mrežu %s"
+msgid "Couldn't decode PKCS#12 file: %d"
+msgstr ""
 
-#: panel-applet/NMWirelessApplet.c:313
-msgid "No network connection"
-msgstr "Nema spoja na mrežu"
+#: ../libnm-util/crypto_nss.c:524
+#, c-format
+msgid "Couldn't verify PKCS#12 file: %d"
+msgstr ""
 
-#: panel-applet/NMWirelessApplet.c:318
-msgid "Wired network connection"
-msgstr "Spoj na žičanu mrežu"
+#: ../libnm-util/crypto_nss.c:568
+msgid "Could not generate random data."
+msgstr ""
 
-#: panel-applet/NMWirelessApplet.c:323
-msgid "Connecting to a wired network..."
-msgstr "Spajanje na žičanu mrežu..."
+#: ../libnm-util/nm-utils.c:2000
+#, c-format
+msgid "Not enough memory to make encryption key."
+msgstr ""
 
-#: panel-applet/NMWirelessApplet.c:332
-msgid "Connected to an Ad-Hoc wireless network"
-msgstr "Spoj na Ad-Hoc bežičnu mrežu"
+#: ../libnm-util/nm-utils.c:2110
+msgid "Could not allocate memory for PEM file creation."
+msgstr ""
 
-#: panel-applet/NMWirelessApplet.c:346
+#: ../libnm-util/nm-utils.c:2122
 #, c-format
-msgid "Wireless network connection to '%s' (%d%%)"
-msgstr "Spoj na bežičnu mrežu '%s' (%d%%)"
+msgid "Could not allocate memory for writing IV to PEM file."
+msgstr ""
 
-#: panel-applet/NMWirelessApplet.c:351
-msgid "Wireless network connection"
-msgstr "Spoj na bežičnu mrežu"
+#: ../libnm-util/nm-utils.c:2134
+#, c-format
+msgid "Could not allocate memory for writing encrypted key to PEM file."
+msgstr ""
 
-#: panel-applet/NMWirelessApplet.c:356
+#: ../libnm-util/nm-utils.c:2153
 #, c-format
-msgid "Connecting to wireless network '%s'..."
-msgstr "Spajanje na bežičnu mrežu '%s'..."
+msgid "Could not allocate memory for PEM file data."
+msgstr ""
 
-#: panel-applet/NMWirelessApplet.c:362
-msgid "NetworkManager is not running"
-msgstr "NetworkManager nije pokrenut"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
+#| msgid "No network connection"
+msgid "Allow control of network connections"
+msgstr "Dozvoli upravljanje mrežnim vezama"
 
-#: panel-applet/NMWirelessApplet.c:367
-msgid "Scanning for wireless networks..."
-msgstr "Potraga za bežičnim mrežama..."
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2
+#| msgid "Connecting to a wired network..."
+msgid "Connection sharing via a protected WiFi network"
+msgstr "Dijeljenje veze korištenjem zaštićene WiFi mreže"
 
-#: panel-applet/NMWirelessApplet.c:690
-msgid "Other Wireless Networks..."
-msgstr "Ostale bežične mreže..."
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
+#| msgid "Connecting to a wired network..."
+msgid "Connection sharing via an open WiFi network"
+msgstr "Dijeljenje veze korištenjem otvorene WiFi mreže"
 
-#: panel-applet/NMWirelessApplet.c:711
-msgid "Create new Wireless Network..."
-msgstr "Stvori novu bečičnu mrežu..."
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
+msgid "Enable or disable WiFi devices"
+msgstr "Omogućuje ili onemogućuje WiFi uređaje"
 
-#: panel-applet/NMWirelessApplet.c:821
-msgid "No network devices have been found"
-msgstr "Nema mrežnih uređaja"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+msgid "Enable or disable WiMAX mobile broadband devices"
+msgstr "Omogućuje ili onemogućuje WiMAX mobilne širokopojasne uređaje"
 
-#: panel-applet/NMWirelessApplet.c:939
-msgid "NetworkManager is not running..."
-msgstr "NetworkManager nije pokrenut..."
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
+msgid "Enable or disable mobile broadband devices"
+msgstr "Omogućuje ili onemogućuje mobilne širokopojasne uređaje"
 
-#: panel-applet/NMWirelessAppletOtherNetworkDialog.c:228
-msgid "Create new wireless network"
-msgstr "Stvori novu bečičnu mrežu"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
+msgid "Enable or disable system networking"
+msgstr ""
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
+#| msgid "No network connection"
+msgid "Modify network connections for all users"
+msgstr ""
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
+msgid "Modify persistent system hostname"
+msgstr ""
 
-#: panel-applet/NMWirelessAppletOtherNetworkDialog.c:229
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
+#| msgid "No network connection"
+msgid "Modify personal network connections"
+msgstr ""
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
+msgid ""
+"Put NetworkManager to sleep or wake it up (should only be used by system "
+"power management)"
+msgstr ""
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
+#| msgid "Wireless network connection"
+msgid "System policy prevents control of network connections"
+msgstr ""
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:13
+msgid "System policy prevents enabling or disabling WiFi devices"
+msgstr ""
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:14
 msgid ""
-"Enter the ESSID and security settings of the wireless network you wish to "
-"create."
-msgstr "Unesi ESSID i sigurnosne postavke bežične mreže koju treba stvoriti."
+"System policy prevents enabling or disabling WiMAX mobile broadband devices"
+msgstr ""
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:15
+msgid "System policy prevents enabling or disabling mobile broadband devices"
+msgstr ""
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:16
+msgid "System policy prevents enabling or disabling system networking"
+msgstr ""
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:17
+msgid "System policy prevents modification of network settings for all users"
+msgstr ""
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:18
+msgid "System policy prevents modification of personal network settings"
+msgstr ""
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:19
+msgid "System policy prevents modification of the persistent system hostname"
+msgstr ""
 
-#: panel-applet/NMWirelessAppletOtherNetworkDialog.c:234
-msgid "Custom wireless network"
-msgstr "Posebna bežična mreža"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:20
+msgid "System policy prevents putting NetworkManager to sleep or waking it up"
+msgstr ""
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:21
+msgid "System policy prevents sharing connections via a protected WiFi network"
+msgstr ""
 
-#: panel-applet/NMWirelessAppletOtherNetworkDialog.c:235
-msgid "Enter the ESSID of the wireless network to which you wish to connect."
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:22
+msgid "System policy prevents sharing connections via an open WiFi network"
 msgstr ""
-"Unesi ESSID i sigurnosne postavke bežične mreže na koju se treba spojiti."
 
-#. Reuse the above string to make the translators less angry.
-#: panel-applet/NMWirelessAppletOtherNetworkDialog.c:316
-#: panel-applet/NMWirelessAppletOtherNetworkDialog.c:325
+#: ../src/main.c:530
+#, c-format
+msgid "Invalid option.  Please use --help to see a list of valid options.\n"
+msgstr "Nevažeća opcija.  Upišite --help za popis važećih opcija.\n"
+
+#: ../src/main.c:611
+#, c-format
+msgid "%s.  Please use --help to see a list of valid options.\n"
+msgstr "%s.  Upišite --help za popis važećih opcija.\n"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:62
+msgid "# Created by NetworkManager\n"
+msgstr "# Napravio NetworkManager\n"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:69
+#, c-format
 msgid ""
-"The NetworkManager Applet could not find some required resources (the glade "
-"file was not found)."
+"# Merged from %s\n"
+"\n"
 msgstr ""
-"NetworkManager ne može naći potrebne datoteke (glade datoteka nije "
-"pronađena)."
+"# Spojeno iz %s\n"
+"\n"
 
-#: panel-applet/essid.glade:53
-msgid "C_onnect"
-msgstr "_Spoji se"
+#: ../src/dhcp-manager/nm-dhcp-manager.c:284
+msgid "no usable DHCP client could be found."
+msgstr "nije pronađen upotrebljiv DHCP klijent."
 
-#: panel-applet/essid.glade:132
-msgid "Wireless _adapter:"
-msgstr "Bežični _uređaj:"
+#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+msgid "'dhclient' could be found."
+msgstr "'dhclient' nije pronađen."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:303
+msgid "'dhcpcd' could be found."
+msgstr "'dhcpcd' nije pronađen."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:311
+#, c-format
+msgid "unsupported DHCP client '%s'"
+msgstr "nepodržani DHCP klijent '%s'"
+
+#: ../src/dns-manager/nm-dns-manager.c:369
+#, fuzzy
+msgid "NOTE: the libc resolver may not support more than 3 nameservers."
+msgstr "OPASKA: libc resolver ne podržava više od 3 nameservera"
+
+#: ../src/dns-manager/nm-dns-manager.c:371
+msgid "The nameservers listed below may not be recognized."
+msgstr ""
+
+#: ../src/logging/nm-logging.c:149
+#, fuzzy, c-format
+msgid "Unknown log level '%s'"
+msgstr "Nepoznata razina dnevnika '%s'"
+
+#: ../src/logging/nm-logging.c:174
+#, fuzzy, c-format
+msgid "Unknown log domain '%s'"
+msgstr "Nepoznata domena dnevnika '%s'"
+
+#: ../src/modem-manager/nm-modem-cdma.c:296 ../src/nm-device-bt.c:355
+#, c-format
+msgid "CDMA connection %d"
+msgstr "CDMA veza %d"
+
+#: ../src/modem-manager/nm-modem-gsm.c:499 ../src/nm-device-bt.c:351
+#, c-format
+msgid "GSM connection %d"
+msgstr "GSM veza %d"
+
+#: ../src/nm-device-bt.c:326
+#, c-format
+#| msgid "No network connection"
+msgid "PAN connection %d"
+msgstr "PAN veza %d"
+
+#: ../src/nm-device-bt.c:359
+#, c-format
+#| msgid "No network connection"
+msgid "DUN connection %d"
+msgstr "DUN veza %d"
+
+#: ../src/nm-device-ethernet.c:1681
+#, c-format
+#| msgid "No network connection"
+msgid "PPPoE connection %d"
+msgstr "PPPoE veza %d"
+
+#: ../src/nm-device-ethernet.c:1681 ../src/settings/nm-settings-utils.c:50
+#, fuzzy, c-format
+#| msgid "Wired network connection"
+msgid "Wired connection %d"
+msgstr "Spoj na žičanu mrežu %d"
+
+#: ../src/nm-device-olpc-mesh.c:423
+#, c-format
+msgid "Mesh %d"
+msgstr "Mreža %d"
+
+#: ../src/nm-manager.c:673
+#, c-format
+#| msgid "No network connection"
+msgid "VPN connection %d"
+msgstr "VPN veza %d"
+
+#: ../src/nm-netlink-monitor.c:100 ../src/nm-netlink-monitor.c:231
+#: ../src/nm-netlink-monitor.c:653
+#, c-format
+msgid "error processing netlink message: %s"
+msgstr ""
+
+#: ../src/nm-netlink-monitor.c:214
+msgid "error occurred while waiting for data on socket"
+msgstr ""
+
+#: ../src/nm-netlink-monitor.c:254
+#, c-format
+msgid "unable to connect to netlink for monitoring link status: %s"
+msgstr ""
 
-#: panel-applet/essid.glade:172
-msgid "Wireless _Network:"
-msgstr "Bežična _mreža:"
+#: ../src/nm-netlink-monitor.c:265
+#, c-format
+msgid "unable to enable netlink handle credential passing: %s"
+msgstr ""
 
-#: panel-applet/essid.glade:337
-msgid "Connect with encryption enabled"
-msgstr "Spoji se sa enkripcijom"
+#: ../src/nm-netlink-monitor.c:291 ../src/nm-netlink-monitor.c:353
+#, c-format
+msgid "unable to allocate netlink handle for monitoring link status: %s"
+msgstr ""
 
-#: panel-applet/menu-info.c:109
+#: ../src/nm-netlink-monitor.c:376
 #, c-format
-msgid "Wired Network (%s)"
-msgstr "Žičana mreža (%s)"
+msgid "unable to allocate netlink link cache for monitoring link status: %s"
+msgstr ""
 
-#: panel-applet/menu-info.c:111
-msgid "Wired Network"
-msgstr "Žičana mreža"
+#: ../src/nm-netlink-monitor.c:502
+#, c-format
+msgid "unable to join netlink group: %s"
+msgstr ""
 
-#: panel-applet/menu-info.c:177
+#: ../src/nm-netlink-monitor.c:629 ../src/nm-netlink-monitor.c:642
 #, c-format
-msgid "Wireless Network (%s)"
-msgid_plural "Wireless Networks (%s)"
-msgstr[0] "Bežična mreža (%s)"
-msgstr[1] "Bežične mreže (%s)"
+msgid "error updating link cache: %s"
+msgstr ""
+
+#: ../src/settings/plugins/ifcfg-rh/reader.c:3512
+#: ../src/settings/plugins/ifnet/connection_parser.c:51
+msgid "System"
+msgstr "Sustav"
+
+#~ msgid "Modify Wireless Networks"
+#~ msgstr "Postavke bežičnih mreža"
+
+#~ msgid "<span weight=\"bold\">Wireless Networks:</span>"
+#~ msgstr "<span weight=\"bold\">Bežične mreže:</span>"
+
+#~ msgid "Wireless Network Key Required"
+#~ msgstr "Potreban je ključ bežične mreže"
+
+#~ msgid "_Login to Network"
+#~ msgstr "_Prijava na mrežu"
+
+#~ msgid ""
+#~ "<span weight=\"bold\" size=\"larger\">Passphrase Required by Wireless "
+#~ "Network</span>\n"
+#~ "\n"
+#~ "A passphrase or encryption key is required to access the wireless network "
+#~ "'%s'."
+#~ msgstr ""
+#~ "<span weight=\"bold\" size=\"larger\">Potrebna je lozinka za bežičnu "
+#~ "mrežu</span>\n"
+#~ "\n"
+#~ "Za pristup mreži '%s', potrebna je lozinka ili ključ."
+
+#~ msgid "Key Type:"
+#~ msgstr "Tip ključa:"
+
+#~ msgid ""
+#~ "128-bit Passphrase (WEP)\n"
+#~ "Ascii Key (WEP)\n"
+#~ "Hex Key (WEP)"
+#~ msgstr ""
+#~ "128-bitna lozinka (WEP)\n"
+#~ "Slovčani ključ (WEP)\n"
+#~ "Heksadecimalni ključ (WEP)"
+
+#~ msgid "Passphrase:"
+#~ msgstr "Lozinka:"
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid "Ascii Key:"
+#~ msgstr "Slovčani ključ"
+
+#~ msgid "Hex Key:"
+#~ msgstr "Heksadecimalni ključ"
+
+#~ msgid "You must log in to access the private network %s"
+#~ msgstr "Prijava je potrebna za pristup na mrežu %s"
+
+#~ msgid "Connected to an Ad-Hoc wireless network"
+#~ msgstr "Spoj na Ad-Hoc bežičnu mrežu"
+
+#~ msgid "Wireless network connection to '%s' (%d%%)"
+#~ msgstr "Spoj na bežičnu mrežu '%s' (%d%%)"
+
+#~ msgid "Connecting to wireless network '%s'..."
+#~ msgstr "Spajanje na bežičnu mrežu '%s'..."
+
+#~ msgid "Scanning for wireless networks..."
+#~ msgstr "Potraga za bežičnim mrežama..."
+
+#~ msgid "Other Wireless Networks..."
+#~ msgstr "Ostale bežične mreže..."
+
+#~ msgid "Create new Wireless Network..."
+#~ msgstr "Stvori novu bečičnu mrežu..."
+
+#~ msgid "No network devices have been found"
+#~ msgstr "Nema mrežnih uređaja"
+
+#~ msgid "NetworkManager is not running..."
+#~ msgstr "NetworkManager nije pokrenut..."
+
+#~ msgid "Create new wireless network"
+#~ msgstr "Stvori novu bečičnu mrežu"
+
+#~ msgid ""
+#~ "Enter the ESSID and security settings of the wireless network you wish to "
+#~ "create."
+#~ msgstr ""
+#~ "Unesi ESSID i sigurnosne postavke bežične mreže koju treba stvoriti."
+
+#~ msgid "Custom wireless network"
+#~ msgstr "Posebna bežična mreža"
+
+#~ msgid ""
+#~ "Enter the ESSID of the wireless network to which you wish to connect."
+#~ msgstr ""
+#~ "Unesi ESSID i sigurnosne postavke bežične mreže na koju se treba spojiti."
+
+#~ msgid ""
+#~ "The NetworkManager Applet could not find some required resources (the "
+#~ "glade file was not found)."
+#~ msgstr ""
+#~ "NetworkManager ne može naći potrebne datoteke (glade datoteka nije "
+#~ "pronađena)."
+
+#~ msgid "Wireless _adapter:"
+#~ msgstr "Bežični _uređaj:"
+
+#~ msgid "Wireless _Network:"
+#~ msgstr "Bežična _mreža:"
+
+#~ msgid "Connect with encryption enabled"
+#~ msgstr "Spoji se sa enkripcijom"
+
+#~ msgid "Wired Network (%s)"
+#~ msgstr "Žičana mreža (%s)"
+
+#~ msgid "Wired Network"
+#~ msgstr "Žičana mreža"
+
+#~ msgid "Wireless Network (%s)"
+#~ msgid_plural "Wireless Networks (%s)"
+#~ msgstr[0] "Bežična mreža (%s)"
+#~ msgstr[1] "Bežične mreže (%s)"
 
-#: panel-applet/menu-info.c:179
-msgid "Wireless Network"
-msgid_plural "Wireless Networks"
-msgstr[0] "Bežična mreža"
-msgstr[1] "Bežične mreže"
+#~ msgid "Wireless Network"
+#~ msgid_plural "Wireless Networks"
+#~ msgstr[0] "Bežična mreža"
+#~ msgstr[1] "Bežične mreže"
 
-#: panel-applet/menu-info.c:316
-msgid " (invalid Unicode)"
-msgstr " (greška u unicodu)"
+#~ msgid " (invalid Unicode)"
+#~ msgstr " (greška u unicodu)"
 
-#: examples/python/systray/eggtrayicon.c:111
-msgid "Orientation"
-msgstr "Orjentacija"
+#~ msgid "Orientation"
+#~ msgstr "Orjentacija"
 
-#: examples/python/systray/eggtrayicon.c:112
-msgid "The orientation of the tray."
-msgstr "Orjentacija ladice."
+#~ msgid "The orientation of the tray."
+#~ msgstr "Orjentacija ladice."
diff --git a/po/pl.po b/po/pl.po
index ceb85738..7aeb3733 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -8,50 +8,50 @@ msgid ""
 msgstr ""
 "Project-Id-Version: NetworkManager\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
-"product=NetworkManager&component=general\n"
-"POT-Creation-Date: 2011-03-10 15:25+0000\n"
-"PO-Revision-Date: 2011-03-10 17:07+0100\n"
+"product=NetworkManager&keywords=I18N+L10N&component=general\n"
+"POT-Creation-Date: 2011-09-24 03:25+0000\n"
+"PO-Revision-Date: 2011-09-28 21:47+0200\n"
 "Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
 "Language-Team: Polish <gnomepl@aviary.pl>\n"
-"Language: pl\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2\n"
+"Language: pl\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
+"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2\n"
 "X-Poedit-Language: Polish\n"
 "X-Poedit-Country: Poland\n"
 
-#: ../cli/src/connections.c:62 ../cli/src/connections.c:76
-#: ../cli/src/devices.c:99 ../cli/src/devices.c:112 ../cli/src/devices.c:122
-#: ../cli/src/devices.c:132 ../cli/src/devices.c:146 ../cli/src/devices.c:160
-#: ../cli/src/devices.c:171 ../cli/src/devices.c:182 ../cli/src/devices.c:191
-#: ../cli/src/devices.c:200 ../cli/src/devices.c:222
+#: ../cli/src/connections.c:64 ../cli/src/connections.c:78
+#: ../cli/src/devices.c:101 ../cli/src/devices.c:114 ../cli/src/devices.c:124
+#: ../cli/src/devices.c:134 ../cli/src/devices.c:148 ../cli/src/devices.c:162
+#: ../cli/src/devices.c:173 ../cli/src/devices.c:184 ../cli/src/devices.c:193
+#: ../cli/src/devices.c:202 ../cli/src/devices.c:224
 msgid "NAME"
 msgstr "NAZWA"
 
 #. 0
-#: ../cli/src/connections.c:63 ../cli/src/connections.c:77
+#: ../cli/src/connections.c:65 ../cli/src/connections.c:79
 msgid "UUID"
 msgstr "UUID"
 
 #. 1
-#: ../cli/src/connections.c:64
+#: ../cli/src/connections.c:66
 msgid "DEVICES"
 msgstr "URZĄDZENIA"
 
 #. 2
-#: ../cli/src/connections.c:65
+#: ../cli/src/connections.c:67
 msgid "DEFAULT"
 msgstr "DOMYŚLNE"
 
 #. 3
-#: ../cli/src/connections.c:66
+#: ../cli/src/connections.c:68
 msgid "SPEC-OBJECT"
 msgstr "KONKRETNY-OBIEKT"
 
 #. 4
-#: ../cli/src/connections.c:67
+#: ../cli/src/connections.c:69
 msgid "VPN"
 msgstr "VPN"
 
@@ -60,8 +60,8 @@ msgstr "VPN"
 #. 2
 #. 11
 #. 5
-#: ../cli/src/connections.c:68 ../cli/src/connections.c:83
-#: ../cli/src/devices.c:67 ../cli/src/devices.c:212 ../cli/src/devices.c:228
+#: ../cli/src/connections.c:70 ../cli/src/connections.c:85
+#: ../cli/src/devices.c:69 ../cli/src/devices.c:214 ../cli/src/devices.c:230
 msgid "DBUS-PATH"
 msgstr "ŚCIEŻKA-DO-DBUS"
 
@@ -69,397 +69,406 @@ msgstr "ŚCIEŻKA-DO-DBUS"
 #. 0
 #. 1
 #. 2
-#: ../cli/src/connections.c:78 ../cli/src/devices.c:65
-#: ../cli/src/devices.c:101 ../cli/src/devices.c:225
+#: ../cli/src/connections.c:80 ../cli/src/devices.c:67
+#: ../cli/src/devices.c:103 ../cli/src/devices.c:227
 msgid "TYPE"
 msgstr "TYP"
 
 #. 2
-#: ../cli/src/connections.c:79
+#: ../cli/src/connections.c:81
 msgid "TIMESTAMP"
 msgstr "OKRES-CZASU"
 
 #. 3
-#: ../cli/src/connections.c:80
+#: ../cli/src/connections.c:82
 msgid "TIMESTAMP-REAL"
 msgstr "RZECZYWISTY-OKRES-CZASU"
 
 #. 4
-#: ../cli/src/connections.c:81
+#: ../cli/src/connections.c:83
 msgid "AUTOCONNECT"
 msgstr "ŁĄCZENIE-AUTOMATYCZNE"
 
 #. 5
-#: ../cli/src/connections.c:82
+#: ../cli/src/connections.c:84
 msgid "READONLY"
 msgstr "TYLKO-DO-ODCZYTU"
 
-#: ../cli/src/connections.c:166
+#: ../cli/src/connections.c:153
 #, c-format
 msgid ""
 "Usage: nmcli con { COMMAND | help }\n"
-"  COMMAND := { list | status | up | down }\n"
+"  COMMAND := { list | status | up | down | delete }\n"
 "\n"
 "  list [id <id> | uuid <id>]\n"
 "  status\n"
-"  up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [nsp <name>] [--"
+"  up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <name>] [--"
 "nowait] [--timeout <timeout>]\n"
-"  up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout "
+"  up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout "
 "<timeout>]\n"
 "  down id <id> | uuid <id>\n"
+"  delete id <id> | uuid <id>\n"
 msgstr ""
 "Użycie: nmcli con { POLECENIE | help }\n"
-"  POLECENIE := { list | status | up | down }\n"
+"  POLECENIE := { list | status | up | down | delete }\n"
 "\n"
 "  list [id <identyfikator> | uuid <identyfikator>]\n"
 "  status\n"
 "  up id <identyfikator> | uuid <identyfikator> [iface <interfejs>] [ap "
-"<adres_sprzętowy>] [nsp <nazwa>] [--nowait] [--timeout <czas>]\n"
+"<BSSID>] [nsp <nazwa>] [--nowait] [--timeout <czas>]\n"
 "  up id <identyfikator> | uuid <identyfikator> [iface <interfejs>] [ap "
-"<adres_sprzętowy>] [--nowait] [--timeout <timeout>]\n"
+"<BSSID>] [--nowait] [--timeout <timeout>]\n"
 "  down id <identyfikator> | uuid <identyfikator>\n"
+"  delete id <identyfikator> | uuid <identyfikator>\n"
 
-#: ../cli/src/connections.c:219 ../cli/src/connections.c:541
+#: ../cli/src/connections.c:208 ../cli/src/connections.c:532
 #, c-format
 msgid "Error: 'con list': %s"
 msgstr "Błąd: \"con list\": %s"
 
-#: ../cli/src/connections.c:221 ../cli/src/connections.c:543
+#: ../cli/src/connections.c:210 ../cli/src/connections.c:534
 #, c-format
 msgid "Error: 'con list': %s; allowed fields: %s"
 msgstr "Błąd: \"con list\": %s; dozwolone pola: %s"
 
-#: ../cli/src/connections.c:229
+#: ../cli/src/connections.c:218
 msgid "Connection details"
 msgstr "Szczegóły połączenia"
 
-#: ../cli/src/connections.c:416
+#: ../cli/src/connections.c:407
 msgid "never"
 msgstr "nigdy"
 
 #. "CAPABILITIES"
 #. Print header
 #. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:417 ../cli/src/connections.c:418
-#: ../cli/src/connections.c:596 ../cli/src/connections.c:598
-#: ../cli/src/devices.c:507 ../cli/src/devices.c:560 ../cli/src/devices.c:685
-#: ../cli/src/devices.c:711 ../cli/src/devices.c:712 ../cli/src/devices.c:713
-#: ../cli/src/devices.c:714 ../cli/src/devices.c:715 ../cli/src/settings.c:518
-#: ../cli/src/settings.c:561 ../cli/src/settings.c:661
-#: ../cli/src/settings.c:935 ../cli/src/settings.c:936
-#: ../cli/src/settings.c:938 ../cli/src/settings.c:940
-#: ../cli/src/settings.c:1065 ../cli/src/settings.c:1066
-#: ../cli/src/settings.c:1067 ../cli/src/settings.c:1146
-#: ../cli/src/settings.c:1147 ../cli/src/settings.c:1148
-#: ../cli/src/settings.c:1149 ../cli/src/settings.c:1150
-#: ../cli/src/settings.c:1151 ../cli/src/settings.c:1152
-#: ../cli/src/settings.c:1153 ../cli/src/settings.c:1154
-#: ../cli/src/settings.c:1155 ../cli/src/settings.c:1156
-#: ../cli/src/settings.c:1157 ../cli/src/settings.c:1158
-#: ../cli/src/settings.c:1233
+#: ../cli/src/connections.c:408 ../cli/src/connections.c:409
+#: ../cli/src/connections.c:587 ../cli/src/connections.c:589
+#: ../cli/src/devices.c:499 ../cli/src/devices.c:552 ../cli/src/devices.c:677
+#: ../cli/src/devices.c:703 ../cli/src/devices.c:704 ../cli/src/devices.c:705
+#: ../cli/src/devices.c:706 ../cli/src/devices.c:707 ../cli/src/settings.c:560
+#: ../cli/src/settings.c:632 ../cli/src/settings.c:753
+#: ../cli/src/settings.c:1041 ../cli/src/settings.c:1042
+#: ../cli/src/settings.c:1044 ../cli/src/settings.c:1046
+#: ../cli/src/settings.c:1047 ../cli/src/settings.c:1177
+#: ../cli/src/settings.c:1178 ../cli/src/settings.c:1179
+#: ../cli/src/settings.c:1180 ../cli/src/settings.c:1259
+#: ../cli/src/settings.c:1260 ../cli/src/settings.c:1261
+#: ../cli/src/settings.c:1262 ../cli/src/settings.c:1263
+#: ../cli/src/settings.c:1264 ../cli/src/settings.c:1265
+#: ../cli/src/settings.c:1266 ../cli/src/settings.c:1267
+#: ../cli/src/settings.c:1268 ../cli/src/settings.c:1269
+#: ../cli/src/settings.c:1270 ../cli/src/settings.c:1271
+#: ../cli/src/settings.c:1346
 msgid "yes"
 msgstr "tak"
 
-#: ../cli/src/connections.c:417 ../cli/src/connections.c:418
-#: ../cli/src/connections.c:596 ../cli/src/connections.c:598
-#: ../cli/src/devices.c:507 ../cli/src/devices.c:560 ../cli/src/devices.c:685
-#: ../cli/src/devices.c:711 ../cli/src/devices.c:712 ../cli/src/devices.c:713
-#: ../cli/src/devices.c:714 ../cli/src/devices.c:715 ../cli/src/settings.c:518
-#: ../cli/src/settings.c:520 ../cli/src/settings.c:561
-#: ../cli/src/settings.c:661 ../cli/src/settings.c:935
-#: ../cli/src/settings.c:936 ../cli/src/settings.c:938
-#: ../cli/src/settings.c:940 ../cli/src/settings.c:1065
-#: ../cli/src/settings.c:1066 ../cli/src/settings.c:1067
-#: ../cli/src/settings.c:1146 ../cli/src/settings.c:1147
-#: ../cli/src/settings.c:1148 ../cli/src/settings.c:1149
-#: ../cli/src/settings.c:1150 ../cli/src/settings.c:1151
-#: ../cli/src/settings.c:1152 ../cli/src/settings.c:1153
-#: ../cli/src/settings.c:1154 ../cli/src/settings.c:1155
-#: ../cli/src/settings.c:1156 ../cli/src/settings.c:1157
-#: ../cli/src/settings.c:1158 ../cli/src/settings.c:1233
+#: ../cli/src/connections.c:408 ../cli/src/connections.c:409
+#: ../cli/src/connections.c:587 ../cli/src/connections.c:589
+#: ../cli/src/devices.c:499 ../cli/src/devices.c:552 ../cli/src/devices.c:677
+#: ../cli/src/devices.c:703 ../cli/src/devices.c:704 ../cli/src/devices.c:705
+#: ../cli/src/devices.c:706 ../cli/src/devices.c:707 ../cli/src/settings.c:560
+#: ../cli/src/settings.c:562 ../cli/src/settings.c:632
+#: ../cli/src/settings.c:753 ../cli/src/settings.c:1041
+#: ../cli/src/settings.c:1042 ../cli/src/settings.c:1044
+#: ../cli/src/settings.c:1046 ../cli/src/settings.c:1047
+#: ../cli/src/settings.c:1177 ../cli/src/settings.c:1178
+#: ../cli/src/settings.c:1179 ../cli/src/settings.c:1180
+#: ../cli/src/settings.c:1259 ../cli/src/settings.c:1260
+#: ../cli/src/settings.c:1261 ../cli/src/settings.c:1262
+#: ../cli/src/settings.c:1263 ../cli/src/settings.c:1264
+#: ../cli/src/settings.c:1265 ../cli/src/settings.c:1266
+#: ../cli/src/settings.c:1267 ../cli/src/settings.c:1268
+#: ../cli/src/settings.c:1269 ../cli/src/settings.c:1270
+#: ../cli/src/settings.c:1271 ../cli/src/settings.c:1346
 msgid "no"
 msgstr "nie"
 
-#: ../cli/src/connections.c:492
+#: ../cli/src/connections.c:483
 msgid "Connection list"
 msgstr "Lista połączeń"
 
-#: ../cli/src/connections.c:505 ../cli/src/connections.c:1457
-#: ../cli/src/connections.c:1472 ../cli/src/connections.c:1481
-#: ../cli/src/connections.c:1491 ../cli/src/connections.c:1503
-#: ../cli/src/connections.c:1598 ../cli/src/devices.c:1188
-#: ../cli/src/devices.c:1198 ../cli/src/devices.c:1312
-#: ../cli/src/devices.c:1319 ../cli/src/devices.c:1532
-#: ../cli/src/devices.c:1539
+#: ../cli/src/connections.c:496 ../cli/src/connections.c:1356
+#: ../cli/src/connections.c:1371 ../cli/src/connections.c:1380
+#: ../cli/src/connections.c:1390 ../cli/src/connections.c:1402
+#: ../cli/src/connections.c:1497 ../cli/src/connections.c:1580
+#: ../cli/src/devices.c:1180 ../cli/src/devices.c:1190
+#: ../cli/src/devices.c:1304 ../cli/src/devices.c:1312
+#: ../cli/src/devices.c:1525 ../cli/src/devices.c:1532
 #, c-format
 msgid "Error: %s argument is missing."
 msgstr "Błąd: brak parametru %s."
 
-#: ../cli/src/connections.c:518
+#: ../cli/src/connections.c:509
 #, c-format
 msgid "Error: %s - no such connection."
 msgstr "Błąd: %s - nie ma takiego połączenia."
 
-#: ../cli/src/connections.c:524 ../cli/src/connections.c:1516
-#: ../cli/src/connections.c:1615 ../cli/src/devices.c:985
-#: ../cli/src/devices.c:1065 ../cli/src/devices.c:1212
-#: ../cli/src/devices.c:1325 ../cli/src/devices.c:1545
+#: ../cli/src/connections.c:515 ../cli/src/connections.c:1415
+#: ../cli/src/connections.c:1514 ../cli/src/connections.c:1587
+#: ../cli/src/devices.c:977 ../cli/src/devices.c:1057
+#: ../cli/src/devices.c:1204 ../cli/src/devices.c:1318
+#: ../cli/src/devices.c:1538
 #, c-format
 msgid "Unknown parameter: %s\n"
 msgstr "Nieznany parametr: %s\n"
 
-#: ../cli/src/connections.c:533
+#: ../cli/src/connections.c:524
 #, c-format
 msgid "Error: no valid parameter specified."
 msgstr "Błąd: nie podano prawidłowego parametru."
 
-#: ../cli/src/connections.c:548 ../cli/src/connections.c:1706
-#: ../cli/src/devices.c:1753 ../cli/src/network-manager.c:461
+#: ../cli/src/connections.c:539 ../cli/src/connections.c:1668
+#: ../cli/src/devices.c:1746 ../cli/src/network-manager.c:456
 #, c-format
 msgid "Error: %s."
 msgstr "Błąd: %s."
 
-#: ../cli/src/connections.c:636
+#: ../cli/src/connections.c:627
 #, c-format
 msgid "Error: 'con status': %s"
 msgstr "Błąd: \"con status\": %s"
 
-#: ../cli/src/connections.c:638
+#: ../cli/src/connections.c:629
 #, c-format
 msgid "Error: 'con status': %s; allowed fields: %s"
 msgstr "Błąd: \"con status\": %s; dozwolone pola: %s"
 
-#: ../cli/src/connections.c:646 ../cli/src/connections.c:1531
-#: ../cli/src/connections.c:1630 ../cli/src/devices.c:1012
-#: ../cli/src/devices.c:1074 ../cli/src/devices.c:1227
-#: ../cli/src/devices.c:1355 ../cli/src/devices.c:1574
+#: ../cli/src/connections.c:637 ../cli/src/connections.c:1430
+#: ../cli/src/connections.c:1529 ../cli/src/connections.c:1601
+#: ../cli/src/devices.c:1004 ../cli/src/devices.c:1066
+#: ../cli/src/devices.c:1219 ../cli/src/devices.c:1348
+#: ../cli/src/devices.c:1567
 #, c-format
 msgid "Error: Can't find out if NetworkManager is running: %s."
 msgstr ""
 "Błąd: nie można ustalić, czy usługa NetworkManager jest uruchomiona: %s."
 
-#: ../cli/src/connections.c:650 ../cli/src/connections.c:1535
-#: ../cli/src/connections.c:1634 ../cli/src/devices.c:1016
-#: ../cli/src/devices.c:1078 ../cli/src/devices.c:1231
-#: ../cli/src/devices.c:1359 ../cli/src/devices.c:1578
+#: ../cli/src/connections.c:641 ../cli/src/connections.c:1434
+#: ../cli/src/connections.c:1533 ../cli/src/connections.c:1605
+#: ../cli/src/devices.c:1008 ../cli/src/devices.c:1070
+#: ../cli/src/devices.c:1223 ../cli/src/devices.c:1352
+#: ../cli/src/devices.c:1571
 #, c-format
 msgid "Error: NetworkManager is not running."
 msgstr "Błąd: usługa NetworkManager nie jest uruchomiona."
 
-#: ../cli/src/connections.c:658
+#: ../cli/src/connections.c:649
 msgid "Active connections"
 msgstr "Aktywne połączenia"
 
-#: ../cli/src/connections.c:1128
+#: ../cli/src/connections.c:1073
 #, c-format
 msgid "no active connection on device '%s'"
 msgstr "brak aktywnych połączeń na urządzeniu \"%s\""
 
-#: ../cli/src/connections.c:1136
+#: ../cli/src/connections.c:1081
 #, c-format
 msgid "no active connection or device"
 msgstr "brak aktywnych połączeń na urządzeń"
 
-#: ../cli/src/connections.c:1207
+#: ../cli/src/connections.c:1152
 #, c-format
 msgid "device '%s' not compatible with connection '%s'"
 msgstr "urządzenie \"%s\" nie jest zgodne z połączeniem \"%s\""
 
-#: ../cli/src/connections.c:1209
+#: ../cli/src/connections.c:1154
 #, c-format
 msgid "no device found for connection '%s'"
 msgstr "nie odnaleziono urządzenia dla połączenia \"%s\""
 
-#: ../cli/src/connections.c:1220
+#: ../cli/src/connections.c:1165
 msgid "activating"
 msgstr "aktywowanie"
 
-#: ../cli/src/connections.c:1222
+#: ../cli/src/connections.c:1167
 msgid "activated"
 msgstr "aktywowano"
 
-#: ../cli/src/connections.c:1225 ../cli/src/connections.c:1248
-#: ../cli/src/connections.c:1281 ../cli/src/devices.c:306
-#: ../cli/src/devices.c:686 ../cli/src/network-manager.c:116
-#: ../cli/src/network-manager.c:178 ../cli/src/network-manager.c:181
-#: ../cli/src/network-manager.c:296 ../cli/src/network-manager.c:351
-#: ../cli/src/network-manager.c:389 ../cli/src/network-manager.c:428
-#: ../cli/src/settings.c:483 ../cli/src/utils.c:396
+#: ../cli/src/connections.c:1169 ../cli/src/devices.c:294
+msgid "deactivating"
+msgstr "deaktywowanie"
+
+#: ../cli/src/connections.c:1172 ../cli/src/connections.c:1195
+#: ../cli/src/connections.c:1228 ../cli/src/devices.c:298
+#: ../cli/src/devices.c:678 ../cli/src/network-manager.c:111
+#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:176
+#: ../cli/src/network-manager.c:185 ../cli/src/network-manager.c:291
+#: ../cli/src/network-manager.c:346 ../cli/src/network-manager.c:384
+#: ../cli/src/network-manager.c:423 ../cli/src/settings.c:513
+#: ../cli/src/utils.c:397
 msgid "unknown"
 msgstr "nieznane"
 
-#: ../cli/src/connections.c:1234
+#: ../cli/src/connections.c:1181
 msgid "VPN connecting (prepare)"
 msgstr "Łączenie z VPN (przygotowanie)"
 
-#: ../cli/src/connections.c:1236
+#: ../cli/src/connections.c:1183
 msgid "VPN connecting (need authentication)"
 msgstr "Łączenie z VPN (wymaga uwierzytelnienia)"
 
-#: ../cli/src/connections.c:1238
+#: ../cli/src/connections.c:1185
 msgid "VPN connecting"
 msgstr "Łączenie z VPN"
 
-#: ../cli/src/connections.c:1240
+#: ../cli/src/connections.c:1187
 msgid "VPN connecting (getting IP configuration)"
 msgstr "Łączenie z VPN (pobieranie konfiguracji adresu IP)"
 
-#: ../cli/src/connections.c:1242
+#: ../cli/src/connections.c:1189
 msgid "VPN connected"
 msgstr "Połączono z VPN"
 
-#: ../cli/src/connections.c:1244
+#: ../cli/src/connections.c:1191
 msgid "VPN connection failed"
 msgstr "Połączenie z VPN się nie powiodło"
 
-#: ../cli/src/connections.c:1246
+#: ../cli/src/connections.c:1193
 msgid "VPN disconnected"
 msgstr "Rozłączono z VPN"
 
-#: ../cli/src/connections.c:1257
+#: ../cli/src/connections.c:1204
 msgid "unknown reason"
 msgstr "nieznany powód"
 
-#: ../cli/src/connections.c:1259
+#: ../cli/src/connections.c:1206
 msgid "none"
 msgstr "brak"
 
-#: ../cli/src/connections.c:1261
+#: ../cli/src/connections.c:1208
 msgid "the user was disconnected"
 msgstr "użytkownik został rozłączony"
 
-#: ../cli/src/connections.c:1263
+#: ../cli/src/connections.c:1210
 msgid "the base network connection was interrupted"
 msgstr "podstawowe połączenie sieciowe zostało przerwane"
 
-#: ../cli/src/connections.c:1265
+#: ../cli/src/connections.c:1212
 msgid "the VPN service stopped unexpectedly"
 msgstr "usługa VPN została nieoczekiwanie zatrzymana"
 
-#: ../cli/src/connections.c:1267
+#: ../cli/src/connections.c:1214
 msgid "the VPN service returned invalid configuration"
 msgstr "usługa VPN zwróciła nieprawidłową konfigurację"
 
-#: ../cli/src/connections.c:1269
+#: ../cli/src/connections.c:1216
 msgid "the connection attempt timed out"
 msgstr "próba połączenia przekroczyła czas oczekiwania"
 
-#: ../cli/src/connections.c:1271
+#: ../cli/src/connections.c:1218
 msgid "the VPN service did not start in time"
 msgstr "usługa VPN nie została uruchomiona w czasie"
 
-#: ../cli/src/connections.c:1273
+#: ../cli/src/connections.c:1220
 msgid "the VPN service failed to start"
 msgstr "uruchomienie usługi VPN się nie powiodło"
 
-#: ../cli/src/connections.c:1275
+#: ../cli/src/connections.c:1222
 msgid "no valid VPN secrets"
 msgstr "brak prawidłowych haseł VPN"
 
-#: ../cli/src/connections.c:1277
+#: ../cli/src/connections.c:1224
 msgid "invalid VPN secrets"
 msgstr "nieprawidłowe hasła VPN"
 
-#: ../cli/src/connections.c:1279
+#: ../cli/src/connections.c:1226
 msgid "the connection was removed"
 msgstr "połączenie zostało usunięte"
 
-#: ../cli/src/connections.c:1293
+#: ../cli/src/connections.c:1240
 #, c-format
 msgid "state: %s\n"
 msgstr "stan: %s\n"
 
-#: ../cli/src/connections.c:1296 ../cli/src/connections.c:1322
+#: ../cli/src/connections.c:1243 ../cli/src/connections.c:1269
 #, c-format
 msgid "Connection activated\n"
 msgstr "Aktywowano połączenie\n"
 
-#: ../cli/src/connections.c:1299
+#: ../cli/src/connections.c:1246
 #, c-format
 msgid "Error: Connection activation failed."
 msgstr "Błąd: aktywacja połączenia się nie powiodła."
 
-#: ../cli/src/connections.c:1318
+#: ../cli/src/connections.c:1265
 #, c-format
 msgid "state: %s (%d)\n"
 msgstr "stan: %s (%d)\n"
 
-#: ../cli/src/connections.c:1328
+#: ../cli/src/connections.c:1275
 #, c-format
 msgid "Error: Connection activation failed: %s."
 msgstr "Błąd: aktywacja połączenia się nie powiodła: %s."
 
-#: ../cli/src/connections.c:1345 ../cli/src/devices.c:1134
+#: ../cli/src/connections.c:1292 ../cli/src/devices.c:1126
 #, c-format
 msgid "Error: Timeout %d sec expired."
 msgstr "Błąd: przekroczono czas oczekiwania o %d sekund."
 
-#: ../cli/src/connections.c:1388
+#: ../cli/src/connections.c:1305
 #, c-format
 msgid "Error: Connection activation failed: %s"
 msgstr "Błąd: aktywacja połączenia się nie powiodła: %s"
 
-#: ../cli/src/connections.c:1402
-#, c-format
-msgid "Error: Obtaining active connection for '%s' failed."
-msgstr "Błąd: uzyskanie aktywnego połączenia dla \"%s\" się nie powiodło."
-
-#: ../cli/src/connections.c:1411
+#: ../cli/src/connections.c:1311
 #, c-format
 msgid "Active connection state: %s\n"
 msgstr "Stan aktywnego połączenia: %s\n"
 
-#: ../cli/src/connections.c:1412
+#: ../cli/src/connections.c:1312
 #, c-format
 msgid "Active connection path: %s\n"
 msgstr "Ścieżka aktywnego połączenia: %s\n"
 
-#: ../cli/src/connections.c:1465 ../cli/src/connections.c:1606
+#: ../cli/src/connections.c:1364 ../cli/src/connections.c:1505
+#: ../cli/src/connections.c:1614
 #, c-format
 msgid "Error: Unknown connection: %s."
 msgstr "Błąd: nieznane połączenie: %s."
 
-#: ../cli/src/connections.c:1511 ../cli/src/devices.c:1206
+#: ../cli/src/connections.c:1410 ../cli/src/devices.c:1198
 #, c-format
 msgid "Error: timeout value '%s' is not valid."
 msgstr "Błąd: wartość czasu oczekiwania \"%s\" jest nieprawidłowa."
 
-#: ../cli/src/connections.c:1524 ../cli/src/connections.c:1623
+#: ../cli/src/connections.c:1423 ../cli/src/connections.c:1522
+#: ../cli/src/connections.c:1594
 #, c-format
 msgid "Error: id or uuid has to be specified."
 msgstr "Błąd: należy podać identyfikator lub UUID."
 
-#: ../cli/src/connections.c:1554
+#: ../cli/src/connections.c:1451
 #, c-format
 msgid "Error: No suitable device found: %s."
 msgstr "Błąd: nie odnaleziono odpowiedniego urządzenia: %s"
 
-#: ../cli/src/connections.c:1556
+#: ../cli/src/connections.c:1453
 #, c-format
 msgid "Error: No suitable device found."
 msgstr "Błąd: nie odnaleziono odpowiedniego urządzenia."
 
-#: ../cli/src/connections.c:1659
+#: ../cli/src/connections.c:1558
 #, c-format
 msgid "Warning: Connection not active\n"
 msgstr "Ostrzeżenie: połączenie nie jest aktywne\n"
 
-#: ../cli/src/connections.c:1697
+#: ../cli/src/connections.c:1659
 #, c-format
 msgid "Error: 'con' command '%s' is not valid."
 msgstr "Błąd: polecenie \"con\" \"%s\" jest nieprawidłowe."
 
-#: ../cli/src/connections.c:1762
+#: ../cli/src/connections.c:1724
 #, c-format
 msgid "Error: could not connect to D-Bus."
 msgstr "Błąd: nie można połączyć się z D-Bus."
 
-#: ../cli/src/connections.c:1769
+#: ../cli/src/connections.c:1732
 #, c-format
 msgid "Error: Could not get system settings."
 msgstr "Błąd: nie można uzyskać ustawień systemu."
 
-#: ../cli/src/connections.c:1779
+#: ../cli/src/connections.c:1742
 #, c-format
 msgid "Error: Can't obtain connections: settings service is not running."
 msgstr ""
@@ -468,222 +477,222 @@ msgstr ""
 #. 0
 #. 9
 #. 3
-#: ../cli/src/devices.c:64 ../cli/src/devices.c:100 ../cli/src/devices.c:210
-#: ../cli/src/devices.c:226
+#: ../cli/src/devices.c:66 ../cli/src/devices.c:102 ../cli/src/devices.c:212
+#: ../cli/src/devices.c:228
 msgid "DEVICE"
 msgstr "URZĄDZENIE"
 
 #. 1
 #. 4
 #. 1
-#: ../cli/src/devices.c:66 ../cli/src/devices.c:104
-#: ../cli/src/network-manager.c:37
+#: ../cli/src/devices.c:68 ../cli/src/devices.c:106
+#: ../cli/src/network-manager.c:39
 msgid "STATE"
 msgstr "STAN"
 
-#: ../cli/src/devices.c:76
+#: ../cli/src/devices.c:78
 msgid "GENERAL"
 msgstr "OGÓLNE"
 
 #. 0
-#: ../cli/src/devices.c:77
+#: ../cli/src/devices.c:79
 msgid "CAPABILITIES"
 msgstr "MOŻLIWOŚCI"
 
 #. 1
-#: ../cli/src/devices.c:78
+#: ../cli/src/devices.c:80
 msgid "WIFI-PROPERTIES"
 msgstr "WŁAŚCIWOŚCI-WIFI"
 
 #. 2
-#: ../cli/src/devices.c:79
+#: ../cli/src/devices.c:81
 msgid "AP"
 msgstr "PUNKT-DOSTĘPOWY"
 
 #. 3
-#: ../cli/src/devices.c:80
+#: ../cli/src/devices.c:82
 msgid "WIRED-PROPERTIES"
 msgstr "WŁAŚCIWOŚCI-POŁĄCZENIA-PRZEWODOWEGO"
 
 #. 4
-#: ../cli/src/devices.c:81
+#: ../cli/src/devices.c:83
 msgid "WIMAX-PROPERTIES"
 msgstr "WŁAŚCIWOŚCI-WIMAX"
 
 #. 5
 #. 0
-#: ../cli/src/devices.c:82 ../cli/src/devices.c:223
+#: ../cli/src/devices.c:84 ../cli/src/devices.c:225
 msgid "NSP"
 msgstr "NSP"
 
 #. 6
-#: ../cli/src/devices.c:83
+#: ../cli/src/devices.c:85
 msgid "IP4-SETTINGS"
 msgstr "USTAWIENIA-IP4"
 
 #. 7
-#: ../cli/src/devices.c:84
+#: ../cli/src/devices.c:86
 msgid "IP4-DNS"
 msgstr "IP4-DNS"
 
 #. 8
-#: ../cli/src/devices.c:85
+#: ../cli/src/devices.c:87
 msgid "IP6-SETTINGS"
 msgstr "USTAWIENIA-IP6"
 
 #. 9
-#: ../cli/src/devices.c:86
+#: ../cli/src/devices.c:88
 msgid "IP6-DNS"
 msgstr "IP6-DNS"
 
 #. 2
-#: ../cli/src/devices.c:102
+#: ../cli/src/devices.c:104
 msgid "DRIVER"
 msgstr "STEROWNIK"
 
 #. 3
-#: ../cli/src/devices.c:103
+#: ../cli/src/devices.c:105
 msgid "HWADDR"
 msgstr "ADRES-SPRZĘTOWY"
 
 #. 0
-#: ../cli/src/devices.c:113
+#: ../cli/src/devices.c:115
 msgid "CARRIER-DETECT"
 msgstr "WYKRYWANIE-OPERATORA"
 
 #. 1
-#: ../cli/src/devices.c:114
+#: ../cli/src/devices.c:116
 msgid "SPEED"
 msgstr "PRĘDKOŚĆ"
 
 #. 0
-#: ../cli/src/devices.c:123
+#: ../cli/src/devices.c:125
 msgid "CARRIER"
 msgstr "OPERATOR"
 
 #. 0
-#: ../cli/src/devices.c:133
+#: ../cli/src/devices.c:135
 msgid "WEP"
 msgstr "WEP"
 
 #. 1
-#: ../cli/src/devices.c:134
+#: ../cli/src/devices.c:136
 msgid "WPA"
 msgstr "WPA"
 
 #. 2
-#: ../cli/src/devices.c:135
+#: ../cli/src/devices.c:137
 msgid "WPA2"
 msgstr "WPA2"
 
 #. 3
-#: ../cli/src/devices.c:136
+#: ../cli/src/devices.c:138
 msgid "TKIP"
 msgstr "TKIP"
 
 #. 4
-#: ../cli/src/devices.c:137
+#: ../cli/src/devices.c:139
 msgid "CCMP"
 msgstr "CCMP"
 
 #. 0
-#: ../cli/src/devices.c:147
+#: ../cli/src/devices.c:149
 msgid "CTR-FREQ"
 msgstr "CZĘSTOTLIWOŚĆ-CTR"
 
 #. 1
-#: ../cli/src/devices.c:148
+#: ../cli/src/devices.c:150
 msgid "RSSI"
 msgstr "RSSI"
 
 #. 2
-#: ../cli/src/devices.c:149
+#: ../cli/src/devices.c:151
 msgid "CINR"
 msgstr "CINR"
 
 #. 3
-#: ../cli/src/devices.c:150
+#: ../cli/src/devices.c:152
 msgid "TX-POW"
 msgstr "TX-POW"
 
 #. 4
-#: ../cli/src/devices.c:151
+#: ../cli/src/devices.c:153
 msgid "BSID"
 msgstr "BSID"
 
 #. 0
-#: ../cli/src/devices.c:161 ../cli/src/devices.c:172
+#: ../cli/src/devices.c:163 ../cli/src/devices.c:174
 msgid "ADDRESS"
 msgstr "ADRES"
 
 #. 1
-#: ../cli/src/devices.c:162 ../cli/src/devices.c:173
+#: ../cli/src/devices.c:164 ../cli/src/devices.c:175
 msgid "PREFIX"
 msgstr "PRZEDROSTEK"
 
 #. 2
-#: ../cli/src/devices.c:163 ../cli/src/devices.c:174
+#: ../cli/src/devices.c:165 ../cli/src/devices.c:176
 msgid "GATEWAY"
 msgstr "BRAMA"
 
 #. 0
-#: ../cli/src/devices.c:183 ../cli/src/devices.c:192
+#: ../cli/src/devices.c:185 ../cli/src/devices.c:194
 msgid "DNS"
 msgstr "DNS"
 
 #. 0
-#: ../cli/src/devices.c:201
+#: ../cli/src/devices.c:203
 msgid "SSID"
 msgstr "SSID"
 
 #. 1
-#: ../cli/src/devices.c:202
+#: ../cli/src/devices.c:204
 msgid "BSSID"
 msgstr "BSSID"
 
 #. 2
-#: ../cli/src/devices.c:203
+#: ../cli/src/devices.c:205
 msgid "MODE"
 msgstr "TRYB"
 
 #. 3
-#: ../cli/src/devices.c:204
+#: ../cli/src/devices.c:206
 msgid "FREQ"
 msgstr "CZĘSTOTLIWOŚĆ"
 
 #. 4
-#: ../cli/src/devices.c:205
+#: ../cli/src/devices.c:207
 msgid "RATE"
 msgstr "OCENA"
 
 #. 5
 #. 1
-#: ../cli/src/devices.c:206 ../cli/src/devices.c:224
+#: ../cli/src/devices.c:208 ../cli/src/devices.c:226
 msgid "SIGNAL"
 msgstr "SYGNAŁ"
 
 #. 6
-#: ../cli/src/devices.c:207
+#: ../cli/src/devices.c:209
 msgid "SECURITY"
 msgstr "ZABEZPIECZENIA"
 
 #. 7
-#: ../cli/src/devices.c:208
+#: ../cli/src/devices.c:210
 msgid "WPA-FLAGS"
 msgstr "FLAGI-WPA"
 
 #. 8
-#: ../cli/src/devices.c:209
+#: ../cli/src/devices.c:211
 msgid "RSN-FLAGS"
 msgstr "FLAGI-RSN"
 
 #. 10
 #. 4
-#: ../cli/src/devices.c:211 ../cli/src/devices.c:227
+#: ../cli/src/devices.c:213 ../cli/src/devices.c:229
 msgid "ACTIVE"
 msgstr "AKTYWNOŚĆ"
 
-#: ../cli/src/devices.c:254
+#: ../cli/src/devices.c:246
 #, c-format
 msgid ""
 "Usage: nmcli dev { COMMAND | help }\n"
@@ -695,7 +704,7 @@ msgid ""
 "  status\n"
 "  list [iface <iface>]\n"
 "  disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-"  wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+"  wifi [list [iface <iface>] [bssid <BSSID>]]\n"
 "  wimax [list [iface <iface>] [nsp <name>]]\n"
 "\n"
 msgstr ""
@@ -708,312 +717,312 @@ msgstr ""
 "  status\n"
 "  list [iface <interfejs]\n"
 "  disconnect iface <interfejs> [--nowait] [--timeout <czas>]\n"
-"  wifi [list [iface <interfejs>] [hwaddr <adres_sprzętowy>]]\n"
+"  wifi [list [iface <interfejs>] [bssid <BSSID>]]\n"
 "  wimax [list [iface <interfejs>] [nsp <nazwa>]]\n"
 
-#: ../cli/src/devices.c:282
+#: ../cli/src/devices.c:274
 msgid "unmanaged"
 msgstr "niezarządzane"
 
-#: ../cli/src/devices.c:284
+#: ../cli/src/devices.c:276
 msgid "unavailable"
 msgstr "niedostępne"
 
-#: ../cli/src/devices.c:286 ../cli/src/network-manager.c:113
+#: ../cli/src/devices.c:278 ../cli/src/network-manager.c:108
 msgid "disconnected"
 msgstr "rozłączono"
 
-#: ../cli/src/devices.c:288
+#: ../cli/src/devices.c:280
 msgid "connecting (prepare)"
 msgstr "łączenie (przygotowanie)"
 
-#: ../cli/src/devices.c:290
+#: ../cli/src/devices.c:282
 msgid "connecting (configuring)"
 msgstr "łączenie (konfigurowanie)"
 
-#: ../cli/src/devices.c:292
+#: ../cli/src/devices.c:284
 msgid "connecting (need authentication)"
 msgstr "łączenie (wymaga uwierzytelnienia)"
 
-#: ../cli/src/devices.c:294
+#: ../cli/src/devices.c:286
 msgid "connecting (getting IP configuration)"
 msgstr "łączenie (pobieranie konfiguracji adresu IP)"
 
-#: ../cli/src/devices.c:296
+#: ../cli/src/devices.c:288
 msgid "connecting (checking IP connectivity)"
 msgstr "łączenie (sprawdzanie łączności IP)"
 
-#: ../cli/src/devices.c:298
+#: ../cli/src/devices.c:290
 msgid "connecting (starting secondary connections)"
 msgstr "łączenie (uruchamianie drugorzędnych połączeń)"
 
-#: ../cli/src/devices.c:300 ../cli/src/network-manager.c:109
+#: ../cli/src/devices.c:292 ../cli/src/network-manager.c:104
 msgid "connected"
 msgstr "połączono"
 
-#: ../cli/src/devices.c:302
-msgid "deactivating"
-msgstr "deaktywowanie"
-
-#: ../cli/src/devices.c:304
+#: ../cli/src/devices.c:296
 msgid "connection failed"
 msgstr "połączenie się nie powiodło"
 
-#: ../cli/src/devices.c:329 ../cli/src/devices.c:339 ../cli/src/devices.c:499
-#: ../cli/src/devices.c:543
+#: ../cli/src/devices.c:321 ../cli/src/devices.c:331 ../cli/src/devices.c:491
+#: ../cli/src/devices.c:535
 msgid "Unknown"
 msgstr "Nieznane"
 
-#: ../cli/src/devices.c:372
+#: ../cli/src/devices.c:364
 msgid "(none)"
 msgstr "(brak)"
 
-#: ../cli/src/devices.c:397
+#: ../cli/src/devices.c:389
 #, c-format
 msgid "%s: error converting IP4 address 0x%X"
 msgstr "%s: błąd podczas konwertowania adresu IPv4 0x%X"
 
-#: ../cli/src/devices.c:468
+#: ../cli/src/devices.c:460
 #, c-format
 msgid "%u MHz"
 msgstr "%u MHz"
 
-#: ../cli/src/devices.c:469
+#: ../cli/src/devices.c:461
 #, c-format
 msgid "%u MB/s"
 msgstr "%u MB/s"
 
-#: ../cli/src/devices.c:478
+#: ../cli/src/devices.c:470
 msgid "Encrypted: "
 msgstr "Zaszyfrowane: "
 
-#: ../cli/src/devices.c:483
+#: ../cli/src/devices.c:475
 msgid "WEP "
 msgstr "WEP "
 
-#: ../cli/src/devices.c:485
+#: ../cli/src/devices.c:477
 msgid "WPA "
 msgstr "WPA "
 
-#: ../cli/src/devices.c:487
+#: ../cli/src/devices.c:479
 msgid "WPA2 "
 msgstr "WPA2 "
 
-#: ../cli/src/devices.c:490
+#: ../cli/src/devices.c:482
 msgid "Enterprise "
 msgstr "Enterprise "
 
-#: ../cli/src/devices.c:499
+#: ../cli/src/devices.c:491
 msgid "Ad-Hoc"
 msgstr "Ad-hoc"
 
-#: ../cli/src/devices.c:499
+#: ../cli/src/devices.c:491
 msgid "Infrastructure"
 msgstr "Infrastruktura"
 
-#: ../cli/src/devices.c:534
+#: ../cli/src/devices.c:526
 msgid "Home"
 msgstr "Dom"
 
-#: ../cli/src/devices.c:537
+#: ../cli/src/devices.c:529
 msgid "Partner"
 msgstr "Partner"
 
-#: ../cli/src/devices.c:540
+#: ../cli/src/devices.c:532
 msgid "Roaming"
 msgstr "Roaming"
 
-#: ../cli/src/devices.c:610
+#: ../cli/src/devices.c:602
 #, c-format
 msgid "Error: 'dev list': %s"
 msgstr "Błąd: \"dev list\": %s"
 
-#: ../cli/src/devices.c:612
+#: ../cli/src/devices.c:604
 #, c-format
 msgid "Error: 'dev list': %s; allowed fields: %s"
 msgstr "Błąd: \"dev list\": %s; dozwolone pola: %s"
 
-#: ../cli/src/devices.c:621
+#: ../cli/src/devices.c:613
 msgid "Device details"
 msgstr "Informacje o urządzeniu"
 
-#: ../cli/src/devices.c:655 ../cli/src/devices.c:1150 ../cli/src/utils.c:342
+#: ../cli/src/devices.c:647 ../cli/src/devices.c:1142 ../cli/src/utils.c:343
 msgid "(unknown)"
 msgstr "(nieznane)"
 
-#: ../cli/src/devices.c:656
+#: ../cli/src/devices.c:648
 msgid "unknown)"
 msgstr "nieznane)"
 
-#: ../cli/src/devices.c:682
+#: ../cli/src/devices.c:674
 #, c-format
 msgid "%u Mb/s"
 msgstr "%u Mb/s"
 
 #. Print header
 #. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:755
+#: ../cli/src/devices.c:747
 msgid "on"
 msgstr "włączone"
 
-#: ../cli/src/devices.c:755
+#: ../cli/src/devices.c:747
 msgid "off"
 msgstr "wyłączone"
 
-#: ../cli/src/devices.c:1002
+#: ../cli/src/devices.c:994
 #, c-format
 msgid "Error: 'dev status': %s"
 msgstr "Błąd: \"dev status\": %s"
 
-#: ../cli/src/devices.c:1004
+#: ../cli/src/devices.c:996
 #, c-format
 msgid "Error: 'dev status': %s; allowed fields: %s"
 msgstr "Błąd: \"dev status\": %s; dozwolone pola: %s"
 
-#: ../cli/src/devices.c:1027
+#: ../cli/src/devices.c:1019
 msgid "Status of devices"
 msgstr "Stan urządzenia"
 
-#: ../cli/src/devices.c:1058
+#: ../cli/src/devices.c:1050
 #, c-format
 msgid "Error: '%s' argument is missing."
 msgstr "Błąd: brak parametru \"%s\"."
 
-#: ../cli/src/devices.c:1099 ../cli/src/devices.c:1251
-#: ../cli/src/devices.c:1387 ../cli/src/devices.c:1606
+#: ../cli/src/devices.c:1091 ../cli/src/devices.c:1243
+#: ../cli/src/devices.c:1380 ../cli/src/devices.c:1599
 #, c-format
 msgid "Error: Device '%s' not found."
 msgstr "Błąd: nie odnaleziono urządzenia \"%s\"."
 
-#: ../cli/src/devices.c:1122
+#: ../cli/src/devices.c:1114
 #, c-format
 msgid "Success: Device '%s' successfully disconnected."
 msgstr "Powodzenie: urządzenie \"%s\" zostało rozłączone."
 
-#: ../cli/src/devices.c:1147
+#: ../cli/src/devices.c:1139
 #, c-format
 msgid "Error: Device '%s' (%s) disconnecting failed: %s"
 msgstr "Błąd: rozłączenie urządzenia \"%s\" (%s) się nie powiodło: %s"
 
-#: ../cli/src/devices.c:1155
+#: ../cli/src/devices.c:1147
 #, c-format
 msgid "Device state: %d (%s)\n"
 msgstr "Stan urządzenia: %d (%s)\n"
 
-#: ../cli/src/devices.c:1220
+#: ../cli/src/devices.c:1212
 #, c-format
 msgid "Error: iface has to be specified."
 msgstr "Błąd: należy podać interfejs."
 
-#: ../cli/src/devices.c:1345
+#: ../cli/src/devices.c:1338
 #, c-format
 msgid "Error: 'dev wifi': %s"
 msgstr "Błąd: \"dev wifi\": %s"
 
-#: ../cli/src/devices.c:1347
+#: ../cli/src/devices.c:1340
 #, c-format
 msgid "Error: 'dev wifi': %s; allowed fields: %s"
 msgstr "Błąd: \"dev wifi\": %s; dozwolone pola: %s"
 
-#: ../cli/src/devices.c:1370
+#: ../cli/src/devices.c:1363
 msgid "WiFi scan list"
 msgstr "Lista skanowania sieci WiFi"
 
-#: ../cli/src/devices.c:1407 ../cli/src/devices.c:1461
-#: ../cli/src/devices.c:1668
+#: ../cli/src/devices.c:1400 ../cli/src/devices.c:1454
 #, c-format
-msgid "Error: Access point with hwaddr '%s' not found."
-msgstr "Błąd: nie odnaleziono punktu dostępowego z adresem sprzętowym \"%s\"."
+msgid "Error: Access point with bssid '%s' not found."
+msgstr "Błąd: nie odnaleziono punktu dostępowego z BSSID \"%s\"."
 
-#: ../cli/src/devices.c:1424
+#: ../cli/src/devices.c:1417
 #, c-format
 msgid "Error: Device '%s' is not a WiFi device."
 msgstr "Błąd: urządzenie \"%s\" nie jest urządzeniem WiFi."
 
-#: ../cli/src/devices.c:1488
+#: ../cli/src/devices.c:1481
 #, c-format
 msgid "Error: 'dev wifi' command '%s' is not valid."
 msgstr "Błąd: polecenie \"dev wifi\" \"%s\" jest nieprawidłowe."
 
-#: ../cli/src/devices.c:1564
+#: ../cli/src/devices.c:1557
 #, c-format
 msgid "Error: 'dev wimax': %s"
 msgstr "Błąd: \"dev wimax\": %s"
 
-#: ../cli/src/devices.c:1566
+#: ../cli/src/devices.c:1559
 #, c-format
 msgid "Error: 'dev wimax': %s; allowed fields: %s"
 msgstr "Błąd: \"dev wimax\": %s; dozwolone pola: %s"
 
-#: ../cli/src/devices.c:1589
+#: ../cli/src/devices.c:1582
 msgid "WiMAX NSP list"
 msgstr "Lista NSP sieci WiMAX"
 
-#: ../cli/src/devices.c:1626
+#: ../cli/src/devices.c:1619
 #, c-format
 msgid "Error: NSP with name '%s' not found."
 msgstr "Błąd: nie odnaleziono NSP o nazwie \"%s\"."
 
-#: ../cli/src/devices.c:1637
+#: ../cli/src/devices.c:1630
 #, c-format
 msgid "Error: Device '%s' is not a WiMAX device."
 msgstr "Błąd: urządzenie \"%s\" nie jest urządzeniem WiMAX."
 
-#: ../cli/src/devices.c:1695
+#: ../cli/src/devices.c:1661
+#, c-format
+msgid "Error: Access point with nsp '%s' not found."
+msgstr "Błąd: nie odnaleziono punktu dostępowego z NSP \"%s\"."
+
+#: ../cli/src/devices.c:1688
 #, c-format
 msgid "Error: 'dev wimax' command '%s' is not valid."
 msgstr "Błąd: polecenie \"dev wimax\" \"%s\" jest nieprawidłowe."
 
-#: ../cli/src/devices.c:1745
+#: ../cli/src/devices.c:1738
 #, c-format
 msgid "Error: 'dev' command '%s' is not valid."
 msgstr "Błąd: polecenie \"dev\" \"%s\" jest nieprawidłowe."
 
-#: ../cli/src/network-manager.c:35
+#: ../cli/src/network-manager.c:37
 msgid "RUNNING"
 msgstr "URUCHOMIONE"
 
 #. 0
-#: ../cli/src/network-manager.c:36
+#: ../cli/src/network-manager.c:38
 msgid "VERSION"
 msgstr "WERSJA"
 
 #. 2
-#: ../cli/src/network-manager.c:38
+#: ../cli/src/network-manager.c:40
 msgid "NET-ENABLED"
 msgstr "SIEĆ-WŁĄCZONA"
 
 #. 3
-#: ../cli/src/network-manager.c:39
+#: ../cli/src/network-manager.c:41
 msgid "WIFI-HARDWARE"
 msgstr "SPRZĘT-WIFI"
 
 #. 4
-#: ../cli/src/network-manager.c:40
+#: ../cli/src/network-manager.c:42
 msgid "WIFI"
 msgstr "WIFI"
 
 #. 5
-#: ../cli/src/network-manager.c:41
+#: ../cli/src/network-manager.c:43
 msgid "WWAN-HARDWARE"
 msgstr "SPRZĘT-WWAN"
 
 #. 6
-#: ../cli/src/network-manager.c:42
+#: ../cli/src/network-manager.c:44
 msgid "WWAN"
 msgstr "WWAN"
 
 #. 7
-#: ../cli/src/network-manager.c:43
+#: ../cli/src/network-manager.c:45
 msgid "WIMAX-HARDWARE"
 msgstr "SPRZĘT-WIMAX"
 
 #. 8
-#: ../cli/src/network-manager.c:44
+#: ../cli/src/network-manager.c:46
 msgid "WIMAX"
 msgstr "WIMAX"
 
-#: ../cli/src/network-manager.c:72
+#: ../cli/src/network-manager.c:67
 #, c-format
 msgid ""
 "Usage: nmcli nm { COMMAND | help }\n"
@@ -1043,142 +1052,142 @@ msgstr ""
 "  wwan [on|off]\n"
 "  wimax [on|off]\n"
 
-#: ../cli/src/network-manager.c:101
+#: ../cli/src/network-manager.c:96
 msgid "asleep"
 msgstr "wstrzymane"
 
-#: ../cli/src/network-manager.c:103
+#: ../cli/src/network-manager.c:98
 msgid "connecting"
 msgstr "łączenie"
 
-#: ../cli/src/network-manager.c:105
+#: ../cli/src/network-manager.c:100
 msgid "connected (local only)"
 msgstr "połączono (tylko lokalnie)"
 
-#: ../cli/src/network-manager.c:107
+#: ../cli/src/network-manager.c:102
 msgid "connected (site only)"
 msgstr "połączono (tylko witryny)"
 
-#: ../cli/src/network-manager.c:111
+#: ../cli/src/network-manager.c:106
 msgid "disconnecting"
 msgstr "rozłączanie"
 
-#: ../cli/src/network-manager.c:151
+#: ../cli/src/network-manager.c:146
 #, c-format
 msgid "Error: 'nm status': %s"
 msgstr "Błąd: \"nm status\": %s"
 
-#: ../cli/src/network-manager.c:153
+#: ../cli/src/network-manager.c:148
 #, c-format
 msgid "Error: 'nm status': %s; allowed fields: %s"
 msgstr "Błąd: \"nm status\": %s; dozwolone pola: %s"
 
 #. create NMClient
-#: ../cli/src/network-manager.c:166 ../cli/src/network-manager.c:167
-#: ../cli/src/network-manager.c:168 ../cli/src/network-manager.c:169
-#: ../cli/src/network-manager.c:170 ../cli/src/network-manager.c:172
-#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:294
-#: ../cli/src/network-manager.c:349 ../cli/src/network-manager.c:387
-#: ../cli/src/network-manager.c:426
+#: ../cli/src/network-manager.c:161 ../cli/src/network-manager.c:162
+#: ../cli/src/network-manager.c:163 ../cli/src/network-manager.c:164
+#: ../cli/src/network-manager.c:165 ../cli/src/network-manager.c:167
+#: ../cli/src/network-manager.c:168 ../cli/src/network-manager.c:289
+#: ../cli/src/network-manager.c:344 ../cli/src/network-manager.c:382
+#: ../cli/src/network-manager.c:421
 msgid "enabled"
 msgstr "włączone"
 
-#: ../cli/src/network-manager.c:166 ../cli/src/network-manager.c:167
-#: ../cli/src/network-manager.c:168 ../cli/src/network-manager.c:169
-#: ../cli/src/network-manager.c:170 ../cli/src/network-manager.c:172
-#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:294
-#: ../cli/src/network-manager.c:349 ../cli/src/network-manager.c:387
-#: ../cli/src/network-manager.c:426
+#: ../cli/src/network-manager.c:161 ../cli/src/network-manager.c:162
+#: ../cli/src/network-manager.c:163 ../cli/src/network-manager.c:164
+#: ../cli/src/network-manager.c:165 ../cli/src/network-manager.c:167
+#: ../cli/src/network-manager.c:168 ../cli/src/network-manager.c:289
+#: ../cli/src/network-manager.c:344 ../cli/src/network-manager.c:382
+#: ../cli/src/network-manager.c:421
 msgid "disabled"
 msgstr "wyłączone"
 
-#: ../cli/src/network-manager.c:186
+#: ../cli/src/network-manager.c:181
 msgid "NetworkManager status"
 msgstr "Stan usługi NetworkManager"
 
 #. Print header
-#: ../cli/src/network-manager.c:189
+#: ../cli/src/network-manager.c:184
 msgid "running"
 msgstr "uruchamiany"
 
-#: ../cli/src/network-manager.c:189
+#: ../cli/src/network-manager.c:184
 msgid "not running"
 msgstr "nieuruchomiony"
 
-#: ../cli/src/network-manager.c:220 ../cli/src/utils.c:322
+#: ../cli/src/network-manager.c:215 ../cli/src/utils.c:323
 #, c-format
 msgid "Error: Couldn't connect to system bus: %s"
 msgstr "Błąd: nie można połączyć się z magistralą systemową: %s"
 
-#: ../cli/src/network-manager.c:231
+#: ../cli/src/network-manager.c:226
 #, c-format
 msgid "Error: Couldn't create D-Bus object proxy."
 msgstr "Błąd: nie można utworzyć pośrednika obiektu usługi D-Bus."
 
-#: ../cli/src/network-manager.c:237
+#: ../cli/src/network-manager.c:232
 #, c-format
 msgid "Error in sleep: %s"
 msgstr "Błąd w poleceniu sleep: %s"
 
-#: ../cli/src/network-manager.c:281 ../cli/src/network-manager.c:336
-#: ../cli/src/network-manager.c:374 ../cli/src/network-manager.c:413
+#: ../cli/src/network-manager.c:276 ../cli/src/network-manager.c:331
+#: ../cli/src/network-manager.c:369 ../cli/src/network-manager.c:408
 #, c-format
 msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
 msgstr ""
-"Błąd: wartość \"%s\" opcji \"--fields\" jest nieprawidłowa; dozwolone pola: "
-"%s."
+"Błąd: wartość \"%s\" opcji \"--fields\" jest nieprawidłowa; dozwolone pola: %"
+"s."
 
-#: ../cli/src/network-manager.c:289
+#: ../cli/src/network-manager.c:284
 msgid "Networking enabled"
 msgstr "Sieć jest włączona"
 
-#: ../cli/src/network-manager.c:305
+#: ../cli/src/network-manager.c:300
 #, c-format
 msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
 msgstr ""
 "Błąd: nieprawidłowy parametr \"enable\": \"%s\"; należy użyć \"true\" lub "
 "\"false\"."
 
-#: ../cli/src/network-manager.c:315
+#: ../cli/src/network-manager.c:310
 #, c-format
 msgid "Error: Sleeping status is not exported by NetworkManager."
 msgstr "Błąd: stan snu nie jest eksportowany przez usługę NetworkManager."
 
-#: ../cli/src/network-manager.c:323
+#: ../cli/src/network-manager.c:318
 #, c-format
 msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
 msgstr ""
 "Błąd: nieprawidłowy parametr \"sleep\": \"%s\"; należy użyć \"true\" lub "
 "\"false\"."
 
-#: ../cli/src/network-manager.c:344
+#: ../cli/src/network-manager.c:339
 msgid "WiFi enabled"
 msgstr "WiFi jest włączone"
 
-#: ../cli/src/network-manager.c:360
+#: ../cli/src/network-manager.c:355
 #, c-format
 msgid "Error: invalid 'wifi' parameter: '%s'."
 msgstr "Błąd: nieprawidłowy parametr \"wifi\": \"%s\"."
 
-#: ../cli/src/network-manager.c:382
+#: ../cli/src/network-manager.c:377
 msgid "WWAN enabled"
 msgstr "WWAN jest włączone"
 
-#: ../cli/src/network-manager.c:398
+#: ../cli/src/network-manager.c:393
 #, c-format
 msgid "Error: invalid 'wwan' parameter: '%s'."
 msgstr "Błąd: nieprawidłowy parametr \"wwan\": \"%s\"."
 
-#: ../cli/src/network-manager.c:421
+#: ../cli/src/network-manager.c:416
 msgid "WiMAX enabled"
 msgstr "WiMAX jest włączone"
 
-#: ../cli/src/network-manager.c:437
+#: ../cli/src/network-manager.c:432
 #, c-format
 msgid "Error: invalid 'wimax' parameter: '%s'."
 msgstr "Błąd: nieprawidłowy parametr \"wimax\": \"%s\"."
 
-#: ../cli/src/network-manager.c:450
+#: ../cli/src/network-manager.c:445
 #, c-format
 msgid "Error: 'nm' command '%s' is not valid."
 msgstr "Błąd: parametr \"nm\" \"%s\" jest nieprawidłowy."
@@ -1293,79 +1302,87 @@ msgstr "Błąd: nie można utworzyć obiektu NMClient."
 msgid "Success"
 msgstr "Powodzenie"
 
-#: ../cli/src/settings.c:421
+#: ../cli/src/settings.c:447
 #, c-format
 msgid "%d (hex-ascii-key)"
 msgstr "%d (klucz-szesnastkowy-acsii))"
 
-#: ../cli/src/settings.c:423
+#: ../cli/src/settings.c:449
 #, c-format
 msgid "%d (104/128-bit passphrase)"
 msgstr "%d (104/128-bitowe hasło)"
 
-#: ../cli/src/settings.c:426
+#: ../cli/src/settings.c:452
 #, c-format
 msgid "%d (unknown)"
 msgstr "%d (nieznane)"
 
-#: ../cli/src/settings.c:452
+#: ../cli/src/settings.c:478
 msgid "0 (unknown)"
 msgstr "0 (nieznane)"
 
-#: ../cli/src/settings.c:458
+#: ../cli/src/settings.c:484
 msgid "any, "
 msgstr "dowolne, "
 
-#: ../cli/src/settings.c:460
+#: ../cli/src/settings.c:486
 msgid "900 MHz, "
 msgstr "900 MHz, "
 
-#: ../cli/src/settings.c:462
+#: ../cli/src/settings.c:488
 msgid "1800 MHz, "
 msgstr "1800 MHz, "
 
-#: ../cli/src/settings.c:464
+#: ../cli/src/settings.c:490
 msgid "1900 MHz, "
 msgstr "1900 MHz, "
 
-#: ../cli/src/settings.c:466
+#: ../cli/src/settings.c:492
 msgid "850 MHz, "
 msgstr "850 MHz, "
 
-#: ../cli/src/settings.c:468
+#: ../cli/src/settings.c:494
 msgid "WCDMA 3GPP UMTS 2100 MHz, "
 msgstr "WCDMA 3GPP UMTS 2100 MHz, "
 
-#: ../cli/src/settings.c:470
+#: ../cli/src/settings.c:496
 msgid "WCDMA 3GPP UMTS 1800 MHz, "
 msgstr "WCDMA 3GPP UMTS 1800 MHz, "
 
-#: ../cli/src/settings.c:472
+#: ../cli/src/settings.c:498
 msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
 msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
 
-#: ../cli/src/settings.c:474
+#: ../cli/src/settings.c:500
 msgid "WCDMA 3GPP UMTS 800 MHz, "
 msgstr "WCDMA 3GPP UMTS 800 MHz, "
 
-#: ../cli/src/settings.c:476
+#: ../cli/src/settings.c:502
 msgid "WCDMA 3GPP UMTS 850 MHz, "
 msgstr "WCDMA 3GPP UMTS 850 MHz, "
 
-#: ../cli/src/settings.c:478
+#: ../cli/src/settings.c:504
 msgid "WCDMA 3GPP UMTS 900 MHz, "
 msgstr "WCDMA 3GPP UMTS 900 MHz, "
 
-#: ../cli/src/settings.c:480
+#: ../cli/src/settings.c:506
 msgid "WCDMA 3GPP UMTS 1700 MHz, "
 msgstr "WCDMA 3GPP UMTS 1700 MHz, "
 
-#: ../cli/src/settings.c:564 ../cli/src/settings.c:730
+#: ../cli/src/settings.c:508
+msgid "WCDMA 3GPP UMTS 1900 MHz, "
+msgstr "WCDMA 3GPP UMTS 1900 MHz, "
+
+#: ../cli/src/settings.c:510
+msgid "WCDMA 3GPP UMTS 2600 MHz, "
+msgstr "WCDMA 3GPP UMTS 2600 MHz, "
+
+#: ../cli/src/settings.c:636 ../cli/src/settings.c:835
 msgid "auto"
 msgstr "automatyczne"
 
-#: ../cli/src/settings.c:725 ../cli/src/settings.c:728
-#: ../cli/src/settings.c:729 ../cli/src/utils.c:176
+#: ../cli/src/settings.c:829 ../cli/src/settings.c:832
+#: ../cli/src/settings.c:833 ../cli/src/utils.c:176
 msgid "not set"
 msgstr "nieustawione"
 
@@ -1390,19 +1407,19 @@ msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
 msgstr ""
 "Opcja \"--terse\" wymaga konkretnej wartości opcji \"--fields\", nie \"%s\""
 
-#: ../cli/src/utils.c:333
+#: ../cli/src/utils.c:334
 #, c-format
 msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"
 msgstr ""
 "Błąd: nie można utworzyć pośrednika obiektu usługi D-Bus dla org.freedesktop."
 "DBus"
 
-#: ../cli/src/utils.c:341
+#: ../cli/src/utils.c:342
 #, c-format
 msgid "Error: NameHasOwner request failed: %s"
 msgstr "Błąd: żądanie NameHasOwner się nie powiodło: %s"
 
-#: ../cli/src/utils.c:386
+#: ../cli/src/utils.c:387
 #, c-format
 msgid ""
 "Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
@@ -1411,7 +1428,7 @@ msgstr ""
 "Ostrzeżenie: wersje programu nmcli (%s) i usługi NetworkManager (%s) się nie "
 "zgadzają. Użycie opcji --nocheck ukrywa ostrzeżenie.\n"
 
-#: ../cli/src/utils.c:395
+#: ../cli/src/utils.c:396
 #, c-format
 msgid ""
 "Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force "
@@ -1421,353 +1438,383 @@ msgstr ""
 "zgadzają. Wymuszono wykonanie używając opcji --nocheck, ale wynik może być "
 "nieprzewidywalny."
 
-#: ../libnm-util/crypto.c:125
+#: ../libnm-util/crypto.c:133
 #, c-format
 msgid "PEM key file had no end tag '%s'."
 msgstr "Plik klucza PEM nie zawiera znacznika końcowego \"%s\"."
 
-#: ../libnm-util/crypto.c:138
+#: ../libnm-util/crypto.c:146
 #, c-format
 msgid "Doesn't look like a PEM private key file."
 msgstr "Nie wygląda na plik klucza prywatnego PEM."
 
-#: ../libnm-util/crypto.c:146
+#: ../libnm-util/crypto.c:154
 #, c-format
 msgid "Not enough memory to store PEM file data."
 msgstr "Brak wystarczającej ilości pamięci do przechowania danych pliku PEM."
 
-#: ../libnm-util/crypto.c:162
+#: ../libnm-util/crypto.c:170
 #, c-format
 msgid "Malformed PEM file: Proc-Type was not first tag."
 msgstr "Uszkodzony plik PEM: Proc-Type nie był pierwszym znacznikiem."
 
-#: ../libnm-util/crypto.c:170
+#: ../libnm-util/crypto.c:178
 #, c-format
 msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
 msgstr "Uszkodzony plik PEM: nieznany znacznik Proc-Type \"%s\"."
 
-#: ../libnm-util/crypto.c:180
+#: ../libnm-util/crypto.c:188
 #, c-format
 msgid "Malformed PEM file: DEK-Info was not the second tag."
 msgstr "Uszkodzony plik PEM: DEK-Info nie był drugim znacznikiem."
 
-#: ../libnm-util/crypto.c:191
+#: ../libnm-util/crypto.c:199
 #, c-format
 msgid "Malformed PEM file: no IV found in DEK-Info tag."
 msgstr "Uszkodzony plik PEM: brak IV w znaczniku DEK-Info."
 
-#: ../libnm-util/crypto.c:198
+#: ../libnm-util/crypto.c:206
 #, c-format
 msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
 msgstr "Uszkodzony plik PEM: nieprawidłowy format IV w znaczniku DEK-Info."
 
-#: ../libnm-util/crypto.c:211
+#: ../libnm-util/crypto.c:219
 #, c-format
 msgid "Malformed PEM file: unknown private key cipher '%s'."
 msgstr "Uszkodzony plik PEM: nieznany szyfr klucza prywatnego: \"%s\"."
 
-#: ../libnm-util/crypto.c:230
+#: ../libnm-util/crypto.c:238
 #, c-format
 msgid "Could not decode private key."
 msgstr "Nie można zdekodować klucza prywatnego."
 
-#: ../libnm-util/crypto.c:266 ../libnm-util/crypto.c:552
+#: ../libnm-util/crypto.c:284
+msgid "Failed to find expected PKCS#8 start tag."
+msgstr ""
+"Odnalezienie oczekiwanego znacznika początkowego PKCS#8 się nie powiodło."
+
+#: ../libnm-util/crypto.c:292
+#, c-format
+msgid "Failed to find expected PKCS#8 end tag '%s'."
+msgstr ""
+"Odnalezienie oczekiwanego znacznika końcowego PKCS#8 \"%s\" się nie powiodło."
+
+#: ../libnm-util/crypto.c:312
+msgid "Not enough memory to store private key data."
+msgstr ""
+"Brak wystarczającej ilości pamięci do przechowania danych klucza prywatnego."
+
+#: ../libnm-util/crypto.c:317
+msgid "Failed to decode PKCS#8 private key."
+msgstr "Odkodowanie klucza prywatnego PKCS#8 się nie powiodło."
+
+#: ../libnm-util/crypto.c:339 ../libnm-util/crypto.c:625
 #, c-format
 msgid "Not enough memory to store certificate data."
 msgstr "Brak wystarczającej ilości pamięci do przechowania danych certyfikatu."
 
-#: ../libnm-util/crypto.c:292
+#: ../libnm-util/crypto.c:365
 #, c-format
 msgid "IV must be an even number of bytes in length."
 msgstr "Liczba bajtów w IV musi być liczbą parzystą."
 
-#: ../libnm-util/crypto.c:301
+#: ../libnm-util/crypto.c:374
 #, c-format
 msgid "Not enough memory to store the IV."
 msgstr "Brak wystarczającej ilości pamięci do przechowania IV."
 
-#: ../libnm-util/crypto.c:312
+#: ../libnm-util/crypto.c:385
 #, c-format
 msgid "IV contains non-hexadecimal digits."
 msgstr "IV zawiera nieszesnastkowe cyfry."
 
-#: ../libnm-util/crypto.c:350 ../libnm-util/crypto_gnutls.c:148
-#: ../libnm-util/crypto_gnutls.c:266 ../libnm-util/crypto_nss.c:171
-#: ../libnm-util/crypto_nss.c:336
+#: ../libnm-util/crypto.c:423 ../libnm-util/crypto_gnutls.c:147
+#: ../libnm-util/crypto_gnutls.c:265 ../libnm-util/crypto_nss.c:167
+#: ../libnm-util/crypto_nss.c:332
 #, c-format
 msgid "Private key cipher '%s' was unknown."
 msgstr "Nieznany szyfr klucza prywatnego \"%s\"."
 
-#: ../libnm-util/crypto.c:359
+#: ../libnm-util/crypto.c:432
 #, c-format
 msgid "Not enough memory to decrypt private key."
 msgstr "Brak wystarczającej ilości pamięci do odszyfrowania klucza prywatnego."
 
-#: ../libnm-util/crypto.c:424
+#: ../libnm-util/crypto.c:497
 #, c-format
 msgid "Not enough memory to store decrypted private key."
 msgstr ""
 "Brak wystarczającej ilości pamięci do przechowania odszyfrowanego klucza "
 "prywatnego."
 
-#: ../libnm-util/crypto.c:469
+#: ../libnm-util/crypto.c:542
 #, c-format
 msgid "Unable to determine private key type."
 msgstr "Nie można określić typu klucza prywatnego."
 
-#: ../libnm-util/crypto.c:524
+#: ../libnm-util/crypto.c:597
 #, c-format
 msgid "PEM certificate had no start tag '%s'."
 msgstr "Certyfikat PEM nie zawiera początkowego znacznika \"%s\"."
 
-#: ../libnm-util/crypto.c:533
+#: ../libnm-util/crypto.c:606
 #, c-format
 msgid "PEM certificate had no end tag '%s'."
 msgstr "Certyfikat PEM nie zawiera kończącego znacznika \"%s\"."
 
-#: ../libnm-util/crypto.c:557
+#: ../libnm-util/crypto.c:630
 #, c-format
 msgid "Failed to decode certificate."
 msgstr "Zdekodowanie certyfikatu się nie powiodło."
 
-#: ../libnm-util/crypto_gnutls.c:49
+#: ../libnm-util/crypto_gnutls.c:50
 msgid "Failed to initialize the crypto engine."
 msgstr "Zainicjowanie modułu szyfrowania się nie powiodło."
 
-#: ../libnm-util/crypto_gnutls.c:93
+#: ../libnm-util/crypto_gnutls.c:92
 #, c-format
 msgid "Failed to initialize the MD5 engine: %s / %s."
 msgstr "Zainicjowanie modułu MD5 się nie powiodło: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:156
+#: ../libnm-util/crypto_gnutls.c:155
 #, c-format
 msgid "Invalid IV length (must be at least %zd)."
 msgstr "Nieprawidłowa długość IV (musi wynosić co najmniej %zd)."
 
-#: ../libnm-util/crypto_gnutls.c:165 ../libnm-util/crypto_nss.c:188
+#: ../libnm-util/crypto_gnutls.c:164 ../libnm-util/crypto_nss.c:184
 #, c-format
 msgid "Not enough memory for decrypted key buffer."
 msgstr "Brak wystarczającej ilości pamięci dla bufora odszyfrowanego klucza."
 
-#: ../libnm-util/crypto_gnutls.c:173
+#: ../libnm-util/crypto_gnutls.c:172
 #, c-format
 msgid "Failed to initialize the decryption cipher context: %s / %s."
 msgstr ""
 "Zainicjowanie kontekstu szyfru do odszyfrowania się nie powiodło: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:182
+#: ../libnm-util/crypto_gnutls.c:181
 #, c-format
 msgid "Failed to set symmetric key for decryption: %s / %s."
 msgstr ""
 "Ustawienie klucza symetrycznego do odszyfrowania się nie powiodło: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:191
+#: ../libnm-util/crypto_gnutls.c:190
 #, c-format
 msgid "Failed to set IV for decryption: %s / %s."
 msgstr "Ustawienie IV do odszyfrowania się nie powiodło: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:200
+#: ../libnm-util/crypto_gnutls.c:199
 #, c-format
 msgid "Failed to decrypt the private key: %s / %s."
 msgstr "Odszyfrowanie klucza prywatnego się nie powiodło: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:210 ../libnm-util/crypto_nss.c:267
+#: ../libnm-util/crypto_gnutls.c:209 ../libnm-util/crypto_nss.c:263
 #, c-format
 msgid "Failed to decrypt the private key: unexpected padding length."
 msgstr ""
 "Odszyfrowanie klucza prywatnego się nie powiodło: nieoczekiwana długość "
 "wypełnienia."
 
-#: ../libnm-util/crypto_gnutls.c:221 ../libnm-util/crypto_nss.c:278
+#: ../libnm-util/crypto_gnutls.c:220 ../libnm-util/crypto_nss.c:274
 #, c-format
 msgid "Failed to decrypt the private key."
 msgstr "Odszyfrowanie klucza prywatnego się nie powiodło."
 
-#: ../libnm-util/crypto_gnutls.c:286 ../libnm-util/crypto_nss.c:356
+#: ../libnm-util/crypto_gnutls.c:285 ../libnm-util/crypto_nss.c:352
 #, c-format
 msgid "Could not allocate memory for encrypting."
 msgstr "Nie można przydzielić pamięci do szyfrowania."
 
-#: ../libnm-util/crypto_gnutls.c:294
+#: ../libnm-util/crypto_gnutls.c:293
 #, c-format
 msgid "Failed to initialize the encryption cipher context: %s / %s."
 msgstr ""
 "Zainicjowanie kontekstu szyfru do szyfrowania się nie powiodło: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:303
+#: ../libnm-util/crypto_gnutls.c:302
 #, c-format
 msgid "Failed to set symmetric key for encryption: %s / %s."
 msgstr ""
 "Ustawienie klucza symetrycznego do szyfrowania się nie powiodło: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:313
+#: ../libnm-util/crypto_gnutls.c:312
 #, c-format
 msgid "Failed to set IV for encryption: %s / %s."
 msgstr "Ustawienie IV do szyfrowania się nie powiodło: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:322
+#: ../libnm-util/crypto_gnutls.c:321
 #, c-format
 msgid "Failed to encrypt the data: %s / %s."
 msgstr "Zaszyfrowanie danych się nie powiodło: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:362
+#: ../libnm-util/crypto_gnutls.c:361
 #, c-format
 msgid "Error initializing certificate data: %s"
 msgstr "Błąd podczas inicjowania danych certyfikatu: %s"
 
-#: ../libnm-util/crypto_gnutls.c:384
+#: ../libnm-util/crypto_gnutls.c:383
 #, c-format
 msgid "Couldn't decode certificate: %s"
 msgstr "Nie można zdekodować certyfikatu: %s"
 
-#: ../libnm-util/crypto_gnutls.c:408
+#: ../libnm-util/crypto_gnutls.c:407
 #, c-format
 msgid "Couldn't initialize PKCS#12 decoder: %s"
 msgstr "Nie można zainicjować dekodera PKCS#12: %s"
 
-#: ../libnm-util/crypto_gnutls.c:421
+#: ../libnm-util/crypto_gnutls.c:420
 #, c-format
 msgid "Couldn't decode PKCS#12 file: %s"
 msgstr "Nie można odszyfrować pliku PKCS#12: %s"
 
-#: ../libnm-util/crypto_gnutls.c:433
+#: ../libnm-util/crypto_gnutls.c:432
 #, c-format
 msgid "Couldn't verify PKCS#12 file: %s"
 msgstr "Nie można zweryfikować pliku PKCS#12: %s"
 
+#: ../libnm-util/crypto_gnutls.c:460
+#, c-format
+msgid "Couldn't initialize PKCS#8 decoder: %s"
+msgstr "Nie można zainicjować dekodera PKCS#8: %s"
+
+#: ../libnm-util/crypto_gnutls.c:483
+#, c-format
+msgid "Couldn't decode PKCS#8 file: %s"
+msgstr "Nie można dekodować pliku PKCS#8: %s"
+
 #: ../libnm-util/crypto_nss.c:56
 #, c-format
 msgid "Failed to initialize the crypto engine: %d."
 msgstr "Zainicjowanie modułu szyfrowania się nie powiodło: %d."
 
-#: ../libnm-util/crypto_nss.c:111
+#: ../libnm-util/crypto_nss.c:107
 #, c-format
 msgid "Failed to initialize the MD5 context: %d."
 msgstr "Zainicjowanie kontekstu MD5 się nie powiodło: %d."
 
-#: ../libnm-util/crypto_nss.c:179
+#: ../libnm-util/crypto_nss.c:175
 #, c-format
 msgid "Invalid IV length (must be at least %d)."
 msgstr "Nieprawidłowa długość IV (musi wynosić co najmniej %d)."
 
-#: ../libnm-util/crypto_nss.c:196
+#: ../libnm-util/crypto_nss.c:192
 #, c-format
 msgid "Failed to initialize the decryption cipher slot."
 msgstr "Zainicjowanie gniazda szyfru do odszyfrowania się nie powiodło."
 
-#: ../libnm-util/crypto_nss.c:206
+#: ../libnm-util/crypto_nss.c:202
 #, c-format
 msgid "Failed to set symmetric key for decryption."
 msgstr "Ustawienie klucza symetrycznego do odszyfrowania się nie powiodło."
 
-#: ../libnm-util/crypto_nss.c:216
+#: ../libnm-util/crypto_nss.c:212
 #, c-format
 msgid "Failed to set IV for decryption."
 msgstr "Ustawienie IV do odszyfrowania się nie powiodło."
 
-#: ../libnm-util/crypto_nss.c:224
+#: ../libnm-util/crypto_nss.c:220
 #, c-format
 msgid "Failed to initialize the decryption context."
 msgstr "Zainicjowanie kontekstu odszyfrowania się nie powiodło."
 
-#: ../libnm-util/crypto_nss.c:237
+#: ../libnm-util/crypto_nss.c:233
 #, c-format
 msgid "Failed to decrypt the private key: %d."
 msgstr "Odszyfrowanie klucza prywatnego się nie powiodło: %d."
 
-#: ../libnm-util/crypto_nss.c:245
+#: ../libnm-util/crypto_nss.c:241
 #, c-format
 msgid "Failed to decrypt the private key: decrypted data too large."
 msgstr ""
 "Odszyfrowanie klucza prywatnego się nie powiodło: odszyfrowane dane są za "
 "duże."
 
-#: ../libnm-util/crypto_nss.c:256
+#: ../libnm-util/crypto_nss.c:252
 #, c-format
 msgid "Failed to finalize decryption of the private key: %d."
 msgstr "Zakończenie odszyfrowania klucza prywatnego się nie powiodło: %d."
 
-#: ../libnm-util/crypto_nss.c:364
+#: ../libnm-util/crypto_nss.c:360
 #, c-format
 msgid "Failed to initialize the encryption cipher slot."
 msgstr "Zainicjowanie gniazda szyfru do szyfrowania się nie powiodło."
 
-#: ../libnm-util/crypto_nss.c:372
+#: ../libnm-util/crypto_nss.c:368
 #, c-format
 msgid "Failed to set symmetric key for encryption."
 msgstr "Ustawienie klucza symetrycznego do szyfrowania się nie powiodło."
 
-#: ../libnm-util/crypto_nss.c:380
+#: ../libnm-util/crypto_nss.c:376
 #, c-format
 msgid "Failed to set IV for encryption."
 msgstr "Ustawienie IV do szyfrowania się nie powiodło."
 
-#: ../libnm-util/crypto_nss.c:388
+#: ../libnm-util/crypto_nss.c:384
 #, c-format
 msgid "Failed to initialize the encryption context."
 msgstr "Zainicjowanie kontekstu szyfrowania się nie powiodło."
 
-#: ../libnm-util/crypto_nss.c:396
+#: ../libnm-util/crypto_nss.c:392
 #, c-format
 msgid "Failed to encrypt: %d."
 msgstr "Zaszyfrowanie się nie powiodło: %d."
 
-#: ../libnm-util/crypto_nss.c:404
+#: ../libnm-util/crypto_nss.c:400
 #, c-format
 msgid "Unexpected amount of data after encrypting."
 msgstr "Nieoczekiwana ilość danych po zaszyfrowaniu."
 
-#: ../libnm-util/crypto_nss.c:447
+#: ../libnm-util/crypto_nss.c:443
 #, c-format
 msgid "Couldn't decode certificate: %d"
 msgstr "Nie można zdekodować certyfikatu: %d"
 
-#: ../libnm-util/crypto_nss.c:482
+#: ../libnm-util/crypto_nss.c:478
 #, c-format
 msgid "Couldn't convert password to UCS2: %d"
 msgstr "Nie można przekonwertować hasła do UCS2: %d"
 
-#: ../libnm-util/crypto_nss.c:510
+#: ../libnm-util/crypto_nss.c:506
 #, c-format
 msgid "Couldn't initialize PKCS#12 decoder: %d"
 msgstr "Nie można zainicjować dekodera PKCS#12: %d"
 
-#: ../libnm-util/crypto_nss.c:519
+#: ../libnm-util/crypto_nss.c:515
 #, c-format
 msgid "Couldn't decode PKCS#12 file: %d"
 msgstr "Nie można odszyfrować pliku PKCS#12: %d"
 
-#: ../libnm-util/crypto_nss.c:528
+#: ../libnm-util/crypto_nss.c:524
 #, c-format
 msgid "Couldn't verify PKCS#12 file: %d"
 msgstr "Nie można zweryfikować pliku PKCS#12: %d"
 
-#: ../libnm-util/crypto_nss.c:557
+#: ../libnm-util/crypto_nss.c:568
 msgid "Could not generate random data."
 msgstr "Nie można utworzyć losowych danych."
 
-#: ../libnm-util/nm-utils.c:1988
+#: ../libnm-util/nm-utils.c:2000
 #, c-format
 msgid "Not enough memory to make encryption key."
 msgstr "Brak wystarczającej ilości pamięci, aby utworzyć klucz szyfrowania."
 
-#: ../libnm-util/nm-utils.c:2098
+#: ../libnm-util/nm-utils.c:2110
 msgid "Could not allocate memory for PEM file creation."
 msgstr "Nie można przydzielić pamięci do utworzenia pliku PEM."
 
-#: ../libnm-util/nm-utils.c:2110
+#: ../libnm-util/nm-utils.c:2122
 #, c-format
 msgid "Could not allocate memory for writing IV to PEM file."
 msgstr "Nie można przydzielić pamięci do zapisywania IV do pliku PEM."
 
-#: ../libnm-util/nm-utils.c:2122
+#: ../libnm-util/nm-utils.c:2134
 #, c-format
 msgid "Could not allocate memory for writing encrypted key to PEM file."
 msgstr ""
 "Nie można przydzielić pamięci do zapisywania zaszyfrowanego klucza do pliku "
 "PEM."
 
-#: ../libnm-util/nm-utils.c:2141
+#: ../libnm-util/nm-utils.c:2153
 #, c-format
 msgid "Could not allocate memory for PEM file data."
 msgstr "Nie można przydzielić pamięci dla danych pliku PEM."
@@ -1878,13 +1925,13 @@ msgid "System policy prevents sharing connections via an open WiFi network"
 msgstr ""
 "Polityka systemu powstrzymuje współdzielenie połączeń przez otwartą sieć WiFi"
 
-#: ../src/main.c:519
+#: ../src/main.c:530
 #, c-format
 msgid "Invalid option.  Please use --help to see a list of valid options.\n"
 msgstr ""
 "Nieprawidłowa opcja. Parametr --help wyświetli listę prawidłowych opcji.\n"
 
-#: ../src/main.c:590
+#: ../src/main.c:611
 #, c-format
 msgid "%s.  Please use --help to see a list of valid options.\n"
 msgstr "%s. Parametr --help wyświetli listę prawidłowych opcji.\n"
@@ -1919,116 +1966,111 @@ msgstr "nie można odnaleźć usługi \"dhcpcd\"."
 msgid "unsupported DHCP client '%s'"
 msgstr "nieobsługiwany klient DHCP \"%s\""
 
-#: ../src/dns-manager/nm-dns-manager.c:367
+#: ../src/dns-manager/nm-dns-manager.c:376
 msgid "NOTE: the libc resolver may not support more than 3 nameservers."
 msgstr "UWAGA: obsługa nazw libc nie obsługuje więcej niż 3 serwery nazw."
 
-#: ../src/dns-manager/nm-dns-manager.c:369
+#: ../src/dns-manager/nm-dns-manager.c:378
 msgid "The nameservers listed below may not be recognized."
 msgstr "Poniższe serwery nazw nie mogą nie zostać rozpoznane."
 
-#: ../src/logging/nm-logging.c:148
+#: ../src/logging/nm-logging.c:149
 #, c-format
 msgid "Unknown log level '%s'"
 msgstr "Nieznany poziom dziennika \"%s\""
 
-#: ../src/logging/nm-logging.c:173
+#: ../src/logging/nm-logging.c:174
 #, c-format
 msgid "Unknown log domain '%s'"
 msgstr "Nieznana domena dziennika \"%s\""
 
-#: ../src/modem-manager/nm-modem-cdma.c:294 ../src/nm-device-bt.c:353
+#: ../src/modem-manager/nm-modem-cdma.c:296 ../src/nm-device-bt.c:355
 #, c-format
 msgid "CDMA connection %d"
 msgstr "Połączenie CDMA %d"
 
-#: ../src/modem-manager/nm-modem-gsm.c:497 ../src/nm-device-bt.c:349
+#: ../src/modem-manager/nm-modem-gsm.c:499 ../src/nm-device-bt.c:351
 #, c-format
 msgid "GSM connection %d"
 msgstr "Połączenie GSM %d"
 
-#: ../src/nm-device-bt.c:324
+#: ../src/nm-device-bt.c:326
 #, c-format
 msgid "PAN connection %d"
 msgstr "Połączenie PAN %d"
 
-#: ../src/nm-device-bt.c:357
+#: ../src/nm-device-bt.c:359
 #, c-format
 msgid "DUN connection %d"
 msgstr "Połączenie DUN %d"
 
-#: ../src/nm-device-ethernet.c:1681
+#: ../src/nm-device-ethernet.c:1724
 #, c-format
 msgid "PPPoE connection %d"
 msgstr "Połączenie PPPoE %d"
 
-#: ../src/nm-device-ethernet.c:1681
+#: ../src/nm-device-ethernet.c:1724 ../src/settings/nm-settings-utils.c:50
 #, c-format
 msgid "Wired connection %d"
 msgstr "Połączenie przewodowe %d"
 
-#: ../src/nm-device-olpc-mesh.c:422
+#: ../src/nm-device-olpc-mesh.c:393
 #, c-format
 msgid "Mesh %d"
 msgstr "Sieć kratowa %d"
 
-#: ../src/nm-manager.c:656
+#: ../src/nm-manager.c:670
 #, c-format
 msgid "VPN connection %d"
 msgstr "Połączenie VPN %d"
 
-#: ../src/nm-netlink-monitor.c:100 ../src/nm-netlink-monitor.c:231
-#: ../src/nm-netlink-monitor.c:653
+#: ../src/nm-netlink-monitor.c:101 ../src/nm-netlink-monitor.c:234
+#: ../src/nm-netlink-monitor.c:661
 #, c-format
 msgid "error processing netlink message: %s"
 msgstr "błąd podczas przetwarzania komunikatu netlink: %s"
 
-#: ../src/nm-netlink-monitor.c:214
+#: ../src/nm-netlink-monitor.c:216
 msgid "error occurred while waiting for data on socket"
 msgstr "wystąpił błąd podczas oczekiwania na dane na gnieździe"
 
-#: ../src/nm-netlink-monitor.c:254
+#: ../src/nm-netlink-monitor.c:260
 #, c-format
 msgid "unable to connect to netlink for monitoring link status: %s"
 msgstr ""
 "nie można połączyć się z netlink dla monitorowania stanu połączenia: %s"
 
-#: ../src/nm-netlink-monitor.c:265
+#: ../src/nm-netlink-monitor.c:271
 #, c-format
 msgid "unable to enable netlink handle credential passing: %s"
 msgstr ""
-"nie można włączyć przekazywania danych uwierzytelniających uchwytu netlink: "
-"%s"
+"nie można włączyć przekazywania danych uwierzytelniających uchwytu netlink: %"
+"s"
 
-#: ../src/nm-netlink-monitor.c:291 ../src/nm-netlink-monitor.c:353
+#: ../src/nm-netlink-monitor.c:294 ../src/nm-netlink-monitor.c:354
 #, c-format
 msgid "unable to allocate netlink handle for monitoring link status: %s"
 msgstr ""
 "nie można przydzielić uchwytu netlink dla monitorowania stanu połączenia: %s"
 
-#: ../src/nm-netlink-monitor.c:376
+#: ../src/nm-netlink-monitor.c:379
 #, c-format
 msgid "unable to allocate netlink link cache for monitoring link status: %s"
 msgstr ""
 "nie można przydzielić pamięci podręcznej połączenia netlink dla "
 "monitorowania stanu połączenia: %s"
 
-#: ../src/nm-netlink-monitor.c:502
+#: ../src/nm-netlink-monitor.c:506
 #, c-format
 msgid "unable to join netlink group: %s"
 msgstr "nie można dołączyć do grupy netlink: %s"
 
-#: ../src/nm-netlink-monitor.c:629 ../src/nm-netlink-monitor.c:642
+#: ../src/nm-netlink-monitor.c:637 ../src/nm-netlink-monitor.c:650
 #, c-format
 msgid "error updating link cache: %s"
 msgstr "błąd podczas aktualizowania pamięci podręcznej połączenia: %s"
 
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3458
-#: ../src/settings/plugins/ifnet/connection_parser.c:49
+#: ../src/settings/plugins/ifcfg-rh/reader.c:3575
+#: ../src/settings/plugins/ifnet/connection_parser.c:51
 msgid "System"
 msgstr "Systemowe"
-
-#: ../src/settings/nm-default-wired-connection.c:143
-#, c-format
-msgid "Auto %s"
-msgstr "Automatyczne %s"
diff --git a/po/sl.po b/po/sl.po
index 33af9c1e..40b2741d 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -5,111 +5,120 @@
 # Matic Žgur <mr.zgur@gmail.com>, 2007.
 # Andrej Žnidaršič <andrej.znidarsic@gmail.com>, 2009 - 2010.
 # Matej Urbančič <matej.urban@gmail.com>, 2010.
+# Martin Srebotnjak  <miles@filmsi.net>, 2011.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: NetworkManager master\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=NetworkManager&component=general\n"
-"POT-Creation-Date: 2010-09-18 15:24+0000\n"
-"PO-Revision-Date: 2010-09-18 20:27+0100\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=NetworkManager&keywords=I18N+L10N&component=general\n"
+"POT-Creation-Date: 2011-08-20 15:25+0000\n"
+"PO-Revision-Date: 2011-09-21 09:12+0100\n"
 "Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
 "Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Language: \n"
 "Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0);\n"
 "X-Poedit-Country: SLOVENIA\n"
 "X-Poedit-Language: Slovenian\n"
 "X-Poedit-SourceCharset: utf-8\n"
 
-#: ../cli/src/connections.c:60
-#: ../cli/src/connections.c:75
-#: ../cli/src/devices.c:88
+#: ../cli/src/connections.c:64
+#: ../cli/src/connections.c:78
 #: ../cli/src/devices.c:101
-#: ../cli/src/devices.c:111
-#: ../cli/src/devices.c:121
+#: ../cli/src/devices.c:114
+#: ../cli/src/devices.c:124
 #: ../cli/src/devices.c:134
-#: ../cli/src/devices.c:145
-#: ../cli/src/devices.c:156
-#: ../cli/src/devices.c:165
-#: ../cli/src/devices.c:174
+#: ../cli/src/devices.c:148
+#: ../cli/src/devices.c:162
+#: ../cli/src/devices.c:173
+#: ../cli/src/devices.c:184
+#: ../cli/src/devices.c:193
+#: ../cli/src/devices.c:202
+#: ../cli/src/devices.c:224
 msgid "NAME"
 msgstr "IME"
 
 #. 0
-#: ../cli/src/connections.c:61
-#: ../cli/src/connections.c:76
+#: ../cli/src/connections.c:65
+#: ../cli/src/connections.c:79
 msgid "UUID"
 msgstr "UUID"
 
 #. 1
-#: ../cli/src/connections.c:62
+#: ../cli/src/connections.c:66
 msgid "DEVICES"
 msgstr "NAPRAVE"
 
 #. 2
-#: ../cli/src/connections.c:63
-#: ../cli/src/connections.c:78
-msgid "SCOPE"
-msgstr "OBSEG"
-
-#. 3
-#: ../cli/src/connections.c:64
+#: ../cli/src/connections.c:67
 msgid "DEFAULT"
 msgstr "PRIVZETO"
 
-#. 4
-#: ../cli/src/connections.c:65
-msgid "DBUS-SERVICE"
-msgstr "STORITEV-DBUS"
-
-#. 5
-#: ../cli/src/connections.c:66
+#. 3
+#: ../cli/src/connections.c:68
 msgid "SPEC-OBJECT"
 msgstr "SPEC-PREDMET"
 
-#. 6
-#: ../cli/src/connections.c:67
+#. 4
+#: ../cli/src/connections.c:69
 msgid "VPN"
 msgstr "VPN"
 
+#. 5
+#. 6
+#. 2
+#. 11
+#. 5
+#: ../cli/src/connections.c:70
+#: ../cli/src/connections.c:85
+#: ../cli/src/devices.c:69
+#: ../cli/src/devices.c:214
+#: ../cli/src/devices.c:230
+msgid "DBUS-PATH"
+msgstr "DBUS-POT"
+
 #. 1
 #. 0
 #. 1
-#: ../cli/src/connections.c:77
-#: ../cli/src/devices.c:62
-#: ../cli/src/devices.c:90
+#. 2
+#: ../cli/src/connections.c:80
+#: ../cli/src/devices.c:67
+#: ../cli/src/devices.c:103
+#: ../cli/src/devices.c:227
 msgid "TYPE"
 msgstr "VRSTA"
 
-#. 3
-#: ../cli/src/connections.c:79
+#. 2
+#: ../cli/src/connections.c:81
 msgid "TIMESTAMP"
 msgstr "ČASOVNI ŽIG"
 
-#. 4
-#: ../cli/src/connections.c:80
+#. 3
+#: ../cli/src/connections.c:82
 msgid "TIMESTAMP-REAL"
 msgstr "REAL-ČASOVNI ŽIG"
 
-#. 5
-#: ../cli/src/connections.c:81
+#. 4
+#: ../cli/src/connections.c:83
 msgid "AUTOCONNECT"
 msgstr "SAMODEJNO POVEŽI"
 
-#. 6
-#: ../cli/src/connections.c:82
+#. 5
+#: ../cli/src/connections.c:84
 msgid "READONLY"
 msgstr "SAMO ZA BRANJE"
 
-#: ../cli/src/connections.c:158
+#: ../cli/src/connections.c:167
 #, c-format
 msgid ""
 "Usage: nmcli con { COMMAND | help }\n"
 "  COMMAND := { list | status | up | down }\n"
 "\n"
-"  list [id <id> | uuid <id> | system | user]\n"
+"  list [id <id> | uuid <id>]\n"
 "  status\n"
+"  up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [nsp <name>] [--nowait] [--timeout <timeout>]\n"
 "  up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout <timeout>]\n"
 "  down id <id> | uuid <id>\n"
 msgstr ""
@@ -118,862 +127,999 @@ msgstr ""
 "\n"
 "  list [id <id> | uuid <id> | system | user]\n"
 "  status\n"
+"  up id <id> | uuid <id> [iface <vmesnik>] [ap <strojni-naslov>] [nsp <ime>] [--nowait] [--timeout <zakasnitev>]\n"
 "  up id <id> | uuid <id> [iface <vmesnik>] [ap <strojni-naslov>] [--nowait] [--timeout <zakasnitev>]\n"
 "  down id <id> | uuid <id>\n"
 
-#: ../cli/src/connections.c:198
-#: ../cli/src/connections.c:537
+#: ../cli/src/connections.c:220
+#: ../cli/src/connections.c:544
 #, c-format
 msgid "Error: 'con list': %s"
 msgstr "Napaka: 'con list': %s"
 
-#: ../cli/src/connections.c:200
-#: ../cli/src/connections.c:539
+#: ../cli/src/connections.c:222
+#: ../cli/src/connections.c:546
 #, c-format
 msgid "Error: 'con list': %s; allowed fields: %s"
 msgstr "Napaka: 'con list': %s; dovoljena so polja: %s"
 
-#: ../cli/src/connections.c:208
+#: ../cli/src/connections.c:230
 msgid "Connection details"
 msgstr "Podatki o povezavi"
 
-#: ../cli/src/connections.c:382
-#: ../cli/src/connections.c:602
-msgid "system"
-msgstr "sistem"
-
-#: ../cli/src/connections.c:382
-#: ../cli/src/connections.c:602
-msgid "user"
-msgstr "uporabnik"
-
-#: ../cli/src/connections.c:384
+#: ../cli/src/connections.c:419
 msgid "never"
 msgstr "nikoli"
 
 #. "CAPABILITIES"
 #. Print header
 #. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:385
-#: ../cli/src/connections.c:386
-#: ../cli/src/connections.c:603
-#: ../cli/src/connections.c:606
-#: ../cli/src/devices.c:432
-#: ../cli/src/devices.c:557
-#: ../cli/src/devices.c:583
-#: ../cli/src/devices.c:584
-#: ../cli/src/devices.c:585
-#: ../cli/src/devices.c:586
-#: ../cli/src/devices.c:587
-#: ../cli/src/settings.c:508
-#: ../cli/src/settings.c:551
-#: ../cli/src/settings.c:652
-#: ../cli/src/settings.c:926
-#: ../cli/src/settings.c:927
-#: ../cli/src/settings.c:929
-#: ../cli/src/settings.c:931
-#: ../cli/src/settings.c:1056
-#: ../cli/src/settings.c:1057
-#: ../cli/src/settings.c:1058
-#: ../cli/src/settings.c:1137
-#: ../cli/src/settings.c:1138
-#: ../cli/src/settings.c:1139
-#: ../cli/src/settings.c:1140
-#: ../cli/src/settings.c:1141
-#: ../cli/src/settings.c:1142
-#: ../cli/src/settings.c:1143
-#: ../cli/src/settings.c:1144
-#: ../cli/src/settings.c:1145
-#: ../cli/src/settings.c:1146
-#: ../cli/src/settings.c:1147
+#: ../cli/src/connections.c:420
+#: ../cli/src/connections.c:421
+#: ../cli/src/connections.c:599
+#: ../cli/src/connections.c:601
+#: ../cli/src/devices.c:509
+#: ../cli/src/devices.c:562
+#: ../cli/src/devices.c:687
+#: ../cli/src/devices.c:713
+#: ../cli/src/devices.c:714
+#: ../cli/src/devices.c:715
+#: ../cli/src/devices.c:716
+#: ../cli/src/devices.c:717
+#: ../cli/src/settings.c:520
+#: ../cli/src/settings.c:563
+#: ../cli/src/settings.c:663
+#: ../cli/src/settings.c:937
+#: ../cli/src/settings.c:938
+#: ../cli/src/settings.c:940
+#: ../cli/src/settings.c:942
+#: ../cli/src/settings.c:1067
+#: ../cli/src/settings.c:1068
+#: ../cli/src/settings.c:1069
 #: ../cli/src/settings.c:1148
 #: ../cli/src/settings.c:1149
-#: ../cli/src/settings.c:1224
+#: ../cli/src/settings.c:1150
+#: ../cli/src/settings.c:1151
+#: ../cli/src/settings.c:1152
+#: ../cli/src/settings.c:1153
+#: ../cli/src/settings.c:1154
+#: ../cli/src/settings.c:1155
+#: ../cli/src/settings.c:1156
+#: ../cli/src/settings.c:1157
+#: ../cli/src/settings.c:1158
+#: ../cli/src/settings.c:1159
+#: ../cli/src/settings.c:1160
+#: ../cli/src/settings.c:1235
 msgid "yes"
 msgstr "da"
 
-#: ../cli/src/connections.c:385
-#: ../cli/src/connections.c:386
-#: ../cli/src/connections.c:603
-#: ../cli/src/connections.c:606
-#: ../cli/src/devices.c:432
-#: ../cli/src/devices.c:557
-#: ../cli/src/devices.c:583
-#: ../cli/src/devices.c:584
-#: ../cli/src/devices.c:585
-#: ../cli/src/devices.c:586
-#: ../cli/src/devices.c:587
-#: ../cli/src/settings.c:508
-#: ../cli/src/settings.c:510
-#: ../cli/src/settings.c:551
-#: ../cli/src/settings.c:652
-#: ../cli/src/settings.c:926
-#: ../cli/src/settings.c:927
-#: ../cli/src/settings.c:929
-#: ../cli/src/settings.c:931
-#: ../cli/src/settings.c:1056
-#: ../cli/src/settings.c:1057
-#: ../cli/src/settings.c:1058
-#: ../cli/src/settings.c:1137
-#: ../cli/src/settings.c:1138
-#: ../cli/src/settings.c:1139
-#: ../cli/src/settings.c:1140
-#: ../cli/src/settings.c:1141
-#: ../cli/src/settings.c:1142
-#: ../cli/src/settings.c:1143
-#: ../cli/src/settings.c:1144
-#: ../cli/src/settings.c:1145
-#: ../cli/src/settings.c:1146
-#: ../cli/src/settings.c:1147
+#: ../cli/src/connections.c:420
+#: ../cli/src/connections.c:421
+#: ../cli/src/connections.c:599
+#: ../cli/src/connections.c:601
+#: ../cli/src/devices.c:509
+#: ../cli/src/devices.c:562
+#: ../cli/src/devices.c:687
+#: ../cli/src/devices.c:713
+#: ../cli/src/devices.c:714
+#: ../cli/src/devices.c:715
+#: ../cli/src/devices.c:716
+#: ../cli/src/devices.c:717
+#: ../cli/src/settings.c:520
+#: ../cli/src/settings.c:522
+#: ../cli/src/settings.c:563
+#: ../cli/src/settings.c:663
+#: ../cli/src/settings.c:937
+#: ../cli/src/settings.c:938
+#: ../cli/src/settings.c:940
+#: ../cli/src/settings.c:942
+#: ../cli/src/settings.c:1067
+#: ../cli/src/settings.c:1068
+#: ../cli/src/settings.c:1069
 #: ../cli/src/settings.c:1148
 #: ../cli/src/settings.c:1149
-#: ../cli/src/settings.c:1224
+#: ../cli/src/settings.c:1150
+#: ../cli/src/settings.c:1151
+#: ../cli/src/settings.c:1152
+#: ../cli/src/settings.c:1153
+#: ../cli/src/settings.c:1154
+#: ../cli/src/settings.c:1155
+#: ../cli/src/settings.c:1156
+#: ../cli/src/settings.c:1157
+#: ../cli/src/settings.c:1158
+#: ../cli/src/settings.c:1159
+#: ../cli/src/settings.c:1160
+#: ../cli/src/settings.c:1235
 msgid "no"
 msgstr "ne"
 
-#: ../cli/src/connections.c:458
-#: ../cli/src/connections.c:501
-msgid "System connections"
-msgstr "Sistemske povezave"
-
-#: ../cli/src/connections.c:463
-#: ../cli/src/connections.c:514
-msgid "User connections"
-msgstr "Uporabniške povezave"
-
-#: ../cli/src/connections.c:475
-#: ../cli/src/connections.c:1335
-#: ../cli/src/connections.c:1351
-#: ../cli/src/connections.c:1360
-#: ../cli/src/connections.c:1371
-#: ../cli/src/connections.c:1456
-#: ../cli/src/devices.c:962
-#: ../cli/src/devices.c:972
-#: ../cli/src/devices.c:1074
-#: ../cli/src/devices.c:1081
+#: ../cli/src/connections.c:495
+msgid "Connection list"
+msgstr "Seznam povezav"
+
+#: ../cli/src/connections.c:508
+#: ../cli/src/connections.c:1368
+#: ../cli/src/connections.c:1383
+#: ../cli/src/connections.c:1392
+#: ../cli/src/connections.c:1402
+#: ../cli/src/connections.c:1414
+#: ../cli/src/connections.c:1509
+#: ../cli/src/devices.c:1190
+#: ../cli/src/devices.c:1200
+#: ../cli/src/devices.c:1314
+#: ../cli/src/devices.c:1321
+#: ../cli/src/devices.c:1534
+#: ../cli/src/devices.c:1541
 #, c-format
 msgid "Error: %s argument is missing."
 msgstr "Napaka: manjka argument %s."
 
-#: ../cli/src/connections.c:488
+#: ../cli/src/connections.c:521
 #, c-format
 msgid "Error: %s - no such connection."
 msgstr "Napaka: %s - povezava ne obstaja."
 
-#: ../cli/src/connections.c:520
-#: ../cli/src/connections.c:1384
-#: ../cli/src/connections.c:1474
-#: ../cli/src/devices.c:785
-#: ../cli/src/devices.c:852
-#: ../cli/src/devices.c:986
-#: ../cli/src/devices.c:1087
+#: ../cli/src/connections.c:527
+#: ../cli/src/connections.c:1427
+#: ../cli/src/connections.c:1526
+#: ../cli/src/devices.c:987
+#: ../cli/src/devices.c:1067
+#: ../cli/src/devices.c:1214
+#: ../cli/src/devices.c:1327
+#: ../cli/src/devices.c:1547
 #, c-format
 msgid "Unknown parameter: %s\n"
 msgstr "Neznan parameter: %s\n"
 
-#: ../cli/src/connections.c:529
+#: ../cli/src/connections.c:536
 #, c-format
 msgid "Error: no valid parameter specified."
 msgstr "Napaka: ni podanega veljavnega parametra."
 
-#: ../cli/src/connections.c:544
-#: ../cli/src/connections.c:1577
-#: ../cli/src/devices.c:1293
-#: ../cli/src/network-manager.c:359
+#: ../cli/src/connections.c:551
+#: ../cli/src/connections.c:1617
+#: ../cli/src/devices.c:1755
+#: ../cli/src/network-manager.c:463
 #, c-format
 msgid "Error: %s."
 msgstr "Napaka: %s."
 
-#: ../cli/src/connections.c:650
+#: ../cli/src/connections.c:639
 #, c-format
 msgid "Error: 'con status': %s"
 msgstr "Napaka: 'con status': %s"
 
-#: ../cli/src/connections.c:652
+#: ../cli/src/connections.c:641
 #, c-format
 msgid "Error: 'con status': %s; allowed fields: %s"
 msgstr "Napaka: 'con status': %s; dovoljena polja: %s"
 
-#: ../cli/src/connections.c:659
+#: ../cli/src/connections.c:649
+#: ../cli/src/connections.c:1442
+#: ../cli/src/connections.c:1541
+#: ../cli/src/devices.c:1014
+#: ../cli/src/devices.c:1076
+#: ../cli/src/devices.c:1229
+#: ../cli/src/devices.c:1357
+#: ../cli/src/devices.c:1576
+#, c-format
+msgid "Error: Can't find out if NetworkManager is running: %s."
+msgstr "Napaka: ni mogoče ugotoviti, ali se program NetworkManager izvaja: %s."
+
+#: ../cli/src/connections.c:653
+#: ../cli/src/connections.c:1446
+#: ../cli/src/connections.c:1545
+#: ../cli/src/devices.c:1018
+#: ../cli/src/devices.c:1080
+#: ../cli/src/devices.c:1233
+#: ../cli/src/devices.c:1361
+#: ../cli/src/devices.c:1580
+#, c-format
+msgid "Error: NetworkManager is not running."
+msgstr "Napaka: program NetworkManager ni zagnan."
+
+#: ../cli/src/connections.c:661
 msgid "Active connections"
 msgstr "Dejavne povezave"
 
-#: ../cli/src/connections.c:1027
+#: ../cli/src/connections.c:1085
 #, c-format
 msgid "no active connection on device '%s'"
 msgstr "ni dejavnih povezav na napravi '%s'"
 
-#: ../cli/src/connections.c:1035
+#: ../cli/src/connections.c:1093
 #, c-format
 msgid "no active connection or device"
 msgstr "ni dejavne povezave ali naprave"
 
-#: ../cli/src/connections.c:1085
+#: ../cli/src/connections.c:1164
 #, c-format
 msgid "device '%s' not compatible with connection '%s'"
 msgstr "naprava '%s' ni združljiva s povezavo '%s'"
 
-#: ../cli/src/connections.c:1087
+#: ../cli/src/connections.c:1166
 #, c-format
 msgid "no device found for connection '%s'"
 msgstr "ni naprave za povezavo '%s'"
 
-#: ../cli/src/connections.c:1098
+#: ../cli/src/connections.c:1177
 msgid "activating"
 msgstr "začenjanje"
 
-#: ../cli/src/connections.c:1100
+#: ../cli/src/connections.c:1179
 msgid "activated"
 msgstr "začeto"
 
-#: ../cli/src/connections.c:1103
-#: ../cli/src/connections.c:1126
-#: ../cli/src/connections.c:1159
-#: ../cli/src/devices.c:246
-#: ../cli/src/devices.c:558
-#: ../cli/src/network-manager.c:94
-#: ../cli/src/network-manager.c:149
-#: ../cli/src/settings.c:473
+#: ../cli/src/connections.c:1181
+#: ../cli/src/devices.c:304
+msgid "deactivating"
+msgstr "onemogočanje"
+
+#: ../cli/src/connections.c:1184
+#: ../cli/src/connections.c:1207
+#: ../cli/src/connections.c:1240
+#: ../cli/src/devices.c:308
+#: ../cli/src/devices.c:688
+#: ../cli/src/network-manager.c:118
+#: ../cli/src/network-manager.c:180
+#: ../cli/src/network-manager.c:183
+#: ../cli/src/network-manager.c:192
+#: ../cli/src/network-manager.c:298
+#: ../cli/src/network-manager.c:353
+#: ../cli/src/network-manager.c:391
+#: ../cli/src/network-manager.c:430
+#: ../cli/src/settings.c:485
+#: ../cli/src/utils.c:396
 msgid "unknown"
 msgstr "neznano"
 
-#: ../cli/src/connections.c:1112
+#: ../cli/src/connections.c:1193
 msgid "VPN connecting (prepare)"
 msgstr "VPN povezovanje (priprava)"
 
-#: ../cli/src/connections.c:1114
+#: ../cli/src/connections.c:1195
 msgid "VPN connecting (need authentication)"
 msgstr "VPN povezovanje (zahtevana je overitev)"
 
-#: ../cli/src/connections.c:1116
+#: ../cli/src/connections.c:1197
 msgid "VPN connecting"
 msgstr "VPN povezovanje"
 
-#: ../cli/src/connections.c:1118
+#: ../cli/src/connections.c:1199
 msgid "VPN connecting (getting IP configuration)"
 msgstr "VPN povezovanje (pridobivanje nastavitev IP)"
 
-#: ../cli/src/connections.c:1120
+#: ../cli/src/connections.c:1201
 msgid "VPN connected"
 msgstr "Povezan v VPN"
 
-#: ../cli/src/connections.c:1122
+#: ../cli/src/connections.c:1203
 msgid "VPN connection failed"
 msgstr "Povezava z VPN je spodletela"
 
-#: ../cli/src/connections.c:1124
+#: ../cli/src/connections.c:1205
 msgid "VPN disconnected"
 msgstr "Povezava z VPN je prekinjena"
 
-#: ../cli/src/connections.c:1135
+#: ../cli/src/connections.c:1216
 msgid "unknown reason"
 msgstr "neznan vzrok"
 
-#: ../cli/src/connections.c:1137
+#: ../cli/src/connections.c:1218
 msgid "none"
 msgstr "brez"
 
-#: ../cli/src/connections.c:1139
+#: ../cli/src/connections.c:1220
 msgid "the user was disconnected"
 msgstr "povezava z uporabnikom je prekinjena"
 
-#: ../cli/src/connections.c:1141
+#: ../cli/src/connections.c:1222
 msgid "the base network connection was interrupted"
 msgstr "osnovna omrežna povezava je bila prekinjena"
 
-#: ../cli/src/connections.c:1143
+#: ../cli/src/connections.c:1224
 msgid "the VPN service stopped unexpectedly"
 msgstr "storitev VPN je nepričakovano zaustavljena"
 
-#: ../cli/src/connections.c:1145
+#: ../cli/src/connections.c:1226
 msgid "the VPN service returned invalid configuration"
 msgstr "storitev VPN je vrnila neveljavne nastavitve"
 
-#: ../cli/src/connections.c:1147
+#: ../cli/src/connections.c:1228
 msgid "the connection attempt timed out"
 msgstr "poskus povezave je časovno potekel"
 
-#: ../cli/src/connections.c:1149
+#: ../cli/src/connections.c:1230
 msgid "the VPN service did not start in time"
 msgstr "storitev VPN se ni pravočasno začela"
 
-#: ../cli/src/connections.c:1151
+#: ../cli/src/connections.c:1232
 msgid "the VPN service failed to start"
 msgstr "storitev VPN ni uspešno začeta"
 
-#: ../cli/src/connections.c:1153
+#: ../cli/src/connections.c:1234
 msgid "no valid VPN secrets"
 msgstr "ni veljavnih VPN skrivnosti"
 
-#: ../cli/src/connections.c:1155
+#: ../cli/src/connections.c:1236
 msgid "invalid VPN secrets"
 msgstr "neveljavne VPN skrivnosti"
 
-#: ../cli/src/connections.c:1157
+#: ../cli/src/connections.c:1238
 msgid "the connection was removed"
 msgstr "povezava je odstranjena"
 
-#: ../cli/src/connections.c:1171
+#: ../cli/src/connections.c:1252
 #, c-format
 msgid "state: %s\n"
 msgstr "stanje: %s\n"
 
-#: ../cli/src/connections.c:1174
-#: ../cli/src/connections.c:1200
+#: ../cli/src/connections.c:1255
+#: ../cli/src/connections.c:1281
 #, c-format
 msgid "Connection activated\n"
 msgstr "Povezava je omogočena\n"
 
-#: ../cli/src/connections.c:1177
+#: ../cli/src/connections.c:1258
 #, c-format
 msgid "Error: Connection activation failed."
 msgstr "Napaka: začenjanje povezave ni uspelo."
 
-#: ../cli/src/connections.c:1196
+#: ../cli/src/connections.c:1277
 #, c-format
 msgid "state: %s (%d)\n"
 msgstr "stanje: %s (%d)\n"
 
-#: ../cli/src/connections.c:1206
+#: ../cli/src/connections.c:1287
 #, c-format
 msgid "Error: Connection activation failed: %s."
 msgstr "Napaka: začenjanje povezave ni uspelo: %s."
 
-#: ../cli/src/connections.c:1223
-#: ../cli/src/devices.c:909
+#: ../cli/src/connections.c:1304
+#: ../cli/src/devices.c:1136
 #, c-format
 msgid "Error: Timeout %d sec expired."
 msgstr "Napaka: časovna omejitev %d sekund je potekla."
 
-#: ../cli/src/connections.c:1266
+#: ../cli/src/connections.c:1317
 #, c-format
 msgid "Error: Connection activation failed: %s"
 msgstr "Napaka: začenjanje povezave ni uspelo: %s."
 
-#: ../cli/src/connections.c:1280
-#, c-format
-msgid "Error: Obtaining active connection for '%s' failed."
-msgstr "Napaka: pridobivanje dejavne povezave '%s' je spodletelo."
-
-#: ../cli/src/connections.c:1289
+#: ../cli/src/connections.c:1323
 #, c-format
 msgid "Active connection state: %s\n"
 msgstr "Stanje dejavne povezave: %s\n"
 
-#: ../cli/src/connections.c:1290
+#: ../cli/src/connections.c:1324
 #, c-format
 msgid "Active connection path: %s\n"
 msgstr "Pot dejavne povezave: %s\n"
 
-#: ../cli/src/connections.c:1344
-#: ../cli/src/connections.c:1465
+#: ../cli/src/connections.c:1376
+#: ../cli/src/connections.c:1517
 #, c-format
 msgid "Error: Unknown connection: %s."
 msgstr "Napaka: neznana povezava: %s."
 
-#: ../cli/src/connections.c:1379
-#: ../cli/src/devices.c:980
+#: ../cli/src/connections.c:1422
+#: ../cli/src/devices.c:1208
 #, c-format
 msgid "Error: timeout value '%s' is not valid."
 msgstr "Napaka: vrednost časovne omejitve '%s' ni veljavna."
 
-#: ../cli/src/connections.c:1392
-#: ../cli/src/connections.c:1482
+#: ../cli/src/connections.c:1435
+#: ../cli/src/connections.c:1534
 #, c-format
 msgid "Error: id or uuid has to be specified."
 msgstr "Napaka: podatek id ali uuid ni naveden."
 
-#: ../cli/src/connections.c:1412
+#: ../cli/src/connections.c:1463
 #, c-format
 msgid "Error: No suitable device found: %s."
 msgstr "Napaka: ni mogoče najti ustrezne naprave: %s."
 
-#: ../cli/src/connections.c:1414
+#: ../cli/src/connections.c:1465
 #, c-format
 msgid "Error: No suitable device found."
 msgstr "Napaka: ni mogoče najti ustrezne naprave."
 
-#: ../cli/src/connections.c:1509
+#: ../cli/src/connections.c:1570
 #, c-format
 msgid "Warning: Connection not active\n"
 msgstr "Opozorilo: povezava ni dejavna\n"
 
-#: ../cli/src/connections.c:1566
+#: ../cli/src/connections.c:1608
 #, c-format
 msgid "Error: 'con' command '%s' is not valid."
 msgstr "Napaka: ukaz 'con' '%s' ni veljaven."
 
-#: ../cli/src/connections.c:1602
+#: ../cli/src/connections.c:1673
 #, c-format
 msgid "Error: could not connect to D-Bus."
 msgstr "Napaka: povezava z D-Bus ni mogoča."
 
-#: ../cli/src/connections.c:1609
+#: ../cli/src/connections.c:1680
 #, c-format
 msgid "Error: Could not get system settings."
 msgstr "Napaka: ni mogoče pridobiti sistemskih nastavitev."
 
-#: ../cli/src/connections.c:1617
-#, c-format
-msgid "Error: Could not get user settings."
-msgstr "Napaka: ni mogoče pridobiti uporabniških nastavitev."
-
-#: ../cli/src/connections.c:1627
+#: ../cli/src/connections.c:1690
 #, c-format
-msgid "Error: Can't obtain connections: settings services are not running."
-msgstr "Napaka: ni mogoče pridobiti povezave: storitve nastavitev niso zagnane."
+msgid "Error: Can't obtain connections: settings service is not running."
+msgstr "Napaka: ni mogoče pridobiti povezav: storitev nastavitev ni zagnana."
 
 #. 0
 #. 9
-#: ../cli/src/devices.c:61
-#: ../cli/src/devices.c:89
-#: ../cli/src/devices.c:184
+#. 3
+#: ../cli/src/devices.c:66
+#: ../cli/src/devices.c:102
+#: ../cli/src/devices.c:212
+#: ../cli/src/devices.c:228
 msgid "DEVICE"
 msgstr "NAPRAVA"
 
 #. 1
 #. 4
-#. 0
-#: ../cli/src/devices.c:63
-#: ../cli/src/devices.c:93
-#: ../cli/src/network-manager.c:36
+#. 1
+#: ../cli/src/devices.c:68
+#: ../cli/src/devices.c:106
+#: ../cli/src/network-manager.c:39
 msgid "STATE"
 msgstr "STANJE"
 
-#: ../cli/src/devices.c:72
+#: ../cli/src/devices.c:78
 msgid "GENERAL"
 msgstr "SPLOŠNO"
 
 #. 0
-#: ../cli/src/devices.c:73
+#: ../cli/src/devices.c:79
 msgid "CAPABILITIES"
 msgstr "ZMOŽNOSTI"
 
 #. 1
-#: ../cli/src/devices.c:74
+#: ../cli/src/devices.c:80
 msgid "WIFI-PROPERTIES"
 msgstr "WIFI-LASTNOSTI"
 
 #. 2
-#: ../cli/src/devices.c:75
+#: ../cli/src/devices.c:81
 msgid "AP"
 msgstr "AP"
 
 #. 3
-#: ../cli/src/devices.c:76
+#: ../cli/src/devices.c:82
 msgid "WIRED-PROPERTIES"
 msgstr "LASTNOSTI ŽIČNE POVEZAVE"
 
 #. 4
-#: ../cli/src/devices.c:77
+#: ../cli/src/devices.c:83
+msgid "WIMAX-PROPERTIES"
+msgstr "WIMAX-LASTNOSTI"
+
+#. 5
+#. 0
+#: ../cli/src/devices.c:84
+#: ../cli/src/devices.c:225
+msgid "NSP"
+msgstr "NSP"
+
+#. 6
+#: ../cli/src/devices.c:85
 msgid "IP4-SETTINGS"
 msgstr "IP4-NASTAVITVE"
 
-#. 5
-#: ../cli/src/devices.c:78
+#. 7
+#: ../cli/src/devices.c:86
 msgid "IP4-DNS"
 msgstr "IP4-DNS"
 
-#. 6
-#: ../cli/src/devices.c:79
+#. 8
+#: ../cli/src/devices.c:87
 msgid "IP6-SETTINGS"
 msgstr "IP6-NASTAVITVE"
 
-#. 7
-#: ../cli/src/devices.c:80
+#. 9
+#: ../cli/src/devices.c:88
 msgid "IP6-DNS"
 msgstr "IP6-DNS"
 
 #. 2
-#: ../cli/src/devices.c:91
+#: ../cli/src/devices.c:104
 msgid "DRIVER"
 msgstr "GONILNIK"
 
 #. 3
-#: ../cli/src/devices.c:92
+#: ../cli/src/devices.c:105
 msgid "HWADDR"
 msgstr "HWADDR"
 
 #. 0
-#: ../cli/src/devices.c:102
+#: ../cli/src/devices.c:115
 msgid "CARRIER-DETECT"
 msgstr "ZAZNAVA-OPERATERJA"
 
 #. 1
-#: ../cli/src/devices.c:103
+#: ../cli/src/devices.c:116
 msgid "SPEED"
 msgstr "HITROST"
 
 #. 0
-#: ../cli/src/devices.c:112
+#: ../cli/src/devices.c:125
 msgid "CARRIER"
 msgstr "OPERATER"
 
 #. 0
-#: ../cli/src/devices.c:122
+#: ../cli/src/devices.c:135
 msgid "WEP"
 msgstr "WEP"
 
 #. 1
-#: ../cli/src/devices.c:123
+#: ../cli/src/devices.c:136
 msgid "WPA"
 msgstr "WPA"
 
 #. 2
-#: ../cli/src/devices.c:124
+#: ../cli/src/devices.c:137
 msgid "WPA2"
 msgstr "WPA2"
 
 #. 3
-#: ../cli/src/devices.c:125
+#: ../cli/src/devices.c:138
 msgid "TKIP"
 msgstr "TKIP"
 
 #. 4
-#: ../cli/src/devices.c:126
+#: ../cli/src/devices.c:139
 msgid "CCMP"
 msgstr "CCMP"
 
 #. 0
-#: ../cli/src/devices.c:135
-#: ../cli/src/devices.c:146
+#: ../cli/src/devices.c:149
+msgid "CTR-FREQ"
+msgstr "CTR-FREQ"
+
+#. 1
+#: ../cli/src/devices.c:150
+msgid "RSSI"
+msgstr "RSSI"
+
+#. 2
+#: ../cli/src/devices.c:151
+msgid "CINR"
+msgstr "CINR"
+
+#. 3
+#: ../cli/src/devices.c:152
+msgid "TX-POW"
+msgstr "TX-POW"
+
+#. 4
+#: ../cli/src/devices.c:153
+msgid "BSID"
+msgstr "BSID"
+
+#. 0
+#: ../cli/src/devices.c:163
+#: ../cli/src/devices.c:174
 msgid "ADDRESS"
 msgstr "NASLOV"
 
 #. 1
-#: ../cli/src/devices.c:136
-#: ../cli/src/devices.c:147
+#: ../cli/src/devices.c:164
+#: ../cli/src/devices.c:175
 msgid "PREFIX"
 msgstr "PREDPONA"
 
 #. 2
-#: ../cli/src/devices.c:137
-#: ../cli/src/devices.c:148
+#: ../cli/src/devices.c:165
+#: ../cli/src/devices.c:176
 msgid "GATEWAY"
 msgstr "PREHOD"
 
 #. 0
-#: ../cli/src/devices.c:157
-#: ../cli/src/devices.c:166
+#: ../cli/src/devices.c:185
+#: ../cli/src/devices.c:194
 msgid "DNS"
 msgstr "DNS"
 
 #. 0
-#: ../cli/src/devices.c:175
+#: ../cli/src/devices.c:203
 msgid "SSID"
 msgstr "SSID"
 
 #. 1
-#: ../cli/src/devices.c:176
+#: ../cli/src/devices.c:204
 msgid "BSSID"
 msgstr "BSSID"
 
 #. 2
-#: ../cli/src/devices.c:177
+#: ../cli/src/devices.c:205
 msgid "MODE"
 msgstr "NAČIN"
 
 #. 3
-#: ../cli/src/devices.c:178
+#: ../cli/src/devices.c:206
 msgid "FREQ"
 msgstr "FREKVENCA"
 
 #. 4
-#: ../cli/src/devices.c:179
+#: ../cli/src/devices.c:207
 msgid "RATE"
 msgstr "HITROST"
 
 #. 5
-#: ../cli/src/devices.c:180
+#. 1
+#: ../cli/src/devices.c:208
+#: ../cli/src/devices.c:226
 msgid "SIGNAL"
 msgstr "SIGNAL"
 
 #. 6
-#: ../cli/src/devices.c:181
+#: ../cli/src/devices.c:209
 msgid "SECURITY"
 msgstr "VARNOST"
 
 #. 7
-#: ../cli/src/devices.c:182
+#: ../cli/src/devices.c:210
 msgid "WPA-FLAGS"
 msgstr "WPA-ZASTAVICE"
 
 #. 8
-#: ../cli/src/devices.c:183
+#: ../cli/src/devices.c:211
 msgid "RSN-FLAGS"
 msgstr "RSN-ZASTAVICE"
 
 #. 10
-#: ../cli/src/devices.c:185
+#. 4
+#: ../cli/src/devices.c:213
+#: ../cli/src/devices.c:229
 msgid "ACTIVE"
 msgstr "DEJAVNO"
 
-#: ../cli/src/devices.c:208
+#: ../cli/src/devices.c:256
 #, c-format
 msgid ""
 "Usage: nmcli dev { COMMAND | help }\n"
 "\n"
+"  COMMAND := { status | list | disconnect | wifi | wimax }\n"
+"\n"
 "  COMMAND := { status | list | disconnect | wifi }\n"
 "\n"
 "  status\n"
 "  list [iface <iface>]\n"
 "  disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
 "  wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+"  wimax [list [iface <iface>] [nsp <name>]]\n"
 "\n"
 msgstr ""
 "Uporaba: nmcli dev { UKAZ | help }\n"
 "\n"
+"UKAZ := { status | list | disconnect | wifi | wimax }\n"
+"\n"
 "UKAZ := { status | list | disconnect | wifi }\n"
 "\n"
-"status\n"
-"list [iface <iface>]\n"
-"disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-"wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+"  status\n"
+"  list [iface <iface>]\n"
+"  disconnect iface <vmesnik> [--nowait] [--timeout <zakasnitev>]\n"
+"  wifi [list [iface <vmesnik>] [hwaddr <strojna-oprema>]]\n"
+"  wimax [list [iface <vmesnik>] [nsp <ime>]]\n"
 "\n"
 
-#: ../cli/src/devices.c:228
+#: ../cli/src/devices.c:284
 msgid "unmanaged"
 msgstr "neupravljano"
 
-#: ../cli/src/devices.c:230
+#: ../cli/src/devices.c:286
 msgid "unavailable"
 msgstr "ni razpoložljivo"
 
-#: ../cli/src/devices.c:232
-#: ../cli/src/network-manager.c:91
+#: ../cli/src/devices.c:288
+#: ../cli/src/network-manager.c:115
 msgid "disconnected"
 msgstr "povezava je prekinjena"
 
-#: ../cli/src/devices.c:234
+#: ../cli/src/devices.c:290
 msgid "connecting (prepare)"
 msgstr "povezovanje  (priprava)"
 
-#: ../cli/src/devices.c:236
+#: ../cli/src/devices.c:292
 msgid "connecting (configuring)"
 msgstr "povezovanje (nastavljanje)"
 
-#: ../cli/src/devices.c:238
+#: ../cli/src/devices.c:294
 msgid "connecting (need authentication)"
 msgstr "povezovanje (zahteva overitev)"
 
-#: ../cli/src/devices.c:240
+#: ../cli/src/devices.c:296
 msgid "connecting (getting IP configuration)"
 msgstr "povezovanje (pridobivanje nastavitev IP)"
 
-#: ../cli/src/devices.c:242
-#: ../cli/src/network-manager.c:89
+#: ../cli/src/devices.c:298
+msgid "connecting (checking IP connectivity)"
+msgstr "povezovanje (preverjanje povezljivosti IP)"
+
+#: ../cli/src/devices.c:300
+msgid "connecting (starting secondary connections)"
+msgstr "povezovanje (zagon drugotnih povezav)"
+
+#: ../cli/src/devices.c:302
+#: ../cli/src/network-manager.c:111
 msgid "connected"
 msgstr "povezano"
 
-#: ../cli/src/devices.c:244
+#: ../cli/src/devices.c:306
 msgid "connection failed"
 msgstr "povezava je spodletela"
 
-#: ../cli/src/devices.c:267
-#: ../cli/src/devices.c:424
+#: ../cli/src/devices.c:331
+#: ../cli/src/devices.c:341
+#: ../cli/src/devices.c:501
+#: ../cli/src/devices.c:545
 msgid "Unknown"
 msgstr "Neznano"
 
-#: ../cli/src/devices.c:299
+#: ../cli/src/devices.c:374
 msgid "(none)"
 msgstr "(brez)"
 
-#: ../cli/src/devices.c:324
+#: ../cli/src/devices.c:399
 #, c-format
 msgid "%s: error converting IP4 address 0x%X"
 msgstr "%s: napaka med pretvarjanjem naslova IP4 0x%X"
 
-#: ../cli/src/devices.c:393
+#: ../cli/src/devices.c:470
 #, c-format
 msgid "%u MHz"
 msgstr "%u MHz"
 
-#: ../cli/src/devices.c:394
+#: ../cli/src/devices.c:471
 #, c-format
 msgid "%u MB/s"
 msgstr "%u MB/s"
 
-#: ../cli/src/devices.c:403
+#: ../cli/src/devices.c:480
 msgid "Encrypted: "
 msgstr "Šifrirano: "
 
-#: ../cli/src/devices.c:408
+#: ../cli/src/devices.c:485
 msgid "WEP "
 msgstr "WEP "
 
-#: ../cli/src/devices.c:410
+#: ../cli/src/devices.c:487
 msgid "WPA "
 msgstr "WPA "
 
-#: ../cli/src/devices.c:412
+#: ../cli/src/devices.c:489
 msgid "WPA2 "
 msgstr "WPA2 "
 
-#: ../cli/src/devices.c:415
+#: ../cli/src/devices.c:492
 msgid "Enterprise "
 msgstr "Podjetniški "
 
-#: ../cli/src/devices.c:424
+#: ../cli/src/devices.c:501
 msgid "Ad-Hoc"
 msgstr "Ad-Hoc"
 
-#: ../cli/src/devices.c:424
+#: ../cli/src/devices.c:501
 msgid "Infrastructure"
 msgstr "infrastruktura"
 
-#: ../cli/src/devices.c:486
+#: ../cli/src/devices.c:536
+msgid "Home"
+msgstr "Domov"
+
+#: ../cli/src/devices.c:539
+msgid "Partner"
+msgstr "Partner"
+
+#: ../cli/src/devices.c:542
+msgid "Roaming"
+msgstr "Gostovanje"
+
+#: ../cli/src/devices.c:612
 #, c-format
 msgid "Error: 'dev list': %s"
 msgstr "Napaka: 'dev list': %s"
 
-#: ../cli/src/devices.c:488
+#: ../cli/src/devices.c:614
 #, c-format
 msgid "Error: 'dev list': %s; allowed fields: %s"
 msgstr "Napaka: 'dev list': %s; dovoljena polja: %s"
 
-#: ../cli/src/devices.c:497
+#: ../cli/src/devices.c:623
 msgid "Device details"
 msgstr "Podrobnosti naprave"
 
-#: ../cli/src/devices.c:527
-#: ../cli/src/devices.c:925
+#: ../cli/src/devices.c:657
+#: ../cli/src/devices.c:1152
+#: ../cli/src/utils.c:342
 msgid "(unknown)"
 msgstr "(neznano)"
 
-#: ../cli/src/devices.c:528
+#: ../cli/src/devices.c:658
 msgid "unknown)"
 msgstr "neznano)"
 
-#: ../cli/src/devices.c:554
+#: ../cli/src/devices.c:684
 #, c-format
 msgid "%u Mb/s"
 msgstr "%u Mb/s"
 
 #. Print header
 #. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:627
+#: ../cli/src/devices.c:757
 msgid "on"
 msgstr "omogočeno"
 
-#: ../cli/src/devices.c:627
+#: ../cli/src/devices.c:757
 msgid "off"
 msgstr "onemogočeno"
 
-#: ../cli/src/devices.c:808
+#: ../cli/src/devices.c:1004
 #, c-format
 msgid "Error: 'dev status': %s"
 msgstr "Napaka: 'dev status': %s"
 
-#: ../cli/src/devices.c:810
+#: ../cli/src/devices.c:1006
 #, c-format
 msgid "Error: 'dev status': %s; allowed fields: %s"
 msgstr "Napaka: 'dev status': %s; dovoljena polja: %s"
 
-#: ../cli/src/devices.c:817
+#: ../cli/src/devices.c:1029
 msgid "Status of devices"
 msgstr "Stanje naprav"
 
-#: ../cli/src/devices.c:845
+#: ../cli/src/devices.c:1060
 #, c-format
 msgid "Error: '%s' argument is missing."
 msgstr "Napaka: manjka argument '%s'"
 
-#: ../cli/src/devices.c:874
-#: ../cli/src/devices.c:1013
-#: ../cli/src/devices.c:1136
+#: ../cli/src/devices.c:1101
+#: ../cli/src/devices.c:1253
+#: ../cli/src/devices.c:1389
+#: ../cli/src/devices.c:1608
 #, c-format
 msgid "Error: Device '%s' not found."
 msgstr "Napaka: naprave '%s' ni mogoče najti"
 
-#: ../cli/src/devices.c:897
+#: ../cli/src/devices.c:1124
 #, c-format
 msgid "Success: Device '%s' successfully disconnected."
 msgstr "Obvestilo: povezava naprave '%s' je uspešno prekinjena."
 
-#: ../cli/src/devices.c:922
+#: ../cli/src/devices.c:1149
 #, c-format
 msgid "Error: Device '%s' (%s) disconnecting failed: %s"
 msgstr "Napaka: prišlo je do napake med prekinjanjem naprave '%s' (%s): %s"
 
-#: ../cli/src/devices.c:930
+#: ../cli/src/devices.c:1157
 #, c-format
 msgid "Device state: %d (%s)\n"
 msgstr "Stanje naprave: %d (%s)\n"
 
-#: ../cli/src/devices.c:994
+#: ../cli/src/devices.c:1222
 #, c-format
 msgid "Error: iface has to be specified."
 msgstr "Napaka: iface nastavitev mora določena."
 
-#: ../cli/src/devices.c:1112
+#: ../cli/src/devices.c:1347
 #, c-format
 msgid "Error: 'dev wifi': %s"
 msgstr "Napaka: 'dev wifi': %s"
 
-#: ../cli/src/devices.c:1114
+#: ../cli/src/devices.c:1349
 #, c-format
 msgid "Error: 'dev wifi': %s; allowed fields: %s"
 msgstr "Napaka: 'dev wifi': %s; dovoljena polja: %s"
 
-#: ../cli/src/devices.c:1121
+#: ../cli/src/devices.c:1372
 msgid "WiFi scan list"
 msgstr "WiFi seznam preiskovanja"
 
-#: ../cli/src/devices.c:1156
-#: ../cli/src/devices.c:1210
+#: ../cli/src/devices.c:1409
+#: ../cli/src/devices.c:1463
+#: ../cli/src/devices.c:1670
 #, c-format
 msgid "Error: Access point with hwaddr '%s' not found."
 msgstr "Napaka: dostopne točke s strojnim naslovom '%s' ni mogoče najti."
 
-#: ../cli/src/devices.c:1173
+#: ../cli/src/devices.c:1426
 #, c-format
 msgid "Error: Device '%s' is not a WiFi device."
 msgstr "Napaka: naprava '%s' ni veljavna WiFi naprava."
 
-#: ../cli/src/devices.c:1237
+#: ../cli/src/devices.c:1490
 #, c-format
 msgid "Error: 'dev wifi' command '%s' is not valid."
 msgstr "Napaka: 'dev wifi' ukaz '%s' ni veljaven."
 
-#: ../cli/src/devices.c:1284
+#: ../cli/src/devices.c:1566
+#, c-format
+msgid "Error: 'dev wimax': %s"
+msgstr "Napaka: 'dev wimax': %s"
+
+#: ../cli/src/devices.c:1568
+#, c-format
+msgid "Error: 'dev wimax': %s; allowed fields: %s"
+msgstr "Napaka: 'dev wimax': %s; dovoljena polja: %s"
+
+#: ../cli/src/devices.c:1591
+msgid "WiMAX NSP list"
+msgstr "Seznam ponudnikov storitev WiMAX"
+
+#: ../cli/src/devices.c:1628
+#, c-format
+msgid "Error: NSP with name '%s' not found."
+msgstr "Napaka: ponudnika omrežnih storitev '%s' ni mogoče najti"
+
+#: ../cli/src/devices.c:1639
+#, c-format
+msgid "Error: Device '%s' is not a WiMAX device."
+msgstr "Napaka: naprava '%s' ni naprava WiMAX."
+
+#: ../cli/src/devices.c:1697
+#, c-format
+msgid "Error: 'dev wimax' command '%s' is not valid."
+msgstr "Napaka: 'dev wimax' ukaz '%s' ni veljaven."
+
+#: ../cli/src/devices.c:1747
 #, c-format
 msgid "Error: 'dev' command '%s' is not valid."
 msgstr "Napaka: 'dev' ukaz '%s' ni veljaven."
 
-#: ../cli/src/network-manager.c:35
+#: ../cli/src/network-manager.c:37
 msgid "RUNNING"
 msgstr "V TEKU"
 
-#. 1
-#: ../cli/src/network-manager.c:37
+#. 0
+#: ../cli/src/network-manager.c:38
+msgid "VERSION"
+msgstr "RAZLIČICA"
+
+#. 2
+#: ../cli/src/network-manager.c:40
 msgid "NET-ENABLED"
 msgstr "NET-OMOGOČENO"
 
-#. 2
-#: ../cli/src/network-manager.c:38
+#. 3
+#: ../cli/src/network-manager.c:41
 msgid "WIFI-HARDWARE"
 msgstr "WIFI-STROJNA OPREMA"
 
-#. 3
-#: ../cli/src/network-manager.c:39
+#. 4
+#: ../cli/src/network-manager.c:42
 msgid "WIFI"
 msgstr "WIFI"
 
-#. 4
-#: ../cli/src/network-manager.c:40
+#. 5
+#: ../cli/src/network-manager.c:43
 msgid "WWAN-HARDWARE"
 msgstr "WWAN-STROJNA OPREMA"
 
-#. 5
-#: ../cli/src/network-manager.c:41
+#. 6
+#: ../cli/src/network-manager.c:44
 msgid "WWAN"
 msgstr "WWAN"
 
-#: ../cli/src/network-manager.c:64
+#. 7
+#: ../cli/src/network-manager.c:45
+msgid "WIMAX-HARDWARE"
+msgstr "WIFI-STROJNA OPREMA"
+
+#. 8
+#: ../cli/src/network-manager.c:46
+msgid "WIMAX"
+msgstr "WIMAX"
+
+#: ../cli/src/network-manager.c:74
 #, c-format
 msgid ""
 "Usage: nmcli nm { COMMAND | help }\n"
 "\n"
+"  COMMAND := { status | enable | sleep | wifi | wwan | wimax }\n"
+"\n"
 "  COMMAND := { status | enable | sleep | wifi | wwan }\n"
 "\n"
 "  status\n"
@@ -981,137 +1127,171 @@ msgid ""
 "  sleep [true|false]\n"
 "  wifi [on|off]\n"
 "  wwan [on|off]\n"
+"  wimax [on|off]\n"
 "\n"
 msgstr ""
 "Uporaba: nmcli nm { UKAZ | help }\n"
 "\n"
-"  UKAZ := { status | enable | sleep | wifi | wwan }\n"
+"  UKAZ := { status | enable | sleep | wifi | wwan | wimax}\n"
+"\n"
+"  UKAZ := { status | enable | sleep | wifi | wwan}\n"
 "\n"
 "  status\n"
 "  enable [true|false]\n"
 "  sleep [true|false]\n"
 "  wifi [on|off]\n"
 "  wwan [on|off]\n"
+"  wimax [on|off]\n"
 "\n"
 
-#: ../cli/src/network-manager.c:85
+#: ../cli/src/network-manager.c:103
 msgid "asleep"
 msgstr "v mirovanju"
 
-#: ../cli/src/network-manager.c:87
+#: ../cli/src/network-manager.c:105
 msgid "connecting"
 msgstr "povezovanje"
 
-#: ../cli/src/network-manager.c:128
+#: ../cli/src/network-manager.c:107
+msgid "connected (local only)"
+msgstr "povezan (le krajevno)"
+
+#: ../cli/src/network-manager.c:109
+msgid "connected (site only)"
+msgstr "povezan (le mesto)"
+
+#: ../cli/src/network-manager.c:113
+msgid "disconnecting"
+msgstr "prekinjanje povezave"
+
+#: ../cli/src/network-manager.c:153
 #, c-format
 msgid "Error: 'nm status': %s"
 msgstr "Napaka: 'nm status': %s"
 
-#: ../cli/src/network-manager.c:130
+#: ../cli/src/network-manager.c:155
 #, c-format
 msgid "Error: 'nm status': %s; allowed fields: %s"
 msgstr "Napaka: 'nm status': %s; dovoljena polja: %s"
 
-#: ../cli/src/network-manager.c:137
-msgid "NetworkManager status"
-msgstr "Stanje NetworkManager"
-
-#. Print header
-#: ../cli/src/network-manager.c:144
-#: ../cli/src/network-manager.c:145
-#: ../cli/src/network-manager.c:146
-#: ../cli/src/network-manager.c:147
-#: ../cli/src/network-manager.c:154
-#: ../cli/src/network-manager.c:247
+#. create NMClient
+#: ../cli/src/network-manager.c:168
+#: ../cli/src/network-manager.c:169
+#: ../cli/src/network-manager.c:170
+#: ../cli/src/network-manager.c:171
+#: ../cli/src/network-manager.c:172
+#: ../cli/src/network-manager.c:174
+#: ../cli/src/network-manager.c:175
 #: ../cli/src/network-manager.c:296
-#: ../cli/src/network-manager.c:328
+#: ../cli/src/network-manager.c:351
+#: ../cli/src/network-manager.c:389
+#: ../cli/src/network-manager.c:428
 msgid "enabled"
 msgstr "omogočeno"
 
-#: ../cli/src/network-manager.c:144
-#: ../cli/src/network-manager.c:145
-#: ../cli/src/network-manager.c:146
-#: ../cli/src/network-manager.c:147
-#: ../cli/src/network-manager.c:154
-#: ../cli/src/network-manager.c:247
+#: ../cli/src/network-manager.c:168
+#: ../cli/src/network-manager.c:169
+#: ../cli/src/network-manager.c:170
+#: ../cli/src/network-manager.c:171
+#: ../cli/src/network-manager.c:172
+#: ../cli/src/network-manager.c:174
+#: ../cli/src/network-manager.c:175
 #: ../cli/src/network-manager.c:296
-#: ../cli/src/network-manager.c:328
+#: ../cli/src/network-manager.c:351
+#: ../cli/src/network-manager.c:389
+#: ../cli/src/network-manager.c:428
 msgid "disabled"
 msgstr "onemogočeno"
 
-#: ../cli/src/network-manager.c:152
+#: ../cli/src/network-manager.c:188
+msgid "NetworkManager status"
+msgstr "Stanje NetworkManager"
+
+#. Print header
+#: ../cli/src/network-manager.c:191
 msgid "running"
 msgstr "v teku"
 
-#: ../cli/src/network-manager.c:152
+#: ../cli/src/network-manager.c:191
 msgid "not running"
 msgstr "ni v teku"
 
-#: ../cli/src/network-manager.c:175
+#: ../cli/src/network-manager.c:222
+#: ../cli/src/utils.c:322
 #, c-format
 msgid "Error: Couldn't connect to system bus: %s"
 msgstr "Napaka: ni se mogoče povezati s sistemskim vodilom: %s"
 
-#: ../cli/src/network-manager.c:186
+#: ../cli/src/network-manager.c:233
 #, c-format
 msgid "Error: Couldn't create D-Bus object proxy."
 msgstr "Napaka: ni mogoče ustvariti posredniškega predmeta vodila D-Bus."
 
-#: ../cli/src/network-manager.c:192
+#: ../cli/src/network-manager.c:239
 #, c-format
 msgid "Error in sleep: %s"
 msgstr "Napaka v mirovanju: %s"
 
-#: ../cli/src/network-manager.c:237
-#: ../cli/src/network-manager.c:286
-#: ../cli/src/network-manager.c:318
+#: ../cli/src/network-manager.c:283
+#: ../cli/src/network-manager.c:338
+#: ../cli/src/network-manager.c:376
+#: ../cli/src/network-manager.c:415
 #, c-format
 msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
 msgstr "Napaka: vrednost '--fields' '%s' ni veljavna, dovoljena polja: %s"
 
-#: ../cli/src/network-manager.c:245
+#: ../cli/src/network-manager.c:291
 msgid "Networking enabled"
 msgstr "Omrežje je omogočeno"
 
-#: ../cli/src/network-manager.c:256
+#: ../cli/src/network-manager.c:307
 #, c-format
 msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
 msgstr "Napaka: neveljaven parameter 'enable': '%s'; uporabite 'true' ali 'false'."
 
-#: ../cli/src/network-manager.c:265
+#: ../cli/src/network-manager.c:317
 #, c-format
 msgid "Error: Sleeping status is not exported by NetworkManager."
 msgstr "Napaka: stanje v mirovanju ni izvoženo s programom NetworkManager."
 
-#: ../cli/src/network-manager.c:273
+#: ../cli/src/network-manager.c:325
 #, c-format
 msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
 msgstr "Napaka: neveljaven parameter 'sleep': '%s'; uporabite 'true' ali 'false'."
 
-#: ../cli/src/network-manager.c:294
+#: ../cli/src/network-manager.c:346
 msgid "WiFi enabled"
 msgstr "WiFi je omogočen"
 
-#: ../cli/src/network-manager.c:305
+#: ../cli/src/network-manager.c:362
 #, c-format
 msgid "Error: invalid 'wifi' parameter: '%s'."
 msgstr "Napaka: neveljaven 'wifi' parameter: '%s'."
 
-#: ../cli/src/network-manager.c:326
+#: ../cli/src/network-manager.c:384
 msgid "WWAN enabled"
 msgstr "WWAN je omogočen"
 
-#: ../cli/src/network-manager.c:337
+#: ../cli/src/network-manager.c:400
 #, c-format
 msgid "Error: invalid 'wwan' parameter: '%s'."
 msgstr "Napaka: neveljaven 'wwan' parameter: '%s'."
 
-#: ../cli/src/network-manager.c:348
+#: ../cli/src/network-manager.c:423
+msgid "WiMAX enabled"
+msgstr "WiMAX je omogočen"
+
+#: ../cli/src/network-manager.c:439
+#, c-format
+msgid "Error: invalid 'wimax' parameter: '%s'."
+msgstr "Napaka: neveljaven parameter 'wimax': '%s'."
+
+#: ../cli/src/network-manager.c:452
 #, c-format
 msgid "Error: 'nm' command '%s' is not valid."
 msgstr "Napaka: ukaz 'nm' '%s' ni veljaven"
 
-#: ../cli/src/nmcli.c:69
+#: ../cli/src/nmcli.c:64
 #, c-format
 msgid ""
 "Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
@@ -1122,6 +1302,7 @@ msgid ""
 "  -m[ode] tabular|multiline                  output mode\n"
 "  -f[ields] <field1,field2,...>|all|common   specify fields to output\n"
 "  -e[scape] yes|no                           escape columns separators in values\n"
+"  -n[ocheck]                                 don't check nmcli and NetworkManager versions\n"
 "  -v[ersion]                                 show program version\n"
 "  -h[elp]                                    print this help\n"
 "\n"
@@ -1134,609 +1315,766 @@ msgstr ""
 "Uporaba: %s [MOŽNOSTI] PREDMET { UKAZ| help }\n"
 "\n"
 "MOŽNOSTI\n"
-"-t[erse] zgoščen odvod\n"
-"-p[retty] olepšan odvod\n"
-"-m[ode] tabular|multiline način odvoda\n"
-"-f[ields] <polje1,polje2,...>|all|common določilo polj odvoda\n"
-"-e[scape] yes|no izpuščanje ločilnikov vrednosti\n"
-"-v[ersion] pokaži različico programa\n"
-"-h[elp] natisni pomoč\n"
+"  -t[erse]                                   zgoščen odvod\n"
+"  -p[retty]                                  olepšan odvod\n"
+"  -m[ode] tabular|multiline                   način odvoda\n"
+"  -f[ields] <polje1,polje2,...>|all|common   določilo polj odvoda\n"
+"  -e[scape] yes|no                           izpuščanje ločilnikov vrednosti\n"
+"  -n[ocheck]                               ne preverjaj različic nmcli in NetworkManager\n"
+"  -v[ersion]                                 pokaži različico programa\n"
+"  -h[elp]                                    natisni pomoč\n"
 "\n"
 "PREDMET\n"
 "nm stanje programa NetworkManager\n"
 "con povezave programa NetworkManager\n"
-"dev naprave upravljane s programom NetworkManager\n"
+"dev naprave, upravljane s programom NetworkManager\n"
 "\n"
 
-#: ../cli/src/nmcli.c:113
+#: ../cli/src/nmcli.c:109
 #, c-format
 msgid "Error: Object '%s' is unknown, try 'nmcli help'."
 msgstr "Napaka: predmeta '%s' ni mogoče prepoznati, poskusite: 'nmcli help'."
 
-#: ../cli/src/nmcli.c:143
+#: ../cli/src/nmcli.c:139
 #, c-format
 msgid "Error: Option '--terse' is specified the second time."
 msgstr "Napaka: možnost '--terse' je podana dvakrat."
 
-#: ../cli/src/nmcli.c:148
+#: ../cli/src/nmcli.c:144
 #, c-format
 msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
 msgstr "Napaka: možnosti \"--terse\" in \"--pretty\" se med seboj izključujeta."
 
-#: ../cli/src/nmcli.c:156
+#: ../cli/src/nmcli.c:152
 #, c-format
 msgid "Error: Option '--pretty' is specified the second time."
 msgstr "Napaka: možnost '--pretty' je podana dvakrat."
 
-#: ../cli/src/nmcli.c:161
+#: ../cli/src/nmcli.c:157
 #, c-format
 msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
 msgstr "Napaka: možnosti \"--pretty\" in \"--tearse\" se med seboj izključujeta."
 
-#: ../cli/src/nmcli.c:171
-#: ../cli/src/nmcli.c:187
+#: ../cli/src/nmcli.c:167
+#: ../cli/src/nmcli.c:183
 #, c-format
 msgid "Error: missing argument for '%s' option."
 msgstr "Napaka: manjka argument za možnost '%s'."
 
-#: ../cli/src/nmcli.c:180
-#: ../cli/src/nmcli.c:196
+#: ../cli/src/nmcli.c:176
+#: ../cli/src/nmcli.c:192
 #, c-format
 msgid "Error: '%s' is not valid argument for '%s' option."
 msgstr "Napaka: '%s' ni veljaven argument za možnost '%s'."
 
-#: ../cli/src/nmcli.c:203
+#: ../cli/src/nmcli.c:199
 #, c-format
 msgid "Error: fields for '%s' options are missing."
 msgstr "Napaka: polja za možnosti '%s' manjkajo."
 
-#: ../cli/src/nmcli.c:209
+#: ../cli/src/nmcli.c:207
 #, c-format
 msgid "nmcli tool, version %s\n"
 msgstr "nmcli orodje, različica %s\n"
 
-#: ../cli/src/nmcli.c:215
+#: ../cli/src/nmcli.c:213
 #, c-format
 msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
 msgstr "Napaka: možnost '%s' ni prepoznana, poskusite 'nmcli -help'."
 
-#: ../cli/src/nmcli.c:234
+#: ../cli/src/nmcli.c:232
 #, c-format
 msgid "Caught signal %d, shutting down..."
 msgstr "Ujet signal %d, povezava bo izklopljena ..."
 
-#: ../cli/src/nmcli.c:259
-#, c-format
-msgid "Error: Could not connect to NetworkManager."
-msgstr "Napaka: ni se mogoče povezati s programom NetworkManager."
+#: ../cli/src/nmcli.c:257
+msgid "Error: Could not create NMClient object."
+msgstr "Napaka: ni mogoče ustvariti predmeta NMClient."
 
-#: ../cli/src/nmcli.c:275
+#: ../cli/src/nmcli.c:273
 msgid "Success"
 msgstr "Uspešno zaključeno"
 
-#: ../cli/src/settings.c:411
+#: ../cli/src/settings.c:423
 #, c-format
 msgid "%d (hex-ascii-key)"
 msgstr "%d (šestnajstiški-ascii-ključ)"
 
-#: ../cli/src/settings.c:413
+#: ../cli/src/settings.c:425
 #, c-format
 msgid "%d (104/128-bit passphrase)"
 msgstr "%d (104/128-bitno šifrirno geslo)"
 
-#: ../cli/src/settings.c:416
+#: ../cli/src/settings.c:428
 #, c-format
 msgid "%d (unknown)"
 msgstr "%d (neznano)"
 
-#: ../cli/src/settings.c:442
+#: ../cli/src/settings.c:454
 msgid "0 (unknown)"
 msgstr "0 (neznano)"
 
-#: ../cli/src/settings.c:448
+#: ../cli/src/settings.c:460
 msgid "any, "
 msgstr "karkoli, "
 
-#: ../cli/src/settings.c:450
+#: ../cli/src/settings.c:462
 msgid "900 MHz, "
 msgstr "900 MHz, "
 
-#: ../cli/src/settings.c:452
+#: ../cli/src/settings.c:464
 msgid "1800 MHz, "
 msgstr "1800 MHz, "
 
-#: ../cli/src/settings.c:454
+#: ../cli/src/settings.c:466
 msgid "1900 MHz, "
 msgstr "1900 MHz, "
 
-#: ../cli/src/settings.c:456
+#: ../cli/src/settings.c:468
 msgid "850 MHz, "
 msgstr "850 MHz, "
 
-#: ../cli/src/settings.c:458
+#: ../cli/src/settings.c:470
 msgid "WCDMA 3GPP UMTS 2100 MHz, "
 msgstr "WCDMA 3GPP UMTS 2100 MHz, "
 
-#: ../cli/src/settings.c:460
+#: ../cli/src/settings.c:472
 msgid "WCDMA 3GPP UMTS 1800 MHz, "
 msgstr "WCDMA 3GPP UMTS 1800 MHz, "
 
-#: ../cli/src/settings.c:462
+#: ../cli/src/settings.c:474
 msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
 msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
 
-#: ../cli/src/settings.c:464
+#: ../cli/src/settings.c:476
 msgid "WCDMA 3GPP UMTS 800 MHz, "
 msgstr "WCDMA 3GPP UMTS 800 MHz, "
 
-#: ../cli/src/settings.c:466
+#: ../cli/src/settings.c:478
 msgid "WCDMA 3GPP UMTS 850 MHz, "
 msgstr "WCDMA 3GPP UMTS 850 MHz, "
 
-#: ../cli/src/settings.c:468
+#: ../cli/src/settings.c:480
 msgid "WCDMA 3GPP UMTS 900 MHz, "
 msgstr "WCDMA 3GPP UMTS 900 MHz, "
 
-#: ../cli/src/settings.c:470
+#: ../cli/src/settings.c:482
 msgid "WCDMA 3GPP UMTS 1700 MHz, "
 msgstr "WCDMA 3GPP UMTS 1700 MHz, "
 
-#: ../cli/src/settings.c:554
-#: ../cli/src/settings.c:721
+#: ../cli/src/settings.c:566
+#: ../cli/src/settings.c:732
 msgid "auto"
 msgstr "samodejno"
 
-#: ../cli/src/settings.c:716
-#: ../cli/src/settings.c:719
-#: ../cli/src/settings.c:720
-#: ../cli/src/utils.c:172
+#: ../cli/src/settings.c:727
+#: ../cli/src/settings.c:730
+#: ../cli/src/settings.c:731
+#: ../cli/src/utils.c:176
 msgid "not set"
 msgstr "ni nastavljeno"
 
-#: ../cli/src/utils.c:124
+#: ../cli/src/utils.c:128
 #, c-format
 msgid "field '%s' has to be alone"
 msgstr "polje '%s' mora biti samostojno."
 
-#: ../cli/src/utils.c:127
+#: ../cli/src/utils.c:131
 #, c-format
 msgid "invalid field '%s'"
 msgstr "neveljavno polje '%s'"
 
-#: ../cli/src/utils.c:146
+#: ../cli/src/utils.c:150
 #, c-format
 msgid "Option '--terse' requires specifying '--fields'"
 msgstr "Možnost '--terse' zahteva podan argument '--fields'"
 
-#: ../cli/src/utils.c:150
+#: ../cli/src/utils.c:154
 #, c-format
 msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
 msgstr "Možnost '--terse' zahteva posebne vrednosti '--polja' in ne '%s'"
 
-#: ../libnm-util/crypto.c:120
+#: ../cli/src/utils.c:333
+#, c-format
+msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"
+msgstr "Napaka: ni mogoče ustvariti posredniškega predmeta D-Bus za org.freedesktop.DBus"
+
+#: ../cli/src/utils.c:341
+#, c-format
+msgid "Error: NameHasOwner request failed: %s"
+msgstr "Napaka: zahteva NameHasOwner ni uspela: %s"
+
+#: ../cli/src/utils.c:386
+#, c-format
+msgid "Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --nocheck to suppress the warning.\n"
+msgstr "Opozorilo: različici nmcli (%s) in NetworkManager (%s) se ne ujemata. Uporabite --nocheck, da onemogočite opozorilo.\n"
+
+#: ../cli/src/utils.c:395
+#, c-format
+msgid "Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force execution using --nocheck, but the results are unpredictable."
+msgstr "Napaka: različici nmcli (%s) in NetworkManager (%s) se ne ujemata. Izvajanje vsilite z --nocheck, rezultati pa niso napovedljivi."
+
+#: ../libnm-util/crypto.c:133
 #, c-format
 msgid "PEM key file had no end tag '%s'."
 msgstr "Datoteka ključa PEM nima končne oznake '%s'."
 
-#: ../libnm-util/crypto.c:130
+#: ../libnm-util/crypto.c:146
 #, c-format
 msgid "Doesn't look like a PEM private key file."
 msgstr "Datoteka ni videti kot PEM datoteka zasebnega ključa."
 
-#: ../libnm-util/crypto.c:138
+#: ../libnm-util/crypto.c:154
 #, c-format
 msgid "Not enough memory to store PEM file data."
 msgstr "Ni dovolj pomnilnika za shranjevanje podatkov datoteke PEM."
 
-#: ../libnm-util/crypto.c:154
+#: ../libnm-util/crypto.c:170
 #, c-format
 msgid "Malformed PEM file: Proc-Type was not first tag."
 msgstr "Slabo oblikovana datoteka PEM: Proc-Type ni prva oznaka."
 
-#: ../libnm-util/crypto.c:162
+#: ../libnm-util/crypto.c:178
 #, c-format
 msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
 msgstr "Slabo oblikovana datoteka PEM: neznana oznaka Proc-Type '%s'"
 
-#: ../libnm-util/crypto.c:172
+#: ../libnm-util/crypto.c:188
 #, c-format
 msgid "Malformed PEM file: DEK-Info was not the second tag."
 msgstr "Slabo oblikovana datoteka PEM: DEK-Info ni druga oznaka."
 
-#: ../libnm-util/crypto.c:183
+#: ../libnm-util/crypto.c:199
 #, c-format
 msgid "Malformed PEM file: no IV found in DEK-Info tag."
 msgstr "Slabo oblikovana datoteka PEM: IV ni mogoče najti v DEK-Info oznaki."
 
-#: ../libnm-util/crypto.c:190
+#: ../libnm-util/crypto.c:206
 #, c-format
 msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
 msgstr "Slabo oblikovana datoteka PEM: neveljavna oblika IV v DEK-Info oznaki."
 
-#: ../libnm-util/crypto.c:203
+#: ../libnm-util/crypto.c:219
 #, c-format
 msgid "Malformed PEM file: unknown private key cipher '%s'."
 msgstr "Slabo oblikovana datoteka PEM: neznana cifra zasebnega ključa '%s'."
 
-#: ../libnm-util/crypto.c:222
+#: ../libnm-util/crypto.c:238
 #, c-format
 msgid "Could not decode private key."
 msgstr "Zasebnega ključa ni mogoče odkodirati."
 
-#: ../libnm-util/crypto.c:267
-#, c-format
-msgid "PEM certificate '%s' had no end tag '%s'."
-msgstr "PEM potrdilo '%s' nima končne oznake '%s'."
+#: ../libnm-util/crypto.c:284
+msgid "Failed to find expected PKCS#8 start tag."
+msgstr "Pričakovane začetne oznake PKCS#8 ni mogoče najti."
 
-#: ../libnm-util/crypto.c:277
+#: ../libnm-util/crypto.c:292
 #, c-format
-msgid "Failed to decode certificate."
-msgstr "Odkodiranje potrdila je spodletelo."
+msgid "Failed to find expected PKCS#8 end tag '%s'."
+msgstr "Pričakovane končne oznake PKCS#8 '%s' ni mogoče najti."
+
+#: ../libnm-util/crypto.c:312
+msgid "Not enough memory to store private key data."
+msgstr "Ni dovolj pomnilnika za shranjevanje podatkov zasebnega ključa."
 
-#: ../libnm-util/crypto.c:286
+#: ../libnm-util/crypto.c:317
+msgid "Failed to decode PKCS#8 private key."
+msgstr "Odkodiranje zasebnega ključa PKCS#8 je spodletelo."
+
+#: ../libnm-util/crypto.c:339
+#: ../libnm-util/crypto.c:625
 #, c-format
 msgid "Not enough memory to store certificate data."
 msgstr "Ni dovolj pomnilnika za shranjevanje podatkov potrdila."
 
-#: ../libnm-util/crypto.c:294
-#, c-format
-msgid "Not enough memory to store file data."
-msgstr "Ni dovolj pomnilnika za shranjevanje podatkov datoteke."
-
-#: ../libnm-util/crypto.c:324
+#: ../libnm-util/crypto.c:365
 #, c-format
 msgid "IV must be an even number of bytes in length."
 msgstr "IV mora biti dolg sodo število bajtov."
 
-#: ../libnm-util/crypto.c:333
+#: ../libnm-util/crypto.c:374
 #, c-format
 msgid "Not enough memory to store the IV."
 msgstr "Za shranjevanje IV ni dovolj pomnilnika."
 
-#: ../libnm-util/crypto.c:344
+#: ../libnm-util/crypto.c:385
 #, c-format
 msgid "IV contains non-hexadecimal digits."
 msgstr "IV vsebuje ne-šestnajstiške številke."
 
-#: ../libnm-util/crypto.c:382
-#: ../libnm-util/crypto_gnutls.c:148
-#: ../libnm-util/crypto_gnutls.c:266
-#: ../libnm-util/crypto_nss.c:171
-#: ../libnm-util/crypto_nss.c:336
+#: ../libnm-util/crypto.c:423
+#: ../libnm-util/crypto_gnutls.c:147
+#: ../libnm-util/crypto_gnutls.c:265
+#: ../libnm-util/crypto_nss.c:167
+#: ../libnm-util/crypto_nss.c:332
 #, c-format
 msgid "Private key cipher '%s' was unknown."
 msgstr "Cifra zasebnega ključa '%s' je neznana."
 
-#: ../libnm-util/crypto.c:391
+#: ../libnm-util/crypto.c:432
 #, c-format
 msgid "Not enough memory to decrypt private key."
 msgstr "Ni dovolj pomnilnika za dešifriranje zasebnega ključa."
 
-#: ../libnm-util/crypto.c:511
+#: ../libnm-util/crypto.c:497
+#, c-format
+msgid "Not enough memory to store decrypted private key."
+msgstr "Ni dovolj pomnilnika za shranjevanje odšifriranega zasebnega ključa."
+
+#: ../libnm-util/crypto.c:542
 #, c-format
 msgid "Unable to determine private key type."
 msgstr "Ni mogoče določiti vrste zasebnega ključa."
 
-#: ../libnm-util/crypto.c:530
+#: ../libnm-util/crypto.c:597
 #, c-format
-msgid "Not enough memory to store decrypted private key."
-msgstr "Ni dovolj pomnilnika za shranjevanje odšifriranega zasebnega ključa."
+msgid "PEM certificate had no start tag '%s'."
+msgstr "Potrdilo PEM nima začetne oznake '%s'."
 
-#: ../libnm-util/crypto_gnutls.c:49
+#: ../libnm-util/crypto.c:606
+#, c-format
+msgid "PEM certificate had no end tag '%s'."
+msgstr "Potrdilo PEM nima končne oznake '%s'."
+
+#: ../libnm-util/crypto.c:630
+#, c-format
+msgid "Failed to decode certificate."
+msgstr "Odkodiranje potrdila je spodletelo."
+
+#: ../libnm-util/crypto_gnutls.c:50
 msgid "Failed to initialize the crypto engine."
 msgstr "Začenjanje programnika šifriranja je spodletelo."
 
-#: ../libnm-util/crypto_gnutls.c:93
+#: ../libnm-util/crypto_gnutls.c:92
 #, c-format
 msgid "Failed to initialize the MD5 engine: %s / %s."
 msgstr "Začenjanje programnika MD5 je spodletelo: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:156
+#: ../libnm-util/crypto_gnutls.c:155
 #, c-format
 msgid "Invalid IV length (must be at least %zd)."
 msgstr "Neveljavna dolžina IV (mora biti vsaj %zd)"
 
-#: ../libnm-util/crypto_gnutls.c:165
-#: ../libnm-util/crypto_nss.c:188
+#: ../libnm-util/crypto_gnutls.c:164
+#: ../libnm-util/crypto_nss.c:184
 #, c-format
 msgid "Not enough memory for decrypted key buffer."
 msgstr "Ni dovolj pomnilnika za medpomnilnik odšifriranega ključa."
 
-#: ../libnm-util/crypto_gnutls.c:173
+#: ../libnm-util/crypto_gnutls.c:172
 #, c-format
 msgid "Failed to initialize the decryption cipher context: %s / %s."
 msgstr "Začenjanje vsebine odšifrirne cifre je spodletelo: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:182
+#: ../libnm-util/crypto_gnutls.c:181
 #, c-format
 msgid "Failed to set symmetric key for decryption: %s / %s."
 msgstr "Nastavljanje simetričnega ključa za odšifriranje je spodletelo: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:191
+#: ../libnm-util/crypto_gnutls.c:190
 #, c-format
 msgid "Failed to set IV for decryption: %s / %s."
 msgstr "Nastavljanje IV za odšifriranje je spodletelo: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:200
+#: ../libnm-util/crypto_gnutls.c:199
 #, c-format
 msgid "Failed to decrypt the private key: %s / %s."
 msgstr "Odšifriranje zasebnega ključa je spodletelo: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:210
-#: ../libnm-util/crypto_nss.c:267
+#: ../libnm-util/crypto_gnutls.c:209
+#: ../libnm-util/crypto_nss.c:263
 #, c-format
 msgid "Failed to decrypt the private key: unexpected padding length."
 msgstr "Odšifriranje zasebnega ključa je spodletelo: nepričakovana dolžina blazinjenja."
 
-#: ../libnm-util/crypto_gnutls.c:221
-#: ../libnm-util/crypto_nss.c:278
+#: ../libnm-util/crypto_gnutls.c:220
+#: ../libnm-util/crypto_nss.c:274
 #, c-format
 msgid "Failed to decrypt the private key."
 msgstr "Odšifriranje zasebnega ključa je spodletelo."
 
-#: ../libnm-util/crypto_gnutls.c:286
-#: ../libnm-util/crypto_nss.c:356
+#: ../libnm-util/crypto_gnutls.c:285
+#: ../libnm-util/crypto_nss.c:352
 #, c-format
 msgid "Could not allocate memory for encrypting."
 msgstr "Ni mogoče dodeliti pomnilnika za šifriranje."
 
-#: ../libnm-util/crypto_gnutls.c:294
+#: ../libnm-util/crypto_gnutls.c:293
 #, c-format
 msgid "Failed to initialize the encryption cipher context: %s / %s."
 msgstr "Začenjanje vsebine šifrirne cifre je spodletelo: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:303
+#: ../libnm-util/crypto_gnutls.c:302
 #, c-format
 msgid "Failed to set symmetric key for encryption: %s / %s."
 msgstr "Nastavitev simetričnega ključa za šifriranje je spodletela: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:313
+#: ../libnm-util/crypto_gnutls.c:312
 #, c-format
 msgid "Failed to set IV for encryption: %s / %s."
 msgstr "Nastavitev IV za šifriranje je spodletela: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:322
+#: ../libnm-util/crypto_gnutls.c:321
 #, c-format
 msgid "Failed to encrypt the data: %s / %s."
 msgstr "Šifriranje podatkov je spodletelo: %s / %s."
 
-#: ../libnm-util/crypto_gnutls.c:362
+#: ../libnm-util/crypto_gnutls.c:361
 #, c-format
 msgid "Error initializing certificate data: %s"
 msgstr "Napaka med zaganjanjem podatkov potrdila: %s"
 
-#: ../libnm-util/crypto_gnutls.c:384
+#: ../libnm-util/crypto_gnutls.c:383
 #, c-format
 msgid "Couldn't decode certificate: %s"
 msgstr "Potrdila ni mogoča odkodirati: %s"
 
-#: ../libnm-util/crypto_gnutls.c:408
+#: ../libnm-util/crypto_gnutls.c:407
 #, c-format
 msgid "Couldn't initialize PKCS#12 decoder: %s"
 msgstr "Odkodirnika PKCS#12 ni mogoče začeti: %s"
 
-#: ../libnm-util/crypto_gnutls.c:421
+#: ../libnm-util/crypto_gnutls.c:420
 #, c-format
 msgid "Couldn't decode PKCS#12 file: %s"
 msgstr "Datoteke PKCS#12 ni mogoče odkodirati: %s"
 
-#: ../libnm-util/crypto_gnutls.c:433
+#: ../libnm-util/crypto_gnutls.c:432
 #, c-format
 msgid "Couldn't verify PKCS#12 file: %s"
 msgstr "Datoteke PKCS#12 ni mogoče preveriti: %s"
 
+#: ../libnm-util/crypto_gnutls.c:460
+#, c-format
+msgid "Couldn't initialize PKCS#8 decoder: %s"
+msgstr "Odkodirnika PKCS#8 ni mogoče zagnati: %s"
+
+#: ../libnm-util/crypto_gnutls.c:483
+#, c-format
+msgid "Couldn't decode PKCS#8 file: %s"
+msgstr "Datoteke PKCS#8 ni mogoče odkodirati: %s"
+
 #: ../libnm-util/crypto_nss.c:56
 #, c-format
 msgid "Failed to initialize the crypto engine: %d."
 msgstr "Začenjanje programnika šifriranja je spodletelo: %d."
 
-#: ../libnm-util/crypto_nss.c:111
+#: ../libnm-util/crypto_nss.c:107
 #, c-format
 msgid "Failed to initialize the MD5 context: %d."
 msgstr "Začenjanje vsebine MD5 je spodletelo: %d."
 
-#: ../libnm-util/crypto_nss.c:179
+#: ../libnm-util/crypto_nss.c:175
 #, c-format
 msgid "Invalid IV length (must be at least %d)."
 msgstr "Neveljavna dolžina IV (mora biti vsaj %d)."
 
-#: ../libnm-util/crypto_nss.c:196
+#: ../libnm-util/crypto_nss.c:192
 #, c-format
 msgid "Failed to initialize the decryption cipher slot."
 msgstr "Začenjanje polja cifre odšifriranja je spodletelo."
 
-#: ../libnm-util/crypto_nss.c:206
+#: ../libnm-util/crypto_nss.c:202
 #, c-format
 msgid "Failed to set symmetric key for decryption."
 msgstr "Nastavljanje simetričnega ključa za opis je spodletelo."
 
-#: ../libnm-util/crypto_nss.c:216
+#: ../libnm-util/crypto_nss.c:212
 #, c-format
 msgid "Failed to set IV for decryption."
 msgstr "Nastavljanje IV za odšifriranje je spodletelo."
 
-#: ../libnm-util/crypto_nss.c:224
+#: ../libnm-util/crypto_nss.c:220
 #, c-format
 msgid "Failed to initialize the decryption context."
 msgstr "Začenjanje vsebine odšifriranja je spodletelo."
 
-#: ../libnm-util/crypto_nss.c:237
+#: ../libnm-util/crypto_nss.c:233
 #, c-format
 msgid "Failed to decrypt the private key: %d."
 msgstr "Odšifriranje zasebnega ključa je spodletelo: %d."
 
-#: ../libnm-util/crypto_nss.c:245
+#: ../libnm-util/crypto_nss.c:241
 #, c-format
 msgid "Failed to decrypt the private key: decrypted data too large."
 msgstr "Odšifriranje zasebnega ključa je spodletelo: odšifrirani podatki so preveliki."
 
-#: ../libnm-util/crypto_nss.c:256
+#: ../libnm-util/crypto_nss.c:252
 #, c-format
 msgid "Failed to finalize decryption of the private key: %d."
 msgstr "Končanje odšifriranja zasebnega ključa je spodletelo: %d."
 
-#: ../libnm-util/crypto_nss.c:364
+#: ../libnm-util/crypto_nss.c:360
 #, c-format
 msgid "Failed to initialize the encryption cipher slot."
 msgstr "Začenjanje polja cifre šifriranja je spodletelo."
 
-#: ../libnm-util/crypto_nss.c:372
+#: ../libnm-util/crypto_nss.c:368
 #, c-format
 msgid "Failed to set symmetric key for encryption."
 msgstr "Nastavljanje simetričnega ključa za šifriranje je spodletelo."
 
-#: ../libnm-util/crypto_nss.c:380
+#: ../libnm-util/crypto_nss.c:376
 #, c-format
 msgid "Failed to set IV for encryption."
 msgstr "Nastavljanje IV za šifriranje je spodletelo."
 
-#: ../libnm-util/crypto_nss.c:388
+#: ../libnm-util/crypto_nss.c:384
 #, c-format
 msgid "Failed to initialize the encryption context."
 msgstr "Začenjanje vsebine šifriranja je spodletelo."
 
-#: ../libnm-util/crypto_nss.c:396
+#: ../libnm-util/crypto_nss.c:392
 #, c-format
 msgid "Failed to encrypt: %d."
 msgstr "Šifriranje je spodletelo: %d."
 
-#: ../libnm-util/crypto_nss.c:404
+#: ../libnm-util/crypto_nss.c:400
 #, c-format
 msgid "Unexpected amount of data after encrypting."
 msgstr "Nepričakovana količina podatkov po šifriranju."
 
-#: ../libnm-util/crypto_nss.c:447
+#: ../libnm-util/crypto_nss.c:443
 #, c-format
 msgid "Couldn't decode certificate: %d"
 msgstr "Potrdila ni mogoče odkodirati: %d"
 
-#: ../libnm-util/crypto_nss.c:482
+#: ../libnm-util/crypto_nss.c:478
 #, c-format
 msgid "Couldn't convert password to UCS2: %d"
 msgstr "Gesla ni mogoče pretvoriti v UCS2: %d"
 
-#: ../libnm-util/crypto_nss.c:510
+#: ../libnm-util/crypto_nss.c:506
 #, c-format
 msgid "Couldn't initialize PKCS#12 decoder: %d"
 msgstr "Dekodirnika PKCS#12 ni mogoče začeti: %d"
 
-#: ../libnm-util/crypto_nss.c:519
+#: ../libnm-util/crypto_nss.c:515
 #, c-format
 msgid "Couldn't decode PKCS#12 file: %d"
 msgstr "Datoteke PCKS#12 ni mogoče odkodirati: %d"
 
-#: ../libnm-util/crypto_nss.c:528
+#: ../libnm-util/crypto_nss.c:524
 #, c-format
 msgid "Couldn't verify PKCS#12 file: %d"
 msgstr "Datoteke PCKS#12 ni mogoče preveriti: %d"
 
-#: ../libnm-util/crypto_nss.c:557
+#: ../libnm-util/crypto_nss.c:568
 msgid "Could not generate random data."
 msgstr "Naključnih podatkov ni mogoče ustvariti."
 
-#: ../libnm-util/nm-utils.c:1975
+#: ../libnm-util/nm-utils.c:2000
 #, c-format
 msgid "Not enough memory to make encryption key."
 msgstr "Ni dovolj pomnilnika za ustvarjanje šifrirnega ključa."
 
-#: ../libnm-util/nm-utils.c:2085
+#: ../libnm-util/nm-utils.c:2110
 msgid "Could not allocate memory for PEM file creation."
 msgstr "Ni mogoče dodeliti pomnilnika za ustvarjanje datoteke PEM."
 
-#: ../libnm-util/nm-utils.c:2097
+#: ../libnm-util/nm-utils.c:2122
 #, c-format
 msgid "Could not allocate memory for writing IV to PEM file."
 msgstr "Ni mogoče dodeliti pomnilnika za zapis IV v datoteko PEM."
 
-#: ../libnm-util/nm-utils.c:2109
+#: ../libnm-util/nm-utils.c:2134
 #, c-format
 msgid "Could not allocate memory for writing encrypted key to PEM file."
 msgstr "Ni mogoče dodeliti pomnilnika za zapis šifriranega ključa v datoteko PEM."
 
-#: ../libnm-util/nm-utils.c:2128
+#: ../libnm-util/nm-utils.c:2153
 #, c-format
 msgid "Could not allocate memory for PEM file data."
 msgstr "Ni mogoče dodeliti pomnilnika za podatke datoteke PEM."
 
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
-msgid "Connection sharing via a protected WiFi network"
-msgstr "Souporaba povezave preko zaščitenega WiFi omrežja"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
-msgid "Connection sharing via an open WiFi network"
-msgstr "Souporaba povezave preko odprtega WiFi omrežja"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
-msgid "Modify persistent system hostname"
-msgstr "Spremeni trajno sistemsko ime gostitelja"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
-msgid "Modify system connections"
-msgstr "Spremeni sistemske povezave"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
-msgid "System policy prevents modification of system settings"
-msgstr "Sistemska določila onemogočajo spreminjanje sistemskih nastavitev"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
-msgid "System policy prevents modification of the persistent system hostname"
-msgstr "Sistemska pravila preprečujejo spremembo imena gostitelja trajnega sistema"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
-msgid "System policy prevents sharing connections via a protected WiFi network"
-msgstr "Sistemska pravila preprečujejo souporabo povezav preko zaščitenega WiFi omrežja"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
-msgid "System policy prevents sharing connections via an open WiFi network"
-msgstr "Sistemska pravila preprečujejo souporabo povezav preko odprtega WiFi omrežja"
-
 #: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
 msgid "Allow control of network connections"
 msgstr "Dovoli nadzor omrežnih povezav"
 
 #: ../policy/org.freedesktop.NetworkManager.policy.in.h:2
-msgid "Allow use of user-specific connections"
-msgstr "Dovoli uporabo posebnih uporabniških povezav."
+msgid "Connection sharing via a protected WiFi network"
+msgstr "Souporaba povezave preko zaščitenega WiFi omrežja"
 
 #: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
+msgid "Connection sharing via an open WiFi network"
+msgstr "Souporaba povezave preko odprtega WiFi omrežja"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
 msgid "Enable or disable WiFi devices"
 msgstr "Omogoči ali onemogoči naprave WiFi"
 
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+msgid "Enable or disable WiMAX mobile broadband devices"
+msgstr "Omogoči ali onemogoči mobilne širokopasovne naprave WiMAX"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
 msgid "Enable or disable mobile broadband devices"
 msgstr "Omogoči ali onemogoči naprave mobilnih širokopasovnih storitev"
 
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
 msgid "Enable or disable system networking"
 msgstr "Omogoči ali onemogoči sistemske omrežne povezave"
 
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
+msgid "Modify network connections for all users"
+msgstr "Spremeni omrežne povezave za vse uporabnike"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
+msgid "Modify persistent system hostname"
+msgstr "Spremeni trajno sistemsko ime gostitelja"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
+msgid "Modify personal network connections"
+msgstr "Spremeni osebne omrežne povezave"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
 msgid "Put NetworkManager to sleep or wake it up (should only be used by system power management)"
 msgstr "Postavi program NetworkManager v mirovanje ali iz njega (možnost je namenjena upravljanju napajanja)"
 
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
 msgid "System policy prevents control of network connections"
 msgstr "Sistemska določila preprečujejo nadzor omrežnih povezav"
 
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:13
 msgid "System policy prevents enabling or disabling WiFi devices"
 msgstr "Sistemska določila preprečujejo omogočanja ali onemogočanje WiFi naprav"
 
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:14
+msgid "System policy prevents enabling or disabling WiMAX mobile broadband devices"
+msgstr "Sistemska določila preprečujejo omogočanje ali onemogočanje mobilnih širokopasovnih naprav WiMAX"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:15
 msgid "System policy prevents enabling or disabling mobile broadband devices"
 msgstr "Sistemska določila preprečuje omogočanja ali onemogočanje mobilne širokopasovne naprave"
 
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:16
 msgid "System policy prevents enabling or disabling system networking"
 msgstr "Sistemska določila preprečujejo omogočanje ali onemogočanje omrežnih povezav."
 
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:17
+msgid "System policy prevents modification of network settings for all users"
+msgstr "Sistemska določila preprečujejo spreminjanje sistemskih nastavitev za vse uporabnike"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:18
+msgid "System policy prevents modification of personal network settings"
+msgstr "Sistemska določila preprečujejo spreminjanje osebnih omrežnih nastavitev"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:19
+msgid "System policy prevents modification of the persistent system hostname"
+msgstr "Sistemska pravila preprečujejo spremembo imena gostitelja trajnega sistema"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:20
 msgid "System policy prevents putting NetworkManager to sleep or waking it up"
 msgstr "Sistemska določila preprečujejo postavitev programa NetworkManager v mirovanje ali iz njega."
 
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
-msgid "System policy prevents use of user-specific connections"
-msgstr "Sistemska določila preprečujejo uporabo uporabniških povezav."
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:21
+msgid "System policy prevents sharing connections via a protected WiFi network"
+msgstr "Sistemska pravila preprečujejo souporabo povezav preko zaščitenega WiFi omrežja"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:22
+msgid "System policy prevents sharing connections via an open WiFi network"
+msgstr "Sistemska pravila preprečujejo souporabo povezav preko odprtega WiFi omrežja"
+
+#: ../src/main.c:530
+#, c-format
+msgid "Invalid option.  Please use --help to see a list of valid options.\n"
+msgstr "Neveljavna možnost. Uporabite --help za seznam veljavnih možnosti.\n"
+
+#: ../src/main.c:611
+#, c-format
+msgid "%s.  Please use --help to see a list of valid options.\n"
+msgstr "%s. Uporabite --help za prikaz seznam veljavnih možnosti.\n"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:62
+msgid "# Created by NetworkManager\n"
+msgstr "#Ustvarjeno z upravljalnikom omrežij\n"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:69
+#, c-format
+msgid ""
+"# Merged from %s\n"
+"\n"
+msgstr ""
+"# Združeno iz %s\n"
+"\n"
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:284
+msgid "no usable DHCP client could be found."
+msgstr "ni mogoče najti uporabnega odjemalca DHCP."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+msgid "'dhclient' could be found."
+msgstr "'dhclient' je najden."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:303
+msgid "'dhcpcd' could be found."
+msgstr "'dhcpcd' ni mogoče najti."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:311
+#, c-format
+msgid "unsupported DHCP client '%s'"
+msgstr "nepodprt odjemalec DHCP '%s'"
+
+#: ../src/dns-manager/nm-dns-manager.c:376
+msgid "NOTE: the libc resolver may not support more than 3 nameservers."
+msgstr "OPOMBA: razreševalnik libc morda ne podpira več kot 3 imenskih strežnikov."
+
+#: ../src/dns-manager/nm-dns-manager.c:378
+msgid "The nameservers listed below may not be recognized."
+msgstr "Navedeni imenski strežniki morda ne bodo prepoznani."
+
+#: ../src/logging/nm-logging.c:149
+#, c-format
+msgid "Unknown log level '%s'"
+msgstr "Neznana raven beleženja '%s'"
+
+#: ../src/logging/nm-logging.c:174
+#, c-format
+msgid "Unknown log domain '%s'"
+msgstr "Neznana domena beleženja '%s'"
+
+#: ../src/modem-manager/nm-modem-cdma.c:296
+#: ../src/nm-device-bt.c:355
+#, c-format
+msgid "CDMA connection %d"
+msgstr "Povezava CDMA %d"
+
+#: ../src/modem-manager/nm-modem-gsm.c:499
+#: ../src/nm-device-bt.c:351
+#, c-format
+msgid "GSM connection %d"
+msgstr "Povezava GSM %d"
+
+#: ../src/nm-device-bt.c:326
+#, c-format
+msgid "PAN connection %d"
+msgstr "Povezava PAN %d"
+
+#: ../src/nm-device-bt.c:359
+#, c-format
+msgid "DUN connection %d"
+msgstr "Povezava DUN %d"
+
+#: ../src/nm-device-ethernet.c:1723
+#, c-format
+msgid "PPPoE connection %d"
+msgstr "Povezava PPPoE %d"
+
+#: ../src/nm-device-ethernet.c:1723
+#: ../src/settings/nm-settings-utils.c:50
+#, c-format
+msgid "Wired connection %d"
+msgstr "Žična povezava %d"
+
+#: ../src/nm-device-olpc-mesh.c:393
+#, c-format
+msgid "Mesh %d"
+msgstr "Mreža %d"
+
+#: ../src/nm-manager.c:657
+#, c-format
+msgid "VPN connection %d"
+msgstr "Povezava VPN %d"
 
 #: ../src/nm-netlink-monitor.c:100
 #: ../src/nm-netlink-monitor.c:231
@@ -1781,71 +2119,40 @@ msgstr "skupini netlink se ni mogoče pridružiti: %s"
 msgid "error updating link cache: %s"
 msgstr "napaka med posodabljanjem predpomnilnika povezave: %s"
 
-#: ../src/main.c:499
-#, c-format
-msgid "Invalid option.  Please use --help to see a list of valid options.\n"
-msgstr "Neveljavna možnost. Uporabite --help za seznam veljavnih možnosti.\n"
+#: ../src/settings/plugins/ifcfg-rh/reader.c:3575
+#: ../src/settings/plugins/ifnet/connection_parser.c:51
+msgid "System"
+msgstr "Sistem"
 
-#: ../src/main.c:570
-#, c-format
-msgid "%s.  Please use --help to see a list of valid options.\n"
-msgstr "%s. Uporabite --help za prikaz seznam veljavnih možnosti.\n"
+#~ msgid "SCOPE"
+#~ msgstr "OBSEG"
 
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:328
-msgid "# Created by NetworkManager\n"
-msgstr "#Ustvarjeno z upravljalnikom omrežij\n"
+#~ msgid "DBUS-SERVICE"
+#~ msgstr "STORITEV-DBUS"
 
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:344
-#, c-format
-msgid ""
-"# Merged from %s\n"
-"\n"
-msgstr ""
-"# Združeno iz %s\n"
-"\n"
+#~ msgid "system"
+#~ msgstr "sistem"
 
-#: ../src/dhcp-manager/nm-dhcp-manager.c:284
-msgid "no usable DHCP client could be found."
-msgstr "ni mogoče najti uporabnega odjemalca DHCP."
+#~ msgid "user"
+#~ msgstr "uporabnik"
 
-#: ../src/dhcp-manager/nm-dhcp-manager.c:293
-msgid "'dhclient' could be found."
-msgstr "'dhclient' je najden."
-
-#: ../src/dhcp-manager/nm-dhcp-manager.c:303
-msgid "'dhcpcd' could be found."
-msgstr "'dhcpcd' ni mogoče najti."
-
-#: ../src/dhcp-manager/nm-dhcp-manager.c:311
-#, c-format
-msgid "unsupported DHCP client '%s'"
-msgstr "nepodprt odjemalec DHCP '%s'"
-
-#: ../src/logging/nm-logging.c:146
-#, c-format
-msgid "Unknown log level '%s'"
-msgstr "Neznana raven beleženja '%s'"
+#~ msgid "System connections"
+#~ msgstr "Sistemske povezave"
 
-#: ../src/logging/nm-logging.c:171
-#, c-format
-msgid "Unknown log domain '%s'"
-msgstr "Neznana domena beleženja '%s'"
+#~ msgid "User connections"
+#~ msgstr "Uporabniške povezave"
 
-#: ../src/dns-manager/nm-dns-manager.c:384
-msgid "NOTE: the libc resolver may not support more than 3 nameservers."
-msgstr "OPOMBA: razreševalnik libc morda ne podpira več kot 3 imenskih strežnikov."
+#~ msgid "Error: Obtaining active connection for '%s' failed."
+#~ msgstr "Napaka: pridobivanje dejavne povezave '%s' je spodletelo."
 
-#: ../src/dns-manager/nm-dns-manager.c:386
-msgid "The nameservers listed below may not be recognized."
-msgstr "Navedeni imenski strežniki morda ne bodo prepoznani."
+#~ msgid "Error: Could not get user settings."
+#~ msgstr "Napaka: ni mogoče pridobiti uporabniških nastavitev."
 
-#: ../src/settings/nm-default-wired-connection.c:157
-#, c-format
-msgid "Auto %s"
-msgstr "Samodejno %s"
+#~ msgid "Allow use of user-specific connections"
+#~ msgstr "Dovoli uporabo posebnih uporabniških povezav."
 
-#: ../system-settings/plugins/ifcfg-rh/reader.c:3412
-#: ../system-settings/plugins/ifnet/connection_parser.c:49
-msgid "System"
-msgstr "Sistem"
+#~ msgid "System policy prevents use of user-specific connections"
+#~ msgstr "Sistemska določila preprečujejo uporabo uporabniških povezav."
 
+#~ msgid "Auto %s"
+#~ msgstr "Samodejno %s"
diff --git a/policy/Makefile.in b/policy/Makefile.in
index c63e1c5e..739987cd 100644
--- a/policy/Makefile.in
+++ b/policy/Makefile.in
@@ -177,8 +177,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/policy/org.freedesktop.NetworkManager.policy b/policy/org.freedesktop.NetworkManager.policy
index 73689dc9..7f349115 100644
--- a/policy/org.freedesktop.NetworkManager.policy
+++ b/policy/org.freedesktop.NetworkManager.policy
@@ -146,6 +146,7 @@
     <description xml:lang="es">Activar o desactivar los dispositivos inalámbricos</description>
     <description xml:lang="gl">Activar ou desactivar os dispositivos WiFi</description>
     <description xml:lang="hi">WiFi युक्तियाँ सक्रिय या निष्क्रिय करें</description>
+    <description xml:lang="hr">Omogućuje ili onemogućuje WiFi uređaje</description>
     <description xml:lang="hu">WiFi eszközök be- és kikapcsolása</description>
     <description xml:lang="id">Aktifkan atau matikan perangkat WiFi</description>
     <description xml:lang="kn">WiFi ಸಾಧನಗಳನ್ನು ಶಕ್ತಗೊಳಿಸಿ ಅಥವ ಅಶಕ್ತಗೊಳಿಸಿ</description>
@@ -209,6 +210,7 @@
     <description xml:lang="es">Activar o desactivar los dispositivos de banda ancha móvil</description>
     <description xml:lang="gl">Activar ou desactivar os dispositivos de banda ancha móbiles</description>
     <description xml:lang="hi">मोबाइल ब्राडबैंड युक्तियाँ सक्रिय या निष्क्रिय करें</description>
+    <description xml:lang="hr">Omogućuje ili onemogućuje mobilne širokopojasne uređaje</description>
     <description xml:lang="hu">Mobil széles sávú eszközök be- és kikapcsolása</description>
     <description xml:lang="id">Aktifkan atau matikan perangkat broadband bergerak</description>
     <description xml:lang="kn">ಮೊಬೈಲ್ ಬ್ರಾಡ್‌ಬ್ಯಾಂಡ್ ಸಾಧನಗಳನ್ನು ಶಕ್ತಗೊಳಿಸಿ ಅಥವ ಅಶಕ್ತಗೊಳಿಸಿ</description>
@@ -267,12 +269,15 @@
     <description xml:lang="de">Mobile WiMAX-Breitbandgeräte aktivieren oder deaktivieren</description>
     <description xml:lang="eo">Enŝalti aŭ elŝalti WiMAX-larĝkapacitajn aparatojn</description>
     <description xml:lang="es">Activar o desactivar los dispositivos de banda ancha móvil WiMAX</description>
+    <description xml:lang="gl">Activar ou desactivar os dispositivos de banda larga móbil WIMAX</description>
+    <description xml:lang="hr">Omogućuje ili onemogućuje WiMAX mobilne širokopojasne uređaje</description>
     <description xml:lang="hu">WiMAX mobil széles sávú eszközök be- és kikapcsolása</description>
     <description xml:lang="id">Aktifkan atau matikan perangkat broadband bergerak WiMAX</description>
     <description xml:lang="ko">와이맥스 모바일 광대역 장치 사용 여부</description>
     <description xml:lang="mr">WiMAX मोबाईल ब्रॉडबँड साधने सुरू किंवा बंद करा</description>
     <description xml:lang="pl">Włączenie lub wyłączenie urządzeń komórkowych WiMAX</description>
     <description xml:lang="ru">Включить или выключить устройства мобильных сетей WiMax</description>
+    <description xml:lang="sl">Omogoči ali onemogoči mobilne širokopasovne naprave WiMAX</description>
     <description xml:lang="uk">Увімкнути або вимкнути пристрої широкосмугових мобільних мереж WiMAX</description>
     <message>System policy prevents enabling or disabling WiMAX mobile broadband devices</message>
     <message xml:lang="bg">Политиката на системата не позволява включване и изключване на устройства за мобилни мрежи по WiMAX</message>
@@ -280,12 +285,14 @@
     <message xml:lang="de">Die Systemrichtlinien verhindern die Aktivierung oder Deaktivierung mobiler WiMAX-Breitbandgeräte</message>
     <message xml:lang="eo">Sistempolitiko preventas enŝalton aŭ elŝalton de larĝkapacitaj WiMAX-aparatoj</message>
     <message xml:lang="es">La política del sistema evita activar o desactivar los dispositivos de banda ancha móvil WiMAX</message>
+    <message xml:lang="gl">A normativa do sistema evita activar ou desactivar os dispositivos de banda larga móbil WIMAX.</message>
     <message xml:lang="hu">A rendszer házirendje megakadályozza a WiMAX mobil széles sávú eszközök be- vagy kikapcsolását</message>
     <message xml:lang="id">Kebijakan sistem mencegah mengaktifkan atau mematikan perangkat broadband bergerak WiMAX</message>
     <message xml:lang="ko">시스템 정책이 와이맥스 모바일 광대역 장치의 사용 여부 설정을 금지합니다</message>
     <message xml:lang="mr">प्रणाली करार WiMAX मोबाईल ब्रॉडबँड साधनांना सुरू किंवा बंद होण्यापासून रोखते</message>
     <message xml:lang="pl">Polityka systemu powstrzymuje włączenie lub wyłączenie urządzeń komórkowych WiMAX</message>
     <message xml:lang="ru">Системная политика запрещает включение или выключение устройств мобильной связи WiMAX</message>
+    <message xml:lang="sl">Sistemska določila preprečujejo omogočanje ali onemogočanje mobilnih širokopasovnih naprav WiMAX</message>
     <message xml:lang="uk">Правила системи забороняють вмикання або вимикання пристроїв широкосмугових мобільних мереж WiMAX</message>
     <defaults>
       <allow_inactive>no</allow_inactive>
@@ -305,6 +312,7 @@
     <description xml:lang="es">Permitir controlar las conexiones de red</description>
     <description xml:lang="gl">Permitir o control das conexións de rede</description>
     <description xml:lang="hi">संजाल कनेक्शन के नियंत्रण स्वीकार करें</description>
+    <description xml:lang="hr">Dozvoli upravljanje mrežnim vezama</description>
     <description xml:lang="hu">Hálózati kapcsolatok felügyeletének engedélyezése</description>
     <description xml:lang="id">Ijinkan pengendalian sambungan jaringan</description>
     <description xml:lang="kn">ಜಾಲಬಂಧ ಸಂಪರ್ಕಗಳನ್ನು ನಿಯಂತ್ರಿಸುವುದನ್ನು ಅನುಮತಿಸಿ</description>
@@ -370,10 +378,12 @@
     <description xml:lang="eo">Kundivido de konektoj per protektita WiFi-reto</description>
     <description xml:lang="es">Compartir conexión a través de una red WIFI protegida</description>
     <description xml:lang="eu">Konexio partekatua babestutako haririk gabeko sarearen bidez</description>
+    <description xml:lang="fi">Yhteyden jakaminen suojatun langattoman verkon kautta</description>
     <description xml:lang="fr">Partage de connexion via un réseau WiFi protégé</description>
     <description xml:lang="gl">Conexión compartida a través dunha rede WiFi protexida</description>
     <description xml:lang="gu">સુરક્ષિત થયેલ WiFi નેટવર્ક મારફતે જોડાણ વહેંચણી</description>
     <description xml:lang="hi">किसी संरक्षित WiFi संजाल के द्वारा कनेक्शन साझा</description>
+    <description xml:lang="hr">Dijeljenje veze korištenjem zaštićene WiFi mreže</description>
     <description xml:lang="hu">Kapcsolatmegosztás védett WiFi hálózaton</description>
     <description xml:lang="id">Berbagi koneksi melalui jaringan WiFi terlindung.</description>
     <description xml:lang="it">Condivide connessione attraverso una rete WiFi protetta</description>
@@ -410,6 +420,7 @@
     <message xml:lang="eo">Sistempolitiko preventas kundividon de konektoj per protektita WiFi-reto</message>
     <message xml:lang="es">La política del sistema evita compartir conexiones a través de una red WiFi protegida</message>
     <message xml:lang="eu">Sistemako arauek babestutako haririk gabeko sareen bidez konexioak partekatzea saihesten dute</message>
+    <message xml:lang="fi">Tietoturvakäytäntö estää yhteyksien jakamisen suojatun langattoman verkon kautta</message>
     <message xml:lang="fr">La stratégie du système empêche tout partage des connexions via un réseau WiFi protégé</message>
     <message xml:lang="gl">A política do sistema impide compartir conexións a través dunha rede WiFi protexida</message>
     <message xml:lang="gu">સિસ્ટમ પોલિસી એ સુરક્ષિત થયેલ WiFi નેટવર્ક મારફતે વહેંચણી જોડાણોને રોકી રહ્યા છે</message>
@@ -457,10 +468,12 @@
     <description xml:lang="eo">Kundivido de konektoj per malferma WiFi-reto</description>
     <description xml:lang="es">Compartir conexión a través de una red WIFI abierta</description>
     <description xml:lang="eu">Konexio partekatua irekitako haririk gabeko sarearen bidez</description>
+    <description xml:lang="fi">Yhteyden jakaminen avoimen langattoman verkon kautta</description>
     <description xml:lang="fr">Partage de connexion via un réseau WiFi ouvert</description>
     <description xml:lang="gl">Conexión compartida a través dunha rede WiFi aberta</description>
     <description xml:lang="gu">ખુલ્લા WiFi નેટવર્ક મારફતે જોડાણ વહેંચણી</description>
     <description xml:lang="hi">किसी खुले WiFi संजाल के द्वारा कनेक्शन साझा</description>
+    <description xml:lang="hr">Dijeljenje veze korištenjem otvorene WiFi mreže</description>
     <description xml:lang="hu">Kapcsolatmegosztás nyílt WiFi hálózaton</description>
     <description xml:lang="id">Berbagi koneksi melalui jaringan WiFi terbuka</description>
     <description xml:lang="it">Condivide connessione attraverso una rete WiFi aperta</description>
@@ -497,6 +510,7 @@
     <message xml:lang="eo">Sistempolitiko preventas kundividon de konektoj per malferma WiFi-reto</message>
     <message xml:lang="es">La política del sistema evita compartir conexiones a través de una red WiFi abierta</message>
     <message xml:lang="eu">Sistemako arauek irakitako haririk gabeko sareen bidez konexioak partekatzea saihesten dute</message>
+    <message xml:lang="fi">Tietoturvakäytäntö estää yhteyksien jakamisen avoimen langattoman verkon kautta</message>
     <message xml:lang="fr">La stratégie du système empêche tout partage des connexions via un réseau WiFi ouvert</message>
     <message xml:lang="gl">A política do sistema impide compartir conexións a través dunha rede WiFi aberta</message>
     <message xml:lang="gu">સિસ્ટમ પોલિસી એ ખુલ્લા WiFi નેટવર્ક મારફતે વહેંચણી જોડાણોને રોકી રહ્યા છે</message>
@@ -535,23 +549,27 @@
     <description xml:lang="de">Eigene Netzwerkverbindungen bearbeiten</description>
     <description xml:lang="eo">Modifi proprajn retkonektojn</description>
     <description xml:lang="es">Modificar las conexiones de red personales</description>
+    <description xml:lang="gl">Modificar as conexións de rede persoais</description>
     <description xml:lang="hu">Személyes hálózati kapcsolatok módosítása</description>
     <description xml:lang="id">Ubah koneksi jaringan personal</description>
     <description xml:lang="ko">개인 네트워크 연결을 수정합니다</description>
     <description xml:lang="mr">वैयक्तिक नेटवर्क जोडणी संपादित करा</description>
     <description xml:lang="pl">Modyfikacja osobistych połączeń sieciowych</description>
     <description xml:lang="ru">Редактировать личные настройки подключения</description>
+    <description xml:lang="sl">Spremeni osebne omrežne povezave</description>
     <description xml:lang="uk">Змінити параметри особистих з’єднань з мережею</description>
     <message>System policy prevents modification of personal network settings</message>
     <message xml:lang="de">Die Systemrichtlinien verhindern das Bearbeiten von eigenen Netzwerkeinstellungen</message>
     <message xml:lang="eo">Sistempolitiko preventas modifadon de propraj retagordoj</message>
     <message xml:lang="es">La política del sistema evita la modificación de la configuración personal de la red</message>
+    <message xml:lang="gl">A política do sistema impide a modificación da configuración persoal da rede</message>
     <message xml:lang="hu">A rendszer házirendje megakadályozza a személyes hálózati beállítások módosítását</message>
     <message xml:lang="id">Kebijakan sistem mencegah pengubahan tatanan jaringan pribadi</message>
     <message xml:lang="ko">시스템 정책이 개인 네트워크 설정의 수정을 금지합니다</message>
     <message xml:lang="mr">प्रणाली करार, व्यक्तिगत नेटवर्क सेटिंग्स् संपादीत करण्यापासून रोखते</message>
     <message xml:lang="pl">Polityka systemu powstrzymuje modyfikację osobistych ustawień systemowych</message>
     <message xml:lang="ru">Системная политика запрещает изменение персональных настроек сети</message>
+    <message xml:lang="sl">Sistemska določila preprečujejo spreminjanje osebnih omrežnih nastavitev</message>
     <message xml:lang="uk">Правила системи забороняють внесення змін до особистих параметрів мережі</message>
     <defaults>
       <allow_inactive>no</allow_inactive>
@@ -564,23 +582,27 @@
     <description xml:lang="de">Netzwerkverbindungen für alle Benutzer bearbeiten</description>
     <description xml:lang="eo">Modifi retkonektojn por ĉiuj uzantoj</description>
     <description xml:lang="es">Modificar las conexiones de red para todos los usuarios</description>
+    <description xml:lang="gl">Modificar as conexións de rede para tódolos usuarios</description>
     <description xml:lang="hu">Hálózati kapcsolatok módosítása minden felhasználó számára</description>
     <description xml:lang="id">Ubah koneksi jaringan bagi semua pengguna</description>
     <description xml:lang="ko">모든 사용자의 네트워크 연결을 수정합니다</description>
     <description xml:lang="mr">सर्व वापरकर्त्यांकरीता नेटवर्क जोडणी संपादित करा</description>
     <description xml:lang="pl">Modyfikacja połączeń sieciowych dla wszystkich użytkowników</description>
     <description xml:lang="ru">Изменить подключения доступные всем пользователям</description>
+    <description xml:lang="sl">Spremeni omrežne povezave za vse uporabnike</description>
     <description xml:lang="uk">Внести зміни до мережевих з’єднань всіх користувачів</description>
     <message>System policy prevents modification of network settings for all users</message>
     <message xml:lang="de">Die Systemrichtlinien verhindern das Bearbeiten von Netzwerkeinstellungen für alle Benutzer</message>
     <message xml:lang="eo">Sistempolitiko preventas modifadon de retagordoj por ĉiuj uzantoj</message>
     <message xml:lang="es">La política del sistema evita la modificación de la configuración de la red para todos los usuarios</message>
+    <message xml:lang="gl">A política do sistema impide a modificación da configuración da rede para tódolos usuarios</message>
     <message xml:lang="hu">A rendszer házirendje megakadályozza a hálózati beállítások módosítását minden felhasználó számára</message>
     <message xml:lang="id">Kebijakan sistem mencegah pengubahan tatanan sistem bagi semua pengguna</message>
     <message xml:lang="ko">시스템 정책이 모든 사용자의 네트워크 설정의 수정을 금지합니다</message>
     <message xml:lang="mr">प्रणाली करार सर्व वापरकर्त्यांना नेटवर्क सेटिंग्स् संपादीत करण्यापासून रोखते</message>
     <message xml:lang="pl">Polityka systemu powstrzymuje modyfikację ustawień sieciowych dla wszystkich użytkowników</message>
     <message xml:lang="ru">Системная политика запрещает изменение настроек для всех пользователей</message>
+    <message xml:lang="sl">Sistemska določila preprečujejo spreminjanje sistemskih nastavitev za vse uporabnike</message>
     <message xml:lang="uk">Правила системи забороняють внесення змін до параметрів мережі для всіх користувачів</message>
     <defaults>
       <allow_inactive>no</allow_inactive>
@@ -602,6 +624,7 @@
     <description xml:lang="eo">Modifi permanentan sisteman gastigan nomon</description>
     <description xml:lang="es">Modificar nombre de host de sistema persistente</description>
     <description xml:lang="eu">Aldatu sistemako ostalari-izen iraunkorra</description>
+    <description xml:lang="fi">Muuta järjestelmän verkkonimeä</description>
     <description xml:lang="fr">Modifier le nom d'hôte du système persistant</description>
     <description xml:lang="gl">Modificar o nome persistente do anfitrión do sistema</description>
     <description xml:lang="gu">નિરંતર સિસ્ટમ યજમાનનામને બદલો</description>
@@ -642,6 +665,7 @@
     <message xml:lang="eo">Sistempolitiko preventas modifadon de la konstanta sistem-gastnomo</message>
     <message xml:lang="es">La política del sistema evita la modificación del nombre persistente del sistema</message>
     <message xml:lang="eu">Sistemako arauek sistemako ostalari-izen iraunkorra aldatzea saihesten dute</message>
+    <message xml:lang="fi">Tietoturvakäytäntö estää tietokoneen nimen muuttamisen</message>
     <message xml:lang="fr">La stratégie du système empêche toute modification du nom d'hôte du système persistant</message>
     <message xml:lang="gl">A política do sistema impide a modificación do nome do anfitrión do sistema</message>
     <message xml:lang="gu">સિસ્ટમ પોલિસી એ નિરંતર સિસ્ટમ યજમાનનામનાં બદલાવને અટકાવે છે</message>
diff --git a/src/Makefile.am b/src/Makefile.am
index 94e1a8c0..cbcfdc62 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -142,6 +142,8 @@ NetworkManager_SOURCES = \
 		nm-ip6-config.h \
 		nm-active-connection.h \
 		nm-active-connection.c \
+		nm-config.h \
+		nm-config.c \
 		main.c \
 		nm-policy.c \
 		nm-policy.h \
@@ -159,6 +161,10 @@ NetworkManager_SOURCES = \
 		nm-manager-auth.h \
 		nm-netlink-monitor.c \
 		nm-netlink-monitor.h \
+		nm-netlink-utils.c \
+		nm-netlink-utils.h \
+		nm-netlink-compat.h \
+		nm-netlink-compat.c \
 		nm-activation-request.c \
 		nm-activation-request.h \
 		nm-properties-changed-signal.c \
diff --git a/src/Makefile.in b/src/Makefile.in
index 5d9567ed..103df7fb 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -107,6 +107,7 @@ am_NetworkManager_OBJECTS = NetworkManager-nm-call-store.$(OBJEXT) \
 	NetworkManager-nm-ip4-config.$(OBJEXT) \
 	NetworkManager-nm-ip6-config.$(OBJEXT) \
 	NetworkManager-nm-active-connection.$(OBJEXT) \
+	NetworkManager-nm-config.$(OBJEXT) \
 	NetworkManager-main.$(OBJEXT) \
 	NetworkManager-nm-policy.$(OBJEXT) \
 	NetworkManager-nm-policy-hosts.$(OBJEXT) \
@@ -116,6 +117,8 @@ am_NetworkManager_OBJECTS = NetworkManager-nm-call-store.$(OBJEXT) \
 	NetworkManager-nm-manager.$(OBJEXT) \
 	NetworkManager-nm-manager-auth.$(OBJEXT) \
 	NetworkManager-nm-netlink-monitor.$(OBJEXT) \
+	NetworkManager-nm-netlink-utils.$(OBJEXT) \
+	NetworkManager-nm-netlink-compat.$(OBJEXT) \
 	NetworkManager-nm-activation-request.$(OBJEXT) \
 	NetworkManager-nm-properties-changed-signal.$(OBJEXT) \
 	NetworkManager-wpa.$(OBJEXT) \
@@ -338,8 +341,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
@@ -565,6 +576,8 @@ NetworkManager_SOURCES = \
 		nm-ip6-config.h \
 		nm-active-connection.h \
 		nm-active-connection.c \
+		nm-config.h \
+		nm-config.c \
 		main.c \
 		nm-policy.c \
 		nm-policy.h \
@@ -582,6 +595,10 @@ NetworkManager_SOURCES = \
 		nm-manager-auth.h \
 		nm-netlink-monitor.c \
 		nm-netlink-monitor.h \
+		nm-netlink-utils.c \
+		nm-netlink-utils.h \
+		nm-netlink-compat.h \
+		nm-netlink-compat.c \
 		nm-activation-request.c \
 		nm-activation-request.h \
 		nm-properties-changed-signal.c \
@@ -832,6 +849,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-activation-request.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-active-connection.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-call-store.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-config.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-dbus-manager.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-device-bt.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-device-ethernet.Po@am__quote@
@@ -847,7 +865,9 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-ip6-config.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-manager-auth.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-manager.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-netlink-compat.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-netlink-monitor.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-netlink-utils.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-policy-hostname.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-policy-hosts.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-policy.Po@am__quote@
@@ -1197,6 +1217,22 @@ NetworkManager-nm-active-connection.obj: nm-active-connection.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-active-connection.obj `if test -f 'nm-active-connection.c'; then $(CYGPATH_W) 'nm-active-connection.c'; else $(CYGPATH_W) '$(srcdir)/nm-active-connection.c'; fi`
 
+NetworkManager-nm-config.o: nm-config.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-config.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-config.Tpo -c -o NetworkManager-nm-config.o `test -f 'nm-config.c' || echo '$(srcdir)/'`nm-config.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-config.Tpo $(DEPDIR)/NetworkManager-nm-config.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-config.c' object='NetworkManager-nm-config.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-config.o `test -f 'nm-config.c' || echo '$(srcdir)/'`nm-config.c
+
+NetworkManager-nm-config.obj: nm-config.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-config.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-config.Tpo -c -o NetworkManager-nm-config.obj `if test -f 'nm-config.c'; then $(CYGPATH_W) 'nm-config.c'; else $(CYGPATH_W) '$(srcdir)/nm-config.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-config.Tpo $(DEPDIR)/NetworkManager-nm-config.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-config.c' object='NetworkManager-nm-config.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-config.obj `if test -f 'nm-config.c'; then $(CYGPATH_W) 'nm-config.c'; else $(CYGPATH_W) '$(srcdir)/nm-config.c'; fi`
+
 NetworkManager-main.o: main.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-main.o -MD -MP -MF $(DEPDIR)/NetworkManager-main.Tpo -c -o NetworkManager-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-main.Tpo $(DEPDIR)/NetworkManager-main.Po
@@ -1341,6 +1377,38 @@ NetworkManager-nm-netlink-monitor.obj: nm-netlink-monitor.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-netlink-monitor.obj `if test -f 'nm-netlink-monitor.c'; then $(CYGPATH_W) 'nm-netlink-monitor.c'; else $(CYGPATH_W) '$(srcdir)/nm-netlink-monitor.c'; fi`
 
+NetworkManager-nm-netlink-utils.o: nm-netlink-utils.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-netlink-utils.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-netlink-utils.Tpo -c -o NetworkManager-nm-netlink-utils.o `test -f 'nm-netlink-utils.c' || echo '$(srcdir)/'`nm-netlink-utils.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-netlink-utils.Tpo $(DEPDIR)/NetworkManager-nm-netlink-utils.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-netlink-utils.c' object='NetworkManager-nm-netlink-utils.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-netlink-utils.o `test -f 'nm-netlink-utils.c' || echo '$(srcdir)/'`nm-netlink-utils.c
+
+NetworkManager-nm-netlink-utils.obj: nm-netlink-utils.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-netlink-utils.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-netlink-utils.Tpo -c -o NetworkManager-nm-netlink-utils.obj `if test -f 'nm-netlink-utils.c'; then $(CYGPATH_W) 'nm-netlink-utils.c'; else $(CYGPATH_W) '$(srcdir)/nm-netlink-utils.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-netlink-utils.Tpo $(DEPDIR)/NetworkManager-nm-netlink-utils.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-netlink-utils.c' object='NetworkManager-nm-netlink-utils.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-netlink-utils.obj `if test -f 'nm-netlink-utils.c'; then $(CYGPATH_W) 'nm-netlink-utils.c'; else $(CYGPATH_W) '$(srcdir)/nm-netlink-utils.c'; fi`
+
+NetworkManager-nm-netlink-compat.o: nm-netlink-compat.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-netlink-compat.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-netlink-compat.Tpo -c -o NetworkManager-nm-netlink-compat.o `test -f 'nm-netlink-compat.c' || echo '$(srcdir)/'`nm-netlink-compat.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-netlink-compat.Tpo $(DEPDIR)/NetworkManager-nm-netlink-compat.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-netlink-compat.c' object='NetworkManager-nm-netlink-compat.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-netlink-compat.o `test -f 'nm-netlink-compat.c' || echo '$(srcdir)/'`nm-netlink-compat.c
+
+NetworkManager-nm-netlink-compat.obj: nm-netlink-compat.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-netlink-compat.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-netlink-compat.Tpo -c -o NetworkManager-nm-netlink-compat.obj `if test -f 'nm-netlink-compat.c'; then $(CYGPATH_W) 'nm-netlink-compat.c'; else $(CYGPATH_W) '$(srcdir)/nm-netlink-compat.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-netlink-compat.Tpo $(DEPDIR)/NetworkManager-nm-netlink-compat.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nm-netlink-compat.c' object='NetworkManager-nm-netlink-compat.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-netlink-compat.obj `if test -f 'nm-netlink-compat.c'; then $(CYGPATH_W) 'nm-netlink-compat.c'; else $(CYGPATH_W) '$(srcdir)/nm-netlink-compat.c'; fi`
+
 NetworkManager-nm-activation-request.o: nm-activation-request.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-activation-request.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-activation-request.Tpo -c -o NetworkManager-nm-activation-request.o `test -f 'nm-activation-request.c' || echo '$(srcdir)/'`nm-activation-request.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-activation-request.Tpo $(DEPDIR)/NetworkManager-nm-activation-request.Po
diff --git a/src/NetworkManagerUtils.c b/src/NetworkManagerUtils.c
index f96f2aad..451de6d0 100644
--- a/src/NetworkManagerUtils.c
+++ b/src/NetworkManagerUtils.c
@@ -26,6 +26,7 @@
 #include <string.h>
 #include <unistd.h>
 #include <ctype.h>
+#include <stdlib.h>
 
 #include "NetworkManagerUtils.h"
 #include "nm-utils.h"
@@ -43,9 +44,6 @@
 #include "nm-setting-wireless-security.h"
 #include "nm-manager-auth.h"
 
-#include <netlink/addr.h>
-#include <netinet/in.h>
-
 /*
  * nm_ethernet_address_is_valid
  *
diff --git a/src/backends/Makefile.in b/src/backends/Makefile.in
index 2f489e75..9eb2e0ff 100644
--- a/src/backends/Makefile.in
+++ b/src/backends/Makefile.in
@@ -232,8 +232,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/src/backends/NetworkManagerGeneric.c b/src/backends/NetworkManagerGeneric.c
index 8f16066f..89b8a46d 100644
--- a/src/backends/NetworkManagerGeneric.c
+++ b/src/backends/NetworkManagerGeneric.c
@@ -34,7 +34,9 @@
 #include "nm-system.h"
 #include "NetworkManagerUtils.h"
 #include "nm-logging.h"
+#include "nm-netlink-compat.h"
 #include "nm-netlink-monitor.h"
+#include "nm-netlink-utils.h"
 
 /* Because of a bug in libnl, rtnl.h should be included before route.h */
 #include <netlink/route/rtnl.h>
@@ -50,15 +52,13 @@
  */
 void nm_generic_enable_loopback (void)
 {
-	struct nl_handle *	nlh = NULL;
+	struct nl_sock *	nlh = NULL;
 	struct rtnl_addr *	addr = NULL;
 	struct nl_addr *	nl_addr = NULL;
 	guint32			binaddr = 0;
 	int			iface_idx = -1;
 	int			err;
 
-	nm_system_device_set_up_down_with_iface ("lo", TRUE, NULL);
-
 	nlh = nm_netlink_get_default_handle ();
 	if (!nlh)
 		return;
@@ -67,6 +67,8 @@ void nm_generic_enable_loopback (void)
 	if (iface_idx < 0)
 		return;
 
+	nm_system_iface_set_up (iface_idx, TRUE, NULL);
+
 	addr = rtnl_addr_alloc ();
 	if (!addr)
 		return;
@@ -90,10 +92,10 @@ void nm_generic_enable_loopback (void)
 	rtnl_addr_set_scope (addr, RT_SCOPE_HOST);
 	rtnl_addr_set_label (addr, "lo");
 
-	if ((err = rtnl_addr_add (nlh, addr, 0)) < 0) {
-		if (err != -EEXIST) {
-			nm_log_warn (LOGD_CORE, "error %d returned from rtnl_addr_add():\n%s", err, nl_geterror());
-		}
+	err = rtnl_addr_add (nlh, addr, 0);
+	if (err && (err != -NLE_EXIST)) {
+		nm_log_warn (LOGD_CORE, "error setting loopback address: (%d) %s",
+			         err, nl_geterror (err));
 	}
 out:
 	if (addr)
diff --git a/src/bluez-manager/Makefile.in b/src/bluez-manager/Makefile.in
index 1336b7ec..764493a4 100644
--- a/src/bluez-manager/Makefile.in
+++ b/src/bluez-manager/Makefile.in
@@ -189,8 +189,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/src/dhcp-manager/Makefile.in b/src/dhcp-manager/Makefile.in
index dd557056..d373f7e9 100644
--- a/src/dhcp-manager/Makefile.in
+++ b/src/dhcp-manager/Makefile.in
@@ -237,8 +237,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/src/dhcp-manager/nm-dhcp-client.c b/src/dhcp-manager/nm-dhcp-client.c
index 3418bf3b..f10f3de9 100644
--- a/src/dhcp-manager/nm-dhcp-client.c
+++ b/src/dhcp-manager/nm-dhcp-client.c
@@ -638,7 +638,7 @@ nm_dhcp_client_foreach_option (NMDHCPClient *self,
 		}
 
 		if (!ignore) {
-			const char *tmp_key = value;
+			const char *tmp_key = key;
 
 			/* Remove the "new_" prefix that dhclient passes back */
 			if (!strncmp (key, NEW_TAG, strlen (NEW_TAG)))
diff --git a/src/dhcp-manager/tests/Makefile.in b/src/dhcp-manager/tests/Makefile.in
index 7e875055..8a3c2e97 100644
--- a/src/dhcp-manager/tests/Makefile.in
+++ b/src/dhcp-manager/tests/Makefile.in
@@ -187,8 +187,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/src/dns-manager/Makefile.in b/src/dns-manager/Makefile.in
index aad1c562..d44c3bfc 100644
--- a/src/dns-manager/Makefile.in
+++ b/src/dns-manager/Makefile.in
@@ -190,8 +190,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/src/dns-manager/nm-dns-bind.c b/src/dns-manager/nm-dns-bind.c
index fc7af776..55fce030 100644
--- a/src/dns-manager/nm-dns-bind.c
+++ b/src/dns-manager/nm-dns-bind.c
@@ -297,7 +297,8 @@ update (NMDnsPlugin *plugin,
         const GSList *vpn_configs,
         const GSList *dev_configs,
         const GSList *other_configs,
-        const char *hostname)
+        const char *hostname,
+        const char *iface)
 {
 	NMDnsBind *self = NM_DNS_BIND (plugin);
 	NMDnsBindPrivate *priv = NM_DNS_BIND_GET_PRIVATE (self);
diff --git a/src/dns-manager/nm-dns-dnsmasq.c b/src/dns-manager/nm-dns-dnsmasq.c
index 9cc01978..a602c54f 100644
--- a/src/dns-manager/nm-dns-dnsmasq.c
+++ b/src/dns-manager/nm-dns-dnsmasq.c
@@ -133,23 +133,56 @@ add_ip4_config (GString *str, NMIP4Config *ip4, gboolean split)
 	return TRUE;
 }
 
-static gboolean
-ip6_addr_to_string (const struct in6_addr *addr, char *buf, size_t buflen)
+#define IP6_ADDR_BUFLEN (INET6_ADDRSTRLEN + 50)
+
+static char *
+ip6_addr_to_string (const struct in6_addr *addr, const char *iface)
 {
-	memset (buf, 0, buflen);
+	char *buf, *p;
+
+	/* allocate enough space for the address + interface name */
+	buf = g_malloc0 (IP6_ADDR_BUFLEN + 1);
 
 	/* inet_ntop is probably supposed to do this for us, but it doesn't */
-	if (IN6_IS_ADDR_V4MAPPED (addr))
-		return !!inet_ntop (AF_INET, &(addr->s6_addr32[3]), buf, buflen);
+	if (IN6_IS_ADDR_V4MAPPED (addr)) {
+		if (!inet_ntop (AF_INET, &(addr->s6_addr32[3]), buf, IP6_ADDR_BUFLEN))
+			goto error;
+		return buf;
+	}
 
-	return !!inet_ntop (AF_INET6, addr, buf, buflen);
+	if (!inet_ntop (AF_INET6, addr, buf, IP6_ADDR_BUFLEN))
+		goto error;
+
+	/* In the case of addr being a link-local address, inet_ntop can either
+	 * return an address with scope identifier already in place (like
+	 * fe80::202:b3ff:fe8d:7aaf%wlan0) or it returns an address without
+	 * scope identifier at all (like fe80::202:b3ff:fe8d:7aaf)
+	 */
+	p = strchr (buf, '%');
+	if (p) {
+		/* If we got a scope identifier, we need to replace the '%'
+		 * with '@', since dnsmasq supports '%' in server= addresses
+		 * only since version 2.58 and up
+		 */
+		*p = '@';
+	} else if (IN6_IS_ADDR_LINKLOCAL (addr)) {
+		/* If we got no scope identifier at all append the interface name */
+		strncat (buf, "@", IP6_ADDR_BUFLEN - strlen (buf));
+		strncat (buf, iface, IP6_ADDR_BUFLEN - strlen (buf));
+	}
+
+	return buf;
+
+error:
+	g_free (buf);
+	return NULL;
 }
 
 static gboolean
-add_ip6_config (GString *str, NMIP6Config *ip6, gboolean split)
+add_ip6_config (GString *str, NMIP6Config *ip6, gboolean split, const char *iface)
 {
-	char buf[INET6_ADDRSTRLEN + 1];
 	const struct in6_addr *addr;
+	char *buf;
 	int n, i;
 	gboolean added = FALSE;
 
@@ -159,7 +192,8 @@ add_ip6_config (GString *str, NMIP6Config *ip6, gboolean split)
 		 * the first nameserver here.
 		 */
 		addr = nm_ip6_config_get_nameserver (ip6, 0);
-		if (!ip6_addr_to_string (addr, &buf[0], sizeof (buf)))
+		buf = ip6_addr_to_string (addr, iface);
+		if (!buf)
 			return FALSE;
 
 		/* searches are preferred over domains */
@@ -181,6 +215,8 @@ add_ip6_config (GString *str, NMIP6Config *ip6, gboolean split)
 				added = TRUE;
 			}
 		}
+
+		g_free (buf);
 	}
 
 	/* If no searches or domains, just add the namservers */
@@ -188,8 +224,11 @@ add_ip6_config (GString *str, NMIP6Config *ip6, gboolean split)
 		n = nm_ip6_config_get_num_nameservers (ip6);
 		for (i = 0; i < n; i++) {
 			addr = nm_ip6_config_get_nameserver (ip6, i);
-			if (ip6_addr_to_string (addr, &buf[0], sizeof (buf)))
+			buf = ip6_addr_to_string (addr, iface);
+			if (buf) {
 				g_string_append_printf (str, "server=%s\n", buf);
+				g_free (buf);
+			}
 		}
 	}
 
@@ -201,12 +240,13 @@ update (NMDnsPlugin *plugin,
         const GSList *vpn_configs,
         const GSList *dev_configs,
         const GSList *other_configs,
-        const char *hostname)
+        const char *hostname,
+        const char *iface)
 {
 	NMDnsDnsmasq *self = NM_DNS_DNSMASQ (plugin);
 	GString *conf;
 	GSList *iter;
-	const char *argv[10];
+	const char *argv[11];
 	GError *error = NULL;
 	int ignored;
 	GPid pid = 0;
@@ -226,7 +266,7 @@ update (NMDnsPlugin *plugin,
 		if (NM_IS_IP4_CONFIG (iter->data))
 			add_ip4_config (conf, NM_IP4_CONFIG (iter->data), TRUE);
 		else if (NM_IS_IP6_CONFIG (iter->data))
-			add_ip6_config (conf, NM_IP6_CONFIG (iter->data), TRUE);
+			add_ip6_config (conf, NM_IP6_CONFIG (iter->data), TRUE, iface);
 	}
 
 	/* Now add interface configs without split DNS */
@@ -234,7 +274,7 @@ update (NMDnsPlugin *plugin,
 		if (NM_IS_IP4_CONFIG (iter->data))
 			add_ip4_config (conf, NM_IP4_CONFIG (iter->data), FALSE);
 		else if (NM_IS_IP6_CONFIG (iter->data))
-			add_ip6_config (conf, NM_IP6_CONFIG (iter->data), FALSE);
+			add_ip6_config (conf, NM_IP6_CONFIG (iter->data), FALSE, iface);
 	}
 
 	/* And any other random configs */
@@ -242,7 +282,7 @@ update (NMDnsPlugin *plugin,
 		if (NM_IS_IP4_CONFIG (iter->data))
 			add_ip4_config (conf, NM_IP4_CONFIG (iter->data), FALSE);
 		else if (NM_IS_IP6_CONFIG (iter->data))
-			add_ip6_config (conf, NM_IP6_CONFIG (iter->data), FALSE);
+			add_ip6_config (conf, NM_IP6_CONFIG (iter->data), FALSE, iface);
 	}
 
 	/* Write out the config file */
@@ -267,7 +307,8 @@ update (NMDnsPlugin *plugin,
 	argv[5] = "--pid-file=" PIDFILE;
 	argv[6] = "--listen-address=127.0.0.1"; /* Should work for both 4 and 6 */
 	argv[7] = "--conf-file=" CONFFILE;
-	argv[8] = NULL;
+	argv[8] = "--cache-size=400";
+	argv[9] = NULL;
 
 	/* And finally spawn dnsmasq */
 	pid = nm_dns_plugin_child_spawn (NM_DNS_PLUGIN (self), argv, PIDFILE, "bin/dnsmasq");
diff --git a/src/dns-manager/nm-dns-manager.c b/src/dns-manager/nm-dns-manager.c
index 49cd74e5..0203f2bb 100644
--- a/src/dns-manager/nm-dns-manager.c
+++ b/src/dns-manager/nm-dns-manager.c
@@ -711,7 +711,8 @@ update_dns (NMDnsManager *self,
 		                           vpn_configs,
 		                           dev_configs,
 		                           other_configs,
-		                           priv->hostname)) {
+		                           priv->hostname,
+					   iface)) {
 			nm_log_warn (LOGD_DNS, "DNS: plugin %s update failed", plugin_name);
 
 			/* If the plugin failed to update, we shouldn't write out a local
diff --git a/src/dns-manager/nm-dns-plugin.c b/src/dns-manager/nm-dns-plugin.c
index ae230ada..e997948e 100644
--- a/src/dns-manager/nm-dns-plugin.c
+++ b/src/dns-manager/nm-dns-plugin.c
@@ -55,7 +55,8 @@ nm_dns_plugin_update (NMDnsPlugin *self,
                       const GSList *vpn_configs,
                       const GSList *dev_configs,
                       const GSList *other_configs,
-                      const char *hostname)
+                      const char *hostname,
+                      const char *iface)
 {
 	g_return_val_if_fail (NM_DNS_PLUGIN_GET_CLASS (self)->update != NULL, FALSE);
 
@@ -63,7 +64,8 @@ nm_dns_plugin_update (NMDnsPlugin *self,
 	                                               vpn_configs,
 	                                               dev_configs,
 	                                               other_configs,
-	                                               hostname);
+	                                               hostname,
+						       iface);
 }
 
 static gboolean
diff --git a/src/dns-manager/nm-dns-plugin.h b/src/dns-manager/nm-dns-plugin.h
index d4298b86..37dd7336 100644
--- a/src/dns-manager/nm-dns-plugin.h
+++ b/src/dns-manager/nm-dns-plugin.h
@@ -53,7 +53,8 @@ typedef struct {
 	                    const GSList *vpn_configs,
 	                    const GSList *dev_configs,
 	                    const GSList *other_configs,
-	                    const char *hostname);
+	                    const char *hostname,
+	                    const char *iface);
 
 	/* Subclasses should override and return TRUE if they start a local
 	 * caching nameserver that listens on localhost and would block any
@@ -91,7 +92,8 @@ gboolean nm_dns_plugin_update (NMDnsPlugin *self,
                                const GSList *vpn_configs,
                                const GSList *dev_configs,
                                const GSList *other_configs,
-                               const char *hostname);
+                               const char *hostname,
+                               const char *iface);
 
 /* For subclasses/plugins */
 
diff --git a/src/dnsmasq-manager/Makefile.in b/src/dnsmasq-manager/Makefile.in
index 89f55e5e..de3a4478 100644
--- a/src/dnsmasq-manager/Makefile.in
+++ b/src/dnsmasq-manager/Makefile.in
@@ -186,8 +186,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/src/ip6-manager/Makefile.in b/src/ip6-manager/Makefile.in
index 33539f51..1912bd59 100644
--- a/src/ip6-manager/Makefile.in
+++ b/src/ip6-manager/Makefile.in
@@ -187,8 +187,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/src/ip6-manager/nm-ip6-manager.c b/src/ip6-manager/nm-ip6-manager.c
index 4a5dee58..1c761305 100644
--- a/src/ip6-manager/nm-ip6-manager.c
+++ b/src/ip6-manager/nm-ip6-manager.c
@@ -27,6 +27,8 @@
 
 #include "nm-ip6-manager.h"
 #include "nm-netlink-monitor.h"
+#include "nm-netlink-utils.h"
+#include "nm-netlink-compat.h"
 #include "NetworkManagerUtils.h"
 #include "nm-marshal.h"
 #include "nm-logging.h"
@@ -44,7 +46,7 @@ typedef struct {
 	NMNetlinkMonitor *monitor;
 	GHashTable *devices;
 
-	struct nl_handle *nlh;
+	struct nl_sock *nlh;
 	struct nl_cache *addr_cache, *route_cache;
 
 	guint netlink_id;
@@ -155,7 +157,7 @@ nm_ip6_device_new (NMIP6Manager *manager, int ifindex)
 	}
 
 	device->ifindex = ifindex;
-	device->iface = g_strdup (nm_netlink_index_to_iface (ifindex));
+	device->iface = nm_netlink_index_to_iface (ifindex);
 	if (!device->iface) {
 		nm_log_err (LOGD_IP6, "(%d): could not find interface name from index.",
 		            ifindex);
@@ -549,11 +551,12 @@ process_addr (NMIP6Manager *manager, struct nl_msg *msg)
 	device = nm_ip6_manager_get_device (manager, rtnl_addr_get_ifindex (rtnladdr));
 	if (!device) {
 		nm_log_dbg (LOGD_IP6, "ignoring message for unknown device");
+		rtnl_addr_put (rtnladdr);
 		return NULL;
 	}
 
 	old_size = nl_cache_nitems (priv->addr_cache);
-	nl_cache_include (priv->addr_cache, (struct nl_object *)rtnladdr, NULL);
+	nl_cache_include (priv->addr_cache, (struct nl_object *)rtnladdr, NULL, NULL);
 	rtnl_addr_put (rtnladdr);
 
 	/* The kernel will re-notify us of automatically-added addresses
@@ -589,11 +592,12 @@ process_route (NMIP6Manager *manager, struct nl_msg *msg)
 	device = nm_ip6_manager_get_device (manager, rtnl_route_get_oif (rtnlroute));
 	if (!device) {
 		nm_log_dbg (LOGD_IP6, "ignoring message for unknown device");
+		rtnl_route_put (rtnlroute);
 		return NULL;
 	}
 
 	old_size = nl_cache_nitems (priv->route_cache);
-	nl_cache_include (priv->route_cache, (struct nl_object *)rtnlroute, NULL);
+	nl_cache_include (priv->route_cache, (struct nl_object *)rtnlroute, NULL, NULL);
 	rtnl_route_put (rtnlroute);
 
 	/* As above in process_addr */
@@ -620,6 +624,11 @@ process_prefix (NMIP6Manager *manager, struct nl_msg *msg)
 
 	nm_log_dbg (LOGD_IP6, "processing netlink new prefix message");
 
+	if (!nlmsg_valid_hdr (nlmsg_hdr (msg), sizeof(*pmsg))) {
+		nm_log_dbg (LOGD_IP6, "ignoring invalid prefix message");
+		return NULL;
+	}
+
 	pmsg = (struct prefixmsg *) NLMSG_DATA (nlmsg_hdr (msg));
 	device = nm_ip6_manager_get_device (manager, pmsg->prefix_ifindex);
 
@@ -907,6 +916,13 @@ process_nduseropt (NMIP6Manager *manager, struct nl_msg *msg)
 
 	ndmsg = (struct nduseroptmsg *) NLMSG_DATA (nlmsg_hdr (msg));
 
+	if (!nlmsg_valid_hdr (nlmsg_hdr (msg), sizeof (*ndmsg)) ||
+	    nlmsg_datalen (nlmsg_hdr (msg)) <
+		(ndmsg->nduseropt_opts_len + sizeof (*ndmsg))) {
+		nm_log_dbg (LOGD_IP6, "ignoring invalid nduseropt message");
+		return NULL;
+	}
+
 	if (ndmsg->nduseropt_family != AF_INET6 ||
 		ndmsg->nduseropt_icmp_type != ND_ROUTER_ADVERT ||
 		ndmsg->nduseropt_icmp_code != 0) {
@@ -966,6 +982,19 @@ process_newlink (NMIP6Manager *manager, struct nl_msg *msg)
 	struct nlattr *pi[IFLA_INET6_MAX + 1];
 	int err;
 
+	/* FIXME: we have to do this manually for now since libnl doesn't yet
+	 * support the IFLA_PROTINFO attribute of NEWLINK messages.  When it does,
+	 * we can get rid of this function and just grab IFLA_PROTINFO from
+	 * nm_ip6_device_sync_from_netlink(), then get the IFLA_INET6_FLAGS out of
+	 * the PROTINFO.
+	 */
+	err = nlmsg_parse (hdr, sizeof (*ifi), tb, IFLA_MAX, link_policy);
+	if (err < 0) {
+		nm_log_dbg (LOGD_IP6, "ignoring invalid newlink netlink message "
+				      "while parsing PROTINFO attribute");
+		return NULL;
+	}
+
 	ifi = nlmsg_data (hdr);
 	if (ifi->ifi_family != AF_INET6) {
 		nm_log_dbg (LOGD_IP6, "ignoring netlink message family %d", ifi->ifi_family);
@@ -979,18 +1008,6 @@ process_newlink (NMIP6Manager *manager, struct nl_msg *msg)
 		return NULL;
 	}
 
-	/* FIXME: we have to do this manually for now since libnl doesn't yet
-	 * support the IFLA_PROTINFO attribute of NEWLINK messages.  When it does,
-	 * we can get rid of this function and just grab IFLA_PROTINFO from
-	 * nm_ip6_device_sync_from_netlink(), then get the IFLA_INET6_FLAGS out of
-	 * the PROTINFO.
-	 */
-
-	err = nlmsg_parse (hdr, sizeof (*ifi), tb, IFLA_MAX, link_policy);
-	if (err < 0) {
-		nm_log_dbg (LOGD_IP6, "(%s): error parsing PROTINFO attribute", device->iface);
-		return NULL;
-	}
 	if (!tb[IFLA_PROTINFO]) {
 		nm_log_dbg (LOGD_IP6, "(%s): message had no PROTINFO attribute", device->iface);
 		return NULL;
@@ -1087,7 +1104,7 @@ nm_ip6_manager_prepare_interface (NMIP6Manager *manager,
 		nm_utils_do_sysctl (accept_ra_path, "0\n");
 	} else {
 		device->target_state = NM_IP6_DEVICE_GOT_ADDRESS;
-		nm_utils_do_sysctl (accept_ra_path, "1\n");
+		nm_utils_do_sysctl (accept_ra_path, "2\n");
 	}
 
 	return TRUE;
@@ -1248,7 +1265,7 @@ nm_ip6_manager_get_ip6_config (NMIP6Manager *manager, int ifindex)
 		nm_ip6_route_set_dest (ip6route, dest);
 		nm_ip6_route_set_prefix (ip6route, rtnl_route_get_dst_len (rtnlroute));
 		nm_ip6_route_set_next_hop (ip6route, gateway);
-		metric = rtnl_route_get_metric (rtnlroute, 1);
+		rtnl_route_get_metric(rtnlroute, 1, &metric);
 		if (metric != UINT_MAX)
 			nm_ip6_route_set_metric (ip6route, metric);
 		nm_ip6_config_take_route (config, ip6route);
@@ -1344,8 +1361,10 @@ nm_ip6_manager_init (NMIP6Manager *manager)
 	                                     G_CALLBACK (netlink_notification), manager);
 
 	priv->nlh = nm_netlink_get_default_handle ();
-	priv->addr_cache = rtnl_addr_alloc_cache (priv->nlh);
-	priv->route_cache = rtnl_route_alloc_cache (priv->nlh);
+	rtnl_addr_alloc_cache (priv->nlh, &priv->addr_cache);
+	g_warn_if_fail (priv->addr_cache != NULL);
+	rtnl_route_alloc_cache (priv->nlh, NETLINK_ROUTE, NL_AUTO_PROVIDE, &priv->route_cache);
+	g_warn_if_fail (priv->route_cache != NULL);
 }
 
 static void
diff --git a/src/logging/Makefile.in b/src/logging/Makefile.in
index a85578d9..4606160a 100644
--- a/src/logging/Makefile.in
+++ b/src/logging/Makefile.in
@@ -183,8 +183,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/src/logging/nm-logging.c b/src/logging/nm-logging.c
index d8353f27..078f1527 100644
--- a/src/logging/nm-logging.c
+++ b/src/logging/nm-logging.c
@@ -30,10 +30,13 @@
 #include <errno.h>
 #include <sys/wait.h>
 #include <sys/stat.h>
-#include <execinfo.h>
 #include <strings.h>
 #include <string.h>
 
+#ifdef ENABLE_CRASHTRACE
+#include <execinfo.h>
+#endif
+
 #include <glib/gi18n.h>
 
 #include "nm-logging.h"
@@ -262,6 +265,7 @@ _nm_log (const char *loc,
 static void
 fallback_get_backtrace (void)
 {
+#ifdef ENABLE_CRASHTRACE
 	void *frames[64];
 	Dl_info info;
 	size_t size;
@@ -289,6 +293,7 @@ fallback_get_backtrace (void)
 		}
 	}
 	syslog (LOG_CRIT, "******************* END **********************************");
+#endif  /* ENABLE_CRASHTRACE */
 }
 
 
diff --git a/src/main.c b/src/main.c
index 328c253d..b7c0fd5a 100644
--- a/src/main.c
+++ b/src/main.c
@@ -15,7 +15,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * Copyright (C) 2004 - 2010 Red Hat, Inc.
+ * Copyright (C) 2004 - 2011 Red Hat, Inc.
  * Copyright (C) 2005 - 2008 Novell, Inc.
  */
 
@@ -50,14 +50,13 @@
 #include "nm-vpn-manager.h"
 #include "nm-logging.h"
 #include "nm-policy-hosts.h"
+#include "nm-config.h"
 
 #if !defined(NM_DIST_VERSION)
 # define NM_DIST_VERSION VERSION
 #endif
 
 #define NM_DEFAULT_PID_FILE          LOCALSTATEDIR"/run/NetworkManager.pid"
-#define NM_DEFAULT_SYSTEM_CONF_FILE  SYSCONFDIR"/NetworkManager/NetworkManager.conf"
-#define NM_OLD_SYSTEM_CONF_FILE      SYSCONFDIR"/NetworkManager/nm-system-settings.conf"
 #define NM_DEFAULT_SYSTEM_STATE_FILE LOCALSTATEDIR"/lib/NetworkManager/NetworkManager.state"
 
 /*
@@ -310,51 +309,11 @@ done:
 }
 
 static gboolean
-parse_config_file (const char *filename,
-                   char **plugins,
-                   char **dhcp_client,
-                   char ***dns_plugins,
-                   char **log_level,
-                   char **log_domains,
-                   GError **error)
-{
-	GKeyFile *config;
-	gboolean success = FALSE;
-
-	config = g_key_file_new ();
-	if (!config) {
-		g_set_error (error, 0, 0,
-		             "Not enough memory to load config file.");
-		return FALSE;
-	}
-
-	g_key_file_set_list_separator (config, ',');
-	if (!g_key_file_load_from_file (config, filename, G_KEY_FILE_NONE, error))
-		goto out;
-
-	*plugins = g_key_file_get_value (config, "main", "plugins", error);
-	if (*error)
-		goto out;
-
-	*dhcp_client = g_key_file_get_value (config, "main", "dhcp", NULL);
-	*dns_plugins = g_key_file_get_string_list (config, "main", "dns", NULL, NULL);
-
-	*log_level = g_key_file_get_value (config, "logging", "level", NULL);
-	*log_domains = g_key_file_get_value (config, "logging", "domains", NULL);
-
-	success = TRUE;
-
-out:
-	g_key_file_free (config);
-	return success;
-}
-
-static gboolean
 parse_state_file (const char *filename,
                   gboolean *net_enabled,
                   gboolean *wifi_enabled,
                   gboolean *wwan_enabled,
-				  gboolean *wimax_enabled,
+                  gboolean *wimax_enabled,
                   GError **error)
 {
 	GKeyFile *state_file;
@@ -368,13 +327,15 @@ parse_state_file (const char *filename,
 
 	state_file = g_key_file_new ();
 	if (!state_file) {
-		g_set_error (error, 0, 0,
-		             "Not enough memory to load state file.");
+		g_set_error (error, NM_CONFIG_ERROR, NM_CONFIG_ERROR_NO_MEMORY,
+		             "Not enough memory to load state file %s.", filename);
 		return FALSE;
 	}
 
 	g_key_file_set_list_separator (state_file, ',');
 	if (!g_key_file_load_from_file (state_file, filename, G_KEY_FILE_KEEP_COMMENTS, &tmp_error)) {
+		gboolean ret = FALSE;
+
 		/* This is kinda ugly; create the file and directory if it doesn't
 		 * exist yet.  We can't rely on distros necessarily creating the
 		 * /var/lib/NetworkManager for us since we have to ensure that
@@ -384,15 +345,16 @@ parse_state_file (const char *filename,
 		    && tmp_error->code == G_FILE_ERROR_NOENT) {
 			char *data, *dirname;
 			gsize len = 0;
-			gboolean ret = FALSE;
+
+			g_clear_error (&tmp_error);
 
 			/* try to create the directory if it doesn't exist */
 			dirname = g_path_get_dirname (filename);
 			errno = 0;
-			if (mkdir (dirname, 0755) != 0) {
+			if (g_mkdir_with_parents (dirname, 0755) != 0) {
 				if (errno != EEXIST) {
 					g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_ACCES,
-					             "Error creating state directory %s: %d", dirname, errno);
+					             "Error creating state directory %s: %s", dirname, strerror(errno));
 					g_free (dirname);
 					return FALSE;
 				}
@@ -409,53 +371,38 @@ parse_state_file (const char *filename,
 			if (data)
 				ret = g_file_set_contents (filename, data, len, error);
 			g_free (data);
-
-			return ret;
 		} else {
-			g_set_error_literal (error, tmp_error->domain, tmp_error->code, tmp_error->message);
-			g_clear_error (&tmp_error);
+			/* the error is not "No such file or directory" - propagate the error */
+			g_propagate_error (error, tmp_error);
 		}
 
-		/* Otherwise, file probably corrupt or inaccessible */
-		return FALSE;
+		return ret;
 	}
 
 	/* Reading state bits of NetworkManager; an error leaves the passed-in state
 	 * value unchanged.
 	 */
 	net = g_key_file_get_boolean (state_file, "main", "NetworkingEnabled", &tmp_error);
-	if (tmp_error)
-		g_set_error_literal (error, tmp_error->domain, tmp_error->code, tmp_error->message);
-	else
+	if (tmp_error == NULL)
 		*net_enabled = net;
 	g_clear_error (&tmp_error);
 
 	wifi = g_key_file_get_boolean (state_file, "main", "WirelessEnabled", &tmp_error);
-	if (tmp_error) {
-		g_clear_error (error);
-		g_set_error_literal (error, tmp_error->domain, tmp_error->code, tmp_error->message);
-	} else
+	if (tmp_error == NULL)
 		*wifi_enabled = wifi;
 	g_clear_error (&tmp_error);
 
 	wwan = g_key_file_get_boolean (state_file, "main", "WWANEnabled", &tmp_error);
-	if (tmp_error) {
-		g_clear_error (error);
-		g_set_error_literal (error, tmp_error->domain, tmp_error->code, tmp_error->message);
-	} else
+	if (tmp_error == NULL)
 		*wwan_enabled = wwan;
 	g_clear_error (&tmp_error);
 
 	wimax = g_key_file_get_boolean (state_file, "main", "WimaxEnabled", &tmp_error);
-	if (tmp_error) {
-		g_clear_error (error);
-		g_set_error_literal (error, tmp_error->domain, tmp_error->code, tmp_error->message);
-	} else
+	if (tmp_error == NULL)
 		*wimax_enabled = wimax;
 	g_clear_error (&tmp_error);
 
 	g_key_file_free (state_file);
-
 	return TRUE;
 }
 
@@ -469,10 +416,9 @@ main (int argc, char *argv[])
 	GOptionContext *opt_ctx = NULL;
 	gboolean become_daemon = FALSE;
 	gboolean g_fatal_warnings = FALSE;
-	char *pidfile = NULL, *state_file = NULL, *dhcp = NULL;
-	char *config = NULL, *plugins = NULL, *conf_plugins = NULL;
+	char *pidfile = NULL, *state_file = NULL;
+	char *config_path = NULL, *plugins = NULL;
 	char *log_level = NULL, *log_domains = NULL;
-	char **dns = NULL;
 	gboolean wifi_enabled = TRUE, net_enabled = TRUE, wwan_enabled = TRUE, wimax_enabled = TRUE;
 	gboolean success, show_version = FALSE;
 	NMPolicy *policy = NULL;
@@ -482,9 +428,9 @@ main (int argc, char *argv[])
 	NMSupplicantManager *sup_mgr = NULL;
 	NMDHCPManager *dhcp_mgr = NULL;
 	NMSettings *settings = NULL;
+	NMConfig *config;
 	GError *error = NULL;
 	gboolean wrote_pidfile = FALSE;
-	char *cfg_log_level = NULL, *cfg_log_domains = NULL;
 
 	GOptionEntry options[] = {
 		{ "version", 0, 0, G_OPTION_ARG_NONE, &show_version, "Print NetworkManager version and exit", NULL },
@@ -492,7 +438,7 @@ main (int argc, char *argv[])
 		{ "g-fatal-warnings", 0, 0, G_OPTION_ARG_NONE, &g_fatal_warnings, "Make all warnings fatal", NULL },
 		{ "pid-file", 0, 0, G_OPTION_ARG_FILENAME, &pidfile, "Specify the location of a PID file", "filename" },
 		{ "state-file", 0, 0, G_OPTION_ARG_FILENAME, &state_file, "State file location", "/path/to/state.file" },
-		{ "config", 0, 0, G_OPTION_ARG_FILENAME, &config, "Config file location", "/path/to/config.file" },
+		{ "config", 0, 0, G_OPTION_ARG_FILENAME, &config_path, "Config file location", "/path/to/config.file" },
 		{ "plugins", 0, 0, G_OPTION_ARG_STRING, &plugins, "List of plugins separated by ','", "plugin1,plugin2" },
 		{ "log-level", 0, 0, G_OPTION_ARG_STRING, &log_level, "Log level: one of [ERR, WARN, INFO, DEBUG]", "INFO" },
 		{ "log-domains", 0, 0, G_OPTION_ARG_STRING, &log_domains,
@@ -554,58 +500,18 @@ main (int argc, char *argv[])
 	if (check_pidfile (pidfile))
 		exit (1);
 
-	/* Parse the config file */
-	if (config) {
-		if (!parse_config_file (config, &conf_plugins, &dhcp, &dns, &cfg_log_level, &cfg_log_domains, &error)) {
-			fprintf (stderr, "Config file %s invalid: (%d) %s\n",
-			         config,
-			         error ? error->code : -1,
-			         (error && error->message) ? error->message : "unknown");
-			exit (1);
-		}
-	} else {
-		gboolean parsed = FALSE;
-
-		/* Even though we prefer NetworkManager.conf, we need to check the
-		 * old nm-system-settings.conf first to preserve compat with older
-		 * setups.  In package managed systems dropping a NetworkManager.conf
-		 * onto the system would make NM use it instead of nm-system-settings.conf,
-		 * changing behavior during an upgrade.  We don't want that.
-		 */
-
-		/* Try deprecated nm-system-settings.conf first */
-		if (g_file_test (NM_OLD_SYSTEM_CONF_FILE, G_FILE_TEST_EXISTS)) {
-			config = g_strdup (NM_OLD_SYSTEM_CONF_FILE);
-			parsed = parse_config_file (config, &conf_plugins, &dhcp, &dns, &cfg_log_level, &cfg_log_domains, &error);
-			if (!parsed) {
-				fprintf (stderr, "Default config file %s invalid: (%d) %s\n",
-				         config,
-				         error ? error->code : -1,
-				         (error && error->message) ? error->message : "unknown");
-				g_free (config);
-				config = NULL;
-				g_clear_error (&error);
-			}
-		}
-
-		/* Try the preferred NetworkManager.conf last */
-		if (!parsed && g_file_test (NM_DEFAULT_SYSTEM_CONF_FILE, G_FILE_TEST_EXISTS)) {
-			config = g_strdup (NM_DEFAULT_SYSTEM_CONF_FILE);
-			parsed = parse_config_file (config, &conf_plugins, &dhcp, &dns, &cfg_log_level, &cfg_log_domains, &error);
-			if (!parsed) {
-				fprintf (stderr, "Default config file %s invalid: (%d) %s\n",
-				         config,
-				         error ? error->code : -1,
-				         (error && error->message) ? error->message : "unknown");
-				g_free (config);
-				config = NULL;
-				g_clear_error (&error);
-			}
-		}
+	/* Read the config file and CLI overrides */
+	config = nm_config_new (config_path, plugins, log_level, log_domains, &error);
+	if (config == NULL) {
+		fprintf (stderr, "Failed to read configuration: (%d) %s\n",
+		         error ? error->code : -1,
+		         (error && error->message) ? error->message : "unknown");
+		exit (1);
 	}
+
 	/* Logging setup */
-	if (!nm_logging_setup (log_level ? log_level : cfg_log_level,
-	                       log_domains ? log_domains : cfg_log_domains,
+	if (!nm_logging_setup (nm_config_get_log_level (config),
+	                       nm_config_get_log_domains (config),
 	                       &error)) {
 		fprintf (stderr,
 		         _("%s.  Please use --help to see a list of valid options.\n"),
@@ -613,10 +519,6 @@ main (int argc, char *argv[])
 		exit (1);
 	}
 
-	/* Plugins specified with '--plugins' override those of config file */
-	plugins = plugins ? plugins : g_strdup (conf_plugins);
-	g_free (conf_plugins);
-
 	/* Parse the state file */
 	if (!parse_state_file (state_file, &net_enabled, &wifi_enabled, &wwan_enabled, &wimax_enabled, &error)) {
 		fprintf (stderr, "State file %s parsing failed: (%d) %s\n",
@@ -683,8 +585,7 @@ main (int argc, char *argv[])
 	nm_log_info (LOGD_CORE, "NetworkManager (version " NM_DIST_VERSION ") is starting...");
 	success = FALSE;
 
-	if (config)
-		nm_log_info (LOGD_CORE, "Read config file %s", config);
+	nm_log_info (LOGD_CORE, "Read config file %s", nm_config_get_path (config));
 
 	main_loop = g_main_loop_new (NULL, FALSE);
 
@@ -704,22 +605,22 @@ main (int argc, char *argv[])
 		goto done;
 	}
 
-	dns_mgr = nm_dns_manager_get ((const char **) dns);
+	dns_mgr = nm_dns_manager_get (nm_config_get_dns_plugins (config));
 	if (!dns_mgr) {
 		nm_log_err (LOGD_CORE, "failed to start the DNS manager.");
 		goto done;
 	}
 
-	settings = nm_settings_new (config, plugins, &error);
+	settings = nm_settings_new (nm_config_get_path (config),
+	                            nm_config_get_plugins (config),
+	                            &error);
 	if (!settings) {
 		nm_log_err (LOGD_CORE, "failed to initialize settings storage: %s",
 		            error && error->message ? error->message : "(unknown)");
 		goto done;
 	}
 
-	manager = nm_manager_get (settings,
-	                          config,
-	                          plugins,
+	manager = nm_manager_new (settings,
 	                          state_file,
 	                          net_enabled,
 	                          wifi_enabled,
@@ -746,7 +647,7 @@ main (int argc, char *argv[])
 	}
 
 	/* Initialize DHCP manager */
-	dhcp_mgr = nm_dhcp_manager_new (dhcp, &error);
+	dhcp_mgr = nm_dhcp_manager_new (nm_config_get_dhcp_client (config), &error);
 	if (!dhcp_mgr) {
 		nm_log_err (LOGD_CORE, "failed to start the DHCP manager: %s.", error->message);
 		goto done;
@@ -806,17 +707,15 @@ done:
 	if (pidfile && wrote_pidfile)
 		unlink (pidfile);
 
+	nm_config_free (config);
+
 	/* Free options */
 	g_free (pidfile);
 	g_free (state_file);
-	g_free (config);
+	g_free (config_path);
 	g_free (plugins);
-	g_free (dhcp);
-	g_strfreev (dns);
 	g_free (log_level);
 	g_free (log_domains);
-	g_free (cfg_log_level);
-	g_free (cfg_log_domains);
 
 	nm_log_info (LOGD_CORE, "exiting (%s)", success ? "success" : "error");
 	exit (success ? 0 : 1);
diff --git a/src/modem-manager/Makefile.in b/src/modem-manager/Makefile.in
index 2a054f70..c78ed0f3 100644
--- a/src/modem-manager/Makefile.in
+++ b/src/modem-manager/Makefile.in
@@ -189,8 +189,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/src/modem-manager/nm-modem-manager.c b/src/modem-manager/nm-modem-manager.c
index f5ade50c..3509d667 100644
--- a/src/modem-manager/nm-modem-manager.c
+++ b/src/modem-manager/nm-modem-manager.c
@@ -29,6 +29,7 @@
 #include "nm-dbus-manager.h"
 #include "nm-modem-types.h"
 #include "nm-marshal.h"
+#include "nm-dbus-glib-types.h"
 
 #define MODEM_POKE_INTERVAL 120
 
@@ -235,6 +236,23 @@ modem_removed (DBusGProxy *proxy, const char *path, gpointer user_data)
 	}
 }
 
+static void
+mm_poke_cb (DBusGProxy *proxy, DBusGProxyCall *call, gpointer user_data)
+{
+	GPtrArray *modems;
+	int i;
+
+	if (dbus_g_proxy_end_call (proxy, call, NULL,
+	                           DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH, &modems,
+	                           G_TYPE_INVALID)) {
+		/* Don't care about the returned value, just free it */
+		for (i = 0; i < modems->len; i++)
+			g_free ((char *) g_ptr_array_index (modems, i));
+		g_ptr_array_free (modems, TRUE);
+	}
+	g_object_unref (proxy);
+}
+
 static gboolean
 poke_modem_cb (gpointer user_data)
 {
@@ -242,6 +260,7 @@ poke_modem_cb (gpointer user_data)
 	NMModemManagerPrivate *priv = NM_MODEM_MANAGER_GET_PRIVATE (self);
 	DBusGConnection *g_connection;
 	DBusGProxy *proxy;
+	DBusGProxyCall *call;
 
 	g_connection = nm_dbus_manager_get_connection (priv->dbus_mgr);
 	proxy = dbus_g_proxy_new_for_name (g_connection,
@@ -249,9 +268,13 @@ poke_modem_cb (gpointer user_data)
 									   MM_DBUS_PATH,
 									   MM_DBUS_INTERFACE);
 
-	dbus_g_proxy_call_no_reply (proxy, "EnumerateDevices", G_TYPE_INVALID);
-	g_object_unref (proxy);
-
+	call = dbus_g_proxy_begin_call_with_timeout (proxy,
+	                                             "EnumerateDevices",
+	                                             mm_poke_cb,
+	                                             NULL,
+	                                             NULL,
+	                                             5000,
+	                                             G_TYPE_INVALID);
 	return TRUE;
 }
 
diff --git a/src/modem-manager/nm-modem.c b/src/modem-manager/nm-modem.c
index 1823e5e6..debfbdf7 100644
--- a/src/modem-manager/nm-modem.c
+++ b/src/modem-manager/nm-modem.c
@@ -640,7 +640,7 @@ static void
 real_deactivate (NMModem *self, NMDevice *device)
 {
 	NMModemPrivate *priv;
-	const char *iface;
+	int ifindex;
 
 	g_return_if_fail (self != NULL);
 	g_return_if_fail (NM_IS_MODEM (self));
@@ -679,11 +679,11 @@ real_deactivate (NMModem *self, NMDevice *device)
 		break;
 	case MM_MODEM_IP_METHOD_STATIC:
 	case MM_MODEM_IP_METHOD_DHCP:
-		iface = nm_device_get_ip_iface (device);
+		ifindex = nm_device_get_ip_ifindex (device);
 		/* FIXME: use AF_UNSPEC here when we have IPv6 support */
-		nm_system_device_flush_routes_with_iface (iface, AF_INET);
-		nm_system_device_flush_addresses_with_iface (iface);
-		nm_system_device_set_up_down_with_iface (iface, FALSE, NULL);
+		nm_system_iface_flush_routes (ifindex, AF_INET);
+		nm_system_iface_flush_addresses (ifindex, AF_UNSPEC);
+		nm_system_iface_set_up (ifindex, FALSE, NULL);
 		break;
 	default:
 		nm_log_err (LOGD_MB, "unknown IP method %d", priv->ip_method);
@@ -775,7 +775,7 @@ nm_modem_hw_is_up (NMModem *self, NMDevice *device)
 
 		state = nm_device_interface_get_state (NM_DEVICE_INTERFACE (device));
 		if (priv->pending_ip4_config || _state_is_active (state))
-			return nm_system_device_is_up (device);
+			return nm_system_iface_is_up (nm_device_get_ip_ifindex (device));
 	}
 
 	return TRUE;
@@ -792,7 +792,7 @@ nm_modem_hw_bring_up (NMModem *self, NMDevice *device, gboolean *no_firmware)
 
 		state = nm_device_interface_get_state (NM_DEVICE_INTERFACE (device));
 		if (priv->pending_ip4_config || _state_is_active (state))
-			return nm_system_device_set_up_down (device, TRUE, no_firmware);
+			return nm_system_iface_set_up (nm_device_get_ip_ifindex (device), TRUE, no_firmware);
 	}
 
 	return TRUE;
diff --git a/src/nm-config.c b/src/nm-config.c
new file mode 100644
index 00000000..71f67d55
--- /dev/null
+++ b/src/nm-config.c
@@ -0,0 +1,247 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * 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 of the License, 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) 2011 Red Hat, Inc.
+ */
+
+#include <config.h>
+#include <string.h>
+#include <stdio.h>
+
+#include "nm-config.h"
+
+#define NM_DEFAULT_SYSTEM_CONF_FILE  SYSCONFDIR"/NetworkManager/NetworkManager.conf"
+#define NM_OLD_SYSTEM_CONF_FILE      SYSCONFDIR"/NetworkManager/nm-system-settings.conf"
+
+struct NMConfig {
+	char *path;
+	char **plugins;
+	char *dhcp_client;
+	char **dns_plugins;
+	char *log_level;
+	char *log_domains;
+};
+
+/************************************************************************/
+
+GQuark
+nm_config_error_quark (void)
+{
+	static GQuark quark = 0;
+	if (!quark)
+		quark = g_quark_from_static_string ("nm-config-error");
+	return quark;
+}
+
+/* This should really be standard. */
+#define ENUM_ENTRY(NAME, DESC) { NAME, "" #NAME "", DESC }
+
+GType
+nm_config_error_get_type (void)
+{
+	static GType etype = 0;
+
+	if (etype == 0) {
+		static const GEnumValue values[] = {
+			/* Not enough memory to parse the config file. */
+			ENUM_ENTRY (NM_CONFIG_ERROR_NO_MEMORY, "NoMemory"),
+			{ 0, 0, 0 }
+		};
+		etype = g_enum_register_static ("NMConfigError", values);
+	}
+	return etype;
+}
+
+/************************************************************************/
+
+const char *
+nm_config_get_path (NMConfig *config)
+{
+	g_return_val_if_fail (config != NULL, NULL);
+
+	return config->path;
+}
+
+const char **
+nm_config_get_plugins (NMConfig *config)
+{
+	g_return_val_if_fail (config != NULL, NULL);
+
+	return (const char **) config->plugins;
+}
+
+const char *
+nm_config_get_dhcp_client (NMConfig *config)
+{
+	g_return_val_if_fail (config != NULL, NULL);
+
+	return config->dhcp_client;
+}
+
+const char **
+nm_config_get_dns_plugins (NMConfig *config)
+{
+	g_return_val_if_fail (config != NULL, NULL);
+
+	return (const char **) config->dns_plugins;
+}
+
+const char *
+nm_config_get_log_level (NMConfig *config)
+{
+	g_return_val_if_fail (config != NULL, NULL);
+
+	return config->log_level;
+}
+
+const char *
+nm_config_get_log_domains (NMConfig *config)
+{
+	g_return_val_if_fail (config != NULL, NULL);
+
+	return config->log_domains;
+}
+
+/************************************************************************/
+
+static gboolean
+fill_from_file (NMConfig *config,
+                const char *path,
+                const char *cli_plugins,
+                const char *cli_log_level,
+                const char *cli_log_domains,
+                GError **error)
+{
+	GKeyFile *kf;
+	gboolean success = FALSE;
+
+	if (g_file_test (path, G_FILE_TEST_EXISTS) == FALSE) {
+		g_set_error (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_NOT_FOUND, "file %s not found", path);
+		return FALSE;
+	}
+
+	kf = g_key_file_new ();
+	if (!kf) {
+		g_set_error (error, NM_CONFIG_ERROR, NM_CONFIG_ERROR_NO_MEMORY,
+		             "Not enough memory to load config file %s", path);
+		return FALSE;
+	}
+
+	g_key_file_set_list_separator (kf, ',');
+	if (g_key_file_load_from_file (kf, path, G_KEY_FILE_NONE, error)) {
+		config->path = g_strdup (path);
+
+		/* CLI provided options override config file options */
+		if (cli_plugins && strlen (cli_plugins))
+			config->plugins = g_strsplit_set (cli_plugins, ",", 0);
+		else
+			config->plugins = g_key_file_get_string_list (kf, "main", "plugins", NULL, NULL);
+
+		config->dhcp_client = g_key_file_get_value (kf, "main", "dhcp", NULL);
+		config->dns_plugins = g_key_file_get_string_list (kf, "main", "dns", NULL, NULL);
+
+		if (cli_log_level && strlen (cli_log_level))
+			config->log_level = g_strdup (cli_log_level);
+		else
+			config->log_level = g_key_file_get_value (kf, "logging", "level", NULL);
+
+		if (cli_log_domains && strlen (cli_log_domains))
+			config->log_domains = g_strdup (cli_log_domains);
+		else
+			config->log_domains = g_key_file_get_value (kf, "logging", "domains", NULL);
+		success = TRUE;
+	}
+
+	g_key_file_free (kf);
+	return success;
+}
+
+NMConfig *
+nm_config_new (const char *cli_config_path,
+               const char *cli_plugins,
+               const char *cli_log_level,
+               const char *cli_log_domains,
+               GError **error)
+{
+	NMConfig *config;
+	GError *local = NULL;
+
+	config = g_malloc0 (sizeof (*config));
+
+	if (cli_config_path) {
+		/* Bad user-specific config file path is a hard error */
+		if (!fill_from_file (config, cli_config_path, cli_plugins, cli_log_level, cli_log_domains, error)) {
+			nm_config_free (config);
+			return NULL;
+		}
+		return config;
+	}
+
+	/* Even though we prefer NetworkManager.conf, we need to check the
+	 * old nm-system-settings.conf first to preserve compat with older
+	 * setups.  In package managed systems dropping a NetworkManager.conf
+	 * onto the system would make NM use it instead of nm-system-settings.conf,
+	 * changing behavior during an upgrade.  We don't want that.
+	 */
+
+	/* Try deprecated nm-system-settings.conf first */
+	if (fill_from_file (config, NM_OLD_SYSTEM_CONF_FILE, cli_plugins, cli_log_level, cli_log_domains, &local))
+		return config;
+
+	if (g_error_matches (local, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_NOT_FOUND) == FALSE) {
+		fprintf (stderr, "Default config file %s invalid: (%d) %s\n",
+		         NM_OLD_SYSTEM_CONF_FILE,
+		         local ? local->code : -1,
+		         (local && local->message) ? local->message : "unknown");
+	}
+	g_clear_error (&local);
+
+	/* Try the standard config file location next */
+	if (fill_from_file (config, NM_DEFAULT_SYSTEM_CONF_FILE, cli_plugins, cli_log_level, cli_log_domains, &local))
+		return config;
+
+	if (g_error_matches (local, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_NOT_FOUND) == FALSE) {
+		fprintf (stderr, "Default config file %s invalid: (%d) %s\n",
+		         NM_DEFAULT_SYSTEM_CONF_FILE,
+		         local ? local->code : -1,
+		         (local && local->message) ? local->message : "unknown");
+		g_propagate_error (error, local);
+		nm_config_free (config);
+		return NULL;
+	}
+
+	/* ignore error if config file not found */
+	g_clear_error (&local);
+	return config;
+}
+
+void
+nm_config_free (NMConfig *config)
+{
+	g_return_if_fail (config != NULL);
+
+	g_free (config->path);
+	g_strfreev (config->plugins);
+	g_free (config->dhcp_client);
+	g_strfreev (config->dns_plugins);
+	g_free (config->log_level);
+	g_free (config->log_domains);
+
+	memset (config, 0, sizeof (*config));
+	g_free (config);
+}
+
diff --git a/src/nm-config.h b/src/nm-config.h
new file mode 100644
index 00000000..fae344fb
--- /dev/null
+++ b/src/nm-config.h
@@ -0,0 +1,55 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * 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 of the License, 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) 2011 Red Hat, Inc.
+ */
+
+#ifndef NM_CONFIG_H
+#define NM_CONFIG_H
+
+#include <glib.h>
+#include <glib-object.h>
+
+typedef struct NMConfig NMConfig;
+
+typedef enum {
+	NM_CONFIG_ERROR_NO_MEMORY = 0,
+} NMConfigError;
+
+#define NM_CONFIG_ERROR (nm_config_error_quark ())
+GQuark nm_config_error_quark (void);
+#define NM_TYPE_CONFIG_ERROR (nm_config_error_get_type ())
+GType nm_config_error_get_type (void);
+
+
+NMConfig *nm_config_new (const char *cli_config_path,
+                         const char *cli_plugins,
+                         const char *cli_log_level,
+                         const char *cli_log_domains,
+                         GError **error);
+
+const char *nm_config_get_path (NMConfig *config);
+const char **nm_config_get_plugins (NMConfig *config);
+const char *nm_config_get_dhcp_client (NMConfig *config);
+const char **nm_config_get_dns_plugins (NMConfig *config);
+const char *nm_config_get_log_level (NMConfig *config);
+const char *nm_config_get_log_domains (NMConfig *config);
+
+void nm_config_free (NMConfig *config);
+
+#endif /* NM_CONFIG_H */
+
diff --git a/src/nm-crash-logger.c b/src/nm-crash-logger.c
index 9ad0412d..e0e7cbf6 100644
--- a/src/nm-crash-logger.c
+++ b/src/nm-crash-logger.c
@@ -55,6 +55,7 @@ int main (int argc, char ** argv)
 	syslog (LOG_CRIT, "******************* START **********************************");
 	while (!done)
 	{
+		line[sizeof (line) - 1] = '\0';
 		bytes_read = read (out, line, sizeof (line) - 1);
 		if (bytes_read > 0)
 		{
diff --git a/src/nm-device-ethernet.c b/src/nm-device-ethernet.c
index 35b73670..8556c5bd 100644
--- a/src/nm-device-ethernet.c
+++ b/src/nm-device-ethernet.c
@@ -59,6 +59,7 @@
 #include "nm-logging.h"
 #include "nm-properties-changed-signal.h"
 #include "nm-dhcp-manager.h"
+#include "nm-netlink-utils.h"
 
 #include "nm-device-ethernet-glue.h"
 
@@ -546,19 +547,19 @@ real_take_down (NMDevice *dev)
 static gboolean
 real_hw_is_up (NMDevice *device)
 {
-	return nm_system_device_is_up (device);
+	return nm_system_iface_is_up (nm_device_get_ip_ifindex (device));
 }
 
 static gboolean
 real_hw_bring_up (NMDevice *dev, gboolean *no_firmware)
 {
-	return nm_system_device_set_up_down (dev, TRUE, no_firmware);
+	return nm_system_iface_set_up (nm_device_get_ip_ifindex (dev), TRUE, no_firmware);
 }
 
 static void
 real_hw_take_down (NMDevice *dev)
 {
-	nm_system_device_set_up_down (dev, FALSE, NULL);
+	nm_system_iface_set_up (nm_device_get_ip_ifindex (dev), FALSE, NULL);
 }
 
 NMDevice *
@@ -677,7 +678,7 @@ _set_hw_addr (NMDeviceEthernet *self, const guint8 *addr, const char *detail)
 	/* Can't change MAC address while device is up */
 	real_hw_take_down (dev);
 
-	success = nm_system_device_set_mac (iface, (struct ether_addr *) addr);
+	success = nm_system_iface_set_mac (nm_device_get_ip_ifindex (dev), (struct ether_addr *) addr);
 	if (success) {
 		/* MAC address succesfully changed; update the current MAC to match */
 		_update_hw_addr (self, addr);
@@ -1796,73 +1797,19 @@ wired_match_config (NMDevice *self, NMConnection *connection)
 	return TRUE;
 }
 
-typedef struct {
-	int ifindex;
-	NMIP4Address *addr;
-	gboolean found;
-} AddrData;
-
-static void
-check_one_address (struct nl_object *object, void *user_data)
-{
-	AddrData *data = user_data;
-	struct rtnl_addr *addr = (struct rtnl_addr *) object;
-	struct nl_addr *local;
-	struct in_addr tmp;
-
-	if (rtnl_addr_get_ifindex (addr) != data->ifindex)
-		return;
-	if (rtnl_addr_get_family (addr) != AF_INET)
-		return;
-
-	if (nm_ip4_address_get_prefix (data->addr) != rtnl_addr_get_prefixlen (addr))
-		return;
-
-	local = rtnl_addr_get_local (addr);
-	if (nl_addr_get_family (local) != AF_INET)
-		return;
-	if (nl_addr_get_len (local) != sizeof (struct in_addr))
-		return;
-	if (!nl_addr_get_binary_addr (local))
-		return;
-
-	memcpy (&tmp, nl_addr_get_binary_addr (local), nl_addr_get_len (local));
-	if (tmp.s_addr != nm_ip4_address_get_address (data->addr))
-		return;
-
-	/* Yay, found it */
-	data->found = TRUE;
-}
-
 static gboolean
 ip4_match_config (NMDevice *self, NMConnection *connection)
 {
 	NMSettingIP4Config *s_ip4;
-	struct nl_handle *nlh = NULL;
-	struct nl_cache *addr_cache = NULL;
 	int i, num;
 	GSList *leases, *iter;
 	NMDHCPManager *dhcp_mgr;
 	const char *method;
-	int ifindex;
-	AddrData check_data;
-
-	ifindex = nm_device_get_ifindex (self);
 
-	s_ip4 = (NMSettingIP4Config *) nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG);
+	s_ip4 = nm_connection_get_setting_ip4_config (connection);
 	if (!s_ip4)
 		return FALSE;
 
-	/* Read all the device's IP addresses */
-	nlh = nm_netlink_get_default_handle ();
-	if (!nlh)
-		return FALSE;
-
-	addr_cache = rtnl_addr_alloc_cache (nlh);
-	if (!addr_cache)
-		return FALSE;
-	nl_cache_mngt_provide (addr_cache);
-
 	/* Get any saved leases that apply to this connection */
 	dhcp_mgr = nm_dhcp_manager_get ();
 	leases = nm_dhcp_manager_get_lease_config (dhcp_mgr,
@@ -1876,15 +1823,14 @@ ip4_match_config (NMDevice *self, NMConnection *connection)
 
 		/* Find at least one lease's address on the device */
 		for (iter = leases; iter; iter = g_slist_next (iter)) {
-			NMIP4Config *addr = iter->data;
-
-			memset (&check_data, 0, sizeof (check_data));
-			check_data.ifindex = ifindex;
-			check_data.found = FALSE;
-			check_data.addr = nm_ip4_config_get_address (addr, 0);
-
-			nl_cache_foreach (addr_cache, check_one_address, &check_data);
-			if (check_data.found) {
+			NMIP4Config *ip4_config = iter->data;
+			NMIP4Address *addr = nm_ip4_config_get_address (ip4_config, 0);
+			struct in_addr tmp = { .s_addr = nm_ip4_address_get_address (addr) };
+
+			if (addr && nm_netlink_find_address (nm_device_get_ip_ifindex (self),
+			                                     AF_INET,
+			                                     &tmp,
+			                                     nm_ip4_address_get_prefix (addr))) {
 				found = TRUE; /* Yay, device has same address as a lease */
 				break;
 			}
@@ -1908,16 +1854,16 @@ ip4_match_config (NMDevice *self, NMConnection *connection)
 
 	/* Everything below for static addressing */
 
-	/* Find all IP4 addresses of this connection in the device's address list */
+	/* Find all IP4 addresses of this connection on the device */
 	num = nm_setting_ip4_config_get_num_addresses (s_ip4);
 	for (i = 0; i < num; i++) {
-		memset (&check_data, 0, sizeof (check_data));
-		check_data.ifindex = ifindex;
-		check_data.found = FALSE;
-		check_data.addr = nm_setting_ip4_config_get_address (s_ip4, i);
+		NMIP4Address *addr = nm_setting_ip4_config_get_address (s_ip4, i);
+		struct in_addr tmp = { .s_addr = nm_ip4_address_get_address (addr) };
 
-		nl_cache_foreach (addr_cache, check_one_address, &check_data);
-		if (!check_data.found)
+		if (!nm_netlink_find_address (nm_device_get_ip_ifindex (self),
+		                              AF_INET,
+		                              &tmp,
+		                              nm_ip4_address_get_prefix (addr)))
 			return FALSE;
 	}
 
diff --git a/src/nm-device-olpc-mesh.c b/src/nm-device-olpc-mesh.c
index 88322344..ddd5198e 100644
--- a/src/nm-device-olpc-mesh.c
+++ b/src/nm-device-olpc-mesh.c
@@ -271,19 +271,19 @@ error:
 static gboolean
 real_hw_is_up (NMDevice *device)
 {
-	return nm_system_device_is_up (device);
+	return nm_system_iface_is_up (nm_device_get_ip_ifindex (device));
 }
 
 static gboolean
 real_hw_bring_up (NMDevice *dev, gboolean *no_firmware)
 {
-	return nm_system_device_set_up_down (dev, TRUE, no_firmware);
+	return nm_system_iface_set_up (nm_device_get_ip_ifindex (dev), TRUE, no_firmware);
 }
 
 static void
 real_hw_take_down (NMDevice *dev)
 {
-	nm_system_device_set_up_down (dev, FALSE, NULL);
+	nm_system_iface_set_up (nm_device_get_ip_ifindex (dev), FALSE, NULL);
 }
 
 static gboolean
@@ -653,7 +653,7 @@ dispose (GObject *object)
 
 	device_cleanup (self);
 
-	manager = nm_manager_get (NULL, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, NULL);
+	manager = nm_manager_get ();
 	if (priv->device_added_id)
 		g_signal_handler_disconnect (manager, priv->device_added_id);
 	g_object_unref (manager);
@@ -852,7 +852,7 @@ is_companion (NMDeviceOlpcMesh *self, NMDevice *other)
 	priv->companion = other;
 
 	/* When we've found the companion, stop listening for other devices */
-	manager = nm_manager_get (NULL, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, NULL);
+	manager = nm_manager_get ();
 	if (priv->device_added_id) {
 		g_signal_handler_disconnect (manager, priv->device_added_id);
 		priv->device_added_id = 0;
@@ -907,7 +907,7 @@ check_companion_cb (gpointer user_data)
 	if (priv->device_added_id != 0)
 		return FALSE;
 
-	manager = nm_manager_get (NULL, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, NULL);
+	manager = nm_manager_get ();
 
 	priv->device_added_id = g_signal_connect (manager, "device-added",
 	                                          G_CALLBACK (device_added_cb), self);
diff --git a/src/nm-device-wifi.c b/src/nm-device-wifi.c
index 278d9a06..9695c077 100644
--- a/src/nm-device-wifi.c
+++ b/src/nm-device-wifi.c
@@ -1133,7 +1133,7 @@ out:
 static gboolean
 real_hw_is_up (NMDevice *device)
 {
-	return nm_system_device_is_up (device);
+	return nm_system_iface_is_up (nm_device_get_ip_ifindex (device));
 }
 
 static gboolean
@@ -1142,13 +1142,13 @@ real_hw_bring_up (NMDevice *device, gboolean *no_firmware)
 	if (!NM_DEVICE_WIFI_GET_PRIVATE (device)->enabled)
 		return FALSE;
 
-	return nm_system_device_set_up_down (device, TRUE, no_firmware);
+	return nm_system_iface_set_up (nm_device_get_ip_ifindex (device), TRUE, no_firmware);
 }
 
 static void
-real_hw_take_down (NMDevice *dev)
+real_hw_take_down (NMDevice *device)
 {
-	nm_system_device_set_up_down (dev, FALSE, NULL);
+	nm_system_iface_set_up (nm_device_get_ip_ifindex (device), FALSE, NULL);
 }
 
 static gboolean
@@ -1209,7 +1209,7 @@ _set_hw_addr (NMDeviceWifi *self, const guint8 *addr, const char *detail)
 	/* Can't change MAC address while device is up */
 	real_hw_take_down (dev);
 
-	success = nm_system_device_set_mac (iface, (struct ether_addr *) addr);
+	success = nm_system_iface_set_mac (nm_device_get_ip_ifindex (dev), (struct ether_addr *) addr);
 	if (success) {
 		/* MAC address succesfully changed; update the current MAC to match */
 		_update_hw_addr (self, addr);
@@ -1690,7 +1690,7 @@ nm_device_wifi_get_address (NMDeviceWifi *self,
 }
 
 static void
-nm_device_wifi_ap_list_print (NMDeviceWifi *self)
+ap_list_dump (NMDeviceWifi *self)
 {
 	NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
 	GSList * elt;
@@ -1701,7 +1701,7 @@ nm_device_wifi_ap_list_print (NMDeviceWifi *self)
 	nm_log_dbg (LOGD_WIFI_SCAN, "Current AP list:");
 	for (elt = priv->ap_list; elt; elt = g_slist_next (elt), i++) {
 		NMAccessPoint * ap = NM_AP (elt->data);
-		nm_ap_print_self (ap, "AP: ");
+		nm_ap_dump (ap, "List AP: ");
 	}
 	nm_log_dbg (LOGD_WIFI_SCAN, "Current AP list: done");
 }
@@ -2180,91 +2180,20 @@ supplicant_iface_scan_done_cb (NMSupplicantInterface *iface,
 		 * happens when there are actual scan results to process.
 		 */
 		cull_scan_list (self);
-		nm_device_wifi_ap_list_print (self);
+		ap_list_dump (self);
 	}
 #endif
 }
 
-static gboolean
-is_encrypted (guint32 flags, guint32 wpa_flags, guint32 rsn_flags)
-{
-	if (flags & NM_802_11_AP_FLAGS_PRIVACY)
-		return TRUE;
-	if (wpa_flags & (NM_802_11_AP_SEC_KEY_MGMT_PSK | NM_802_11_AP_SEC_KEY_MGMT_802_1X))
-		return TRUE;
-	if (rsn_flags & (NM_802_11_AP_SEC_KEY_MGMT_PSK | NM_802_11_AP_SEC_KEY_MGMT_802_1X))
-		return TRUE;
-
-	return FALSE;
-}
-
-/*
- * ap_auth_enforced
- *
- * Checks whether or not there is an encryption key present for
- * this connection, and whether or not the authentication method
- * in use will result in an authentication rejection if the key
- * is wrong.  For example, Ad Hoc mode networks don't have a
- * master node and therefore nothing exists to reject the station.
- * Similarly, Open System WEP access points don't reject a station
- * when the key is wrong.  Shared Key WEP access points will.
- *
- */
-static gboolean
-ap_auth_enforced (NMConnection *connection,
-                  NMAccessPoint *ap,
-                  gboolean *encrypted)
-{
-	guint32 flags, wpa_flags, rsn_flags;
-	gboolean enforced = FALSE;
-
-	g_return_val_if_fail (NM_IS_AP (ap), FALSE);
-	g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
-	g_return_val_if_fail (encrypted != NULL, FALSE);
-
-	flags = nm_ap_get_flags (ap);
-	wpa_flags = nm_ap_get_wpa_flags (ap);
-	rsn_flags = nm_ap_get_rsn_flags (ap);
-
-	if (nm_ap_get_mode (ap) == NM_802_11_MODE_ADHOC)
-		goto out;
-
-	/* Static WEP */
-	if (   (flags & NM_802_11_AP_FLAGS_PRIVACY)
-        && (wpa_flags == NM_802_11_AP_SEC_NONE)
-        && (rsn_flags == NM_802_11_AP_SEC_NONE)) {
-		NMSettingWirelessSecurity *s_wireless_sec;
-		const char *auth_alg;
-
-		/* No way to tell if the key is wrong with Open System
-		 * auth mode in WEP.  Auth is not enforced like Shared Key.
-		 */
-		s_wireless_sec = (NMSettingWirelessSecurity *) nm_connection_get_setting (connection, 
-																    NM_TYPE_SETTING_WIRELESS_SECURITY);
-		if (s_wireless_sec) {
-			auth_alg = nm_setting_wireless_security_get_auth_alg (s_wireless_sec);
-			if (!auth_alg || !strcmp (auth_alg, "open"))
-				goto out;
-		}
-
-		enforced = TRUE;
-	} else if (wpa_flags != NM_802_11_AP_SEC_NONE) { /* WPA */
-		enforced = TRUE;
-	} else if (rsn_flags != NM_802_11_AP_SEC_NONE) { /* WPA2 */
-		enforced = TRUE;
-	}
-
-out:
-	*encrypted = is_encrypted (flags, wpa_flags, rsn_flags);
-	return enforced;
-}
-
 
 /****************************************************************************
  * WPA Supplicant control stuff
  *
  */
 
+#define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x"
+#define MAC_ARG(x) ((guint8*)(x))[0],((guint8*)(x))[1],((guint8*)(x))[2],((guint8*)(x))[3],((guint8*)(x))[4],((guint8*)(x))[5]
+
 /*
  * merge_scanned_ap
  *
@@ -2284,16 +2213,33 @@ merge_scanned_ap (NMDeviceWifi *self,
 	NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
 	NMAccessPoint *found_ap = NULL;
 	const GByteArray *ssid;
+	const struct ether_addr *bssid;
 	gboolean strict_match = TRUE;
 	NMAccessPoint *current_ap = NULL;
 
 	/* Let the manager try to fill in the SSID from seen-bssids lists
 	 * if it can
 	 */
+	bssid = nm_ap_get_address (merge_ap);
 	ssid = nm_ap_get_ssid (merge_ap);
 	if (!ssid || nm_utils_is_empty_ssid (ssid->data, ssid->len)) {
+		/* Let the manager try to fill the AP's SSID from the database */
 		g_signal_emit (self, signals[HIDDEN_AP_FOUND], 0, merge_ap);
-		nm_ap_set_broadcast (merge_ap, FALSE);
+
+		ssid = nm_ap_get_ssid (merge_ap);
+		if (ssid && (nm_utils_is_empty_ssid (ssid->data, ssid->len) == FALSE)) {
+			/* Yay, matched it, no longer treat as hidden */
+			nm_log_dbg (LOGD_WIFI_SCAN, "(%s): matched hidden AP " MAC_FMT " => '%s'",
+			            nm_device_get_iface (NM_DEVICE (self)),
+			            MAC_ARG (bssid->ether_addr_octet),
+			            nm_utils_escape_ssid (ssid->data, ssid->len));
+			nm_ap_set_broadcast (merge_ap, FALSE);
+		} else {
+			/* Didn't have an entry for this AP in the database */
+			nm_log_dbg (LOGD_WIFI_SCAN, "(%s): failed to match hidden AP " MAC_FMT,
+			            nm_device_get_iface (NM_DEVICE (self)),
+			            MAC_ARG (bssid->ether_addr_octet));
+		}
 	}
 
 	/* If the incoming scan result matches the hidden AP that NM is currently
@@ -2308,6 +2254,13 @@ merge_scanned_ap (NMDeviceWifi *self,
 
 	found_ap = nm_ap_match_in_list (merge_ap, priv->ap_list, strict_match);
 	if (found_ap) {
+		nm_log_dbg (LOGD_WIFI_SCAN, "(%s): merging AP '%s' " MAC_FMT " (%p) with existing (%p)",
+		            nm_device_get_iface (NM_DEVICE (self)),
+		            ssid ? nm_utils_escape_ssid (ssid->data, ssid->len) : "(none)",
+		            MAC_ARG (bssid->ether_addr_octet),
+		            merge_ap,
+		            found_ap);
+
 		nm_ap_set_flags (found_ap, nm_ap_get_flags (merge_ap));
 		nm_ap_set_wpa_flags (found_ap, nm_ap_get_wpa_flags (merge_ap));
 		nm_ap_set_rsn_flags (found_ap, nm_ap_get_rsn_flags (merge_ap));
@@ -2323,7 +2276,12 @@ merge_scanned_ap (NMDeviceWifi *self,
 		nm_ap_set_fake (found_ap, FALSE);
 	} else {
 		/* New entry in the list */
-		// FIXME: figure out if reference counts are correct here for AP objects
+		nm_log_dbg (LOGD_WIFI_SCAN, "(%s): adding new AP '%s' " MAC_FMT " (%p)",
+		            nm_device_get_iface (NM_DEVICE (self)),
+		            ssid ? nm_utils_escape_ssid (ssid->data, ssid->len) : "(none)",
+		            MAC_ARG (bssid->ether_addr_octet),
+		            merge_ap);
+
 		g_object_ref (merge_ap);
 		priv->ap_list = g_slist_prepend (priv->ap_list, merge_ap);
 		nm_ap_export_to_dbus (merge_ap);
@@ -2421,7 +2379,7 @@ supplicant_iface_new_bss_cb (NMSupplicantInterface *iface,
 
 	ap = nm_ap_new_from_properties (properties);
 	if (ap) {
-		nm_ap_print_self (ap, "AP: ");
+		nm_ap_dump (ap, "New AP: ");
 
 		/* Add the AP to the device's AP list */
 		merge_scanned_ap (self, ap);
@@ -2430,7 +2388,7 @@ supplicant_iface_new_bss_cb (NMSupplicantInterface *iface,
 		/* Remove outdated access points */
 		cull_scan_list (self);
 
-		nm_device_wifi_ap_list_print (self);
+		ap_list_dump (self);
 	} else {
 		nm_log_warn (LOGD_WIFI_SCAN, "(%s): invalid AP properties received",
 		             nm_device_get_iface (NM_DEVICE (self)));
@@ -2512,7 +2470,7 @@ link_timeout_cb (gpointer user_data)
 }
 
 static gboolean
-handle_authenticate_fail (NMDeviceWifi *self, guint32 new_state, guint32 old_state)
+handle_8021x_auth_fail (NMDeviceWifi *self, guint32 new_state, guint32 old_state)
 {
 	NMDevice *device = NM_DEVICE (self);
 	NMSetting8021x *s_8021x;
@@ -2643,18 +2601,21 @@ supplicant_iface_state_cb (NMSupplicantInterface *iface,
 		break;
 	case NM_SUPPLICANT_INTERFACE_STATE_DISCONNECTED:
 		if ((devstate == NM_DEVICE_STATE_ACTIVATED) || nm_device_is_activating (device)) {
-			/* Disconnect during authentication means the 802.1x password is wrong */
-			if (handle_authenticate_fail (self, new_state, old_state))
+			/* Disconnect of an 802.1x/LEAP connection during authentication
+			 * means secrets might be wrong. Not always the case, but until we
+			 * have more information from wpa_supplicant about why the
+			 * disconnect happened this is the best we can do.
+			 */
+			if (handle_8021x_auth_fail (self, new_state, old_state))
 				break;
 		}
 
+		/* Otherwise it might be a stupid driver or some transient error, so
+		 * let the supplicant try to reconnect a few more times.  Give it more
+		 * time if a scan is in progress since the link might be dropped during
+		 * the scan but will be re-established when the scan is done.
+		 */
 		if (devstate == NM_DEVICE_STATE_ACTIVATED) {
-			/* If it's a disconnect while activated then start the link timer
-			 * to let the supplicant reconnect for a bit and if that doesn't
-			 * work kill the connection and try something else.  Allow a bit
-			 * more time if the card is scanning since sometimes the link will
-			 * drop while scanning and come back when the scan is done.
-			 */
 			if (priv->link_timeout_id == 0)
 				priv->link_timeout_id = g_timeout_add_seconds (scanning ? 30 : 15, link_timeout_cb, self);
 		}
@@ -2756,7 +2717,7 @@ supplicant_iface_notify_scanning_cb (NMSupplicantInterface *iface,
 	scanning = nm_supplicant_interface_get_scanning (iface);
 	nm_log_dbg (LOGD_WIFI_SCAN, "(%s): now %s",
 	            nm_device_get_iface (NM_DEVICE (self)),
-	            scanning ? "scanning" : "not scanning");
+	            scanning ? "scanning" : "idle");
 
 	g_object_notify (G_OBJECT (self), "scanning");
 }
@@ -2826,6 +2787,29 @@ handle_auth_or_fail (NMDeviceWifi *self,
 	return ret;
 }
 
+static gboolean
+is_encrypted (NMAccessPoint *ap, NMConnection *connection)
+{
+	NM80211ApFlags flags;
+	NM80211ApSecurityFlags wpa_flags, rsn_flags;
+
+	g_return_val_if_fail (ap != NULL, FALSE);
+	g_return_val_if_fail (connection != NULL, FALSE);
+
+	flags = nm_ap_get_flags (ap);
+	wpa_flags = nm_ap_get_wpa_flags (ap);
+	rsn_flags = nm_ap_get_rsn_flags (ap);
+
+	if (flags & NM_802_11_AP_FLAGS_PRIVACY)
+		return TRUE;
+	if (wpa_flags & (NM_802_11_AP_SEC_KEY_MGMT_PSK | NM_802_11_AP_SEC_KEY_MGMT_802_1X))
+		return TRUE;
+	if (rsn_flags & (NM_802_11_AP_SEC_KEY_MGMT_PSK | NM_802_11_AP_SEC_KEY_MGMT_802_1X))
+		return TRUE;
+
+	return FALSE;
+}
+
 /*
  * supplicant_connection_timeout_cb
  *
@@ -2835,11 +2819,10 @@ handle_auth_or_fail (NMDeviceWifi *self,
 static gboolean
 supplicant_connection_timeout_cb (gpointer user_data)
 {
-	NMDevice *              dev = NM_DEVICE (user_data);
-	NMDeviceWifi * self = NM_DEVICE_WIFI (user_data);
-	NMAccessPoint *         ap;
-	NMActRequest *          req;
-	gboolean                auth_enforced = FALSE, encrypted = FALSE;
+	NMDevice *dev = NM_DEVICE (user_data);
+	NMDeviceWifi *self = NM_DEVICE_WIFI (user_data);
+	NMAccessPoint *ap;
+	NMActRequest *req;
 	NMConnection *connection;
 
 	cleanup_association_attempt (self, TRUE);
@@ -2847,10 +2830,10 @@ supplicant_connection_timeout_cb (gpointer user_data)
 	if (!nm_device_is_activating (dev))
 		return FALSE;
 
-	/* Timed out waiting for authentication success; if the security in use
-	 * does not require access point side authentication (Open System
-	 * WEP, for example) then we are likely using the wrong authentication
-	 * algorithm or key.  Request new one from the user.
+	/* Timed out waiting for a successful connection to the AP; if the AP's
+	 * security requires network-side authentication (like WPA or 802.1x)
+	 * and the connection attempt timed out then it's likely the authentication
+	 * information (passwords, pin codes, etc) are wrong.
 	 */
 
 	req = nm_device_get_act_request (dev);
@@ -2862,16 +2845,24 @@ supplicant_connection_timeout_cb (gpointer user_data)
 	ap = nm_device_wifi_get_activation_ap (self);
 	g_assert (ap);
 
-	auth_enforced = ap_auth_enforced (connection, ap, &encrypted);
-	if (!encrypted) {
+	if (nm_ap_get_mode (ap) == NM_802_11_MODE_ADHOC) {
+		/* In Ad-Hoc mode there's nothing to check the encryption key (if any)
+		 * so supplicant timeouts here are almost certainly the wifi driver
+		 * being really stupid.
+		 */
 		nm_log_warn (LOGD_DEVICE | LOGD_WIFI,
-		             "Activation (%s/wireless): association took too long, "
-		             "failing activation.",
+		             "Activation (%s/wireless): Ad-Hoc network creation took "
+		             "too long, failing activation.",
 		             nm_device_get_iface (dev));
 		nm_device_state_changed (dev, NM_DEVICE_STATE_FAILED,
 		                         NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT);
-	} else {
-		/* Authentication failed, encryption key is probably bad */
+		return FALSE;
+	}
+
+	if (is_encrypted (ap, connection)) {
+		/* Connection failed; either driver problems, the encryption key is
+		 * wrong, or the passwords or certificates were wrong.
+		 */
 		nm_log_warn (LOGD_DEVICE | LOGD_WIFI,
 		             "Activation (%s/wireless): association took too long.",
 		             nm_device_get_iface (dev));
@@ -2884,6 +2875,13 @@ supplicant_connection_timeout_cb (gpointer user_data)
 			nm_device_state_changed (dev, NM_DEVICE_STATE_FAILED,
 			                         NM_DEVICE_STATE_REASON_NO_SECRETS);
 		}
+	} else {
+		nm_log_warn (LOGD_DEVICE | LOGD_WIFI,
+		             "Activation (%s/wireless): association took too long, "
+		             "failing activation.",
+		             nm_device_get_iface (dev));
+		nm_device_state_changed (dev, NM_DEVICE_STATE_FAILED,
+		                         NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT);
 	}
 
 	return FALSE;
@@ -3323,6 +3321,34 @@ real_act_stage4_get_ip4_config (NMDevice *dev,
 	return ret;
 }
 
+static gboolean
+is_static_wep (NMAccessPoint *ap, NMConnection *connection)
+{
+	NM80211ApFlags flags;
+	NM80211ApSecurityFlags wpa_flags, rsn_flags;
+	NMSettingWirelessSecurity *s_wsec;
+	const char *key_mgmt;
+
+	g_return_val_if_fail (ap != NULL, FALSE);
+	g_return_val_if_fail (connection != NULL, FALSE);
+
+	flags = nm_ap_get_flags (ap);
+	wpa_flags = nm_ap_get_wpa_flags (ap);
+	rsn_flags = nm_ap_get_rsn_flags (ap);
+
+	if (   (flags & NM_802_11_AP_FLAGS_PRIVACY)
+	    && (wpa_flags == NM_802_11_AP_SEC_NONE)
+	    && (rsn_flags == NM_802_11_AP_SEC_NONE)) {
+		s_wsec = nm_connection_get_setting_wireless_security (connection);
+		if (s_wsec) {
+			key_mgmt = nm_setting_wireless_security_get_key_mgmt (s_wsec);
+			if (g_strcmp0 (key_mgmt, "none") == 0)
+				return TRUE;
+		}
+	}
+
+	return FALSE;
+}
 
 static NMActStageReturn
 handle_ip_config_timeout (NMDeviceWifi *self,
@@ -3333,20 +3359,20 @@ handle_ip_config_timeout (NMDeviceWifi *self,
 {
 	NMAccessPoint *ap;
 	NMActStageReturn ret = NM_ACT_STAGE_RETURN_FAILURE;
-	gboolean auth_enforced = FALSE, encrypted = FALSE;
 
 	g_return_val_if_fail (connection != NULL, NM_ACT_STAGE_RETURN_FAILURE);
 
 	ap = nm_device_wifi_get_activation_ap (self);
 	g_assert (ap);
 
-	/* If nothing checks the security authentication information (as in
-	 * Open System WEP for example), and DHCP times out, then
-	 * the encryption key is likely wrong.  Ask the user for a new one.
-	 * Otherwise the failure likely happened after a successful authentication.
+	/* If IP configuration times out and it's a static WEP connection, that
+	 * usually means the WEP key is wrong.  WEP's Open System auth mode has
+	 * no provision for figuring out if the WEP key is wrong, so you just have
+	 * to wait for DHCP to fail to figure it out.  For all other WiFi security
+	 * types (open, WPA, 802.1x, etc) if the secrets/certs were wrong the
+	 * connection would have failed before IP configuration.
 	 */
-	auth_enforced = ap_auth_enforced (connection, ap, &encrypted);
-	if (encrypted && !auth_enforced && !may_fail) {
+	if (is_static_wep (ap, connection) && (may_fail == FALSE)) {
 		/* Activation failed, we must have bad encryption key */
 		nm_log_warn (LOGD_DEVICE | LOGD_WIFI,
 		             "Activation (%s/wireless): could not get IP configuration for "
@@ -3363,10 +3389,7 @@ handle_ip_config_timeout (NMDeviceWifi *self,
 			*reason = NM_DEVICE_STATE_REASON_NO_SECRETS;
 		}
 	} else {
-		/* Non-encrypted network or authentication is enforced by some
-		 * entity (AP, RADIUS server, etc), but IP configure failed. Let the
-		 * superclass handle it.
-		 */
+		/* Not static WEP or failure allowed; let superclass handle it */
 		*chain_up = TRUE;
 	}
 
diff --git a/src/nm-device.c b/src/nm-device.c
index 1301197a..a4cd3e93 100644
--- a/src/nm-device.c
+++ b/src/nm-device.c
@@ -25,7 +25,6 @@
 #include <dbus/dbus.h>
 #include <netinet/in.h>
 #include <string.h>
-#include <net/if.h>
 #include <unistd.h>
 #include <errno.h>
 #include <sys/ioctl.h>
@@ -34,6 +33,7 @@
 #include <sys/wait.h>
 #include <arpa/inet.h>
 #include <fcntl.h>
+#include <linux/if.h>
 
 #include "nm-glib-compat.h"
 #include "nm-device-interface.h"
@@ -47,6 +47,8 @@
 #include "nm-utils.h"
 #include "nm-logging.h"
 #include "nm-netlink-monitor.h"
+#include "nm-netlink-utils.h"
+#include "nm-netlink-compat.h"
 #include "nm-setting-ip4-config.h"
 #include "nm-setting-ip6-config.h"
 #include "nm-setting-connection.h"
@@ -187,6 +189,8 @@ static void addrconf6_cleanup (NMDevice *self);
 static void dhcp6_cleanup (NMDevice *self, gboolean stop, gboolean release);
 static void dhcp4_cleanup (NMDevice *self, gboolean stop, gboolean release);
 
+static const char *reason_to_string (NMDeviceStateReason reason);
+
 
 static void
 device_interface_init (NMDeviceInterface *device_interface_class)
@@ -1569,8 +1573,11 @@ nm_device_dhcp4_renew (NMDevice *self, gboolean release)
 
 	g_return_val_if_fail (priv->dhcp4_client != NULL, FALSE);
 
+	nm_log_info (LOGD_DHCP4, "(%s): DHCPv4 lease renewal requested",
+	             nm_device_get_iface (self));
+
 	/* Terminate old DHCP instance and release the old lease */
-	dhcp4_cleanup (self, TRUE, TRUE);
+	dhcp4_cleanup (self, TRUE, release);
 
 	req = nm_device_get_act_request (self);
 	g_assert (req);
@@ -1591,16 +1598,15 @@ real_act_stage3_ip4_config_start (NMDevice *self, NMDeviceStateReason *reason)
 	NMSettingIP4Config *s_ip4;
 	NMActRequest *req;
 	NMActStageReturn ret = NM_ACT_STAGE_RETURN_SUCCESS;
-	const char *ip_iface, *method = NULL;
+	const char *method = NULL;
+	int ifindex;
 
 	g_return_val_if_fail (reason != NULL, NM_ACT_STAGE_RETURN_FAILURE);
 
-	/* Use the IP interface (not the control interface) for IP stuff */
-	ip_iface = nm_device_get_ip_iface (self);
-
 	/* Make sure the interface is up before trying to do anything with it */
-	if (!nm_system_device_is_up_with_iface (ip_iface))
-		nm_system_device_set_up_down_with_iface (ip_iface, TRUE, NULL);
+	ifindex = nm_device_get_ip_ifindex (self);
+	if (!nm_system_iface_is_up (ifindex))
+		nm_system_iface_set_up (ifindex, TRUE, NULL);
 
 	req = nm_device_get_act_request (self);
 	connection = nm_act_request_get_connection (req);
@@ -1680,10 +1686,10 @@ dhcp6_start (NMDevice *self,
 	 */
 	err = nm_system_set_ip6_route (priv->ip_iface ? priv->ip_ifindex : priv->ifindex,
 	                               &dest, 8, NULL, 256, 0, RTPROT_BOOT, RT_TABLE_LOCAL, NULL);
-	if (err && (nl_get_errno () != EEXIST)) {
+	if (err && (err != -NLE_EXIST)) {
 		nm_log_err (LOGD_DEVICE | LOGD_IP6,
 		            "(%s): failed to add IPv6 multicast route: %s",
-		            priv->ip_iface ? priv->ip_iface : priv->iface, nl_geterror ());
+		            priv->ip_iface ? priv->ip_iface : priv->iface, nl_geterror (err));
 	}
 
 	s_ip6 = (NMSettingIP6Config *) nm_connection_get_setting (connection, NM_TYPE_SETTING_IP6_CONFIG);
@@ -2522,7 +2528,7 @@ start_sharing (NMDevice *self)
 	add_share_rule (req, "filter", "FORWARD --in-interface %s --out-interface %s --jump ACCEPT", ip_iface, ip_iface);
 	add_share_rule (req, "filter", "FORWARD --source %s/%s --in-interface %s --jump ACCEPT", str_addr, str_mask, ip_iface);
 	add_share_rule (req, "filter", "FORWARD --destination %s/%s --out-interface %s --match state --state ESTABLISHED,RELATED --jump ACCEPT", str_addr, str_mask, ip_iface);
-	add_share_rule (req, "nat", "POSTROUTING --source %s/%s --destination ! %s/%s --jump MASQUERADE", str_addr, str_mask, str_addr, str_mask);
+	add_share_rule (req, "nat", "POSTROUTING --source %s/%s ! --destination %s/%s --jump MASQUERADE", str_addr, str_mask, str_addr, str_mask);
 
 	nm_act_request_set_shared (req, TRUE);
 
@@ -2820,14 +2826,15 @@ nm_device_deactivate (NMDeviceInterface *device, NMDeviceStateReason reason)
 	NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
 	NMDeviceStateReason ignored = NM_DEVICE_STATE_REASON_NONE;
 	gboolean tried_ipv6 = FALSE;
+	int ifindex, family;
 
 	g_return_if_fail (self != NULL);
 
-	nm_log_info (LOGD_DEVICE, "(%s): deactivating device (reason: %d).",
-	             nm_device_get_iface (self), reason);
+	nm_log_info (LOGD_DEVICE, "(%s): deactivating device (reason '%s') [%d]",
+	             nm_device_get_iface (self), reason_to_string (reason), reason);
 
 	/* Save whether or not we tried IPv6 for later */
-	if (NM_DEVICE_GET_PRIVATE (self)->ip6_manager)
+	if (priv->ip6_manager || priv->ip6_config)
 		tried_ipv6 = TRUE;
 
 	/* Break the activation chain */
@@ -2857,8 +2864,10 @@ nm_device_deactivate (NMDeviceInterface *device, NMDeviceStateReason reason)
 	clear_act_request (self);
 
 	/* Take out any entries in the routing table and any IP address the device had. */
-	nm_system_device_flush_routes (self, tried_ipv6 ? AF_UNSPEC : AF_INET);
-	nm_system_device_flush_addresses (self, tried_ipv6 ? AF_UNSPEC : AF_INET);
+	ifindex = nm_device_get_ip_ifindex (self);
+	family = tried_ipv6 ? AF_UNSPEC : AF_INET;
+	nm_system_iface_flush_routes (ifindex, family);
+	nm_system_iface_flush_addresses (ifindex, family);
 	nm_device_update_ip4_address (self);	
 
 	/* Clean up nameservers and addresses */
@@ -3009,6 +3018,7 @@ nm_device_set_ip4_config (NMDevice *self,
 	gboolean success = TRUE;
 	NMIP4ConfigCompareFlags diff = NM_IP4_COMPARE_FLAG_ALL;
 	NMDnsManager *dns_mgr;
+	int ip_ifindex;
 
 	g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
 	g_return_val_if_fail (reason != NULL, FALSE);
@@ -3039,8 +3049,10 @@ nm_device_set_ip4_config (NMDevice *self,
 		/* Don't touch the device's actual IP config if the connection is
 		 * assumed when NM starts.
 		 */
-		if (!assumed)
-			success = nm_system_apply_ip4_config (ip_iface, new_config, nm_device_get_priority (self), diff);
+		if (!assumed) {
+			ip_ifindex = nm_device_get_ip_ifindex (self);
+			success = nm_system_apply_ip4_config (ip_ifindex, new_config, nm_device_get_priority (self), diff);
+		}
 
 		if (success || assumed) {
 			/* Export over D-Bus */
@@ -3112,12 +3124,14 @@ nm_device_set_ip6_config (NMDevice *self,
 	gboolean success = TRUE;
 	NMIP6ConfigCompareFlags diff = NM_IP6_COMPARE_FLAG_ALL;
 	NMDnsManager *dns_mgr;
+	int ip_ifindex;
 
 	g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
 	g_return_val_if_fail (reason != NULL, FALSE);
 
 	priv = NM_DEVICE_GET_PRIVATE (self);
 	ip_iface = nm_device_get_ip_iface (self);
+	ip_ifindex = nm_device_get_ip_ifindex (self);
 
 	old_config = priv->ip6_config;
 
@@ -3143,7 +3157,7 @@ nm_device_set_ip6_config (NMDevice *self,
 		 * assumed when NM starts.
 		 */
 		if (!assumed)
-			success = nm_system_apply_ip6_config (ip_iface, new_config, nm_device_get_priority (self), diff);
+			success = nm_system_apply_ip6_config (ip_ifindex, new_config, nm_device_get_priority (self), diff);
 
 		if (success || assumed) {
 			/* Export over D-Bus */
@@ -3395,7 +3409,7 @@ set_property (GObject *object, guint prop_id,
 		priv->iface = g_value_dup_string (value);
 		if (priv->iface) {
 			priv->ifindex = nm_netlink_iface_to_index (priv->iface);
-			if (priv->ifindex < 0) {
+			if (priv->ifindex <= 0) {
 				nm_log_warn (LOGD_HW, "(%s): failed to look up interface index", priv->iface);
 			}
 		}
diff --git a/src/nm-manager.c b/src/nm-manager.c
index f5782254..475344a5 100644
--- a/src/nm-manager.c
+++ b/src/nm-manager.c
@@ -196,7 +196,6 @@ typedef struct {
 } RadioState;
 
 typedef struct {
-	char *config_file;
 	char *state_file;
 
 	GSList *devices;
@@ -214,7 +213,8 @@ typedef struct {
 	gboolean net_enabled;
 
 	NMVPNManager *vpn_manager;
-	guint vpn_manager_id;
+	gulong vpn_manager_activated_id;
+	gulong vpn_manager_deactivated_id;
 
 	NMModemManager *modem_manager;
 	guint modem_added_id;
@@ -377,6 +377,18 @@ manager_sleeping (NMManager *self)
 }
 
 static void
+vpn_manager_connection_activated_cb (NMVPNManager *manager,
+                                     NMVPNConnection *vpn,
+                                     NMVPNConnectionState state,
+                                     NMVPNConnectionStateReason reason,
+                                     gpointer user_data)
+{
+	/* Update timestamp for the VPN connection */
+	nm_settings_connection_update_timestamp (NM_SETTINGS_CONNECTION (nm_vpn_connection_get_connection (vpn)),
+	                                         (guint64) time (NULL));
+}
+
+static void
 vpn_manager_connection_deactivated_cb (NMVPNManager *manager,
                                        NMVPNConnection *vpn,
                                        NMVPNConnectionState state,
@@ -1980,6 +1992,7 @@ nm_manager_activate_connection (NMManager *manager,
 		vpn_connection = nm_vpn_manager_activate_connection (priv->vpn_manager,
 		                                                     connection,
 		                                                     device,
+		                                                     nm_act_request_get_active_connection_path (parent_req),
 		                                                     TRUE,
 		                                                     sender_uid,
 		                                                     error);
@@ -3029,10 +3042,17 @@ out:
 	return DBUS_HANDLER_RESULT_HANDLED;
 }
 
+static NMManager *singleton = NULL;
+
+NMManager *
+nm_manager_get (void)
+{
+	g_assert (singleton);
+	return g_object_ref (singleton);
+}
+
 NMManager *
-nm_manager_get (NMSettings *settings,
-                const char *config_file,
-                const char *plugins,
+nm_manager_new (NMSettings *settings,
                 const char *state_file,
                 gboolean initial_net_enabled,
                 gboolean initial_wifi_enabled,
@@ -3040,16 +3060,14 @@ nm_manager_get (NMSettings *settings,
                 gboolean initial_wimax_enabled,
                 GError **error)
 {
-	static NMManager *singleton = NULL;
 	NMManagerPrivate *priv;
 	DBusGConnection *bus;
 	DBusConnection *dbus_connection;
 
-	if (singleton)
-		return g_object_ref (singleton);
-
 	g_assert (settings);
 
+	/* Can only be called once */
+	g_assert (singleton == NULL);
 	singleton = (NMManager *) g_object_new (NM_TYPE_MANAGER, NULL);
 	g_assert (singleton);
 
@@ -3068,7 +3086,6 @@ nm_manager_get (NMSettings *settings,
 
 	priv->settings = g_object_ref (settings);
 
-	priv->config_file = g_strdup (config_file);
 	priv->state_file = g_strdup (state_file);
 
 	priv->net_enabled = initial_net_enabled;
@@ -3155,13 +3172,16 @@ dispose (GObject *object)
 	}
 
 	g_free (priv->hostname);
-	g_free (priv->config_file);
 
 	g_object_unref (priv->settings);
 
-	if (priv->vpn_manager_id) {
-		g_source_remove (priv->vpn_manager_id);
-		priv->vpn_manager_id = 0;
+	if (priv->vpn_manager_activated_id) {
+		g_source_remove (priv->vpn_manager_activated_id);
+		priv->vpn_manager_activated_id = 0;
+	}
+	if (priv->vpn_manager_deactivated_id) {
+		g_source_remove (priv->vpn_manager_deactivated_id);
+		priv->vpn_manager_deactivated_id = 0;
 	}
 	g_object_unref (priv->vpn_manager);
 
@@ -3402,6 +3422,7 @@ static gboolean
 periodic_update_active_connection_timestamps (gpointer user_data)
 {
 	NMManager *manager = NM_MANAGER (user_data);
+	NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
 	GPtrArray *active;
 	int i;
 
@@ -3416,6 +3437,15 @@ periodic_update_active_connection_timestamps (gpointer user_data)
 		if (device && nm_device_get_state (device) == NM_DEVICE_STATE_ACTIVATED)
 			nm_settings_connection_update_timestamp (NM_SETTINGS_CONNECTION (nm_act_request_get_connection (req)),
 			                                         (guint64) time (NULL));
+		else {
+			/* The connection is probably VPN */
+			NMVPNConnection *vpn_con;
+
+			vpn_con = nm_vpn_manager_get_vpn_connection_for_active (priv->vpn_manager, active_path);
+			if (vpn_con && nm_vpn_connection_get_vpn_state (vpn_con) == NM_VPN_CONNECTION_STATE_ACTIVATED)
+				nm_settings_connection_update_timestamp (NM_SETTINGS_CONNECTION (nm_vpn_connection_get_connection (vpn_con)),
+				                                         (guint64) time (NULL));
+		}
 	}
 
 	return TRUE;
@@ -3426,7 +3456,7 @@ nm_manager_init (NMManager *manager)
 {
 	NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
 	DBusGConnection *g_connection;
-	guint id, i;
+	guint i;
 	GFile *file;
 
 	/* Initialize rfkill structures and states */
@@ -3471,9 +3501,10 @@ nm_manager_init (NMManager *manager)
 	                                           G_CALLBACK (modem_removed), manager);
 
 	priv->vpn_manager = nm_vpn_manager_get ();
-	id = g_signal_connect (G_OBJECT (priv->vpn_manager), "connection-deactivated",
-	                       G_CALLBACK (vpn_manager_connection_deactivated_cb), manager);
-	priv->vpn_manager_id = id;
+	priv->vpn_manager_activated_id = g_signal_connect (G_OBJECT (priv->vpn_manager), "connection-activated",
+	                                                   G_CALLBACK (vpn_manager_connection_activated_cb), manager);
+	priv->vpn_manager_deactivated_id = g_signal_connect (G_OBJECT (priv->vpn_manager), "connection-deactivated",
+	                                                   G_CALLBACK (vpn_manager_connection_deactivated_cb), manager);
 
 	g_connection = nm_dbus_manager_get_connection (priv->dbus_mgr);
 
diff --git a/src/nm-manager.h b/src/nm-manager.h
index 22bfca9e..b044971f 100644
--- a/src/nm-manager.h
+++ b/src/nm-manager.h
@@ -67,9 +67,8 @@ typedef struct {
 
 GType nm_manager_get_type (void);
 
-NMManager *nm_manager_get (NMSettings *settings,
-                           const char *config_file,
-                           const char *plugins,
+/* nm_manager_new() should only be used by main.c */
+NMManager *nm_manager_new (NMSettings *settings,
                            const char *state_file,
                            gboolean initial_net_enabled,
                            gboolean initial_wifi_enabled,
@@ -77,6 +76,8 @@ NMManager *nm_manager_get (NMSettings *settings,
 						   gboolean initial_wimax_enabled,
                            GError **error);
 
+NMManager *nm_manager_get (void);
+
 void nm_manager_start (NMManager *manager);
 
 /* Device handling */
diff --git a/src/nm-netlink-compat.c b/src/nm-netlink-compat.c
new file mode 100644
index 00000000..e91a1ff2
--- /dev/null
+++ b/src/nm-netlink-compat.c
@@ -0,0 +1,105 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * 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 of the License, 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) 2011 Caixa Magica Software.
+ */
+
+#include <config.h>
+#include <glib.h>
+
+#include "nm-netlink-compat.h"
+
+#ifndef HAVE_LIBNL1
+struct rtnl_nexthop *
+nm_netlink_get_nh (struct rtnl_route * route)
+{
+	int hops;
+
+	hops = rtnl_route_get_nnexthops (route);
+	g_return_val_if_fail(hops > 0, NULL);
+	return rtnl_route_nexthop_n (route, 0);
+}
+
+int
+rtnl_route_get_oif (struct rtnl_route * route)
+{
+	struct rtnl_nexthop * nh;
+
+	nh = nm_netlink_get_nh(route);
+	g_return_val_if_fail(nh, -NLE_OBJ_NOTFOUND);
+	return rtnl_route_nh_get_ifindex (nh);
+}
+
+int
+rtnl_route_set_oif (struct rtnl_route * route, int ifindex)
+{
+	struct rtnl_nexthop * nh;
+
+	nh = rtnl_route_nh_alloc();
+	rtnl_route_nh_set_ifindex(nh, ifindex);
+	rtnl_route_add_nexthop(route, nh);
+	return 0;
+}
+
+struct nl_addr *
+rtnl_route_get_gateway (struct rtnl_route * route)
+{
+	struct rtnl_nexthop * nh;
+
+	nh = nm_netlink_get_nh(route);
+	g_return_val_if_fail(nh, NULL);
+	return rtnl_route_nh_get_gateway(nh);
+}
+
+int
+rtnl_route_set_gateway (struct rtnl_route * route, struct nl_addr * gw_addr)
+{
+	struct rtnl_nexthop * nh;
+
+	nh = nm_netlink_get_nh(route);
+	g_return_val_if_fail(nh, -NLE_OBJ_NOTFOUND);
+
+	rtnl_route_nh_set_gateway(nh, gw_addr);
+	return 0;
+}
+
+int
+rtnl_route_get_dst_len(struct rtnl_route * rtnlroute)
+{
+	struct nl_addr * dst;
+
+	dst = rtnl_route_get_dst(rtnlroute);
+	return nl_addr_get_prefixlen(dst);
+}
+#endif
+
+#ifdef HAVE_LIBNL1
+int
+nl_compat_error (int err)
+{
+	err = abs (err);
+
+	if (err == EEXIST)
+		err = NLE_EXIST;
+	else if (err == ENOENT || err == ESRCH)
+		err = NLE_OBJ_NOTFOUND;
+	else if (err == ERANGE)
+		err = NLE_RANGE;
+
+	return -err;
+}
+#endif
diff --git a/src/nm-netlink-compat.h b/src/nm-netlink-compat.h
new file mode 100644
index 00000000..af21fb9a
--- /dev/null
+++ b/src/nm-netlink-compat.h
@@ -0,0 +1,207 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * 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 of the License, 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) 2011 Caixa Magica Software.
+ */
+
+#ifndef NM_NETLINK_COMPAT_H
+#define NM_NETLINK_COMPAT_H
+
+#include <errno.h>
+
+#include <netlink/netlink.h>
+#include <netlink/route/rtnl.h>
+#include <netlink/route/link.h>
+#include <netlink/route/route.h>
+#include <netlink/route/addr.h>
+
+
+#include <netlink/netlink.h>
+#include <netlink/cache.h>
+#include <netlink/utils.h>
+#include <netlink/data.h>
+#include <netlink/route/rtnl.h>
+#include <netlink/route/route.h>
+#include <netlink/route/link.h>
+#include <netlink/route/nexthop.h>
+
+#include <config.h>
+
+/* libnl-1 API compatibility for libnl-2/3*/
+#ifndef HAVE_LIBNL1
+
+struct rtnl_nexthop * nm_netlink_get_nh(struct rtnl_route *);
+int rtnl_route_get_oif(struct rtnl_route *);
+int rtnl_route_set_oif(struct rtnl_route *, int);
+int rtnl_route_set_gateway(struct rtnl_route *, struct nl_addr *);
+int rtnl_route_get_dst_len(struct rtnl_route *);
+struct nl_addr * rtnl_route_get_gateway(struct rtnl_route *);
+#endif
+
+/* libnl-2 API compatibility for libnl-3 */
+#ifdef HAVE_LIBNL3
+static inline int
+__rtnl_link_alloc_cache (struct nl_sock *h, struct nl_cache **cache)
+{
+       return rtnl_link_alloc_cache (h, AF_UNSPEC, cache);
+}
+#define rtnl_link_alloc_cache __rtnl_link_alloc_cache
+#endif
+
+
+/* libnl-2.0 compat functions */
+#ifdef HAVE_LIBNL2
+
+/* functions with similar prototypes */
+#define nlmsg_datalen nlmsg_len
+#endif
+
+
+/* libnl-1.0 compat functions */
+#ifdef HAVE_LIBNL1
+
+#define nl_sock nl_handle
+
+/* libnl-1.0 functions with similar prototypes */
+#define nl_socket_alloc nl_handle_alloc
+#define nl_socket_alloc_cb nl_handle_alloc_cb
+#define nl_socket_free nl_handle_destroy
+#define nl_socket_set_passcred nl_set_passcred
+#define nl_socket_disable_seq_check nl_disable_sequence_check
+#define rtnl_route_set_priority rtnl_route_set_prio
+#define nlmsg_datalen nlmsg_len
+
+/* auxiliary functions */
+int nl_compat_error (int);
+
+/* libnl-1.0 functions with modified prototypes in libnl-2/3*/
+static inline const char * 
+__nl_geterror (int err)
+{
+        /* err is set, can be parsed */
+        return nl_geterror ();
+}
+#define nl_geterror __nl_geterror
+
+static inline int
+__rtnl_addr_alloc_cache (struct nl_sock *h, struct nl_cache **cache)
+{
+	g_return_val_if_fail (cache != NULL, -EINVAL);
+
+	*cache = rtnl_addr_alloc_cache (h);
+	return *cache ? 0 : -ENOMEM;
+}
+#define rtnl_addr_alloc_cache __rtnl_addr_alloc_cache
+
+static inline int
+__rtnl_route_alloc_cache (struct nl_sock *h, int family, int flags, struct nl_cache **cache)
+{
+	g_return_val_if_fail (cache != NULL, -EINVAL);
+
+	*cache = rtnl_route_alloc_cache (h);
+	return *cache ? 0 : -ENOMEM;
+}
+#define rtnl_route_alloc_cache __rtnl_route_alloc_cache
+
+static inline int
+__rtnl_link_alloc_cache (struct nl_sock *h, struct nl_cache **cache)
+{
+	g_return_val_if_fail (cache != NULL, -EINVAL);
+
+	*cache = rtnl_link_alloc_cache (h);
+	return *cache ? 0 : -ENOMEM;
+}
+#define rtnl_link_alloc_cache __rtnl_link_alloc_cache
+
+static inline int
+__rtnl_route_get_metric (struct rtnl_route *route, int metric, unsigned int *value)
+{
+	g_return_val_if_fail (value != NULL, -EINVAL);
+
+	*value = rtnl_route_get_metric (route, metric);
+	return 0;
+}
+#define rtnl_route_get_metric __rtnl_route_get_metric
+
+static inline int
+__rtnl_addr_add (struct nl_sock *h, struct rtnl_addr *addr, int flags)
+{
+	return nl_compat_error (rtnl_addr_add (h, addr, flags));
+}
+#define rtnl_addr_add __rtnl_addr_add
+
+static inline int
+__rtnl_route_add (struct nl_sock *sk, struct rtnl_route *route, int flags)
+{
+	return nl_compat_error (rtnl_route_add (sk, route, flags));
+}
+#define rtnl_route_add __rtnl_route_add
+
+static inline int
+rtnl_route_delete (struct nl_sock *h, struct rtnl_route *route, int flags)
+{
+	return nl_compat_error (rtnl_route_del (h, route, flags));
+}
+#define rtnl_route_del rtnl_route_delete
+
+static inline int
+__rtnl_link_change (struct nl_sock *h, struct rtnl_link *old, struct rtnl_link *tmpl, int flags)
+{
+	return nl_compat_error (rtnl_link_change (h, old, tmpl,flags));
+}
+#define rtnl_link_change __rtnl_link_change
+
+static inline int
+__nl_cache_include (struct nl_cache *cache, struct nl_object *obj, change_func_t cb, void *data)
+{
+	return nl_cache_include (cache, obj, cb);
+}
+#define nl_cache_include __nl_cache_include
+
+#define NLE_SUCCESS             0
+#define NLE_FAILURE             1
+#define NLE_INTR                2
+#define NLE_BAD_SOCK            3
+#define NLE_AGAIN               4
+#define NLE_NOMEM               5
+#define NLE_EXIST               6
+#define NLE_INVAL               7
+#define NLE_RANGE               8
+#define NLE_MSGSIZE             9
+#define NLE_OPNOTSUPP           10
+#define NLE_AF_NOSUPPORT        11
+#define NLE_OBJ_NOTFOUND        12
+#define NLE_NOATTR              13
+#define NLE_MISSING_ATTR        14
+#define NLE_AF_MISMATCH         15
+#define NLE_SEQ_MISMATCH        16
+#define NLE_MSG_OVERFLOW        17
+#define NLE_MSG_TRUNC           18
+#define NLE_NOADDR              19
+#define NLE_SRCRT_NOSUPPORT     20
+#define NLE_MSG_TOOSHORT        21
+#define NLE_MSGTYPE_NOSUPPORT   22
+#define NLE_OBJ_MISMATCH        23
+#define NLE_NOCACHE             24
+#define NLE_BUSY                25
+#define NLE_PROTO_MISMATCH      26
+#define NLE_NOACCESS            27
+#define NLE_PERM                28
+#define NLE_PKTLOC_FILE         29
+#endif
+
+#endif /* NM_NETLINK_COMPAT_H */
diff --git a/src/nm-netlink-monitor.c b/src/nm-netlink-monitor.c
index 13b3ab98..9b8dac5c 100644
--- a/src/nm-netlink-monitor.c
+++ b/src/nm-netlink-monitor.c
@@ -45,6 +45,7 @@
 #include <glib.h>
 #include <glib/gi18n.h>
 
+#include "nm-netlink-compat.h"
 #include "nm-netlink-monitor.h"
 #include "nm-logging.h"
 
@@ -58,12 +59,12 @@
 
 typedef struct {
 	/* Async event listener connection */
-	struct nl_handle *nlh_event;
+	struct nl_sock *nlh_event;
 	GIOChannel *	  io_channel;
 	guint             event_id;
 
 	/* Sync/blocking request/response connection */
-	struct nl_handle *nlh_sync;
+	struct nl_sock *nlh_sync;
 	struct nl_cache * link_cache;
 
 	guint request_status_id;
@@ -98,7 +99,7 @@ link_msg_handler (struct nl_object *obj, void *arg)
 		error = g_error_new (NM_NETLINK_MONITOR_ERROR,
 		                     NM_NETLINK_MONITOR_ERROR_BAD_ALLOC,
 		                     _("error processing netlink message: %s"),
-		                     nl_geterror ());
+		                     nl_geterror (ENOMEM));
 		g_signal_emit (self, signals[ERROR], 0, error);
 		g_error_free (error);
 		return;
@@ -130,7 +131,7 @@ link_msg_handler (struct nl_object *obj, void *arg)
 static int
 event_msg_recv (struct nl_msg *msg, void *arg)
 {
-	struct nl_handle *nlh = arg;
+	struct nl_sock *nlh = arg;
 	struct nlmsghdr *hdr = nlmsg_hdr (msg);
 	struct ucred *creds = nlmsg_get_creds (msg);
 	const struct sockaddr_nl *snl;
@@ -195,6 +196,7 @@ event_handler (GIOChannel *channel,
 	NMNetlinkMonitor *self = (NMNetlinkMonitor *) user_data;
 	NMNetlinkMonitorPrivate *priv;
 	GError *error = NULL;
+	int err;
 
 	g_return_val_if_fail (NM_IS_NETLINK_MONITOR (self), TRUE);
 
@@ -225,11 +227,12 @@ event_handler (GIOChannel *channel,
 	g_return_val_if_fail (!(io_condition & ~EVENT_CONDITIONS), FALSE);
 
 	/* Process the netlink messages */
-	if (nl_recvmsgs_default (priv->nlh_event) < 0) {
+	err = nl_recvmsgs_default (priv->nlh_event);
+	if (err < 0) {
 		error = g_error_new (NM_NETLINK_MONITOR_ERROR,
 		                     NM_NETLINK_MONITOR_ERROR_PROCESSING_MESSAGE,
 		                     _("error processing netlink message: %s"),
-		                     nl_geterror ());
+		                     nl_geterror (err));
 		g_signal_emit (self, signals[ERROR], 0, error);
 		g_error_free (error);
 	}
@@ -238,32 +241,35 @@ event_handler (GIOChannel *channel,
 }
 
 static gboolean
-nlh_setup (struct nl_handle *nlh,
+nlh_setup (struct nl_sock *nlh,
            nl_recvmsg_msg_cb_t valid_func,
            gpointer cb_data,
            GError **error)
 {
+	int err;
+
 	nl_socket_modify_cb (nlh, NL_CB_MSG_IN, NL_CB_CUSTOM, event_msg_recv, cb_data);
 
 	if (valid_func)
 		nl_socket_modify_cb (nlh, NL_CB_VALID, NL_CB_CUSTOM, valid_func, cb_data);
 
-	if (nl_connect (nlh, NETLINK_ROUTE) < 0) {
+	err = nl_connect (nlh, NETLINK_ROUTE);
+	if (err < 0) {
 		g_set_error (error, NM_NETLINK_MONITOR_ERROR,
 		             NM_NETLINK_MONITOR_ERROR_NETLINK_CONNECT,
 		             _("unable to connect to netlink for monitoring link status: %s"),
-		             nl_geterror ());
+		             nl_geterror (err));
 		return FALSE;
 	}
 
 	/* Enable unix socket peer credentials which we use for verifying that the
 	 * sender of the message is actually the kernel.
 	 */
-	if (nl_set_passcred (nlh, 1) < 0) {
+	if (nl_socket_set_passcred (nlh, 1) < 0) {
 		g_set_error (error, NM_NETLINK_MONITOR_ERROR,
 		             NM_NETLINK_MONITOR_ERROR_NETLINK_CONNECT,
 		             _("unable to enable netlink handle credential passing: %s"),
-		             nl_geterror ());
+		             nl_geterror (err));
 		return FALSE;
 	}
 
@@ -276,27 +282,24 @@ event_connection_setup (NMNetlinkMonitor *self, GError **error)
 	NMNetlinkMonitorPrivate *priv = NM_NETLINK_MONITOR_GET_PRIVATE (self);
 	GError *channel_error = NULL;
 	GIOFlags channel_flags;
-	struct nl_cb *cb;
 	int fd;
 
 	g_return_val_if_fail (priv->io_channel == NULL, FALSE);
 
 	/* Set up the event listener connection */
-	cb = nl_cb_alloc (NL_CB_DEFAULT);
-	priv->nlh_event = nl_handle_alloc_cb (cb);
-	nl_cb_put (cb);
+	priv->nlh_event = nl_socket_alloc ();
 	if (!priv->nlh_event) {
 		g_set_error (error, NM_NETLINK_MONITOR_ERROR,
 		             NM_NETLINK_MONITOR_ERROR_NETLINK_ALLOC_HANDLE,
 		             _("unable to allocate netlink handle for monitoring link status: %s"),
-		             nl_geterror ());
+		             nl_geterror (ENOMEM));
 		goto error;
 	}
 
 	if (!nlh_setup (priv->nlh_event, event_msg_ready, self, error))
 		goto error;
 
-	nl_disable_sequence_check (priv->nlh_event);
+	nl_socket_disable_seq_check (priv->nlh_event);
 
 	/* Subscribe to the LINK group for internal carrier signals */
 	if (!nm_netlink_monitor_subscribe (self, RTNLGRP_LINK, error))
@@ -327,7 +330,7 @@ error:
 		nm_netlink_monitor_close_connection (self);
 
 	if (priv->nlh_event) {
-		nl_handle_destroy (priv->nlh_event);
+		nl_socket_free (priv->nlh_event);
 		priv->nlh_event = NULL;
 	}
 
@@ -338,20 +341,18 @@ static gboolean
 sync_connection_setup (NMNetlinkMonitor *self, GError **error)
 {
 	NMNetlinkMonitorPrivate *priv = NM_NETLINK_MONITOR_GET_PRIVATE (self);
-	struct nl_cb *cb;
 #ifdef LIBNL_NEEDS_ADDR_CACHING_WORKAROUND
 	struct nl_cache *addr_cache;
 #endif
+	int err;
 
 	/* Set up the event listener connection */
-	cb = nl_cb_alloc (NL_CB_DEFAULT);
-	priv->nlh_sync = nl_handle_alloc_cb (cb);
-	nl_cb_put (cb);
+	priv->nlh_sync = nl_socket_alloc ();
 	if (!priv->nlh_sync) {
 		g_set_error (error, NM_NETLINK_MONITOR_ERROR,
 		             NM_NETLINK_MONITOR_ERROR_NETLINK_ALLOC_HANDLE,
 		             _("unable to allocate netlink handle for monitoring link status: %s"),
-		             nl_geterror ());
+		             nl_geterror (ENOMEM));
 		goto error;
 	}
 
@@ -365,16 +366,18 @@ sync_connection_setup (NMNetlinkMonitor *self, GError **error)
 	 * result, most addresses will not compare as equal even to
 	 * themselves, busting caching.
 	 */
-	addr_cache = rtnl_addr_alloc_cache (priv->nlh_sync);
+	rtnl_addr_alloc_cache (priv->nlh_sync, &addr_cache);
+	g_warn_if_fail (addr_cache != NULL);
 	nl_cache_get_ops (addr_cache)->co_obj_ops->oo_id_attrs &= ~0x80;
 	nl_cache_free (addr_cache);
 #endif
 
-	if ((priv->link_cache = rtnl_link_alloc_cache (priv->nlh_sync)) == NULL) {
+	err = rtnl_link_alloc_cache (priv->nlh_sync, &priv->link_cache);
+	if (err < 0) {
 		g_set_error (error, NM_NETLINK_MONITOR_ERROR,
 		             NM_NETLINK_MONITOR_ERROR_NETLINK_ALLOC_LINK_CACHE,
 		             _("unable to allocate netlink link cache for monitoring link status: %s"),
-		             nl_geterror ());
+		             nl_geterror (err));
 		goto error;
 	}
 	nl_cache_mngt_provide (priv->link_cache);
@@ -388,7 +391,7 @@ error:
 	}
 
 	if (priv->nlh_sync) {
-		nl_handle_destroy (priv->nlh_sync);
+		nl_socket_free (priv->nlh_sync);
 		priv->nlh_sync = NULL;
 	}
 
@@ -483,7 +486,7 @@ gboolean
 nm_netlink_monitor_subscribe (NMNetlinkMonitor *self, int group, GError **error)
 {
 	NMNetlinkMonitorPrivate *priv;
-	int subs;
+	int subs, err;
 
 	g_return_val_if_fail (NM_IS_NETLINK_MONITOR (self), FALSE);
 
@@ -496,11 +499,12 @@ nm_netlink_monitor_subscribe (NMNetlinkMonitor *self, int group, GError **error)
 
 	subs = get_subs (self, group) + 1;
 	if (subs == 1) {
-		if (nl_socket_add_membership (priv->nlh_event, group) < 0) {
+		err = nl_socket_add_membership (priv->nlh_event, group);
+		if (err < 0) {
 			g_set_error (error, NM_NETLINK_MONITOR_ERROR,
 			             NM_NETLINK_MONITOR_ERROR_NETLINK_JOIN_GROUP,
 			             _("unable to join netlink group: %s"),
-			             nl_geterror ());
+			             nl_geterror (err));
 			return FALSE;
 		}
 	}
@@ -558,15 +562,17 @@ deferred_emit_carrier_state (gpointer user_data)
 {
 	NMNetlinkMonitor *self = NM_NETLINK_MONITOR (user_data);
 	NMNetlinkMonitorPrivate *priv = NM_NETLINK_MONITOR_GET_PRIVATE (self);
+	int err;
 
 	priv->request_status_id = 0;
 
 	/* Update the link cache with latest state, and if there are no errors
 	 * emit the link states for all the interfaces in the cache.
 	 */
-	if (nl_cache_refill (priv->nlh_sync, priv->link_cache)) {
-		nm_log_err (LOGD_HW, "error updating link cache: %s", nl_geterror ());
-	} else
+	err = nl_cache_refill (priv->nlh_sync, priv->link_cache);
+	if (err < 0)
+		nm_log_err (LOGD_HW, "error updating link cache: %s", nl_geterror (err));
+	else
 		nl_cache_foreach_filter (priv->link_cache, NULL, link_msg_handler, self);
 
 	return FALSE;
@@ -614,6 +620,7 @@ nm_netlink_monitor_get_flags_sync (NMNetlinkMonitor *self,
 	NMNetlinkMonitorPrivate *priv;
 	GetFlagsInfo info;
 	struct rtnl_link *filter;
+	int err;
 
 	g_return_val_if_fail (self != NULL, FALSE);
 	g_return_val_if_fail (NM_IS_NETLINK_MONITOR (self), FALSE);
@@ -622,12 +629,13 @@ nm_netlink_monitor_get_flags_sync (NMNetlinkMonitor *self,
 	priv = NM_NETLINK_MONITOR_GET_PRIVATE (self);
 
 	/* Update the link cache with the latest information */
-	if (nl_cache_refill (priv->nlh_sync, priv->link_cache)) {
+	err = nl_cache_refill (priv->nlh_sync, priv->link_cache);
+	if (err < 0) {
 		g_set_error (error,
 		             NM_NETLINK_MONITOR_ERROR,
 		             NM_NETLINK_MONITOR_ERROR_LINK_CACHE_UPDATE,
 		             _("error updating link cache: %s"),
-		             nl_geterror ());
+		             nl_geterror (err));
 		return FALSE;
 	}
 
@@ -640,7 +648,7 @@ nm_netlink_monitor_get_flags_sync (NMNetlinkMonitor *self,
 		             NM_NETLINK_MONITOR_ERROR,
 		             NM_NETLINK_MONITOR_ERROR_LINK_CACHE_UPDATE,
 		             _("error updating link cache: %s"),
-		             nl_geterror ());
+		             nl_geterror (err));
 		return FALSE;
 	}
 
@@ -651,7 +659,7 @@ nm_netlink_monitor_get_flags_sync (NMNetlinkMonitor *self,
 		             NM_NETLINK_MONITOR_ERROR,
 		             NM_NETLINK_MONITOR_ERROR_BAD_ALLOC,
 		             _("error processing netlink message: %s"),
-		             nl_geterror ());
+		             nl_geterror (err));
 		return FALSE;
 	}
 	rtnl_link_set_ifindex (filter, ifindex);
@@ -678,11 +686,11 @@ nm_netlink_monitor_get_flags_sync (NMNetlinkMonitor *self,
 
 /***************************************************************/
 
-struct nl_handle *
+struct nl_sock *
 nm_netlink_get_default_handle (void)
 {
 	NMNetlinkMonitor *self;
-	struct nl_handle *nlh;
+	struct nl_sock *nlh;
 
 	self = nm_netlink_monitor_get ();
 	nlh = NM_NETLINK_MONITOR_GET_PRIVATE (self)->nlh_sync;
@@ -710,6 +718,13 @@ nm_netlink_iface_to_index (const char *iface)
 	return idx;
 }
 
+/**
+ * nm_netlink_index_to_iface:
+ * @idx: kernel interface index
+ *
+ * Returns: the device name corresponding to the kernel interface index; caller
+ * owns returned value and must free it when it is no longer required
+ **/
 #define MAX_IFACE_LEN 33
 char *
 nm_netlink_index_to_iface (int idx)
@@ -728,6 +743,7 @@ nm_netlink_index_to_iface (int idx)
 
 	nl_cache_refill (priv->nlh_sync, priv->link_cache);
 	if (!rtnl_link_i2name (priv->link_cache, idx, buf, MAX_IFACE_LEN - 1)) {
+		nm_log_warn (LOGD_HW, "(%d) failed to find interface name for index", idx);
 		g_free (buf);
 		buf = NULL;
 	}
@@ -796,12 +812,12 @@ finalize (GObject *object)
 	}
 
 	if (priv->nlh_event) {
-		nl_handle_destroy (priv->nlh_event);
+		nl_socket_free (priv->nlh_event);
 		priv->nlh_event = NULL;
 	}
 
 	if (priv->nlh_sync) {
-		nl_handle_destroy (priv->nlh_sync);
+		nl_socket_free (priv->nlh_sync);
 		priv->nlh_sync = NULL;
 	}
 
diff --git a/src/nm-netlink-monitor.h b/src/nm-netlink-monitor.h
index 8b57a312..5c1fa339 100644
--- a/src/nm-netlink-monitor.h
+++ b/src/nm-netlink-monitor.h
@@ -90,10 +90,12 @@ gboolean          nm_netlink_monitor_get_flags_sync   (NMNetlinkMonitor *monitor
                                                        guint32 *ifflags,
                                                        GError **error);
 
+#include "nm-netlink-compat.h"
+
 /* Generic utility functions */
 int               nm_netlink_iface_to_index     (const char *iface);
 char *            nm_netlink_index_to_iface     (int idx);
 struct rtnl_link *nm_netlink_index_to_rtnl_link (int idx);
-struct nl_handle *nm_netlink_get_default_handle (void);
+struct nl_sock *  nm_netlink_get_default_handle (void);
 
 #endif  /* NM_NETLINK_MONITOR_H */
diff --git a/src/nm-netlink-utils.c b/src/nm-netlink-utils.c
new file mode 100644
index 00000000..4a62aa55
--- /dev/null
+++ b/src/nm-netlink-utils.c
@@ -0,0 +1,426 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * 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 of the License, 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) 2011 Red Hat, Inc.
+ */
+
+#include "logging/nm-logging.h"
+#include "nm-netlink-utils.h"
+#include "nm-netlink-monitor.h"
+#include "nm-netlink-compat.h"
+
+#include <arpa/inet.h>
+#include <netinet/in.h>
+#include <netlink/netlink.h>
+#include <netlink/addr.h>
+#include <netlink/route/addr.h>
+
+#include <errno.h>
+
+typedef struct {
+	int ifindex;
+	int family;
+	void *addr;
+	int addrlen;
+	int prefix;
+	gboolean found;
+} FindAddrInfo;
+
+static void
+find_one_address (struct nl_object *object, void *user_data)
+{
+	FindAddrInfo *info = user_data;
+	struct rtnl_addr *addr = (struct rtnl_addr *) object;
+	struct nl_addr *local;
+	void *binaddr;
+
+	if (info->found)
+		return;
+
+	if (rtnl_addr_get_ifindex (addr) != info->ifindex)
+		return;
+	if (rtnl_addr_get_family (addr) != info->family)
+		return;
+
+	if (rtnl_addr_get_prefixlen (addr) != info->prefix)
+		return;
+
+	local = rtnl_addr_get_local (addr);
+	if (nl_addr_get_family (local) != info->family)
+		return;
+	if (nl_addr_get_len (local) != info->addrlen)
+		return;
+	binaddr = nl_addr_get_binary_addr (local);
+	if (binaddr) {
+		if (memcmp (binaddr, info->addr, info->addrlen) == 0)
+			info->found = TRUE; /* Yay, found it */
+	}
+}
+
+/**
+ * nm_netlink_find_address:
+ * @ifindex: interface index
+ * @family: address family, either AF_INET or AF_INET6
+ * @addr: binary address, either struct in_addr* or struct in6_addr*
+ * @prefix: prefix length
+ *
+ * Searches for a matching address on the given interface.
+ *
+ * Returns: %TRUE if the given address was found on the interface, %FALSE if it
+ * was not found or an error occurred.
+ **/
+gboolean
+nm_netlink_find_address (int ifindex,
+                         int family,
+                         void *addr,  /* struct in_addr or struct in6_addr */
+                         int prefix)
+{
+	struct nl_sock *nlh = NULL;
+	struct nl_cache *cache = NULL;
+	FindAddrInfo info;
+
+	g_return_val_if_fail (ifindex > 0, FALSE);
+	g_return_val_if_fail (family == AF_INET || family == AF_INET6, FALSE);
+	g_return_val_if_fail (addr != NULL, FALSE);
+	g_return_val_if_fail (prefix >= 0, FALSE);
+
+	memset (&info, 0, sizeof (info));
+	info.ifindex = ifindex;
+	info.family = family;
+	info.prefix = prefix;
+	info.addr = addr;
+	if (family == AF_INET)
+		info.addrlen = sizeof (struct in_addr);
+	else if (family == AF_INET6)
+		info.addrlen = sizeof (struct in6_addr);
+	else
+		g_assert_not_reached ();
+
+	nlh = nm_netlink_get_default_handle ();
+	if (nlh) {
+		rtnl_addr_alloc_cache(nlh, &cache);
+		if (cache) {
+			nl_cache_mngt_provide (cache);
+			nl_cache_foreach (cache, find_one_address, &info);
+			nl_cache_free (cache);
+		}
+	}
+	return info.found;
+}
+
+struct rtnl_route *
+nm_netlink_route_new (int ifindex,
+                      int family,
+                      int mss,
+                      ...)
+{
+	va_list var_args;
+	struct rtnl_route *route;
+	NmNlProp prop = NMNL_PROP_INVALID;
+	int value;
+
+	route = rtnl_route_alloc ();
+	g_return_val_if_fail (route != NULL, NULL);
+
+	if (ifindex >= 0)
+		rtnl_route_set_oif (route, ifindex);
+	if (family != AF_UNSPEC)
+		rtnl_route_set_family (route, family);
+	if (mss > 0)
+		rtnl_route_set_metric (route, RTAX_ADVMSS, mss);
+
+	va_start (var_args, mss);
+	prop = va_arg (var_args, NmNlProp);
+	while (prop != NMNL_PROP_INVALID) {
+		value = va_arg (var_args, int);
+
+		if (prop == NMNL_PROP_PROT && value != RTPROT_UNSPEC)
+			rtnl_route_set_protocol (route, value);
+		else if (prop == NMNL_PROP_TABLE && value != RT_TABLE_UNSPEC)
+			rtnl_route_set_table (route, value);
+		else if (prop == NMNL_PROP_SCOPE && value != RT_SCOPE_NOWHERE)
+			rtnl_route_set_scope (route, value);
+		else if (prop == NMNL_PROP_PRIO && value > 0)
+			rtnl_route_set_priority (route, value);
+
+		prop = va_arg (var_args, NmNlProp);
+	}
+	va_end (var_args);
+
+	return route;
+}
+
+/**
+ * nm_netlink_route_add:
+ * @route: the route to add
+ *
+ * Returns: zero if succeeded or the netlink error otherwise.
+ **/
+int nm_netlink_route_add(struct rtnl_route * route,
+			 int family,
+			 const void * dest, /* in_addr or in6_addr */
+			 int dest_prefix,
+			 const void * gateway, /* in_addr or in6_addr */
+			 int flags)
+{
+	struct nl_sock * sk;
+	struct nl_addr * dest_addr, * gw_addr;
+	void * tmp_addr;
+	int addrlen, err, log;
+
+	if(family == AF_INET) {
+		addrlen = sizeof(struct in_addr);
+		log = LOGD_IP4;
+	}
+	else if (family == AF_INET6) {
+		addrlen = sizeof(struct in6_addr);
+		log = LOGD_IP6;
+	} else {
+		g_assert_not_reached ();
+	}
+
+
+	sk = nm_netlink_get_default_handle();
+
+	/* Build up the destination address */
+	if (dest) {
+		/* Copy to preserve const */
+		tmp_addr = g_malloc0(addrlen);
+		memcpy(tmp_addr, dest, addrlen);
+
+		dest_addr = nl_addr_build (family, tmp_addr, addrlen);
+		g_free(tmp_addr);
+
+		g_return_val_if_fail (dest_addr != NULL, -NLE_INVAL);
+		nl_addr_set_prefixlen (dest_addr, dest_prefix);
+
+		rtnl_route_set_dst (route, dest_addr);
+		nl_addr_put (dest_addr);
+	}
+
+	/* Build up the gateway address */
+	if (gateway) {
+		tmp_addr = g_malloc0(addrlen);
+		memcpy(tmp_addr, gateway, addrlen);
+
+		gw_addr = nl_addr_build (family, tmp_addr, addrlen);
+		g_free(tmp_addr);
+
+		if (gw_addr) {
+			nl_addr_set_prefixlen (gw_addr, 0);
+			rtnl_route_set_gateway (route, gw_addr);
+			rtnl_route_set_scope (route, RT_SCOPE_UNIVERSE);
+			nl_addr_put(gw_addr);
+		} else {
+			nm_log_err (LOGD_DEVICE | log, "Invalid gateway");
+		}
+	}
+
+	err = rtnl_route_add (sk, route, flags);
+
+	/* LIBNL Bug: Aliased ESRCH */
+	if (err == -NLE_FAILURE)
+		err = -NLE_OBJ_NOTFOUND;
+
+	if (err)
+		nm_log_warn (LOGD_DEVICE | log,
+                             "Failed to add route %s",
+                             nl_geterror(err));
+
+	return err;
+}
+
+/**
+ * nm_netlink_route_delete:
+ * @route: the route to delete
+ *
+ * Returns: %TRUE if the request was successful, %FALSE if it failed
+ **/
+gboolean
+nm_netlink_route_delete (struct rtnl_route *route)
+{
+	struct nl_sock *nlh;
+	int err = 0;
+
+	g_return_val_if_fail (route != NULL, FALSE);
+
+	nlh = nm_netlink_get_default_handle ();
+	err = rtnl_route_delete (nlh, route, 0);
+
+	if (err)
+		nm_log_dbg (LOGD_IP4 | LOGD_IP6, "%s (%d)", nl_geterror(err), err);
+
+	/* Workaround libnl BUG: ESRCH is aliased to generic NLE_FAILURE
+	 * See: http://git.kernel.org/?p=libs/netlink/libnl.git;a=commit;h=7e9d5f */
+	if (err == -NLE_FAILURE)
+		err = -NLE_OBJ_NOTFOUND;
+
+	return (err && (err != -NLE_OBJ_NOTFOUND) && (err != -NLE_RANGE) ) ? FALSE : TRUE;
+}
+
+
+static void
+dump_route (struct rtnl_route *route)
+{
+	char buf6[INET6_ADDRSTRLEN];
+	char buf4[INET_ADDRSTRLEN];
+	struct nl_addr *nl;
+	struct in6_addr *addr6 = NULL;
+	struct in_addr *addr4 = NULL;
+	int prefixlen = 0;
+	const char *sf = "UNSPEC";
+	int family = rtnl_route_get_family (route);
+	guint32 log_level = LOGD_IP4 | LOGD_IP6;
+
+	memset (buf6, 0, sizeof (buf6));
+	memset (buf4, 0, sizeof (buf4));
+	nl = rtnl_route_get_dst (route);
+	if (nl) {
+		if (nl_addr_get_family (nl) == AF_INET) {
+			addr4 = nl_addr_get_binary_addr (nl);
+			if (addr4)
+				inet_ntop (AF_INET, addr4, &buf4[0], sizeof (buf4));
+		} else if (nl_addr_get_family (nl) == AF_INET6) {
+			addr6 = nl_addr_get_binary_addr (nl);
+			if (addr6)
+				inet_ntop (AF_INET6, addr6, &buf6[0], sizeof (buf6));
+		}
+		prefixlen = nl_addr_get_prefixlen (nl);
+	}
+
+	if (family == AF_INET) {
+		sf = "INET";
+		log_level = LOGD_IP4;
+	} else if (family == AF_INET6) {
+		sf = "INET6";
+		log_level = LOGD_IP6;
+	}
+
+	nm_log_dbg (log_level, "  route idx %d family %s (%d) addr %s/%d",
+	            rtnl_route_get_oif (route),
+	            sf, family,
+	            strlen (buf4) ? buf4 : (strlen (buf6) ? buf6 : "<unknown>"),
+	            prefixlen);
+}
+
+
+typedef struct {
+	int ifindex;
+	int family;
+	int scope;
+	gboolean ignore_inet6_ll_mc;
+	char *iface;
+	NlRouteForeachFunc callback;
+	gpointer user_data;
+	struct rtnl_route *out_route;
+} ForeachRouteInfo;
+
+static void
+foreach_route_cb (struct nl_object *object, void *user_data)
+{
+	ForeachRouteInfo *info = user_data;
+	struct rtnl_route *route = (struct rtnl_route *) object;
+	struct nl_addr *dst;
+
+	if (info->out_route)
+		return;
+
+	if (nm_logging_level_enabled (LOGL_DEBUG))
+		dump_route (route);
+
+	if (   info->ifindex >= 0
+	    && rtnl_route_get_oif (route) != info->ifindex)
+		return;
+
+	if (   info->scope != RT_SCOPE_UNIVERSE
+	    && rtnl_route_get_scope (route) != info->scope)
+		return;
+
+	if (   info->family != AF_UNSPEC
+	    && rtnl_route_get_family (route) != info->family)
+		return;
+
+	dst = rtnl_route_get_dst (route);
+
+	/* Check for IPv6 LL and MC routes that might need to be ignored */
+	if (   (info->family == AF_INET6 || info->family == AF_UNSPEC)
+	    && (rtnl_route_get_family (route) == AF_INET6)) {
+		struct in6_addr *addr = NULL;
+
+		if (dst)
+			addr = nl_addr_get_binary_addr (dst);
+		if (addr) {
+			if (   IN6_IS_ADDR_LINKLOCAL (addr)
+			    || IN6_IS_ADDR_MC_LINKLOCAL (addr)
+			    || (IN6_IS_ADDR_MULTICAST (addr) && (nl_addr_get_prefixlen (dst) == 8)))
+				return;
+		}
+	}
+
+	info->out_route = info->callback (route, dst, info->iface, info->user_data);
+	if (info->out_route) {
+		/* Ref the route so it sticks around after the cache is cleared */
+		rtnl_route_get (info->out_route);
+	}
+}
+
+/**
+ * nm_netlink_foreach_route:
+ * @ifindex: the interface index to filter routes for
+ * @family: the address family to filter routes for
+ * @scope: route scope, eg RT_SCOPE_LINK
+ * @ignore_inet6_ll_mc: if %TRUE ignore IPv6 link-local and multi-cast routes
+ * @callback: function called when a route matches the filter
+ * @user_data: data passed to @callback
+ *
+ * Filters each route in the routing table against the given @ifindex and
+ * @family (if given) and calls @callback for each matching route.
+ *
+ * Returns: a route if @callback returned one; the caller must dispose of the
+ * route using rtnl_route_put() when it is no longer required.
+ **/
+struct rtnl_route *
+nm_netlink_foreach_route (int ifindex,
+                          int family,
+                          int scope,
+                          gboolean ignore_inet6_ll_mc,
+                          NlRouteForeachFunc callback,
+                          gpointer user_data)
+{
+	struct nl_cache *cache;
+	ForeachRouteInfo info;
+
+	memset (&info, 0, sizeof (info));
+	info.ifindex = ifindex;
+	info.family = family;
+	info.scope = scope;
+	info.ignore_inet6_ll_mc = ignore_inet6_ll_mc;
+	info.callback = callback;
+	info.user_data = user_data;
+	info.iface = nm_netlink_index_to_iface (ifindex);
+
+	rtnl_route_alloc_cache (nm_netlink_get_default_handle (), family, NL_AUTO_PROVIDE, &cache);
+	g_warn_if_fail (cache != NULL);
+	if (cache) {
+		nl_cache_foreach (cache, foreach_route_cb, &info);
+		nl_cache_free (cache);
+	}
+	g_free (info.iface);
+	return info.out_route;
+}
+
+
diff --git a/src/nm-netlink-utils.h b/src/nm-netlink-utils.h
new file mode 100644
index 00000000..c6c452a0
--- /dev/null
+++ b/src/nm-netlink-utils.h
@@ -0,0 +1,80 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * 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 of the License, 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) 2011 Red Hat, Inc.
+ */
+
+#ifndef NM_NETLINK_UTILS_H
+#define NM_NETLINK_UTILS_H
+
+#include <glib.h>
+#include <netlink/route/rtnl.h>
+#include <netlink/route/route.h>
+
+gboolean nm_netlink_find_address (int ifindex,
+                                  int family,
+                                  void *addr,  /* struct in_addr or struct in6_addr */
+                                  int prefix_);
+
+typedef enum {
+	NMNL_PROP_INVALID = 0,
+	NMNL_PROP_PROT,
+	NMNL_PROP_SCOPE,
+	NMNL_PROP_TABLE,
+	NMNL_PROP_PRIO,
+} NmNlProp;
+
+struct rtnl_route * nm_netlink_route_new (int ifindex,
+                                          int family,
+                                          int mss,
+                                          ...) __attribute__((__sentinel__));
+
+int nm_netlink_route_add (struct rtnl_route *route,
+                          int family,
+                          const void * dst, /* struct in_addr or struct in6_addr */
+                          int prefix,
+                          const void * gw, /* struct in_addr or struct in6_addr */
+                          int flags);
+
+gboolean nm_netlink_route_delete (struct rtnl_route *route);
+
+/**
+ * NlRouteForeachFunc:
+ * @route: the route being processed
+ * @dst: the route's destination address
+ * @iface: the interface name of the index passed to nm_netlink_foreach_route()
+ * @in_family: the address family passed to nm_netlink_foreach_route()
+ * @user_data: the user data pointer passed to nm_netlink_foreach_route()
+ *
+ * Returns: a route to return to the caller of nm_netlink_foreach_route() which
+ * terminates routing table iteration, or NULL to continue iterating the
+ * routing table.
+ **/
+typedef struct rtnl_route * (*NlRouteForeachFunc) (struct rtnl_route *route,
+                                                   struct nl_addr *dst,
+                                                   const char *iface,
+                                                   gpointer user_data);
+
+struct rtnl_route * nm_netlink_foreach_route (int ifindex,
+                                              int family,
+                                              int scope,
+                                              gboolean ignore_inet6_ll_mc,
+                                              NlRouteForeachFunc callback,
+                                              gpointer user_data);
+
+#endif  /* NM_NETLINK_MONITOR_H */
+
diff --git a/src/nm-policy.c b/src/nm-policy.c
index a42a0fa9..5c4059e1 100644
--- a/src/nm-policy.c
+++ b/src/nm-policy.c
@@ -322,7 +322,7 @@ update_system_hostname (NMPolicy *policy, NMDevice *best4, NMDevice *best6)
 		/* Grab a hostname out of the device's DHCP4 config */
 		dhcp4_config = nm_device_get_dhcp4_config (best4);
 		if (dhcp4_config) {
-			p = dhcp_hostname = nm_dhcp4_config_get_option (dhcp4_config, "new_host_name");
+			p = dhcp_hostname = nm_dhcp4_config_get_option (dhcp4_config, "host_name");
 			if (dhcp_hostname && strlen (dhcp_hostname)) {
 				/* Sanity check; strip leading spaces */
 				while (*p) {
@@ -341,7 +341,7 @@ update_system_hostname (NMPolicy *policy, NMDevice *best4, NMDevice *best6)
 		/* Grab a hostname out of the device's DHCP6 config */
 		dhcp6_config = nm_device_get_dhcp6_config (best6);
 		if (dhcp6_config) {
-			p = dhcp_hostname = nm_dhcp6_config_get_option (dhcp6_config, "new_host_name");
+			p = dhcp_hostname = nm_dhcp6_config_get_option (dhcp6_config, "host_name");
 			if (dhcp_hostname && strlen (dhcp_hostname)) {
 				/* Sanity check; strip leading spaces */
 				while (*p) {
@@ -425,6 +425,7 @@ update_ip4_routing_and_dns (NMPolicy *policy, gboolean force_update)
 	NMConnection *connection = NULL;
 	NMSettingConnection *s_con = NULL;
 	const char *connection_id;
+	int ip_ifindex = 0;
 
 	best = get_best_ip4_device (policy->manager, &best_req);
 	if (!best)
@@ -461,17 +462,18 @@ update_ip4_routing_and_dns (NMPolicy *policy, gboolean force_update)
 			NMDevice *parent;
 
 			ip_iface = nm_vpn_connection_get_ip_iface (candidate);
+			ip_ifindex = nm_vpn_connection_get_ip_ifindex (candidate);
 			connection = nm_vpn_connection_get_connection (candidate);
 			addr = nm_ip4_config_get_address (ip4_config, 0);
 
 			parent = nm_vpn_connection_get_parent_device (candidate);
 			parent_ip4 = nm_device_get_ip4_config (parent);
 
-			nm_system_replace_default_ip4_route_vpn (ip_iface,
+			nm_system_replace_default_ip4_route_vpn (ip_ifindex,
 			                                         nm_ip4_address_get_gateway (addr),
 			                                         nm_vpn_connection_get_ip4_internal_gateway (candidate),
 			                                         nm_ip4_config_get_mss (ip4_config),
-			                                         nm_device_get_ip_iface (parent),
+			                                         nm_device_get_ip_ifindex (parent),
 			                                         nm_ip4_config_get_mss (parent_ip4));
 
 			dns_type = NM_DNS_IP_CONFIG_TYPE_VPN;
@@ -483,12 +485,14 @@ update_ip4_routing_and_dns (NMPolicy *policy, gboolean force_update)
 	if (!ip_iface || !ip4_config) {
 		connection = nm_act_request_get_connection (best_req);
 		ip_iface = nm_device_get_ip_iface (best);
+		ip_ifindex = nm_device_get_ip_ifindex (best);
 		ip4_config = nm_device_get_ip4_config (best);
 		g_assert (ip4_config);
 		addr = nm_ip4_config_get_address (ip4_config, 0);
 
-		nm_system_replace_default_ip4_route (ip_iface, nm_ip4_address_get_gateway (addr), nm_ip4_config_get_mss (ip4_config));
-
+		nm_system_replace_default_ip4_route (ip_ifindex,
+		                                     nm_ip4_address_get_gateway (addr),
+		                                     nm_ip4_config_get_mss (ip4_config));
 		dns_type = NM_DNS_IP_CONFIG_TYPE_BEST_DEVICE;
 	}
 
@@ -551,6 +555,7 @@ update_ip6_routing_and_dns (NMPolicy *policy, gboolean force_update)
 	NMIP6Config *ip6_config = NULL;
 	NMIP6Address *addr;
 	const char *ip_iface = NULL;
+	int ip_ifindex = -1;
 	NMConnection *connection = NULL;
 	NMSettingConnection *s_con = NULL;
 	const char *connection_id;
@@ -608,11 +613,12 @@ update_ip6_routing_and_dns (NMPolicy *policy, gboolean force_update)
 	if (!ip_iface || !ip6_config) {
 		connection = nm_act_request_get_connection (best_req);
 		ip_iface = nm_device_get_ip_iface (best);
+		ip_ifindex = nm_device_get_ip_ifindex (best);
 		ip6_config = nm_device_get_ip6_config (best);
 		g_assert (ip6_config);
 		addr = nm_ip6_config_get_address (ip6_config, 0);
 
-		nm_system_replace_default_ip6_route (ip_iface, nm_ip6_address_get_gateway (addr));
+		nm_system_replace_default_ip6_route (ip_ifindex, nm_ip6_address_get_gateway (addr));
 
 		dns_type = NM_DNS_IP_CONFIG_TYPE_BEST_DEVICE;
 	}
diff --git a/src/nm-system.c b/src/nm-system.c
index 88db6596..62ab8b93 100644
--- a/src/nm-system.c
+++ b/src/nm-system.c
@@ -40,7 +40,7 @@
 #include <netdb.h>
 #include <glib.h>
 #include <ctype.h>
-#include <net/if.h>
+#include <linux/if.h>
 
 #include "nm-system.h"
 #include "nm-device.h"
@@ -48,9 +48,8 @@
 #include "nm-utils.h"
 #include "nm-logging.h"
 #include "nm-netlink-monitor.h"
-
-/* Because of a bug in libnl, rtnl.h should be included before route.h */
-#include <netlink/route/rtnl.h>
+#include "nm-netlink-utils.h"
+#include "nm-netlink-compat.h"
 
 #include <netlink/route/addr.h>
 #include <netlink/route/route.h>
@@ -58,9 +57,9 @@
 #include <netlink/utils.h>
 #include <netlink/route/link.h>
 
-static void nm_system_device_set_priority (const char *iface,
-								   NMIP4Config *config,
-								   int priority);
+static void nm_system_device_set_priority (int ifindex,
+                                           NMIP4Config *config,
+                                           int priority);
 
 static gboolean
 ip4_dest_in_same_subnet (NMIP4Config *config, guint32 dest, guint32 dest_prefix)
@@ -87,99 +86,54 @@ ip4_dest_in_same_subnet (NMIP4Config *config, guint32 dest, guint32 dest_prefix)
 }
 
 static struct rtnl_route *
-create_route (int iface_idx, int mss)
-{
-	struct rtnl_route *route;
-
-	route = rtnl_route_alloc ();
-	if (route) {
-		rtnl_route_set_oif (route, iface_idx);
-
-		if (mss && rtnl_route_set_metric (route, RTAX_ADVMSS, mss) < 0) {
-			nm_log_warn (LOGD_DEVICE, "could not set mss");
-		}
-	} else
-		nm_log_err (LOGD_DEVICE, "could not allocate route");
-
-	return route;
-}
-
-static struct rtnl_route *
-nm_system_device_set_ip4_route (const char *iface, 
+nm_system_device_set_ip4_route (int ifindex, 
                                 guint32 ip4_dest,
                                 guint32 ip4_prefix,
                                 guint32 ip4_gateway,
                                 guint32 metric,
                                 int mss)
 {
-	struct nl_handle *nlh;
+	struct nl_sock *nlh;
 	struct rtnl_route *route;
-	struct nl_addr *dest_addr;
-	struct nl_addr *gw_addr = NULL;
-	int err, iface_idx;
+	int err;
+
+	g_return_val_if_fail (ifindex > 0, NULL);
 
 	nlh = nm_netlink_get_default_handle ();
 	g_return_val_if_fail (nlh != NULL, NULL);
 
-	iface_idx = nm_netlink_iface_to_index (iface);
-	g_return_val_if_fail (iface_idx >= 0, NULL);
-
-	route = create_route (iface_idx, mss);
+	route = nm_netlink_route_new (ifindex, AF_INET, mss,
+	                              NMNL_PROP_PRIO, metric,
+	                              NULL);
 	g_return_val_if_fail (route != NULL, NULL);
 
-	/* Destination */
-	dest_addr = nl_addr_build (AF_INET, &ip4_dest, sizeof (ip4_dest));
-	g_return_val_if_fail (dest_addr != NULL, NULL);
-	nl_addr_set_prefixlen (dest_addr, (int) ip4_prefix);
-
-	rtnl_route_set_dst (route, dest_addr);
-	nl_addr_put (dest_addr);
-
-	/* Gateway */
-	if (ip4_gateway) {
-		gw_addr = nl_addr_build (AF_INET, &ip4_gateway, sizeof (ip4_gateway));
-		if (gw_addr) {
-			rtnl_route_set_gateway (route, gw_addr);
-			rtnl_route_set_scope (route, RT_SCOPE_UNIVERSE);
-		} else {
-			nm_log_err (LOGD_DEVICE | LOGD_IP4, "Invalid gateway 0x%X", ip4_gateway);
-			rtnl_route_put (route);
-			return NULL;
-		}
-	}
-
-	/* Metric */
-	if (metric)
-		rtnl_route_set_prio (route, metric);
-
 	/* Add the route */
-	err = rtnl_route_add (nlh, route, 0);
-	if (err == -ESRCH && ip4_gateway) {
+	err = nm_netlink_route_add(route, AF_INET, &ip4_dest, ip4_prefix, &ip4_gateway, 0);
+	if (err == -NLE_OBJ_NOTFOUND && ip4_gateway) {
 		/* Gateway might be over a bridge; try adding a route to gateway first */
 		struct rtnl_route *route2;
 
-		route2 = create_route (iface_idx, mss);
+		route2 = nm_netlink_route_new (ifindex, AF_INET, mss, NULL);
 		if (route2) {
 			/* Add route to gateway over bridge */
-			rtnl_route_set_dst (route2, gw_addr);
-			err = rtnl_route_add (nlh, route2, 0);
+			err = nm_netlink_route_add(route2, AF_INET, &ip4_gateway, 32, NULL, 0);
 			if (!err) {
-				/* Try adding the route again */
-				err = rtnl_route_add (nlh, route, 0);
+				err = nm_netlink_route_add(route, AF_INET, &ip4_dest, ip4_prefix, &ip4_gateway, 0);
 				if (err)
-					rtnl_route_del (nlh, route2, 0);
+					nm_netlink_route_delete (route2);
 			}
 			rtnl_route_put (route2);
 		}
 	}
 
-	if (gw_addr)
-		nl_addr_put (gw_addr);
-
 	if (err) {
+		char *iface = nm_netlink_index_to_iface (ifindex);
+
 		nm_log_err (LOGD_DEVICE | LOGD_IP4,
 		            "(%s): failed to set IPv4 route: %s",
-		            iface, nl_geterror ());
+		            iface ? iface : "unknown", nl_geterror (err));
+		g_free (iface);
+
 		rtnl_route_put (route);
 		route = NULL;
 	}
@@ -188,17 +142,21 @@ nm_system_device_set_ip4_route (const char *iface,
 }
 
 static gboolean
-sync_addresses (const char *iface, int ifindex, int family,
-				struct rtnl_addr **addrs, int num_addrs)
+sync_addresses (int ifindex,
+                int family,
+				struct rtnl_addr **addrs,
+				int num_addrs)
 {
-	struct nl_handle *nlh;
-	struct nl_cache *addr_cache;
-	struct rtnl_addr *filter_addr, *match_addr;
+	struct nl_sock *nlh;
+	struct nl_cache *addr_cache = NULL;
+	struct rtnl_addr *filter_addr = NULL, *match_addr;
 	struct nl_object *match;
 	struct nl_addr *nladdr;
 	int i, err;
 	guint32 log_domain = (family == AF_INET) ? LOGD_IP4 : LOGD_IP6;
 	char buf[INET6_ADDRSTRLEN + 1];
+	char *iface = NULL;
+	gboolean success = FALSE;
 
 	log_domain |= LOGD_DEVICE;
 
@@ -206,19 +164,22 @@ sync_addresses (const char *iface, int ifindex, int family,
 	if (!nlh)
 		return FALSE;
 
-	addr_cache = rtnl_addr_alloc_cache (nlh);
-	if (!addr_cache)
+	err = rtnl_addr_alloc_cache (nlh, &addr_cache);
+	if (err < 0)
 		return FALSE;
 
 	filter_addr = rtnl_addr_alloc ();
-	if (!filter_addr) {
-		nl_cache_free (addr_cache);
-		return FALSE;
-	}
+	if (!filter_addr)
+		goto out;
+
 	rtnl_addr_set_ifindex (filter_addr, ifindex);
 	if (family)
 		rtnl_addr_set_family (filter_addr, family);
 
+	iface = nm_netlink_index_to_iface (ifindex);
+	if (!iface)
+		goto out;
+
 	nm_log_dbg (log_domain, "(%s): syncing addresses (family %d)", iface, family);
 
 	/* Walk through the cache, comparing the addresses already on
@@ -279,13 +240,10 @@ sync_addresses (const char *iface, int ifindex, int family,
 		err = rtnl_addr_delete (nlh, match_addr, 0);
 		if (err < 0) {
 			nm_log_err (log_domain, "(%s): error %d returned from rtnl_addr_delete(): %s",
-						iface, err, nl_geterror ());
+						iface, err, nl_geterror (err));
 		}
 	}
 
-	rtnl_addr_put (filter_addr);
-	nl_cache_free (addr_cache);
-
 	/* Now add the remaining new addresses */
 	for (i = 0; i < num_addrs; i++) {
 		struct in6_addr *in6tmp;
@@ -312,28 +270,40 @@ sync_addresses (const char *iface, int ifindex, int family,
 		}
 
 		err = rtnl_addr_add (nlh, addrs[i], 0);
-		if (err < 0 && (nl_get_errno () != EEXIST)) {
+		if (err < 0 && (err != -NLE_EXIST)) {
 			nm_log_err (log_domain,
 			            "(%s): error %d returned from rtnl_addr_add():\n%s",
-			            iface, err, nl_geterror ());
+			            iface, err, nl_geterror (err));
 		}
 
 		rtnl_addr_put (addrs[i]);
 	}
 	g_free (addrs);
+	success = TRUE;
 
-	return TRUE;
+out:
+	if (filter_addr)
+		rtnl_addr_put (filter_addr);
+	if (addr_cache)
+		nl_cache_free (addr_cache);
+	g_free (iface);
+	return success;
 }
 
 static gboolean
-add_ip4_addresses (NMIP4Config *config, const char *iface)
+add_ip4_addresses (NMIP4Config *config, int ifindex)
 {
-	int num_addrs, i, iface_idx;
+	char *iface;
+	int num_addrs, i;
 	guint32 flags = 0;
 	gboolean did_gw = FALSE;
 	struct rtnl_addr **addrs;
 
-	iface_idx = nm_netlink_iface_to_index (iface);
+	g_return_val_if_fail (ifindex > 0, FALSE);
+
+	iface = nm_netlink_index_to_iface (ifindex);
+	if (!iface)
+		return FALSE;
 
 	num_addrs = nm_ip4_config_get_num_addresses (config);
 	addrs = g_new0 (struct rtnl_addr *, num_addrs + 1);
@@ -355,13 +325,14 @@ add_ip4_addresses (NMIP4Config *config, const char *iface)
 		if (!addrs[i]) {
 			nm_log_warn (LOGD_DEVICE | LOGD_IP4,
 			             "(%s): couldn't create rtnl address!",
-			             iface);
+			             iface ? iface : "unknown");
 			continue;
 		}
-		rtnl_addr_set_ifindex (addrs[i], iface_idx);
+		rtnl_addr_set_ifindex (addrs[i], ifindex);
 	}
+	g_free (iface);
 
-	return sync_addresses (iface, iface_idx, AF_INET, addrs, num_addrs);
+	return sync_addresses (ifindex, AF_INET, addrs, num_addrs);
 }
 
 struct rtnl_route *
@@ -406,10 +377,10 @@ nm_system_add_ip4_vpn_gateway_route (NMDevice *parent_device, NMIP4Config *vpn_c
 	 * parent device.
 	 */
 	if (ip4_dest_in_same_subnet (parent_config, vpn_gw, parent_prefix)) {
-		route = nm_system_device_set_ip4_route (nm_device_get_ip_iface (parent_device),
+		route = nm_system_device_set_ip4_route (nm_device_get_ip_ifindex (parent_device),
 		                                        vpn_gw, 32, 0, 0, nm_ip4_config_get_mss (parent_config));
 	} else {
-		route = nm_system_device_set_ip4_route (nm_device_get_ip_iface (parent_device),
+		route = nm_system_device_set_ip4_route (nm_device_get_ip_ifindex (parent_device),
 		                                        vpn_gw, 32, parent_gw, 0, nm_ip4_config_get_mss (parent_config));
 	}
 
@@ -423,18 +394,18 @@ nm_system_add_ip4_vpn_gateway_route (NMDevice *parent_device, NMIP4Config *vpn_c
  *
  */
 gboolean
-nm_system_apply_ip4_config (const char *iface,
+nm_system_apply_ip4_config (int ifindex,
                             NMIP4Config *config,
                             int priority,
                             NMIP4ConfigCompareFlags flags)
 {
 	int i;
 
-	g_return_val_if_fail (iface != NULL, FALSE);
+	g_return_val_if_fail (ifindex > 0, FALSE);
 	g_return_val_if_fail (config != NULL, FALSE);
 
 	if (flags & NM_IP4_COMPARE_FLAG_ADDRESSES) {
-		if (!add_ip4_addresses (config, iface))
+		if (!add_ip4_addresses (config, ifindex))
 			return FALSE;
 		sleep (1);
 	}
@@ -459,7 +430,7 @@ nm_system_apply_ip4_config (const char *iface,
 			    && nm_ip4_route_get_dest (route) == 0)
 				continue;
 
-			tmp = nm_system_device_set_ip4_route (iface,
+			tmp = nm_system_device_set_ip4_route (ifindex,
 			                                      nm_ip4_route_get_dest (route),
 			                                      nm_ip4_route_get_prefix (route),
 			                                      nm_ip4_route_get_next_hop (route),
@@ -471,11 +442,11 @@ nm_system_apply_ip4_config (const char *iface,
 
 	if (flags & NM_IP4_COMPARE_FLAG_MTU) {
 		if (nm_ip4_config_get_mtu (config))
-			nm_system_device_set_mtu (iface, nm_ip4_config_get_mtu (config));
+			nm_system_iface_set_mtu (ifindex, nm_ip4_config_get_mtu (config));
 	}
 
 	if (priority > 0)
-		nm_system_device_set_priority (iface, config, priority);
+		nm_system_device_set_priority (ifindex, config, priority);
 
 	return TRUE;
 }
@@ -491,10 +462,8 @@ nm_system_set_ip6_route (int ifindex,
                          int table,
                          struct rtnl_route **out_route)
 {
-	struct nl_handle *nlh;
+	struct nl_sock *nlh;
 	struct rtnl_route *route;
-	struct nl_addr *dest_addr;
-	struct nl_addr *gw_addr = NULL;
 	int err = 0;
 
 	g_return_val_if_fail (ifindex >= 0, -1);
@@ -502,64 +471,33 @@ nm_system_set_ip6_route (int ifindex,
 	nlh = nm_netlink_get_default_handle ();
 	g_return_val_if_fail (nlh != NULL, -1);
 
-	route = create_route (ifindex, mss);
+	route = nm_netlink_route_new (ifindex, AF_INET6, mss,
+	                              NMNL_PROP_PROT, protocol,
+	                              NMNL_PROP_PRIO, metric,
+	                              NMNL_PROP_TABLE, table,
+	                              NULL);
 	g_return_val_if_fail (route != NULL, -1);
 
-	/* Destination */
-	dest_addr = nl_addr_build (AF_INET6, (struct in6_addr *) ip6_dest, sizeof (*ip6_dest));
-	g_return_val_if_fail (dest_addr != NULL, -1);
-	nl_addr_set_prefixlen (dest_addr, (int) ip6_prefix);
-
-	rtnl_route_set_dst (route, dest_addr);
-	nl_addr_put (dest_addr);
-
-	/* Gateway */
-	if (ip6_gateway && !IN6_IS_ADDR_UNSPECIFIED (ip6_gateway)) {
-		gw_addr = nl_addr_build (AF_INET6, (struct in6_addr *) ip6_gateway, sizeof (*ip6_gateway));
-		if (gw_addr) {
-			rtnl_route_set_gateway (route, gw_addr);
-			rtnl_route_set_scope (route, RT_SCOPE_UNIVERSE);
-		} else {
-			nm_log_warn (LOGD_DEVICE | LOGD_IP6, "Invalid gateway");
-			rtnl_route_put (route);
-			return -1;
-		}
-	}
-
-	/* Metric */
-	if (metric)
-		rtnl_route_set_prio (route, metric);
-
-	if (protocol)
-		rtnl_route_set_protocol (route, protocol);
-
-	if (table)
-		rtnl_route_set_table (route, table);
-
 	/* Add the route */
-	err = rtnl_route_add (nlh, route, 0);
-	if (err == -ESRCH && ip6_gateway) {
+	err = nm_netlink_route_add(route, AF_INET6, &ip6_dest, ip6_prefix, &ip6_gateway, 0);
+	if (err == -NLE_OBJ_NOTFOUND && ip6_gateway) {
 		/* Gateway might be over a bridge; try adding a route to gateway first */
 		struct rtnl_route *route2;
 
-		route2 = create_route (ifindex, mss);
+		route2 = nm_netlink_route_new (ifindex, AF_INET6, mss, NULL);
 		if (route2) {
+			err = nm_netlink_route_add(route, AF_INET6, &ip6_gateway, 128, NULL, 0);
 			/* Add route to gateway over bridge */
-			rtnl_route_set_dst (route2, gw_addr);
-			err = rtnl_route_add (nlh, route2, 0);
 			if (!err) {
 				/* Try adding the route again */
-				err = rtnl_route_add (nlh, route, 0);
+				err = nm_netlink_route_add(route, AF_INET6, &ip6_dest, ip6_prefix, &ip6_gateway, 0);
 				if (err)
-					rtnl_route_del (nlh, route2, 0);
+					nm_netlink_route_delete (route2);
 			}
 			rtnl_route_put (route2);
 		}
 	}
 
-	if (gw_addr)
-		nl_addr_put (gw_addr);
-
 	if (out_route)
 		*out_route = route;
 	else
@@ -569,12 +507,17 @@ nm_system_set_ip6_route (int ifindex,
 }
 
 static gboolean
-add_ip6_addresses (NMIP6Config *config, const char *iface)
+add_ip6_addresses (NMIP6Config *config, int ifindex)
 {
-	int num_addrs, i, iface_idx;
+	char *iface;
+	int num_addrs, i;
 	struct rtnl_addr **addrs;
 
-	iface_idx = nm_netlink_iface_to_index (iface);
+	g_return_val_if_fail (ifindex > 0, FALSE);
+
+	iface = nm_netlink_index_to_iface (ifindex);
+	if (!iface)
+		return FALSE;
 
 	num_addrs = nm_ip6_config_get_num_addresses (config);
 	addrs = g_new0 (struct rtnl_addr *, num_addrs + 1);
@@ -589,13 +532,14 @@ add_ip6_addresses (NMIP6Config *config, const char *iface)
 		if (!addrs[i]) {
 			nm_log_warn (LOGD_DEVICE | LOGD_IP6,
 			             "(%s): couldn't create rtnl address!",
-			             iface);
+			             iface ? iface : "unknown");
 			continue;
 		}
-		rtnl_addr_set_ifindex (addrs[i], iface_idx);
+		rtnl_addr_set_ifindex (addrs[i], ifindex);
 	}
+	g_free (iface);
 
-	return sync_addresses (iface, iface_idx, AF_INET6, addrs, num_addrs);
+	return sync_addresses (ifindex, AF_INET6, addrs, num_addrs);
 }
 
 /*
@@ -605,24 +549,24 @@ add_ip6_addresses (NMIP6Config *config, const char *iface)
  *
  */
 gboolean
-nm_system_apply_ip6_config (const char *iface,
+nm_system_apply_ip6_config (int ifindex,
                             NMIP6Config *config,
                             int priority,
                             NMIP6ConfigCompareFlags flags)
 {
 	int i;
 
-	g_return_val_if_fail (iface != NULL, FALSE);
+	g_return_val_if_fail (ifindex > 0, FALSE);
 	g_return_val_if_fail (config != NULL, FALSE);
 
 	if (flags & NM_IP6_COMPARE_FLAG_ADDRESSES) {
-		if (!add_ip6_addresses (config, iface))
+		if (!add_ip6_addresses (config, ifindex))
 			return FALSE;
 		sleep (1); // FIXME?
 	}
 
 	if (flags & NM_IP6_COMPARE_FLAG_ROUTES) {
-		int ifindex = nm_netlink_iface_to_index (iface);
+		char *iface = nm_netlink_index_to_iface (ifindex);
 
 		for (i = 0; i < nm_ip6_config_get_num_routes (config); i++) {
 			NMIP6Route *route = nm_ip6_config_get_route (config, i);
@@ -647,9 +591,11 @@ nm_system_apply_ip6_config (const char *iface,
 			if (err) {
 				nm_log_err (LOGD_DEVICE | LOGD_IP6,
 				            "(%s): failed to set IPv6 route: %s",
-				            iface, nl_geterror ());
+				            iface ? iface : "unknown",
+				            nl_geterror (err));
 			}
 		}
+		g_free (iface);
 	}
 
 // FIXME
@@ -659,217 +605,221 @@ nm_system_apply_ip6_config (const char *iface,
 	return TRUE;
 }
 
-/*
- * nm_system_device_set_up_down
+/**
+ * nm_system_iface_set_up:
+ * @ifindex: interface index
+ * @up: %TRUE to bring interface up, or %FALSE to take it down
+ * @no_firmware: on return, %TRUE if the operation may have failed due to
+ * missing firmware
  *
- * Mark the device as up or down.
+ * Bring the interface up or take it down.
  *
- */
-gboolean
-nm_system_device_set_up_down (NMDevice *dev,
-                              gboolean up,
-                              gboolean *no_firmware)
-{
-	g_return_val_if_fail (dev != NULL, FALSE);
-
-	return nm_system_device_set_up_down_with_iface (nm_device_get_ip_iface (dev), up, no_firmware);
-}
-
+ * Returns: %TRUE on success, %FALSE on failure
+ **/
 gboolean
-nm_system_device_set_up_down_with_iface (const char *iface,
-                                         gboolean up,
-                                         gboolean *no_firmware)
+nm_system_iface_set_up (int ifindex,
+                        gboolean up,
+                        gboolean *no_firmware)
 {
 	struct rtnl_link *request = NULL, *old = NULL;
-	struct nl_handle *nlh;
+	struct nl_sock *nlh;
 	gboolean success = FALSE;
-	guint32 idx;
+	int err;
 
-	g_return_val_if_fail (iface != NULL, FALSE);
+	g_return_val_if_fail (ifindex > 0, FALSE);
 	if (no_firmware)
 		g_return_val_if_fail (*no_firmware == FALSE, FALSE);
 
 	if (!(request = rtnl_link_alloc ()))
-		goto out;
+		return FALSE;
 
 	if (up)
 		rtnl_link_set_flags (request, IFF_UP);
 	else
 		rtnl_link_unset_flags (request, IFF_UP);
 
-	idx = nm_netlink_iface_to_index (iface);
-	old = nm_netlink_index_to_rtnl_link (idx);
+	old = nm_netlink_index_to_rtnl_link (ifindex);
 	if (old) {
 		nlh = nm_netlink_get_default_handle ();
 		if (nlh) {
-			if (rtnl_link_change (nlh, old, request, 0) == 0)
+			err = rtnl_link_change (nlh, old, request, 0);
+			if (err == 0) {
 				success = TRUE;
-			else if ((nl_get_errno () == ENOENT) && no_firmware && up)
-				*no_firmware = TRUE;
+			} else {
+				if ((err == -NLE_OBJ_NOTFOUND) && no_firmware && up)
+					*no_firmware = TRUE;
+			}
 		}
 	}
 
 	rtnl_link_put (old);
 	rtnl_link_put (request);
-
-out:
 	return success;
 }
 
+/**
+ * nm_system_iface_is_up:
+ * @ifindex: interface index
+ *
+ * Returns: %TRUE if the interface is up, %FALSE if it was down or the check
+ * failed.
+ **/
 gboolean
-nm_system_device_is_up (NMDevice *device)
+nm_system_iface_is_up (int ifindex)
 {
-	g_return_val_if_fail (device != NULL, FALSE);
+	struct rtnl_link *l;
+	guint32 flags;
 
-	return nm_system_device_is_up_with_iface (nm_device_get_ip_iface (device));
-}
+	g_return_val_if_fail (ifindex > 0, FALSE);
 
-gboolean
-nm_system_device_is_up_with_iface (const char *iface)
-{
-	struct ifreq ifr;
-	int fd;
-	gboolean up = FALSE;
+	l = nm_netlink_index_to_rtnl_link (ifindex);
+	if (l == NULL) {
+		char *iface = nm_netlink_index_to_iface (ifindex);
 
-	fd = socket (PF_INET, SOCK_DGRAM, 0);
-	if (fd < 0) {
-		nm_log_err (LOGD_HW, "couldn't open control socket.");
+		g_warn_if_fail (iface != NULL);
+		nm_log_err (LOGD_HW, "(%s): failed to get interface link object",
+		            iface ? iface : "unknown");
+		g_free (iface);
 		return FALSE;
 	}
 
-	/* Get device's flags */
-	memset (&ifr, 0, sizeof (ifr));
-	strncpy (ifr.ifr_name, iface, IFNAMSIZ);
-	if (ioctl (fd, SIOCGIFFLAGS, &ifr) < 0) {
-		if (errno != ENODEV) {
-			nm_log_err (LOGD_HW, "(%s): could not get flags: errno %d",
-			            iface, errno);
-		}
-	} else {
-		up = !!(ifr.ifr_flags & IFF_UP);
-	}
-	close (fd);
+	flags = rtnl_link_get_flags (l);
+	rtnl_link_put (l);
 
-	return up;
+	return flags & IFF_UP;
 }
 
+/**
+ * nm_system_iface_set_mtu:
+ * @ifindex: interface index
+ * @mtu: the new MTU
+ *
+ * Returns: %TRUE if the request was successful, %FALSE if it failed
+ **/
 gboolean
-nm_system_device_set_mtu (const char *iface, guint32 mtu)
+nm_system_iface_set_mtu (int ifindex, guint32 mtu)
 {
 	struct rtnl_link *old;
 	struct rtnl_link *new;
 	gboolean success = FALSE;
-	struct nl_handle *nlh;
-	int iface_idx;
+	struct nl_sock *nlh;
+	int err;
 
-	g_return_val_if_fail (iface != NULL, FALSE);
+	g_return_val_if_fail (ifindex > 0, FALSE);
 	g_return_val_if_fail (mtu > 0, FALSE);
 
 	new = rtnl_link_alloc ();
 	if (!new)
 		return FALSE;
 
-	iface_idx = nm_netlink_iface_to_index (iface);
-	old = nm_netlink_index_to_rtnl_link (iface_idx);
+	old = nm_netlink_index_to_rtnl_link (ifindex);
 	if (old) {
 		rtnl_link_set_mtu (new, mtu);
 		nlh = nm_netlink_get_default_handle ();
 		if (nlh) {
-			rtnl_link_change (nlh, old, new, 0);
-			success = TRUE;
+			err = rtnl_link_change (nlh, old, new, 0);
+			if (err == 0)
+				success = TRUE;
+			else {
+				char *iface = nm_netlink_index_to_iface (ifindex);
+
+				nm_log_warn (LOGD_HW, "(%s): failed to change interface MTU",
+				             iface ? iface : "unknown");
+				g_free (iface);
+			}
 		}
 		rtnl_link_put (old);
 	}
-
 	rtnl_link_put (new);
+
 	return success;
 }
 
+/**
+ * nm_system_iface_set_mac:
+ * @ifindex: interface index
+ * @mac: new MAC address
+ *
+ * Attempts to change the interface's MAC address to the requested value,
+ * ie MAC spoofing or cloning.
+ *
+ * Returns: %TRUE if the request succeeded, %FALSE if it failed.
+ **/
 gboolean
-nm_system_device_set_mac (const char *iface, const struct ether_addr *mac)
+nm_system_iface_set_mac (int ifindex, const struct ether_addr *mac)
 {
-	struct rtnl_link *old;
-	struct rtnl_link *new;
+	struct rtnl_link *old, *new;
 	gboolean success = FALSE;
-	struct nl_handle *nlh;
-	int iface_idx;
+	struct nl_sock *nlh;
+	char *iface;
 	struct nl_addr *addr = NULL;
+	int err;
 
-	g_return_val_if_fail (iface != NULL, FALSE);
+	g_return_val_if_fail (ifindex > 0, FALSE);
 	g_return_val_if_fail (mac != NULL, FALSE);
 
 	new = rtnl_link_alloc ();
 	if (!new)
 		return FALSE;
 
-	iface_idx = nm_netlink_iface_to_index (iface);
-	old = nm_netlink_index_to_rtnl_link (iface_idx);
+	iface = nm_netlink_index_to_iface (ifindex);
+	if (!iface)
+		goto out;
+
+	old = nm_netlink_index_to_rtnl_link (ifindex);
 	if (old) {
 		addr = nl_addr_build (AF_LLC, (void *) mac, ETH_ALEN);
 		if (!addr) {
-			char *mac_str;
-			mac_str = g_strdup_printf ("%02X:%02X:%02X:%02X:%02X:%02X", mac->ether_addr_octet[0], mac->ether_addr_octet[1], mac->ether_addr_octet[2],
-			                                                            mac->ether_addr_octet[3], mac->ether_addr_octet[4], mac->ether_addr_octet[5]);
-			nm_log_err (LOGD_DEVICE, "(%s): could not allocate memory for MAC address (%s)", iface, mac_str);
-			g_free (mac_str);
+			nm_log_err (LOGD_HW, "(%s): failed to allocate memory for MAC address change", iface);
+			rtnl_link_put (old);
+			rtnl_link_put (new);
 			return FALSE;
 		}
 		rtnl_link_set_addr (new, addr);
+		nl_addr_put (addr);
 		nlh = nm_netlink_get_default_handle ();
 		if (nlh) {
-			rtnl_link_change (nlh, old, new, 0);
-			success = TRUE;
+			err = rtnl_link_change (nlh, old, new, 0);
+			if (err == 0)
+				success = TRUE;
+			else
+				nm_log_warn (LOGD_HW, "(%s): failed to change interface MAC address", iface);
 		}
 		rtnl_link_put (old);
 	}
 
+out:
 	rtnl_link_put (new);
+	g_free (iface);
 	return success;
 }
 
 static struct rtnl_route *
-add_ip4_route_to_gateway (const char *iface, guint32 gw, guint32 mss)
+add_ip4_route_to_gateway (int ifindex, guint32 gw, guint32 mss)
 {
-	struct nl_handle *nlh;
+	struct nl_sock *nlh;
 	struct rtnl_route *route = NULL;
-	struct nl_addr *gw_addr = NULL;
-	int iface_idx, err;
+	int err;
 
 	nlh = nm_netlink_get_default_handle ();
 	g_return_val_if_fail (nlh != NULL, NULL);
 
-	iface_idx = nm_netlink_iface_to_index (iface);
-	if (iface_idx < 0)
-		return NULL;
-
 	/* Gateway might be over a bridge; try adding a route to gateway first */
-	route = rtnl_route_alloc ();
-	if (route == NULL)
-		return NULL;
-
-	rtnl_route_set_family (route, AF_INET);
-	rtnl_route_set_table (route, RT_TABLE_MAIN);
-	rtnl_route_set_oif (route, iface_idx);
-	rtnl_route_set_scope (route, RT_SCOPE_LINK);
-
-	gw_addr = nl_addr_build (AF_INET, &gw, sizeof (gw));
-	if (!gw_addr)
-		goto error;
-	nl_addr_set_prefixlen (gw_addr, 32);
-	rtnl_route_set_dst (route, gw_addr);
-	nl_addr_put (gw_addr);
-
-	if (mss) {
-		if (rtnl_route_set_metric (route, RTAX_ADVMSS, mss) < 0)
-			goto error;
-	}
+	route = nm_netlink_route_new (ifindex, AF_INET, mss,
+	                              NMNL_PROP_SCOPE, RT_SCOPE_LINK,
+	                              NMNL_PROP_TABLE, RT_TABLE_MAIN,
+	                              NULL);
+	g_return_val_if_fail (route != NULL, NULL);
 
 	/* Add direct route to the gateway */
-	err = rtnl_route_add (nlh, route, 0);
+	err = nm_netlink_route_add(route, AF_INET, &gw, 32, NULL, 0);
 	if (err) {
+		char *iface = nm_netlink_index_to_iface (ifindex);
+
 		nm_log_err (LOGD_DEVICE | LOGD_IP4,
 		            "(%s): failed to add IPv4 route to gateway (%d)",
-		            iface, err);
+		            iface ? iface : "unknown", err);
+		g_free (iface);
 		goto error;
 	}
 
@@ -881,64 +831,27 @@ error:
 }
 
 static int
-replace_default_ip4_route (const char *iface, guint32 gw, guint32 mss)
+replace_default_ip4_route (int ifindex, guint32 gw, guint32 mss)
 {
 	struct rtnl_route *route = NULL;
-	struct nl_handle *nlh;
-	struct nl_addr *dst_addr = NULL;
-	guint32 dst = 0;
-	struct nl_addr *gw_addr = NULL;
-	int iface_idx, err = -1;
+	struct nl_sock *nlh;
+	int err = -1;
+	int dst=0;
 
-	g_return_val_if_fail (iface != NULL, -ENODEV);
+	g_return_val_if_fail (ifindex > 0, -ENODEV);
 
 	nlh = nm_netlink_get_default_handle ();
 	g_return_val_if_fail (nlh != NULL, -ENOMEM);
 
-	iface_idx = nm_netlink_iface_to_index (iface);
-	if (iface_idx < 0)
-		return -ENODEV;
-
-	route = rtnl_route_alloc();
+	route = nm_netlink_route_new (ifindex, AF_INET, mss,
+	                              NMNL_PROP_SCOPE, RT_SCOPE_UNIVERSE,
+	                              NMNL_PROP_TABLE, RT_TABLE_MAIN,
+	                              NULL);
 	g_return_val_if_fail (route != NULL, -ENOMEM);
 
-	rtnl_route_set_family (route, AF_INET);
-	rtnl_route_set_table (route, RT_TABLE_MAIN);
-	rtnl_route_set_scope (route, RT_SCOPE_UNIVERSE);
-	rtnl_route_set_oif (route, iface_idx);
-
-	/* Build up the destination address */
-	dst_addr = nl_addr_build (AF_INET, &dst, sizeof (dst));
-	if (!dst_addr) {
-		err = -ENOMEM;
-		goto out;
-	}
-	nl_addr_set_prefixlen (dst_addr, 0);
-	rtnl_route_set_dst (route, dst_addr);
-
-	/* Build up the gateway address */
-	gw_addr = nl_addr_build (AF_INET, &gw, sizeof (gw));
-	if (!gw_addr) {
-		err = -ENOMEM;
-		goto out;
-	}
-	nl_addr_set_prefixlen (gw_addr, 0);
-	rtnl_route_set_gateway (route, gw_addr);
-
-	if (mss > 0) {
-		err = rtnl_route_set_metric (route, RTAX_ADVMSS, mss);
-		if (err < 0)
-			goto out;
-	}
-
 	/* Add the new default route */
-	err = rtnl_route_add (nlh, route, NLM_F_REPLACE);
+	err = nm_netlink_route_add (route, AF_INET, &dst, 0, &gw, NLM_F_REPLACE);
 
-out:
-	if (dst_addr)
-		nl_addr_put (dst_addr);
-	if (gw_addr)
-		nl_addr_put (gw_addr);
 	rtnl_route_put (route);
 	return err;
 }
@@ -950,47 +863,56 @@ out:
  *
  */
 gboolean
-nm_system_replace_default_ip4_route_vpn (const char *iface,
+nm_system_replace_default_ip4_route_vpn (int ifindex,
                                          guint32 ext_gw,
                                          guint32 int_gw,
                                          guint32 mss,
-                                         const char *parent_iface,
+                                         int parent_ifindex,
                                          guint32 parent_mss)
 {
 	struct rtnl_route *gw_route = NULL;
-	struct nl_handle *nlh;
+	struct nl_sock *nlh;
 	gboolean success = FALSE;
 	int err;
+	char *iface;
 
 	nlh = nm_netlink_get_default_handle ();
 	g_return_val_if_fail (nlh != NULL, FALSE);
 
-	err = replace_default_ip4_route (iface, int_gw, mss);
-	if (err == 0) {
+	err = replace_default_ip4_route (ifindex, int_gw, mss);
+	if (err == 0)
 		return TRUE;
-	} else if (err != -ESRCH) {
+
+	iface = nm_netlink_index_to_iface (ifindex);
+	if (!iface)
+		goto out;
+
+	if ((err != -NLE_OBJ_NOTFOUND) && (err != -NLE_FAILURE)) {
 		nm_log_err (LOGD_DEVICE | LOGD_IP4,
 		            "(%s): failed to set IPv4 default route: %d",
 		            iface, err);
-		return FALSE;
+		goto out;
 	}
 
 	/* Try adding a direct route to the gateway first */
-	gw_route = add_ip4_route_to_gateway (parent_iface, ext_gw, parent_mss);
+	gw_route = add_ip4_route_to_gateway (parent_ifindex, ext_gw, parent_mss);
 	if (!gw_route)
-		return FALSE;
+		goto out;
 
 	/* Try adding the original route again */
-	err = replace_default_ip4_route (iface, int_gw, mss);
+	err = replace_default_ip4_route (ifindex, int_gw, mss);
 	if (err != 0) {
-		rtnl_route_del (nlh, gw_route, 0);
+		nm_netlink_route_delete (gw_route);
 		nm_log_err (LOGD_DEVICE | LOGD_IP4,
 		            "(%s): failed to set IPv4 default route (pass #2): %d",
 		            iface, err);
 	} else
 		success = TRUE;
 
-	rtnl_route_put (gw_route);
+out:
+	if (gw_route)
+		rtnl_route_put (gw_route);
+	g_free (iface);
 	return success;
 }
 
@@ -1001,132 +923,105 @@ nm_system_replace_default_ip4_route_vpn (const char *iface,
  *
  */
 gboolean
-nm_system_replace_default_ip4_route (const char *iface, guint32 gw, guint32 mss)
+nm_system_replace_default_ip4_route (int ifindex, guint32 gw, guint32 mss)
 {
 	struct rtnl_route *gw_route = NULL;
-	struct nl_handle *nlh;
 	gboolean success = FALSE;
+	char *iface;
 	int err;
 
-	nlh = nm_netlink_get_default_handle ();
-	g_return_val_if_fail (nlh != NULL, FALSE);
-
-	err = replace_default_ip4_route (iface, gw, mss);
-	if (err == 0) {
+	err = replace_default_ip4_route (ifindex, gw, mss);
+	if (err == 0)
 		return TRUE;
-	} else if (err != -ESRCH) {
+
+	iface = nm_netlink_index_to_iface (ifindex);
+	if (!iface)
+		goto out;
+
+	if (err != -NLE_OBJ_NOTFOUND) {
 		nm_log_err (LOGD_DEVICE | LOGD_IP4,
 		            "(%s): failed to set IPv4 default route: %d",
 		            iface, err);
-		return FALSE;
+		goto out;
 	}
 
 	/* Try adding a direct route to the gateway first */
-	gw_route = add_ip4_route_to_gateway (iface, gw, mss);
+	gw_route = add_ip4_route_to_gateway (ifindex, gw, mss);
 	if (!gw_route)
-		return FALSE;
+		goto out;
 
 	/* Try adding the original route again */
-	err = replace_default_ip4_route (iface, gw, mss);
+	err = replace_default_ip4_route (ifindex, gw, mss);
 	if (err != 0) {
-		rtnl_route_del (nlh, gw_route, 0);
+		nm_netlink_route_delete (gw_route);
 		nm_log_err (LOGD_DEVICE | LOGD_IP4,
 		            "(%s): failed to set IPv4 default route (pass #2): %d",
 		            iface, err);
 	} else
 		success = TRUE;
 
-	rtnl_route_put (gw_route);
+out:
+	if (gw_route)
+		rtnl_route_put (gw_route);
+	g_free (iface);
 	return success;
 }
 
 static struct rtnl_route *
-add_ip6_route_to_gateway (const char *iface, const struct in6_addr *gw)
+add_ip6_route_to_gateway (int ifindex, const struct in6_addr *gw)
 {
-	struct nl_handle *nlh;
+	struct nl_sock *nlh;
 	struct rtnl_route *route = NULL;
-	struct nl_addr *gw_addr = NULL;
-	int iface_idx, err;
+	int err;
 
 	nlh = nm_netlink_get_default_handle ();
 	g_return_val_if_fail (nlh != NULL, NULL);
 
-	iface_idx = nm_netlink_iface_to_index (iface);
-	if (iface_idx < 0)
-		return NULL;
-
 	/* Gateway might be over a bridge; try adding a route to gateway first */
-	route = rtnl_route_alloc ();
-	if (route == NULL)
-		return NULL;
-
-	rtnl_route_set_family (route, AF_INET6);
-	rtnl_route_set_table (route, RT_TABLE_MAIN);
-	rtnl_route_set_oif (route, iface_idx);
-	rtnl_route_set_scope (route, RT_SCOPE_LINK);
-
-	gw_addr = nl_addr_build (AF_INET, (void *) gw, sizeof (*gw));
-	if (!gw_addr)
-		goto error;
-	nl_addr_set_prefixlen (gw_addr, 128);
-	rtnl_route_set_dst (route, gw_addr);
-	nl_addr_put (gw_addr);
+	route = nm_netlink_route_new (ifindex, AF_INET6, 0,
+	                              NMNL_PROP_SCOPE, RT_SCOPE_LINK,
+	                              NMNL_PROP_TABLE, RT_TABLE_MAIN,
+	                              NULL);
+	g_return_val_if_fail (route != NULL, NULL);
 
 	/* Add direct route to the gateway */
-	err = rtnl_route_add (nlh, route, 0);
+	err = nm_netlink_route_add(route, AF_INET, gw, 128, NULL, 0);
 	if (err) {
+		char *iface = nm_netlink_index_to_iface (ifindex);
+
 		nm_log_err (LOGD_DEVICE | LOGD_IP6,
-		            "(%s): failed to add IPv4 route to gateway (%d)",
-		            iface, err);
-		goto error;
+		            "(%s): failed to add IPv6 route to gateway (%d)",
+		            iface ? iface : "unknown", err);
+		g_free (iface);
+
+		rtnl_route_put (route);
+		route = NULL;
 	}
 
 	return route;
-
-error:
-	rtnl_route_put (route);
-	return NULL;
 }
 
 static int
-replace_default_ip6_route (const char *iface, const struct in6_addr *gw)
+replace_default_ip6_route (int ifindex, const struct in6_addr *gw)
 {
 	struct rtnl_route *route = NULL;
-	struct nl_handle *nlh;
-	struct nl_addr *gw_addr = NULL;
-	int iface_idx, err = -1;
+	struct nl_sock *nlh;
+	int err = -1;
 
-	g_return_val_if_fail (iface != NULL, -ENODEV);
+	g_return_val_if_fail (ifindex > 0, FALSE);
 
 	nlh = nm_netlink_get_default_handle ();
 	g_return_val_if_fail (nlh != NULL, -ENOMEM);
 
-	iface_idx = nm_netlink_iface_to_index (iface);
-	if (iface_idx < 0)
-		return -ENODEV;
-
-	route = rtnl_route_alloc();
+	route = nm_netlink_route_new (ifindex, AF_INET6, 0,
+	                              NMNL_PROP_SCOPE, RT_SCOPE_UNIVERSE,
+	                              NMNL_PROP_TABLE, RT_TABLE_MAIN,
+	                              NULL);
 	g_return_val_if_fail (route != NULL, -ENOMEM);
 
-	rtnl_route_set_family (route, AF_INET6);
-	rtnl_route_set_table (route, RT_TABLE_MAIN);
-	rtnl_route_set_scope (route, RT_SCOPE_UNIVERSE);
-	rtnl_route_set_oif (route, iface_idx);
-
-	if (gw && !IN6_IS_ADDR_UNSPECIFIED (gw)) {
-		/* Build up the gateway address */
-		gw_addr = nl_addr_build (AF_INET6, (void *) gw, sizeof (*gw));
-		if (!gw_addr) {
-			err = -ENOMEM;
-			goto out;
-		}
-		nl_addr_set_prefixlen (gw_addr, -1);
-		rtnl_route_set_gateway (route, gw_addr);
-	}
-
 	/* Add the new default route */
-	err = rtnl_route_add (nlh, route, NLM_F_REPLACE);
-	if (err == -EEXIST) {
+	nm_netlink_route_add(route, AF_INET6, NULL, 0, gw, NLM_F_REPLACE);
+	if (err == -NLE_EXIST) {
 		/* FIXME: even though we use NLM_F_REPLACE the kernel won't replace
 		 * the route if it's the same.  Should try to remove it first, then
 		 * add the new one again here.
@@ -1134,9 +1029,6 @@ replace_default_ip6_route (const char *iface, const struct in6_addr *gw)
 		err = 0;
 	}
 
-out:
-	if (gw_addr)
-		nl_addr_put (gw_addr);
 	rtnl_route_put (route);
 	return err;
 }
@@ -1148,208 +1040,99 @@ out:
  *
  */
 gboolean
-nm_system_replace_default_ip6_route (const char *iface, const struct in6_addr *gw)
+nm_system_replace_default_ip6_route (int ifindex, const struct in6_addr *gw)
 {
 	struct rtnl_route *gw_route = NULL;
-	struct nl_handle *nlh;
 	gboolean success = FALSE;
+	char *iface;
 	int err;
 
-	nlh = nm_netlink_get_default_handle ();
-	g_return_val_if_fail (nlh != NULL, FALSE);
-
-	err = replace_default_ip6_route (iface, gw);
-	if (err == 0) {
+	err = replace_default_ip6_route (ifindex, gw);
+	if (err == 0)
 		return TRUE;
-	} else if (err != -ESRCH) {
+
+	iface = nm_netlink_index_to_iface (ifindex);
+	if (!iface)
+		goto out;
+
+	if (err != -NLE_OBJ_NOTFOUND) {
 		nm_log_err (LOGD_DEVICE | LOGD_IP6,
 		            "(%s): failed to set IPv6 default route: %d",
 		            iface, err);
-		return FALSE;
+		goto out;
 	}
 
 	/* Try adding a direct route to the gateway first */
-	gw_route = add_ip6_route_to_gateway (iface, gw);
+	gw_route = add_ip6_route_to_gateway (ifindex, gw);
 	if (!gw_route)
-		return FALSE;
+		goto out;
 
 	/* Try adding the original route again */
-	err = replace_default_ip6_route (iface, gw);
+	err = replace_default_ip6_route (ifindex, gw);
 	if (err != 0) {
-		rtnl_route_del (nlh, gw_route, 0);
+		nm_netlink_route_delete (gw_route);
 		nm_log_err (LOGD_DEVICE | LOGD_IP6,
 		            "(%s): failed to set IPv6 default route (pass #2): %d",
 		            iface, err);
 	} else
 		success = TRUE;
 
-	rtnl_route_put (gw_route);
+out:
+	if (gw_route)
+		rtnl_route_put (gw_route);
+	g_free (iface);
 	return success;
 }
 
-static void flush_addresses (const char *iface, int family)
-{
-	int iface_idx;
-
-	g_return_if_fail (iface != NULL);
-	iface_idx = nm_netlink_iface_to_index (iface);
-	if (iface_idx >= 0)
-		sync_addresses (iface, iface_idx, family, NULL, 0);
-}
-
-/*
- * nm_system_device_flush_addresses
- *
- * Flush all network addresses associated with a network device
- *
- */
-void nm_system_device_flush_addresses (NMDevice *dev, int family)
-{
-	g_return_if_fail (dev != NULL);
-
-	flush_addresses (nm_device_get_ip_iface (dev), family);
-}
-
-
 /*
- * nm_system_device_flush_addresses_with_iface
+ * nm_system_iface_flush_addresses
  *
  * Flush all network addresses associated with a network device
  *
  */
-void nm_system_device_flush_addresses_with_iface (const char *iface)
-{
-	flush_addresses (iface, AF_UNSPEC);
-}
-
-
-static void
-foreach_route (void (*callback)(struct nl_object *, gpointer),
-			gpointer user_data)
-{
-	struct nl_handle *nlh;
-	struct nl_cache *route_cache;
-
-	nlh = nm_netlink_get_default_handle ();
-	route_cache = rtnl_route_alloc_cache (nlh);
-	g_assert (route_cache);
-	nl_cache_foreach (route_cache, callback, user_data);
-	nl_cache_free (route_cache);
-}
-
-static void
-dump_route (struct rtnl_route *route)
+gboolean
+nm_system_iface_flush_addresses (int ifindex, int family)
 {
-	char buf6[INET6_ADDRSTRLEN];
-	char buf4[INET_ADDRSTRLEN];
-	struct nl_addr *nl;
-	struct in6_addr *addr6 = NULL;
-	struct in_addr *addr4 = NULL;
-	int prefixlen = 0;
-	const char *sf = "UNSPEC";
-	int family = rtnl_route_get_family (route);
-
-	memset (buf6, 0, sizeof (buf6));
-	memset (buf4, 0, sizeof (buf4));
-	nl = rtnl_route_get_dst (route);
-	if (nl) {
-		if (nl_addr_get_family (nl) == AF_INET) {
-			addr4 = nl_addr_get_binary_addr (nl);
-			if (addr4)
-				inet_ntop (AF_INET, addr4, &buf4[0], sizeof (buf4));
-		} else if (nl_addr_get_family (nl) == AF_INET6) {
-			addr6 = nl_addr_get_binary_addr (nl);
-			if (addr6)
-				inet_ntop (AF_INET6, addr6, &buf6[0], sizeof (buf6));
-		}
-		prefixlen = nl_addr_get_prefixlen (nl);
-	}
-
-	if (family == AF_INET)
-		sf = "INET";
-	else if (family == AF_INET6)
-		sf = "INET6";
-
-	nm_log_dbg (LOGD_IP4 | LOGD_IP6, "  route idx %d family %s (%d) addr %s/%d",
-	            rtnl_route_get_oif (route),
-	            sf, family,
-	            strlen (buf4) ? buf4 : (strlen (buf6) ? buf6 : "<unknown>"),
-	            prefixlen);
+	g_return_val_if_fail (ifindex > 0, FALSE);
+	return sync_addresses (ifindex, family, NULL, 0);
 }
 
-typedef struct {
-	const char *iface;
-	int iface_idx;
-	int family;
-} RouteCheckData;
 
-static void
-check_one_route (struct nl_object *object, void *user_data)
+static struct rtnl_route *
+delete_one_route (struct rtnl_route *route,
+                  struct nl_addr *dst,
+                  const char *iface,
+                  gpointer user_data)
 {
-	RouteCheckData *data = (RouteCheckData *) user_data;
-	struct rtnl_route *route = (struct rtnl_route *) object;
-	int err;
-	guint32 log_level = LOGD_IP4 | LOGD_IP6;
-
-	if (nm_logging_level_enabled (LOGL_DEBUG))
-		dump_route (route);
-
-	/* Delete all routes from this interface */
-	if (rtnl_route_get_oif (route) != data->iface_idx)
-		return;
-	if (data->family && rtnl_route_get_family (route) != data->family)
-		return;
-
-	/* We don't want to flush IPv6 link-local routes that may exist on the
-	 * the interface since the LL address and routes should normally stay
-	 * assigned all the time.
-	 */
-	if (   (data->family == AF_INET6 || data->family == AF_UNSPEC)
-	    && (rtnl_route_get_family (route) == AF_INET6)) {
-		struct nl_addr *nl;
-		struct in6_addr *addr = NULL;
-
-		nl = rtnl_route_get_dst (route);
-		if (nl)
-			addr = nl_addr_get_binary_addr (nl);
-
-		if (addr) {
-			if (   IN6_IS_ADDR_LINKLOCAL (addr)
-			    || IN6_IS_ADDR_MC_LINKLOCAL (addr)
-			    || (IN6_IS_ADDR_MULTICAST (addr) && (nl_addr_get_prefixlen (nl) == 8)))
-				return;
-		}
-	}
+	guint32 log_level = GPOINTER_TO_UINT (user_data);
 
-	if (data->family == AF_INET)
-		log_level = LOGD_IP4;
-	else if (data->family == AF_INET6)
-		log_level = LOGD_IP6;
 	nm_log_dbg (log_level, "   deleting route");
+	if (!nm_netlink_route_delete (route))
+		nm_log_err (LOGD_DEVICE, "(%s): failed to delete route", iface);
 
-	err = rtnl_route_del (nm_netlink_get_default_handle (), route, 0);
-	if (err < 0 && (err != -ERANGE)) {
-		nm_log_err (LOGD_DEVICE,
-		            "(%s): error %d returned from rtnl_route_del(): %s",
-		            data->iface, err, nl_geterror ());
-	}
+	return NULL;
 }
 
-static void flush_routes (int ifindex, const char *iface, int family)
+/**
+ * nm_system_iface_flush_routes:
+ * @ifindex: interface index
+ * @family: address family, i.e. AF_INET, AF_INET6, or AF_UNSPEC
+ *
+ * Flush all network addresses associated with a network device.
+ *
+ * Returns: %TRUE on success, %FALSE on failure
+ **/
+gboolean
+nm_system_iface_flush_routes (int ifindex, int family)
 {
-	RouteCheckData check_data;
 	guint32 log_level = LOGD_IP4 | LOGD_IP6;
 	const char *sf = "UNSPEC";
+	char *iface;
 
-	g_return_if_fail (iface != NULL);
+	g_return_val_if_fail (ifindex > 0, FALSE);
 
-	if (ifindex < 0) {
-		ifindex = nm_netlink_iface_to_index (iface);
-		if (ifindex < 0) {
-			nm_log_dbg (LOGD_DEVICE, "(%s) failed to lookup interface index", iface);
-			return;
-		}
-	}
+	iface = nm_netlink_index_to_iface (ifindex);
+	g_return_val_if_fail (iface != NULL, FALSE);
 
 	if (family == AF_INET) {
 		log_level = LOGD_IP4;
@@ -1361,104 +1144,61 @@ static void flush_routes (int ifindex, const char *iface, int family)
 	nm_log_dbg (log_level, "(%s): flushing routes ifindex %d family %s (%d)",
 	            iface, ifindex, sf, family);
 
-	memset (&check_data, 0, sizeof (check_data));
-	check_data.iface = iface;
-	check_data.iface_idx = ifindex;
-	check_data.family = family;
-	foreach_route (check_one_route, &check_data);
-}
-
-/*
- * nm_system_device_flush_routes
- *
- * Flush all network addresses associated with a network device
- *
- */
-void nm_system_device_flush_routes (NMDevice *dev, int family)
-{
-	g_return_if_fail (dev != NULL);
-
-	flush_routes (nm_device_get_ip_ifindex (dev),
-	              nm_device_get_ip_iface (dev),
-	              family);
-}
+	/* We don't want to flush IPv6 link-local routes that may exist on the
+	 * the interface since the LL address and routes should normally stay
+	 * assigned all the time.
+	 */
+	nm_netlink_foreach_route (ifindex, family, RT_SCOPE_UNIVERSE, TRUE, delete_one_route, GUINT_TO_POINTER (log_level));
 
-/*
- * nm_system_device_flush_routes_with_iface
- *
- * Flush all routes associated with a network device.  'family' is an
- * address family, either AF_INET, AF_INET6, or AF_UNSPEC.
- *
- */
-void nm_system_device_flush_routes_with_iface (const char *iface, int family)
-{
-	flush_routes (-1, iface, family);
+	g_free (iface);
+	return TRUE;
 }
 
-typedef struct {
-	struct rtnl_route *route;
-	NMIP4Config *config;
-	int iface;
-} SetPriorityInfo;
-
-static void
-find_route (struct nl_object *object, gpointer user_data)
+static struct rtnl_route *
+find_route (struct rtnl_route *route,
+            struct nl_addr *dst,
+            const char *iface,
+            gpointer user_data)
 {
-	struct rtnl_route *route = (struct rtnl_route *) object;
-	SetPriorityInfo *info = (SetPriorityInfo *) user_data;
-	struct nl_addr *dst;
+	NMIP4Config *config = user_data;
 	struct in_addr *dst_addr;
 	int num;
 	int i;
 
-	if (info->route ||
-	    rtnl_route_get_oif (route) != info->iface ||
-	    rtnl_route_get_scope (route) != RT_SCOPE_LINK)
-		return;
-
-	dst = rtnl_route_get_dst (route);
-	if (nl_addr_get_family (dst) != AF_INET)
-		return;
+	if (dst && (nl_addr_get_family (dst) != AF_INET))
+		return NULL;
 
+	/* Find the first route that handles a subnet of at least one of the
+	 * device's IPv4 addresses.
+	 */
 	dst_addr = nl_addr_get_binary_addr (dst);
-	num = nm_ip4_config_get_num_addresses (info->config);
+	num = nm_ip4_config_get_num_addresses (config);
 	for (i = 0; i < num; i++) {
-		NMIP4Address *addr = nm_ip4_config_get_address (info->config, i);
+		NMIP4Address *addr = nm_ip4_config_get_address (config, i);
 		guint32 prefix = nm_ip4_address_get_prefix (addr);
 		guint32 address = nm_ip4_address_get_address (addr);
 
-		if (prefix == nl_addr_get_prefixlen (dst) &&
-		    (address & nm_utils_ip4_prefix_to_netmask (prefix)) == dst_addr->s_addr) {
-
-			/* Ref the route so it sticks around after the cache is cleared */
-			rtnl_route_get (route);
-			info->route = route;
-			break;
-		}
+		if (   prefix == nl_addr_get_prefixlen (dst)
+		    && (address & nm_utils_ip4_prefix_to_netmask (prefix)) == dst_addr->s_addr)
+			return route;
 	}
+	return NULL;
 }
 
 static void
-nm_system_device_set_priority (const char *iface,
-						 NMIP4Config *config,
-						 int priority)
+nm_system_device_set_priority (int ifindex,
+                               NMIP4Config *config,
+                               int priority)
 {
-	SetPriorityInfo info;
-
-	info.route = NULL;
-	info.config = config;
-	info.iface = nm_netlink_iface_to_index (iface);
-	g_return_if_fail (info.iface >= 0);
-
-	foreach_route (find_route, &info);
-	if (info.route) {
-		struct nl_handle *nlh;
+	struct nl_sock *nlh;
+	struct rtnl_route *found;
 
+	found = nm_netlink_foreach_route (ifindex, AF_INET, RT_SCOPE_LINK, FALSE,  find_route, config);
+	if (found) {
 		nlh = nm_netlink_get_default_handle ();
-		rtnl_route_del (nlh, info.route, 0);
-
-		rtnl_route_set_prio (info.route, priority);
-		rtnl_route_add (nlh, info.route, 0);
-		rtnl_route_put (info.route);
+		nm_netlink_route_delete (found);
+		rtnl_route_set_priority (found, priority);
+		rtnl_route_add (nlh, found, 0);
+		rtnl_route_put (found);
 	}
 }
diff --git a/src/nm-system.h b/src/nm-system.h
index 094f40ef..ae4e7d91 100644
--- a/src/nm-system.h
+++ b/src/nm-system.h
@@ -35,33 +35,31 @@
  * implemented in the backend files in backends/ directory
  */
 
-void			nm_system_device_flush_routes				(NMDevice *dev, int family);
-void			nm_system_device_flush_routes_with_iface	(const char *iface, int family);
+gboolean        nm_system_iface_flush_routes         (int ifindex, int family);
 
-gboolean		nm_system_replace_default_ip4_route   (const char *iface,
+gboolean		nm_system_replace_default_ip4_route   (int ifindex,
                                                        guint32 gw,
                                                        guint32 mss);
 
-gboolean		nm_system_replace_default_ip6_route   (const char *iface,
+gboolean		nm_system_replace_default_ip6_route   (int ifindex,
                                                        const struct in6_addr *gw);
 
-gboolean		nm_system_replace_default_ip4_route_vpn (const char *iface,
+gboolean		nm_system_replace_default_ip4_route_vpn (int ifindex,
                                                          guint32 ext_gw,
                                                          guint32 int_gw,
                                                          guint32 mss,
-                                                         const char *parent_iface,
+                                                         int parent_ifindex,
                                                          guint32 parent_mss);
 
 struct rtnl_route *nm_system_add_ip4_vpn_gateway_route (NMDevice *parent_device, NMIP4Config *vpn_config);
 
 
-void			nm_system_device_flush_addresses			(NMDevice *dev, int family);
-void			nm_system_device_flush_addresses_with_iface	(const char *iface);
+gboolean        nm_system_iface_flush_addresses         (int ifindex, int family);
 
 void			nm_system_enable_loopback				(void);
 void			nm_system_update_dns					(void);
 
-gboolean		nm_system_apply_ip4_config              (const char *iface,
+gboolean		nm_system_apply_ip4_config              (int ifindex,
                                                          NMIP4Config *config,
                                                          int priority,
                                                          NMIP4ConfigCompareFlags flags);
@@ -76,22 +74,19 @@ int             nm_system_set_ip6_route                 (int ifindex,
                                                          int table,
                                                          struct rtnl_route **out_route);
 
-gboolean		nm_system_apply_ip6_config              (const char *iface,
+gboolean		nm_system_apply_ip6_config              (int ifindex,
                                                          NMIP6Config *config,
                                                          int priority,
                                                          NMIP6ConfigCompareFlags flags);
 
-gboolean		nm_system_device_set_up_down				(NMDevice *dev,
-                                                             gboolean up,
-                                                             gboolean *no_firmware);
-gboolean		nm_system_device_set_up_down_with_iface		(const char *iface,
-                                                             gboolean up,
-                                                             gboolean *no_firmware);
+gboolean        nm_system_iface_set_up                  (int ifindex,
+                                                         gboolean up,
+                                                         gboolean *no_firmware);
 
-gboolean        nm_system_device_is_up (NMDevice *device);
-gboolean        nm_system_device_is_up_with_iface (const char *iface);
+gboolean        nm_system_iface_is_up                   (int ifindex);
 
-gboolean		nm_system_device_set_mtu (const char *iface, guint32 mtu);
-gboolean		nm_system_device_set_mac (const char *iface, const struct ether_addr *mac);
+gboolean		nm_system_iface_set_mtu                 (int ifindex, guint32 mtu);
+
+gboolean		nm_system_iface_set_mac                 (int ifindex, const struct ether_addr *mac);
 
 #endif
diff --git a/src/nm-udev-manager.c b/src/nm-udev-manager.c
index 72501c28..e8c6b822 100644
--- a/src/nm-udev-manager.c
+++ b/src/nm-udev-manager.c
@@ -195,78 +195,50 @@ recheck_killswitches (NMUdevManager *self)
 	NMUdevManagerPrivate *priv = NM_UDEV_MANAGER_GET_PRIVATE (self);
 	GSList *iter;
 	RfKillState poll_states[RFKILL_TYPE_MAX];
+	RfKillState platform_states[RFKILL_TYPE_MAX];
 	gboolean platform_checked[RFKILL_TYPE_MAX];
 	int i;
 
 	/* Default state is unblocked */
 	for (i = 0; i < RFKILL_TYPE_MAX; i++) {
 		poll_states[i] = RFKILL_UNBLOCKED;
+		platform_states[i] = RFKILL_UNBLOCKED;
 		platform_checked[i] = FALSE;
 	}
 
-	/* Perform two passes here; the first pass is for non-platform switches,
-	 * which typically if hardkilled cannot be changed except by a physical
-	 * hardware switch.  The second pass checks platform killswitches, which
-	 * take precedence over device killswitches, because typically platform
-	 * killswitches control device killswitches.  That is, a hardblocked device
-	 * switch can often be unblocked by a platform switch.  Thus if we have
-	 * a hardblocked device switch and a softblocked platform switch, the
-	 * combined state should be softblocked since the platform switch can be
-	 * unblocked to change the device switch.
-	 */
-
-	/* Device switches first */
+	/* Poll the states of all killswitches */
 	for (iter = priv->killswitches; iter; iter = g_slist_next (iter)) {
 		Killswitch *ks = iter->data;
 		GUdevDevice *device;
 		RfKillState dev_state;
 		int sysfs_state;
 
-		if (ks->platform == FALSE) {
-			device = g_udev_client_query_by_subsystem_and_name (priv->client, "rfkill", ks->name);
-			if (device) {
-				sysfs_state = g_udev_device_get_property_as_int (device, "RFKILL_STATE");
-				dev_state = sysfs_state_to_nm_state (sysfs_state);
+		device = g_udev_client_query_by_subsystem_and_name (priv->client, "rfkill", ks->name);
+		if (device) {
+			sysfs_state = g_udev_device_get_property_as_int (device, "RFKILL_STATE");
+			dev_state = sysfs_state_to_nm_state (sysfs_state);
+			if (ks->platform == FALSE) {
 				if (dev_state > poll_states[ks->rtype])
 					poll_states[ks->rtype] = dev_state;
-				g_object_unref (device);
-			}
-		}
-	}
-
-	/* Platform switches next; their state overwrites device state */
-	for (iter = priv->killswitches; iter; iter = g_slist_next (iter)) {
-		Killswitch *ks = iter->data;
-		GUdevDevice *device;
-		RfKillState dev_state;
-		int sysfs_state;
-
-		if (ks->platform == TRUE) {
-			device = g_udev_client_query_by_subsystem_and_name (priv->client, "rfkill", ks->name);
-			if (device) {
-				sysfs_state = g_udev_device_get_property_as_int (device, "RFKILL_STATE");
-				dev_state = sysfs_state_to_nm_state (sysfs_state);
-
-				if (platform_checked[ks->rtype] == FALSE) {
-					/* Overwrite device state with platform state for first
-					 * platform switch found.
-					 */
-					poll_states[ks->rtype] = dev_state;
-					platform_checked[ks->rtype] = TRUE;
-				} else {
-					/* If there are multiple platform switches of the same type,
-					 * take the "worst" state for all of that type.
-					 */
-					if (dev_state > poll_states[ks->rtype])
-						poll_states[ks->rtype] = dev_state;
-				}
-				g_object_unref (device);
+			} else {
+				platform_checked[ks->rtype] = TRUE;
+				if (dev_state > platform_states[ks->rtype])
+					platform_states[ks->rtype] = dev_state;
 			}
+			g_object_unref (device);
 		}
 	}
 
 	/* Log and emit change signal for final rfkill states */
 	for (i = 0; i < RFKILL_TYPE_MAX; i++) {
+		if (platform_checked[i] == TRUE) {
+			/* blocked platform switch state overrides device state, otherwise
+			 * let the device state stand. (bgo #655773)
+			 */
+			if (platform_states[i] != RFKILL_UNBLOCKED)
+				poll_states[i] = platform_states[i];
+		}
+
 		if (poll_states[i] != priv->rfkill_states[i]) {
 			nm_log_dbg (LOGD_RFKILL, "%s rfkill state now '%s'",
 			            rfkill_type_to_desc (i),
@@ -515,7 +487,7 @@ net_add (NMUdevManager *self, GUdevDevice *device)
 	 * FIXME: use something other than interface name to detect CTC here.
 	 */
 	if ((etype != 1) && (is_ctc == FALSE)) {
-		nm_log_dbg (LOGD_HW, "ignoring interface with type %d", etype);
+		nm_log_dbg (LOGD_HW, "(%s): ignoring interface with type %d", iface, etype);
 		return;
 	}
 
@@ -528,7 +500,7 @@ net_add (NMUdevManager *self, GUdevDevice *device)
 	 */
 	tmp = g_udev_device_get_property (device, "DEVTYPE");
 	if (g_strcmp0 (tmp, "wwan") == 0) {
-		nm_log_dbg (LOGD_HW, "ignoring interface with devtype '%s'", tmp);
+		nm_log_dbg (LOGD_HW, "(%s): ignoring interface with devtype '%s'", iface, tmp);
 		return;
 	}
 
@@ -539,7 +511,7 @@ net_add (NMUdevManager *self, GUdevDevice *device)
 	if (g_strcmp0 (tmp, "0421") == 0) { /* Nokia vendor ID */
 		tmp = g_udev_device_get_property (device, "ID_MODEL");
 		if (tmp && (strstr (tmp, "PC-Suite") || strstr (tmp, "PC Suite"))) {
-			nm_log_dbg (LOGD_HW, "ignoring Nokia PC-Suite ethernet interface");
+			nm_log_dbg (LOGD_HW, "(%s): ignoring Nokia PC-Suite ethernet interface", iface);
 			return;
 		}
 	}
diff --git a/src/nm-wifi-ap.c b/src/nm-wifi-ap.c
index f9c66473..be836df0 100644
--- a/src/nm-wifi-ap.c
+++ b/src/nm-wifi-ap.c
@@ -15,7 +15,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * Copyright (C) 2004 - 2010 Red Hat, Inc.
+ * Copyright (C) 2004 - 2011 Red Hat, Inc.
  * Copyright (C) 2006 - 2008 Novell, Inc.
  */
 
@@ -33,6 +33,7 @@
 #include "wpa.h"
 #include "nm-properties-changed-signal.h"
 #include "nm-setting-wireless.h"
+#include "nm-glib-compat.h"
 
 #include "nm-access-point-glue.h"
 
@@ -59,10 +60,6 @@ typedef struct
 	gboolean			fake;	/* Whether or not the AP is from a scan */
 	gboolean			broadcast;	/* Whether or not the AP is broadcasting (hidden) */
 	glong				last_seen;	/* Last time the AP was seen in a scan in seconds */
-
-	/* Things from user prefs/NetworkManagerInfo */
-	GTimeVal			timestamp;
-	GSList *			user_addresses;
 } NMAccessPointPrivate;
 
 #define NM_AP_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_AP, NMAccessPointPrivate))
@@ -112,8 +109,6 @@ finalize (GObject *object)
 	g_free (priv->dbus_path);
 	if (priv->ssid)
 		g_byte_array_free (priv->ssid, TRUE);
-	g_slist_foreach (priv->user_addresses, (GFunc)g_free, NULL);
-	g_slist_free (priv->user_addresses);
 
 	G_OBJECT_CLASS (nm_ap_parent_class)->finalize (object);
 }
@@ -147,7 +142,7 @@ set_property (GObject *object, guint prop_id,
 		nm_ap_set_max_bitrate (ap, g_value_get_uint (value));
 		break;
 	case PROP_STRENGTH:
-		nm_ap_set_strength (ap, g_value_get_char (value));
+		nm_ap_set_strength (ap, g_value_get_schar (value));
 		break;
 	case PROP_HW_ADDRESS:
 		break;
@@ -197,7 +192,7 @@ get_property (GObject *object, guint prop_id,
 		g_value_set_uint (value, priv->max_bitrate);
 		break;
 	case PROP_STRENGTH:
-		g_value_set_char (value, priv->strength);
+		g_value_set_schar (value, priv->strength);
 		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -757,8 +752,7 @@ error:
 #define MAC_ARG(x) ((guint8*)(x))[0],((guint8*)(x))[1],((guint8*)(x))[2],((guint8*)(x))[3],((guint8*)(x))[4],((guint8*)(x))[5]
 
 void
-nm_ap_print_self (NMAccessPoint *ap,
-                  const char * prefix)
+nm_ap_dump (NMAccessPoint *ap, const char *prefix)
 {
 	NMAccessPointPrivate *priv;
 
@@ -773,7 +767,6 @@ nm_ap_print_self (NMAccessPoint *ap,
 	            ap);
 	nm_log_dbg (LOGD_WIFI_SCAN, "    BSSID     " MAC_FMT, MAC_ARG (priv->address.ether_addr_octet));
 	nm_log_dbg (LOGD_WIFI_SCAN, "    mode      %d", priv->mode);
-	nm_log_dbg (LOGD_WIFI_SCAN, "    timestamp %ld", priv->timestamp.tv_sec);
 	nm_log_dbg (LOGD_WIFI_SCAN, "    flags     0x%X", priv->flags);
 	nm_log_dbg (LOGD_WIFI_SCAN, "    wpa flags 0x%X", priv->wpa_flags);
 	nm_log_dbg (LOGD_WIFI_SCAN, "    rsn flags 0x%X", priv->rsn_flags);
@@ -791,37 +784,6 @@ nm_ap_get_dbus_path (NMAccessPoint *ap)
 	return NM_AP_GET_PRIVATE (ap)->dbus_path;
 }
 
-
-/*
- * Get/set functions for timestamp
- *
- */
-const GTimeVal *nm_ap_get_timestamp (const NMAccessPoint *ap)
-{
-	g_return_val_if_fail (NM_IS_AP (ap), 0);
-
-	return (&NM_AP_GET_PRIVATE (ap)->timestamp);
-}
-
-void nm_ap_set_timestamp (NMAccessPoint *ap, glong sec, glong usec)
-{
-	NMAccessPointPrivate *priv;
-
-	g_return_if_fail (NM_IS_AP (ap));
-
-	priv = NM_AP_GET_PRIVATE (ap);
-
-	priv->timestamp.tv_sec = sec;
-	priv->timestamp.tv_usec = usec;
-}
-
-void nm_ap_set_timestamp_via_timestamp (NMAccessPoint *ap, const GTimeVal *timestamp)
-{
-	g_return_if_fail (NM_IS_AP (ap));
-
-	NM_AP_GET_PRIVATE (ap)->timestamp = *timestamp;
-}
-
 /*
  * Get/set functions for ssid
  *
@@ -1151,57 +1113,6 @@ void nm_ap_set_last_seen (NMAccessPoint *ap, const glong last_seen)
 	NM_AP_GET_PRIVATE (ap)->last_seen = last_seen;
 }
 
-
-/*
- * Get/Set functions for user address list
- *
- * The internal address list is always "owned" by the AP and
- * the list returned by nm_ap_get_user_addresses() is a deep copy.
- * Likewise, when setting the list, a deep copy is made for the
- * ap's actual list.
- *
- */
-GSList *nm_ap_get_user_addresses (const NMAccessPoint *ap)
-{
-	GSList	*new = NULL;
-	GSList	*elt = NULL;
-
-	g_return_val_if_fail (NM_IS_AP (ap), NULL);
-
-	for (elt = NM_AP_GET_PRIVATE (ap)->user_addresses; elt; elt = g_slist_next (elt))
-	{
-		if (elt->data)
-			new = g_slist_append (new, g_strdup (elt->data));
-	}
-
-	/* Return a _deep__copy_ of the address list */
-	return new;
-}
-
-void nm_ap_set_user_addresses (NMAccessPoint *ap, GSList *list)
-{
-	NMAccessPointPrivate *priv;
-	GSList	*elt = NULL;
-	GSList	*new = NULL;
-
-	g_return_if_fail (NM_IS_AP (ap));
-
-	priv = NM_AP_GET_PRIVATE (ap);
-
-	/* Free existing list */
-	g_slist_foreach (priv->user_addresses, (GFunc) g_free, NULL);
-
-	/* Copy new list and set as our own */
-	for (elt = list; elt; elt = g_slist_next (elt))
-	{
-		if (elt->data)
-			new = g_slist_append (new, g_ascii_strup (elt->data, -1));
-	}
-
-	priv->user_addresses = new;
-}
-
-
 gboolean
 nm_ap_check_compatible (NMAccessPoint *self,
                         NMConnection *connection)
diff --git a/src/nm-wifi-ap.h b/src/nm-wifi-ap.h
index 95514ba6..31100d34 100644
--- a/src/nm-wifi-ap.h
+++ b/src/nm-wifi-ap.h
@@ -24,7 +24,6 @@
 
 #include <glib.h>
 #include <glib-object.h>
-#include <time.h>
 #include "NetworkManager.h"
 #include "nm-connection.h"
 
@@ -64,9 +63,6 @@ NMAccessPoint * nm_ap_new_fake_from_connection (NMConnection *connection);
 void            nm_ap_export_to_dbus    (NMAccessPoint *ap);
 
 const char *		nm_ap_get_dbus_path (NMAccessPoint *ap);
-const GTimeVal *	nm_ap_get_timestamp				(const NMAccessPoint *ap);
-void				nm_ap_set_timestamp				(NMAccessPoint *ap, glong sec, glong usec);
-void				nm_ap_set_timestamp_via_timestamp	(NMAccessPoint *ap, const GTimeVal *timestamp);
 
 const GByteArray *	nm_ap_get_ssid (const NMAccessPoint * ap);
 void				nm_ap_set_ssid (NMAccessPoint * ap, const GByteArray * ssid);
@@ -104,9 +100,6 @@ void				nm_ap_set_broadcast		(NMAccessPoint *ap, gboolean broadcast);
 glong			nm_ap_get_last_seen		(const NMAccessPoint *ap);
 void				nm_ap_set_last_seen		(NMAccessPoint *ap, const glong last_seen);
 
-GSList *			nm_ap_get_user_addresses	(const NMAccessPoint *ap);
-void				nm_ap_set_user_addresses (NMAccessPoint *ap, GSList *list);
-
 gboolean			nm_ap_check_compatible (NMAccessPoint *self,
                                             NMConnection *connection);
 
@@ -119,6 +112,6 @@ NMAccessPoint *     nm_ap_match_in_list (NMAccessPoint *find_ap,
                                          GSList *ap_list,
                                          gboolean strict_match);
 
-void				nm_ap_print_self (NMAccessPoint *ap, const char * prefix);
+void				nm_ap_dump (NMAccessPoint *ap, const char *prefix);
 
 #endif /* NM_ACCESS_POINT_H */
diff --git a/src/ppp-manager/Makefile.in b/src/ppp-manager/Makefile.in
index 13c60b41..6971408f 100644
--- a/src/ppp-manager/Makefile.in
+++ b/src/ppp-manager/Makefile.in
@@ -222,8 +222,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/src/ppp-manager/nm-ppp-manager.c b/src/ppp-manager/nm-ppp-manager.c
index e863aaba..3546f8d7 100644
--- a/src/ppp-manager/nm-ppp-manager.c
+++ b/src/ppp-manager/nm-ppp-manager.c
@@ -32,7 +32,7 @@
 #include <sys/socket.h>
 #include <sys/ioctl.h>
 #include <asm/types.h>
-#include <net/if.h>
+#include <linux/if.h>
 #include <sys/stat.h>
 
 #include <linux/ppp_defs.h>
@@ -875,6 +875,8 @@ create_pppd_cmd_line (NMPPPManager *self,
 		nm_cmd_line_add_string (cmd, "refuse-mschap-v2");
 	if (nm_setting_ppp_get_nobsdcomp (setting))
 		nm_cmd_line_add_string (cmd, "nobsdcomp");
+	if (nm_setting_ppp_get_no_vj_comp (setting))
+		nm_cmd_line_add_string (cmd, "novj");
 	if (nm_setting_ppp_get_nodeflate (setting))
 		nm_cmd_line_add_string (cmd, "nodeflate");
 	if (nm_setting_ppp_get_require_mppe (setting))
diff --git a/src/settings/Makefile.in b/src/settings/Makefile.in
index 980f35cb..09da869d 100644
--- a/src/settings/Makefile.in
+++ b/src/settings/Makefile.in
@@ -248,8 +248,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/src/settings/nm-settings-connection.c b/src/settings/nm-settings-connection.c
index 4b3a56cd..cdad8325 100644
--- a/src/settings/nm-settings-connection.c
+++ b/src/settings/nm-settings-connection.c
@@ -84,15 +84,27 @@ typedef struct {
 
 	NMDBusManager *dbus_mgr;
 	NMAgentManager *agent_mgr;
+	NMSessionMonitor *session_monitor;
+	guint session_changed_id;
 
 	GSList *pending_auths; /* List of pending authentication requests */
-	NMConnection *secrets;
 	gboolean visible; /* Is this connection is visible by some session? */
-
 	GSList *reqs;  /* in-progress secrets requests */
 
-	NMSessionMonitor *session_monitor;
-	guint session_changed_id;
+	/* Caches secrets from on-disk connections; were they not cached any
+	 * call to nm_connection_clear_secrets() wipes them out and we'd have
+	 * to re-read them from disk which defeats the purpose of having the
+	 * connection in-memory at all.
+	 */
+	NMConnection *system_secrets;
+
+	/* Caches secrets from agents during the activation process; if new system
+	 * secrets are returned from an agent, they get written out to disk,
+	 * triggering a re-read of the connection, which reads only system
+	 * secrets, and would wipe out any agent-owned or not-saved secrets the
+	 * agent also returned.
+	 */
+	NMConnection *agent_secrets;
 
 	guint64 timestamp;   /* Up-to-date timestamp of connection use */
 	GHashTable *seen_bssids; /* Up-to-date BSSIDs that's been seen for the connection */
@@ -294,57 +306,67 @@ nm_settings_connection_check_permission (NMSettingsConnection *self,
 
 /**************************************************************/
 
-static void
-only_system_secrets_cb (NMSetting *setting,
-                        const char *key,
-                        const GValue *value,
-                        GParamFlags flags,
-                        gpointer user_data)
+static gboolean
+secrets_filter_cb (NMSetting *setting,
+                   const char *secret,
+                   NMSettingSecretFlags flags,
+                   gpointer user_data)
 {
-	if (flags & NM_SETTING_PARAM_SECRET) {
-		NMSettingSecretFlags secret_flags = NM_SETTING_SECRET_FLAG_NONE;
+	NMSettingSecretFlags filter_flags = GPOINTER_TO_UINT (user_data);
 
-		/* VPNs are special; need to handle each secret separately */
-		if (NM_IS_SETTING_VPN (setting) && !strcmp (key, NM_SETTING_VPN_SECRETS)) {
-			GHashTableIter iter;
-			const char *secret_name = NULL;
+	/* Returns TRUE to remove the secret */
 
-			g_hash_table_iter_init (&iter, (GHashTable *) g_value_get_boxed (value));
-			while (g_hash_table_iter_next (&iter, (gpointer *) &secret_name, NULL)) {
-				secret_flags = NM_SETTING_SECRET_FLAG_NONE;
-				nm_setting_get_secret_flags (setting, secret_name, &secret_flags, NULL);
-				if (secret_flags != NM_SETTING_SECRET_FLAG_NONE)
-					nm_setting_vpn_remove_secret (NM_SETTING_VPN (setting), secret_name);
-			}
-		} else {
-			nm_setting_get_secret_flags (setting, key, &secret_flags, NULL);
-			if (secret_flags != NM_SETTING_SECRET_FLAG_NONE)
-				g_object_set (G_OBJECT (setting), key, NULL, NULL);
-		}
-	}
+	/* Can't use bitops with SECRET_FLAG_NONE so handle that specifically */
+	if (   (flags == NM_SETTING_SECRET_FLAG_NONE)
+	    && (filter_flags == NM_SETTING_SECRET_FLAG_NONE))
+		return FALSE;
+
+	/* Otherwise if the secret has at least one of the desired flags keep it */
+	return (flags & filter_flags) ? FALSE : TRUE;
 }
 
 static void
-update_secrets_cache (NMSettingsConnection *self)
+update_system_secrets_cache (NMSettingsConnection *self)
 {
 	NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self);
 
-	if (priv->secrets)
-		g_object_unref (priv->secrets);
-	priv->secrets = nm_connection_duplicate (NM_CONNECTION (self));
+	if (priv->system_secrets)
+		g_object_unref (priv->system_secrets);
+	priv->system_secrets = nm_connection_duplicate (NM_CONNECTION (self));
 
 	/* Clear out non-system-owned and not-saved secrets */
-	nm_connection_for_each_setting_value (priv->secrets, only_system_secrets_cb, NULL);
+	nm_connection_clear_secrets_with_flags (priv->system_secrets,
+	                                        secrets_filter_cb,
+	                                        GUINT_TO_POINTER (NM_SETTING_SECRET_FLAG_NONE));
 }
 
-static gboolean
-clear_system_secrets (GHashTableIter *iter,
-                      NMSettingSecretFlags flags,
-                      gpointer user_data)
+static void
+update_agent_secrets_cache (NMSettingsConnection *self, NMConnection *new)
 {
-	if (flags == NM_SETTING_SECRET_FLAG_NONE)
-		g_hash_table_iter_remove (iter);
-	return TRUE;
+	NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self);
+	NMSettingSecretFlags filter_flags = NM_SETTING_SECRET_FLAG_NOT_SAVED | NM_SETTING_SECRET_FLAG_AGENT_OWNED;
+
+	if (priv->agent_secrets)
+		g_object_unref (priv->agent_secrets);
+	priv->agent_secrets = nm_connection_duplicate (new ? new : NM_CONNECTION (self));
+
+	/* Clear out non-system-owned secrets */
+	nm_connection_clear_secrets_with_flags (priv->agent_secrets,
+	                                        secrets_filter_cb,
+	                                        GUINT_TO_POINTER (filter_flags));
+}
+
+static void
+secrets_cleared_cb (NMSettingsConnection *self)
+{
+	NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self);
+
+	/* Clear agent secrets when connection's secrets are cleared since agent
+	 * secrets are transient.
+	 */
+	if (priv->agent_secrets)
+		g_object_unref (priv->agent_secrets);
+	priv->agent_secrets = NULL;
 }
 
 /* Update the settings of this connection to match that of 'new', taking care to
@@ -356,7 +378,7 @@ nm_settings_connection_replace_settings (NMSettingsConnection *self,
                                          GError **error)
 {
 	NMSettingsConnectionPrivate *priv;
-	GHashTable *new_settings, *transient_secrets;
+	GHashTable *new_settings, *hash = NULL;
 	gboolean success = FALSE;
 
 	g_return_val_if_fail (self != NULL, FALSE);
@@ -366,37 +388,29 @@ nm_settings_connection_replace_settings (NMSettingsConnection *self,
 
 	priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self);
 
-	/* Replacing the settings might replace transient secrets, such as when
-	 * a user agent returns secrets, which might trigger the connection to be
-	 * written out, which triggers an inotify event to re-read and update the
-	 * connection, which, if we're not careful, could wipe out the transient
-	 * secrets the user agent just sent us.  Basically, only
-	 * nm_connection_clear_secrets() should wipe out transient secrets but
-	 * re-reading a connection from on-disk and updating our in-memory copy
-	 * should not.  Thus we preserve non-system-owned secrets here.
-	 */
-	transient_secrets = nm_connection_to_hash (NM_CONNECTION (self), NM_SETTING_HASH_FLAG_ONLY_SECRETS);
-	if (transient_secrets)
-		for_each_secret (NM_CONNECTION (self), transient_secrets, clear_system_secrets, NULL);
-
 	new_settings = nm_connection_to_hash (new, NM_SETTING_HASH_FLAG_ALL);
 	g_assert (new_settings);
 	if (nm_connection_replace_settings (NM_CONNECTION (self), new_settings, error)) {
-		/* Copy the connection to keep its secrets around even if NM
-		 * calls nm_connection_clear_secrets().
+		/* Cache the just-updated system secrets in case something calls
+		 * nm_connection_clear_secrets() and clears them.
 		 */
-		update_secrets_cache (self);
+		update_system_secrets_cache (self);
+		success = TRUE;
 
-		/* And add the transient secrets back */
-		if (transient_secrets)
-			nm_connection_update_secrets (NM_CONNECTION (self), NULL, transient_secrets, NULL);
+		/* Add agent and always-ask secrets back; they won't necessarily be
+		 * in the replacement connection data if it was eg reread from disk.
+		 */
+		if (priv->agent_secrets) {
+			hash = nm_connection_to_hash (priv->agent_secrets, NM_SETTING_HASH_FLAG_ONLY_SECRETS);
+			if (hash) {
+				success = nm_connection_update_secrets (NM_CONNECTION (self), NULL, hash, error);
+				g_hash_table_destroy (hash);
+			}
+		}
 
 		nm_settings_connection_recheck_visibility (self);
-		success = TRUE;
 	}
 	g_hash_table_destroy (new_settings);
-	if (transient_secrets)
-		g_hash_table_destroy (transient_secrets);
 	return success;
 }
 
@@ -550,6 +564,7 @@ do_delete (NMSettingsConnection *connection,
 	for_agents = nm_connection_duplicate (NM_CONNECTION (connection));
 	nm_connection_clear_secrets (for_agents);
 	nm_agent_manager_delete_secrets (priv->agent_mgr, for_agents, FALSE, 0);
+	g_object_unref (for_agents);
 
 	/* Remove timestamp from timestamps database file */
 	remove_entry_from_db (connection, "timestamps");
@@ -719,7 +734,7 @@ agent_secrets_done_cb (NMAgentManager *manager,
 
 	/* Update the connection with our existing secrets from backing storage */
 	nm_connection_clear_secrets (NM_CONNECTION (self));
-	hash = nm_connection_to_hash (priv->secrets, NM_SETTING_HASH_FLAG_ONLY_SECRETS);
+	hash = nm_connection_to_hash (priv->system_secrets, NM_SETTING_HASH_FLAG_ONLY_SECRETS);
 	if (!hash || nm_connection_update_secrets (NM_CONNECTION (self), setting_name, hash, &local)) {
 		/* Update the connection with the agent's secrets; by this point if any
 		 * system-owned secrets exist in 'secrets' the agent that provided them
@@ -730,7 +745,8 @@ agent_secrets_done_cb (NMAgentManager *manager,
 			/* Now that all secrets are updated, copy and cache new secrets, 
 			 * then save them to backing storage.
 			 */
-			update_secrets_cache (self);
+			update_system_secrets_cache (self);
+			update_agent_secrets_cache (self, NULL);
 
 			/* Only save secrets to backing storage if the agent returned any
 			 * new system secrets.  If it didn't, then the secrets are agent-
@@ -807,11 +823,9 @@ nm_settings_connection_get_secrets (NMSettingsConnection *self,
 	guint32 call_id = 0;
 
 	/* Use priv->secrets to work around the fact that nm_connection_clear_secrets()
-	 * will clear secrets on this object's settings.  priv->secrets should be
-	 * a complete copy of this object and kept in sync by
-	 * nm_settings_connection_replace_settings().
+	 * will clear secrets on this object's settings.
 	 */
-	if (!priv->secrets) {
+	if (!priv->system_secrets) {
 		g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
 		             "%s.%d - Internal error; secrets cache invalid.",
 		             __FILE__, __LINE__);
@@ -826,7 +840,7 @@ nm_settings_connection_get_secrets (NMSettingsConnection *self,
 		return 0;
 	}
 
-	existing_secrets = nm_connection_to_hash (priv->secrets, NM_SETTING_HASH_FLAG_ONLY_SECRETS);
+	existing_secrets = nm_connection_to_hash (priv->system_secrets, NM_SETTING_HASH_FLAG_ONLY_SECRETS);
 	call_id = nm_agent_manager_get_secrets (priv->agent_mgr,
 	                                        NM_CONNECTION (self),
 	                                        filter_by_uid,
@@ -1084,47 +1098,40 @@ impl_settings_connection_get_settings (NMSettingsConnection *self,
 	auth_start (self, context, NULL, get_settings_auth_cb, NULL);
 }
 
+typedef struct {
+	DBusGMethodInvocation *context;
+	NMAgentManager *agent_mgr;
+	gulong sender_uid;
+} UpdateInfo;
+
 static void
-con_update_cb (NMSettingsConnection *connection,
+con_update_cb (NMSettingsConnection *self,
                GError *error,
                gpointer user_data)
 {
-	DBusGMethodInvocation *context = user_data;
+	UpdateInfo *info = user_data;
+	NMConnection *for_agent;
 
 	if (error)
-		dbus_g_method_return_error (context, error);
-	else
-		dbus_g_method_return (context);
-}
-
-static void
-secrets_filter_cb (NMSetting *setting,
-                   const char *key,
-                   const GValue *value,
-                   GParamFlags flags,
-                   gpointer user_data)
-{
-	NMSettingSecretFlags filter_flags = GPOINTER_TO_UINT (user_data);
-	NMSettingSecretFlags secret_flags = NM_SETTING_SECRET_FLAG_NONE;
-	const char *secret_name = NULL;
-	GHashTableIter iter;
+		dbus_g_method_return_error (info->context, error);
+	else {
+		/* Dupe the connection so we can clear out non-agent-owned secrets,
+		 * as agent-owned secrets are the only ones we send back be saved.
+		 * Only send secrets to agents of the same UID that called update too.
+		 */
+		for_agent = nm_connection_duplicate (NM_CONNECTION (self));
+		nm_connection_clear_secrets_with_flags (for_agent,
+		                                        secrets_filter_cb,
+		                                        GUINT_TO_POINTER (NM_SETTING_SECRET_FLAG_AGENT_OWNED));
+		nm_agent_manager_save_secrets (info->agent_mgr, for_agent, TRUE, info->sender_uid);
+		g_object_unref (for_agent);
 
-	if (flags & NM_SETTING_PARAM_SECRET) {
-		if (NM_IS_SETTING_VPN (setting) && !strcmp (key, NM_SETTING_VPN_SECRETS)) {
-			/* VPNs are special; need to handle each secret separately */
-			g_hash_table_iter_init (&iter, (GHashTable *) g_value_get_boxed (value));
-			while (g_hash_table_iter_next (&iter, (gpointer) &secret_name, NULL)) {
-				secret_flags = NM_SETTING_SECRET_FLAG_NONE;
-				nm_setting_get_secret_flags (setting, secret_name, &secret_flags, NULL);
-				if (!(secret_flags & filter_flags))
-					nm_setting_vpn_remove_secret (NM_SETTING_VPN (setting), secret_name);
-			}
-		} else {
-			nm_setting_get_secret_flags (setting, key, &secret_flags, NULL);
-			if (!(secret_flags & filter_flags))
-				g_object_set (G_OBJECT (setting), key, NULL, NULL);
-		}
+		dbus_g_method_return (info->context);
 	}
+
+	g_object_unref (info->agent_mgr);
+	memset (info, 0, sizeof (*info));
+	g_free (info);
 }
 
 static void
@@ -1136,54 +1143,27 @@ update_auth_cb (NMSettingsConnection *self,
 {
 	NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self);
 	NMConnection *new_settings = data;
-	NMConnection *for_agent, *dup;
-	NMSettingSecretFlags filter_flags;
-	GHashTable *hash;
-	GError *local = NULL;
+	UpdateInfo *info;
 
 	if (error)
 		dbus_g_method_return_error (context, error);
 	else {
-		/* Cache the new secrets since they may get overwritten by the replace
-		 * when transient secrets are copied back.
+		info = g_malloc0 (sizeof (*info));
+		info->context = context;
+		info->agent_mgr = g_object_ref (priv->agent_mgr);
+		info->sender_uid = sender_uid;
+
+		/* Cache the new secrets from the agent, as stuff like inotify-triggered
+		 * changes to connection's backing config files will blow them away if
+		 * they're in the main connection.
 		 */
-		dup = nm_connection_duplicate (new_settings);
+		update_agent_secrets_cache (self, new_settings);
 
 		/* Update and commit our settings. */
 		nm_settings_connection_replace_and_commit (self,
-		                                           new_settings,
-		                                           con_update_cb,
-		                                           context);
-
-		/* Copy new agent secrets back to the connection */
-		filter_flags = NM_SETTING_SECRET_FLAG_AGENT_OWNED | NM_SETTING_SECRET_FLAG_NOT_SAVED;
-		nm_connection_for_each_setting_value (dup,
-		                                      secrets_filter_cb,
-		                                      GUINT_TO_POINTER (filter_flags));
-		hash = nm_connection_to_hash (dup, NM_SETTING_HASH_FLAG_ONLY_SECRETS);
-		g_object_unref (dup);
-
-		if (hash) {
-			if (!nm_connection_update_secrets (NM_CONNECTION (self), NULL, hash, &local)) {
-				nm_log_warn (LOGD_SETTINGS, "Failed to update connection secrets: (%d) %s",
-				             local ? local->code : -1,
-				             local && local->message ? local->message : "(unknown)");
-				g_clear_error (&local);
-			}
-			g_hash_table_destroy (hash);
-		}
-
-		/* Dupe the connection and clear out non-agent-owned secrets so we can
-		 * send the agent-owned ones to agents to be saved.  Only send them to
-		 * agents of the same UID as the Update() request sender.
-		 */
-		for_agent = nm_connection_duplicate (NM_CONNECTION (self));
-		filter_flags = NM_SETTING_SECRET_FLAG_AGENT_OWNED;
-		nm_connection_for_each_setting_value (for_agent,
-		                                      secrets_filter_cb,
-		                                      GUINT_TO_POINTER (filter_flags));
-		nm_agent_manager_save_secrets (priv->agent_mgr, for_agent, TRUE, sender_uid);
-		g_object_unref (for_agent);
+			                                       new_settings,
+			                                       con_update_cb,
+			                                       info);
 	}
 
 	g_object_unref (new_settings);
@@ -1345,16 +1325,11 @@ dbus_get_agent_secrets_cb (NMSettingsConnection *self,
 	if (error)
 		dbus_g_method_return_error (context, error);
 	else {
-		/* The connection's secrets will have been updated by the agent manager,
-		 * so we want to refresh the secrets cache.  Note that we will never save
-		 * new secrets to backing storage here because D-Bus initated requests will
-		 * never ask for completely new secrets from agents.  Thus system-owned
-		 * secrets should not have changed from backing storage.  We also don't
-		 * send agent-owned secrets back out to be saved since we assume the agent
-		 * that provided the secrets saved them itself.
+		/* Return secrets from agent and backing storage to the D-Bus caller;
+		 * nm_settings_connection_get_secrets() will have updated itself with
+		 * secrets from backing storage and those returned from the agent
+		 * by the time we get here.
 		 */
-		update_secrets_cache (self);
-
 		hash = nm_connection_to_hash (NM_CONNECTION (self), NM_SETTING_HASH_FLAG_ONLY_SECRETS);
 		if (!hash)
 			hash = g_hash_table_new (NULL, NULL);
@@ -1726,6 +1701,8 @@ nm_settings_connection_init (NMSettingsConnection *self)
 	priv->agent_mgr = nm_agent_manager_get ();
 
 	priv->seen_bssids = g_hash_table_new_full (mac_hash, mac_equal, g_free, g_free);
+
+	g_signal_connect (self, "secrets-cleared", G_CALLBACK (secrets_cleared_cb), NULL);
 }
 
 static void
@@ -1739,8 +1716,10 @@ dispose (GObject *object)
 		goto out;
 	priv->disposed = TRUE;
 
-	if (priv->secrets)
-		g_object_unref (priv->secrets);
+	if (priv->system_secrets)
+		g_object_unref (priv->system_secrets);
+	if (priv->agent_secrets)
+		g_object_unref (priv->agent_secrets);
 
 	/* Cancel PolicyKit requests */
 	for (iter = priv->pending_auths; iter; iter = g_slist_next (iter))
diff --git a/src/settings/nm-settings.c b/src/settings/nm-settings.c
index 733e9145..f0bfc162 100644
--- a/src/settings/nm-settings.c
+++ b/src/settings/nm-settings.c
@@ -27,6 +27,7 @@
 
 #include <unistd.h>
 #include <string.h>
+#include <ctype.h>
 #include <gmodule.h>
 #include <net/ethernet.h>
 #include <netinet/ether.h>
@@ -546,24 +547,23 @@ find_plugin (GSList *list, const char *pname)
 }
 
 static gboolean
-load_plugins (NMSettings *self, const char *plugins, GError **error)
+load_plugins (NMSettings *self, const char **plugins, GError **error)
 {
 	GSList *list = NULL;
-	char **plist;
-	char **iter;
+	const char **iter;
 	gboolean success = TRUE;
 
-	plist = g_strsplit (plugins, ",", 0);
-	if (!plist)
-		return FALSE;
-
-	for (iter = plist; *iter; iter++) {
+	for (iter = plugins; *iter; iter++) {
 		GModule *plugin;
 		char *full_name, *path;
-		const char *pname = g_strstrip (*iter);
+		const char *pname = *iter;
 		GObject *obj;
 		GObject * (*factory_func) (void);
 
+		/* strip leading spaces */
+		while (isblank (*pname))
+			pname++;
+
 		/* keyfile plugin built in now */
 		if (!strcmp (pname, "keyfile"))
 			continue;
@@ -616,8 +616,6 @@ load_plugins (NMSettings *self, const char *plugins, GError **error)
 		list = g_slist_append (list, obj);
 	}
 
-	g_strfreev (plist);
-
 	g_slist_foreach (list, (GFunc) g_object_unref, NULL);
 	g_slist_free (list);
 
@@ -634,6 +632,7 @@ connection_removed (NMSettingsConnection *obj, gpointer user_data)
 {
 	GObject *connection = G_OBJECT (obj);
 	guint id;
+
 	g_object_ref (connection);
 
 	/* Disconnect signal handlers, as plugins might still keep references
@@ -653,7 +652,7 @@ connection_removed (NMSettingsConnection *obj, gpointer user_data)
 	if (id)
 		g_signal_handler_disconnect (connection, id);
 
-	/* Forget about the connection internall */
+	/* Forget about the connection internally */
 	g_hash_table_remove (NM_SETTINGS_GET_PRIVATE (user_data)->connections,
 	                     (gpointer) nm_connection_get_path (NM_CONNECTION (connection)));
 
@@ -840,9 +839,6 @@ claim_connection (NMSettings *self,
 	}
 }
 
-// TODO it seems that this is only ever used to remove a
-// NMDefaultWiredConnection, and it probably needs to stay that way. So this
-// *needs* a better name!
 static void
 remove_default_wired_connection (NMSettings *self,
                                  NMSettingsConnection *connection,
@@ -852,7 +848,8 @@ remove_default_wired_connection (NMSettings *self,
 	const char *path = nm_connection_get_path (NM_CONNECTION (connection));
 
 	if (g_hash_table_lookup (priv->connections, path)) {
-		g_signal_emit_by_name (G_OBJECT (connection), NM_SETTINGS_CONNECTION_REMOVED);
+		if (do_signal)
+			g_signal_emit_by_name (G_OBJECT (connection), NM_SETTINGS_CONNECTION_REMOVED);
 		g_hash_table_remove (priv->connections, path);
 	}
 }
@@ -1378,7 +1375,7 @@ delete_cb (NMSettingsConnection *connection, GError *error, gpointer user_data)
 {
 }
 
-static gboolean
+static void
 default_wired_try_update (NMDefaultWiredConnection *wired,
                           NMSettings *self)
 {
@@ -1390,6 +1387,9 @@ default_wired_try_update (NMDefaultWiredConnection *wired,
 	 * persistent storage.
 	 */
 
+	/* Keep it alive over removal so we can re-add it if we need to */
+	g_object_ref (wired);
+
 	id = nm_connection_get_id (NM_CONNECTION (wired));
 	g_assert (id);
 
@@ -1402,21 +1402,21 @@ default_wired_try_update (NMDefaultWiredConnection *wired,
 		                   DEFAULT_WIRED_TAG,
 		                   NULL);
 		nm_log_info (LOGD_SETTINGS, "Saved default wired connection '%s' to persistent storage", id);
-		return FALSE;
+	} else {
+		nm_log_warn (LOGD_SETTINGS, "couldn't save default wired connection '%s': %d / %s",
+			         id,
+			         error ? error->code : -1,
+			         (error && error->message) ? error->message : "(unknown)");
+		g_clear_error (&error);
+
+		/* If there was an error, don't destroy the default wired connection,
+		 * but add it back to the system settings service. Connection is already
+		 * exported on the bus, don't export it again, thus do_export == FALSE.
+		 */
+		claim_connection (self, NM_SETTINGS_CONNECTION (wired), FALSE);
 	}
 
-	nm_log_warn (LOGD_SETTINGS, "couldn't save default wired connection '%s': %d / %s",
-	             id,
-	             error ? error->code : -1,
-	             (error && error->message) ? error->message : "(unknown)");
-	g_clear_error (&error);
-
-	/* If there was an error, don't destroy the default wired connection,
-	 * but add it back to the system settings service. Connection is already
-	 * exported on the bus, don't export it again, thus do_export == FALSE.
-	 */
-	claim_connection (self, NM_SETTINGS_CONNECTION (wired), FALSE);
-	return TRUE;
+	g_object_unref (wired);
 }
 
 void
@@ -1492,7 +1492,7 @@ nm_settings_device_removed (NMSettings *self, NMDevice *device)
 
 NMSettings *
 nm_settings_new (const char *config_file,
-                 const char *plugins,
+                 const char **plugins,
                  GError **error)
 {
 	NMSettings *self;
diff --git a/src/settings/nm-settings.h b/src/settings/nm-settings.h
index 66d41cce..77485e19 100644
--- a/src/settings/nm-settings.h
+++ b/src/settings/nm-settings.h
@@ -77,7 +77,7 @@ typedef struct {
 GType nm_settings_get_type (void);
 
 NMSettings *nm_settings_new (const char *config_file,
-                             const char *plugins,
+                             const char **plugins,
                              GError **error);
 
 typedef void (*NMSettingsForEachFunc) (NMSettings *settings,
diff --git a/src/settings/plugins/Makefile.in b/src/settings/plugins/Makefile.in
index 148e9620..c23e3be0 100644
--- a/src/settings/plugins/Makefile.in
+++ b/src/settings/plugins/Makefile.in
@@ -197,8 +197,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/src/settings/plugins/ifcfg-rh/Makefile.in b/src/settings/plugins/ifcfg-rh/Makefile.in
index f02b6431..b904563a 100644
--- a/src/settings/plugins/ifcfg-rh/Makefile.in
+++ b/src/settings/plugins/ifcfg-rh/Makefile.in
@@ -267,8 +267,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/src/settings/plugins/ifcfg-rh/plugin.c b/src/settings/plugins/ifcfg-rh/plugin.c
index ed0dceca..b4be4cba 100644
--- a/src/settings/plugins/ifcfg-rh/plugin.c
+++ b/src/settings/plugins/ifcfg-rh/plugin.c
@@ -655,8 +655,10 @@ sc_plugin_ifcfg_init (SCPluginIfcfg *plugin)
 	}
 
 	if (!success) {
-		dbus_g_connection_unref (priv->bus);
-		priv->bus = NULL;
+		if (priv->bus) {
+			dbus_g_connection_unref (priv->bus);
+			priv->bus = NULL;
+		}
 	}
 }
 
diff --git a/src/settings/plugins/ifcfg-rh/reader.c b/src/settings/plugins/ifcfg-rh/reader.c
index cdf5889e..910cca35 100644
--- a/src/settings/plugins/ifcfg-rh/reader.c
+++ b/src/settings/plugins/ifcfg-rh/reader.c
@@ -28,10 +28,10 @@
 #include <ctype.h>
 #include <sys/inotify.h>
 #include <errno.h>
-#include <net/if.h>
 #include <sys/ioctl.h>
 #include <unistd.h>
 #include <netinet/ether.h>
+#include <linux/if.h>
 
 #ifndef __user
 #define __user
@@ -3382,7 +3382,7 @@ connection_from_file (const char *filename,
 		network_file = SYSCONFDIR "/sysconfig/network";
 
 	if (!iscsiadm_path)
-		iscsiadm_path = SBINDIR "/iscsiadm";
+		iscsiadm_path = "/sbin/iscsiadm";
 
 	ifcfg_name = utils_get_ifcfg_name (filename, TRUE);
 	if (!ifcfg_name) {
diff --git a/src/settings/plugins/ifcfg-rh/shvar.c b/src/settings/plugins/ifcfg-rh/shvar.c
index db084969..0aa8efc2 100644
--- a/src/settings/plugins/ifcfg-rh/shvar.c
+++ b/src/settings/plugins/ifcfg-rh/shvar.c
@@ -142,10 +142,11 @@ svUnescape(char *s) {
  */
 static const char escapees[] = "\"'\\$~`";		/* must be escaped */
 static const char spaces[] = " \t|&;()<>";		/* only require "" */
+static const char newlines[] = "\n\r";			/* will be removed */
 char *
 svEscape(const char *s) {
     char *new;
-    int i, j, mangle = 0, space = 0;
+    int i, j, mangle = 0, space = 0, newline = 0;
     int newlen, slen;
     static int esclen, splen;
 
@@ -156,23 +157,26 @@ svEscape(const char *s) {
     for (i = 0; i < slen; i++) {
 	if (strchr(escapees, s[i])) mangle++;
 	if (strchr(spaces, s[i])) space++;
+	if (strchr(newlines, s[i])) newline++;
     }
-    if (!mangle && !space) return strdup(s);
+    if (!mangle && !space && !newline) return strdup(s);
 
-    newlen = slen + mangle + 3;	/* 3 is extra ""\0 */
+    newlen = slen + mangle - newline + 3;	/* 3 is extra ""\0 */
     new = g_malloc0(newlen);
     if (!new) return NULL;
 
     j = 0;
     new[j++] = '"';
     for (i = 0; i < slen; i++) {
+	if (strchr(newlines, s[i]))
+	    continue;
 	if (strchr(escapees, s[i])) {
 	    new[j++] = '\\';
 	}
 	new[j++] = s[i];
     }
     new[j++] = '"';
-    g_assert(j == slen + mangle + 2); /* j is the index of the '\0' */
+    g_assert(j == slen + mangle - newline + 2); /* j is the index of the '\0' */
 
     return new;
 }
@@ -332,13 +336,13 @@ svSetValue(shvarFile *s, const char *key, const char *value, gboolean verbatim)
     }
 
 end:
-    if (newval) free(newval);
-    if (val1) free(val1);
-    if (val2) free(val2);
+    g_free(newval);
+    g_free(val1);
+    g_free(val2);
     return;
 
 bail:
-    if (keyValue) free (keyValue);
+    g_free (keyValue);
     goto end;
 }
 
diff --git a/src/settings/plugins/ifcfg-rh/tests/Makefile.in b/src/settings/plugins/ifcfg-rh/tests/Makefile.in
index cd37d0a7..6c509fd0 100644
--- a/src/settings/plugins/ifcfg-rh/tests/Makefile.in
+++ b/src/settings/plugins/ifcfg-rh/tests/Makefile.in
@@ -228,8 +228,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.in b/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.in
index a10cbb86..7a00bcfd 100644
--- a/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.in
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.in
@@ -152,8 +152,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
index d1f08aa9..e32266cb 100644
--- a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
+++ b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
@@ -10141,6 +10141,207 @@ test_write_wifi_wpa_then_open (void)
 }
 
 static void
+test_write_wifi_wpa_then_wep_with_perms (void)
+{
+	NMConnection *connection;
+	NMConnection *reread;
+	NMSettingConnection *s_con;
+	NMSettingWireless *s_wifi;
+	NMSettingWirelessSecurity *s_wsec;
+	NMSettingIP4Config *s_ip4;
+	NMSettingIP6Config *s_ip6;
+	char *uuid;
+	gboolean success;
+	GError *error = NULL;
+	char *testfile = NULL;
+	char *unmanaged = NULL;
+	char *keyfile = NULL;
+	char *routefile = NULL;
+	char *route6file = NULL;
+	gboolean ignore_error = FALSE;
+	GByteArray *ssid;
+	GSList *perm_list = NULL;
+	const unsigned char ssid_data[] = "SomeSSID";
+
+	/* Test that writing out a WPA config then changing that to a WEP
+	 * config works and doesn't cause infinite loop or other issues.
+	 */
+
+	connection = nm_connection_new ();
+	g_assert (connection);
+
+	/* Connection setting */
+	s_con = (NMSettingConnection *) nm_setting_connection_new ();
+	g_assert (s_con);
+	nm_connection_add_setting (connection, NM_SETTING (s_con));
+
+	uuid = nm_utils_uuid_generate ();
+	perm_list = g_slist_append (perm_list, "user:superman:");
+	g_object_set (s_con,
+	              NM_SETTING_CONNECTION_ID, "random wifi connection 2",
+	              NM_SETTING_CONNECTION_UUID, uuid,
+	              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
+	              NM_SETTING_CONNECTION_PERMISSIONS, perm_list,
+	              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
+	              NULL);
+	g_free (uuid);
+	g_slist_free (perm_list);
+	ASSERT (nm_setting_connection_get_num_permissions (s_con) == 1,
+                "test_write_wifi_wpa_then_wep_with_perms", "unexpected failure adding valid user permisson");
+
+	/* Wifi setting */
+	s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
+	g_assert (s_wifi);
+	nm_connection_add_setting (connection, NM_SETTING (s_wifi));
+
+	ssid = g_byte_array_sized_new (sizeof (ssid_data));
+	g_byte_array_append (ssid, ssid_data, sizeof (ssid_data));
+
+	g_object_set (s_wifi,
+	              NM_SETTING_WIRELESS_SSID, ssid,
+	              NM_SETTING_WIRELESS_MODE, "infrastructure",
+	              NM_SETTING_WIRELESS_SEC, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+	              NULL);
+
+	g_byte_array_free (ssid, TRUE);
+
+	/* Wireless security setting */
+	s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
+	g_assert (s_wsec);
+	nm_connection_add_setting (connection, NM_SETTING (s_wsec));
+
+	g_object_set (s_wsec,
+	              NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-psk",
+	              NM_SETTING_WIRELESS_SECURITY_PSK, "My cool PSK",
+	              NULL);
+
+	nm_setting_wireless_security_add_proto (s_wsec, "wpa");
+	nm_setting_wireless_security_add_pairwise (s_wsec, "tkip");
+	nm_setting_wireless_security_add_group (s_wsec, "tkip");
+
+	nm_setting_wireless_security_add_proto (s_wsec, "rsn");
+	nm_setting_wireless_security_add_pairwise (s_wsec, "ccmp");
+	nm_setting_wireless_security_add_group (s_wsec, "ccmp");
+
+	/* IP4 setting */
+	s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+	g_assert (s_ip4);
+	nm_connection_add_setting (connection, NM_SETTING (s_ip4));
+
+	g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
+
+	/* IP6 setting */
+	s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+	g_assert (s_ip6);
+	nm_connection_add_setting (connection, NM_SETTING (s_ip6));
+
+	g_object_set (s_ip6,
+	              NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+	              NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
+	              NULL);
+
+	success = nm_connection_verify (connection, &error);
+	g_assert_no_error (error);
+	g_assert (success);
+
+	/* Save the ifcfg */
+	success = writer_new_connection (connection,
+	                                 TEST_SCRATCH_DIR "/network-scripts/",
+	                                 &testfile,
+	                                 &error);
+	g_assert_no_error (error);
+	g_assert (success);
+	g_assert (testfile);
+
+	/* re-read the connection for comparison */
+	reread = connection_from_file (testfile,
+	                               NULL,
+	                               TYPE_WIRELESS,
+	                               NULL,
+	                               &unmanaged,
+	                               &keyfile,
+	                               &routefile,
+	                               &route6file,
+	                               &error,
+	                               &ignore_error);
+	g_assert_no_error (error);
+	g_assert (reread);
+
+	success = nm_connection_verify (reread, &error);
+	g_assert_no_error (error);
+
+	success = nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT);
+	g_assert (success);
+
+	g_free (unmanaged);
+	unmanaged = NULL;
+	g_free (routefile);
+	routefile = NULL;
+	g_free (route6file);
+	route6file = NULL;
+	g_object_unref (reread);
+
+	/* Now change the connection to WEP and recheck */
+	s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
+	g_assert (s_wsec);
+	nm_connection_add_setting (connection, NM_SETTING (s_wsec));
+
+	g_object_set (s_wsec,
+	              NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "none",
+	              NULL);
+	nm_setting_wireless_security_set_wep_key (s_wsec, 0, "abraka  dabra");
+
+	/* Write it back out */
+	success = writer_update_connection (connection,
+	                                    TEST_SCRATCH_DIR "/network-scripts/",
+	                                    testfile,
+	                                    keyfile,
+	                                    &error);
+	g_assert_no_error (error);
+	g_assert (success);
+
+	g_free (keyfile);
+	keyfile = NULL;
+
+	/* re-read it for comparison */
+	reread = connection_from_file (testfile,
+	                               NULL,
+	                               TYPE_WIRELESS,
+	                               NULL,
+	                               &unmanaged,
+	                               &keyfile,
+	                               &routefile,
+	                               &route6file,
+	                               &error,
+	                               &ignore_error);
+	g_assert_no_error (error);
+
+	g_assert (reread);
+
+	success = nm_connection_verify (reread, &error);
+	g_assert_no_error (error);
+
+	success = nm_connection_compare (connection, reread,
+	                                 NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS |
+	                                 NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS);
+
+	ASSERT (success,
+	        "test_write_wifi_wpa_then_wep_with_perms", "failed to compare connections");
+
+	unlink (keyfile);
+	unlink (testfile);
+
+	g_free (testfile);
+	g_free (unmanaged);
+	g_free (keyfile);
+	g_free (routefile);
+	g_free (route6file);
+	g_object_unref (reread);
+
+	g_object_unref (connection);
+}
+
+static void
 test_write_wifi_dynamic_wep_leap (void)
 {
 	NMConnection *connection;
@@ -11713,6 +11914,7 @@ int main (int argc, char **argv)
 	test_write_wifi_wpa_eap_ttls_mschapv2 ();
 	test_write_wifi_dynamic_wep_leap ();
 	test_write_wifi_wpa_then_open ();
+	test_write_wifi_wpa_then_wep_with_perms ();
 	test_write_wired_qeth_dhcp ();
 	test_write_wired_ctc_dhcp ();
 	test_write_permissions ();
diff --git a/src/settings/plugins/ifcfg-rh/writer.c b/src/settings/plugins/ifcfg-rh/writer.c
index 192226ac..068bcda2 100644
--- a/src/settings/plugins/ifcfg-rh/writer.c
+++ b/src/settings/plugins/ifcfg-rh/writer.c
@@ -569,6 +569,7 @@ write_wireless_security_setting (NMConnection *connection,
 	svSetValue (ifcfg, "DEFAULTKEY", NULL, FALSE);
 
 	if (!strcmp (key_mgmt, "none")) {
+		svSetValue (ifcfg, "KEY_MGMT", NULL, FALSE);
 		wep = TRUE;
 		*no_8021x = TRUE;
 	} else if (!strcmp (key_mgmt, "wpa-none") || !strcmp (key_mgmt, "wpa-psk")) {
@@ -1725,7 +1726,7 @@ write_connection (NMConnection *connection,
 
 			g_free (ifcfg_name);
 			while (idx++ < 500) {
-				ifcfg_name = g_strdup_printf ("%s/ifcfg-%s %u", ifcfg_dir, escaped, idx);
+				ifcfg_name = g_strdup_printf ("%s/ifcfg-%s-%u", ifcfg_dir, escaped, idx);
 				if (g_file_test (ifcfg_name, G_FILE_TEST_EXISTS) == FALSE)
 					break;
 				g_free (ifcfg_name);
diff --git a/src/settings/plugins/ifcfg-suse/Makefile.in b/src/settings/plugins/ifcfg-suse/Makefile.in
index 02e2247a..b8017e24 100644
--- a/src/settings/plugins/ifcfg-suse/Makefile.in
+++ b/src/settings/plugins/ifcfg-suse/Makefile.in
@@ -215,8 +215,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/src/settings/plugins/ifnet/Makefile.in b/src/settings/plugins/ifnet/Makefile.in
index 2bc7bc32..519e07c0 100644
--- a/src/settings/plugins/ifnet/Makefile.in
+++ b/src/settings/plugins/ifnet/Makefile.in
@@ -263,8 +263,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/src/settings/plugins/ifnet/connection_parser.c b/src/settings/plugins/ifnet/connection_parser.c
index 982f94f9..b4aaa8d2 100644
--- a/src/settings/plugins/ifnet/connection_parser.c
+++ b/src/settings/plugins/ifnet/connection_parser.c
@@ -1742,27 +1742,27 @@ ifnet_update_connection_from_config_block (const char *conn_name, GError **error
 
 	/* IPv4 setting */
 	make_ip4_setting (connection, conn_name, error);
-	if (error && *error)
-		PLUGIN_WARN (IFNET_PLUGIN_NAME,
-			     "Found error: %s", (*error)->message);
+	if (error && *error) {
+		PLUGIN_WARN (IFNET_PLUGIN_NAME, "Found error: %s", (*error)->message);
+		goto error;
+	}
 
 	/* IPv6 setting */
 	make_ip6_setting (connection, conn_name, error);
-	if (error && *error)
-		PLUGIN_WARN (IFNET_PLUGIN_NAME,
-			     "Found error: %s", (*error)->message);
+	if (error && *error) {
+		PLUGIN_WARN (IFNET_PLUGIN_NAME, "Found error: %s", (*error)->message);
+		goto error;
+	}
 
 	success = nm_connection_verify (connection, error);
 	if (error && *error)
-		PLUGIN_WARN (IFNET_PLUGIN_NAME,
-			     "Found error: %s", (*error)->message);
+		PLUGIN_WARN (IFNET_PLUGIN_NAME, "Found error: %s", (*error)->message);
 	PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Connection verified %s:%d", conn_name, success);
 	if (!success)
 		goto error;
 	return connection;
 
 error:
-	g_object_unref (setting);
 	g_object_unref (connection);
 	return NULL;
 }
diff --git a/src/settings/plugins/ifnet/net_utils.c b/src/settings/plugins/ifnet/net_utils.c
index 83f86ab5..b533ae3f 100644
--- a/src/settings/plugins/ifnet/net_utils.c
+++ b/src/settings/plugins/ifnet/net_utils.c
@@ -313,7 +313,7 @@ is_ip4_address (const char *in_address)
 	gboolean result = FALSE;
 	gchar *tmp;
 	GRegex *regex = g_regex_new (pattern, 0, 0, NULL);
-	GMatchInfo *match_info;
+	GMatchInfo *match_info = NULL;
 
 	if (!address)
 		goto done;
diff --git a/src/settings/plugins/ifnet/tests/Makefile.in b/src/settings/plugins/ifnet/tests/Makefile.in
index 17b80c36..d2cbb871 100644
--- a/src/settings/plugins/ifnet/tests/Makefile.in
+++ b/src/settings/plugins/ifnet/tests/Makefile.in
@@ -186,8 +186,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/src/settings/plugins/ifnet/tests/net b/src/settings/plugins/ifnet/tests/net
index e7550002..0eef399a 100644
--- a/src/settings/plugins/ifnet/tests/net
+++ b/src/settings/plugins/ifnet/tests/net
@@ -35,6 +35,8 @@ config_eth6=("192.168.4.{1..101}/24")
 config_eth7=( "dhcp" )
 auto_eth7="true"
 
+# missing config_eth8
+auto_eth8="true"
 
 config_myxjtu2=("202.117.16.121/24 brd 202.117.16.255")
 routes_myxjtu2=("default via 202.117.16.1")
diff --git a/src/settings/plugins/ifnet/tests/test_all.c b/src/settings/plugins/ifnet/tests/test_all.c
index d114bbba..52d9ce2a 100644
--- a/src/settings/plugins/ifnet/tests/test_all.c
+++ b/src/settings/plugins/ifnet/tests/test_all.c
@@ -252,25 +252,25 @@ test_is_unmanaged ()
 static void
 test_new_connection ()
 {
-	GError **error = NULL;
+	GError *error = NULL;
 	NMConnection *connection;
 
-	connection = ifnet_update_connection_from_config_block ("eth2", error);
+	connection = ifnet_update_connection_from_config_block ("eth2", &error);
 	ASSERT (connection != NULL, "new connection",
 		"new connection failed: %s",
-		error == NULL ? "None" : (*error)->message);
+		error ? error->message : "None");
 	g_object_unref (connection);
-	connection =
-	    ifnet_update_connection_from_config_block ("qiaomuf", error);
+
+	connection = ifnet_update_connection_from_config_block ("qiaomuf", &error);
 	ASSERT (connection != NULL, "new connection",
-		"new connection failed: %s", error
-		&& (*error) ? (*error)->message : "NONE");
+		"new connection failed: %s",
+		error ? error->message : "NONE");
 	g_object_unref (connection);
-	connection =
-	    ifnet_update_connection_from_config_block ("myxjtu2", error);
+
+	connection = ifnet_update_connection_from_config_block ("myxjtu2", &error);
 	ASSERT (connection != NULL, "new connection",
-		"new connection failed: %s", error
-		&& (*error) ? (*error)->message : "NONE");
+		"new connection failed: %s",
+		error ? error->message : "NONE");
 	g_object_unref (connection);
 }
 
@@ -280,32 +280,32 @@ test_new_connection ()
 static void
 test_update_connection ()
 {
-	GError **error = NULL;
+	GError *error = NULL;
 	NMConnection *connection;
 	gboolean success;
 
-	connection = ifnet_update_connection_from_config_block ("eth0", error);
+	connection = ifnet_update_connection_from_config_block ("eth0", &error);
 	ASSERT (connection != NULL, "get connection",
 		"get connection failed: %s",
-		error == NULL ? "None" : (*error)->message);
+		error ? error->message : "None");
 
 	success = ifnet_update_parsers_by_connection (connection, "eth0",
 	                                              NET_GEN_NAME,
 	                                              SUP_GEN_NAME,
 	                                              NULL,
-	                                              error);
+	                                              &error);
 	ASSERT (success, "update connection", "update connection failed %s", "eth0");
 	g_object_unref (connection);
 
-	connection = ifnet_update_connection_from_config_block ("0xab3ace", error);
+	connection = ifnet_update_connection_from_config_block ("0xab3ace", &error);
 	ASSERT (connection != NULL, "get connection", "get connection failed: %s",
-		error == NULL ? "None" : (*error)->message);
+		error ? error->message : "None");
 
 	success = ifnet_update_parsers_by_connection (connection, "0xab3ace",
 	                                              NET_GEN_NAME,
 	                                              SUP_GEN_NAME,
 	                                              NULL,
-	                                              error);
+	                                              &error);
 	ASSERT (success, "update connection", "update connection failed %s", "0xab3ace");
 	g_object_unref (connection);
 
@@ -357,6 +357,17 @@ test_delete_connection ()
 }
 
 static void
+test_missing_config ()
+{
+	GError *error = NULL;
+	NMConnection *connection;
+
+	connection = ifnet_update_connection_from_config_block ("eth8", &error);
+	ASSERT (connection == NULL && error != NULL, "get connection",
+	        "get connection should fail with 'Unknown config for eth8'");
+}
+
+static void
 run_all (gboolean run)
 {
 	if (run) {
@@ -378,6 +389,7 @@ run_all (gboolean run)
 		test_update_connection ();
 		test_add_connection ();
 		test_delete_connection ();
+		test_missing_config ();
 	}
 }
 
diff --git a/src/settings/plugins/ifnet/tests/wpa_supplicant.conf b/src/settings/plugins/ifnet/tests/wpa_supplicant.conf
index a2595d42..4f5f68cf 100644
--- a/src/settings/plugins/ifnet/tests/wpa_supplicant.conf
+++ b/src/settings/plugins/ifnet/tests/wpa_supplicant.conf
@@ -859,6 +859,7 @@ network={
 	identity="user@example.com"
 	anonymous_identity="anonymous@example.com"
 	password="foobar"
-	ca_cert="blob://exampleblob"
+	ca_cert="test_ca_cert.pem"
+	phase2="auth=CHAP"
 	priority=20
 }
diff --git a/src/settings/plugins/ifupdown/Makefile.in b/src/settings/plugins/ifupdown/Makefile.in
index 5f5a456b..b6896b59 100644
--- a/src/settings/plugins/ifupdown/Makefile.in
+++ b/src/settings/plugins/ifupdown/Makefile.in
@@ -262,8 +262,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/src/settings/plugins/ifupdown/tests/Makefile.in b/src/settings/plugins/ifupdown/tests/Makefile.in
index 7412e65d..3c8bf793 100644
--- a/src/settings/plugins/ifupdown/tests/Makefile.in
+++ b/src/settings/plugins/ifupdown/tests/Makefile.in
@@ -186,8 +186,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/src/settings/plugins/keyfile/Makefile.in b/src/settings/plugins/keyfile/Makefile.in
index a2a7d231..cf821e46 100644
--- a/src/settings/plugins/keyfile/Makefile.in
+++ b/src/settings/plugins/keyfile/Makefile.in
@@ -238,8 +238,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/src/settings/plugins/keyfile/reader.c b/src/settings/plugins/keyfile/reader.c
index c4136e05..4128b9f2 100644
--- a/src/settings/plugins/keyfile/reader.c
+++ b/src/settings/plugins/keyfile/reader.c
@@ -730,10 +730,27 @@ read_hash_of_string (GKeyFile *file, NMSetting *setting, const char *key)
 	g_strfreev (keys);
 }
 
+static void
+unescape_semicolons (char *str)
+{
+	int i;
+	gsize len = strlen (str);
+
+	for (i = 0; i < len; i++) {
+		if (str[i] == '\\' && str[i+1] == ';') {
+			memmove(str + i, str + i + 1, len - (i + 1));
+			len--;
+		}
+		str[len] = '\0';
+	}
+}
+
 static GByteArray *
 get_uchar_array (GKeyFile *keyfile,
                  const char *setting_name,
-                 const char *key)
+                 const char *key,
+                 gboolean zero_terminate,
+                 gboolean unescape_semicolon)
 {
 	GByteArray *array = NULL;
 	char *tmp_string;
@@ -742,26 +759,28 @@ get_uchar_array (GKeyFile *keyfile,
 	int i;
 
 	/* New format: just a string
-	 * Old format: integer list; e.g. 11;25;38
+	 * Old format: integer list; e.g. 11;25;38;
 	 */
 	tmp_string = g_key_file_get_string (keyfile, setting_name, key, NULL);
 	if (tmp_string) {
-		gboolean new_format = FALSE;
 		GRegex *regex;
 		GMatchInfo *match_info;
-		const char *pattern = "^[[:space:]]*[[:digit:]]{1,3}[[:space:]]*(;[[:space:]]*[[:digit:]]{1,3}[[:space:]]*)*(;[[:space:]]*)?$";
+		const char *pattern = "^[[:space:]]*[[:digit:]]{1,3}[[:space:]]*;([[:space:]]*[[:digit:]]{1,3}[[:space:]]*;)*([[:space:]]*)?$";
 
 		regex = g_regex_new (pattern, 0, 0, NULL);
 		g_regex_match (regex, tmp_string, 0, &match_info);
-		if (!g_match_info_matches (match_info))
-			new_format = TRUE;
+		if (!g_match_info_matches (match_info)) {
+			/* Handle as a simple string (ie, new format) */
+			if (unescape_semicolon)
+				unescape_semicolons (tmp_string);
+			length = strlen (tmp_string);
+			if (zero_terminate)
+				length++;
+			array = g_byte_array_sized_new (length);
+			g_byte_array_append (array, (guint8 *) tmp_string, length);
+		}
 		g_match_info_free (match_info);
 		g_regex_unref (regex);
-
-		if (new_format) {
-			array = g_byte_array_sized_new (strlen (tmp_string));
-			g_byte_array_append (array, (guint8 *) tmp_string, strlen (tmp_string));
-		}
 		g_free (tmp_string);
 	}
 
@@ -796,7 +815,7 @@ ssid_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, const char
 	const char *setting_name = nm_setting_get_name (setting);
 	GByteArray *array;
 
-	array = get_uchar_array (keyfile, setting_name, key);
+	array = get_uchar_array (keyfile, setting_name, key, FALSE, TRUE);
 	if (array) {
 		g_object_set (setting, key, array, NULL);
 		g_byte_array_free (array, TRUE);
@@ -837,21 +856,79 @@ get_cert_path (const char *keyfile_path, GByteArray *cert_path)
 static const char *certext[] = { ".pem", ".cert", ".crt", ".cer", ".p12", ".der", ".key" };
 
 static gboolean
-has_cert_ext (GByteArray *array)
+has_cert_ext (const char *path)
 {
 	int i;
 
 	for (i = 0; i < G_N_ELEMENTS (certext); i++) {
-		guint32 extlen = strlen (certext[i]);
-
-		if (array->len <= extlen)
-			continue;
-		if (memcmp (&array->data[array->len - extlen], certext[i], extlen) == 0)
+		if (g_str_has_suffix (path, certext[i]))
 			return TRUE;
 	}
 	return FALSE;
 }
 
+static gboolean
+handle_as_scheme (GByteArray *array, NMSetting *setting, const char *key)
+{
+	/* It's the PATH scheme, can just set plain data */
+	if (   (array->len > strlen (SCHEME_PATH))
+	    && g_str_has_prefix ((const char *) array->data, SCHEME_PATH)
+	    && (array->data[array->len - 1] == '\0')) {
+		g_object_set (setting, key, array, NULL);
+		return TRUE;
+	}
+	return FALSE;
+}
+
+static gboolean
+handle_as_path (GByteArray *array,
+                NMSetting *setting,
+                const char *key,
+                const char *keyfile_path)
+{
+	gsize validate_len = array->len;
+	GByteArray *val;
+	char *path;
+	gboolean exists, success = FALSE;
+
+	if (array->len > 500 || array->len < 1)
+		return FALSE;
+
+	/* If there's a trailing NULL tell g_utf8_validate() to to until the NULL */
+	if (array->data[array->len - 1] == '\0')
+		validate_len = -1;
+
+	if (g_utf8_validate ((const char *) array->data, validate_len, NULL) == FALSE)
+		return FALSE;
+
+	/* Might be a bare path without the file:// prefix; in that case
+	 * if it's an absolute path, use that, otherwise treat it as a
+	 * relative path to the current directory.
+	 */
+
+	path = get_cert_path (keyfile_path, array);
+	exists = g_file_test (path, G_FILE_TEST_EXISTS);
+	if (   exists
+	    || memchr (array->data, '/', array->len)
+	    || has_cert_ext (path)) {
+		/* Construct the proper value as required for the PATH scheme */
+		val = g_byte_array_sized_new (strlen (SCHEME_PATH) + strlen (path) + 1);
+		g_byte_array_append (val, (const guint8 *) SCHEME_PATH, strlen (SCHEME_PATH));
+		g_byte_array_append (val, (const guint8 *) path, strlen (path));
+		g_byte_array_append (val, (const guint8 *) "\0", 1);
+		g_object_set (setting, key, val, NULL);
+		g_byte_array_free (val, TRUE);
+		success = TRUE;
+
+		/* Warn if the certificate didn't exist */
+		if (exists == FALSE)
+			PLUGIN_WARN (KEYFILE_PLUGIN_NAME, "   certificate or key %s does not exist", path);
+	}
+	g_free (path);
+
+	return success;
+}
+
 static void
 cert_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, const char *keyfile_path)
 {
@@ -859,62 +936,25 @@ cert_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, const char
 	GByteArray *array;
 	gboolean success = FALSE;
 
-	array = get_uchar_array (keyfile, setting_name, key);
-	if (array) {
-		/* Value could be either:
-		 * 1) the raw key/cert data as a blob
-		 * 2) a path scheme (ie, starts with "file://")
-		 * 3) a plain path
-		 */
-		if (   (array->len > strlen (SCHEME_PATH))
-		    && g_str_has_prefix ((const char *) array->data, SCHEME_PATH)
-		    && (array->data[array->len - 1] == '\0')) {
-			/* It's the PATH scheme, can just set plain data */
-			g_object_set (setting, key, array, NULL);
-			success = TRUE;
-		} else if (   (array->len < 500)
-		           && g_utf8_validate ((const char *) array->data, array->len, NULL)) {
-			GByteArray *val;
-			char *path;
-			gboolean exists;
-
-			/* Might be a bare path without the file:// prefix; in that case
-			 * if it's an absolute path, use that, otherwise treat it as a
-			 * relative path to the current directory.
-			 */
-
-			path = get_cert_path (keyfile_path, array);
-			exists = g_file_test (path, G_FILE_TEST_EXISTS);
-			if (   exists
-			    || memchr (array->data, '/', array->len)
-			    || has_cert_ext (array)) {
-				/* Construct the proper value as required for the PATH scheme */
-				val = g_byte_array_sized_new (strlen (SCHEME_PATH) + array->len + 1);
-				g_byte_array_append (val, (const guint8 *) SCHEME_PATH, strlen (SCHEME_PATH));
-				g_byte_array_append (val, (const guint8 *) path, strlen (path));
-				g_byte_array_append (val, (const guint8 *) "\0", 1);
-				g_object_set (setting, key, val, NULL);
-				g_byte_array_free (val, TRUE);
-				success = TRUE;
-
-				/* Warn if the certificate didn't exist */
-				if (exists == FALSE) {
-					PLUGIN_WARN (KEYFILE_PLUGIN_NAME, "   certificate or key %s does not exist", path);
-				}
-			}
-			g_free (path);
-		}
+	array = get_uchar_array (keyfile, setting_name, key, TRUE, FALSE);
+	if (array && array->len > 0) {
+		/* Try as a path + scheme (ie, starts with "file://") */
+		success = handle_as_scheme (array, setting, key);
 
-		if (!success) {
-			/* Assume it's a simple blob value of the certificate or private key's data */
-			g_object_set (setting, key, array, NULL);
-		}
+		/* If not, it might be a plain path */
+		if (success == FALSE)
+			success = handle_as_path (array, setting, key, keyfile_path);
 
-		g_byte_array_free (array, TRUE);
+		/* If neither of those two, assume blob with certificate data */
+		if (success == FALSE)
+			g_object_set (setting, key, array, NULL);
 	} else {
 		g_warning ("%s: ignoring invalid key/cert value for %s / %s",
 		           __func__, setting_name, key);
 	}
+
+	if (array)
+		g_byte_array_free (array, TRUE);
 }
 
 typedef struct {
diff --git a/src/settings/plugins/keyfile/tests/Makefile.in b/src/settings/plugins/keyfile/tests/Makefile.in
index 05ed3a61..9d4f478d 100644
--- a/src/settings/plugins/keyfile/tests/Makefile.in
+++ b/src/settings/plugins/keyfile/tests/Makefile.in
@@ -224,8 +224,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Makefile.am b/src/settings/plugins/keyfile/tests/keyfiles/Makefile.am
index 302db866..55dda7ee 100644
--- a/src/settings/plugins/keyfile/tests/keyfiles/Makefile.am
+++ b/src/settings/plugins/keyfile/tests/keyfiles/Makefile.am
@@ -8,6 +8,8 @@ KEYFILES = \
 	ATT_Data_Connect_Plain \
 	Test_String_SSID \
 	Test_Intlist_SSID \
+	Test_Intlike_SSID \
+	Test_Intlike_SSID_2 \
 	Test_Wired_TLS_Old \
 	Test_Wired_TLS_New \
 	Test_Wired_TLS_Blob \
diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Makefile.in b/src/settings/plugins/keyfile/tests/keyfiles/Makefile.in
index 083615b0..3408cb15 100644
--- a/src/settings/plugins/keyfile/tests/keyfiles/Makefile.in
+++ b/src/settings/plugins/keyfile/tests/keyfiles/Makefile.in
@@ -152,8 +152,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
@@ -278,6 +286,8 @@ KEYFILES = \
 	ATT_Data_Connect_Plain \
 	Test_String_SSID \
 	Test_Intlist_SSID \
+	Test_Intlike_SSID \
+	Test_Intlike_SSID_2 \
 	Test_Wired_TLS_Old \
 	Test_Wired_TLS_New \
 	Test_Wired_TLS_Blob \
diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Test_Intlike_SSID b/src/settings/plugins/keyfile/tests/keyfiles/Test_Intlike_SSID
new file mode 100644
index 00000000..2bacb725
--- /dev/null
+++ b/src/settings/plugins/keyfile/tests/keyfiles/Test_Intlike_SSID
@@ -0,0 +1,11 @@
+[connection]
+id=Test 
+uuid=2f962388-e5f3-45af-a62c-ac220b8f7baa
+type=802-11-wireless
+
+[802-11-wireless]
+ssid=101
+
+[ipv4]
+method=auto
+
diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Test_Intlike_SSID_2 b/src/settings/plugins/keyfile/tests/keyfiles/Test_Intlike_SSID_2
new file mode 100644
index 00000000..20240251
--- /dev/null
+++ b/src/settings/plugins/keyfile/tests/keyfiles/Test_Intlike_SSID_2
@@ -0,0 +1,11 @@
+[connection]
+id=Test SSID - escaping semicolon in string
+uuid=2f962388-e5f3-45af-a62c-ac220b8f7baa
+type=802-11-wireless
+
+[802-11-wireless]
+ssid=11\\;12\\;13\\;
+
+[ipv4]
+method=auto
+
diff --git a/src/settings/plugins/keyfile/tests/test-keyfile.c b/src/settings/plugins/keyfile/tests/test-keyfile.c
index 3bbaaaec..2859cb3e 100644
--- a/src/settings/plugins/keyfile/tests/test-keyfile.c
+++ b/src/settings/plugins/keyfile/tests/test-keyfile.c
@@ -1563,6 +1563,246 @@ test_write_intlist_ssid (void)
 	g_object_unref (connection);
 }
 
+#define TEST_INTLIKE_SSID_FILE TEST_KEYFILES_DIR"/Test_Intlike_SSID"
+
+static void
+test_read_intlike_ssid (void)
+{
+	NMConnection *connection;
+	NMSettingWireless *s_wifi;
+	GError *error = NULL;
+	gboolean success;
+	const GByteArray *array;
+	const char *expected_ssid = "101";
+
+	connection = nm_keyfile_plugin_connection_from_file (TEST_INTLIKE_SSID_FILE, &error);
+	g_assert_no_error (error);
+	g_assert (connection);
+
+	success = nm_connection_verify (connection, &error);
+	g_assert_no_error (error);
+	g_assert (success);
+
+	/* SSID */
+	s_wifi = nm_connection_get_setting_wireless (connection);
+	g_assert (s_wifi);
+
+	array = nm_setting_wireless_get_ssid (s_wifi);
+	g_assert (array != NULL);
+	g_assert_cmpint (array->len, ==, strlen (expected_ssid));
+	g_assert_cmpint (memcmp (array->data, expected_ssid, strlen (expected_ssid)), ==, 0);
+
+	g_object_unref (connection);
+}
+
+#define TEST_INTLIKE_SSID_2_FILE TEST_KEYFILES_DIR"/Test_Intlike_SSID_2"
+
+static void
+test_read_intlike_ssid_2 (void)
+{
+	NMConnection *connection;
+	NMSettingWireless *s_wifi;
+	GError *error = NULL;
+	gboolean success;
+	const GByteArray *array;
+	const char *expected_ssid = "11;12;13;";
+
+	connection = nm_keyfile_plugin_connection_from_file (TEST_INTLIKE_SSID_2_FILE, &error);
+	g_assert_no_error (error);
+	g_assert (connection);
+
+	success = nm_connection_verify (connection, &error);
+	g_assert_no_error (error);
+	g_assert (success);
+
+	/* SSID */
+	s_wifi = nm_connection_get_setting_wireless (connection);
+	g_assert (s_wifi);
+
+	array = nm_setting_wireless_get_ssid (s_wifi);
+	g_assert (array != NULL);
+	g_assert_cmpint (array->len, ==, strlen (expected_ssid));
+	g_assert_cmpint (memcmp (array->data, expected_ssid, strlen (expected_ssid)), ==, 0);
+
+	g_object_unref (connection);
+}
+
+static void
+test_write_intlike_ssid (void)
+{
+	NMConnection *connection;
+	NMSettingConnection *s_con;
+	NMSettingWireless *s_wifi;
+	NMSettingIP4Config *s_ip4;
+	char *uuid, *testfile = NULL;
+	GByteArray *ssid;
+	unsigned char tmpssid[] = { 49, 48, 49 };
+	gboolean success;
+	NMConnection *reread;
+	GError *error = NULL;
+	pid_t owner_grp;
+	uid_t owner_uid;
+	GKeyFile *keyfile;
+	char *tmp;
+
+	connection = nm_connection_new ();
+	g_assert (connection);
+
+	/* Connection setting */
+
+	s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ());
+	g_assert (s_con);
+	nm_connection_add_setting (connection, NM_SETTING (s_con));
+
+	uuid = nm_utils_uuid_generate ();
+	g_object_set (s_con,
+	              NM_SETTING_CONNECTION_ID, "Intlike SSID Test",
+	              NM_SETTING_CONNECTION_UUID, uuid,
+	              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
+	              NULL);
+	g_free (uuid);
+
+	/* Wireless setting */
+	s_wifi = NM_SETTING_WIRELESS (nm_setting_wireless_new ());
+	g_assert (s_wifi);
+	nm_connection_add_setting (connection, NM_SETTING (s_wifi));
+
+	ssid = g_byte_array_sized_new (sizeof (tmpssid));
+	g_byte_array_append (ssid, &tmpssid[0], sizeof (tmpssid));
+	g_object_set (s_wifi, NM_SETTING_WIRELESS_SSID, ssid, NULL);
+	g_byte_array_free (ssid, TRUE);
+
+	/* IP4 setting */
+	s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ());
+	g_assert (s_ip4);
+	nm_connection_add_setting (connection, NM_SETTING (s_ip4));
+	g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
+
+	/* Write out the connection */
+	owner_uid = geteuid ();
+	owner_grp = getegid ();
+	success = nm_keyfile_plugin_write_test_connection (connection, TEST_SCRATCH_DIR, owner_uid, owner_grp, &testfile, &error);
+	g_assert_no_error (error);
+	g_assert (success);
+	g_assert (testfile != NULL);
+
+	/* Ensure the SSID was written out as a plain "101" */
+	keyfile = g_key_file_new ();
+	success = g_key_file_load_from_file (keyfile, testfile, 0, &error);
+	g_assert_no_error (error);
+	g_assert (success);
+
+	tmp = g_key_file_get_string (keyfile, NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_SSID, &error);
+	g_assert_no_error (error);
+	g_assert (tmp);
+	g_assert_cmpstr (tmp, ==, "101");
+
+	g_key_file_free (keyfile);
+
+	/* Read the connection back in and compare it to the one we just wrote out */
+	reread = nm_keyfile_plugin_connection_from_file (testfile, &error);
+	g_assert_no_error (error);
+	g_assert (reread);
+
+	success = nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT);
+	g_assert (success);
+
+	g_clear_error (&error);
+	unlink (testfile);
+	g_free (testfile);
+
+	g_object_unref (reread);
+	g_object_unref (connection);
+}
+
+static void
+test_write_intlike_ssid_2 (void)
+{
+	NMConnection *connection;
+	NMSettingConnection *s_con;
+	NMSettingWireless *s_wifi;
+	NMSettingIP4Config *s_ip4;
+	char *uuid, *testfile = NULL;
+	GByteArray *ssid;
+	unsigned char tmpssid[] = { 49, 49, 59, 49, 50, 59, 49, 51, 59};
+	gboolean success;
+	NMConnection *reread;
+	GError *error = NULL;
+	pid_t owner_grp;
+	uid_t owner_uid;
+	GKeyFile *keyfile;
+	char *tmp;
+
+	connection = nm_connection_new ();
+	g_assert (connection);
+
+	/* Connection setting */
+
+	s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ());
+	g_assert (s_con);
+	nm_connection_add_setting (connection, NM_SETTING (s_con));
+
+	uuid = nm_utils_uuid_generate ();
+	g_object_set (s_con,
+	              NM_SETTING_CONNECTION_ID, "Intlike SSID Test 2",
+	              NM_SETTING_CONNECTION_UUID, uuid,
+	              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
+	              NULL);
+	g_free (uuid);
+
+	/* Wireless setting */
+	s_wifi = NM_SETTING_WIRELESS (nm_setting_wireless_new ());
+	g_assert (s_wifi);
+	nm_connection_add_setting (connection, NM_SETTING (s_wifi));
+
+	ssid = g_byte_array_sized_new (sizeof (tmpssid));
+	g_byte_array_append (ssid, &tmpssid[0], sizeof (tmpssid));
+	g_object_set (s_wifi, NM_SETTING_WIRELESS_SSID, ssid, NULL);
+	g_byte_array_free (ssid, TRUE);
+
+	/* IP4 setting */
+	s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ());
+	g_assert (s_ip4);
+	nm_connection_add_setting (connection, NM_SETTING (s_ip4));
+	g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
+
+	/* Write out the connection */
+	owner_uid = geteuid ();
+	owner_grp = getegid ();
+	success = nm_keyfile_plugin_write_test_connection (connection, TEST_SCRATCH_DIR, owner_uid, owner_grp, &testfile, &error);
+	g_assert_no_error (error);
+	g_assert (success);
+	g_assert (testfile != NULL);
+
+	/* Ensure the SSID was written out as a plain "11;12;13;" */
+	keyfile = g_key_file_new ();
+	success = g_key_file_load_from_file (keyfile, testfile, 0, &error);
+	g_assert_no_error (error);
+	g_assert (success);
+
+	tmp = g_key_file_get_string (keyfile, NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_SSID, &error);
+	g_assert_no_error (error);
+	g_assert (tmp);
+	g_assert_cmpstr (tmp, ==, "11\\;12\\;13\\;");
+
+	g_key_file_free (keyfile);
+
+	/* Read the connection back in and compare it to the one we just wrote out */
+	reread = nm_keyfile_plugin_connection_from_file (testfile, &error);
+	g_assert_no_error (error);
+	g_assert (reread);
+
+	success = nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT);
+	g_assert (success);
+
+	g_clear_error (&error);
+	unlink (testfile);
+	g_free (testfile);
+
+	g_object_unref (reread);
+	g_object_unref (connection);
+}
+
 #define TEST_BT_DUN_FILE TEST_KEYFILES_DIR"/ATT_Data_Connect_BT"
 
 static void
@@ -2616,6 +2856,12 @@ int main (int argc, char **argv)
 	test_read_intlist_ssid ();
 	test_write_intlist_ssid ();
 
+	test_read_intlike_ssid ();
+	test_write_intlike_ssid ();
+
+	test_read_intlike_ssid_2 ();
+	test_write_intlike_ssid_2 ();
+
 	test_read_bt_dun_connection ();
 	test_write_bt_dun_connection ();
 
diff --git a/src/settings/plugins/keyfile/writer.c b/src/settings/plugins/keyfile/writer.c
index 060093ce..db43b233 100644
--- a/src/settings/plugins/keyfile/writer.c
+++ b/src/settings/plugins/keyfile/writer.c
@@ -44,6 +44,7 @@
 #include <ctype.h>
 
 #include "nm-dbus-glib-types.h"
+#include "nm-glib-compat.h"
 #include "writer.h"
 #include "common.h"
 
@@ -483,6 +484,7 @@ ssid_writer (GKeyFile *file,
 	GByteArray *array;
 	const char *setting_name = nm_setting_get_name (setting);
 	gboolean new_format = TRUE;
+	unsigned int semicolons = 0;
 	int i, *tmp_array;
 	char *ssid;
 
@@ -501,11 +503,24 @@ ssid_writer (GKeyFile *file,
 			new_format = FALSE;
 			break;
 		}
+		if (c == ';')
+			semicolons++;
 	}
 
 	if (new_format) {
-		ssid = g_malloc0 (array->len + 1);
-		memcpy (ssid, array->data, array->len);
+		ssid = g_malloc0 (array->len + semicolons + 1);
+		if (semicolons == 0)
+			memcpy (ssid, array->data, array->len);
+		else {
+			/* Escape semicolons with backslashes to make strings
+			 * containing ';', such as '16;17;' unambiguous */
+			int j = 0;
+			for (i = 0; i < array->len; i++) {
+				if (array->data[i] == ';')
+					ssid[j++] = '\\';
+				ssid[j++] = array->data[i];
+			}
+		}
 		g_key_file_set_string (file, setting_name, key, ssid);
 		g_free (ssid);
 	} else {
@@ -876,7 +891,7 @@ write_setting_value (NMSetting *setting,
 	} else if (type == G_TYPE_BOOLEAN) {
 		g_key_file_set_boolean (info->keyfile, setting_name, key, g_value_get_boolean (value));
 	} else if (type == G_TYPE_CHAR) {
-		g_key_file_set_integer (info->keyfile, setting_name, key, (int) g_value_get_char (value));
+		g_key_file_set_integer (info->keyfile, setting_name, key, (int) g_value_get_schar (value));
 	} else if (type == DBUS_TYPE_G_UCHAR_ARRAY) {
 		GByteArray *array;
 
@@ -993,15 +1008,27 @@ _internal_write_connection (NMConnection *connection,
 
 		path = g_strdup_printf ("%s/%s-%s", keyfile_dir, filename, nm_connection_get_uuid (connection));
 		if (g_file_test (path, G_FILE_TEST_EXISTS)) {
-			/* Hmm, this is odd. Give up. */
-			g_set_error (error, KEYFILE_PLUGIN_ERROR, 0,
-				         "%s.%d: could not find suitable keyfile file name (%s already used)",
-				         __FILE__, __LINE__, path);
-			g_free (path);
-			goto out;
+			if (existing_path == NULL || g_strcmp0 (path, existing_path) != 0) {
+				/* This should not happen. But, it actually occurs when
+				 * two connections have the same UUID, and one of the connections
+				 * is edited to contain the same ID as the other one.
+				 * Give up.
+				 */
+				g_set_error (error, KEYFILE_PLUGIN_ERROR, 0,
+				                    "%s.%d: could not find suitable keyfile file name (%s already used)",
+				                    __FILE__, __LINE__, path);
+				g_free (path);
+				goto out;
+			}
 		}
 	}
 
+	/* In case of updating the connection and changing the file path,
+	 * we need to remove the old one, not to end up with two connections.
+	 */
+	if (existing_path != NULL && strcmp (path, existing_path) != 0)
+		unlink (existing_path);
+
 	g_file_set_contents (path, data, len, error);
 	if (chown (path, owner_uid, owner_grp) < 0) {
 		g_set_error (error, KEYFILE_PLUGIN_ERROR, 0,
diff --git a/src/settings/tests/Makefile.in b/src/settings/tests/Makefile.in
index 33c4bd38..94ae4830 100644
--- a/src/settings/tests/Makefile.in
+++ b/src/settings/tests/Makefile.in
@@ -188,8 +188,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/src/supplicant-manager/Makefile.in b/src/supplicant-manager/Makefile.in
index 729917d3..3a9c43f4 100644
--- a/src/supplicant-manager/Makefile.in
+++ b/src/supplicant-manager/Makefile.in
@@ -229,8 +229,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/src/supplicant-manager/nm-supplicant-config.c b/src/supplicant-manager/nm-supplicant-config.c
index c651e0fa..4860314b 100644
--- a/src/supplicant-manager/nm-supplicant-config.c
+++ b/src/supplicant-manager/nm-supplicant-config.c
@@ -123,7 +123,7 @@ nm_supplicant_config_add_option_with_type (NMSupplicantConfig *self,
 			char buf[255];
 			memset (&buf[0], 0, sizeof (buf));
 			memcpy (&buf[0], value, len > 254 ? 254 : len);
-			nm_log_warn (LOGD_SUPPLICANT, "Key '%s' and/or value '%s' invalid.", key, buf);
+			nm_log_warn (LOGD_SUPPLICANT, "Key '%s' and/or value '%s' invalid.", key, secret ? "<omitted>" : buf);
 			return FALSE;
 		}
 	}
diff --git a/src/supplicant-manager/nm-supplicant-manager.c b/src/supplicant-manager/nm-supplicant-manager.c
index 8209da21..349f722a 100644
--- a/src/supplicant-manager/nm-supplicant-manager.c
+++ b/src/supplicant-manager/nm-supplicant-manager.c
@@ -45,8 +45,10 @@ typedef struct {
 	NMDBusManager * dbus_mgr;
 	guint           name_owner_id;
 	DBusGProxy *    proxy;
+	DBusGProxy *    props_proxy;
 	gboolean        running;
 	GHashTable *    ifaces;
+	gboolean        fast_supported;
 	guint           die_count_reset_id;
 	guint           die_count;
 	gboolean        disposed;
@@ -122,6 +124,56 @@ nm_supplicant_manager_iface_release (NMSupplicantManager *self,
 	g_hash_table_remove (priv->ifaces, ifname);
 }
 
+static void
+get_eap_methods_reply (DBusGProxy *proxy,
+                       DBusGProxyCall *call,
+                       gpointer user_data)
+{
+	NMSupplicantManager *self = NM_SUPPLICANT_MANAGER (user_data);
+	NMSupplicantManagerPrivate *priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (self);
+	GError *error = NULL;
+	GValue value = { 0 };
+	const char **iter;
+
+	if (dbus_g_proxy_end_call (proxy, call, &error,
+	                           G_TYPE_VALUE, &value,
+	                           G_TYPE_INVALID)) {
+		if (G_VALUE_HOLDS (&value, G_TYPE_STRV)) {
+			iter = g_value_get_boxed (&value);
+			while (iter && *iter) {
+				if (strcasecmp (*iter++, "FAST") == 0) {
+					priv->fast_supported = TRUE;
+					break;
+				}
+			}
+		} else {
+			nm_log_warn (LOGD_SUPPLICANT, "Unexpected EapMethods property type %s",
+			             G_VALUE_TYPE_NAME (&value));
+		}
+		g_value_unset (&value);
+	} else {
+		nm_log_warn (LOGD_SUPPLICANT, "Unexpected error requesting EapMethods: (%d) %s",
+		             error ? error->code : -1,
+		             error && error->message ? error->message : "(unknown)");
+		g_clear_error (&error);
+	}
+
+	nm_log_dbg (LOGD_SUPPLICANT, "EAP-FAST is %ssupported",
+	            priv->fast_supported ? "" : "not ");
+}
+
+static void
+check_supported_eap_methods (NMSupplicantManager *self)
+{
+	NMSupplicantManagerPrivate *priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (self);
+
+	dbus_g_proxy_begin_call (priv->props_proxy, "Get",
+	                         get_eap_methods_reply, self, NULL,
+	                         G_TYPE_STRING, WPAS_DBUS_INTERFACE,
+	                         G_TYPE_STRING, "EapMethods",
+	                         G_TYPE_INVALID);
+}
+
 gboolean
 nm_supplicant_manager_available (NMSupplicantManager *self)
 {
@@ -187,6 +239,7 @@ name_owner_changed (NMDBusManager *dbus_mgr,
 	if (!old_owner_good && new_owner_good) {
 		nm_log_info (LOGD_SUPPLICANT, "wpa_supplicant started");
 		set_running (self, TRUE);
+		check_supported_eap_methods (self);
 	} else if (old_owner_good && !new_owner_good) {
 		nm_log_info (LOGD_SUPPLICANT, "wpa_supplicant stopped");
 
@@ -207,6 +260,8 @@ name_owner_changed (NMDBusManager *dbus_mgr,
 		}
 
 		set_running (self, FALSE);
+
+		priv->fast_supported = FALSE;
 	}
 }
 
@@ -227,7 +282,7 @@ nm_supplicant_manager_get (void)
 }
 
 static void
-nm_supplicant_manager_init (NMSupplicantManager * self)
+nm_supplicant_manager_init (NMSupplicantManager *self)
 {
 	NMSupplicantManagerPrivate *priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (self);
 	DBusGConnection *bus;
@@ -245,7 +300,16 @@ nm_supplicant_manager_init (NMSupplicantManager * self)
 	                                         WPAS_DBUS_PATH,
 	                                         WPAS_DBUS_INTERFACE);
 
+	priv->props_proxy = dbus_g_proxy_new_for_name (bus,
+	                                               WPAS_DBUS_SERVICE,
+	                                               WPAS_DBUS_PATH,
+	                                               DBUS_INTERFACE_PROPERTIES);
+
 	priv->ifaces = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
+
+	/* Grab list of supported EAP methods */
+	if (priv->running)
+		check_supported_eap_methods (self);
 }
 
 static void
@@ -290,6 +354,9 @@ dispose (GObject *object)
 	if (priv->proxy)
 		g_object_unref (priv->proxy);
 
+	if (priv->props_proxy)
+		g_object_unref (priv->props_proxy);
+
 out:
 	/* Chain up to the parent class */
 	G_OBJECT_CLASS (nm_supplicant_manager_parent_class)->dispose (object);
diff --git a/src/supplicant-manager/tests/Makefile.in b/src/supplicant-manager/tests/Makefile.in
index 18288c6e..e0fa89e6 100644
--- a/src/supplicant-manager/tests/Makefile.in
+++ b/src/supplicant-manager/tests/Makefile.in
@@ -188,8 +188,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/src/tests/Makefile.in b/src/tests/Makefile.in
index 0f19b712..a60ca43f 100644
--- a/src/tests/Makefile.in
+++ b/src/tests/Makefile.in
@@ -205,8 +205,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/src/vpn-manager/Makefile.in b/src/vpn-manager/Makefile.in
index 3785667e..8999e831 100644
--- a/src/vpn-manager/Makefile.in
+++ b/src/vpn-manager/Makefile.in
@@ -190,8 +190,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/src/vpn-manager/nm-vpn-connection-base.c b/src/vpn-manager/nm-vpn-connection-base.c
index c7373627..bc2cffb2 100644
--- a/src/vpn-manager/nm-vpn-connection-base.c
+++ b/src/vpn-manager/nm-vpn-connection-base.c
@@ -36,6 +36,7 @@ typedef struct {
 
 	NMConnection *connection;
 	char *ac_path;
+	char *specific_object;
 	gboolean is_default;
 	gboolean is_default6;
 	NMActiveConnectionState state;
@@ -91,9 +92,16 @@ nm_vpn_connection_base_get_ac_path (NMVpnConnectionBase *self)
 	return NM_VPN_CONNECTION_BASE_GET_PRIVATE (self)->ac_path;
 }
 
+const char *
+nm_vpn_connection_base_get_specific_object (NMVpnConnectionBase *self)
+{
+	return NM_VPN_CONNECTION_BASE_GET_PRIVATE (self)->specific_object;
+}
+
 void
 nm_vpn_connection_base_export (NMVpnConnectionBase *self,
-                               NMConnection *connection)
+                               NMConnection *connection,
+                               const char *specific_object)
 {
 	NMVpnConnectionBasePrivate *priv = NM_VPN_CONNECTION_BASE_GET_PRIVATE (self);
 	NMDBusManager *dbus_mgr;
@@ -101,6 +109,7 @@ nm_vpn_connection_base_export (NMVpnConnectionBase *self,
 	g_return_if_fail (priv->connection == NULL);
 
 	priv->connection = g_object_ref (connection);
+	priv->specific_object = g_strdup (specific_object);
 
 	dbus_mgr = nm_dbus_manager_get ();
 	dbus_g_connection_register_g_object (nm_dbus_manager_get_connection (dbus_mgr),
@@ -128,6 +137,7 @@ dispose (GObject *object)
 		priv->disposed = TRUE;
 
 		g_free (priv->ac_path);
+		g_free (priv->specific_object);
 		g_object_unref (priv->connection);
 	}
 
@@ -145,10 +155,10 @@ get_property (GObject *object, guint prop_id,
 		g_value_set_boxed (value, nm_connection_get_path (priv->connection));
 		break;
 	case PROP_UUID:
-		g_value_set_boxed (value, nm_connection_get_uuid (priv->connection));
+		g_value_set_string (value, nm_connection_get_uuid (priv->connection));
 		break;
 	case PROP_SPECIFIC_OBJECT:
-		g_value_set_boxed (value, priv->ac_path);
+		g_value_set_boxed (value, priv->specific_object);
 		break;
 	case PROP_DEVICES:
 		g_value_take_boxed (value, g_ptr_array_new ());
diff --git a/src/vpn-manager/nm-vpn-connection-base.h b/src/vpn-manager/nm-vpn-connection-base.h
index 0c17d9e8..6f19e7c5 100644
--- a/src/vpn-manager/nm-vpn-connection-base.h
+++ b/src/vpn-manager/nm-vpn-connection-base.h
@@ -44,8 +44,11 @@ GType nm_vpn_connection_base_get_type (void);
 
 const char *nm_vpn_connection_base_get_ac_path (NMVpnConnectionBase *self);
 
+const char *nm_vpn_connection_base_get_specific_object (NMVpnConnectionBase *self);
+
 void nm_vpn_connection_base_export (NMVpnConnectionBase *self,
-                                    NMConnection *connection);
+                                    NMConnection *connection,
+                                    const char *specific_object);
 
 void nm_vpn_connection_base_set_state (NMVpnConnectionBase *self,
                                        NMVPNConnectionState vpn_state);
diff --git a/src/vpn-manager/nm-vpn-connection.c b/src/vpn-manager/nm-vpn-connection.c
index 067b2dce..73f2b553 100644
--- a/src/vpn-manager/nm-vpn-connection.c
+++ b/src/vpn-manager/nm-vpn-connection.c
@@ -46,6 +46,7 @@
 #include "NetworkManagerUtils.h"
 #include "nm-dns-manager.h"
 #include "nm-netlink-monitor.h"
+#include "nm-netlink-utils.h"
 #include "nm-glib-compat.h"
 #include "settings/nm-settings-connection.h"
 
@@ -86,6 +87,7 @@ typedef struct {
 	NMIP4Config *ip4_config;
 	guint32 ip4_internal_gw;
 	char *ip_iface;
+	int ip_ifindex;
 	char *banner;
 
 	struct rtnl_route *gw_route;
@@ -219,6 +221,7 @@ device_ip4_config_changed (NMDevice *device,
 NMVPNConnection *
 nm_vpn_connection_new (NMConnection *connection,
                        NMDevice *parent_device,
+                       const char *specific_object,
                        gboolean user_requested,
                        gulong user_uid)
 {
@@ -247,7 +250,7 @@ nm_vpn_connection_new (NMConnection *connection,
 	                                     G_CALLBACK (device_ip4_config_changed),
 	                                     self);
 
-	nm_vpn_connection_base_export (NM_VPN_CONNECTION_BASE (self), connection);
+	nm_vpn_connection_base_export (NM_VPN_CONNECTION_BASE (self), connection, specific_object);
 
 	return self;
 }
@@ -283,6 +286,28 @@ plugin_failed (DBusGProxy *proxy,
 	}
 }
 
+static const char *
+vpn_state_to_string (NMVPNServiceState state)
+{
+	switch (state) {
+	case NM_VPN_SERVICE_STATE_INIT:
+		return "init";
+	case NM_VPN_SERVICE_STATE_SHUTDOWN:
+		return "shutdown";
+	case NM_VPN_SERVICE_STATE_STARTING:
+		return "starting";
+	case NM_VPN_SERVICE_STATE_STARTED:
+		return "started";
+	case NM_VPN_SERVICE_STATE_STOPPING:
+		return "stopping";
+	case NM_VPN_SERVICE_STATE_STOPPED:
+		return "stopped";
+	default:
+		break;
+	}
+	return "unknown";
+}
+
 static void
 plugin_state_changed (DBusGProxy *proxy,
                       NMVPNServiceState state,
@@ -291,7 +316,8 @@ plugin_state_changed (DBusGProxy *proxy,
 	NMVPNConnection *connection = NM_VPN_CONNECTION (user_data);
 	NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
 
-	nm_log_info (LOGD_VPN, "VPN plugin state changed: %d", state);
+	nm_log_info (LOGD_VPN, "VPN plugin state changed: %s (%d)",
+	             vpn_state_to_string (state), state);
 
 	if (state == NM_VPN_SERVICE_STATE_STOPPED) {
 		/* Clear connection secrets to ensure secrets get requested each time the
@@ -424,6 +450,13 @@ nm_vpn_connection_ip4_config_get (DBusGProxy *proxy,
 		goto error;
 	}
 
+	/* Grab the interface index for address/routing operations */
+	priv->ip_ifindex = nm_netlink_iface_to_index (priv->ip_iface);
+	if (!priv->ip_ifindex) {
+		nm_log_err (LOGD_VPN, "(%s): failed to look up VPN interface index", priv->ip_iface);
+		goto error;
+	}
+
 	addr = nm_ip4_address_new ();
 	nm_ip4_address_set_prefix (addr, 24); /* default to class C */
 
@@ -529,9 +562,9 @@ nm_vpn_connection_ip4_config_get (DBusGProxy *proxy,
 	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (priv->connection, NM_TYPE_SETTING_IP4_CONFIG));
 	nm_utils_merge_ip4_config (config, s_ip4);
 
-	nm_system_device_set_up_down_with_iface (priv->ip_iface, TRUE, NULL);
+	nm_system_iface_set_up (priv->ip_ifindex, TRUE, NULL);
 
-	if (nm_system_apply_ip4_config (priv->ip_iface, config, 0, NM_IP4_COMPARE_FLAG_ALL)) {
+	if (nm_system_apply_ip4_config (priv->ip_ifindex, config, 0, NM_IP4_COMPARE_FLAG_ALL)) {
 		NMDnsManager *dns_mgr;
 
 		/* Add any explicit route to the VPN gateway through the parent device */
@@ -765,6 +798,14 @@ nm_vpn_connection_get_ip_iface (NMVPNConnection *connection)
 	return NM_VPN_CONNECTION_GET_PRIVATE (connection)->ip_iface;
 }
 
+int
+nm_vpn_connection_get_ip_ifindex (NMVPNConnection *connection)
+{
+	g_return_val_if_fail (NM_IS_VPN_CONNECTION (connection), -1);
+
+	return NM_VPN_CONNECTION_GET_PRIVATE (connection)->ip_ifindex;
+}
+
 NMDevice *
 nm_vpn_connection_get_parent_device (NMVPNConnection *connection)
 {
@@ -940,11 +981,11 @@ vpn_cleanup (NMVPNConnection *connection)
 {
 	NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
 
-	if (priv->ip_iface) {
-		nm_system_device_set_up_down_with_iface (priv->ip_iface, FALSE, NULL);
+	if (priv->ip_ifindex) {
+		nm_system_iface_set_up (priv->ip_ifindex, FALSE, NULL);
 		/* FIXME: use AF_UNSPEC here when we have IPv6 support */
-		nm_system_device_flush_routes_with_iface (priv->ip_iface, AF_INET);
-		nm_system_device_flush_addresses_with_iface (priv->ip_iface);
+		nm_system_iface_flush_routes (priv->ip_ifindex, AF_INET);
+		nm_system_iface_flush_addresses (priv->ip_ifindex, AF_UNSPEC);
 	}
 
 	if (priv->ip4_config) {
@@ -958,12 +999,12 @@ vpn_cleanup (NMVPNConnection *connection)
 
 		/* Remove any previously added VPN gateway host route */
 		if (priv->gw_route)
-			rtnl_route_del (nm_netlink_get_default_handle (), priv->gw_route, 0);
+			nm_netlink_route_delete (priv->gw_route);
 
 		/* Reset routes and addresses of the currently active device */
 		parent_config = nm_device_get_ip4_config (priv->parent_dev);
 		if (parent_config) {
-			if (!nm_system_apply_ip4_config (nm_device_get_ip_iface (priv->parent_dev),
+			if (!nm_system_apply_ip4_config (nm_device_get_ip_ifindex (priv->parent_dev),
 			                                 nm_device_get_ip4_config (priv->parent_dev),
 			                                 nm_device_get_priority (priv->parent_dev),
 			                                 NM_IP4_COMPARE_FLAG_ADDRESSES | NM_IP4_COMPARE_FLAG_ROUTES)) {
@@ -982,6 +1023,7 @@ vpn_cleanup (NMVPNConnection *connection)
 
 	g_free (priv->ip_iface);
 	priv->ip_iface = NULL;
+	priv->ip_ifindex = 0;
 
 	/* Clear out connection secrets to ensure that the settings service
 	 * gets asked for them next time the connection is activated.
diff --git a/src/vpn-manager/nm-vpn-connection.h b/src/vpn-manager/nm-vpn-connection.h
index ee8eb5b6..c0d15f8a 100644
--- a/src/vpn-manager/nm-vpn-connection.h
+++ b/src/vpn-manager/nm-vpn-connection.h
@@ -57,12 +57,14 @@ GType nm_vpn_connection_get_type (void);
 
 NMVPNConnection * nm_vpn_connection_new (NMConnection *connection,
                                          NMDevice *parent_device,
+                                         const char *specific_object,
                                          gboolean user_requested,
                                          gulong user_uid);
 
 void                 nm_vpn_connection_activate        (NMVPNConnection *connection);
 NMConnection *       nm_vpn_connection_get_connection  (NMVPNConnection *connection);
 const char *         nm_vpn_connection_get_active_connection_path (NMVPNConnection *connection);
+const char *         nm_vpn_connection_get_specific_object_path (NMVPNConnection *connection);
 const char *         nm_vpn_connection_get_name        (NMVPNConnection *connection);
 NMVPNConnectionState nm_vpn_connection_get_vpn_state   (NMVPNConnection *connection);
 const char *         nm_vpn_connection_get_banner      (NMVPNConnection *connection);
@@ -72,6 +74,7 @@ void                 nm_vpn_connection_disconnect      (NMVPNConnection *connect
                                                         NMVPNConnectionStateReason reason);
 NMIP4Config *        nm_vpn_connection_get_ip4_config  (NMVPNConnection *connection);
 const char *         nm_vpn_connection_get_ip_iface    (NMVPNConnection *connection);
+int                  nm_vpn_connection_get_ip_ifindex  (NMVPNConnection *connection);
 NMDevice *           nm_vpn_connection_get_parent_device (NMVPNConnection *connection);
 guint32              nm_vpn_connection_get_ip4_internal_gateway (NMVPNConnection *connection);
 
diff --git a/src/vpn-manager/nm-vpn-manager.c b/src/vpn-manager/nm-vpn-manager.c
index 6772bb18..41e96c0b 100644
--- a/src/vpn-manager/nm-vpn-manager.c
+++ b/src/vpn-manager/nm-vpn-manager.c
@@ -15,7 +15,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * Copyright (C) 2005 - 2010 Red Hat, Inc.
+ * Copyright (C) 2005 - 2011 Red Hat, Inc.
  * Copyright (C) 2006 - 2008 Novell, Inc.
  */
 
@@ -162,6 +162,7 @@ NMVPNConnection *
 nm_vpn_manager_activate_connection (NMVPNManager *manager,
                                     NMConnection *connection,
                                     NMDevice *device,
+                                    const char *specific_object,
                                     gboolean user_requested,
                                     gulong user_uid,
                                     GError **error)
@@ -209,7 +210,7 @@ nm_vpn_manager_activate_connection (NMVPNManager *manager,
 		return NULL;
 	}
 
-	vpn = nm_vpn_service_activate (service, connection, device, user_requested, user_uid, error);
+	vpn = nm_vpn_service_activate (service, connection, device, specific_object, user_requested, user_uid, error);
 	if (vpn) {
 		g_signal_connect (vpn, "vpn-state-changed",
 		                  G_CALLBACK (connection_vpn_state_changed),
@@ -306,9 +307,9 @@ nm_vpn_manager_get_active_connections (NMVPNManager *self)
 	return list;
 }
 
-NMConnection *
-nm_vpn_manager_get_connection_for_active (NMVPNManager *manager,
-                                          const char *active_path)
+NMVPNConnection *
+nm_vpn_manager_get_vpn_connection_for_active (NMVPNManager *manager,
+                                              const char *active_path)
 {
 	NMVPNManagerPrivate *priv;
 	GHashTableIter iter;
@@ -327,13 +328,24 @@ nm_vpn_manager_get_connection_for_active (NMVPNManager *manager,
 
 			ac_path = nm_vpn_connection_get_active_connection_path (vpn);
 			if (ac_path && !strcmp (ac_path, active_path))
-				return nm_vpn_connection_get_connection (vpn);
+				return vpn;
 		}
 	}
 
 	return NULL;
 }
 
+NMConnection *
+nm_vpn_manager_get_connection_for_active (NMVPNManager *manager,
+                                          const char *active_path)
+{
+	NMVPNConnection *vpn_con;
+
+	vpn_con = nm_vpn_manager_get_vpn_connection_for_active (manager, active_path);
+
+	return vpn_con ? nm_vpn_connection_get_connection (vpn_con) : NULL;
+}
+
 static char *
 service_name_from_file (const char *path)
 {
diff --git a/src/vpn-manager/nm-vpn-manager.h b/src/vpn-manager/nm-vpn-manager.h
index a899122c..78a5220b 100644
--- a/src/vpn-manager/nm-vpn-manager.h
+++ b/src/vpn-manager/nm-vpn-manager.h
@@ -15,7 +15,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * Copyright (C) 2005 - 2008 Red Hat, Inc.
+ * Copyright (C) 2005 - 2011 Red Hat, Inc.
  * Copyright (C) 2006 - 2008 Novell, Inc.
  */
 
@@ -69,6 +69,7 @@ NMVPNManager *nm_vpn_manager_get (void);
 NMVPNConnection *nm_vpn_manager_activate_connection (NMVPNManager *manager,
                                                      NMConnection *connection,
                                                      NMDevice *device,
+                                                     const char *specific_object,
                                                      gboolean user_requested,
                                                      gulong user_uid,
                                                      GError **error);
@@ -83,7 +84,10 @@ void nm_vpn_manager_add_active_connections (NMVPNManager *manager,
 
 GSList *nm_vpn_manager_get_active_connections (NMVPNManager *manager);
 
+NMVPNConnection *nm_vpn_manager_get_vpn_connection_for_active (NMVPNManager *manager,
+                                                               const char *active_path);
+
 NMConnection *nm_vpn_manager_get_connection_for_active (NMVPNManager *manager,
                                                         const char *active_path);
 
-#endif /* NM_VPN_VPN_MANAGER_H */
+#endif /* NM_VPN_MANAGER_H */
diff --git a/src/vpn-manager/nm-vpn-service.c b/src/vpn-manager/nm-vpn-service.c
index ed08a40a..95e4f2b1 100644
--- a/src/vpn-manager/nm-vpn-service.c
+++ b/src/vpn-manager/nm-vpn-service.c
@@ -15,7 +15,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * Copyright (C) 2005 - 2010 Red Hat, Inc.
+ * Copyright (C) 2005 - 2011 Red Hat, Inc.
  * Copyright (C) 2005 - 2008 Novell, Inc.
  */
 
@@ -324,6 +324,7 @@ NMVPNConnection *
 nm_vpn_service_activate (NMVPNService *service,
                          NMConnection *connection,
                          NMDevice *device,
+                         const char *specific_object,
                          gboolean user_requested,
                          gulong user_uid,
                          GError **error)
@@ -341,7 +342,7 @@ nm_vpn_service_activate (NMVPNService *service,
 
 	clear_quit_timeout (service);
 
-	vpn = nm_vpn_connection_new (connection, device, user_requested, user_uid);
+	vpn = nm_vpn_connection_new (connection, device, specific_object, user_requested, user_uid);
 	g_signal_connect (vpn, "vpn-state-changed",
 				   G_CALLBACK (connection_vpn_state_changed),
 				   service);
diff --git a/src/vpn-manager/nm-vpn-service.h b/src/vpn-manager/nm-vpn-service.h
index cbe394ca..e8b1cfc4 100644
--- a/src/vpn-manager/nm-vpn-service.h
+++ b/src/vpn-manager/nm-vpn-service.h
@@ -15,7 +15,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * Copyright (C) 2005 - 2008 Red Hat, Inc.
+ * Copyright (C) 2005 - 2011 Red Hat, Inc.
  * Copyright (C) 2005 - 2008 Novell, Inc.
  */
 
@@ -57,6 +57,7 @@ const char *nm_vpn_service_get_name_file (NMVPNService *service);
 NMVPNConnection * nm_vpn_service_activate (NMVPNService *service,
                                            NMConnection *connection,
                                            NMDevice *device,
+                                           const char *specific_object,
                                            gboolean user_requested,
                                            gulong user_uid,
                                            GError **error);
diff --git a/src/wimax/Makefile.in b/src/wimax/Makefile.in
index e6064bc6..1be78482 100644
--- a/src/wimax/Makefile.in
+++ b/src/wimax/Makefile.in
@@ -186,8 +186,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/src/wimax/iwmxsdk.c b/src/wimax/iwmxsdk.c
index dd78d5a4..9c3a78bb 100644
--- a/src/wimax/iwmxsdk.c
+++ b/src/wimax/iwmxsdk.c
@@ -27,7 +27,8 @@
 #include <stdlib.h>
 #include <errno.h>
 #include <string.h>
-#include <net/if.h>
+#include <sys/socket.h>
+#include <linux/if.h>
 
 #include <glib.h>
 
@@ -190,6 +191,7 @@ typedef struct {
 	WIMAX_API_DEVICE_STATUS new_status;
 	WIMAX_API_DEVICE_STATUS old_status;
 	WIMAX_API_STATUS_REASON reason;
+	WIMAX_API_CONNECTION_PROGRESS_INFO progress;
 } StateChangeInfo;
 
 static gboolean
@@ -202,6 +204,7 @@ state_change_handler(gpointer user_data)
 		                              info->new_status,
 		                              info->old_status,
 		                              info->reason,
+		                              info->progress,
 		                              info->wmxsdk->callback_data);
 	}
 	wmxsdk_unref(info->wmxsdk);
@@ -214,7 +217,8 @@ static void
 _schedule_state_change(struct wmxsdk *wmxsdk,
                        WIMAX_API_DEVICE_STATUS new_status,
                        WIMAX_API_DEVICE_STATUS old_status,
-                       WIMAX_API_STATUS_REASON reason)
+                       WIMAX_API_STATUS_REASON reason,
+                       WIMAX_API_CONNECTION_PROGRESS_INFO progress)
 {
 	StateChangeInfo *info;
 
@@ -227,6 +231,7 @@ _schedule_state_change(struct wmxsdk *wmxsdk,
 	info->new_status = new_status;
 	info->old_status = old_status;
 	info->reason = reason;
+	info->progress = progress;
 
 	wmxsdk_ref(wmxsdk);
 	g_idle_add(state_change_handler, info);
@@ -476,6 +481,48 @@ const char *iwmx_sdk_media_status_to_str(WIMAX_API_MEDIA_STATUS status)
 	}
 }
 
+const char *
+iwmx_sdk_con_progress_to_str(WIMAX_API_CONNECTION_PROGRESS_INFO progress)
+{
+	switch (progress) {
+
+	/**< Device is in Ranging */
+	case WIMAX_API_DEVICE_CONNECTION_PROGRESS_Ranging:
+		return "ranging";
+
+	/**< Device is in SBC */
+	case WIMAX_API_DEVICE_CONNECTION_PROGRESS_SBC:
+		return "sbc";
+
+	/**< Device is in EAP authentication Device */
+	case WIMAX_API_DEVICE_CONNECTION_PROGRESS_EAP_authentication_Device:
+		return "eap-auth-device";
+
+	/**< Device is in EAP authentication User */
+	case WIMAX_API_DEVICE_CONNECTION_PROGRESS_EAP_authentication_User:
+		return "eap-auth-user";
+
+	/**< Device is in 3-way-handshake */
+	case WIMAX_API_DEVICE_CONNECTION_PROGRESS_3_way_handshake:
+		return "3way-handshake";
+
+	/**< Device is in Registration */
+	case WIMAX_API_DEVICE_CONNECTION_PROGRESS_Registration:
+		return "registration";
+
+	/**< Device is in De-registration */
+	case WIMAX_API_DEVICE_CONNECTION_PROGRESS_De_registration:
+		return "deregistration";
+
+	/**< Device is registered (operational) */
+	case WIMAX_API_DEVICE_CONNECTION_PROGRESS_Registered:
+		return "registered";
+
+	default:
+		return "unknown";
+	}
+}
+
 /*
  * Get the device's status from the device
  *
@@ -982,7 +1029,7 @@ static void __iwmx_sdk_state_change_cb(WIMAX_API_DEVICE_ID *device_id,
 	wmxsdk->status = status;
 	g_mutex_unlock(wmxsdk->status_mutex);
 
-	_schedule_state_change(wmxsdk, status, old_status, reason);
+	_schedule_state_change(wmxsdk, status, old_status, reason, pi);
 }
 
 /*
@@ -1170,7 +1217,8 @@ static int iwmx_sdk_setup(struct wmxsdk *wmxsdk)
 	_schedule_state_change(wmxsdk,
 	                       status,
 	                       WIMAX_API_DEVICE_STATUS_UnInitialized,
-	                       WIMAX_API_STATUS_REASON_Normal);
+	                       WIMAX_API_STATUS_REASON_Normal,
+	                       WIMAX_API_DEVICE_CONNECTION_PROGRESS_Ranging);
 
 	return 0;
 
@@ -1268,23 +1316,22 @@ void wmxsdk_unref(struct wmxsdk *wmxsdk)
 
 static void iwmx_sdk_dev_add(unsigned idx, unsigned api_idx, const char *name)
 {
-	int ifindex;
 	struct wmxsdk *wmxsdk;
 	const char *s;
 
 	if (idx >= IWMX_SDK_DEV_MAX) {
 		nm_log_err(LOGD_WIMAX, "BUG! idx (%u) >= IWMX_SDK_DEV_MAX (%u)", idx, IWMX_SDK_DEV_MAX);
-		goto error_bug;
+		return;
 	}
 	if (g_iwmx_sdk_devs[idx] != NULL) {
 		nm_log_err(LOGD_WIMAX, "BUG! device index %u already enumerated?", idx);
-		goto error_bug;
+		return;
 	}
 
 	wmxsdk = wmxsdk_new();
 	if (wmxsdk == NULL) {
 		nm_log_err(LOGD_WIMAX, "Can't allocate %zu bytes", sizeof(*wmxsdk));
-		goto error_bug;
+		return;
 	}
 
 	/*
@@ -1297,23 +1344,17 @@ static void iwmx_sdk_dev_add(unsigned idx, unsigned api_idx, const char *name)
 	    || sscanf(s, "if:%15[^ \f\n\r\t\v]", wmxsdk->ifname) != 1) {
 		nm_log_err(LOGD_WIMAX, "Cannot extract network interface name off '%s'",
 			      name);
-		goto error_noifname;
+		goto error;
 	}
 	nm_log_dbg(LOGD_WIMAX, "network interface name: '%s'", wmxsdk->ifname);
 
-	ifindex = if_nametoindex(wmxsdk->ifname);
-	if (ifindex <= 0) {
-		nm_log_err(LOGD_WIMAX, "wxmsdk: %s: cannot find interface index", wmxsdk->ifname);
-		goto error_noifname;
-	}
-
 	strncpy(wmxsdk->name, name, sizeof(wmxsdk->name));
 	wmxsdk->device_id.privilege = WIMAX_API_PRIVILEGE_READ_WRITE;
 	wmxsdk->device_id.deviceIndex = api_idx;
 
 	if (iwmx_sdk_setup(wmxsdk) != 0) {
 		nm_log_err(LOGD_WIMAX, "wxmsdk: %s: cannot set up interface", wmxsdk->ifname);
-		goto error_setup;
+		goto error;
 	}
 
 	g_iwmx_sdk_devs[idx] = wmxsdk;
@@ -1322,10 +1363,8 @@ static void iwmx_sdk_dev_add(unsigned idx, unsigned api_idx, const char *name)
 	iwmx_sdk_call_new_callbacks (wmxsdk);
 	return;
 
-error_setup:
-error_noifname:
+error:
 	wmxsdk_unref(wmxsdk);
-error_bug:
 	return;
 }
 
diff --git a/src/wimax/iwmxsdk.h b/src/wimax/iwmxsdk.h
index bd55679a..1888b709 100644
--- a/src/wimax/iwmxsdk.h
+++ b/src/wimax/iwmxsdk.h
@@ -34,6 +34,7 @@ typedef void (*WimaxStateChangeFunc) (struct wmxsdk *wmxsdk,
                                       WIMAX_API_DEVICE_STATUS new_status,
                                       WIMAX_API_DEVICE_STATUS old_status,
                                       WIMAX_API_STATUS_REASON reason,
+                                      WIMAX_API_CONNECTION_PROGRESS_INFO info,
                                       void *user_data);
 
 typedef void (*WimaxMediaStatusFunc) (struct wmxsdk *wmxsdk,
@@ -101,6 +102,7 @@ WIMAX_API_LINK_STATUS_INFO_EX *iwmx_sdk_get_link_status_info(struct wmxsdk *wmxs
 const char *iwmx_sdk_dev_status_to_str(WIMAX_API_DEVICE_STATUS status);
 const char *iwmx_sdk_reason_to_str(WIMAX_API_STATUS_REASON reason);
 const char *iwmx_sdk_media_status_to_str(WIMAX_API_MEDIA_STATUS status);
+const char *iwmx_sdk_con_progress_to_str(WIMAX_API_CONNECTION_PROGRESS_INFO progress);
 int iwmx_sdk_rf_state_set(struct wmxsdk *wmxsdk, WIMAX_API_RF_STATE rf_state);
 int iwmx_sdk_get_networks(struct wmxsdk *wmxsdk);
 int iwmx_sdk_api_init(void);
diff --git a/src/wimax/nm-device-wimax.c b/src/wimax/nm-device-wimax.c
index 9dff503d..2d8553a0 100644
--- a/src/wimax/nm-device-wimax.c
+++ b/src/wimax/nm-device-wimax.c
@@ -23,7 +23,8 @@
 #include <unistd.h>
 #include <sys/ioctl.h>
 #include <net/ethernet.h>
-#include <net/if.h>
+#include <sys/socket.h>
+#include <linux/if.h>
 
 #include <WiMaxAPI.h>
 #include <WiMaxAPIEx.h>
@@ -91,6 +92,9 @@ typedef struct {
 	struct ether_addr hw_addr;
 	guint activation_timeout_id;
 
+	/* Track whether stage1 (Prepare) is completed yet or not */
+	gboolean prepare_done;
+
 	guint sdk_action_defer_id;
 
 	guint link_timeout_id;
@@ -231,27 +235,25 @@ set_current_nsp (NMDeviceWimax *self, NMWimaxNsp *new_nsp)
 {
 	NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);
 	NMWimaxNsp *old_nsp;
-	char *old_path = NULL;
+	gboolean path_changed = FALSE;
 
 	old_nsp = priv->current_nsp;
-	if (old_nsp) {
-		old_path = g_strdup (nm_wimax_nsp_get_dbus_path (old_nsp));
-		priv->current_nsp = NULL;
-	}
+	priv->current_nsp = NULL;
 
 	if (new_nsp)
 		priv->current_nsp = g_object_ref (new_nsp);
 
-	if (old_nsp)
-		g_object_unref (old_nsp);
+	if (old_nsp && new_nsp) {
+		path_changed = (g_strcmp0 (nm_wimax_nsp_get_dbus_path (old_nsp),
+		                           nm_wimax_nsp_get_dbus_path (new_nsp)) != 0);
+	}
 
 	/* Only notify if it's really changed */
-	if (   (!old_path && new_nsp)
-		|| (old_path && !new_nsp)
-	    || (old_path && new_nsp && strcmp (old_path, nm_wimax_nsp_get_dbus_path (new_nsp))))
+	if (old_nsp != new_nsp || path_changed)
 		g_object_notify (G_OBJECT (self), NM_DEVICE_WIMAX_ACTIVE_NSP);
 
-	g_free (old_path);
+	if (old_nsp)
+		g_object_unref (old_nsp);
 }
 
 NMWimaxNsp *
@@ -390,7 +392,7 @@ real_take_down (NMDevice *device)
 static gboolean
 real_hw_is_up (NMDevice *device)
 {
-	return nm_system_device_is_up (device);
+	return nm_system_iface_is_up (nm_device_get_ip_ifindex (device));
 }
 
 static gboolean
@@ -401,13 +403,13 @@ real_hw_bring_up (NMDevice *dev, gboolean *no_firmware)
 	if (!priv->enabled || !priv->wimaxd_enabled)
 		return FALSE;
 
-	return nm_system_device_set_up_down (dev, TRUE, no_firmware);
+	return nm_system_iface_set_up (nm_device_get_ip_ifindex (dev), TRUE, no_firmware);
 }
 
 static void
 real_hw_take_down (NMDevice *dev)
 {
-	nm_system_device_set_up_down (dev, FALSE, NULL);
+	nm_system_iface_set_up (nm_device_get_ip_ifindex (dev), FALSE, NULL);
 }
 
 static void
@@ -749,6 +751,8 @@ real_act_stage1_prepare (NMDevice *device, NMDeviceStateReason *reason)
 
 	set_current_nsp (NM_DEVICE_WIMAX (device), nsp);
 
+	priv->prepare_done = TRUE;
+
 	/* If the device is scanning, it won't connect, so we have to wait until
 	 * it's not scanning to proceed to stage 2.
 	 */
@@ -853,6 +857,7 @@ wmx_state_change_cb (struct wmxsdk *wmxsdk,
                      WIMAX_API_DEVICE_STATUS new_status,
                      WIMAX_API_DEVICE_STATUS old_status,
                      WIMAX_API_STATUS_REASON reason,
+                     WIMAX_API_CONNECTION_PROGRESS_INFO progress,
                      void *user_data)
 {
 	NMDeviceWimax *self = NM_DEVICE_WIMAX (user_data);
@@ -862,10 +867,17 @@ wmx_state_change_cb (struct wmxsdk *wmxsdk,
 	gboolean old_available = FALSE;
 	const char *nsp_name = NULL;
 
+	iface = nm_device_get_iface (NM_DEVICE (self));
+	nm_log_info (LOGD_WIMAX, "(%s): wimax state change %s -> %s (%s (%d))",
+	             iface,
+	             iwmx_sdk_dev_status_to_str (old_status),
+	             iwmx_sdk_dev_status_to_str (new_status),
+	             iwmx_sdk_con_progress_to_str (progress),
+	             progress);
+
 	if (new_status == old_status)
 		return;
 
-	iface = nm_device_get_iface (NM_DEVICE (self));
 	state = nm_device_interface_get_state (NM_DEVICE_INTERFACE (self));
 	old_available = nm_device_is_available (NM_DEVICE (self));
 
@@ -873,12 +885,6 @@ wmx_state_change_cb (struct wmxsdk *wmxsdk,
 	if (priv->current_nsp)
 		nsp_name = nm_wimax_nsp_get_name (priv->current_nsp);
 
-	nm_log_info (LOGD_WIMAX, "(%s): wimax state change %s -> %s (reason %d)",
-	             iface,
-	             iwmx_sdk_dev_status_to_str (old_status),
-	             iwmx_sdk_dev_status_to_str (new_status),
-	             reason);
-
 	switch (new_status) {
 	case WIMAX_API_DEVICE_STATUS_UnInitialized:
 	case WIMAX_API_DEVICE_STATUS_RF_OFF_HW_SW:
@@ -936,7 +942,7 @@ wmx_state_change_cb (struct wmxsdk *wmxsdk,
 		 * then check if we need to move to stage2 now that the device might be
 		 * ready.
 		 */
-		if (state == NM_DEVICE_STATE_PREPARE) {
+		if (state == NM_DEVICE_STATE_PREPARE && priv->prepare_done) {
 			if (   new_status == WIMAX_API_DEVICE_STATUS_Ready
 			    || new_status == WIMAX_API_DEVICE_STATUS_Connecting) {
 				nm_device_activate_schedule_stage2_device_config (NM_DEVICE (self));
@@ -1003,7 +1009,7 @@ wmx_media_status_cb (struct wmxsdk *wmxsdk,
 		break;
 	case WIMAX_API_MEDIA_STATUS_LINK_DOWN:
 		nm_log_dbg (LOGD_WIMAX, "(%s): starting link timeout", iface);
-		priv->link_timeout_id = g_timeout_add (15, link_timeout_cb, self);
+		priv->link_timeout_id = g_timeout_add_seconds (15, link_timeout_cb, self);
 		break;
 	case WIMAX_API_MEDIA_STATUS_LINK_RENEW:
 		nm_log_dbg (LOGD_WIMAX, "(%s): renewing DHCP lease", iface);
@@ -1130,18 +1136,22 @@ wmx_removed_cb (struct wmxsdk *wmxsdk, void *user_data)
 	NMDeviceWimax *self = NM_DEVICE_WIMAX (user_data);
 	NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);
 
-	if (priv->sdk) {
-		/* Clear callbacks just in case we don't hold the last reference */
-		iwmx_sdk_set_callbacks (priv->sdk, NULL, NULL, NULL, NULL, NULL, NULL);
+	if (!priv->sdk) {
+		nm_log_dbg (LOGD_WIMAX, "(%s): removed unhandled WiMAX interface", wmxsdk->ifname);
+		return;
+	}
 
-		wmxsdk_unref (priv->sdk);
-		priv->sdk = NULL;
+	nm_log_dbg (LOGD_WIMAX, "(%s): removed WiMAX interface", wmxsdk->ifname);
 
-		priv->status = WIMAX_API_DEVICE_STATUS_UnInitialized;
-		nm_device_state_changed (NM_DEVICE (self),
-								 NM_DEVICE_STATE_UNAVAILABLE,
-								 NM_DEVICE_STATE_REASON_NONE);
-	}
+	/* Clear callbacks just in case we don't hold the last reference */
+	iwmx_sdk_set_callbacks (priv->sdk, NULL, NULL, NULL, NULL, NULL, NULL);
+	wmxsdk_unref (priv->sdk);
+	priv->sdk = NULL;
+
+	priv->status = WIMAX_API_DEVICE_STATUS_UnInitialized;
+	nm_device_state_changed (NM_DEVICE (self),
+							 NM_DEVICE_STATE_UNAVAILABLE,
+							 NM_DEVICE_STATE_REASON_NONE);
 }
 
 /*************************************************************************/
@@ -1277,6 +1287,9 @@ device_state_changed (NMDevice *device,
 	NMDeviceWimax *self = NM_DEVICE_WIMAX (device);
 	NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);
 
+	/* Reset our stage1 (Prepare) done marker since it's only valid while in stage1 */
+	priv->prepare_done = FALSE;
+
 	if (new_state < NM_DEVICE_STATE_DISCONNECTED)
 		remove_all_nsps (self);
 
@@ -1323,21 +1336,27 @@ wmx_new_sdk_cb (struct wmxsdk *sdk, void *user_data)
 	NMDeviceWimax *self = NM_DEVICE_WIMAX (user_data);
 	NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);
 
-	/* If we now have the SDK, schedule an idle handler to start the device up */
-	if (!priv->sdk) {
-		priv->sdk = wmxsdk_ref (sdk);
-		iwmx_sdk_set_callbacks(priv->sdk,
-		                       wmx_state_change_cb,
-		                       wmx_media_status_cb,
-		                       wmx_connect_result_cb,
-		                       wmx_scan_result_cb,
-		                       wmx_removed_cb,
-		                       self);
-		iwmx_sdk_set_fast_reconnect_enabled (priv->sdk, 0);
-
-		if (!priv->sdk_action_defer_id)
-			priv->sdk_action_defer_id = g_idle_add (sdk_action_defer_cb, self);
+	/* We only track one wmxsdk at a time because the WiMAX SDK is pretty stupid */
+	if (priv->sdk) {
+		nm_log_dbg (LOGD_WIMAX, "(%s): WiMAX interface already known", sdk->ifname);
+		return;
 	}
+
+	nm_log_dbg (LOGD_WIMAX, "(%s): new WiMAX interface (%s)", sdk->ifname, sdk->name);
+
+	/* Now that we have an SDK, schedule an idle handler to start the device up */
+	priv->sdk = wmxsdk_ref (sdk);
+	iwmx_sdk_set_callbacks(priv->sdk,
+	                       wmx_state_change_cb,
+	                       wmx_media_status_cb,
+	                       wmx_connect_result_cb,
+	                       wmx_scan_result_cb,
+	                       wmx_removed_cb,
+	                       self);
+	iwmx_sdk_set_fast_reconnect_enabled (priv->sdk, 0);
+
+	if (!priv->sdk_action_defer_id)
+		priv->sdk_action_defer_id = g_idle_add (sdk_action_defer_cb, self);
 }
 
 /*************************************************************************/
diff --git a/test/Makefile.in b/test/Makefile.in
index 852e33b2..456a2648 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -205,8 +205,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/tools/Makefile.in b/tools/Makefile.in
index 2ff9f088..5f0ecb3b 100644
--- a/tools/Makefile.in
+++ b/tools/Makefile.in
@@ -152,8 +152,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
+LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
+LIBNL1_LIBS = @LIBNL1_LIBS@
+LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
+LIBNL2_LIBS = @LIBNL2_LIBS@
+LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
+LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
+LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
+LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@