Index: network-manager-0.9.4.0/src/NetworkManagerUtils.c
===================================================================
--- network-manager-0.9.4.0.orig/src/NetworkManagerUtils.c	2013-08-05 09:43:35.838125549 +0200
+++ network-manager-0.9.4.0/src/NetworkManagerUtils.c	2013-08-05 09:44:58.670260860 +0200
@@ -544,7 +544,7 @@
 			               device_ip6_props,
 			               device_dhcp4_props,
 			               device_dhcp6_props);
-		if (vpn_iface)
+/*		if (vpn_iface)*/
 			fill_vpn_props (vpn_ip4_config, NULL, vpn_ip4_props, vpn_ip6_props);
 	}
 
Index: network-manager-0.9.4.0/src/nm-policy.c
===================================================================
--- network-manager-0.9.4.0.orig/src/nm-policy.c	2013-08-05 09:43:35.838125549 +0200
+++ network-manager-0.9.4.0/src/nm-policy.c	2013-08-05 09:44:58.670260860 +0200
@@ -482,14 +482,18 @@
 			NMIP4Config *parent_ip4;
 			NMDevice *parent;
 
+			parent = nm_vpn_connection_get_parent_device (candidate);
+			parent_ip4 = nm_device_get_ip4_config (parent);
+
 			ip_iface = nm_vpn_connection_get_ip_iface (candidate);
+			if (!ip_iface || g_strcmp0 (ip_iface, "none") == 0)
+				ip_iface = nm_device_get_ip_iface (parent);
 			ip_ifindex = nm_vpn_connection_get_ip_ifindex (candidate);
+			if (ip_ifindex <= 0)
+				ip_ifindex = nm_device_get_ifindex (parent);
 			connection = nm_vpn_connection_get_connection (candidate);
 			addr = nm_ip4_config_get_address (ip4_config, 0);
 
-			parent = nm_vpn_connection_get_parent_device (candidate);
-			parent_ip4 = nm_device_get_ip4_config (parent);
-
 			nm_system_replace_default_ip4_route_vpn (ip_ifindex,
 			                                         nm_ip4_address_get_gateway (addr),
 			                                         nm_vpn_connection_get_ip4_internal_gateway (candidate),
Index: network-manager-0.9.4.0/src/vpn-manager/nm-vpn-connection.c
===================================================================
--- network-manager-0.9.4.0.orig/src/vpn-manager/nm-vpn-connection.c	2013-08-05 09:43:35.838125549 +0200
+++ network-manager-0.9.4.0/src/vpn-manager/nm-vpn-connection.c	2013-08-05 09:46:16.614388950 +0200
@@ -470,17 +470,22 @@
 	config = nm_ip4_config_new ();
 
 	val = (GValue *) g_hash_table_lookup (config_hash, NM_VPN_PLUGIN_IP4_CONFIG_TUNDEV);
-	if (val)
-		priv->ip_iface = g_strdup (g_value_get_string (val));
-	else {
-		nm_log_err (LOGD_VPN, "invalid or missing tunnel device received!");
-		goto error;
-	}
+	if (val) {
+		const char *iface = g_value_get_string (val);
 
-	/* Grab the interface index for address/routing operations */
-	priv->ip_ifindex = nm_netlink_iface_to_index (priv->ip_iface);
-	if (priv->ip_ifindex <= 0) {
-		nm_log_err (LOGD_VPN, "(%s): failed to look up VPN interface index", priv->ip_iface);
+		/* When tundev is used, translate it to interface index */
+		if (g_strcmp0 (iface, "none") != 0) {
+			/* Grab the interface index for address/routing operations */
+			priv->ip_ifindex = nm_netlink_iface_to_index (iface);
+			if (priv->ip_ifindex <= 0) {
+				nm_log_err (LOGD_VPN, "(%s): failed to look up VPN interface index", iface);
+				goto error;
+			}
+			/*priv->ip_iface = g_strdup (iface);*/
+		}
+		priv->ip_iface = g_strdup (iface);
+	} else {
+		nm_log_err (LOGD_VPN, "invalid or missing tunnel device received!");
 		goto error;
 	}
 
@@ -598,9 +603,14 @@
 	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);
+	if (priv->ip_ifindex > 0) {
+		nm_system_iface_set_up (priv->ip_ifindex, TRUE, NULL);
+
+		if (!nm_system_apply_ip4_config (priv->ip_ifindex, config, 0, NM_IP4_COMPARE_FLAG_ALL))
+			goto error;
+	}
 
-	if (nm_system_apply_ip4_config (priv->ip_ifindex, config, 0, NM_IP4_COMPARE_FLAG_ALL)) {
+	{
 		NMDnsManager *dns_mgr;
 
 		/* Add any explicit route to the VPN gateway through the parent device */
