diff --git a/src/shared/drivers/canbus/CanProtocol/CanProtocol.cpp b/src/shared/drivers/canbus/CanProtocol/CanProtocol.cpp
index c2714aedf1c103ccf7343572468b60ad4a1fbc99..a58beed636eede8a6ca3be391db3033ccb0dd14d 100644
--- a/src/shared/drivers/canbus/CanProtocol/CanProtocol.cpp
+++ b/src/shared/drivers/canbus/CanProtocol/CanProtocol.cpp
@@ -30,8 +30,9 @@ namespace Boardcore
 namespace Canbus
 {
 
-CanProtocol::CanProtocol(CanbusDriver* can, MsgHandler onReceive)
-    : can(can), onReceive(onReceive)
+CanProtocol::CanProtocol(CanbusDriver* can, MsgHandler onReceive,
+                         miosix::Priority threadPriority)
+    : can(can), onReceive(onReceive), threadPriority(threadPriority)
 {
 }
 
@@ -46,7 +47,7 @@ bool CanProtocol::start()
     if (!sndStarted)
     {
         sndThread = miosix::Thread::create(
-            sndLauncher, skywardStack(4 * 1024), miosix::MAIN_PRIORITY,
+            sndLauncher, skywardStack(4 * 1024), threadPriority,
             reinterpret_cast<void*>(this), miosix::Thread::JOINABLE);
 
         if (sndThread != nullptr)
@@ -59,7 +60,7 @@ bool CanProtocol::start()
     if (!rcvStarted)
     {
         rcvThread = miosix::Thread::create(rcvLauncher, skywardStack(4 * 1024),
-                                           miosix::MAIN_PRIORITY,
+                                           threadPriority,
                                            reinterpret_cast<void*>(this));
 
         if (rcvThread != nullptr)
diff --git a/src/shared/drivers/canbus/CanProtocol/CanProtocol.h b/src/shared/drivers/canbus/CanProtocol/CanProtocol.h
index 3df511ecd13d5e11a4387707a5cd0ec1c779a70a..0f437a53d53025922eaa34ec4de3224736d7c17a 100644
--- a/src/shared/drivers/canbus/CanProtocol/CanProtocol.h
+++ b/src/shared/drivers/canbus/CanProtocol/CanProtocol.h
@@ -55,7 +55,8 @@ public:
      *
      * @param can Pointer to a CanbusDriver object.
      */
-    CanProtocol(CanbusDriver* can, MsgHandler onReceive);
+    CanProtocol(CanbusDriver* can, MsgHandler onReceive,
+                miosix::Priority threadPriority);
 
     /**
      * @brief Start the receiving and sending threads.
@@ -180,6 +181,7 @@ private:
 
     miosix::Thread* sndThread = nullptr;
     miosix::Thread* rcvThread = nullptr;
+    miosix::Priority threadPriority;
 
     SyncCircularBuffer<CanMessage, 10> outQueue;
 
diff --git a/src/tests/drivers/canbus/CanProtocol/test-can-protocol.cpp b/src/tests/drivers/canbus/CanProtocol/test-can-protocol.cpp
index 686ebd1840495e3dce8eceb98c6c509ec4fac0fe..799338d4d17b720ec047d4ad65f7221f34c9bf32 100644
--- a/src/tests/drivers/canbus/CanProtocol/test-can-protocol.cpp
+++ b/src/tests/drivers/canbus/CanProtocol/test-can-protocol.cpp
@@ -70,7 +70,7 @@ int main()
     CanbusDriver* driver2 = new CanbusDriver(CAN2, config, bitTiming);
 
     // // Prepare the can driver
-    CanProtocol protocol(driver2, print);
+    CanProtocol protocol(driver2, print, miosix::MAIN_PRIORITY);
 
     // Add a filter to allow every message
     Mask32FilterBank f2(0, 0, 1, 1, 0, 0, 0);