diff --git a/recipes-core/fastinit/fastinit.bb b/recipes-core/fastinit/fastinit.bb
new file mode 100644
index 0000000000000000000000000000000000000000..1d97a8d00b4d4e88eb2f351e03e5b3a1dcbbd230
--- /dev/null
+++ b/recipes-core/fastinit/fastinit.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Installs fast init script to replace SysVinit"
+LICENSE = "CLOSED"
+
+SRC_URI = "file://fastinit.sh" 
+
+S = "${WORKDIR}"
+
+do_install() {
+    install -d ${D}/usr/sbin
+    install -m 0755 ${WORKDIR}/fastinit.sh ${D}/usr/sbin/
+}
+
+FILES:${PN} = "/usr/sbin/fastinit.sh"
+
diff --git a/recipes-core/fastinit/files/fastinit.sh b/recipes-core/fastinit/files/fastinit.sh
new file mode 100755
index 0000000000000000000000000000000000000000..059a9095cb4550ab2b781acc292ca3fc3ad35ca2
--- /dev/null
+++ b/recipes-core/fastinit/files/fastinit.sh
@@ -0,0 +1,73 @@
+#!/bin/sh
+
+trap 'exec /sbin/poweroff -f' TERM
+trap 'exec /sbin/reboot -f' INT HUP
+
+log_to_kernel() {
+	echo "<4>fastinit: $1" > /dev/kmsg
+}
+
+warn_to_kernel() {
+	echo "<2>fastinit: $1" > /dev/kmsg
+}
+
+crit_to_kernel() {
+	echo "<1>fastinit: $1" > /dev/kmsg
+}
+
+level_zero() {
+	exec /sbin/poweroff -f
+}
+
+level_one() {
+	log_to_kernel "mounting filesystems"
+	mount -t proc proc /proc
+	mount -t sysfs sysfs /sys
+	mount -o ro /dev/mmcblk0p1 /boot
+
+	log_to_kernel "getting teletypes on ttyS0"
+	/sbin/getty -L 115200 ttyS0 vt100
+}
+
+level_five() {
+	exec /sbin/init 5
+}
+
+level_six() {
+	exec /sbin/reboot -f
+}
+
+runlevel=$1
+
+if [ -z "$runlevel" ]; then
+	warn_to_kernel "cannot read runlevel from argument"
+	warn_to_kernel "please edit cmdline.txt in bootfs"
+	warn_to_kernel "usage: init=/usr/sbin/fastinit RUNLEVEL"
+else
+	case $runlevel in
+		0)
+			log_to_kernel "entering runlevel 0 (halt)"
+			level_zero
+			;;
+		1)
+			log_to_kernel "entering runlevel 1 (minimal)"
+			level_one
+			;;
+		5)
+			log_to_kernel "entering runlevel 5 (sysvinit)"
+			level_five
+			;;
+		6)
+			log_to_kernel "entering runlevel 6 (reboot)"
+			level_six
+			;;
+		*)
+			warn_to_kernel "Runlevel $runlevel not implemented"
+			warn_to_kernel "usage: /usr/sbin/fastinit RUNLEVEL"
+			;;
+	esac
+fi
+
+crit_to_kernel "host is up and ready"
+
+exit 0
diff --git a/recipes-core/images/mar-image-minimal.bb b/recipes-core/images/mar-image-minimal.bb
index 84a3d9b8cc393642b45cb354989aa69ffabdeae6..30a27008dfcd9a066c823ad25bce9525237bed14 100644
--- a/recipes-core/images/mar-image-minimal.bb
+++ b/recipes-core/images/mar-image-minimal.bb
@@ -2,15 +2,11 @@ SUMMARY = "A small image just capable of allowing a device to boot."
 
 IMAGE_INSTALL = "packagegroup-core-boot \
     packagegroup-base-extended \
-    zeromq \
     python3 \
-    python3-pyzmq \
     python3-pyserial \
-    connman \
-    connman-client \
     screen \
-    serial-usb \
     usb-modeswitch \
+    fastinit \
     serial-usb \
     ${CORE_IMAGE_EXTRA_INSTALL}"