diff --git a/userspace/rootfs_override/etc/init.d/hald.sh b/userspace/rootfs_override/etc/init.d/hald.sh
new file mode 100755
index 0000000000000000000000000000000000000000..57b11a65f42e9a560cb772186ed8295b1721627c
--- /dev/null
+++ b/userspace/rootfs_override/etc/init.d/hald.sh
@@ -0,0 +1,68 @@
+#!/bin/sh
+
+dotconfig=/wr/etc/dot-config
+
+start() {
+    echo -n "Starting HAL daemon: "
+
+    if [ -f $dotconfig ]; then
+	. $dotconfig
+    else
+	echo "$0 unable to source dot-config ($dotconfig)!"
+    fi
+
+    WRS_LOG=$CONFIG_WRS_LOG_HAL
+
+    # if empty turn it to /dev/null
+    if [ -z $WRS_LOG ]; then
+	WRS_LOG="/dev/null";
+    fi
+
+    # if a pathname, use it
+    if echo "$WRS_LOG" | grep / > /dev/null; then
+	eval LOGPIPE=\" \> $WRS_LOG 2\>\&1 \";
+    else
+	# not a pathname: use verbatim
+	eval LOGPIPE=\" 2\>\&1 \| logger -t wr-switch -p $WRS_LOG\"
+    fi
+
+# be carefull with pidof, no running script should have the same name as process
+    if pidof wrsw_hal > /dev/null; then
+	# wrsw_hal already running
+	echo "Failed (already running?)"
+    else
+	eval /wr/bin/wrsw_hal $LOGPIPE \&
+	echo "OK"
+    fi
+}
+
+stop() {
+    echo -n "Stopping HAL "
+    start-stop-daemon -K -q --exec /wr/bin/wrsw_hal
+    if [ $? -eq 0 ]; then
+	echo "OK"
+    else
+	echo "Failed"
+    fi
+}
+
+restart() {
+    stop
+    start
+}
+
+case "$1" in
+  start)
+	start
+	;;
+  stop)
+	stop
+	;;
+  restart|reload)
+	restart
+	;;
+  *)
+	echo $"Usage: $0 {start|stop|restart}"
+	exit 1
+	;;
+esac
diff --git a/userspace/rootfs_override/etc/init.d/ppsi.sh b/userspace/rootfs_override/etc/init.d/ppsi.sh
new file mode 100755
index 0000000000000000000000000000000000000000..65e0c714cad851d5f283a25c7a98c6dfd88af0bd
--- /dev/null
+++ b/userspace/rootfs_override/etc/init.d/ppsi.sh
@@ -0,0 +1,68 @@
+#!/bin/sh
+
+dotconfig=/wr/etc/dot-config
+
+start() {
+    echo -n "Starting PTP daemon: "
+
+    if [ -f $dotconfig ]; then
+	. $dotconfig
+    else
+	echo "$0 unable to source dot-config ($dotconfig)!"
+    fi
+
+    WRS_LOG=$CONFIG_WRS_LOG_PTP
+
+    # if empty turn it to /dev/null
+    if [ -z $WRS_LOG ]; then
+	WRS_LOG="/dev/null";
+    fi
+
+    # if a pathname, use it
+    if echo "$WRS_LOG" | grep / > /dev/null; then
+	eval LOGPIPE=\" \> $WRS_LOG 2\>\&1 \";
+    else
+	# not a pathname: use verbatim
+	eval LOGPIPE=\" 2\>\&1 \| logger -t wr-switch -p $WRS_LOG\"
+    fi
+
+# be carefull with pidof, no running script should have the same name as process
+    if pidof ppsi > /dev/null; then
+	# ppsi already running
+	echo "Failed (already running?)"
+    else
+	eval /wr/bin/ppsi $LOGPIPE \&
+	echo "OK"
+    fi
+}
+
+stop() {
+    echo -n "Stopping PTP: "
+    start-stop-daemon -K -q --exec /wr/bin/ppsi
+    if [ $? -eq 0 ]; then
+	echo "OK"
+    else
+	echo "Failed"
+    fi
+}
+
+restart() {
+    stop
+    start
+}
+
+case "$1" in
+  start)
+	start
+	;;
+  stop)
+	stop
+	;;
+  restart|reload)
+	restart
+	;;
+  *)
+	echo $"Usage: $0 {start|stop|restart}"
+	exit 1
+	;;
+esac
diff --git a/userspace/rootfs_override/etc/init.d/rtud.sh b/userspace/rootfs_override/etc/init.d/rtud.sh
new file mode 100755
index 0000000000000000000000000000000000000000..8ae637f7c380c69810ba4e70cdaf0da2e4aa2182
--- /dev/null
+++ b/userspace/rootfs_override/etc/init.d/rtud.sh
@@ -0,0 +1,70 @@
+#!/bin/sh
+
+dotconfig=/wr/etc/dot-config
+
+start() {
+    echo -n "Starting RTUd daemon: "
+
+    if [ -f $dotconfig ]; then
+	. $dotconfig
+    else
+	echo "$0 unable to source dot-config ($dotconfig)!"
+    fi
+
+    WRS_LOG=$CONFIG_WRS_LOG_RTU
+
+    # if empty turn it to /dev/null
+    if [ -z $WRS_LOG ]; then
+	WRS_LOG="/dev/null";
+    fi
+
+    # if a pathname, use it
+    if echo "$WRS_LOG" | grep / > /dev/null; then
+	eval LOGPIPE=\" \> $WRS_LOG 2\>\&1 \";
+    else
+	# not a pathname: use verbatim
+	eval LOGPIPE=\" 2\>\&1 \| logger -t wr-switch -p $WRS_LOG\"
+    fi
+
+# be carefull with pidof, no running script should have the same name as process
+    if pidof rtud > /dev/null; then
+	# rtud already running
+	echo "Failed (already running?)"
+    else
+	eval /wr/bin/wrsw_rtud $LOGPIPE \&
+	# ensure we receive UDP PTP frames, since ppsi supports UDP too.
+	/wr/bin/rtu_stat add 01:00:5e:00:01:81 18 0 &
+	echo "OK"
+    fi
+}
+
+stop() {
+    echo -n "Stopping RTUd "
+    start-stop-daemon -K -q --exec /wr/bin/wrsw_rtud
+    if [ $? -eq 0 ]; then
+	echo "OK"
+    else
+	echo "Failed"
+    fi
+}
+
+restart() {
+    stop
+    start
+}
+
+case "$1" in
+  start)
+	start
+	;;
+  stop)
+	stop
+	;;
+  restart|reload)
+	restart
+	;;
+  *)
+	echo $"Usage: $0 {start|stop|restart}"
+	exit 1
+	;;
+esac
diff --git a/userspace/rootfs_override/etc/rcS/S61hald.sh b/userspace/rootfs_override/etc/rcS/S61hald.sh
new file mode 120000
index 0000000000000000000000000000000000000000..e053cc418657034efde4254575cc6721f891606b
--- /dev/null
+++ b/userspace/rootfs_override/etc/rcS/S61hald.sh
@@ -0,0 +1 @@
+../init.d/hald.sh
\ No newline at end of file
diff --git a/userspace/rootfs_override/etc/rcS/S61ppsi.sh b/userspace/rootfs_override/etc/rcS/S61ppsi.sh
new file mode 120000
index 0000000000000000000000000000000000000000..8aaeeadb998c77940c428f426b1da70c7627dee5
--- /dev/null
+++ b/userspace/rootfs_override/etc/rcS/S61ppsi.sh
@@ -0,0 +1 @@
+../init.d/ppsi.sh
\ No newline at end of file
diff --git a/userspace/rootfs_override/etc/rcS/S61rtud.sh b/userspace/rootfs_override/etc/rcS/S61rtud.sh
new file mode 120000
index 0000000000000000000000000000000000000000..33886d42571d177d16fdaa3c06db677d20bcb3cb
--- /dev/null
+++ b/userspace/rootfs_override/etc/rcS/S61rtud.sh
@@ -0,0 +1 @@
+../init.d/rtud.sh
\ No newline at end of file
diff --git a/userspace/rootfs_override/wr/bin/apply_dot-config b/userspace/rootfs_override/wr/bin/apply_dot-config
index 1e8bd49237ba41e34a2442279873e1818879e910..b1608f4a34af71761162d29859fa140c64b7680f 100755
--- a/userspace/rootfs_override/wr/bin/apply_dot-config
+++ b/userspace/rootfs_override/wr/bin/apply_dot-config
@@ -80,14 +80,6 @@ set | tr -d \' | grep CONFIG_SNMP | sed 's/=/ /' | while read varname value; do
 done
 copy_conf /wr/etc/snmpd.conf
 
-# Fix log values
-cp /wr/sbin/start-daemons.sh.in $T
-set | tr -d \' | grep CONFIG_WRS_LOG | sed 's/=/ /' | while read varname value; do
-    if [ -z "$value" ]; then continue; fi
-    sed -i "/$varname/ s,$varname,$value," $T
-done
-copy_conf /wr/sbin/start-daemons.sh
-
 # Select a ppsi configuration file
 if [ "$CONFIG_PTP_PORT_PARAMS" = "y" ]; then
     /wr/bin/assembly_ppsi_conf.sh
diff --git a/userspace/rootfs_override/wr/sbin/start-daemons.sh.in b/userspace/rootfs_override/wr/sbin/start-daemons.sh.in
deleted file mode 100755
index c01cc9bf34b1b0fefc815ce9cb8645efc9f2455a..0000000000000000000000000000000000000000
--- a/userspace/rootfs_override/wr/sbin/start-daemons.sh.in
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/bin/ash
-echo "Starting up WR daemons..."
-
-# The following variables are modified at build time, with Kconfig values
-LOG_HAL=CONFIG_WRS_LOG_HAL
-LOG_RTU=CONFIG_WRS_LOG_RTU
-LOG_PTP=CONFIG_WRS_LOG_PTP
-
-# The loop below is a little intricate because of the eval, but I need it this
-# to have pipe and file as both supported.
-# Also, to have both stdout and stderr, we need "2>&1" before the pipe, but
-# after the file redirection (why????)
-
-for n in HAL RTU PTP; do
-    # if empty turn it to /dev/null
-    if eval test -z "\$LOG_$n"; then LOG_$n="/dev/null"; fi
-    # if a pathname, use it
-    eval value="\$LOG_$n"
-    if echo "$value" | grep / > /dev/null; then
-	eval LOGPIPE_$n=\" \> $value 2\>\&1 \";
-	continue;
-    fi
-    # not a pathname: use verbatim
-    eval LOGPIPE_$n=\" 2\>\&1 \| logger -t wr-switch -p $value\"
-done
-
-export WR_HOME="/wr"
-
-eval $WR_HOME/bin/wrsw_hal    $LOGPIPE_HAL \&
-eval $WR_HOME/bin/wrsw_rtud   $LOGPIPE_RTU \&
-eval $WR_HOME/bin/ppsi        $LOGPIPE_PTP \&
-
-# ensure we receive UDP PTP frames, since ppsi supports UDP too.
-$WR_HOME/bin/rtu_stat add 01:00:5e:00:01:81 18 0 &
-
diff --git a/userspace/rootfs_override/wr/sbin/startup-mb.sh b/userspace/rootfs_override/wr/sbin/startup-mb.sh
index 55753f35ed0ff94bfa004286a95a2a1c0f19c089..1a5712c50cfb9a9c573c1a2c84fb7163ae103b31 100755
--- a/userspace/rootfs_override/wr/sbin/startup-mb.sh
+++ b/userspace/rootfs_override/wr/sbin/startup-mb.sh
@@ -62,5 +62,4 @@ insmod $WR_HOME/lib/modules/wr-nic.ko macaddr=$val
 insmod $WR_HOME/lib/modules/wr_rtu.ko
 insmod $WR_HOME/lib/modules/wr_pstats.ko pstats_nports=18
 insmod $WR_HOME/lib/modules/wr_clocksource.ko
-$WR_HOME/sbin/start-daemons.sh