diff --git a/contrib/package/freifunk-policyrouting/files/etc/config/freifunk-policyrouting b/contrib/package/freifunk-policyrouting/files/etc/config/freifunk-policyrouting
index 3dd2998..ff2c67c 100644
--- a/contrib/package/freifunk-policyrouting/files/etc/config/freifunk-policyrouting
+++ b/contrib/package/freifunk-policyrouting/files/etc/config/freifunk-policyrouting
@@ -1,7 +1,6 @@
-
 config 'settings' 'pr'
 	option 'enable' '0'
 	option 'strict' '1'
-        option 'fallback' '1'
-	option 'zones' ''
+	option 'fallback' '1'
+	option 'zones' 'freifunk'
 
diff --git a/contrib/package/freifunk-policyrouting/files/etc/hotplug.d/iface/30-policyrouting b/contrib/package/freifunk-policyrouting/files/etc/hotplug.d/iface/30-policyrouting
index 327e879..f6937f4 100644
--- a/contrib/package/freifunk-policyrouting/files/etc/hotplug.d/iface/30-policyrouting
+++ b/contrib/package/freifunk-policyrouting/files/etc/hotplug.d/iface/30-policyrouting
@@ -4,7 +4,7 @@
 . /lib/functions/network.sh
 
 proto="4"
-[ -f /proc/net/ipv6_route ] && proto="4 6"
+#[ -f /proc/net/ipv6_route ] && proto="4 6"
 
 config_load freifunk-policyrouting
 config_get enable pr enable
@@ -14,14 +14,23 @@ config_get zones pr zones
 
 if [ "$ACTION" = "ifup" ] && [ "$enable" = "1" ]; then
 	network_get_subnet net $INTERFACE
-	network_get_subnet6 net6 $INTERFACE
+	#network_get_subnet6 net6 $INTERFACE
 	network_get_physdev dev $INTERFACE
 
 	if [ "$net" != "" -a -n "$dev" ]; then
 		eval $(/bin/ipcalc.sh $net)
 		if [ "$PREFIX" != "0" -a "$NETWORK" != "127.0.0.0" ]; then
-			if [ ! "$(ip r s t localnets |grep "$NETWORK/$PREFIX dev")" ]; then
-				cmd="ip r a $NETWORK/$PREFIX dev $dev table localnets"
+			if [ ! "$(ip route show table localnets |grep "$NETWORK/$PREFIX dev")" ]; then
+				cmd="ip route add $NETWORK/$PREFIX dev $dev table localnets"
+				$cmd
+				if [ "$?" = 0 ]; then
+					logger -s -t policyrouting "Add route: $cmd"
+				else
+					logger -s -t policyrouting "Error! Could not add route: $cmd"
+				fi
+			fi
+			if [ ! "$(ip route show table olsr |grep "$NETWORK/$PREFIX dev")" ]; then
+				cmd="ip route add $NETWORK/$PREFIX dev $dev table olsr"
 				$cmd
 				if [ "$?" = 0 ]; then
 					logger -s -t policyrouting "Add route: $cmd"
@@ -33,7 +42,7 @@ if [ "$ACTION" = "ifup" ] && [ "$enable" = "1" ]; then
 		fi
 
 		if [ -n "$net6" ]; then
-			cmd="ip -6 r a $net6 dev $dev table localnets"
+			cmd="ip -6 route add $net6 dev $dev table localnets"
 			$cmd 2>&1 > /dev/null
 			if [ "$?" = 0 ]; then
 				logger -s -t policyrouting "Add route: $cmd (IPv6)"
@@ -52,7 +61,7 @@ if [ "$ACTION" = "ifup" ] && [ "$enable" = "1" ]; then
 		for n in $networks; do
 			if [ "$INTERFACE" = "$n" ]; then
 				for p in $proto; do
-					if [ ! "$(ip -$p ru s | grep "from all iif $dev lookup olsr-default")" ]; then
+					if [ ! "$(ip -$p rule show | grep "from all iif $dev lookup olsr-default")" ]; then
 						ip -$p rule add dev "$dev" lookup olsr-default prio 20000
 						if [ "$strict" != 0 ]; then
 							ip -$p rule add dev "$dev" unreachable prio 20001
@@ -88,7 +97,7 @@ if [ "$ACTION" = "ifdown" ]; then
 		for n in $networks; do
 			if [ "$INTERFACE" = "$n" ]; then
 				for p in $proto; do
-					if [ "$(ip -$p ru s | grep "from all iif $dev lookup olsr-default")" ]; then
+					if [ "$(ip -$p rule show | grep "from all iif $dev lookup olsr-default")" ]; then
 						ip -$p rule del dev "$dev" lookup olsr-default prio 20000
 						ip -$p rule del dev "$dev" unreachable prio 20001
 						if [ "$?" = 0 ]; then
diff --git a/contrib/package/freifunk-policyrouting/files/etc/init.d/freifunk-policyrouting b/contrib/package/freifunk-policyrouting/files/etc/init.d/freifunk-policyrouting
index b3720e6..be81472 100755
--- a/contrib/package/freifunk-policyrouting/files/etc/init.d/freifunk-policyrouting
+++ b/contrib/package/freifunk-policyrouting/files/etc/init.d/freifunk-policyrouting
@@ -5,7 +5,7 @@ START=15
 . /lib/functions.sh
 
 proto="4"
-[ -f /proc/net/ipv6_route ] && proto="4 6"
+#[ -f /proc/net/ipv6_route ] && proto="4 6"
 
 config_load freifunk-policyrouting
 config_get enable pr enable
@@ -88,12 +88,14 @@ add_lookup_rule() {
 			else
 				rule="rule"
 			fi
-
-			uci batch <<- EOF
-				set network.${name}ipv${p}="$rule"
-				set network.${name}ipv${p}.lookup="$lookup"
-				set network.${name}ipv${p}.priority="$prio"
-			EOF
+			if [ "$(uci -q get network.${name}ipv${p})" != "$rule" ] ; then
+				uci batch <<- EOF
+					set network.${name}ipv${p}="$rule"
+					set network.${name}ipv${p}.lookup="$lookup"
+					set network.${name}ipv${p}.priority="$prio"
+				EOF
+				uci commit network
+			fi
 		done
 	fi
 }
@@ -103,6 +105,7 @@ del_lookup_rule() {
 	for p in $proto; do
 		uci -q delete network.${name}ipv${p}
 	done
+	uci commit network
 }
 
 start() {
@@ -110,7 +113,7 @@ start() {
 		logger -s -t policyrouting "Starting policy routing."
 		rt_tables
 		olsrd_intalltables
-		disable_dyngw
+		#disable_dyngw
 
 		add_lookup_rule olsr olsr 1000
 		add_lookup_rule localnets localnets 2000
@@ -131,17 +134,11 @@ stop() {
 	del_lookup_rule olsr-default
 	del_lookup_rule olsr
 	del_lookup_rule localnets
-	uci commit network
 	restart_services
 	echo "Hint: To completely disable freifunk-policyrouting set enable=0 in /etc/config/freifunk-policyrouting."
 }
 
 restart() {
 	logger -s -t policyrouting "Restarting policy routing"
-	olsrd_rmtables
-	del_lookup_rule olsr-default
-	del_lookup_rule olsr
-	del_lookup_rule localnets
-	uci commit network
 	start
 }
