diff --git a/src/dhcp-manager/nm-dhcp-client.c b/src/dhcp-manager/nm-dhcp-client.c
index 4bbcdeb..ad7e226 100644
--- a/src/dhcp-manager/nm-dhcp-client.c
+++ b/src/dhcp-manager/nm-dhcp-client.c
@@ -1191,8 +1191,8 @@ ip4_options_to_config (NMDHCPClient *self)
 
 			for (s = routers; *s; s++) {
 				/* FIXME: how to handle multiple routers? */
-				if (inet_pton (AF_INET, *s, &tmp_addr) > 0) {
-					nm_ip4_config_set_gateway (ip4_config, tmp_addr);
+				if (inet_pton (AF_INET, *s, &gwaddr) > 0) {
+					nm_ip4_config_set_gateway (ip4_config, gwaddr);
 					nm_log_info (LOGD_DHCP4, "  gateway %s", *s);
 					break;
 				} else
@@ -1202,6 +1202,28 @@ ip4_options_to_config (NMDHCPClient *self)
 		}
 	}
 
+	if (gwaddr) {
+		str = g_hash_table_lookup (priv->options, "new_dhcp_server_identifier");
+		if (str) {
+			if (inet_pton (AF_INET, str, &tmp_addr) > 0) {
+				NMPlatformIP4Route route;
+				guint32 mask = nm_utils_ip4_prefix_to_netmask(address.plen);
+				if ((tmp_addr & mask) != (address.address & mask)) {
+					/* Add host route for dhcp server (in case this
+					   interface is not the default gateway) */
+					memset (&route, 0, sizeof (route));
+					route.network = tmp_addr;
+					route.plen = 32;
+					route.gateway = gwaddr;
+					nm_ip4_config_add_route (ip4_config, &route);
+					nm_log_info (LOGD_DHCP4, "  dhcp_server_identifier %s", str);
+				}
+			}
+			else
+				nm_log_warn (LOGD_DHCP4, "ignoring invalid dhcp_server_identifier '%s'", str);
+		}
+	}
+
 	str = g_hash_table_lookup (priv->options, "new_dhcp_lease_time");
 	if (str) {
 		address.lifetime = address.preferred = strtoul (str, NULL, 10);
