diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 2b624ce25b82fb2ac389a3412999e66d6af9f2db..40dada039c503b488d11c9aa41cf1fdd35c1b68d 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -34,15 +34,13 @@ build-flasher:
   stage: build-flasher
   script:
     - mkdir flasher
-    - cd ..
-    - git clone https://gitlab.scd31.com/cats/firmware-flasher
-    - cd firmware-flasher
-    - cp ../mobile-transceiver-software/firmware.bin firmware.bin
+    - cd firmware-flasher # cd into submodule
+    - cp ../firmware.bin firmware.bin
     - cargo build --release --target arm-unknown-linux-gnueabihf
     - cargo build --release --target x86_64-pc-windows-gnu
-    - cp target/arm-unknown-linux-gnueabihf/release/stm32-firmware-flasher ../mobile-transceiver-software/flasher/flasher-linux
-    - arm-linux-gnueabihf-strip ../mobile-transceiver-software/flasher/flasher-linux
-    - cp target/x86_64-pc-windows-gnu/release/stm32-firmware-flasher.exe ../mobile-transceiver-software/flasher/flasher-windows.exe
+    - cp target/arm-unknown-linux-gnueabihf/release/stm32-firmware-flasher ../flasher/flasher-linux
+    - arm-linux-gnueabihf-strip ../flasher/flasher-linux
+    - cp target/x86_64-pc-windows-gnu/release/stm32-firmware-flasher.exe ../flasher/flasher-windows.exe
   artifacts:
     paths:
       - flasher/*
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000000000000000000000000000000000000..99effa4abab547a0f7100d446330110223540b95
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "firmware-flasher"]
+	path = firmware-flasher
+	url = https://gitlab.scd31.com/cats/firmware-flasher
diff --git a/firmware-flasher b/firmware-flasher
new file mode 160000
index 0000000000000000000000000000000000000000..87fb2352473381232e46592a75f6876a816cc171
--- /dev/null
+++ b/firmware-flasher
@@ -0,0 +1 @@
+Subproject commit 87fb2352473381232e46592a75f6876a816cc171