diff -Nbwru old/include/NetworkManagerVPN.h new/include/NetworkManagerVPN.h
--- old/include/NetworkManagerVPN.h	2008-08-18 14:21:06.000000000 +0200
+++ new/include/NetworkManagerVPN.h	2008-08-24 16:37:06.000000000 +0200
@@ -117,5 +117,6 @@
 #define NM_VPN_PLUGIN_IP4_CONFIG_DOMAIN  "domain"
 #define NM_VPN_PLUGIN_IP4_CONFIG_BANNER  "banner"
 #define NM_VPN_PLUGIN_IP4_CONFIG_ROUTES  "routes"
+#define NM_VPN_PLUGIN_IP4_CONFIG_ROUTE_VPN_GATEWAY  "route_vpn_gateway"
 
 #endif /* NETWORK_MANAGER_VPN_H */
diff -Nbwru old/src/NetworkManagerSystem.c new/src/NetworkManagerSystem.c
--- old/src/NetworkManagerSystem.c	2008-08-18 14:21:06.000000000 +0200
+++ new/src/NetworkManagerSystem.c	2008-08-24 16:38:40.000000000 +0200
@@ -372,6 +372,14 @@
 	for (i = 0; i < num; i++) {
 		const NMSettingIP4Route *route = nm_ip4_config_get_route (config, i);
 
+    /* if the address and prefix are zero, we have to treat it specially
+       as a default route in order to not end up with more than one */
+    if (route->address == 0 && route->prefix == 0)
+    {
+      nm_system_device_replace_default_ip4_route(iface, route->next_hop, nm_ip4_config_get_mss (config));
+    }
+    else
+    {
 		nm_system_device_set_ip4_route (iface, config,
 								  route->address,
 								  route->prefix,
@@ -379,6 +387,7 @@
 								  route->metric,
 								  nm_ip4_config_get_mss (config));
 	}
+  }
 
 	if (num == 0)
 		nm_system_device_replace_default_ip4_route (iface, 0, 0);
diff -Nbwru old/src/vpn-manager/nm-vpn-connection.c new/src/vpn-manager/nm-vpn-connection.c
--- old/src/vpn-manager/nm-vpn-connection.c	2008-08-18 14:21:06.000000000 +0200
+++ new/src/vpn-manager/nm-vpn-connection.c	2008-08-24 16:37:06.000000000 +0200
@@ -333,7 +333,7 @@
 	NMSettingIP4Address *addr;
 	NMIP4Config *config;
 	GValue *val;
-	int i;
+	int i, num_routes=0;
 
 	nm_info ("VPN connection '%s' (IP Config Get) reply received.",
 		    nm_vpn_connection_get_name (connection));
@@ -415,11 +415,27 @@
 
 		routes = nm_utils_ip4_routes_from_gvalue (val);
 		for (iter = routes; iter; iter = iter->next)
+    {
 			nm_ip4_config_take_route (config, (NMSettingIP4Route *) iter->data);
+      num_routes++;
+    }
 
 		g_slist_free (routes);
 	}
 
+  /* if no routes were given, then we add a default route */
+  if (num_routes == 0) 
+  {
+    NMSettingIP4Route *default_route = g_malloc0(sizeof(NMSettingIP4Route));
+    /* some (openvpn) configurations publish the gateway for the default route */
+    val = (GValue *) g_hash_table_lookup (config_hash, NM_VPN_PLUGIN_IP4_CONFIG_ROUTE_VPN_GATEWAY);
+    if (val) 
+    {
+      default_route->next_hop = g_value_get_uint (val);
+    }
+    nm_ip4_config_take_route (config, default_route);
+  }
+
 	print_vpn_config (config, priv->tundev, priv->banner);
 
 	priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
diff -Nbwru old/vpn-daemons/openvpn/src/nm-openvpn-service-openvpn-helper.c new/vpn-daemons/openvpn/src/nm-openvpn-service-openvpn-helper.c
--- old/vpn-daemons/openvpn/src/nm-openvpn-service-openvpn-helper.c	2008-08-18 14:21:06.000000000 +0200
+++ new/vpn-daemons/openvpn/src/nm-openvpn-service-openvpn-helper.c	2008-08-24 16:37:06.000000000 +0200
@@ -309,6 +309,12 @@
 	if (val)
 		g_hash_table_insert (config, NM_VPN_PLUGIN_IP4_CONFIG_PTP, val);
 
+	/* some openvpn servers may push the "next hop"/default route gateway via 
+     the variable route_vpn_gateway.  */
+	val = addr_to_gvalue (getenv ("route_vpn_gateway"));
+	if (val)
+		g_hash_table_insert (config, NM_VPN_PLUGIN_IP4_CONFIG_ROUTE_VPN_GATEWAY, val);
+
 	/* Netmask */
 	tmp = getenv ("route_netmask_1");
 	if (tmp && inet_pton (AF_INET, tmp, &temp_addr) > 0) {
