Re: [PATCH 1/2] Use nm_connection_get_setting_<type>() whenever possible



On Mon, 2011-10-24 at 12:02 +0200, Thomas Graf wrote:
> Leads to shorter, easier to read code and improves type casting safety.

Thanks; I'm thinking of holding off on this for a short while until
0.9.2 is cut so we can avoid the merge conflicts that'll arise from the
nl80211 and ipunblock branches, but we'll deal with that when it
happens.

Dan

> Signed-off-by: Thomas Graf <tgraf redhat com>
> ---
>  examples/C/glib/list-connections-libnm-glib.c      |    2 +-
>  libnm-glib/nm-device-bt.c                          |    2 +-
>  libnm-util/nm-connection.c                         |   10 +-
>  libnm-util/tests/test-general.c                    |    6 +-
>  libnm-util/tests/test-secrets.c                    |    4 +-
>  src/NetworkManagerUtils.c                          |    6 +-
>  src/modem-manager/nm-modem-cdma.c                  |   12 +-
>  src/modem-manager/nm-modem-gsm.c                   |   12 +-
>  src/modem-manager/nm-modem.c                       |    2 +-
>  src/nm-device-bt.c                                 |   16 +-
>  src/nm-device-ethernet.c                           |   30 +-
>  src/nm-device-olpc-mesh.c                          |    8 +-
>  src/nm-device-wifi.c                               |   30 +-
>  src/nm-device.c                                    |   28 +-
>  src/nm-manager-auth.c                              |    2 +-
>  src/nm-manager.c                                   |   12 +-
>  src/nm-policy.c                                    |   12 +-
>  src/nm-wifi-ap.c                                   |    9 +-
>  src/ppp-manager/nm-ppp-manager.c                   |    8 +-
>  src/settings/nm-agent-manager.c                    |    2 +-
>  src/settings/nm-settings-connection.c              |   10 +-
>  src/settings/nm-settings.c                         |    9 +-
>  src/settings/plugins/ifcfg-rh/plugin.c             |    2 +-
>  src/settings/plugins/ifcfg-rh/reader.c             |    2 +-
>  .../plugins/ifcfg-rh/tests/test-ifcfg-rh.c         |  278 ++++++++++----------
>  src/settings/plugins/ifcfg-rh/writer.c             |   20 +-
>  src/settings/plugins/ifnet/connection_parser.c     |   41 +--
>  src/settings/plugins/ifnet/plugin.c                |    3 +-
>  src/settings/plugins/ifupdown/parser.c             |    5 +-
>  src/settings/plugins/ifupdown/plugin.c             |   12 +-
>  src/settings/plugins/keyfile/reader.c              |    4 +-
>  src/settings/plugins/keyfile/tests/test-keyfile.c  |   70 +++---
>  src/tests/test-wifi-ap-utils.c                     |    8 +-
>  src/vpn-manager/nm-vpn-connection.c                |   22 +-
>  src/vpn-manager/nm-vpn-manager.c                   |    2 +-
>  src/wimax/nm-wimax-nsp.c                           |    2 +-
>  test/nm-tool.c                                     |    2 +-
>  37 files changed, 342 insertions(+), 363 deletions(-)
> 
> diff --git a/examples/C/glib/list-connections-libnm-glib.c b/examples/C/glib/list-connections-libnm-glib.c
> index edb5ccc..01a9f25 100644
> --- a/examples/C/glib/list-connections-libnm-glib.c
> +++ b/examples/C/glib/list-connections-libnm-glib.c
> @@ -76,7 +76,7 @@ show_connection (NMConnection *data, gpointer user_data)
>  	char timestamp_real_str[64];
>  	const char *val1, *val2, *val3, *val4, *val5;
>  
> -	s_con = (NMSettingConnection *) nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION);
> +	s_con = nm_connection_get_setting_connection (connection);
>  	if (s_con) {
>  		/* Get various info from NMSettingConnection and show it */
>  		timestamp = nm_setting_connection_get_timestamp (s_con);
> diff --git a/libnm-glib/nm-device-bt.c b/libnm-glib/nm-device-bt.c
> index dc60d25..a306bb7 100644
> --- a/libnm-glib/nm-device-bt.c
> +++ b/libnm-glib/nm-device-bt.c
> @@ -169,7 +169,7 @@ get_connection_bt_type (NMConnection *connection)
>  	NMSettingBluetooth *s_bt;
>  	const char *bt_type;
>  
> -	s_bt = (NMSettingBluetooth *) nm_connection_get_setting (connection, NM_TYPE_SETTING_BLUETOOTH);
> +	s_bt = nm_connection_get_setting_bluetooth (connection);
>  	if (!s_bt)
>  		return NM_BT_CAPABILITY_NONE;
>  
> diff --git a/libnm-util/nm-connection.c b/libnm-util/nm-connection.c
> index 6a10128..76af7e0 100644
> --- a/libnm-util/nm-connection.c
> +++ b/libnm-util/nm-connection.c
> @@ -709,7 +709,7 @@ gboolean
>  nm_connection_verify (NMConnection *connection, GError **error)
>  {
>  	NMConnectionPrivate *priv;
> -	NMSetting *s_con;
> +	NMSettingConnection *s_con;
>  	GHashTableIter iter;
>  	gpointer value;
>  	GSList *all_settings = NULL;
> @@ -731,7 +731,7 @@ nm_connection_verify (NMConnection *connection, GError **error)
>  	priv = NM_CONNECTION_GET_PRIVATE (connection);
>  
>  	/* First, make sure there's at least 'connection' setting */
> -	s_con = nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION);
> +	s_con = nm_connection_get_setting_connection (connection);
>  	if (!s_con) {
>  		g_set_error_literal (error,
>  		                     NM_CONNECTION_ERROR,
> @@ -757,7 +757,7 @@ nm_connection_verify (NMConnection *connection, GError **error)
>  	/* Now make sure the given 'type' setting can actually be the base setting
>  	 * of the connection.  Can't have type=ppp for example.
>  	 */
> -	ctype = nm_setting_connection_get_connection_type (NM_SETTING_CONNECTION (s_con));
> +	ctype = nm_setting_connection_get_connection_type (s_con);
>  	if (!ctype) {
>  		g_set_error_literal (error,
>  		                     NM_CONNECTION_ERROR,
> @@ -1243,7 +1243,7 @@ nm_connection_get_uuid (NMConnection *connection)
>  	g_return_val_if_fail (connection != NULL, NULL);
>  	g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
>  
> -	s_con = (NMSettingConnection *) nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION);
> +	s_con = nm_connection_get_setting_connection (connection);
>  	g_return_val_if_fail (s_con != NULL, NULL);
>  
>  	return nm_setting_connection_get_uuid (s_con);
> @@ -1265,7 +1265,7 @@ nm_connection_get_id (NMConnection *connection)
>  	g_return_val_if_fail (connection != NULL, NULL);
>  	g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
>  
> -	s_con = (NMSettingConnection *) nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION);
> +	s_con = nm_connection_get_setting_connection (connection);
>  	g_return_val_if_fail (s_con != NULL, NULL);
>  
>  	return nm_setting_connection_get_id (s_con);
> diff --git a/libnm-util/tests/test-general.c b/libnm-util/tests/test-general.c
> index f2f7e8f..3376373 100644
> --- a/libnm-util/tests/test-general.c
> +++ b/libnm-util/tests/test-general.c
> @@ -916,7 +916,7 @@ test_connection_diff_different (void)
>  {
>  	NMConnection *a, *b;
>  	GHashTable *out_diffs = NULL;
> -	NMSetting *s_ip4;
> +	NMSettingIP4Config *s_ip4;
>  	gboolean same;
>  	const DiffSetting settings[] = {
>  		{ NM_SETTING_IP4_CONFIG_SETTING_NAME, {
> @@ -927,7 +927,7 @@ test_connection_diff_different (void)
>  
>  	a = new_test_connection ();
>  	b = nm_connection_duplicate (a);
> -	s_ip4 = nm_connection_get_setting (a, NM_TYPE_SETTING_IP4_CONFIG);
> +	s_ip4 = nm_connection_get_setting_ip4_config (a);
>  	g_assert (s_ip4);
>  	g_object_set (G_OBJECT (s_ip4),
>  	              NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
> @@ -968,7 +968,7 @@ test_connection_diff_no_secrets (void)
>  	b = nm_connection_duplicate (a);
>  
>  	/* Add a secret to B */
> -	s_pppoe = nm_connection_get_setting (b, NM_TYPE_SETTING_PPPOE);
> +	s_pppoe = NM_SETTING( nm_connection_get_setting_pppoe (b));
>  	g_assert (s_pppoe);
>  	g_object_set (G_OBJECT (s_pppoe),
>  	              NM_SETTING_PPPOE_PASSWORD, "secretpassword",
> diff --git a/libnm-util/tests/test-secrets.c b/libnm-util/tests/test-secrets.c
> index 1fe3c43..0e859ab 100644
> --- a/libnm-util/tests/test-secrets.c
> +++ b/libnm-util/tests/test-secrets.c
> @@ -527,7 +527,7 @@ test_update_secrets_wifi_single_setting (void)
>  	g_assert (success);
>  
>  	/* Make sure the secret is now in the connection */
> -	s_wsec = (NMSettingWirelessSecurity *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
> +	s_wsec = nm_connection_get_setting_wireless_security (connection);
>  	g_assert (s_wsec);
>  	tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 0);
>  	g_assert_cmpstr (tmp, ==, wepkey);
> @@ -563,7 +563,7 @@ test_update_secrets_wifi_full_hash (void)
>  	g_assert (success);
>  
>  	/* Make sure the secret is now in the connection */
> -	s_wsec = (NMSettingWirelessSecurity *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
> +	s_wsec = nm_connection_get_setting_wireless_security (connection);
>  	g_assert (s_wsec);
>  	tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 0);
>  	g_assert_cmpstr (tmp, ==, wepkey);
> diff --git a/src/NetworkManagerUtils.c b/src/NetworkManagerUtils.c
> index 451de6d..f01e395 100644
> --- a/src/NetworkManagerUtils.c
> +++ b/src/NetworkManagerUtils.c
> @@ -955,7 +955,7 @@ nm_utils_complete_generic (NMConnection *connection,
>  	const char *method;
>  	char *id, *uuid;
>  
> -	s_con = (NMSettingConnection *) nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION);
> +	s_con = nm_connection_get_setting_connection (connection);
>  	if (!s_con) {
>  		s_con = (NMSettingConnection *) nm_setting_connection_new ();
>  		nm_connection_add_setting (connection, NM_SETTING (s_con));
> @@ -976,7 +976,7 @@ nm_utils_complete_generic (NMConnection *connection,
>  	}
>  
>  	/* Add an 'auto' IPv4 connection if present */
> -	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) {
>  		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
>  		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
> @@ -989,7 +989,7 @@ nm_utils_complete_generic (NMConnection *connection,
>  	}
>  
>  	/* Add an 'auto' IPv6 setting if allowed and not preset */
> -	s_ip6 = (NMSettingIP6Config *) nm_connection_get_setting (connection, NM_TYPE_SETTING_IP6_CONFIG);
> +	s_ip6 = nm_connection_get_setting_ip6_config (connection);
>  	if (!s_ip6 && default_enable_ipv6) {
>  		s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
>  		nm_connection_add_setting (connection, NM_SETTING (s_ip6));
> diff --git a/src/modem-manager/nm-modem-cdma.c b/src/modem-manager/nm-modem-cdma.c
> index 5db6a84..3d2153b 100644
> --- a/src/modem-manager/nm-modem-cdma.c
> +++ b/src/modem-manager/nm-modem-cdma.c
> @@ -169,7 +169,7 @@ create_connect_properties (NMConnection *connection)
>  	GHashTable *properties;
>  	const char *str;
>  
> -	setting = NM_SETTING_CDMA (nm_connection_get_setting (connection, NM_TYPE_SETTING_CDMA));
> +	setting = nm_connection_get_setting_cdma (connection);
>  	properties = value_hash_create ();
>  
>  	str = nm_setting_cdma_get_number (setting);
> @@ -230,7 +230,7 @@ real_get_best_auto_connection (NMModem *modem,
>  		NMConnection *connection = NM_CONNECTION (iter->data);
>  		NMSettingConnection *s_con;
>  
> -		s_con = (NMSettingConnection *) nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION);
> +		s_con = nm_connection_get_setting_connection (connection);
>  		g_assert (s_con);
>  
>  		if (!nm_setting_connection_get_autoconnect (s_con))
> @@ -252,7 +252,7 @@ real_check_connection_compatible (NMModem *modem,
>  	NMSettingConnection *s_con;
>  	NMSettingCdma *s_cdma;
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	g_assert (s_con);
>  
>  	if (strcmp (nm_setting_connection_get_connection_type (s_con), NM_SETTING_CDMA_SETTING_NAME)) {
> @@ -262,7 +262,7 @@ real_check_connection_compatible (NMModem *modem,
>  		return FALSE;
>  	}
>  
> -	s_cdma = NM_SETTING_CDMA (nm_connection_get_setting (connection, NM_TYPE_SETTING_CDMA));
> +	s_cdma = nm_connection_get_setting_cdma (connection);
>  	if (!s_cdma) {
>  		g_set_error (error,
>  		             NM_CDMA_ERROR, NM_CDMA_ERROR_CONNECTION_INVALID,
> @@ -281,7 +281,7 @@ real_complete_connection (NMModem *modem,
>  {
>  	NMSettingCdma *s_cdma;
>  
> -	s_cdma = (NMSettingCdma *) nm_connection_get_setting (connection, NM_TYPE_SETTING_CDMA);
> +	s_cdma = nm_connection_get_setting_cdma (connection);
>  	if (!s_cdma) {
>  		s_cdma = (NMSettingCdma *) nm_setting_cdma_new ();
>  		nm_connection_add_setting (connection, NM_SETTING (s_cdma));
> @@ -308,7 +308,7 @@ real_get_user_pass (NMModem *modem,
>  {
>  	NMSettingCdma *s_cdma;
>  
> -	s_cdma = (NMSettingCdma *) nm_connection_get_setting (connection, NM_TYPE_SETTING_CDMA);
> +	s_cdma = nm_connection_get_setting_cdma (connection);
>  	if (!s_cdma)
>  		return FALSE;
>  
> diff --git a/src/modem-manager/nm-modem-gsm.c b/src/modem-manager/nm-modem-gsm.c
> index 9a96ae9..1a4fe62 100644
> --- a/src/modem-manager/nm-modem-gsm.c
> +++ b/src/modem-manager/nm-modem-gsm.c
> @@ -327,7 +327,7 @@ create_connect_properties (NMConnection *connection)
>  	GHashTable *properties;
>  	const char *str;
>  
> -	setting = NM_SETTING_GSM (nm_connection_get_setting (connection, NM_TYPE_SETTING_GSM));
> +	setting = nm_connection_get_setting_gsm (connection);
>  	properties = value_hash_create ();
>  
>  	str = nm_setting_gsm_get_number (setting);
> @@ -429,7 +429,7 @@ real_get_best_auto_connection (NMModem *modem,
>  		NMConnection *connection = NM_CONNECTION (iter->data);
>  		NMSettingConnection *s_con;
>  
> -		s_con = (NMSettingConnection *) nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION);
> +		s_con = nm_connection_get_setting_connection (connection);
>  		g_assert (s_con);
>  
>  		if (!nm_setting_connection_get_autoconnect (s_con))
> @@ -451,7 +451,7 @@ real_check_connection_compatible (NMModem *modem,
>  	NMSettingConnection *s_con;
>  	NMSettingGsm *s_gsm;
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	g_assert (s_con);
>  
>  	if (strcmp (nm_setting_connection_get_connection_type (s_con), NM_SETTING_GSM_SETTING_NAME)) {
> @@ -461,7 +461,7 @@ real_check_connection_compatible (NMModem *modem,
>  		return FALSE;
>  	}
>  
> -	s_gsm = NM_SETTING_GSM (nm_connection_get_setting (connection, NM_TYPE_SETTING_GSM));
> +	s_gsm = nm_connection_get_setting_gsm (connection);
>  	if (!s_gsm) {
>  		g_set_error (error,
>  		             NM_GSM_ERROR, NM_GSM_ERROR_CONNECTION_INVALID,
> @@ -480,7 +480,7 @@ real_complete_connection (NMModem *modem,
>  {
>  	NMSettingGsm *s_gsm;
>  
> -	s_gsm = (NMSettingGsm *) nm_connection_get_setting (connection, NM_TYPE_SETTING_GSM);
> +	s_gsm = nm_connection_get_setting_gsm (connection);
>  	if (!s_gsm || !nm_setting_gsm_get_apn (s_gsm)) {
>  		/* Need an APN at least */
>  		g_set_error_literal (error,
> @@ -511,7 +511,7 @@ real_get_user_pass (NMModem *modem,
>  {
>  	NMSettingGsm *s_gsm;
>  
> -	s_gsm = (NMSettingGsm *) nm_connection_get_setting (connection, NM_TYPE_SETTING_GSM);
> +	s_gsm = nm_connection_get_setting_gsm (connection);
>  	if (!s_gsm)
>  		return FALSE;
>  
> diff --git a/src/modem-manager/nm-modem.c b/src/modem-manager/nm-modem.c
> index debfbdf..31526c5 100644
> --- a/src/modem-manager/nm-modem.c
> +++ b/src/modem-manager/nm-modem.c
> @@ -139,7 +139,7 @@ merge_ip4_config (NMActRequest *req, NMIP4Config *config)
>  	connection = nm_act_request_get_connection (req);
>  	g_assert (connection);
>  
> -	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)
>  		nm_utils_merge_ip4_config (config, s_ip4);
>  }
> diff --git a/src/nm-device-bt.c b/src/nm-device-bt.c
> index c36e0c0..6b4f61a 100644
> --- a/src/nm-device-bt.c
> +++ b/src/nm-device-bt.c
> @@ -155,7 +155,7 @@ get_connection_bt_type (NMConnection *connection)
>  	NMSettingBluetooth *s_bt;
>  	const char *bt_type;
>  
> -	s_bt = (NMSettingBluetooth *) nm_connection_get_setting (connection, NM_TYPE_SETTING_BLUETOOTH);
> +	s_bt = nm_connection_get_setting_bluetooth (connection);
>  	if (!s_bt)
>  		return NM_BT_CAPABILITY_NONE;
>  
> @@ -183,7 +183,7 @@ real_get_best_auto_connection (NMDevice *device,
>  		NMSettingConnection *s_con;
>  		guint32 bt_type;
>  
> -		s_con = (NMSettingConnection *) nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION);
> +		s_con = nm_connection_get_setting_connection (connection);
>  		g_assert (s_con);
>  
>  		if (!nm_setting_connection_get_autoconnect (s_con))
> @@ -214,7 +214,7 @@ real_check_connection_compatible (NMDevice *device,
>  	int addr_match = FALSE;
>  	guint32 bt_type;
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	g_assert (s_con);
>  
>  	if (strcmp (nm_setting_connection_get_connection_type (s_con), NM_SETTING_BLUETOOTH_SETTING_NAME)) {
> @@ -224,7 +224,7 @@ real_check_connection_compatible (NMDevice *device,
>  		return FALSE;
>  	}
>  
> -	s_bt = NM_SETTING_BLUETOOTH (nm_connection_get_setting (connection, NM_TYPE_SETTING_BLUETOOTH));
> +	s_bt = nm_connection_get_setting_bluetooth (connection);
>  	if (!s_bt) {
>  		g_set_error (error,
>  		             NM_BT_ERROR, NM_BT_ERROR_CONNECTION_INVALID,
> @@ -276,12 +276,12 @@ real_complete_connection (NMDevice *device,
>  	NMSettingPPP *s_ppp;
>  	const char *format = NULL, *preferred = NULL;
>  
> -	s_gsm = (NMSettingGsm *) nm_connection_get_setting (connection, NM_TYPE_SETTING_GSM);
> -	s_cdma = (NMSettingCdma *) nm_connection_get_setting (connection, NM_TYPE_SETTING_CDMA);
> +	s_gsm = nm_connection_get_setting_gsm (connection);
> +	s_cdma = nm_connection_get_setting_cdma (connection);
>  	s_serial = (NMSettingSerial *) nm_connection_get_setting (connection, NM_TYPE_SETTING_SERIAL);
> -	s_ppp = (NMSettingPPP *) nm_connection_get_setting (connection, NM_TYPE_SETTING_PPP);
> +	s_ppp = nm_connection_get_setting_ppp (connection);
>  
> -	s_bt = (NMSettingBluetooth *) nm_connection_get_setting (connection, NM_TYPE_SETTING_BLUETOOTH);
> +	s_bt = nm_connection_get_setting_bluetooth (connection);
>  	if (!s_bt) {
>  		s_bt = (NMSettingBluetooth *) nm_setting_bluetooth_new ();
>  		nm_connection_add_setting (connection, NM_SETTING (s_bt));
> diff --git a/src/nm-device-ethernet.c b/src/nm-device-ethernet.c
> index 8556c5b..9b190a9 100644
> --- a/src/nm-device-ethernet.c
> +++ b/src/nm-device-ethernet.c
> @@ -886,7 +886,7 @@ real_get_best_auto_connection (NMDevice *dev,
>  		const GSList *mac_blacklist, *mac_blacklist_iter;
>  		gboolean mac_blacklist_found = FALSE;
>  
> -		s_con = (NMSettingConnection *) nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION);
> +		s_con = nm_connection_get_setting_connection (connection);
>  		g_assert (s_con);
>  
>  		connection_type = nm_setting_connection_get_connection_type (s_con);
> @@ -898,7 +898,7 @@ real_get_best_auto_connection (NMDevice *dev,
>  		if (!nm_setting_connection_get_autoconnect (s_con))
>  			continue;
>  
> -		s_wired = (NMSettingWired *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED);
> +		s_wired = nm_connection_get_setting_wired (connection);
>  		/* Wired setting optional for PPPoE */
>  		if (!is_pppoe && !s_wired)
>  			continue;
> @@ -1109,7 +1109,7 @@ build_supplicant_config (NMDeviceEthernet *self)
>  	if (!config)
>  		return NULL;
>  
> -	security = NM_SETTING_802_1X (nm_connection_get_setting (connection, NM_TYPE_SETTING_802_1X));
> +	security = nm_connection_get_setting_802_1x (connection);
>  	if (!nm_supplicant_config_add_setting_8021x (config, security, con_path, TRUE)) {
>  		nm_log_warn (LOGD_DEVICE, "Couldn't add 802.1X security setting to supplicant config.");
>  		g_object_unref (config);
> @@ -1377,7 +1377,7 @@ nm_8021x_stage2_config (NMDeviceEthernet *self, NMDeviceStateReason *reason)
>  	NMActStageReturn ret = NM_ACT_STAGE_RETURN_FAILURE;
>  
>  	connection = nm_act_request_get_connection (nm_device_get_act_request (NM_DEVICE (self)));
> -	security = NM_SETTING_802_1X (nm_connection_get_setting (connection, NM_TYPE_SETTING_802_1X));
> +	security = nm_connection_get_setting_802_1x (connection);
>  	if (!security) {
>  		nm_log_err (LOGD_DEVICE, "Invalid or missing 802.1X security");
>  		*reason = NM_DEVICE_STATE_REASON_CONFIG_FAILED;
> @@ -1465,7 +1465,7 @@ pppoe_stage3_ip4_config_start (NMDeviceEthernet *self, NMDeviceStateReason *reas
>  	connection = nm_act_request_get_connection (req);
>  	g_assert (req);
>  
> -	s_pppoe = (NMSettingPPPOE *) nm_connection_get_setting (connection, NM_TYPE_SETTING_PPPOE);
> +	s_pppoe = nm_connection_get_setting_pppoe (connection);
>  	g_assert (s_pppoe);
>  
>  	priv->ppp_manager = nm_ppp_manager_new (nm_device_get_iface (NM_DEVICE (self)));
> @@ -1562,7 +1562,7 @@ real_act_stage4_get_ip4_config (NMDevice *device,
>  
>  			connection = nm_act_request_get_connection (nm_device_get_act_request (device));
>  			g_assert (connection);
> -			s_wired = NM_SETTING_WIRED (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED));
> +			s_wired = nm_connection_get_setting_wired (connection);
>  			g_assert (s_wired);
>  
>  			/* MTU override */
> @@ -1581,7 +1581,7 @@ real_act_stage4_get_ip4_config (NMDevice *device,
>  		/* Merge user-defined overrides into the IP4Config to be applied */
>  		connection = nm_act_request_get_connection (nm_device_get_act_request (device));
>  		g_assert (connection);
> -		s_ip4 = (NMSettingIP4Config *) nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG);
> +		s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  		nm_utils_merge_ip4_config (*config, s_ip4);
>  
>  		ret = NM_ACT_STAGE_RETURN_SUCCESS;
> @@ -1630,7 +1630,7 @@ real_check_connection_compatible (NMDevice *device,
>  	gboolean try_mac = TRUE;
>  	const GSList *mac_blacklist, *mac_blacklist_iter;
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	g_assert (s_con);
>  
>  	connection_type = nm_setting_connection_get_connection_type (s_con);
> @@ -1645,7 +1645,7 @@ real_check_connection_compatible (NMDevice *device,
>  	if (!strcmp (connection_type, NM_SETTING_PPPOE_SETTING_NAME))
>  		is_pppoe = TRUE;
>  
> -	s_wired = (NMSettingWired *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED);
> +	s_wired = nm_connection_get_setting_wired (connection);
>  	/* Wired setting is optional for PPPoE */
>  	if (!is_pppoe && !s_wired) {
>  		g_set_error (error,
> @@ -1707,7 +1707,7 @@ real_complete_connection (NMDevice *device,
>  	NMSettingPPPOE *s_pppoe;
>  	const GByteArray *setting_mac;
>  
> -	s_pppoe = (NMSettingPPPOE *) nm_connection_get_setting (connection, NM_TYPE_SETTING_PPPOE);
> +	s_pppoe = nm_connection_get_setting_pppoe (connection);
>  
>  	/* We can't telepathically figure out the service name or username, so if
>  	 * those weren't given, we can't complete the connection.
> @@ -1725,7 +1725,7 @@ real_complete_connection (NMDevice *device,
>  	                           NULL,
>  	                           s_pppoe ? FALSE : TRUE); /* No IPv6 by default yet for PPPoE */
>  
> -	s_wired = (NMSettingWired *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED);
> +	s_wired = nm_connection_get_setting_wired (connection);
>  	if (!s_wired) {
>  		s_wired = (NMSettingWired *) nm_setting_wired_new ();
>  		nm_connection_add_setting (connection, NM_SETTING (s_wired));
> @@ -1782,7 +1782,7 @@ wired_match_config (NMDevice *self, NMConnection *connection)
>  	const GByteArray *s_ether;
>  	gboolean try_mac = TRUE;
>  
> -	s_wired = (NMSettingWired *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED);
> +	s_wired = nm_connection_get_setting_wired (connection);
>  	if (!s_wired)
>  		return FALSE;
>  
> @@ -1880,7 +1880,7 @@ connection_match_config (NMDevice *self, const GSList *connections)
>  	for (iter = (GSList *) connections; iter; iter = g_slist_next (iter)) {
>  		NMConnection *candidate = NM_CONNECTION (iter->data);
>  
> -		s_con = (NMSettingConnection *) nm_connection_get_setting (candidate, NM_TYPE_SETTING_CONNECTION);
> +		s_con = nm_connection_get_setting_connection (candidate);
>  		g_assert (s_con);
>  		if (strcmp (nm_setting_connection_get_connection_type (s_con), NM_SETTING_WIRED_SETTING_NAME))
>  			continue;
> @@ -1888,8 +1888,8 @@ connection_match_config (NMDevice *self, const GSList *connections)
>  		/* Can't assume 802.1x or PPPoE connections; they have too much state
>  		 * that's impossible to get on-the-fly from PPPoE or the supplicant.
>  		 */
> -		if (   nm_connection_get_setting (candidate, NM_TYPE_SETTING_802_1X)
> -		    || nm_connection_get_setting (candidate, NM_TYPE_SETTING_PPPOE))
> +		if (   nm_connection_get_setting_802_1x (candidate)
> +		    || nm_connection_get_setting_pppoe (candidate))
>  			continue;
>  
>  		if (!wired_match_config (self, candidate))
> diff --git a/src/nm-device-olpc-mesh.c b/src/nm-device-olpc-mesh.c
> index ddd5198..0eddc4d 100644
> --- a/src/nm-device-olpc-mesh.c
> +++ b/src/nm-device-olpc-mesh.c
> @@ -331,7 +331,7 @@ real_check_connection_compatible (NMDevice *device,
>  	NMSettingConnection *s_con;
>  	NMSettingOlpcMesh *s_mesh;
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	g_assert (s_con);
>  
>  	if (strcmp (nm_setting_connection_get_connection_type (s_con), NM_SETTING_OLPC_MESH_SETTING_NAME)) {
> @@ -341,7 +341,7 @@ real_check_connection_compatible (NMDevice *device,
>  		return FALSE;
>  	}
>  
> -	s_mesh = NM_SETTING_OLPC_MESH (nm_connection_get_setting (connection, NM_TYPE_SETTING_OLPC_MESH));
> +	s_mesh = nm_connection_get_setting_olpc_mesh (connection);
>  	if (!s_mesh) {
>  		g_set_error (error,
>  		             NM_OLPC_MESH_ERROR, NM_OLPC_MESH_ERROR_CONNECTION_INVALID,
> @@ -364,7 +364,7 @@ real_complete_connection (NMDevice *device,
>  	NMSettingOlpcMesh *s_mesh;
>  	GByteArray *tmp;
>  
> -	s_mesh = (NMSettingOlpcMesh *) nm_connection_get_setting (connection, NM_TYPE_SETTING_OLPC_MESH);
> +	s_mesh = nm_connection_get_setting_olpc_mesh (connection);
>  	if (!s_mesh) {
>  		s_mesh = (NMSettingOlpcMesh *) nm_setting_olpc_mesh_new ();
>  		nm_connection_add_setting (connection, NM_SETTING (s_mesh));
> @@ -622,7 +622,7 @@ real_act_stage2_config (NMDevice *dev, NMDeviceStateReason *reason)
>  	connection = nm_act_request_get_connection (req);
>  	g_assert (connection);
>  
> -	s_mesh = NM_SETTING_OLPC_MESH (nm_connection_get_setting (connection, NM_TYPE_SETTING_OLPC_MESH));
> +	s_mesh = nm_connection_get_setting_olpc_mesh (connection);
>  	g_assert (s_mesh);
>  
>  	channel = nm_setting_olpc_mesh_get_channel (s_mesh);
> diff --git a/src/nm-device-wifi.c b/src/nm-device-wifi.c
> index 9695c07..045fcbf 100644
> --- a/src/nm-device-wifi.c
> +++ b/src/nm-device-wifi.c
> @@ -1320,7 +1320,7 @@ real_check_connection_compatible (NMDevice *device,
>  	const GByteArray *mac;
>  	const GSList *mac_blacklist, *mac_blacklist_iter;
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	g_assert (s_con);
>  
>  	if (strcmp (nm_setting_connection_get_connection_type (s_con), NM_SETTING_WIRELESS_SETTING_NAME)) {
> @@ -1330,7 +1330,7 @@ real_check_connection_compatible (NMDevice *device,
>  		return FALSE;
>  	}
>  
> -	s_wireless = NM_SETTING_WIRELESS (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS));
> +	s_wireless = nm_connection_get_setting_wireless (connection);
>  	if (!s_wireless) {
>  		g_set_error (error,
>  		             NM_WIFI_ERROR, NM_WIFI_ERROR_CONNECTION_INVALID,
> @@ -1614,7 +1614,7 @@ real_get_best_auto_connection (NMDevice *dev,
>  		NMSettingIP4Config *s_ip4;
>  		const char *method = NULL;
>  
> -		s_con = (NMSettingConnection *) nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION);
> +		s_con = nm_connection_get_setting_connection (connection);
>  		if (s_con == NULL)
>  			continue;
>  		if (strcmp (nm_setting_connection_get_connection_type (s_con), NM_SETTING_WIRELESS_SETTING_NAME))
> @@ -1622,7 +1622,7 @@ real_get_best_auto_connection (NMDevice *dev,
>  		if (!nm_setting_connection_get_autoconnect (s_con))
>  			continue;
>  
> -		s_wireless = (NMSettingWireless *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS);
> +		s_wireless = nm_connection_get_setting_wireless (connection);
>  		if (!s_wireless)
>  			continue;
>  
> @@ -1650,7 +1650,7 @@ real_get_best_auto_connection (NMDevice *dev,
>  			continue;
>  
>  		/* Use the connection if it's a shared connection */
> -		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)
>  			method = nm_setting_ip4_config_get_method (s_ip4);
>  
> @@ -2020,7 +2020,7 @@ scanning_allowed (NMDeviceWifi *self)
>  
>  		/* Don't scan when a shared connection is active; it makes drivers mad */
>  		connection = nm_act_request_get_connection (req);
> -		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)
>  			ip4_method = nm_setting_ip4_config_get_method (s_ip4);
>  
> @@ -2031,7 +2031,7 @@ scanning_allowed (NMDeviceWifi *self)
>  		 * intra-ESS roaming (which requires periodic scanning) isn't being
>  		 * used due to the specific AP lock. (bgo #513820)
>  		 */
> -		s_wifi = (NMSettingWireless *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS);
> +		s_wifi = nm_connection_get_setting_wireless (connection);
>  		g_assert (s_wifi);
>  		bssid = nm_setting_wireless_get_bssid (s_wifi);
>  		if (bssid && bssid->len == ETH_ALEN)
> @@ -2951,7 +2951,7 @@ build_supplicant_config (NMDeviceWifi *self,
>  
>  	g_return_val_if_fail (self != NULL, NULL);
>  
> -	s_wireless = (NMSettingWireless *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS);
> +	s_wireless = nm_connection_get_setting_wireless (connection);
>  	g_return_val_if_fail (s_wireless != NULL, NULL);
>  
>  	config = nm_supplicant_config_new ();
> @@ -2992,13 +2992,13 @@ build_supplicant_config (NMDeviceWifi *self,
>  		goto error;
>  	}
>  
> -	s_wireless_sec = (NMSettingWirelessSecurity *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
> +	s_wireless_sec = nm_connection_get_setting_wireless_security (connection);
>  	if (s_wireless_sec) {
>  		NMSetting8021x *s_8021x;
>  		const char *con_path = nm_connection_get_path (connection);
>  
>  		g_assert (con_path);
> -		s_8021x = (NMSetting8021x *) nm_connection_get_setting (connection, NM_TYPE_SETTING_802_1X);
> +		s_8021x = nm_connection_get_setting_802_1x (connection);
>  		if (!nm_supplicant_config_add_setting_wireless_security (config,
>  		                                                         s_wireless_sec,
>  		                                                         s_8021x,
> @@ -3136,7 +3136,7 @@ real_act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
>  	g_return_val_if_fail (connection != NULL, NM_ACT_STAGE_RETURN_FAILURE);
>  
>  	/* Set spoof MAC to the interface */
> -	s_wireless = (NMSettingWireless *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS);
> +	s_wireless = nm_connection_get_setting_wireless (connection);
>  	g_assert (s_wireless);
>  
>  	cloned_mac = nm_setting_wireless_get_cloned_mac_address (s_wireless);
> @@ -3212,7 +3212,7 @@ real_act_stage2_config (NMDevice *dev, NMDeviceStateReason *reason)
>  	connection = nm_act_request_get_connection (req);
>  	g_assert (connection);
>  
> -	s_wireless = (NMSettingWireless *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS);
> +	s_wireless = nm_connection_get_setting_wireless (connection);
>  	g_assert (s_wireless);
>  
>  	/* If we need secrets, get them */
> @@ -3309,7 +3309,7 @@ real_act_stage4_get_ip4_config (NMDevice *dev,
>  
>  		connection = nm_act_request_get_connection (nm_device_get_act_request (dev));
>  		g_assert (connection);
> -		s_wireless = NM_SETTING_WIRELESS (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS));
> +		s_wireless = nm_connection_get_setting_wireless (connection);
>  		g_assert (s_wireless);
>  
>  		/* MTU override */
> @@ -3413,7 +3413,7 @@ real_act_stage4_ip4_config_timeout (NMDevice *dev,
>  	connection = nm_act_request_get_connection (req);
>  	g_assert (connection);
>  
> -	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)
>  		may_fail = nm_setting_ip4_config_get_may_fail (s_ip4);
>  
> @@ -3440,7 +3440,7 @@ real_act_stage4_ip6_config_timeout (NMDevice *dev,
>  	connection = nm_act_request_get_connection (req);
>  	g_assert (connection);
>  
> -	s_ip6 = (NMSettingIP6Config *) nm_connection_get_setting (connection, NM_TYPE_SETTING_IP6_CONFIG);
> +	s_ip6 = nm_connection_get_setting_ip6_config (connection);
>  	if (s_ip6)
>  		may_fail = nm_setting_ip6_config_get_may_fail (s_ip6);
>  
> diff --git a/src/nm-device.c b/src/nm-device.c
> index a4cd3e9..ae83ddb 100644
> --- a/src/nm-device.c
> +++ b/src/nm-device.c
> @@ -693,11 +693,11 @@ nm_device_ip_config_should_fail (NMDevice *self, gboolean ip6)
>  
>  	/* Fail the connection if the failed IP method is required to complete */
>  	if (ip6) {
> -		s_ip6 = (NMSettingIP6Config *) nm_connection_get_setting (connection, NM_TYPE_SETTING_IP6_CONFIG);
> +		s_ip6 = nm_connection_get_setting_ip6_config (connection);
>  		if (s_ip6 && !nm_setting_ip6_config_get_may_fail (s_ip6))
>  			return TRUE;
>  	} else {
> -		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 && !nm_setting_ip4_config_get_may_fail (s_ip4))
>  			return TRUE;
>  	}
> @@ -806,7 +806,7 @@ ip6_method_matches (NMConnection *connection, const char *match)
>  	NMSettingIP6Config *s_ip6;
>  	const char *method = NULL;
>  
> -	s_ip6 = (NMSettingIP6Config *) nm_connection_get_setting (connection, NM_TYPE_SETTING_IP6_CONFIG);
> +	s_ip6 = nm_connection_get_setting_ip6_config (connection);
>  	if (s_ip6) {
>  		method = nm_setting_ip6_config_get_method (s_ip6);
>  		g_assert (method);
> @@ -845,7 +845,7 @@ addrconf6_setup (NMDevice *self)
>  		                                                   self);
>  	}
>  
> -	s_ip6 = (NMSettingIP6Config *) nm_connection_get_setting (connection, NM_TYPE_SETTING_IP6_CONFIG);
> +	s_ip6 = nm_connection_get_setting_ip6_config (connection);
>  	success = nm_ip6_manager_prepare_interface (priv->ip6_manager,
>  	                                            nm_device_get_ip_ifindex (self),
>  	                                            s_ip6,
> @@ -1155,7 +1155,7 @@ nm_device_handle_autoip4_event (NMDevice *self,
>  		return;
>  
>  	/* Ignore if the connection isn't an AutoIP connection */
> -	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)
>  		method = nm_setting_ip4_config_get_method (s_ip4);
>  
> @@ -1378,7 +1378,7 @@ handle_dhcp_lease_change (NMDevice *device, gboolean ipv6)
>  			return;
>  		}
>  
> -		s_ip6 = NM_SETTING_IP6_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP6_CONFIG));
> +		s_ip6 = nm_connection_get_setting_ip6_config (connection);
>  		nm_utils_merge_ip6_config (ip6_config, s_ip6);
>  
>  		g_object_set_data (G_OBJECT (req), NM_ACT_REQUEST_IP6_CONFIG, ip6_config);
> @@ -1403,7 +1403,7 @@ handle_dhcp_lease_change (NMDevice *device, gboolean ipv6)
>  			return;
>  		}
>  
> -		s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
> +		s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  		nm_utils_merge_ip4_config (ip4_config, s_ip4);
>  
>  		g_object_set_data (G_OBJECT (req), NM_ACT_REQUEST_IP4_CONFIG, ip4_config);
> @@ -1526,7 +1526,7 @@ dhcp4_start (NMDevice *self,
>  	NMSettingIP4Config *s_ip4;
>  	guint8 *anycast = NULL;
>  
> -	s_ip4 = (NMSettingIP4Config *) nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG);
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  
>  	if (priv->dhcp_anycast_address)
>  		anycast = priv->dhcp_anycast_address->data;
> @@ -1611,7 +1611,7 @@ real_act_stage3_ip4_config_start (NMDevice *self, NMDeviceStateReason *reason)
>  	req = nm_device_get_act_request (self);
>  	connection = nm_act_request_get_connection (req);
>  
> -	s_ip4 = (NMSettingIP4Config *) nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG);
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  
>  	/* If we did not receive IP4 configuration information, default to DHCP */
>  	if (s_ip4)
> @@ -1692,7 +1692,7 @@ dhcp6_start (NMDevice *self,
>  		            priv->ip_iface ? priv->ip_iface : priv->iface, nl_geterror (err));
>  	}
>  
> -	s_ip6 = (NMSettingIP6Config *) nm_connection_get_setting (connection, NM_TYPE_SETTING_IP6_CONFIG);
> +	s_ip6 = nm_connection_get_setting_ip6_config (connection);
>  
>  	ip_iface = nm_device_get_ip_iface (self);
>  	priv->dhcp6_client = nm_dhcp_manager_start_ip6 (priv->dhcp_manager,
> @@ -1930,7 +1930,7 @@ real_act_stage4_get_ip4_config (NMDevice *self,
>  	connection = nm_act_request_get_connection (nm_device_get_act_request (self));
>  	g_assert (connection);
>  
> -	s_ip4 = (NMSettingIP4Config *) nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG);
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  
>  	if (priv->dhcp4_client) {
>  		/* DHCP */
> @@ -2254,7 +2254,7 @@ real_act_stage4_get_ip6_config (NMDevice *self,
>  
>  	/* Merge user-defined overrides into the IP6Config to be applied */
>  	if (*config) {
> -		s_ip6 = (NMSettingIP6Config *) nm_connection_get_setting (connection, NM_TYPE_SETTING_IP6_CONFIG);
> +		s_ip6 = nm_connection_get_setting_ip6_config (connection);
>  		nm_utils_merge_ip6_config (*config, s_ip6);
>  	}
>  
> @@ -2618,7 +2618,7 @@ nm_device_activate_stage5_ip_config_commit (gpointer user_data)
>  	connection = nm_act_request_get_connection (nm_device_get_act_request (self));
>  
>  	if (ip4_config) {
> -		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)
>  			method = nm_setting_ip4_config_get_method (s_ip4);
>  
> @@ -3328,7 +3328,7 @@ dispose (GObject *object)
>  			 * All IPv6 connections can be left up, so we don't have
>  			 * to check that.
>  			 */
> -			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)
>  				method = nm_setting_ip4_config_get_method (s_ip4);
>  			if (   !method
> diff --git a/src/nm-manager-auth.c b/src/nm-manager-auth.c
> index beed65a..d797032 100644
> --- a/src/nm-manager-auth.c
> +++ b/src/nm-manager-auth.c
> @@ -541,7 +541,7 @@ nm_auth_uid_in_acl (NMConnection *connection,
>  	g_return_val_if_fail (connection != NULL, FALSE);
>  	g_return_val_if_fail (smon != NULL, FALSE);
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	g_assert (s_con);
>  
>  	/* Reject the request if the request comes from no session at all */
> diff --git a/src/nm-manager.c b/src/nm-manager.c
> index b09cceb..3c428e8 100644
> --- a/src/nm-manager.c
> +++ b/src/nm-manager.c
> @@ -639,11 +639,11 @@ might_be_vpn (NMConnection *connection)
>  	NMSettingConnection *s_con;
>  	const char *ctype = NULL;
>  
> -	if (nm_connection_get_setting (connection, NM_TYPE_SETTING_VPN))
> +	if (nm_connection_get_setting_vpn (connection))
>  		return TRUE;
>  
>  	/* Make sure it's not a VPN, which we can't autocomplete yet */
> -	s_con = (NMSettingConnection *) nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION);
> +	s_con = nm_connection_get_setting_connection (connection);
>  	if (s_con)
>  		ctype = nm_setting_connection_get_connection_type (s_con);
>  
> @@ -655,7 +655,7 @@ try_complete_vpn (NMConnection *connection, GSList *existing, GError **error)
>  {
>  	g_assert (might_be_vpn (connection) == TRUE);
>  
> -	if (!nm_connection_get_setting (connection, NM_TYPE_SETTING_VPN)) {
> +	if (!nm_connection_get_setting_vpn (connection)) {
>  		g_set_error_literal (error,
>  			                 NM_MANAGER_ERROR,
>  			                 NM_MANAGER_ERROR_UNSUPPORTED_CONNECTION_TYPE,
> @@ -1570,14 +1570,14 @@ bluez_manager_find_connection (NMManager *manager,
>  		const char *con_type;
>  		const char *bt_type;
>  
> -		s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (candidate, NM_TYPE_SETTING_CONNECTION));
> +		s_con = nm_connection_get_setting_connection (candidate);
>  		g_assert (s_con);
>  		con_type = nm_setting_connection_get_connection_type (s_con);
>  		g_assert (con_type);
>  		if (!g_str_equal (con_type, NM_SETTING_BLUETOOTH_SETTING_NAME))
>  			continue;
>  
> -		s_bt = (NMSettingBluetooth *) nm_connection_get_setting (candidate, NM_TYPE_SETTING_BLUETOOTH);
> +		s_bt = nm_connection_get_setting_bluetooth (candidate);
>  		if (!s_bt)
>  			continue;
>  
> @@ -1948,7 +1948,7 @@ nm_manager_activate_connection (NMManager *manager,
>  		}
>  	}
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	g_assert (s_con);
>  
>  	if (!strcmp (nm_setting_connection_get_connection_type (s_con), NM_SETTING_VPN_SETTING_NAME)) {
> diff --git a/src/nm-policy.c b/src/nm-policy.c
> index 5c4059e..e2e598b 100644
> --- a/src/nm-policy.c
> +++ b/src/nm-policy.c
> @@ -116,7 +116,7 @@ get_best_ip4_device (NMManager *manager, NMActRequest **out_req)
>  		g_assert (connection);
>  
>  		/* Never set the default route through an IPv4LL-addressed device */
> -		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)
>  			method = nm_setting_ip4_config_get_method (s_ip4);
>  
> @@ -190,7 +190,7 @@ get_best_ip6_device (NMManager *manager, NMActRequest **out_req)
>  		g_assert (connection);
>  
>  		/* Never set the default route through an IPv4LL-addressed device */
> -		s_ip6 = (NMSettingIP6Config *) nm_connection_get_setting (connection, NM_TYPE_SETTING_IP6_CONFIG);
> +		s_ip6 = nm_connection_get_setting_ip6_config (connection);
>  		if (s_ip6)
>  			method = nm_setting_ip6_config_get_method (s_ip6);
>  
> @@ -452,7 +452,7 @@ update_ip4_routing_and_dns (NMPolicy *policy, gboolean force_update)
>  			can_default = FALSE;
>  
>  		/* Check the user's preference from the NMConnection */
> -		s_ip4 = (NMSettingIP4Config *) nm_connection_get_setting (vpn_connection, NM_TYPE_SETTING_IP4_CONFIG);
> +		s_ip4 = nm_connection_get_setting_ip4_config (vpn_connection);
>  		if (s_ip4 && nm_setting_ip4_config_get_never_default (s_ip4))
>  			can_default = FALSE;
>  
> @@ -528,7 +528,7 @@ update_ip4_routing_and_dns (NMPolicy *policy, gboolean force_update)
>  		nm_act_request_set_default (best_req, TRUE);
>  
>  	if (connection)
> -		s_con = (NMSettingConnection *) nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION);
> +		s_con = nm_connection_get_setting_connection (connection);
>  
>  	connection_id = s_con ? nm_setting_connection_get_id (s_con) : NULL;
>  	if (connection_id) {
> @@ -579,7 +579,7 @@ update_ip6_routing_and_dns (NMPolicy *policy, gboolean force_update)
>  		/* If it's marked 'never-default', don't make it default */
>  		vpn_connection = nm_vpn_connection_get_connection (candidate);
>  		g_assert (vpn_connection);
> -		s_ip6 = (NMSettingIP6Config *) nm_connection_get_setting (vpn_connection, NM_TYPE_SETTING_IP6_CONFIG);
> +		s_ip6 = nm_connection_get_setting_ip6_config (vpn_connection);
>  		if (s_ip6 && nm_setting_ip6_config_get_never_default (s_ip6))
>  			can_default = FALSE;
>  
> @@ -655,7 +655,7 @@ update_ip6_routing_and_dns (NMPolicy *policy, gboolean force_update)
>  		nm_act_request_set_default6 (best_req, TRUE);
>  
>  	if (connection)
> -		s_con = (NMSettingConnection *) nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION);
> +		s_con = nm_connection_get_setting_connection (connection);
>  
>  	connection_id = s_con ? nm_setting_connection_get_id (s_con) : NULL;
>  	if (connection_id) {
> diff --git a/src/nm-wifi-ap.c b/src/nm-wifi-ap.c
> index 20af3e4..6d1c63e 100644
> --- a/src/nm-wifi-ap.c
> +++ b/src/nm-wifi-ap.c
> @@ -634,7 +634,7 @@ nm_ap_new_fake_from_connection (NMConnection *connection)
>  
>  	g_return_val_if_fail (connection != NULL, NULL);
>  
> -	s_wireless = NM_SETTING_WIRELESS (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS));
> +	s_wireless = nm_connection_get_setting_wireless (connection);
>  	g_return_val_if_fail (s_wireless != NULL, NULL);
>  
>  	ssid = nm_setting_wireless_get_ssid (s_wireless);
> @@ -671,7 +671,7 @@ nm_ap_new_fake_from_connection (NMConnection *connection)
>  		nm_ap_set_freq (ap, freq);
>  	}
>  
> -	s_wireless_sec = (NMSettingWirelessSecurity *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
> +	s_wireless_sec = nm_connection_get_setting_wireless_security (connection);
>  	/* Assume presence of a security setting means the AP is encrypted */
>  	if (!s_wireless_sec)
>  		goto done;
> @@ -1129,7 +1129,7 @@ nm_ap_check_compatible (NMAccessPoint *self,
>  
>  	priv = NM_AP_GET_PRIVATE (self);
>  
> -	s_wireless = NM_SETTING_WIRELESS (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS));
> +	s_wireless = nm_connection_get_setting_wireless (connection);
>  	if (s_wireless == NULL)
>  		return FALSE;
>  	
> @@ -1167,8 +1167,7 @@ nm_ap_check_compatible (NMAccessPoint *self,
>  			return FALSE;
>  	}
>  
> -	s_wireless_sec = (NMSettingWirelessSecurity *) nm_connection_get_setting (connection,
> -	                                                                          NM_TYPE_SETTING_WIRELESS_SECURITY);
> +	s_wireless_sec = nm_connection_get_setting_wireless_security (connection);
>  
>  	return nm_setting_wireless_ap_security_compatible (s_wireless,
>  	                                                   s_wireless_sec,
> diff --git a/src/ppp-manager/nm-ppp-manager.c b/src/ppp-manager/nm-ppp-manager.c
> index 3546f8d..9b93733 100644
> --- a/src/ppp-manager/nm-ppp-manager.c
> +++ b/src/ppp-manager/nm-ppp-manager.c
> @@ -374,7 +374,7 @@ extract_details_from_connection (NMConnection *connection,
>  	g_return_val_if_fail (username != NULL, FALSE);
>  	g_return_val_if_fail (password != NULL, FALSE);
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	g_assert (s_con);
>  
>  	connection_type = nm_setting_connection_get_connection_type (s_con);
> @@ -579,7 +579,7 @@ impl_ppp_manager_set_ip4_config (NMPPPManager *manager,
>  	g_object_set_data (G_OBJECT (connection), PPP_MANAGER_SECRET_TRIES, NULL);
>  
>  	/* Merge in custom MTU */
> -	s_ppp = (NMSettingPPP *) nm_connection_get_setting (connection, NM_TYPE_SETTING_PPP);
> +	s_ppp = nm_connection_get_setting_ppp (connection);
>  	if (s_ppp) {
>  		guint32 mtu = nm_setting_ppp_get_mtu (s_ppp);
>  
> @@ -999,7 +999,7 @@ nm_ppp_manager_start (NMPPPManager *manager,
>  	connection = nm_act_request_get_connection (req);
>  	g_assert (connection);
>  
> -	s_ppp = (NMSettingPPP *) nm_connection_get_setting (connection, NM_TYPE_SETTING_PPP);
> +	s_ppp = nm_connection_get_setting_ppp (connection);
>  	if (!s_ppp) {
>  		/* If the PPP settings are all default we may not have a PPP setting yet,
>  		 * so just make a default one here.
> @@ -1008,7 +1008,7 @@ nm_ppp_manager_start (NMPPPManager *manager,
>  		s_ppp_created = TRUE;
>  	}
>  	
> -	pppoe_setting = (NMSettingPPPOE *) nm_connection_get_setting (connection, NM_TYPE_SETTING_PPPOE);
> +	pppoe_setting = nm_connection_get_setting_pppoe (connection);
>  	if (pppoe_setting)
>  		pppoe_fill_defaults (s_ppp);
>  
> diff --git a/src/settings/nm-agent-manager.c b/src/settings/nm-agent-manager.c
> index 5ccbdc6..bd08fc2 100644
> --- a/src/settings/nm-agent-manager.c
> +++ b/src/settings/nm-agent-manager.c
> @@ -962,7 +962,7 @@ get_next_cb (Request *req)
>  		 * we use the 'modify.own' permission instead of 'modify.system'.  If the
>  		 * request affects more than just the caller, require 'modify.system'.
>  		 */
> -		s_con = (NMSettingConnection *) nm_connection_get_setting (req->connection, NM_TYPE_SETTING_CONNECTION);
> +		s_con = nm_connection_get_setting_connection (req->connection);
>  		g_assert (s_con);
>  		if (nm_setting_connection_get_num_permissions (s_con) == 1)
>  			perm = NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN;
> diff --git a/src/settings/nm-settings-connection.c b/src/settings/nm-settings-connection.c
> index cdad832..4a44214 100644
> --- a/src/settings/nm-settings-connection.c
> +++ b/src/settings/nm-settings-connection.c
> @@ -221,7 +221,7 @@ nm_settings_connection_recheck_visibility (NMSettingsConnection *self)
>  
>  	priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self);
>  
> -	s_con = (NMSettingConnection *) nm_connection_get_setting (NM_CONNECTION (self), NM_TYPE_SETTING_CONNECTION);
> +	s_con = nm_connection_get_setting_connection (NM_CONNECTION (self));
>  	g_assert (s_con);
>  
>  	/* Check every user in the ACL for a session */
> @@ -1024,7 +1024,7 @@ check_writable (NMConnection *connection, GError **error)
>  	g_return_val_if_fail (connection != NULL, FALSE);
>  	g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
>  
> -	s_con = (NMSettingConnection *) nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION);
> +	s_con = nm_connection_get_setting_connection (connection);
>  	if (!s_con) {
>  		g_set_error_literal (error,
>  		                     NM_SETTINGS_ERROR,
> @@ -1175,11 +1175,11 @@ get_modify_permission_update (NMConnection *old, NMConnection *new)
>  	NMSettingConnection *s_con;
>  	guint32 orig_num = 0, new_num = 0;
>  
> -	s_con = (NMSettingConnection *) nm_connection_get_setting (old, NM_TYPE_SETTING_CONNECTION);
> +	s_con = nm_connection_get_setting_connection (old);
>  	g_assert (s_con);
>  	orig_num = nm_setting_connection_get_num_permissions (s_con);
>  
> -	s_con = (NMSettingConnection *) nm_connection_get_setting (new, NM_TYPE_SETTING_CONNECTION);
> +	s_con = nm_connection_get_setting_connection (new);
>  	g_assert (s_con);
>  	new_num = nm_setting_connection_get_num_permissions (s_con);
>  
> @@ -1283,7 +1283,7 @@ get_modify_permission_basic (NMSettingsConnection *connection)
>  	 * we use the 'modify.own' permission instead of 'modify.system'.  If the
>  	 * request affects more than just the caller, require 'modify.system'.
>  	 */
> -	s_con = (NMSettingConnection *) nm_connection_get_setting (NM_CONNECTION (connection), NM_TYPE_SETTING_CONNECTION);
> +	s_con = nm_connection_get_setting_connection (NM_CONNECTION (connection));
>  	g_assert (s_con);
>  	if (nm_setting_connection_get_num_permissions (s_con) == 1)
>  		return NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN;
> diff --git a/src/settings/nm-settings.c b/src/settings/nm-settings.c
> index f0bfc16..46b3544 100644
> --- a/src/settings/nm-settings.c
> +++ b/src/settings/nm-settings.c
> @@ -267,9 +267,9 @@ connection_sort (gconstpointer pa, gconstpointer pb)
>  	NMSettingConnection *con_b;
>  	guint64 ts_a, ts_b;
>  
> -	con_a = (NMSettingConnection *) nm_connection_get_setting (a, NM_TYPE_SETTING_CONNECTION);
> +	con_a = nm_connection_get_setting_connection (a);
>  	g_assert (con_a);
> -	con_b = (NMSettingConnection *) nm_connection_get_setting (b, NM_TYPE_SETTING_CONNECTION);
> +	con_b = nm_connection_get_setting_connection (b);
>  	g_assert (con_b);
>  
>  	if (nm_setting_connection_get_autoconnect (con_a) != nm_setting_connection_get_autoconnect (con_b)) {
> @@ -1044,7 +1044,7 @@ nm_settings_add_connection (NMSettings *self,
>  	 * we use the 'modify.own' permission instead of 'modify.system'.  If the
>  	 * request affects more than just the caller, require 'modify.system'.
>  	 */
> -	s_con = (NMSettingConnection *) nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION);
> +	s_con = nm_connection_get_setting_connection (connection);
>  	g_assert (s_con);
>  	if (nm_setting_connection_get_num_permissions (s_con) == 1)
>  		perm = NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN;
> @@ -1297,8 +1297,7 @@ default_wired_deleted (NMDefaultWiredConnection *wired,
>  	 * connection for that device again.
>  	 */
>  
> -	s_con = (NMSettingConnection *) nm_connection_get_setting (NM_CONNECTION (wired),
> -	                                                           NM_TYPE_SETTING_CONNECTION);
> +	s_con = nm_connection_get_setting_connection (NM_CONNECTION (wired));
>  	g_assert (s_con);
>  
>  	/* Ignore removals of read-only connections, since they couldn't have
> diff --git a/src/settings/plugins/ifcfg-rh/plugin.c b/src/settings/plugins/ifcfg-rh/plugin.c
> index b4be4cb..067072e 100644
> --- a/src/settings/plugins/ifcfg-rh/plugin.c
> +++ b/src/settings/plugins/ifcfg-rh/plugin.c
> @@ -569,7 +569,7 @@ impl_ifcfgrh_get_ifcfg_details (SCPluginIfcfg *plugin,
>  		return FALSE;
>  	}
>  
> -	s_con = (NMSettingConnection *) nm_connection_get_setting (NM_CONNECTION (connection), NM_TYPE_SETTING_CONNECTION);
> +	s_con = nm_connection_get_setting_connection (NM_CONNECTION (connection));
>  	if (!s_con) {
>  		g_set_error (error,
>  		             NM_SETTINGS_ERROR,
> diff --git a/src/settings/plugins/ifcfg-rh/reader.c b/src/settings/plugins/ifcfg-rh/reader.c
> index 910cca3..c43a067 100644
> --- a/src/settings/plugins/ifcfg-rh/reader.c
> +++ b/src/settings/plugins/ifcfg-rh/reader.c
> @@ -3544,7 +3544,7 @@ connection_from_file (const char *filename,
>  	    && !g_ascii_strcasecmp (bootproto, "ibft")) {
>  		NMSettingConnection *s_con;
>  
> -		s_con = (NMSettingConnection *) nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION);
> +		s_con = nm_connection_get_setting_connection (connection);
>  		g_assert (s_con);
>  
>  		g_object_set (G_OBJECT (s_con), NM_SETTING_CONNECTION_READ_ONLY, TRUE, NULL);
> 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 e32266c..15a3c7f 100644
> --- a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
> +++ b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
> @@ -235,7 +235,7 @@ test_read_minimal (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "minimal-wired-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_MINIMAL,
> @@ -275,7 +275,7 @@ test_read_minimal (void)
>  
>  	/* ===== WIRED SETTING ===== */
>  
> -	s_wired = NM_SETTING_WIRED (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED));
> +	s_wired = nm_connection_get_setting_wired (connection);
>  	ASSERT (s_wired != NULL,
>  	        "minimal-wired-verify-wired", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_MINIMAL,
> @@ -307,7 +307,7 @@ test_read_minimal (void)
>  
>  	/* ===== IPv4 SETTING ===== */
>  
> -	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  	ASSERT (s_ip4 != NULL,
>  	        "minimal-wired-verify-ip4", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_MINIMAL,
> @@ -379,7 +379,7 @@ test_read_unmanaged (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "unmanaged-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_UNMANAGED,
> @@ -417,7 +417,7 @@ test_read_unmanaged (void)
>  
>  	/* ===== WIRED SETTING ===== */
>  
> -	s_wired = NM_SETTING_WIRED (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED));
> +	s_wired = nm_connection_get_setting_wired (connection);
>  	ASSERT (s_wired != NULL,
>  	        "unmanaged-verify-wired", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_UNMANAGED,
> @@ -443,7 +443,7 @@ test_read_unmanaged (void)
>  
>  	/* ===== IPv4 SETTING ===== */
>  
> -	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  	ASSERT (s_ip4 == NULL,
>  	        "unmanaged-verify-ip4", "failed to verify %s: unexpected %s setting",
>  	        TEST_IFCFG_UNMANAGED,
> @@ -504,7 +504,7 @@ test_read_wired_static (const char *file, const char *expected_id)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "wired-static-verify-connection", "failed to verify %s: missing %s setting",
>  	        file,
> @@ -539,7 +539,7 @@ test_read_wired_static (const char *file, const char *expected_id)
>  
>  	/* ===== WIRED SETTING ===== */
>  
> -	s_wired = NM_SETTING_WIRED (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED));
> +	s_wired = nm_connection_get_setting_wired (connection);
>  	ASSERT (s_wired != NULL,
>  	        "wired-static-verify-wired", "failed to verify %s: missing %s setting",
>  	        file,
> @@ -571,7 +571,7 @@ test_read_wired_static (const char *file, const char *expected_id)
>  
>  	/* ===== IPv4 SETTING ===== */
>  
> -	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  	ASSERT (s_ip4 != NULL,
>  	        "wired-static-verify-ip4", "failed to verify %s: missing %s setting",
>  	        file,
> @@ -666,7 +666,7 @@ test_read_wired_static (const char *file, const char *expected_id)
>  	if (!strcmp (expected_id, "System test-wired-static")) {
>  		/* ===== IPv6 SETTING ===== */
>  
> -		s_ip6 = NM_SETTING_IP6_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP6_CONFIG));
> +		s_ip6 = nm_connection_get_setting_ip6_config (connection);
>  		ASSERT (s_ip6 != NULL,
>  			"wired-static-verify-ip6", "failed to verify %s: missing %s setting",
>  			file,
> @@ -807,7 +807,7 @@ test_read_wired_static_no_prefix (guint32 expected_prefix)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "wired-static-no-prefix-verify-connection", "failed to verify %s: missing %s setting",
>  	        file,
> @@ -829,7 +829,7 @@ test_read_wired_static_no_prefix (guint32 expected_prefix)
>  
>  	/* ===== IPv4 SETTING ===== */
>  
> -	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  	ASSERT (s_ip4 != NULL,
>  	        "wired-static-no-prefix-verify-ip4", "failed to verify %s: missing %s setting",
>  	        file,
> @@ -916,7 +916,7 @@ test_read_wired_dhcp (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "wired-dhcp-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_DHCP,
> @@ -951,7 +951,7 @@ test_read_wired_dhcp (void)
>  
>  	/* ===== WIRED SETTING ===== */
>  
> -	s_wired = NM_SETTING_WIRED (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED));
> +	s_wired = nm_connection_get_setting_wired (connection);
>  	ASSERT (s_wired != NULL,
>  	        "wired-dhcp-verify-wired", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_DHCP,
> @@ -977,7 +977,7 @@ test_read_wired_dhcp (void)
>  
>  	/* ===== IPv4 SETTING ===== */
>  
> -	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  	ASSERT (s_ip4 != NULL,
>  	        "wired-dhcp-verify-ip4", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_DHCP,
> @@ -1089,7 +1089,7 @@ test_read_wired_global_gateway (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "wired-global-gateway-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
> @@ -1110,7 +1110,7 @@ test_read_wired_global_gateway (void)
>  
>  	/* ===== WIRED SETTING ===== */
>  
> -	s_wired = NM_SETTING_WIRED (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED));
> +	s_wired = nm_connection_get_setting_wired (connection);
>  	ASSERT (s_wired != NULL,
>  	        "wired-global-gateway-verify-wired", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
> @@ -1118,7 +1118,7 @@ test_read_wired_global_gateway (void)
>  
>  	/* ===== IPv4 SETTING ===== */
>  
> -	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  	ASSERT (s_ip4 != NULL,
>  	        "wired-global-gateway-verify-ip4", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
> @@ -1216,7 +1216,7 @@ test_read_wired_never_default (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "wired-never-default-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_NEVER_DEFAULT,
> @@ -1237,7 +1237,7 @@ test_read_wired_never_default (void)
>  
>  	/* ===== WIRED SETTING ===== */
>  
> -	s_wired = NM_SETTING_WIRED (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED));
> +	s_wired = nm_connection_get_setting_wired (connection);
>  	ASSERT (s_wired != NULL,
>  	        "wired-never-default-verify-wired", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_NEVER_DEFAULT,
> @@ -1245,7 +1245,7 @@ test_read_wired_never_default (void)
>  
>  	/* ===== IPv4 SETTING ===== */
>  
> -	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  	ASSERT (s_ip4 != NULL,
>  	        "wired-never-default-verify-ip4", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_NEVER_DEFAULT,
> @@ -1274,7 +1274,7 @@ test_read_wired_never_default (void)
>  
>  	/* ===== IPv6 SETTING ===== */
>  
> -	s_ip6 = NM_SETTING_IP6_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP6_CONFIG));
> +	s_ip6 = nm_connection_get_setting_ip6_config (connection);
>  	ASSERT (s_ip6 != NULL,
>  	        "wired-never-default-verify-ip6", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_NEVER_DEFAULT,
> @@ -1341,7 +1341,7 @@ test_read_wired_defroute_no (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "wired-defroute-no-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_DEFROUTE_NO,
> @@ -1362,7 +1362,7 @@ test_read_wired_defroute_no (void)
>  
>  	/* ===== WIRED SETTING ===== */
>  
> -	s_wired = NM_SETTING_WIRED (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED));
> +	s_wired = nm_connection_get_setting_wired (connection);
>  	ASSERT (s_wired != NULL,
>  	        "wired-defroute-no-verify-wired", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_DEFROUTE_NO,
> @@ -1370,7 +1370,7 @@ test_read_wired_defroute_no (void)
>  
>  	/* ===== IPv4 SETTING ===== */
>  
> -	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  	ASSERT (s_ip4 != NULL,
>  	        "wired-defroute-no-verify-ip4", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_DEFROUTE_NO,
> @@ -1392,7 +1392,7 @@ test_read_wired_defroute_no (void)
>  
>  	/* ===== IPv6 SETTING ===== */
>  
> -	s_ip6 = NM_SETTING_IP6_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP6_CONFIG));
> +	s_ip6 = nm_connection_get_setting_ip6_config (connection);
>  	ASSERT (s_ip6 != NULL,
>  	        "wired-defroute-no-verify-ip6", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_DEFROUTE_NO,
> @@ -1468,7 +1468,7 @@ test_read_wired_defroute_no_gatewaydev_yes (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "wired-defroute-no-gatewaydev-yes-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
> @@ -1489,7 +1489,7 @@ test_read_wired_defroute_no_gatewaydev_yes (void)
>  
>  	/* ===== WIRED SETTING ===== */
>  
> -	s_wired = NM_SETTING_WIRED (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED));
> +	s_wired = nm_connection_get_setting_wired (connection);
>  	ASSERT (s_wired != NULL,
>  	        "wired-defroute-no-gatewaydev-yes-verify-wired", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
> @@ -1497,7 +1497,7 @@ test_read_wired_defroute_no_gatewaydev_yes (void)
>  
>  	/* ===== IPv4 SETTING ===== */
>  
> -	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  	ASSERT (s_ip4 != NULL,
>  	        "wired-defroute-no-gatewaydev-yes-verify-ip4", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
> @@ -1519,7 +1519,7 @@ test_read_wired_defroute_no_gatewaydev_yes (void)
>  
>  	/* ===== IPv6 SETTING ===== */
>  
> -	s_ip6 = NM_SETTING_IP6_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP6_CONFIG));
> +	s_ip6 = nm_connection_get_setting_ip6_config (connection);
>  	ASSERT (s_ip6 != NULL,
>  	        "wired-defroute-no-gatewaydev-yes-verify-ip6", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
> @@ -1597,7 +1597,7 @@ test_read_wired_static_routes (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "wired-static-routes-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_STATIC_ROUTES,
> @@ -1618,7 +1618,7 @@ test_read_wired_static_routes (void)
>  
>  	/* ===== WIRED SETTING ===== */
>  
> -	s_wired = NM_SETTING_WIRED (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED));
> +	s_wired = nm_connection_get_setting_wired (connection);
>  	ASSERT (s_wired != NULL,
>  	        "wired-static-routes-verify-wired", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_STATIC_ROUTES,
> @@ -1626,7 +1626,7 @@ test_read_wired_static_routes (void)
>  
>  	/* ===== IPv4 SETTING ===== */
>  
> -	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  	ASSERT (s_ip4 != NULL,
>  	        "wired-static-routes-verify-ip4", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_STATIC_ROUTES,
> @@ -1764,7 +1764,7 @@ test_read_wired_static_routes_legacy (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "wired-static-routes-legacy-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
> @@ -1785,7 +1785,7 @@ test_read_wired_static_routes_legacy (void)
>  
>  	/* ===== WIRED SETTING ===== */
>  
> -	s_wired = NM_SETTING_WIRED (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED));
> +	s_wired = nm_connection_get_setting_wired (connection);
>  	ASSERT (s_wired != NULL,
>  	        "wired-static-routes-legacy-verify-wired", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
> @@ -1793,7 +1793,7 @@ test_read_wired_static_routes_legacy (void)
>  
>  	/* ===== IPv4 SETTING ===== */
>  
> -	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  	ASSERT (s_ip4 != NULL,
>  	        "wired-static-routes-legacy-verify-ip4", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
> @@ -1961,7 +1961,7 @@ test_read_wired_ipv4_manual (const char *file, const char *expected_id)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "wired-ipv4-manual-verify-connection", "failed to verify %s: missing %s setting",
>  	        file,
> @@ -1982,7 +1982,7 @@ test_read_wired_ipv4_manual (const char *file, const char *expected_id)
>  
>  	/* ===== WIRED SETTING ===== */
>  
> -	s_wired = NM_SETTING_WIRED (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED));
> +	s_wired = nm_connection_get_setting_wired (connection);
>  	ASSERT (s_wired != NULL,
>  	        "wired-ipv4-manual-verify-wired", "failed to verify %s: missing %s setting",
>  	        file,
> @@ -1990,7 +1990,7 @@ test_read_wired_ipv4_manual (const char *file, const char *expected_id)
>  
>  	/* ===== IPv4 SETTING ===== */
>  
> -	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  	ASSERT (s_ip4 != NULL,
>  	        "wired-ipv4-manual-verify-ip4", "failed to verify %s: missing %s setting",
>  	        file,
> @@ -2124,7 +2124,7 @@ test_read_wired_ipv6_manual (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "wired-ipv6-manual-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_IPV6_MANUAL,
> @@ -2145,7 +2145,7 @@ test_read_wired_ipv6_manual (void)
>  
>  	/* ===== WIRED SETTING ===== */
>  
> -	s_wired = NM_SETTING_WIRED (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED));
> +	s_wired = nm_connection_get_setting_wired (connection);
>  	ASSERT (s_wired != NULL,
>  	        "wired-ipv6-manual-verify-wired", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_IPV6_MANUAL,
> @@ -2153,7 +2153,7 @@ test_read_wired_ipv6_manual (void)
>  
>  	/* ===== IPv4 SETTING ===== */
>  
> -	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  	ASSERT (s_ip4 != NULL,
>  	        "wired-ipv6-manual-verify-ip4", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_IPV6_MANUAL,
> @@ -2211,7 +2211,7 @@ test_read_wired_ipv6_manual (void)
>  
>  	/* ===== IPv6 SETTING ===== */
>  
> -	s_ip6 = NM_SETTING_IP6_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP6_CONFIG));
> +	s_ip6 = nm_connection_get_setting_ip6_config (connection);
>  	ASSERT (s_ip6 != NULL,
>  	        "wired-ipv6-manual-verify-ip6", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_IPV6_MANUAL,
> @@ -2415,7 +2415,7 @@ test_read_wired_ipv6_only (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "wired-ipv6-only-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_IPV6_MANUAL,
> @@ -2436,7 +2436,7 @@ test_read_wired_ipv6_only (void)
>  
>  	/* ===== WIRED SETTING ===== */
>  
> -	s_wired = NM_SETTING_WIRED (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED));
> +	s_wired = nm_connection_get_setting_wired (connection);
>  	ASSERT (s_wired != NULL,
>  	        "wired-ipv6-only-verify-wired", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_IPV6_MANUAL,
> @@ -2444,7 +2444,7 @@ test_read_wired_ipv6_only (void)
>  
>  	/* ===== IPv4 SETTING ===== */
>  
> -	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  	ASSERT (s_ip4 != NULL,
>  	        "wired-ipv6-only-verify-ip4", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_IPV6_MANUAL,
> @@ -2459,7 +2459,7 @@ test_read_wired_ipv6_only (void)
>  
>  	/* ===== IPv6 SETTING ===== */
>  
> -	s_ip6 = NM_SETTING_IP6_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP6_CONFIG));
> +	s_ip6 = nm_connection_get_setting_ip6_config (connection);
>  	ASSERT (s_ip6 != NULL,
>  	        "wired-ipv6-only-verify-ip6", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_IPV6_MANUAL,
> @@ -2568,7 +2568,7 @@ test_read_wired_dhcp6_only (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "wired-dhcp6-only-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_DHCP6_ONLY,
> @@ -2589,7 +2589,7 @@ test_read_wired_dhcp6_only (void)
>  
>  	/* ===== WIRED SETTING ===== */
>  
> -	s_wired = NM_SETTING_WIRED (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED));
> +	s_wired = nm_connection_get_setting_wired (connection);
>  	ASSERT (s_wired != NULL,
>  	        "wired-dhcp6-only-verify-wired", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_DHCP6_ONLY,
> @@ -2597,7 +2597,7 @@ test_read_wired_dhcp6_only (void)
>  
>  	/* ===== IPv4 SETTING ===== */
>  
> -	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  	ASSERT (s_ip4 != NULL,
>  	        "wired-dhcp6-only-verify-ip4", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_DHCP6_ONLY,
> @@ -2612,7 +2612,7 @@ test_read_wired_dhcp6_only (void)
>  
>  	/* ===== IPv6 SETTING ===== */
>  
> -	s_ip6 = NM_SETTING_IP6_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP6_CONFIG));
> +	s_ip6 = nm_connection_get_setting_ip6_config (connection);
>  	ASSERT (s_ip6 != NULL,
>  	        "wired-dhcp6-only-verify-ip6", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_DHCP6_ONLY,
> @@ -2668,7 +2668,7 @@ test_read_onboot_no (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "onboot-no-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_ONBOOT_NO,
> @@ -2734,7 +2734,7 @@ test_read_wired_8021x_peap_mschapv2 (void)
>  
>  	/* ===== WIRED SETTING ===== */
>  
> -	s_wired = NM_SETTING_WIRED (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED));
> +	s_wired = nm_connection_get_setting_wired (connection);
>  	ASSERT (s_wired != NULL,
>  	        "wired-8021x-peap-mschapv2-verify-wired", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
> @@ -2742,7 +2742,7 @@ test_read_wired_8021x_peap_mschapv2 (void)
>  
>  	/* ===== IPv4 SETTING ===== */
>  
> -	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  	ASSERT (s_ip4 != NULL,
>  	        "wired-8021x-peap-mschapv2-verify-ip4", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
> @@ -2757,7 +2757,7 @@ test_read_wired_8021x_peap_mschapv2 (void)
>  	        NM_SETTING_IP4_CONFIG_METHOD);
>  
>  	/* ===== 802.1x SETTING ===== */
> -	s_8021x = NM_SETTING_802_1X (nm_connection_get_setting (connection, NM_TYPE_SETTING_802_1X));
> +	s_8021x = nm_connection_get_setting_802_1x (connection);
>  	ASSERT (s_8021x != NULL,
>  	        "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
> @@ -2929,11 +2929,11 @@ test_read_wired_8021x_tls_secret_flags (const char *ifcfg, NMSettingSecretFlags
>  	g_assert (success);
>  
>  	/* ===== WIRED SETTING ===== */
> -	s_wired = (NMSettingWired *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED);
> +	s_wired = nm_connection_get_setting_wired (connection);
>  	g_assert (s_wired);
>  
>  	/* ===== 802.1x SETTING ===== */
> -	s_8021x = (NMSetting8021x *) nm_connection_get_setting (connection, NM_TYPE_SETTING_802_1X);
> +	s_8021x = nm_connection_get_setting_802_1x (connection);
>  	g_assert (s_8021x);
>  	g_assert_cmpint (nm_setting_802_1x_get_num_eap_methods (s_8021x), ==, 1);
>  	g_assert_cmpstr (nm_setting_802_1x_get_eap_method (s_8021x, 0), ==, "tls");
> @@ -3001,7 +3001,7 @@ test_read_wifi_open (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "wifi-open-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_OPEN,
> @@ -3041,7 +3041,7 @@ test_read_wifi_open (void)
>  
>  	/* ===== WIRELESS SETTING ===== */
>  
> -	s_wireless = NM_SETTING_WIRELESS (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS));
> +	s_wireless = nm_connection_get_setting_wireless (connection);
>  	ASSERT (s_wireless != NULL,
>  	        "wifi-open-verify-wireless", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_OPEN,
> @@ -3120,7 +3120,7 @@ test_read_wifi_open (void)
>  
>  	/* ===== IPv4 SETTING ===== */
>  
> -	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  	ASSERT (s_ip4 != NULL,
>  	        "wifi-open-verify-ip4", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_OPEN,
> @@ -3177,7 +3177,7 @@ test_read_wifi_open_auto (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "wifi-open-auto-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_OPEN_AUTO,
> @@ -3198,7 +3198,7 @@ test_read_wifi_open_auto (void)
>  
>  	/* ===== WIRELESS SETTING ===== */
>  
> -	s_wireless = NM_SETTING_WIRELESS (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS));
> +	s_wireless = nm_connection_get_setting_wireless (connection);
>  	ASSERT (s_wireless != NULL,
>  	        "wifi-open-auto-verify-wireless", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_OPEN_AUTO,
> @@ -3260,7 +3260,7 @@ test_read_wifi_open_ssid_hex (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "wifi-open-ssid-hex-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_OPEN_SSID_HEX,
> @@ -3281,7 +3281,7 @@ test_read_wifi_open_ssid_hex (void)
>  
>  	/* ===== WIRELESS SETTING ===== */
>  
> -	s_wireless = NM_SETTING_WIRELESS (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS));
> +	s_wireless = nm_connection_get_setting_wireless (connection);
>  	ASSERT (s_wireless != NULL,
>  	        "wifi-open-ssid-hex-verify-wireless", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_OPEN_SSID_HEX,
> @@ -3379,7 +3379,7 @@ test_read_wifi_open_ssid_quoted (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "wifi-open-ssid-quoted-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_OPEN_SSID_QUOTED,
> @@ -3400,7 +3400,7 @@ test_read_wifi_open_ssid_quoted (void)
>  
>  	/* ===== WIRELESS SETTING ===== */
>  
> -	s_wireless = NM_SETTING_WIRELESS (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS));
> +	s_wireless = nm_connection_get_setting_wireless (connection);
>  	ASSERT (s_wireless != NULL,
>  	        "wifi-open-ssid-quoted-verify-wireless", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_OPEN_SSID_QUOTED,
> @@ -3476,7 +3476,7 @@ test_read_wifi_wep (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "wifi-wep-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WEP,
> @@ -3516,7 +3516,7 @@ test_read_wifi_wep (void)
>  
>  	/* ===== WIRELESS SETTING ===== */
>  
> -	s_wireless = NM_SETTING_WIRELESS (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS));
> +	s_wireless = nm_connection_get_setting_wireless (connection);
>  	ASSERT (s_wireless != NULL,
>  	        "wifi-wep-verify-wireless", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WEP,
> @@ -3608,7 +3608,7 @@ test_read_wifi_wep (void)
>  
>  	/* ===== WIRELESS SECURITY SETTING ===== */
>  
> -	s_wsec = NM_SETTING_WIRELESS_SECURITY (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY));
> +	s_wsec = nm_connection_get_setting_wireless_security (connection);
>  	ASSERT (s_wsec != NULL,
>  	        "wifi-wep-verify-wireless", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WEP,
> @@ -3687,7 +3687,7 @@ test_read_wifi_wep (void)
>  
>  	/* ===== IPv4 SETTING ===== */
>  
> -	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  	ASSERT (s_ip4 != NULL,
>  	        "wifi-wep-verify-ip4", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WEP,
> @@ -3752,7 +3752,7 @@ test_read_wifi_wep_adhoc (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "wifi-wep-adhoc-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WEP_ADHOC,
> @@ -3785,7 +3785,7 @@ test_read_wifi_wep_adhoc (void)
>  
>  	/* ===== WIRELESS SETTING ===== */
>  
> -	s_wireless = NM_SETTING_WIRELESS (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS));
> +	s_wireless = nm_connection_get_setting_wireless (connection);
>  	ASSERT (s_wireless != NULL,
>  	        "wifi-wep-adhoc-verify-wireless", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WEP_ADHOC,
> @@ -3852,7 +3852,7 @@ test_read_wifi_wep_adhoc (void)
>  
>  	/* ===== WIRELESS SECURITY SETTING ===== */
>  
> -	s_wsec = NM_SETTING_WIRELESS_SECURITY (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY));
> +	s_wsec = nm_connection_get_setting_wireless_security (connection);
>  	ASSERT (s_wsec != NULL,
>  	        "wifi-wep-adhoc-verify-wireless", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WEP_ADHOC,
> @@ -3919,7 +3919,7 @@ test_read_wifi_wep_adhoc (void)
>  
>  	/* ===== IPv4 SETTING ===== */
>  
> -	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  	ASSERT (s_ip4 != NULL,
>  	        "wifi-wep-adhoc-verify-ip4", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WEP_ADHOC,
> @@ -4015,7 +4015,7 @@ test_read_wifi_wep_passphrase (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "wifi-wep-passphrase-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WEP_PASSPHRASE,
> @@ -4023,7 +4023,7 @@ test_read_wifi_wep_passphrase (void)
>  
>  	/* ===== WIRELESS SETTING ===== */
>  
> -	s_wireless = NM_SETTING_WIRELESS (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS));
> +	s_wireless = nm_connection_get_setting_wireless (connection);
>  	ASSERT (s_wireless != NULL,
>  	        "wifi-wep-passphrase-verify-wireless", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WEP_PASSPHRASE,
> @@ -4045,7 +4045,7 @@ test_read_wifi_wep_passphrase (void)
>  
>  	/* ===== WIRELESS SECURITY SETTING ===== */
>  
> -	s_wsec = NM_SETTING_WIRELESS_SECURITY (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY));
> +	s_wsec = nm_connection_get_setting_wireless_security (connection);
>  	ASSERT (s_wsec != NULL,
>  	        "wifi-wep-passphrase-verify-wireless", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WEP_PASSPHRASE,
> @@ -4153,7 +4153,7 @@ test_read_wifi_wep_40_ascii (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "wifi-wep-40-ascii-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WEP_40_ASCII,
> @@ -4161,7 +4161,7 @@ test_read_wifi_wep_40_ascii (void)
>  
>  	/* ===== WIRELESS SETTING ===== */
>  
> -	s_wireless = NM_SETTING_WIRELESS (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS));
> +	s_wireless = nm_connection_get_setting_wireless (connection);
>  	ASSERT (s_wireless != NULL,
>  	        "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WEP_40_ASCII,
> @@ -4182,7 +4182,7 @@ test_read_wifi_wep_40_ascii (void)
>  
>  	/* ===== WIRELESS SECURITY SETTING ===== */
>  
> -	s_wsec = NM_SETTING_WIRELESS_SECURITY (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY));
> +	s_wsec = nm_connection_get_setting_wireless_security (connection);
>  	ASSERT (s_wsec != NULL,
>  	        "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WEP_40_ASCII,
> @@ -4290,7 +4290,7 @@ test_read_wifi_wep_104_ascii (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "wifi-wep-104-ascii-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WEP_104_ASCII,
> @@ -4298,7 +4298,7 @@ test_read_wifi_wep_104_ascii (void)
>  
>  	/* ===== WIRELESS SETTING ===== */
>  
> -	s_wireless = NM_SETTING_WIRELESS (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS));
> +	s_wireless = nm_connection_get_setting_wireless (connection);
>  	ASSERT (s_wireless != NULL,
>  	        "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WEP_104_ASCII,
> @@ -4319,7 +4319,7 @@ test_read_wifi_wep_104_ascii (void)
>  
>  	/* ===== WIRELESS SECURITY SETTING ===== */
>  
> -	s_wsec = NM_SETTING_WIRELESS_SECURITY (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY));
> +	s_wsec = nm_connection_get_setting_wireless_security (connection);
>  	ASSERT (s_wsec != NULL,
>  	        "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WEP_104_ASCII,
> @@ -4428,7 +4428,7 @@ test_read_wifi_leap (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "wifi-leap-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_LEAP,
> @@ -4449,7 +4449,7 @@ test_read_wifi_leap (void)
>  
>  	/* ===== WIRELESS SETTING ===== */
>  
> -	s_wireless = NM_SETTING_WIRELESS (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS));
> +	s_wireless = nm_connection_get_setting_wireless (connection);
>  	ASSERT (s_wireless != NULL,
>  	        "wifi-leap-verify-wireless", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_LEAP,
> @@ -4471,7 +4471,7 @@ test_read_wifi_leap (void)
>  
>  	/* ===== WIRELESS SECURITY SETTING ===== */
>  
> -	s_wsec = NM_SETTING_WIRELESS_SECURITY (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY));
> +	s_wsec = nm_connection_get_setting_wireless_security (connection);
>  	ASSERT (s_wsec != NULL,
>  	        "wifi-leap-verify-wireless", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_LEAP,
> @@ -4566,13 +4566,13 @@ test_read_wifi_leap_secret_flags (const char *file, NMSettingSecretFlags expecte
>  	g_assert (success);
>  
>  	/* ===== WIRELESS SETTING ===== */
> -	s_wifi = (NMSettingWireless *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS);
> +	s_wifi = nm_connection_get_setting_wireless (connection);
>  	g_assert (s_wifi);
>  
>  	g_assert (g_strcmp0 (nm_setting_wireless_get_security (s_wifi), NM_SETTING_WIRELESS_SECURITY_SETTING_NAME) == 0);
>  
>  	/* ===== WIRELESS SECURITY SETTING ===== */
> -	s_wsec = (NMSettingWirelessSecurity *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
> +	s_wsec = nm_connection_get_setting_wireless_security (connection);
>  	g_assert (s_wsec);
>  
>  	g_assert (g_strcmp0 (nm_setting_wireless_security_get_key_mgmt (s_wsec), "ieee8021x") == 0);
> @@ -4643,7 +4643,7 @@ test_read_wifi_wpa_psk (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "wifi-wpa-psk-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WPA_PSK,
> @@ -4683,7 +4683,7 @@ test_read_wifi_wpa_psk (void)
>  
>  	/* ===== WIRELESS SETTING ===== */
>  
> -	s_wireless = NM_SETTING_WIRELESS (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS));
> +	s_wireless = nm_connection_get_setting_wireless (connection);
>  	ASSERT (s_wireless != NULL,
>  	        "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WPA_PSK,
> @@ -4774,7 +4774,7 @@ test_read_wifi_wpa_psk (void)
>  
>  	/* ===== WIRELESS SECURITY SETTING ===== */
>  
> -	s_wsec = NM_SETTING_WIRELESS_SECURITY (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY));
> +	s_wsec = nm_connection_get_setting_wireless_security (connection);
>  	ASSERT (s_wsec != NULL,
>  	        "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WPA_PSK,
> @@ -4887,7 +4887,7 @@ test_read_wifi_wpa_psk (void)
>  
>  	/* ===== IPv4 SETTING ===== */
>  
> -	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  	ASSERT (s_ip4 != NULL,
>  	        "wifi-wpa-psk-verify-ip4", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WPA_PSK,
> @@ -4945,7 +4945,7 @@ test_read_wifi_wpa_psk_unquoted (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "wifi-wpa-psk-unquoted-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED,
> @@ -4966,7 +4966,7 @@ test_read_wifi_wpa_psk_unquoted (void)
>  
>  	/* ===== WIRELESS SETTING ===== */
>  
> -	s_wireless = NM_SETTING_WIRELESS (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS));
> +	s_wireless = nm_connection_get_setting_wireless (connection);
>  	ASSERT (s_wireless != NULL,
>  	        "wifi-wpa-psk-unquoted-verify-wireless", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED,
> @@ -4987,7 +4987,7 @@ test_read_wifi_wpa_psk_unquoted (void)
>  
>  	/* ===== WIRELESS SECURITY SETTING ===== */
>  
> -	s_wsec = NM_SETTING_WIRELESS_SECURITY (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY));
> +	s_wsec = nm_connection_get_setting_wireless_security (connection);
>  	ASSERT (s_wsec != NULL,
>  	        "wifi-wpa-psk-unquoted-verify-wireless", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED,
> @@ -5092,7 +5092,7 @@ test_read_wifi_wpa_psk_adhoc (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "wifi-wpa-psk-adhoc-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
> @@ -5113,7 +5113,7 @@ test_read_wifi_wpa_psk_adhoc (void)
>  
>  	/* ===== WIRELESS SETTING ===== */
>  
> -	s_wireless = NM_SETTING_WIRELESS (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS));
> +	s_wireless = nm_connection_get_setting_wireless (connection);
>  	ASSERT (s_wireless != NULL,
>  	        "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
> @@ -5147,7 +5147,7 @@ test_read_wifi_wpa_psk_adhoc (void)
>  
>  	/* ===== WIRELESS SECURITY SETTING ===== */
>  
> -	s_wsec = NM_SETTING_WIRELESS_SECURITY (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY));
> +	s_wsec = nm_connection_get_setting_wireless_security (connection);
>  	ASSERT (s_wsec != NULL,
>  	        "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
> @@ -5221,7 +5221,7 @@ test_read_wifi_wpa_psk_adhoc (void)
>  
>  	/* ===== IPv4 SETTING ===== */
>  
> -	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  	ASSERT (s_ip4 != NULL,
>  	        "wifi-wpa-psk-adhoc-verify-ip4", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
> @@ -5283,7 +5283,7 @@ test_read_wifi_wpa_psk_hex (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "wifi-wpa-psk-hex-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WPA_PSK_HEX,
> @@ -5304,7 +5304,7 @@ test_read_wifi_wpa_psk_hex (void)
>  
>  	/* ===== WIRELESS SETTING ===== */
>  
> -	s_wireless = NM_SETTING_WIRELESS (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS));
> +	s_wireless = nm_connection_get_setting_wireless (connection);
>  	ASSERT (s_wireless != NULL,
>  	        "wifi-wpa-psk-hex-verify-wireless", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WPA_PSK_HEX,
> @@ -5343,7 +5343,7 @@ test_read_wifi_wpa_psk_hex (void)
>  
>  	/* ===== WIRELESS SECURITY SETTING ===== */
>  
> -	s_wsec = NM_SETTING_WIRELESS_SECURITY (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY));
> +	s_wsec = nm_connection_get_setting_wireless_security (connection);
>  	ASSERT (s_wsec != NULL,
>  	        "wifi-wpa-psk-hex-verify-wireless", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WPA_PSK_HEX,
> @@ -5377,7 +5377,7 @@ test_read_wifi_wpa_psk_hex (void)
>  
>  	/* ===== IPv4 SETTING ===== */
>  
> -	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  	ASSERT (s_ip4 != NULL,
>  	        "wifi-wpa-psk-hex-verify-ip4", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WPA_PSK_HEX,
> @@ -5441,7 +5441,7 @@ test_read_wifi_wpa_eap_tls (void)
>  
>  	/* ===== WIRELESS SETTING ===== */
>  
> -	s_wireless = NM_SETTING_WIRELESS (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS));
> +	s_wireless = nm_connection_get_setting_wireless (connection);
>  	ASSERT (s_wireless != NULL,
>  	        "wifi-wpa-eap-tls-verify-wireless", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WPA_EAP_TLS,
> @@ -5449,7 +5449,7 @@ test_read_wifi_wpa_eap_tls (void)
>  
>  	/* ===== IPv4 SETTING ===== */
>  
> -	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  	ASSERT (s_ip4 != NULL,
>  	        "wifi-wpa-eap-tls-verify-ip4", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WPA_EAP_TLS,
> @@ -5464,7 +5464,7 @@ test_read_wifi_wpa_eap_tls (void)
>  	        NM_SETTING_IP4_CONFIG_METHOD);
>  
>  	/* ===== 802.1x SETTING ===== */
> -	s_8021x = NM_SETTING_802_1X (nm_connection_get_setting (connection, NM_TYPE_SETTING_802_1X));
> +	s_8021x = nm_connection_get_setting_802_1x (connection);
>  	ASSERT (s_8021x != NULL,
>  	        "wifi-wpa-eap-tls-verify-8021x", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WPA_EAP_TLS,
> @@ -5591,7 +5591,7 @@ test_read_wifi_wpa_eap_ttls_tls (void)
>  
>  	/* ===== WIRELESS SETTING ===== */
>  
> -	s_wireless = NM_SETTING_WIRELESS (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS));
> +	s_wireless = nm_connection_get_setting_wireless (connection);
>  	ASSERT (s_wireless != NULL,
>  	        "wifi-wpa-eap-ttls-tls-verify-wireless", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
> @@ -5599,7 +5599,7 @@ test_read_wifi_wpa_eap_ttls_tls (void)
>  
>  	/* ===== IPv4 SETTING ===== */
>  
> -	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  	ASSERT (s_ip4 != NULL,
>  	        "wifi-wpa-eap-ttls-tls-verify-ip4", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
> @@ -5614,7 +5614,7 @@ test_read_wifi_wpa_eap_ttls_tls (void)
>  	        NM_SETTING_IP4_CONFIG_METHOD);
>  
>  	/* ===== 802.1x SETTING ===== */
> -	s_8021x = NM_SETTING_802_1X (nm_connection_get_setting (connection, NM_TYPE_SETTING_802_1X));
> +	s_8021x = nm_connection_get_setting_802_1x (connection);
>  	ASSERT (s_8021x != NULL,
>  	        "wifi-wpa-eap-ttls-tls-verify-8021x", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
> @@ -5756,13 +5756,13 @@ test_read_wifi_dynamic_wep_leap (void)
>  
>  	/* ===== WIRELESS SETTING ===== */
>  
> -	s_wifi = (NMSettingWireless *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS);
> +	s_wifi = nm_connection_get_setting_wireless (connection);
>  	g_assert (s_wifi);
>  
>  	g_assert_cmpstr (nm_setting_wireless_get_security (s_wifi), ==, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
>  
>  	/* ===== WiFi SECURITY SETTING ===== */
> -	s_wsec = (NMSettingWirelessSecurity *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
> +	s_wsec = nm_connection_get_setting_wireless_security (connection);
>  	g_assert (s_wsec);
>  
>  	/* Key management */
> @@ -5778,7 +5778,7 @@ test_read_wifi_dynamic_wep_leap (void)
>  	g_assert_cmpstr (nm_setting_wireless_security_get_leap_password (s_wsec), ==, NULL);
>  
>  	/* ===== 802.1x SETTING ===== */
> -	s_8021x = (NMSetting8021x *) nm_connection_get_setting (connection, NM_TYPE_SETTING_802_1X);
> +	s_8021x = nm_connection_get_setting_802_1x (connection);
>  	g_assert (s_8021x);
>  
>  	/* EAP method should be "leap" */
> @@ -5839,7 +5839,7 @@ test_read_wifi_wep_eap_ttls_chap (void)
>  
>  	/* ===== WIRELESS SETTING ===== */
>  
> -	s_wireless = NM_SETTING_WIRELESS (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS));
> +	s_wireless = nm_connection_get_setting_wireless (connection);
>  	ASSERT (s_wireless != NULL,
>  	        "wifi-wep-eap-ttls-chap-verify-wireless", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
> @@ -5847,7 +5847,7 @@ test_read_wifi_wep_eap_ttls_chap (void)
>  
>  	/* ===== IPv4 SETTING ===== */
>  
> -	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  	ASSERT (s_ip4 != NULL,
>  	        "wifi-wep-eap-ttls-chap-verify-ip4", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
> @@ -5862,7 +5862,7 @@ test_read_wifi_wep_eap_ttls_chap (void)
>  	        NM_SETTING_IP4_CONFIG_METHOD);
>  
>  	/* ===== 802.1x SETTING ===== */
> -	s_wsec = NM_SETTING_WIRELESS_SECURITY (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY));
> +	s_wsec = nm_connection_get_setting_wireless_security (connection);
>  	ASSERT (s_wsec != NULL,
>  	        "wifi-wep-eap-ttls-chap-verify-wireless-security", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
> @@ -5882,7 +5882,7 @@ test_read_wifi_wep_eap_ttls_chap (void)
>  	        NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
>  
>  	/* ===== 802.1x SETTING ===== */
> -	s_8021x = NM_SETTING_802_1X (nm_connection_get_setting (connection, NM_TYPE_SETTING_802_1X));
> +	s_8021x = nm_connection_get_setting_802_1x (connection);
>  	ASSERT (s_8021x != NULL,
>  	        "wifi-wep-eap-ttls-chap-verify-8021x", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
> @@ -6005,7 +6005,7 @@ test_read_wired_qeth_static (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "wired-qeth-static-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_QETH_STATIC,
> @@ -6026,7 +6026,7 @@ test_read_wired_qeth_static (void)
>  
>  	/* ===== WIRED SETTING ===== */
>  
> -	s_wired = NM_SETTING_WIRED (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED));
> +	s_wired = nm_connection_get_setting_wired (connection);
>  	ASSERT (s_wired != NULL,
>  	        "wired-qeth-static-verify-wired", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_QETH_STATIC,
> @@ -6116,7 +6116,7 @@ test_read_wired_qeth_static (void)
>  
>  	/* ===== IPv4 SETTING ===== */
>  
> -	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  	ASSERT (s_ip4 != NULL,
>  	        "wired-qeth-static-verify-ip4", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIRED_QETH_STATIC,
> @@ -6247,7 +6247,7 @@ test_read_wifi_wep_no_keys (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "wifi-wep-no-keys-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WEP_NO_KEYS,
> @@ -6273,7 +6273,7 @@ test_read_wifi_wep_no_keys (void)
>  
>  	/* ===== WIRELESS SETTING ===== */
>  
> -	s_wireless = NM_SETTING_WIRELESS (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS));
> +	s_wireless = nm_connection_get_setting_wireless (connection);
>  	ASSERT (s_wireless != NULL,
>  	        "wifi-wep-no-keys-verify-wireless", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WEP_NO_KEYS,
> @@ -6295,7 +6295,7 @@ test_read_wifi_wep_no_keys (void)
>  
>  	/* ===== WIRELESS SECURITY SETTING ===== */
>  
> -	s_wsec = NM_SETTING_WIRELESS_SECURITY (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY));
> +	s_wsec = nm_connection_get_setting_wireless_security (connection);
>  	ASSERT (s_wsec != NULL,
>  	        "wifi-wep-no-keys-verify-wireless", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_WIFI_WEP_NO_KEYS,
> @@ -6371,7 +6371,7 @@ test_read_permissions (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "permissions-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_PERMISSIONS,
> @@ -6451,13 +6451,13 @@ test_read_wifi_wep_agent_keys (void)
>  	 */
>  
>  	/* ===== WIRELESS SETTING ===== */
> -	s_wifi = (NMSettingWireless *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS);
> +	s_wifi = nm_connection_get_setting_wireless (connection);
>  	g_assert (s_wifi);
>  	tmp = nm_setting_wireless_get_security (s_wifi);
>  	g_assert (g_strcmp0 (tmp, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME) == 0);
>  
>  	/* ===== WIRELESS SECURITY SETTING ===== */
> -	s_wsec = (NMSettingWirelessSecurity *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
> +	s_wsec = nm_connection_get_setting_wireless_security (connection);
>  	g_assert (s_wsec);
>  
>  	g_assert (strcmp (nm_setting_wireless_security_get_key_mgmt (s_wsec), "none") == 0);
> @@ -6692,8 +6692,8 @@ test_write_wired_static (void)
>  	 * However after re-reading they are dropped into IPv4 setting.
>  	 * So, in order to comparison succeeded, move DNS domains back to IPv6 setting.
>  	 */
> -	reread_s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (reread, NM_TYPE_SETTING_IP4_CONFIG));
> -	reread_s_ip6 = NM_SETTING_IP6_CONFIG (nm_connection_get_setting (reread, NM_TYPE_SETTING_IP6_CONFIG));
> +	reread_s_ip4 = nm_connection_get_setting_ip4_config (reread);
> +	reread_s_ip6 = nm_connection_get_setting_ip6_config (reread);
>  	nm_setting_ip6_config_add_dns_search (reread_s_ip6, nm_setting_ip4_config_get_dns_search (reread_s_ip4, 2));
>  	nm_setting_ip6_config_add_dns_search (reread_s_ip6, nm_setting_ip4_config_get_dns_search (reread_s_ip4, 3));
>  	nm_setting_ip4_config_remove_dns_search (reread_s_ip4, 3);
> @@ -7018,7 +7018,7 @@ test_read_write_static_routes_legacy (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "read-write-static-routes-legacy-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_READ_WRITE_STATIC_ROUTES_LEGACY,
> @@ -7041,7 +7041,7 @@ test_read_write_static_routes_legacy (void)
>  
>  	/* ===== WIRED SETTING ===== */
>  
> -	s_wired = NM_SETTING_WIRED (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED));
> +	s_wired = nm_connection_get_setting_wired (connection);
>  	ASSERT (s_wired != NULL,
>  	        "read-write-static-routes-legacy-verify-wired", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_READ_WRITE_STATIC_ROUTES_LEGACY,
> @@ -7049,7 +7049,7 @@ test_read_write_static_routes_legacy (void)
>  
>  	/* ===== IPv4 SETTING ===== */
>  
> -	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  	ASSERT (s_ip4 != NULL,
>  	        "read-write-static-routes-legacy-verify-ip4", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_READ_WRITE_STATIC_ROUTES_LEGACY,
> @@ -7628,7 +7628,7 @@ test_write_wired_8021x_tls (NMSetting8021xCKScheme scheme,
>  	 * matter what scheme was used in the original connection they will be read
>  	 * back in as paths.
>  	 */
> -	s_8021x = (NMSetting8021x *) nm_connection_get_setting (reread, NM_TYPE_SETTING_802_1X);
> +	s_8021x = nm_connection_get_setting_802_1x (reread);
>  	g_assert (s_8021x);
>  	g_assert_cmpint (nm_setting_802_1x_get_ca_cert_scheme (s_8021x), ==, NM_SETTING_802_1X_CK_SCHEME_PATH);
>  	g_assert_cmpint (nm_setting_802_1x_get_client_cert_scheme (s_8021x), ==, NM_SETTING_802_1X_CK_SCHEME_PATH);
> @@ -7657,7 +7657,7 @@ test_write_wired_8021x_tls (NMSetting8021xCKScheme scheme,
>  			 * say it's not system-owned, and therefore it should not show up
>  			 * in the re-read connection.
>  			 */
> -			s_8021x = (NMSetting8021x *) nm_connection_get_setting (connection, NM_TYPE_SETTING_802_1X);
> +			s_8021x = nm_connection_get_setting_802_1x (connection);
>  			g_object_set (s_8021x, NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD, NULL, NULL);
>  		}
>  
> @@ -10085,7 +10085,7 @@ test_write_wifi_wpa_then_open (void)
>  	g_object_unref (reread);
>  
>  	/* Now change the connection to open and recheck */
> -	s_wifi = (NMSettingWireless *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS);
> +	s_wifi = nm_connection_get_setting_wireless (connection);
>  	g_assert (s_wifi);
>  	g_object_set (s_wifi, NM_SETTING_WIRELESS_SEC, NULL, NULL);
>  	nm_connection_remove_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
> @@ -10534,7 +10534,7 @@ test_read_ibft_dhcp (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "ibft-dhcp-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_IBFT_DHCP,
> @@ -10581,7 +10581,7 @@ test_read_ibft_dhcp (void)
>  
>  	/* ===== WIRED SETTING ===== */
>  
> -	s_wired = NM_SETTING_WIRED (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED));
> +	s_wired = nm_connection_get_setting_wired (connection);
>  	ASSERT (s_wired != NULL,
>  	        "ibft-dhcp-verify-wired", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_IBFT_DHCP,
> @@ -10613,7 +10613,7 @@ test_read_ibft_dhcp (void)
>  
>  	/* ===== IPv4 SETTING ===== */
>  
> -	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  	ASSERT (s_ip4 != NULL,
>  	        "ibft-dhcp-verify-ip4", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_IBFT_DHCP,
> @@ -10679,7 +10679,7 @@ test_read_ibft_static (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "ibft-static-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_IBFT_STATIC,
> @@ -10726,7 +10726,7 @@ test_read_ibft_static (void)
>  
>  	/* ===== WIRED SETTING ===== */
>  
> -	s_wired = NM_SETTING_WIRED (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED));
> +	s_wired = nm_connection_get_setting_wired (connection);
>  	ASSERT (s_wired != NULL,
>  	        "ibft-static-verify-wired", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_IBFT_STATIC,
> @@ -10758,7 +10758,7 @@ test_read_ibft_static (void)
>  
>  	/* ===== IPv4 SETTING ===== */
>  
> -	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  	ASSERT (s_ip4 != NULL,
>  	        "ibft-static-verify-ip4", "failed to verify %s: missing %s setting",
>  	        TEST_IFCFG_IBFT_STATIC,
> diff --git a/src/settings/plugins/ifcfg-rh/writer.c b/src/settings/plugins/ifcfg-rh/writer.c
> index 068bcda..2971f01 100644
> --- a/src/settings/plugins/ifcfg-rh/writer.c
> +++ b/src/settings/plugins/ifcfg-rh/writer.c
> @@ -456,7 +456,7 @@ write_8021x_setting (NMConnection *connection,
>  	gboolean success = FALSE;
>  	GString *phase2_auth;
>  
> -	s_8021x = (NMSetting8021x *) nm_connection_get_setting (connection, NM_TYPE_SETTING_802_1X);
> +	s_8021x = nm_connection_get_setting_802_1x (connection);
>  	if (!s_8021x) {
>  		/* If wired, clear KEY_MGMT */
>  		if (wired)
> @@ -554,7 +554,7 @@ write_wireless_security_setting (NMConnection *connection,
>  	guint32 i, num;
>  	GString *str;
>  
> -	s_wsec = (NMSettingWirelessSecurity *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
> +	s_wsec = nm_connection_get_setting_wireless_security (connection);
>  	if (!s_wsec) {
>  		g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
>  		             "Missing '%s' setting", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
> @@ -761,7 +761,7 @@ write_wireless_setting (NMConnection *connection,
>  	gboolean adhoc = FALSE, hex_ssid = FALSE;
>  	const GSList *macaddr_blacklist;
>  
> -	s_wireless = (NMSettingWireless *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS);
> +	s_wireless = nm_connection_get_setting_wireless (connection);
>  	if (!s_wireless) {
>  		g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
>  		             "Missing '%s' setting", NM_SETTING_WIRELESS_SETTING_NAME);
> @@ -955,7 +955,7 @@ write_wired_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
>  	GString *str;
>  	const GSList *macaddr_blacklist;
>  
> -	s_wired = (NMSettingWired *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED);
> +	s_wired = nm_connection_get_setting_wired (connection);
>  	if (!s_wired) {
>  		g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
>  		             "Missing '%s' setting", NM_SETTING_WIRED_SETTING_NAME);
> @@ -1172,7 +1172,7 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
>  	gboolean fake_ip4 = FALSE;
>  	const char *method = NULL;
>  
> -	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)
>  		method = nm_setting_ip4_config_get_method (s_ip4);
>  
> @@ -1509,7 +1509,7 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
>  	GString *ip_str1, *ip_str2, *ip_ptr;
>  	char *route6_path;
>  
> -	s_ip6 = (NMSettingIP6Config *) nm_connection_get_setting (connection, NM_TYPE_SETTING_IP6_CONFIG);
> +	s_ip6 = nm_connection_get_setting_ip6_config (connection);
>  	if (!s_ip6) {
>  		g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
>  		             "Missing '%s' setting", NM_SETTING_IP6_CONFIG_SETTING_NAME);
> @@ -1587,7 +1587,7 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
>  	}
>  
>  	/* Write out DNS - 'DNS' key is used both for IPv4 and IPv6 */
> -	s_ip4 = (NMSettingIP4Config *) nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG);
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  	num4 = s_ip4 ? nm_setting_ip4_config_get_num_dns (s_ip4) : 0; /* from where to start with IPv6 entries */
>  	num = nm_setting_ip6_config_get_num_dns (s_ip6);
>  	for (i = 0; i < 254; i++) {
> @@ -1699,7 +1699,7 @@ write_connection (NMConnection *connection,
>  	gboolean no_8021x = FALSE;
>  	gboolean wired = FALSE;
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	if (!s_con) {
>  		g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
>  		             "Missing '%s' setting", NM_SETTING_CONNECTION_SETTING_NAME);
> @@ -1759,7 +1759,7 @@ write_connection (NMConnection *connection,
>  
>  	if (!strcmp (type, NM_SETTING_WIRED_SETTING_NAME)) {
>  		// FIXME: can't write PPPoE at this time
> -		if (nm_connection_get_setting (connection, NM_TYPE_SETTING_PPPOE)) {
> +		if (nm_connection_get_setting_pppoe (connection)) {
>  			g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
>  			             "Can't write connection type '%s'",
>  			             NM_SETTING_PPPOE_SETTING_NAME);
> @@ -1786,7 +1786,7 @@ write_connection (NMConnection *connection,
>  	if (!write_ip4_setting (connection, ifcfg, error))
>  		goto out;
>  
> -	s_ip6 = (NMSettingIP6Config *) nm_connection_get_setting (connection, NM_TYPE_SETTING_IP6_CONFIG);
> +	s_ip6 = nm_connection_get_setting_ip6_config (connection);
>  	if (s_ip6) {
>  		if (!write_ip6_setting (connection, ifcfg, error))
>  			goto out;
> diff --git a/src/settings/plugins/ifnet/connection_parser.c b/src/settings/plugins/ifnet/connection_parser.c
> index b4aaa8d..f397644 100644
> --- a/src/settings/plugins/ifnet/connection_parser.c
> +++ b/src/settings/plugins/ifnet/connection_parser.c
> @@ -69,9 +69,7 @@ update_connection_id (NMConnection *connection, const char *conn_name)
>  		idstr = g_strdup_printf ("%s (%s)", get_prefix (), conn_name);
>  	uuid_base = idstr;
>  	uuid = nm_utils_uuid_generate_from_string (uuid_base);
> -	setting =
> -	    (NMSettingConnection *) nm_connection_get_setting (connection,
> -							       NM_TYPE_SETTING_CONNECTION);
> +	setting = nm_connection_get_setting_connection (connection);
>  	g_object_set (setting, NM_SETTING_CONNECTION_ID, idstr,
>  		      NM_SETTING_CONNECTION_UUID, uuid, NULL);
>  	PLUGIN_PRINT (IFNET_PLUGIN_NAME,
> @@ -1666,9 +1664,7 @@ ifnet_update_connection_from_config_block (const char *conn_name, GError **error
>  	connection = nm_connection_new ();
>  	if (!connection)
>  		return NULL;
> -	setting =
> -	    (NMSettingConnection *) nm_connection_get_setting (connection,
> -							       NM_TYPE_SETTING_CONNECTION);
> +	setting = nm_connection_get_setting_connection (connection);
>  	if (!setting) {
>  		setting = NM_SETTING_CONNECTION (nm_setting_connection_new ());
>  		g_assert (setting);
> @@ -2021,10 +2017,7 @@ write_8021x_setting (NMConnection *connection,
>  	GString *phase2_auth;
>  	GString *phase1;
>  
> -	s_8021x =
> -	    (NMSetting8021x *) nm_connection_get_setting (connection,
> -							  NM_TYPE_SETTING_802_1X);
> -
> +	s_8021x = nm_connection_get_setting_802_1x (connection);
>  	if (!s_8021x) {
>  		return TRUE;
>  	}
> @@ -2119,9 +2112,7 @@ write_wireless_security_setting (NMConnection * connection,
>  	guint32 i, num;
>  	GString *str;
>  
> -	s_wsec =
> -	    (NMSettingWirelessSecurity *) nm_connection_get_setting (connection,
> -								     NM_TYPE_SETTING_WIRELESS_SECURITY);
> +	s_wsec = nm_connection_get_setting_wireless_security (connection);
>  	if (!s_wsec) {
>  		g_set_error (error, ifnet_plugin_error_quark (), 0,
>  			     "Missing '%s' setting",
> @@ -2287,7 +2278,7 @@ write_wireless_setting (NMConnection *connection,
>  	gboolean adhoc = FALSE, hex_ssid = FALSE;
>  	gchar *ssid_str, *tmp;
>  
> -	s_wireless = (NMSettingWireless *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS);
> +	s_wireless = nm_connection_get_setting_wireless (connection);
>  	if (!s_wireless) {
>  		g_set_error (error, ifnet_plugin_error_quark (), 0,
>  			     "Missing '%s' setting",
> @@ -2406,9 +2397,7 @@ write_wired_setting (NMConnection *connection,
>  	char *tmp;
>  	guint32 mtu;
>  
> -	s_wired =
> -	    (NMSettingWired *) nm_connection_get_setting (connection,
> -							  NM_TYPE_SETTING_WIRED);
> +	s_wired = nm_connection_get_setting_wired (connection);
>  	if (!s_wired) {
>  		g_set_error (error, ifnet_plugin_error_quark (), 0,
>  			     "Missing '%s' setting",
> @@ -2462,9 +2451,7 @@ write_ip4_setting (NMConnection *connection, const char *conn_name, GError **err
>  	gboolean has_def_route = FALSE;
>  	gboolean success = FALSE;
>  
> -	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) {
>  		g_set_error (error, ifnet_plugin_error_quark (), 0,
>  			     "Missing '%s' setting",
> @@ -2668,9 +2655,7 @@ write_ip6_setting (NMConnection *connection, const char *conn_name, GError **err
>  	NMIP6Address *addr;
>  	const struct in6_addr *ip;
>  
> -	s_ip6 =
> -	    (NMSettingIP6Config *) nm_connection_get_setting (connection,
> -							      NM_TYPE_SETTING_IP6_CONFIG);
> +	s_ip6 = nm_connection_get_setting_ip6_config (connection);
>  	if (!s_ip6) {
>  		g_set_error (error, ifnet_plugin_error_quark (), 0,
>  			     "Missing '%s' setting",
> @@ -2856,7 +2841,7 @@ ifnet_update_parsers_by_connection (NMConnection *connection,
>  		NMSettingPPPOE *s_pppoe;
>  
>  		/* Writing pppoe setting */
> -		s_pppoe = NM_SETTING_PPPOE (nm_connection_get_setting (connection, NM_TYPE_SETTING_PPPOE));
> +		s_pppoe = nm_connection_get_setting_pppoe (connection);
>  		if (!write_pppoe_setting (conn_name, s_pppoe))
>  			goto out;
>  		pppoe = TRUE;
> @@ -2884,7 +2869,7 @@ ifnet_update_parsers_by_connection (NMConnection *connection,
>  	if (!write_ip4_setting (connection, conn_name, error))
>  		goto out;
>  
> -	s_ip6 = (NMSettingIP6Config *) nm_connection_get_setting (connection, NM_TYPE_SETTING_IP6_CONFIG);
> +	s_ip6 = nm_connection_get_setting_ip6_config (connection);
>  	if (s_ip6) {
>  		/* IPv6 Setting */
>  		if (!write_ip6_setting (connection, conn_name, error))
> @@ -2972,9 +2957,7 @@ get_wireless_name (NMConnection * connection)
>  	char buf[33];
>  	int i = 0;
>  
> -	s_wireless =
> -	    (NMSettingWireless *) nm_connection_get_setting (connection,
> -							     NM_TYPE_SETTING_WIRELESS);
> +	s_wireless = nm_connection_get_setting_wireless (connection);
>  	if (!s_wireless)
>  		return NULL;
>  
> @@ -3020,7 +3003,7 @@ ifnet_add_new_connection (NMConnection *connection,
>  	const char *type;
>  	gchar *new_type, *new_name = NULL;
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	g_assert (s_con);
>  	type = nm_setting_connection_get_connection_type (s_con);
>  	g_assert (type);
> diff --git a/src/settings/plugins/ifnet/plugin.c b/src/settings/plugins/ifnet/plugin.c
> index 5908368..8fee9c2 100644
> --- a/src/settings/plugins/ifnet/plugin.c
> +++ b/src/settings/plugins/ifnet/plugin.c
> @@ -188,8 +188,7 @@ commit_cb (NMSettingsConnection *connection, GError *error, gpointer unused)
>  	} else {
>  		NMSettingConnection *s_con;
>  
> -		s_con = (NMSettingConnection *) nm_connection_get_setting (NM_CONNECTION (connection),
> -		                                                           NM_TYPE_SETTING_CONNECTION);
> +		s_con = nm_connection_get_setting_connection (NM_CONNECTION (connection));
>  		g_assert (s_con);
>  		PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Connection %s updated",
>  		              nm_setting_connection_get_id (s_con));
> diff --git a/src/settings/plugins/ifupdown/parser.c b/src/settings/plugins/ifupdown/parser.c
> index dc2f8ab..accf62c 100644
> --- a/src/settings/plugins/ifupdown/parser.c
> +++ b/src/settings/plugins/ifupdown/parser.c
> @@ -311,8 +311,7 @@ update_wireless_security_setting_from_if_block(NMConnection *connection,
>  		return;
>  	}
>  
> -	s_wireless = NM_SETTING_WIRELESS(nm_connection_get_setting(connection,
> -												    NM_TYPE_SETTING_WIRELESS));
> +	s_wireless = nm_connection_get_setting_wireless(connection);
>  	g_return_if_fail(s_wireless);
>  
>  	PLUGIN_PRINT ("SCPlugin-Ifupdown","update wireless security settings (%s).", block->name);
> @@ -537,7 +536,7 @@ ifupdown_update_connection_from_if_block (NMConnection *connection,
>  	NMSettingConnection *s_con;
>  	gboolean success = FALSE;
>  
> -	s_con = (NMSettingConnection *) nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION);
> +	s_con = nm_connection_get_setting_connection (connection);
>  	if(!s_con) {
>  		s_con = NM_SETTING_CONNECTION (nm_setting_connection_new());
>  		g_assert (s_con);
> diff --git a/src/settings/plugins/ifupdown/plugin.c b/src/settings/plugins/ifupdown/plugin.c
> index 9679ede..08e3e2f 100644
> --- a/src/settings/plugins/ifupdown/plugin.c
> +++ b/src/settings/plugins/ifupdown/plugin.c
> @@ -190,8 +190,8 @@ bind_device_to_connection (SCPluginIfupdown *self,
>                             NMIfupdownConnection *exported)
>  {
>  	GByteArray *mac_address;
> -	NMSetting *s_wired = NULL;
> -	NMSetting *s_wifi = NULL;
> +	NMSettingWired *s_wired;
> +	NMSettingWireless *s_wifi;
>  	const char *iface, *address;
>  	struct ether_addr *tmp_mac;
>  
> @@ -217,8 +217,8 @@ bind_device_to_connection (SCPluginIfupdown *self,
>  	mac_address = g_byte_array_sized_new (ETH_ALEN);
>  	g_byte_array_append (mac_address, &(tmp_mac->ether_addr_octet[0]), ETH_ALEN);
>  
> -	s_wired = nm_connection_get_setting (NM_CONNECTION (exported), NM_TYPE_SETTING_WIRED);
> -	s_wifi = nm_connection_get_setting (NM_CONNECTION (exported), NM_TYPE_SETTING_WIRELESS);
> +	s_wired = nm_connection_get_setting_wired (NM_CONNECTION (exported));
> +	s_wifi = nm_connection_get_setting_wireless (NM_CONNECTION (exported));
>  	if (s_wired) {
>  		PLUGIN_PRINT ("SCPluginIfupdown", "locking wired connection setting");
>  		g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, mac_address, NULL);
> @@ -432,13 +432,13 @@ SCPluginIfupdown_init (NMSystemConfigInterface *config)
>  	keys = g_hash_table_get_keys (priv->iface_connections);
>  	for (iter = keys; iter; iter = g_list_next (iter)) {
>  		NMIfupdownConnection *exported;
> -		NMSetting *setting;
> +		NMSettingConnection *setting;
>  
>  		if (!g_hash_table_lookup (auto_ifaces, iter->data))
>  			continue;
>  
>  		exported = g_hash_table_lookup (priv->iface_connections, iter->data);
> -		setting = NM_SETTING (nm_connection_get_setting (NM_CONNECTION (exported), NM_TYPE_SETTING_CONNECTION));
> +		setting = nm_connection_get_setting_connection (NM_CONNECTION (exported));
>  		g_object_set (setting, NM_SETTING_CONNECTION_AUTOCONNECT, TRUE, NULL);
>  
>  		nm_settings_connection_commit_changes (NM_SETTINGS_CONNECTION (exported), ignore_cb, NULL);
> diff --git a/src/settings/plugins/keyfile/reader.c b/src/settings/plugins/keyfile/reader.c
> index 4128b9f..c9eed3b 100644
> --- a/src/settings/plugins/keyfile/reader.c
> +++ b/src/settings/plugins/keyfile/reader.c
> @@ -1300,7 +1300,7 @@ nm_keyfile_plugin_connection_from_file (const char *filename, GError **error)
>  	 * the keyfile didn't include it, which can happen when the base
>  	 * device type setting is all default values (like ethernet).
>  	 */
> -	s_con = (NMSettingConnection *) nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION);
> +	s_con = nm_connection_get_setting_connection (connection);
>  	if (s_con) {
>  		ctype = nm_setting_connection_get_connection_type (s_con);
>  		setting = nm_connection_get_setting_by_name (connection, ctype);
> @@ -1314,7 +1314,7 @@ nm_keyfile_plugin_connection_from_file (const char *filename, GError **error)
>  	if (vpn_secrets) {
>  		NMSettingVPN *s_vpn;
>  
> -		s_vpn = (NMSettingVPN *) nm_connection_get_setting (connection, NM_TYPE_SETTING_VPN);
> +		s_vpn = nm_connection_get_setting_vpn (connection);
>  		if (s_vpn)
>  			read_vpn_secrets (key_file, s_vpn);
>  	}
> diff --git a/src/settings/plugins/keyfile/tests/test-keyfile.c b/src/settings/plugins/keyfile/tests/test-keyfile.c
> index 2859cb3..5c9ced7 100644
> --- a/src/settings/plugins/keyfile/tests/test-keyfile.c
> +++ b/src/settings/plugins/keyfile/tests/test-keyfile.c
> @@ -93,7 +93,7 @@ test_read_valid_wired_connection (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "connection-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_WIRED_FILE,
> @@ -142,7 +142,7 @@ test_read_valid_wired_connection (void)
>  
>  	/* ===== WIRED SETTING ===== */
>  
> -	s_wired = NM_SETTING_WIRED (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED));
> +	s_wired = nm_connection_get_setting_wired (connection);
>  	ASSERT (s_wired != NULL,
>  	        "connection-verify-wired", "failed to verify %s: missing %s setting",
>  	        TEST_WIRED_FILE,
> @@ -174,7 +174,7 @@ test_read_valid_wired_connection (void)
>  
>  	/* ===== IPv4 SETTING ===== */
>  
> -	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  	ASSERT (s_ip4 != NULL,
>  	        "connection-verify-ip4", "failed to verify %s: missing %s setting",
>  	        TEST_WIRED_FILE,
> @@ -297,7 +297,7 @@ test_read_valid_wired_connection (void)
>  
>  	/* ===== IPv6 SETTING ===== */
>  
> -	s_ip6 = NM_SETTING_IP6_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP6_CONFIG));
> +	s_ip6 = nm_connection_get_setting_ip6_config (connection);
>  	ASSERT (s_ip6 != NULL,
>  	        "connection-verify-ip6", "failed to verify %s: missing %s setting",
>  	        TEST_WIRED_FILE,
> @@ -745,7 +745,7 @@ test_read_ip6_wired_connection (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "connection-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_WIRED_IP6_FILE,
> @@ -779,7 +779,7 @@ test_read_ip6_wired_connection (void)
>  
>  	/* ===== WIRED SETTING ===== */
>  
> -	s_wired = NM_SETTING_WIRED (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED));
> +	s_wired = nm_connection_get_setting_wired (connection);
>  	ASSERT (s_wired != NULL,
>  	        "connection-verify-wired", "failed to verify %s: missing %s setting",
>  	        TEST_WIRED_IP6_FILE,
> @@ -787,7 +787,7 @@ test_read_ip6_wired_connection (void)
>  
>  	/* ===== IPv4 SETTING ===== */
>  
> -	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  	ASSERT (s_ip4 != NULL,
>  	        "connection-verify-ip4", "failed to verify %s: missing %s setting",
>  	        TEST_WIRED_IP6_FILE,
> @@ -809,7 +809,7 @@ test_read_ip6_wired_connection (void)
>  
>  	/* ===== IPv6 SETTING ===== */
>  
> -	s_ip6 = NM_SETTING_IP6_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP6_CONFIG));
> +	s_ip6 = nm_connection_get_setting_ip6_config (connection);
>  	ASSERT (s_ip6 != NULL,
>  	        "connection-verify-ip6", "failed to verify %s: missing %s setting",
>  	        TEST_WIRED_IP6_FILE,
> @@ -1001,7 +1001,7 @@ test_read_wired_mac_case (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "connection-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_WIRED_MAC_CASE_FILE,
> @@ -1035,7 +1035,7 @@ test_read_wired_mac_case (void)
>  
>  	/* ===== WIRED SETTING ===== */
>  
> -	s_wired = NM_SETTING_WIRED (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED));
> +	s_wired = nm_connection_get_setting_wired (connection);
>  	ASSERT (s_wired != NULL,
>  	        "connection-verify-wired", "failed to verify %s: missing %s setting",
>  	        TEST_WIRED_MAC_CASE_FILE,
> @@ -1087,7 +1087,7 @@ test_read_valid_wireless_connection (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "connection-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_WIRELESS_FILE,
> @@ -1136,7 +1136,7 @@ test_read_valid_wireless_connection (void)
>  
>  	/* ===== WIRED SETTING ===== */
>  
> -	s_wireless = NM_SETTING_WIRELESS (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS));
> +	s_wireless = nm_connection_get_setting_wireless (connection);
>  	ASSERT (s_wireless != NULL,
>  	        "connection-verify-wireless", "failed to verify %s: missing %s setting",
>  	        TEST_WIRELESS_FILE,
> @@ -1162,7 +1162,7 @@ test_read_valid_wireless_connection (void)
>  
>  	/* ===== IPv4 SETTING ===== */
>  
> -	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
> +	s_ip4 = nm_connection_get_setting_ip4_config (connection);
>  	ASSERT (s_ip4 != NULL,
>  	        "connection-verify-ip4", "failed to verify %s: missing %s setting",
>  	        TEST_WIRELESS_FILE,
> @@ -1315,7 +1315,7 @@ test_read_string_ssid (void)
>  
>  	/* ===== WIRELESS SETTING ===== */
>  
> -	s_wireless = NM_SETTING_WIRELESS (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS));
> +	s_wireless = nm_connection_get_setting_wireless (connection);
>  	ASSERT (s_wireless != NULL,
>  	        "connection-verify-wireless", "failed to verify %s: missing %s setting",
>  	        TEST_STRING_SSID_FILE,
> @@ -1832,7 +1832,7 @@ test_read_bt_dun_connection (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "connection-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_BT_DUN_FILE,
> @@ -1866,7 +1866,7 @@ test_read_bt_dun_connection (void)
>  
>  	/* ===== BLUETOOTH SETTING ===== */
>  
> -	s_bluetooth = NM_SETTING_BLUETOOTH (nm_connection_get_setting (connection, NM_TYPE_SETTING_BLUETOOTH));
> +	s_bluetooth = nm_connection_get_setting_bluetooth (connection);
>  	ASSERT (s_bluetooth != NULL,
>  	        "connection-verify-bt", "failed to verify %s: missing %s setting",
>  	        TEST_WIRELESS_FILE,
> @@ -1905,7 +1905,7 @@ test_read_bt_dun_connection (void)
>  
>  	/* ===== GSM SETTING ===== */
>  
> -	s_gsm = NM_SETTING_GSM (nm_connection_get_setting (connection, NM_TYPE_SETTING_GSM));
> +	s_gsm = nm_connection_get_setting_gsm (connection);
>  	ASSERT (s_gsm != NULL,
>  	        "connection-verify-gsm", "failed to verify %s: missing %s setting",
>  	        TEST_BT_DUN_FILE,
> @@ -2081,7 +2081,7 @@ test_read_gsm_connection (void)
>  	NMSettingConnection *s_con;
>  	NMSettingSerial *s_serial;
>  	NMSettingGsm *s_gsm;
> -	NMSetting *s_bluetooth;
> +	NMSettingBluetooth *s_bluetooth;
>  	GError *error = NULL;
>  	const char *tmp;
>  	const char *expected_id = "AT&T Data Connect";
> @@ -2100,7 +2100,7 @@ test_read_gsm_connection (void)
>  
>  	/* ===== CONNECTION SETTING ===== */
>  
> -	s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
> +	s_con = nm_connection_get_setting_connection (connection);
>  	ASSERT (s_con != NULL,
>  	        "connection-verify-connection", "failed to verify %s: missing %s setting",
>  	        TEST_GSM_FILE,
> @@ -2134,7 +2134,7 @@ test_read_gsm_connection (void)
>  	/* ===== BLUETOOTH SETTING ===== */
>  
>  	/* Plain GSM, so no BT setting expected */
> -	s_bluetooth = nm_connection_get_setting (connection, NM_TYPE_SETTING_BLUETOOTH);
> +	s_bluetooth = nm_connection_get_setting_bluetooth (connection);
>  	ASSERT (s_bluetooth == NULL,
>  	        "connection-verify-bt", "unexpected %s setting",
>  	        TEST_GSM_FILE,
> @@ -2142,7 +2142,7 @@ test_read_gsm_connection (void)
>  
>  	/* ===== GSM SETTING ===== */
>  
> -	s_gsm = NM_SETTING_GSM (nm_connection_get_setting (connection, NM_TYPE_SETTING_GSM));
> +	s_gsm = nm_connection_get_setting_gsm (connection);
>  	ASSERT (s_gsm != NULL,
>  	        "connection-verify-gsm", "failed to verify %s: missing %s setting",
>  	        TEST_GSM_FILE,
> @@ -2324,7 +2324,7 @@ static void
>  test_read_wired_8021x_tls_blob_connection (void)
>  {
>  	NMConnection *connection;
> -	NMSetting *s_wired;
> +	NMSettingWired *s_wired;
>  	NMSetting8021x *s_8021x;
>  	GError *error = NULL;
>  	const char *tmp;
> @@ -2346,11 +2346,11 @@ test_read_wired_8021x_tls_blob_connection (void)
>  	}
>  
>  	/* ===== Wired Setting ===== */
> -	s_wired = nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED);
> +	s_wired = nm_connection_get_setting_wired (connection);
>  	g_assert (s_wired != NULL);
>  
>  	/* ===== 802.1x Setting ===== */
> -	s_8021x = (NMSetting8021x *) nm_connection_get_setting (connection, NM_TYPE_SETTING_802_1X);
> +	s_8021x = nm_connection_get_setting_802_1x (connection);
>  	g_assert (s_8021x != NULL);
>  
>  	g_assert (nm_setting_802_1x_get_num_eap_methods (s_8021x) == 1);
> @@ -2389,7 +2389,7 @@ static void
>  test_read_wired_8021x_tls_bad_path_connection (void)
>  {
>  	NMConnection *connection;
> -	NMSetting *s_wired;
> +	NMSettingWired *s_wired;
>  	NMSetting8021x *s_8021x;
>  	GError *error = NULL;
>  	const char *tmp;
> @@ -2411,11 +2411,11 @@ test_read_wired_8021x_tls_bad_path_connection (void)
>  	}
>  
>  	/* ===== Wired Setting ===== */
> -	s_wired = nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED);
> +	s_wired = nm_connection_get_setting_wired (connection);
>  	g_assert (s_wired != NULL);
>  
>  	/* ===== 802.1x Setting ===== */
> -	s_8021x = (NMSetting8021x *) nm_connection_get_setting (connection, NM_TYPE_SETTING_802_1X);
> +	s_8021x = nm_connection_get_setting_802_1x (connection);
>  	g_assert (s_8021x != NULL);
>  
>  	g_assert (nm_setting_802_1x_get_num_eap_methods (s_8021x) == 1);
> @@ -2451,7 +2451,7 @@ static void
>  test_read_wired_8021x_tls_old_connection (void)
>  {
>  	NMConnection *connection;
> -	NMSetting *s_wired;
> +	NMSettingWired *s_wired;
>  	NMSetting8021x *s_8021x;
>  	GError *error = NULL;
>  	const char *tmp;
> @@ -2472,11 +2472,11 @@ test_read_wired_8021x_tls_old_connection (void)
>  	}
>  
>  	/* ===== Wired Setting ===== */
> -	s_wired = nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED);
> +	s_wired = nm_connection_get_setting_wired (connection);
>  	g_assert (s_wired != NULL);
>  
>  	/* ===== 802.1x Setting ===== */
> -	s_8021x = (NMSetting8021x *) nm_connection_get_setting (connection, NM_TYPE_SETTING_802_1X);
> +	s_8021x = nm_connection_get_setting_802_1x (connection);
>  	g_assert (s_8021x != NULL);
>  
>  	g_assert (nm_setting_802_1x_get_num_eap_methods (s_8021x) == 1);
> @@ -2507,7 +2507,7 @@ static void
>  test_read_wired_8021x_tls_new_connection (void)
>  {
>  	NMConnection *connection;
> -	NMSetting *s_wired;
> +	NMSettingWired *s_wired;
>  	NMSetting8021x *s_8021x;
>  	GError *error = NULL;
>  	const char *tmp;
> @@ -2529,11 +2529,11 @@ test_read_wired_8021x_tls_new_connection (void)
>  	}
>  
>  	/* ===== Wired Setting ===== */
> -	s_wired = nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED);
> +	s_wired = nm_connection_get_setting_wired (connection);
>  	g_assert (s_wired != NULL);
>  
>  	/* ===== 802.1x Setting ===== */
> -	s_8021x = (NMSetting8021x *) nm_connection_get_setting (connection, NM_TYPE_SETTING_802_1X);
> +	s_8021x = nm_connection_get_setting_802_1x (connection);
>  	g_assert (s_8021x != NULL);
>  
>  	g_assert (nm_setting_802_1x_get_num_eap_methods (s_8021x) == 1);
> @@ -2779,7 +2779,7 @@ test_write_wired_8021x_tls_connection_blob (void)
>  	g_assert (testfile);
>  
>  	/* Check that the new certs got written out */
> -	s_con = (NMSettingConnection *) nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION);
> +	s_con = nm_connection_get_setting_connection (connection);
>  	g_assert (s_con);
>  	uuid = nm_setting_connection_get_uuid (s_con);
>  	g_assert (uuid);
> @@ -2805,7 +2805,7 @@ test_write_wired_8021x_tls_connection_blob (void)
>  	}
>  
>  	/* Ensure the re-read connection's certificates use the path scheme */
> -	s_8021x = (NMSetting8021x *) nm_connection_get_setting (reread, NM_TYPE_SETTING_802_1X);
> +	s_8021x = nm_connection_get_setting_802_1x (reread);
>  	g_assert (s_8021x);
>  	g_assert (nm_setting_802_1x_get_ca_cert_scheme (s_8021x) == NM_SETTING_802_1X_CK_SCHEME_PATH);
>  	g_assert (nm_setting_802_1x_get_client_cert_scheme (s_8021x) == NM_SETTING_802_1X_CK_SCHEME_PATH);
> diff --git a/src/tests/test-wifi-ap-utils.c b/src/tests/test-wifi-ap-utils.c
> index 93bd325..faa023f 100644
> --- a/src/tests/test-wifi-ap-utils.c
> +++ b/src/tests/test-wifi-ap-utils.c
> @@ -162,7 +162,7 @@ fill_wifi_empty (NMConnection *connection)
>  {
>  	NMSettingWireless *s_wifi;
>  
> -	s_wifi = (NMSettingWireless *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS);
> +	s_wifi = nm_connection_get_setting_wireless (connection);
>  	if (!s_wifi) {
>  		s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
>  		nm_connection_add_setting (connection, NM_SETTING (s_wifi));
> @@ -175,7 +175,7 @@ fill_wifi (NMConnection *connection, const KeyData items[])
>  {
>  	NMSettingWireless *s_wifi;
>  
> -	s_wifi = (NMSettingWireless *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS);
> +	s_wifi = nm_connection_get_setting_wireless (connection);
>  	if (!s_wifi) {
>  		s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
>  		nm_connection_add_setting (connection, NM_SETTING (s_wifi));
> @@ -190,7 +190,7 @@ fill_wsec (NMConnection *connection, const KeyData items[])
>  {
>  	NMSettingWirelessSecurity *s_wsec;
>  
> -	s_wsec = (NMSettingWirelessSecurity *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
> +	s_wsec = nm_connection_get_setting_wireless_security (connection);
>  	if (!s_wsec) {
>  		s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
>  		nm_connection_add_setting (connection, NM_SETTING (s_wsec));
> @@ -205,7 +205,7 @@ fill_8021x (NMConnection *connection, const KeyData items[])
>  {
>  	NMSetting8021x *s_8021x;
>  
> -	s_8021x = (NMSetting8021x *) nm_connection_get_setting (connection, NM_TYPE_SETTING_802_1X);
> +	s_8021x = nm_connection_get_setting_802_1x (connection);
>  	if (!s_8021x) {
>  		s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
>  		nm_connection_add_setting (connection, NM_SETTING (s_8021x));
> diff --git a/src/vpn-manager/nm-vpn-connection.c b/src/vpn-manager/nm-vpn-connection.c
> index 4f1e0ab..17e28bb 100644
> --- a/src/vpn-manager/nm-vpn-connection.c
> +++ b/src/vpn-manager/nm-vpn-connection.c
> @@ -259,10 +259,10 @@ static const char *
>  nm_vpn_connection_get_service (NMVPNConnection *connection)
>  {
>  	NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
> -	NMSettingVPN *setting;
> +	NMSettingVPN *s_vpn;
>  
> -	setting = (NMSettingVPN *) nm_connection_get_setting (priv->connection, NM_TYPE_SETTING_VPN);
> -	return nm_setting_vpn_get_service_type (setting);
> +	s_vpn = nm_connection_get_setting_vpn (priv->connection);
> +	return nm_setting_vpn_get_service_type (s_vpn);
>  }
>  
>  static void
> @@ -536,7 +536,7 @@ nm_vpn_connection_ip4_config_get (DBusGProxy *proxy,
>  	print_vpn_config (config, priv->ip4_internal_gw, priv->ip_iface, priv->banner);
>  
>  	/* Merge in user overrides from the NMConnection's IPv4 setting */
> -	s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (priv->connection, NM_TYPE_SETTING_IP4_CONFIG));
> +	s_ip4 = nm_connection_get_setting_ip4_config (priv->connection);
>  	nm_utils_merge_ip4_config (config, s_ip4);
>  
>  	nm_system_iface_set_up (priv->ip_ifindex, TRUE, NULL);
> @@ -623,22 +623,22 @@ static GHashTable *
>  _hash_with_username (NMConnection *connection, const char *username)
>  {
>  	NMConnection *dup;
> -	NMSetting *s_vpn;
> +	NMSettingVPN *s_vpn;
>  	GHashTable *hash;
>  	const char *existing;
>  
>  	/* Shortcut if we weren't given a username or if there already was one in
>  	 * the VPN setting; don't bother duplicating the connection and everything.
>  	 */
> -	s_vpn = nm_connection_get_setting (connection, NM_TYPE_SETTING_VPN);
> +	s_vpn = nm_connection_get_setting_vpn (connection);
>  	g_assert (s_vpn);
> -	existing = nm_setting_vpn_get_user_name (NM_SETTING_VPN (s_vpn));
> +	existing = nm_setting_vpn_get_user_name (s_vpn);
>  	if (username == NULL || existing)
>  		return nm_connection_to_hash (connection, NM_SETTING_HASH_FLAG_ALL);
>  
>  	dup = nm_connection_duplicate (connection);
>  	g_assert (dup);
> -	s_vpn = nm_connection_get_setting (dup, NM_TYPE_SETTING_VPN);
> +	s_vpn = nm_connection_get_setting_vpn (dup);
>  	g_assert (s_vpn);
>  	g_object_set (s_vpn, NM_SETTING_VPN_USER_NAME, username, NULL);
>  	hash = nm_connection_to_hash (dup, NM_SETTING_HASH_FLAG_ALL);
> @@ -725,14 +725,14 @@ const char *
>  nm_vpn_connection_get_name (NMVPNConnection *connection)
>  {
>  	NMVPNConnectionPrivate *priv;
> -	NMSettingConnection *setting;
> +	NMSettingConnection *s_con;
>  
>  	g_return_val_if_fail (NM_IS_VPN_CONNECTION (connection), NULL);
>  
>  	priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
> -	setting = (NMSettingConnection *) nm_connection_get_setting (priv->connection, NM_TYPE_SETTING_CONNECTION);
> +	s_con = nm_connection_get_setting_connection (priv->connection);
>  
> -	return nm_setting_connection_get_id (setting);
> +	return nm_setting_connection_get_id (s_con);
>  }
>  
>  NMConnection *
> diff --git a/src/vpn-manager/nm-vpn-manager.c b/src/vpn-manager/nm-vpn-manager.c
> index 41e96c0..c359a39 100644
> --- a/src/vpn-manager/nm-vpn-manager.c
> +++ b/src/vpn-manager/nm-vpn-manager.c
> @@ -185,7 +185,7 @@ nm_vpn_manager_activate_connection (NMVPNManager *manager,
>  		return NULL;
>  	}
>  
> -	vpn_setting = (NMSettingVPN *) nm_connection_get_setting (connection, NM_TYPE_SETTING_VPN);
> +	vpn_setting = nm_connection_get_setting_vpn (connection);
>  	if (!vpn_setting) {
>  		g_set_error (error,
>  		             NM_VPN_MANAGER_ERROR, NM_VPN_MANAGER_ERROR_CONNECTION_INVALID,
> diff --git a/src/wimax/nm-wimax-nsp.c b/src/wimax/nm-wimax-nsp.c
> index b10cee3..491cb5d 100644
> --- a/src/wimax/nm-wimax-nsp.c
> +++ b/src/wimax/nm-wimax-nsp.c
> @@ -118,7 +118,7 @@ nm_wimax_nsp_check_compatible (NMWimaxNsp *self,
>  
>  	priv = GET_PRIVATE (self);
>  
> -	s_wimax = NM_SETTING_WIMAX (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIMAX));
> +	s_wimax = nm_connection_get_setting_wimax (connection);
>  	if (!s_wimax)
>  		return FALSE;
>  
> diff --git a/test/nm-tool.c b/test/nm-tool.c
> index 9ce44f8..d8c75ce 100644
> --- a/test/nm-tool.c
> +++ b/test/nm-tool.c
> @@ -627,7 +627,7 @@ detail_vpn (gpointer data, gpointer user_data)
>  	connection = get_connection_for_active (active);
>  	g_return_if_fail (connection != NULL);
>  
> -	s_con = (NMSettingConnection *) nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION);
> +	s_con = nm_connection_get_setting_connection (connection);
>  	g_return_if_fail (s_con != NULL);
>  
>  	print_header ("VPN", NULL, nm_setting_connection_get_id (s_con));




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]