diff --git a/package/gluon-mesh-batman-adv/check_site.lua b/package/gluon-mesh-batman-adv/check_site.lua
index 384b32247a24269a7f4f412552d80d8dcf5bd1de..3dc2e6aa6afe8c9bff87303604e35e8e5bda3052 100644
--- a/package/gluon-mesh-batman-adv/check_site.lua
+++ b/package/gluon-mesh-batman-adv/check_site.lua
@@ -1,3 +1,4 @@
 if need_table('mesh', nil, false) and  need_table('mesh.batman_adv', nil, false) then
-  need_number('mesh.batman_adv.gw_sel_class', false)
+	need_number('mesh.batman_adv.gw_sel_class', false)
+	need_one_of('mesh.batman_adv.routing_algo', {'BATMAN_IV', 'BATMAN_V'}, false)
 end
diff --git a/package/gluon-mesh-batman-adv/files/lib/netifd/proto/gluon_bat0.sh b/package/gluon-mesh-batman-adv/files/lib/netifd/proto/gluon_bat0.sh
index 781d91c390128fb090bd94a61b75f958088c72ad..ea562c498efdb6b7de42f89e3f9c50216013102e 100755
--- a/package/gluon-mesh-batman-adv/files/lib/netifd/proto/gluon_bat0.sh
+++ b/package/gluon-mesh-batman-adv/files/lib/netifd/proto/gluon_bat0.sh
@@ -41,6 +41,10 @@ proto_gluon_bat0_setup() {
 	ip link add primary0 type dummy
 	echo 1 > /proc/sys/net/ipv6/conf/primary0/disable_ipv6
 	ip link set primary0 address "$primary0_mac" mtu 1532 up
+
+	local routing_algo="$(uci -q get batman-adv.bat0.routing_algo || echo 'BATMAN_IV')"
+	(echo "$routing_algo" >/sys/module/batman_adv/parameters/routing_algo) 2>/dev/null
+
 	echo bat0 > /sys/class/net/primary0/batman_adv/mesh_iface
 
 	proto_init_update primary0 1
diff --git a/package/gluon-mesh-batman-adv/luasrc/lib/gluon/upgrade/310-gluon-mesh-batman-adv-mesh b/package/gluon-mesh-batman-adv/luasrc/lib/gluon/upgrade/310-gluon-mesh-batman-adv-mesh
index 8153f0751d1058cf93a6bc07fdcd588f9129a131..b119531a62260e99b5ec9a5cb1a46fa836745e1f 100755
--- a/package/gluon-mesh-batman-adv/luasrc/lib/gluon/upgrade/310-gluon-mesh-batman-adv-mesh
+++ b/package/gluon-mesh-batman-adv/luasrc/lib/gluon/upgrade/310-gluon-mesh-batman-adv-mesh
@@ -12,12 +12,18 @@ if site.mesh and site.mesh.batman_adv then
 	gw_sel_class = site.mesh.batman_adv.gw_sel_class
 end
 
+local routing_algo
+if site.mesh and site.mesh.batman_adv then
+	routing_algo = site.mesh.batman_adv.routing_algo
+end
+
 uci:delete('batman-adv', 'bat0')
 uci:section('batman-adv', 'mesh', 'bat0', {
 	orig_interval = 5000,
 	gw_mode = 'client',
 	gw_sel_class = gw_sel_class,
 	hop_penalty = 15,
+	routing_algo = routing_algo,
 	multicast_mode = false,
 })
 uci:save('batman-adv')