diff --git a/package/gluon-respondd/files/etc/hotplug.d/iface/10-gluon-respondd b/package/gluon-respondd/files/etc/hotplug.d/iface/10-gluon-respondd
deleted file mode 100644
index 564559e705b6652ca265523854d3780785ed2256..0000000000000000000000000000000000000000
--- a/package/gluon-respondd/files/etc/hotplug.d/iface/10-gluon-respondd
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/sh
-
-. /lib/functions/service.sh
-
-ifname_to_dev () {
-	ifstatus client "$1"|jsonfilter -e "@.device"
-}
-
-case "$ACTION" in
-	ifup)
-		DEVICE="$(ifname_to_dev "$INTERFACE")"
-
-		[ "$DEVICE" != "$(cat /lib/gluon/respondd/client.dev 2>/dev/null)" ] ||
-			/etc/init.d/gluon-respondd restart_if_running &
-		;;
-esac
diff --git a/package/gluon-respondd/files/etc/init.d/gluon-respondd b/package/gluon-respondd/files/etc/init.d/gluon-respondd
index 49afef4fca77dc86f54891bee4ef23720112c85e..6b61d731a23e5255990692d2c9385d86d8f86195 100755
--- a/package/gluon-respondd/files/etc/init.d/gluon-respondd
+++ b/package/gluon-respondd/files/etc/init.d/gluon-respondd
@@ -1,48 +1,28 @@
 #!/bin/sh /etc/rc.common
 
-EXTRA_COMMANDS='restart_if_running'
-
+USE_PROCD=1
 START=50
 
-SERVICE_WRITE_PID=1
-SERVICE_DAEMONIZE=1
-
 DAEMON=/usr/bin/respondd
-LOCK=/var/run/gluon-respondd.lock
-
 
-do_start() {
+start_service() {
 	DEVS=""
 	for dev in $( ubus call network.interface dump | jsonfilter -e "@.interface[@.proto='gluon_mesh' && @.up=true].device") $(cat /lib/gluon/respondd/client.dev 2>/dev/null)
 	do
 		DEVS="$DEVS -i $dev"
 	done
-	service_start $DAEMON -g ff02::2:1001 -p 1001 -d /lib/gluon/respondd $DEVS
-}
-
-do_stop() {
-	service_stop $DAEMON
+	procd_open_instance
+	procd_set_param command $DAEMON -g ff02::2:1001 -p 1001 -d /lib/gluon/respondd $DEVS
+	procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5}
+	procd_set_param stderr 1
+	procd_close_instance
 }
 
-start() {
-	lock $LOCK
-	do_start
-	lock -u $LOCK
-}
-
-stop() {
-	lock $LOCK
-	do_stop
-	lock -u $LOCK
-}
-
-restart_if_running() {
-	lock $LOCK
-
-	if service_check $DAEMON; then
-		do_stop
-		do_start
-	fi
+service_triggers() {
+	local script=$(readlink "$initscript")
+	local name=$(basename ${script:-$initscript})
 
-	lock -u $LOCK
+	procd_open_trigger
+	procd_add_raw_trigger "interface.*" 0 "/etc/init.d/$name" reload
+	procd_close_trigger
 }
diff --git a/package/gluon-respondd/files/lib/gluon/core/mesh/setup.d/10-gluon-respondd b/package/gluon-respondd/files/lib/gluon/core/mesh/setup.d/10-gluon-respondd
deleted file mode 100755
index 811386e0d2ecab4dc1cac763fa0ed1702bc27706..0000000000000000000000000000000000000000
--- a/package/gluon-respondd/files/lib/gluon/core/mesh/setup.d/10-gluon-respondd
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-/etc/init.d/gluon-respondd restart_if_running &