diff --git a/package/gluon-mesh-batman-adv/files/lib/gluon/core/mesh/teardown.d/70-gluon-mesh-batman-adv b/package/gluon-mesh-batman-adv/files/lib/gluon/core/mesh/teardown.d/70-gluon-mesh-batman-adv
index 355b89b0a53ce4963333db68931b906bcecc10fb..a8850f1835fb0b525ce52972e16731425ff8e7a3 100755
--- a/package/gluon-mesh-batman-adv/files/lib/gluon/core/mesh/teardown.d/70-gluon-mesh-batman-adv
+++ b/package/gluon-mesh-batman-adv/files/lib/gluon/core/mesh/teardown.d/70-gluon-mesh-batman-adv
@@ -1,5 +1,5 @@
 #!/bin/sh
 
 lock /var/lock/gluon_bat0.lock
-(echo 'none' > "/sys/class/net/$IFNAME/batman_adv/mesh_iface") 2>/dev/null
+batctl interface del "$IFNAME" 2>/dev/null
 lock -u /var/lock/gluon_bat0.lock
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 97cd343afc2c02f7c5b229d7ccbe9fd7ea7e803b..f5c54ea342e3c74ac7fcaaeb947b7d967e2078e9 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
@@ -22,15 +22,9 @@ proto_gluon_bat0_renew() {
 
 	lock /var/lock/gluon_bat0.lock
 
-	local ifdump="$(ubus call network.interface dump)"
-
-	echo "$ifdump" | jsonfilter \
-		-e "@.interface[@.proto='gluon_mesh' && @.up=true]['device','data']" \
-	| while read dev; do
-		read data
-
-		echo bat0 > "/sys/class/net/$dev/batman_adv/mesh_iface"
-	done
+	ubus call network.interface dump | jsonfilter \
+		-e "@.interface[@.proto='gluon_mesh' && @.up=true].device" \
+	| xargs -r -n 1 batctl interface add
 
 	lock -u /var/lock/gluon_bat0.lock
 }