diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4bb168dbf9cdf0d37f7ca9f8505e1080e69bf7d8..e2d327a3722185972d8ad0290231b19f793045fc 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -126,7 +126,7 @@ sbs_target(test-actuators stm32f767zi_automated_antennas)
 
 add_executable(lyra-gs-entry
     src/entrypoints/Groundstation/lyra-gs-entry.cpp
-    ${ANTENNAS} ${GROUNDSTATION_COMMON} ${GROUNDSTATION_AUTOMATED}
+    ${ANTENNAS} ${GROUNDSTATION_COMMON} ${GROUNDSTATION_AUTOMATED} ${GROUNDSTATION_BASE}
 )
 target_include_directories(lyra-gs-entry PRIVATE ${OBSW_INCLUDE_DIRS})
 sbs_target(lyra-gs-entry stm32f767zi_lyra_gs)
diff --git a/src/boards/Groundstation/Automated/Radio/Radio.cpp b/src/boards/Groundstation/Automated/Radio/Radio.cpp
index fcfc6e95e12990044f4d221207aea828c8c69f88..c652e9ea20846be6ebc1e149e39cbd0274e39ad5 100644
--- a/src/boards/Groundstation/Automated/Radio/Radio.cpp
+++ b/src/boards/Groundstation/Automated/Radio/Radio.cpp
@@ -26,7 +26,6 @@
 #include <Groundstation/Automated/Buses.h>
 #include <Groundstation/Automated/Hub.h>
 #include <Groundstation/Common/Ports/Serial.h>
-#include <Groundstation/DipReader.h>
 #include <interfaces-impl/hwmapping.h>
 #include <radio/SX1278/SX1278Frontends.h>
 
@@ -54,23 +53,20 @@ namespace Antennas
 
 bool RadioMain::start()
 {
-    DipReader dipSwitch;
-    DipStatus dipStatus = dipSwitch.readDip();
+    std::unique_ptr<Boardcore::SX1278Fsk> sx1278;
 
     std::unique_ptr<SX1278::ISX1278Frontend> frontend;
 
-    if (dipStatus.hasBackup)
-        frontend = std::make_unique<EbyteFrontend>(radio1::txen::getPin(),
-                                                   radio1::rxen::getPin());
+    if (hasBackup)
+        frontend = std::make_unique<EbyteFrontend>(radio::txen::getPin(),
+                                                   radio::rxen::getPin());
     else
         frontend = std::make_unique<Skyward433Frontend>();
 
-    std::unique_ptr<Boardcore::SX1278Fsk> sx1278 =
-        std::make_unique<Boardcore::SX1278Fsk>(
-            ModuleManager::getInstance().get<Antennas::Buses>()->radio_bus,
-            radio::cs::getPin(), radio::dio0::getPin(), radio::dio1::getPin(),
-            radio::dio3::getPin(), SPI::ClockDivider::DIV_64,
-            std::move(frontend));
+    sx1278 = std::make_unique<Boardcore::SX1278Fsk>(
+        ModuleManager::getInstance().get<Antennas::Buses>()->radio_bus,
+        radio::cs::getPin(), radio::dio0::getPin(), radio::dio1::getPin(),
+        radio::dio3::getPin(), SPI::ClockDivider::DIV_64, std::move(frontend));
 
     // First check if the device is even connected
     bool present = sx1278->checkVersion();
diff --git a/src/boards/Groundstation/Automated/Radio/Radio.h b/src/boards/Groundstation/Automated/Radio/Radio.h
index 4feaa87380a4cec0bfcc8ab73778a6ba2f730dd5..fbf76965629f7aa26c75052b8ca5b00cc71d8691 100644
--- a/src/boards/Groundstation/Automated/Radio/Radio.h
+++ b/src/boards/Groundstation/Automated/Radio/Radio.h
@@ -31,6 +31,15 @@ class RadioMain : public Groundstation::RadioBase, public Boardcore::Module
 {
 public:
     [[nodiscard]] bool start();
+
+    RadioMain(bool hasBackup, uint8_t ipConfig)
+        : hasBackup{hasBackup}, ipConfig{ipConfig} {};
+
+    RadioMain() : hasBackup{false}, ipConfig{0} {};
+
+private:
+    bool hasBackup   = false;
+    uint8_t ipConfig = 0;
 };
 
 }  // namespace Antennas
\ No newline at end of file
diff --git a/src/boards/Groundstation/Base/Radio/Radio.cpp b/src/boards/Groundstation/Base/Radio/Radio.cpp
index 3996b099982afc1f47dbf8363887f5d57b4f8a02..d7c763f90794934f8680e238d38b9704b64a8a99 100644
--- a/src/boards/Groundstation/Base/Radio/Radio.cpp
+++ b/src/boards/Groundstation/Base/Radio/Radio.cpp
@@ -26,7 +26,6 @@
 #include <Groundstation/Base/Buses.h>
 #include <Groundstation/Base/Hub.h>
 #include <Groundstation/Common/Ports/Serial.h>
-#include <Groundstation/DipReader.h>
 #include <radio/SX1278/SX1278Frontends.h>
 
 using namespace Groundstation;
@@ -66,12 +65,10 @@ void __attribute__((used)) MIOSIX_RADIO2_DIO3_IRQ()
 
 bool RadioMain::start()
 {
-    DipReader dipSwitch;
-    DipStatus dipStatus = dipSwitch.readDip();
 
     std::unique_ptr<SX1278::ISX1278Frontend> frontend;
 
-    if (dipStatus.hasBackup)
+    if (hasBackup)
         frontend = std::make_unique<EbyteFrontend>(radio1::txen::getPin(),
                                                    radio1::rxen::getPin());
     else
@@ -111,21 +108,21 @@ bool RadioMain::start()
 
 bool RadioPayload::start()
 {
-#ifdef SKYWARD_GS_PAYLOAD_USE_BACKUP_RF
-    std::unique_ptr<SX1278::ISX1278Frontend> frontend =
-        std::make_unique<EbyteFrontend>(radio2::txen::getPin(),
-                                        radio2::rxen::getPin());
-#else
-    std::unique_ptr<SX1278::ISX1278Frontend> frontend =
-        std::make_unique<Skyward433Frontend>();
-#endif
+    std::unique_ptr<SX1278::ISX1278Frontend> frontend;
+    std::unique_ptr<Boardcore::SX1278Fsk> sx1278;
+    if (hasBackup)
+        frontend = std::make_unique<EbyteFrontend>(radio2::txen::getPin(),
+                                                   radio2::rxen::getPin());
+    else
+    {
+        frontend = std::make_unique<Skyward433Frontend>();
 
-    std::unique_ptr<Boardcore::SX1278Fsk> sx1278 =
-        std::make_unique<Boardcore::SX1278Fsk>(
+        sx1278 = std::make_unique<Boardcore::SX1278Fsk>(
             ModuleManager::getInstance().get<Buses>()->radio2_bus,
             radio2::cs::getPin(), radio2::dio0::getPin(),
             radio2::dio1::getPin(), radio2::dio3::getPin(),
             SPI::ClockDivider::DIV_64, std::move(frontend));
+    }
 
     // First check if the device is even connected
     bool present = sx1278->checkVersion();
diff --git a/src/boards/Groundstation/Base/Radio/Radio.h b/src/boards/Groundstation/Base/Radio/Radio.h
index e09d207c9166a97403167b204dc25681b059cc8e..9e488159641357278d7ecd66392fd2beb11578db 100644
--- a/src/boards/Groundstation/Base/Radio/Radio.h
+++ b/src/boards/Groundstation/Base/Radio/Radio.h
@@ -31,12 +31,30 @@ class RadioMain : public Groundstation::RadioBase, public Boardcore::Module
 {
 public:
     [[nodiscard]] bool start();
+
+    RadioMain(bool hasBackup, uint8_t ipConfig)
+        : hasBackup{hasBackup}, ipConfig{ipConfig} {};
+
+    RadioMain() : hasBackup{false}, ipConfig{0} {};
+
+private:
+    bool hasBackup   = false;
+    uint8_t ipConfig = 0;
 };
 
 class RadioPayload : public Groundstation::RadioBase, public Boardcore::Module
 {
 public:
     [[nodiscard]] bool start();
+
+    RadioPayload(bool hasBackup, uint8_t ipConfig)
+        : hasBackup{hasBackup}, ipConfig{ipConfig} {};
+
+    RadioPayload() : hasBackup{false}, ipConfig{0} {};
+
+private:
+    bool hasBackup   = false;
+    uint8_t ipConfig = 0;
 };
 
 }  // namespace GroundstationBase
\ No newline at end of file
diff --git a/src/boards/Groundstation/DipReader.h b/src/boards/Groundstation/DipReader.h
index 5681b6f297fd9805a2cc5cd6749df0b410d8e63b..ad6878677e8386935dfbd695a5dd7f0c5d2cfd17 100644
--- a/src/boards/Groundstation/DipReader.h
+++ b/src/boards/Groundstation/DipReader.h
@@ -20,6 +20,7 @@
  * THE SOFTWARE.
  */
 
+#include <interfaces-impl/hwmapping.h>
 #include <miosix.h>
 
 /**
@@ -29,12 +30,7 @@ struct DipStatus
 {
     bool isARP;
     bool hasBackup;
-    bool ip0;
-    bool ip1;
-    bool ip2;
-    bool ip3;
-    bool ip4;
-    bool ip5;
+    uint8_t ipConfig;
 };
 
 /**
@@ -46,6 +42,7 @@ public:
     static DipStatus readDip()
     {
         DipStatus dipReading;
+        dipReading.ipConfig = 0;
 
         // Write to the shift register (CS == Not LD)
         miosix::dipSwitch::sh::low();
@@ -58,12 +55,12 @@ public:
         // Read first register GS(0)/ARP(1)
         dipReading.isARP     = readBit();
         dipReading.hasBackup = readBit();
-        dipReading.ip0       = readBit();
-        dipReading.ip1       = readBit();
-        dipReading.ip2       = readBit();
-        dipReading.ip3       = readBit();
-        dipReading.ip4       = readBit();
-        dipReading.ip5       = readBit();
+        dipReading.ipConfig |= readBit();
+        dipReading.ipConfig |= readBit() << 1;
+        dipReading.ipConfig |= readBit() << 2;
+        dipReading.ipConfig |= readBit() << 3;
+        dipReading.ipConfig |= readBit() << 4;
+        dipReading.ipConfig |= readBit() << 5;
 
         return dipReading;
     }