diff --git a/src/boards/Main/Radio/Radio.cpp b/src/boards/Main/Radio/Radio.cpp
index 71926fbfdd2f9cfcab6100098c30f7483d5c4c7e..0597b93d5b84731a158510aecc4ef21ca19b43ea 100644
--- a/src/boards/Main/Radio/Radio.cpp
+++ b/src/boards/Main/Radio/Radio.cpp
@@ -121,8 +121,11 @@ Radio::Radio()
     transceiver =
         new SX1278(Buses::getInstance().spi5, sensors::sx127x::cs::getPin());
 
+    SX1278::Config config = {};
+    config.freq_rf = 412000000;
+
     // Use default configuration
-    transceiver->init({});
+    transceiver->init(config);
 
     enableExternalInterrupt(GPIOF_BASE, 10, InterruptTrigger::RISING_EDGE);
 #endif
diff --git a/src/entrypoints/Groundstation/GUI/GUI.h b/src/entrypoints/Groundstation/GUI/GUI.h
index 78829456052ad3610f426f0c6da73d4f2ade9207..dad98c7f90d1cd7b0ba3673a79de27f6369f61b7 100644
--- a/src/entrypoints/Groundstation/GUI/GUI.h
+++ b/src/entrypoints/Groundstation/GUI/GUI.h
@@ -32,13 +32,23 @@
 std::string format_link_speed(size_t value)
 {
     if (value > 1000000)
-        return fmt::format("{:.2f} mb/s", static_cast<float>(value) / 1000000);
+        return fmt::format("{:.2f} Mb/s", static_cast<float>(value) / 1000000);
     else if (value > 1000)
         return fmt::format("{:.2f} kb/s", static_cast<float>(value) / 1000);
     else
         return fmt::format("{} b/s", value);
 }
 
+std::string format_freq(float value)
+{
+    if (value > 1000000)
+        return fmt::format("{:.2f} MHz", value / 1000000);
+    else if (value > 1000)
+        return fmt::format("{:.2f} kHz", value / 1000);
+    else
+        return fmt::format("{} Hz", value);
+}
+
 class StatsScreen
 {
 public:
@@ -49,6 +59,7 @@ public:
         int sent_count;
         int recv_count;
         float rssi;
+        float fei;
     };
 
     StatsScreen()
@@ -64,12 +75,14 @@ public:
         body.setCell(&lbl_rx_bitrate, 2, 0);
         body.setCell(&lbl_recv_count, 3, 0);
         body.setCell(&lbl_rssi, 4, 0);
+        body.setCell(&lbl_fei, 5, 0);
 
         body.setCell(&tx_bitrate, 0, 1);
         body.setCell(&sent_count, 1, 1);
         body.setCell(&rx_bitrate, 2, 1);
         body.setCell(&recv_count, 3, 1);
         body.setCell(&rssi, 4, 1);
+        body.setCell(&fei, 5, 1);
 
         root.addView(&status, 0.1);
         root.addView(&body, 1.0);
@@ -106,23 +119,26 @@ public:
         recv_count.setText(fmt::format("{}", data.recv_count));
 
         rssi.setText(fmt::format("{} dBm", data.rssi));
+        fei.setText(format_freq(data.fei));
     }
 
     Boardcore::VerticalLayout root{10};
     Boardcore::TextView status{"LOADING"};
 
-    Boardcore::GridLayout body{5, 2};
+    Boardcore::GridLayout body{6, 2};
     Boardcore::TextView lbl_tx_bitrate{"Tx bitrate:"};
     Boardcore::TextView lbl_sent_count{"Packet sent:"};
     Boardcore::TextView lbl_rx_bitrate{"Rx bitrate:"};
     Boardcore::TextView lbl_recv_count{"Packet received:"};
     Boardcore::TextView lbl_rssi{"RSSI:"};
+    Boardcore::TextView lbl_fei{"FEI:"};
 
     Boardcore::TextView tx_bitrate{"0 b/s"};
     Boardcore::TextView sent_count{"0"};
     Boardcore::TextView rx_bitrate{"0 b/s"};
     Boardcore::TextView recv_count{"0"};
     Boardcore::TextView rssi{"0 dBm"};
+    Boardcore::TextView fei{"0 Hz"};
 };
 
 class GUI
diff --git a/src/entrypoints/Groundstation/groundstation-entry.cpp b/src/entrypoints/Groundstation/groundstation-entry.cpp
index 97e802127c75b69b5c1cce28370c30ac311f9520..bf2eeaba6cee1231117b7b75226cc6f8381d3d34 100644
--- a/src/entrypoints/Groundstation/groundstation-entry.cpp
+++ b/src/entrypoints/Groundstation/groundstation-entry.cpp
@@ -62,6 +62,7 @@ struct Stats
     int sent_count = 0;
     int recv_count = 0;
     float rssi     = 0.0f;
+    float fei      = 0.0f;
 
     size_t txBitrate() { return (tx.getAverage() * 1000) / DELTA_T; }
     size_t rxBitrate() { return (rx.getAverage() * 1000) / DELTA_T; }
@@ -74,12 +75,12 @@ void recvLoop()
     while (true)
     {
         int len = sx1278->receive(msg, sizeof(msg));
+        stats.rssi = sx1278->getLastRxRssi();
+        stats.fei = sx1278->getLastRxFei();
         stats.recv_count++;
         stats.cur_rx += len;
-        stats.rssi = sx1278->getRssi();
 
-        if (len > 0)
-            usart->write(msg, len);
+        usart->write(msg, len);
     }
 }
 
@@ -91,14 +92,11 @@ void sendLoop()
     {
         int len = usart->read(msg, sizeof(msg));
 
-        if (len > 0)
-        {
-            ledOn();
-            sx1278->send(msg, len);
-            stats.sent_count++;
-            stats.cur_tx += len;
-            ledOff();
-        }
+        ledOn();
+        sx1278->send(msg, len);
+        stats.sent_count++;
+        stats.cur_tx += len;
+        ledOff();        
     }
 }
 
@@ -138,7 +136,7 @@ int main()
 
     // Run default configuration
     SX1278::Config config;
-    SX1278::Error err;
+    config.freq_rf = 412000000;
 
     SPIBus bus(SPI4);
 #ifdef USE_RA01_PC13
@@ -150,6 +148,7 @@ int main()
     sx1278 = new SX1278(bus, cs);
 
     printf("[sx1278] Configuring sx1278...\n");
+    SX1278::Error err;
     if ((err = sx1278->init(config)) != SX1278::Error::NONE)
     {
         gui->stats_screen.updateError(err);
@@ -185,7 +184,7 @@ int main()
 
         StatsScreen::Data data = {stats.txBitrate() * 8, stats.rxBitrate() * 8,
                                   stats.sent_count, stats.recv_count,
-                                  stats.rssi};
+                                  stats.rssi, stats.fei};
 
         gui->stats_screen.updateStats(data);
         Thread::sleep(DELTA_T);