diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000000000000000000000000000000000000..75d9cb0414d8a3f0d2bd082ac0f0de220a2b8770
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "MAVLink Skyward library"]
+	path = libs/mavlink-skyward-lib
+	url = ../mavlink/mavlink-skyward-lib
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a51f3f9afe933c4e951b06115e3104eafaa2f2ed..337881b84a045bfc3f792a37269c317eeafd1ea2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -20,6 +20,7 @@
 # THE SOFTWARE.
 
 cmake_minimum_required(VERSION 3.16)
+add_subdirectory(libs/mavlink-skyward-lib EXCLUDE_FROM_ALL)
 
 project(SkywardHub)
 
@@ -92,4 +93,9 @@ add_executable(groundstation
     src/entrypoints/groundstation/main.cpp
 )
 target_include_directories(groundstation PRIVATE src/shared)
-target_link_libraries(groundstation PUBLIC Qt5::Widgets Qt5::SerialPort Qt5::PrintSupport)
+target_link_libraries(groundstation PUBLIC
+    Qt5::Widgets
+    Qt5::SerialPort
+    Qt5::PrintSupport
+    Mavlink::Mavlink
+)
diff --git a/libs/mavlink-skyward-lib b/libs/mavlink-skyward-lib
new file mode 160000
index 0000000000000000000000000000000000000000..9befe0e2e801a9d999a89a47013f773c44bf1216
--- /dev/null
+++ b/libs/mavlink-skyward-lib
@@ -0,0 +1 @@
+Subproject commit 9befe0e2e801a9d999a89a47013f773c44bf1216
diff --git a/src/shared/Modules/Mavlink/mavlinkversionheader.h b/src/shared/Modules/Mavlink/mavlinkversionheader.h
index 466d8f770f947711e929782a041c717f9f0b9ba4..3ec786b999e5bcaa7c2babb626d7498db1c843d3 100644
--- a/src/shared/Modules/Mavlink/mavlinkversionheader.h
+++ b/src/shared/Modules/Mavlink/mavlinkversionheader.h
@@ -4,7 +4,7 @@
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wcast-align"
 #pragma GCC diagnostic ignored "-Waddress-of-packed-member"
-#include "mavlink_skyward_lib/mavlink_lib/pyxis/mavlink.h"
+#include <mavlink_lib/pyxis/mavlink.h>
 #pragma GCC diagnostic pop
 
 // static __attribute__((unused)) uint8_t validSysid = 171;