diff --git a/package/pptp/Makefile b/package/pptp/Makefile
index a6d213d387e85571bd2739a08e860b8b46f0726a..748abde5a83dbcf781f7b638b08422f7c7676cac 100644
--- a/package/pptp/Makefile
+++ b/package/pptp/Makefile
@@ -23,7 +23,7 @@ define Package/pptp
   TITLE:=PPTP client
   MAINTAINER:=Jo-Philipp Wich <xm@subsignal.org>
   URL:=http://pptpclient.sourceforge.net/
-  DEPENDS:=+ppp +kmod-gre +resolveip
+  DEPENDS:=+ppp +kmod-gre +resolveip +ip
 endef
 
 define Package/pptp/description
diff --git a/package/pptp/files/pptp.sh b/package/pptp/files/pptp.sh
index 19023e7ef45ac1c0a807654d6c1d497e5ed69f24..b898769b660e425f37a3c9d5b5d2e7f3a74e54e4 100644
--- a/package/pptp/files/pptp.sh
+++ b/package/pptp/files/pptp.sh
@@ -1,5 +1,6 @@
-find_gw() {
-	route -n | awk '$1 == "0.0.0.0" { print $2; exit }'
+find_route() {
+	ip route get $1 | sed -e 's/ /\n/g' | \
+            sed -ne '1p;/via/{N;p};/dev/{N;p};/src/{N;p};/mtu/{N;p}'
 }
 
 scan_pptp() {
@@ -9,7 +10,7 @@ scan_pptp() {
 stop_interface_pptp() {
 	stop_interface_ppp "$1"
 	for ip in $(uci_get_state network "$1" serv_addrs); do
-		route del -host "$ip" 2>/dev/null
+		ip route del "$ip" 2>/dev/null
 	done
 }
 
@@ -36,16 +37,13 @@ setup_interface_pptp() {
 	done
 	sleep 1
 
-	local gw="$(find_gw)"
-	[ -n "$gw" ] && {
-		local serv_addrs=""
-		for ip in $(resolveip -4 -t 3 "$server"); do
-			append serv_addrs "$ip"
-			route delete -host "$ip" 2>/dev/null
-			route add -host "$ip" gw "$gw"
-		done
-		uci_toggle_state network "$config" serv_addrs "$serv_addrs"
-	}
+	local serv_addrs=""
+	for ip in $(resolveip -t 3 "${server}"); do
+		append serv_addrs "$ip"
+		ip route replace $(find_route $ip)
+	done
+	uci_toggle_state network "$config" serv_addrs "$serv_addrs"
+}
 
 	# fix up the netmask
 	config_get netmask "$config" netmask