diff --git a/.ci/shellcheck.sh b/.ci/shellcheck.sh
index 6437b3536358af33bf7241aaffd647204aaa7b6b..d32f1f56832c867ef90ebe5ea50022f4ab6ad4c9 100755
--- a/.ci/shellcheck.sh
+++ b/.ci/shellcheck.sh
@@ -27,6 +27,7 @@ sh_files="
 	./main/unl0kr/unlock.sh
 	./main/msm-firmware-loader/*.post-install
 	./device/community/soc-qcom-sdm845/call_audio_idle_suspend_workaround.sh
+	./device/testing/device-samsung-starqltechn/*.sh
 
 	$(find . -path './main/postmarketos-ui-*/*.sh')
 	$(find . -path './main/postmarketos-ui-*/*.pre-install')
diff --git a/device/testing/device-samsung-starqltechn/APKBUILD b/device/testing/device-samsung-starqltechn/APKBUILD
index ef3991303c00d2c1f2ff623c73b0e8d1e8901634..544d6b0a69967d6c6147e32326ff8735b5aa1eec 100644
--- a/device/testing/device-samsung-starqltechn/APKBUILD
+++ b/device/testing/device-samsung-starqltechn/APKBUILD
@@ -2,14 +2,23 @@
 pkgname=device-samsung-starqltechn
 pkgdesc="Samsung Galaxy S9 SM-G9600"
 pkgver=0.2
-pkgrel=2
+pkgrel=3
 url="https://postmarketos.org"
 license="MIT"
 arch="aarch64"
 options="!check !archcheck"
 depends="postmarketos-base linux-postmarketos-qcom-sdm845 mkbootimg u-boot-starqltechn u-boot-tools dtc"
 makedepends="devicepkg-dev dtc"
-source="deviceinfo boot_image.its payload_mock.dts bootscript.sh"
+source="
+	android_boot_image.its
+	boot_image.its
+	bootscript.sh
+	bootscript_android.sh
+	deviceinfo
+	find_image_and_boot.its
+	find_image_and_boot.sh
+	payload_mock.dts
+"
 
 build() {
 	devicepkg_build $startdir $pkgname
@@ -27,12 +36,20 @@ package() {
 		"$pkgdir"/usr/share/u-boot/starqltechn/
 	install -D -m644 "$srcdir/"bootscript.sh \
 		"$pkgdir"/usr/share/u-boot/starqltechn/
+	install -D -m644 "$srcdir/"bootscript_android.sh \
+		"$pkgdir"/usr/share/u-boot/starqltechn/
+	install -D -m644 "$srcdir/"find_image_and_boot.sh \
+		"$pkgdir"/usr/share/u-boot/starqltechn/
 }
 
 
 sha512sums="
-1a51b1a75a7ab23b0011d2952e716b6d98a3a395578a99e278d8eda4c921ce015ce1f0e386a88b89e9f657edc867f00fffd11e550a91ec9ede2769d8cbfd1718  deviceinfo
+31dc6cf933881ac4f9512d3e78e73c151420a307058227028c4a62f8121d6b37d0f89eb9ffa3d871a0cc50767ca1ee16e0167e82021ba61562222e94969c233b  android_boot_image.its
 8ecd6621738b14fecfb8bb32f06fa86053649f46d6ef7e50cdc6dd44175d459a8b5f185e0b1d6168d23d6b8474ea31ae9aaf306385eb106df6489e6838b4fbe1  boot_image.its
+0b70e43e7a0d27f04fa82bcf4f6c787f28741ac02ef24baf76eddc55e09cb98022631ba1f55301074dc60dd4333995a60570ad409fe9b264b3e3d4cc4de26e6f  bootscript.sh
+f34880ad5645de16967f36c3c357ee258f8ae6aa31ab7bb26507e4742417ef53c4ffc90e6c5e3ad87da7400d6a4e236df12750bccf4e2caf2786654f2d76c5d7  bootscript_android.sh
+c6df794c1da78d8ab0d5ddf31a7591d6fb98d15a5c72e9b335c1c21004ef78648b1b8b18c3c960fed80dc698494f8d00e2d12ec0af60820d3ddce99824dea0b3  deviceinfo
+26bb890f50b6430917bb0c79fe198aa2ca8e36c618560d3867f3135bec57fd8b2dd6467c7e5d9389ac8159ccbe24f629a9c845488741fba2aa53e38b7887f6a1  find_image_and_boot.its
+072bf1f3110ba57c8ee8a60c5698d0c4418c1adb7ceda894e700a098132be5b3db32e56d195022e0f059e23f7d55b7c983c611919c7ea056818a4f272e56f108  find_image_and_boot.sh
 ba782c324c14cf0947c752b51a607ae1b08def885b0cf0afe89d1fcade3491ab2f547551eb08bd8074f608dac46bdcdf75c5c633bd7a15e6eb63a10f30994c82  payload_mock.dts
-fc9a353946a061b964b8d85ba40a55aabd5dc51ad079ce9013473fb2031f2bea7f987dc437f3e7b515e7f1eccc16c7ba0c616926f59f98382b1193e6875b50f3  bootscript.sh
 "
diff --git a/device/testing/device-samsung-starqltechn/android_boot_image.its b/device/testing/device-samsung-starqltechn/android_boot_image.its
new file mode 100644
index 0000000000000000000000000000000000000000..a49434dd1ac75d5e45c82fc467f6e37f1979fa1a
--- /dev/null
+++ b/device/testing/device-samsung-starqltechn/android_boot_image.its
@@ -0,0 +1,68 @@
+/dts-v1/;
+
+/ {
+        description = "Samsung S9 SM-G9600 starqltechn Android FIT Image";
+        #address-cells = <1>;
+
+        images {
+                prebootscript {
+                        description = "pre Boot script";
+                        data = /incbin/("bootscript_android.sh");
+                        type = "script";
+                        compression = "none";
+                        load = <0x90000000>;
+                        entry = <0x90000000>;
+                        hash {
+                                algo = "sha1";
+                        };
+                };
+                bootscript {
+                        description = "Boot script";
+                        data = /incbin/("bootscript_android.sh");
+                        type = "script";
+                        compression = "none";
+                        load = <0x90000000>;
+                        entry = <0x90000000>;
+                        hash {
+                                algo = "sha1";
+                        };
+                };
+                kernel {
+                        description = "Kernel";
+                        data = /incbin/("vendor_android_boot/vendor_boot.img-kernel");
+                        type = "kernel";
+                        arch = "arm64";
+                        os = "linux";
+                        compression = "gzip";
+                        load = <0x80200000>;
+                        entry = <0x80200000>;
+                        hash {
+                                algo = "sha1";
+                        };
+                };
+                initrd {
+                        description = "Initrd";
+                        compression = "none";
+                        data = /incbin/("vendor_android_boot/vendor_boot.img-ramdisk");
+                        type = "ramdisk";
+                        arch = "arm64";
+                        load = <0x84000000>;
+                        os = "linux";
+                        hash {
+                                algo = "sha1";
+                        };
+                };
+        };
+
+        configurations {
+                default = "standard";
+                standard {
+                        description = "Standard Boot";
+                        kernel = "kernel";
+                        ramdisk = "initrd";
+                        hash {
+                                algo = "sha1";
+                        };
+                };
+        };
+};
diff --git a/device/testing/device-samsung-starqltechn/bootscript.sh b/device/testing/device-samsung-starqltechn/bootscript.sh
index 1c50c62be9e871b8a925292d165be13a191849d2..5e445b5047dbf9790049cad9066ffa75dc6d4fb3 100644
--- a/device/testing/device-samsung-starqltechn/bootscript.sh
+++ b/device/testing/device-samsung-starqltechn/bootscript.sh
@@ -1,3 +1,7 @@
+#!/bin/sh
+
+# shellcheck disable=SC2154
+
 setenv bootargs 'console=tty1 loglevel=15 clk_ignore_unused'
 
-bootm $prevbl_initrd_start_addr
+bootm "$image_address"
diff --git a/device/testing/device-samsung-starqltechn/bootscript_android.sh b/device/testing/device-samsung-starqltechn/bootscript_android.sh
new file mode 100644
index 0000000000000000000000000000000000000000..127e519cae5d47a2c5cde7210cff87ef447eb201
--- /dev/null
+++ b/device/testing/device-samsung-starqltechn/bootscript_android.sh
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+# shellcheck disable=SC2154
+
+echo "Booting Android"
+echo "searching for KASLR address..."
+
+addr=0x80000000
+
+until cmp "$relocaddr" "$addr" 0x100; do
+	setexpr addr $addr + 0x1000
+done
+echo "KASLR address is 0x$addr"
+setenv bootm_low "0x$addr"
+setenv bootm_size 0x5000000
+
+fdt addr "$prevbl_initrd_start_addr"
+fdt set "/images/kernel" "load" "<0x$addr>"
+fdt set "/images/kernel" "entry" "<0x$addr>"
+fdt addr "$prevbl_fdt_addr"
+fdt print "/chosen"
+bootm "$image_address#standard $image_address#standard $prevbl_fdt_addr"
diff --git a/device/testing/device-samsung-starqltechn/deviceinfo b/device/testing/device-samsung-starqltechn/deviceinfo
index 63ea8a315363971db9aae09b9ca3cf74070355a3..6f5b9ce9c93b58875df8d0dcc8a56801855b3fca 100644
--- a/device/testing/device-samsung-starqltechn/deviceinfo
+++ b/device/testing/device-samsung-starqltechn/deviceinfo
@@ -26,7 +26,11 @@ deviceinfo_bootimg_dtb_second="false"
 deviceinfo_bootimg_override_payload="u-boot.bin"
 deviceinfo_bootimg_override_payload_compression="gzip"
 deviceinfo_bootimg_override_payload_append_dtb="payload_mock.dtb"
-deviceinfo_bootimg_override_initramfs="boot_image.itb"
+deviceinfo_bootimg_override_initramfs="find_image_and_boot.itb android_boot_image.itb boot_image.itb"
+deviceinfo_bootimg_override_header_info_using_vendor_image="true"
+deviceinfo_bootimg_vendor_android_boot_image="vendor_boot.img"
+deviceinfo_bootimg_vendor_dependent="android_boot_image.itb"
+deviceinfo_bootimg_vendor_device_tree_identifiers="qcom,msm-id\s*=\s*<0x141\s*0x20001>; qcom,board-id\s*=\s*<0x08\s*0x0e>;"
 deviceinfo_flash_offset_base="0x00000000"
 deviceinfo_flash_offset_kernel="0x00008000"
 deviceinfo_flash_offset_ramdisk="0x02000000"
diff --git a/device/testing/device-samsung-starqltechn/find_image_and_boot.its b/device/testing/device-samsung-starqltechn/find_image_and_boot.its
new file mode 100644
index 0000000000000000000000000000000000000000..c315e6d5a0c607bc704f6e432472f8ae7fdeb38c
--- /dev/null
+++ b/device/testing/device-samsung-starqltechn/find_image_and_boot.its
@@ -0,0 +1,32 @@
+/dts-v1/;
+
+/ {
+        description = "Samsung S9 SM-G9600 starqltechn boot script";
+        #address-cells = <1>;
+
+        images {
+                bootscript {
+                        description = "Boot script";
+                        data = /incbin/("find_image_and_boot.sh");
+                        type = "script";
+                        compression = "none";
+                        load = <0x90000000>;
+                        entry = <0x90000000>;
+                        hash {
+                                algo = "sha1";
+                        };
+                };
+
+                 prebootscript {
+                         description = "pre boot script";
+                         data = /incbin/("find_image_and_boot.sh");
+                         type = "script";
+                         compression = "none";
+                         load = <0x90000000>;
+                         entry = <0x90000000>;
+                         hash {
+                                 algo = "sha1";
+                         };
+                 };
+        };
+};
diff --git a/device/testing/device-samsung-starqltechn/find_image_and_boot.sh b/device/testing/device-samsung-starqltechn/find_image_and_boot.sh
new file mode 100644
index 0000000000000000000000000000000000000000..2fffed904285eae950c594c177091f59c7103930
--- /dev/null
+++ b/device/testing/device-samsung-starqltechn/find_image_and_boot.sh
@@ -0,0 +1,54 @@
+#!/bin/sh
+
+# shellcheck disable=SC2154
+# shellcheck disable=SC3046
+# shellcheck disable=SC2035
+# shellcheck disable=SC1090
+
+echo "searching for FIT images..."
+
+ramdisk_addr=0xa2000000
+image_addresses_start=0x80000000
+image_addresses=$image_addresses_start
+image_number=0
+
+doodfeed=0xedfe0dd0
+if itest $ramdisk_addr <= 0xa6001000; then
+	echo "true"
+fi
+
+if itest $ramdisk_addr >= 0xa0001000; then
+	echo "false"
+fi
+
+while itest $ramdisk_addr <= 0xa6001000; do
+	if itest *$ramdisk_addr == $doodfeed; then
+		echo "address at $ramdisk_addr matches"
+		if itest $image_number != 0; then
+			echo "######## image $image_number found at $ramdisk_addr ########"
+			iminfo $ramdisk_addr
+			mw $image_addresses $ramdisk_addr 1
+			setexpr image_addresses $image_addresses + 4
+		fi
+		setexpr image_number $image_number + 1
+	fi
+	setexpr ramdisk_addr $ramdisk_addr + 0x1000
+done
+
+if itest $image_number <= 1; then
+	echo "No images found!"
+fi
+
+if itest "${key_vol_down}" -eq "1"; then
+	echo "key down pressed, booting 2nd image"
+	setexpr image_address $image_addresses_start + 4
+	setexpr image_address *"$image_address"
+	echo "image_address: $image_address"
+	source "$image_address":bootscript
+else
+	echo "key down NOT pressed, booting 1st image"
+	setexpr image_address $image_addresses_start
+	setexpr image_address *"$image_address"
+	echo "image_address: $image_address"
+	source "$image_address":bootscript
+fi