diff --git a/Dockerfile b/Dockerfile
index 4148540..954eb14 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,7 @@
 FROM resin/armv7hf-debian:jessie
 
 ENV QEMU_EXECVE 1
+
 COPY . /usr/bin
+
+RUN [ "qemu-arm-static", "/bin/sh", "-c", "ln -s resin-xbuild /usr/bin/cross-build-start; ln -s resin-xbuild /usr/bin/cross-build-end; ln /bin/sh /bin/sh.real" ]
diff --git a/cross-build-end b/cross-build-end
deleted file mode 100755
index e33bff5..0000000
--- a/cross-build-end
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/qemu-arm-static /bin/sh.real
-
-mv /bin/sh.real /bin/sh
diff --git a/cross-build-start b/cross-build-start
deleted file mode 100755
index 8a09176..0000000
--- a/cross-build-start
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/usr/bin/qemu-arm-static /bin/sh
-
-mv /bin/sh /bin/sh.real
-cp /usr/bin/sh-shim /bin/sh
diff --git a/resin-xbuild b/resin-xbuild
new file mode 100755
index 0000000..9bda476
Binary files /dev/null and b/resin-xbuild differ
diff --git a/resin-xbuild.go b/resin-xbuild.go
new file mode 100644
index 0000000..5ff3ff4
--- /dev/null
+++ b/resin-xbuild.go
@@ -0,0 +1,50 @@
+package main
+
+import (
+	"log"
+	"os"
+	"os/exec"
+)
+
+func crossBuildStart() {
+	err := os.Remove("/bin/sh")
+	if err != nil {
+		log.Fatal(err)
+	}
+	err = os.Link("/usr/bin/resin-xbuild", "/bin/sh")
+	if err != nil {
+		log.Fatal(err)
+	}
+}
+
+func crossBuildEnd() {
+	err := os.Remove("/bin/sh")
+	if err != nil {
+		log.Fatal(err)
+	}
+	err = os.Link("/bin/sh.real", "/bin/sh")
+	if err != nil {
+		log.Fatal(err)
+	}
+}
+
+func runShell() {
+	cmd := exec.Command("/usr/bin/qemu-arm-static", append([]string{"-0", "/bin/sh", "/bin/sh"}, os.Args[1:]...)...)
+	cmd.Stdin = os.Stdin
+	cmd.Stdout = os.Stdout
+	cmd.Stderr = os.Stderr
+	cmd.Run()
+}
+
+func main() {
+	switch os.Args[0] {
+	case "cross-build-start":
+		crossBuildStart()
+	case "cross-build-end":
+		crossBuildEnd()
+	case "/bin/sh":
+		crossBuildEnd()
+		runShell()
+		crossBuildStart()
+	}
+}
diff --git a/sh-shim b/sh-shim
deleted file mode 100755
index fdb1afc..0000000
--- a/sh-shim
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/usr/bin/qemu-arm-static /bin/sh.real
-
-set -o errexit
-
-cp /bin/sh.real /bin/sh
-
-/bin/sh "$@"
-
-cp /usr/bin/sh-shim /bin/sh