diff --git a/CHANGELOG.md b/CHANGELOG.md
index e5f9c3bdf..e197ee838 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -57,6 +57,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
 
 - Small bugfix in STM32 HAL for SPI
   PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/599
+- HAL GPIO: Improved error checking in `LinuxLibgpioIF::configureGpios(...)`. If a GPIO
+  configuration fails, the function will exit prematurely with a dedicated error code
+  PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/602
 
 # [v4.0.0]
 
diff --git a/hal/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.cpp b/hal/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.cpp
index 3b9a21f7f..f46ad3865 100644
--- a/hal/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.cpp
+++ b/hal/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.cpp
@@ -44,6 +44,7 @@ ReturnValue_t LinuxLibgpioIF::addGpios(GpioCookie* gpioCookie) {
 }
 
 ReturnValue_t LinuxLibgpioIF::configureGpios(GpioMap& mapToAdd) {
+  ReturnValue_t result = RETURN_OK;
   for (auto& gpioConfig : mapToAdd) {
     auto& gpioType = gpioConfig.second->gpioType;
     switch (gpioType) {
@@ -55,7 +56,7 @@ ReturnValue_t LinuxLibgpioIF::configureGpios(GpioMap& mapToAdd) {
         if (regularGpio == nullptr) {
           return GPIO_INVALID_INSTANCE;
         }
-        configureGpioByChip(gpioConfig.first, *regularGpio);
+        result = configureGpioByChip(gpioConfig.first, *regularGpio);
         break;
       }
       case (gpio::GpioTypes::GPIO_REGULAR_BY_LABEL): {
@@ -63,7 +64,7 @@ ReturnValue_t LinuxLibgpioIF::configureGpios(GpioMap& mapToAdd) {
         if (regularGpio == nullptr) {
           return GPIO_INVALID_INSTANCE;
         }
-        configureGpioByLabel(gpioConfig.first, *regularGpio);
+        result = configureGpioByLabel(gpioConfig.first, *regularGpio);
         break;
       }
       case (gpio::GpioTypes::GPIO_REGULAR_BY_LINE_NAME): {
@@ -71,7 +72,7 @@ ReturnValue_t LinuxLibgpioIF::configureGpios(GpioMap& mapToAdd) {
         if (regularGpio == nullptr) {
           return GPIO_INVALID_INSTANCE;
         }
-        configureGpioByLineName(gpioConfig.first, *regularGpio);
+        result = configureGpioByLineName(gpioConfig.first, *regularGpio);
         break;
       }
       case (gpio::GpioTypes::CALLBACK): {
@@ -83,8 +84,11 @@ ReturnValue_t LinuxLibgpioIF::configureGpios(GpioMap& mapToAdd) {
                                gpioCallback->initValue, gpioCallback->callbackArgs);
       }
     }
+    if (result != RETURN_OK) {
+      return GPIO_INIT_FAILED;
+    }
   }
-  return RETURN_OK;
+  return result;
 }
 
 ReturnValue_t LinuxLibgpioIF::configureGpioByLabel(gpioId_t gpioId,
diff --git a/hal/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h b/hal/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
index 7d49e6e20..fcc9c7753 100644
--- a/hal/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
+++ b/hal/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
@@ -29,6 +29,8 @@ class LinuxLibgpioIF : public GpioIF, public SystemObject {
       HasReturnvaluesIF::makeReturnCode(gpioRetvalId, 4);
   static constexpr ReturnValue_t GPIO_DUPLICATE_DETECTED =
       HasReturnvaluesIF::makeReturnCode(gpioRetvalId, 5);
+  static constexpr ReturnValue_t GPIO_INIT_FAILED =
+      HasReturnvaluesIF::makeReturnCode(gpioRetvalId, 6);
 
   LinuxLibgpioIF(object_id_t objectId);
   virtual ~LinuxLibgpioIF();
diff --git a/src/fsfw/datapoollocal/LocalDataPoolManager.cpp b/src/fsfw/datapoollocal/LocalDataPoolManager.cpp
index 6053bd438..781d8f71f 100644
--- a/src/fsfw/datapoollocal/LocalDataPoolManager.cpp
+++ b/src/fsfw/datapoollocal/LocalDataPoolManager.cpp
@@ -787,9 +787,9 @@ ReturnValue_t LocalDataPoolManager::generateSetStructurePacket(sid_t sid, bool i
   // Serialize set packet into store.
   size_t size = 0;
   result = setPacket.serialize(&storePtr, &size, expectedSize, SerializeIF::Endianness::BIG);
-  if(result != HasReturnvaluesIF::RETURN_OK) {
-      ipcStore->deleteData(storeId);
-      return result;
+  if (result != HasReturnvaluesIF::RETURN_OK) {
+    ipcStore->deleteData(storeId);
+    return result;
   }
   if (expectedSize != size) {
     printWarningOrError(sif::OutputTypes::OUT_WARNING, "generateSetStructurePacket",
@@ -806,8 +806,8 @@ ReturnValue_t LocalDataPoolManager::generateSetStructurePacket(sid_t sid, bool i
   }
 
   result = hkQueue->reply(&reply);
-  if(result != HasReturnvaluesIF::RETURN_OK) {
-      ipcStore->deleteData(storeId);
+  if (result != HasReturnvaluesIF::RETURN_OK) {
+    ipcStore->deleteData(storeId);
   }
   return result;
 }
diff --git a/src/fsfw/devicehandlers/DeviceHandlerBase.cpp b/src/fsfw/devicehandlers/DeviceHandlerBase.cpp
index 0e2802ac1..dd9bd5d7d 100644
--- a/src/fsfw/devicehandlers/DeviceHandlerBase.cpp
+++ b/src/fsfw/devicehandlers/DeviceHandlerBase.cpp
@@ -458,16 +458,15 @@ size_t DeviceHandlerBase::getNextReplyLength(DeviceCommandId_t commandId) {
   DeviceCommandId_t replyId = NO_COMMAND_ID;
   DeviceCommandMap::iterator command = cookieInfo.pendingCommand;
   if (command->second.useAlternativeReplyId) {
-	replyId = command->second.alternativeReplyId;
-  }
-  else {
-	replyId = commandId;
+    replyId = command->second.alternativeReplyId;
+  } else {
+    replyId = commandId;
   }
   DeviceReplyIter iter = deviceReplyMap.find(replyId);
   if (iter != deviceReplyMap.end()) {
-	if (iter->second.delayCycles != 0) {
-		return iter->second.replyLen;
-	}
+    if (iter->second.delayCycles != 0) {
+      return iter->second.replyLen;
+    }
   }
   return 0;
 }
diff --git a/src/fsfw/ipc/MessageQueueBase.cpp b/src/fsfw/ipc/MessageQueueBase.cpp
index 1b0934ff3..c43670ed5 100644
--- a/src/fsfw/ipc/MessageQueueBase.cpp
+++ b/src/fsfw/ipc/MessageQueueBase.cpp
@@ -1,9 +1,9 @@
 #include "MessageQueueBase.h"
 
-MessageQueueBase::MessageQueueBase(MessageQueueId_t id, MessageQueueId_t defaultDest,
-    MqArgs* args): id(id) {
+MessageQueueBase::MessageQueueBase(MessageQueueId_t id, MessageQueueId_t defaultDest, MqArgs* args)
+    : id(id) {
   this->defaultDest = defaultDest;
-  if(args != nullptr) {
+  if (args != nullptr) {
     this->args = *args;
   }
 }
@@ -23,35 +23,25 @@ ReturnValue_t MessageQueueBase::reply(MessageQueueMessageIF* message) {
 }
 
 ReturnValue_t MessageQueueBase::receiveMessage(MessageQueueMessageIF* message,
-                                           MessageQueueId_t* receivedFrom) {
+                                               MessageQueueId_t* receivedFrom) {
   ReturnValue_t status = this->receiveMessage(message);
   *receivedFrom = this->last;
   return status;
 }
 
-MessageQueueId_t MessageQueueBase::getLastPartner() const {
-  return last;
-}
+MessageQueueId_t MessageQueueBase::getLastPartner() const { return last; }
 
-MessageQueueId_t MessageQueueBase::getId() const {
-  return id;
-}
+MessageQueueId_t MessageQueueBase::getId() const { return id; }
 
-MqArgs& MessageQueueBase::getMqArgs() {
-  return args;
-}
+MqArgs& MessageQueueBase::getMqArgs() { return args; }
 
 void MessageQueueBase::setDefaultDestination(MessageQueueId_t defaultDestination) {
   this->defaultDest = defaultDestination;
 }
 
-MessageQueueId_t MessageQueueBase::getDefaultDestination() const {
-  return defaultDest;
-}
+MessageQueueId_t MessageQueueBase::getDefaultDestination() const { return defaultDest; }
 
-bool MessageQueueBase::isDefaultDestinationSet() const {
-  return (defaultDest != NO_QUEUE);
-}
+bool MessageQueueBase::isDefaultDestinationSet() const { return (defaultDest != NO_QUEUE); }
 
 ReturnValue_t MessageQueueBase::sendMessage(MessageQueueId_t sendTo, MessageQueueMessageIF* message,
                                             bool ignoreFault) {
diff --git a/src/fsfw/ipc/MessageQueueBase.h b/src/fsfw/ipc/MessageQueueBase.h
index 8313f69ac..942b61217 100644
--- a/src/fsfw/ipc/MessageQueueBase.h
+++ b/src/fsfw/ipc/MessageQueueBase.h
@@ -1,11 +1,11 @@
 #ifndef FSFW_SRC_FSFW_IPC_MESSAGEQUEUEBASE_H_
 #define FSFW_SRC_FSFW_IPC_MESSAGEQUEUEBASE_H_
 
-#include <fsfw/ipc/definitions.h>
 #include <fsfw/ipc/MessageQueueIF.h>
+#include <fsfw/ipc/definitions.h>
 
-class MessageQueueBase: public MessageQueueIF {
-public:
+class MessageQueueBase : public MessageQueueIF {
+ public:
   MessageQueueBase(MessageQueueId_t id, MessageQueueId_t defaultDest, MqArgs* mqArgs);
   virtual ~MessageQueueBase();
 
@@ -17,25 +17,24 @@ public:
   virtual MessageQueueId_t getDefaultDestination() const override;
   virtual bool isDefaultDestinationSet() const override;
   virtual ReturnValue_t sendMessage(MessageQueueId_t sendTo, MessageQueueMessageIF* message,
-      bool ignoreFault) override;
+                                    bool ignoreFault) override;
   virtual ReturnValue_t sendToDefault(MessageQueueMessageIF* message) override;
   virtual ReturnValue_t reply(MessageQueueMessageIF* message) override;
   virtual ReturnValue_t receiveMessage(MessageQueueMessageIF* message,
-      MessageQueueId_t* receivedFrom) override;
-  virtual ReturnValue_t sendToDefaultFrom(MessageQueueMessageIF* message,
-      MessageQueueId_t sentFrom, bool ignoreFault = false) override;
+                                       MessageQueueId_t* receivedFrom) override;
+  virtual ReturnValue_t sendToDefaultFrom(MessageQueueMessageIF* message, MessageQueueId_t sentFrom,
+                                          bool ignoreFault = false) override;
 
   // OSAL specific, forward the abstract function
   virtual ReturnValue_t receiveMessage(MessageQueueMessageIF* message) = 0;
   virtual ReturnValue_t sendMessageFrom(MessageQueueId_t sendTo, MessageQueueMessageIF* message,
                                         MessageQueueId_t sentFrom, bool ignoreFault = false) = 0;
-protected:
+
+ protected:
   MessageQueueId_t id = MessageQueueIF::NO_QUEUE;
   MessageQueueId_t last = MessageQueueIF::NO_QUEUE;
   MessageQueueId_t defaultDest = MessageQueueIF::NO_QUEUE;
   MqArgs args = {};
 };
 
-
-
 #endif /* FSFW_SRC_FSFW_IPC_MESSAGEQUEUEBASE_H_ */
diff --git a/src/fsfw/ipc/MessageQueueIF.h b/src/fsfw/ipc/MessageQueueIF.h
index d7b6889b6..9532b2d61 100644
--- a/src/fsfw/ipc/MessageQueueIF.h
+++ b/src/fsfw/ipc/MessageQueueIF.h
@@ -2,6 +2,7 @@
 #define FSFW_IPC_MESSAGEQUEUEIF_H_
 
 #include <fsfw/ipc/definitions.h>
+
 #include <cstdint>
 
 #include "../returnvalues/HasReturnvaluesIF.h"
@@ -45,7 +46,8 @@ class MessageQueueIF {
   virtual ReturnValue_t reply(MessageQueueMessageIF* message) = 0;
 
   /**
-   * @brief	This function reads available messages from the message queue and returns the sender.
+   * @brief	This function reads available messages from the message queue and returns the
+   * sender.
    * @details
    * It works identically to the other receiveMessage call, but in addition
    * returns the sender's queue id.
diff --git a/src/fsfw/osal/freertos/MessageQueue.h b/src/fsfw/osal/freertos/MessageQueue.h
index 00dfea680..ee3479aaa 100644
--- a/src/fsfw/osal/freertos/MessageQueue.h
+++ b/src/fsfw/osal/freertos/MessageQueue.h
@@ -2,6 +2,7 @@
 #define FSFW_OSAL_FREERTOS_MESSAGEQUEUE_H_
 
 #include <fsfw/ipc/MessageQueueBase.h>
+
 #include "FreeRTOS.h"
 #include "TaskManagement.h"
 #include "fsfw/internalerror/InternalErrorReporterIF.h"
diff --git a/src/fsfw/osal/host/MessageQueue.h b/src/fsfw/osal/host/MessageQueue.h
index bb4f26a10..4020c6dcc 100644
--- a/src/fsfw/osal/host/MessageQueue.h
+++ b/src/fsfw/osal/host/MessageQueue.h
@@ -1,17 +1,17 @@
 #ifndef FRAMEWORK_OSAL_HOST_MESSAGEQUEUE_H_
 #define FRAMEWORK_OSAL_HOST_MESSAGEQUEUE_H_
 
-#include "fsfw/ipc/MessageQueueBase.h"
+#include <memory>
+#include <queue>
+
 #include "fsfw/internalerror/InternalErrorReporterIF.h"
+#include "fsfw/ipc/MessageQueueBase.h"
 #include "fsfw/ipc/MessageQueueIF.h"
 #include "fsfw/ipc/MessageQueueMessage.h"
 #include "fsfw/ipc/MutexIF.h"
 #include "fsfw/ipc/definitions.h"
 #include "fsfw/timemanager/Clock.h"
 
-#include <memory>
-#include <queue>
-
 /**
  * @brief		This class manages sending and receiving of
  * 				message queue messages.
diff --git a/src/fsfw/osal/linux/MessageQueue.h b/src/fsfw/osal/linux/MessageQueue.h
index 8614d101b..108ec797d 100644
--- a/src/fsfw/osal/linux/MessageQueue.h
+++ b/src/fsfw/osal/linux/MessageQueue.h
@@ -61,8 +61,7 @@ class MessageQueue : public MessageQueueBase {
   ReturnValue_t receiveMessage(MessageQueueMessageIF* message) override;
   ReturnValue_t flush(uint32_t* count) override;
   ReturnValue_t sendMessageFrom(MessageQueueId_t sendTo, MessageQueueMessageIF* message,
-                                        MessageQueueId_t sentFrom,
-                                        bool ignoreFault = false) override;
+                                MessageQueueId_t sentFrom, bool ignoreFault = false) override;
 
  protected:
   /**
diff --git a/src/fsfw/osal/rtems/MessageQueue.h b/src/fsfw/osal/rtems/MessageQueue.h
index 4648fdfa5..bb31a5087 100644
--- a/src/fsfw/osal/rtems/MessageQueue.h
+++ b/src/fsfw/osal/rtems/MessageQueue.h
@@ -2,6 +2,7 @@
 #define FSFW_OSAL_RTEMS_MESSAGEQUEUE_H_
 
 #include <fsfw/ipc/MessageQueueBase.h>
+
 #include "RtemsBasic.h"
 #include "fsfw/internalerror/InternalErrorReporterIF.h"
 #include "fsfw/ipc/MessageQueueIF.h"
@@ -52,8 +53,8 @@ class MessageQueue : public MessageQueueBase {
   // Implement non-generic MessageQueueIF functions not handled by MessageQueueBase
   ReturnValue_t flush(uint32_t* count) override;
   ReturnValue_t sendMessageFrom(MessageQueueId_t sendTo, MessageQueueMessageIF* message,
-                                        MessageQueueId_t sentFrom = NO_QUEUE,
-                                        bool ignoreFault = false) override;
+                                MessageQueueId_t sentFrom = NO_QUEUE,
+                                bool ignoreFault = false) override;
 
  private:
   /**
diff --git a/tests/src/fsfw_tests/unit/mocks/MessageQueueMockBase.h b/tests/src/fsfw_tests/unit/mocks/MessageQueueMockBase.h
index c3d08a86e..4236593ef 100644
--- a/tests/src/fsfw_tests/unit/mocks/MessageQueueMockBase.h
+++ b/tests/src/fsfw_tests/unit/mocks/MessageQueueMockBase.h
@@ -4,8 +4,8 @@
 #include <cstring>
 #include <queue>
 
-#include "fsfw/ipc/MessageQueueBase.h"
 #include "fsfw/ipc/CommandMessage.h"
+#include "fsfw/ipc/MessageQueueBase.h"
 #include "fsfw/ipc/MessageQueueIF.h"
 #include "fsfw/ipc/MessageQueueMessage.h"
 #include "fsfw_tests/unit/CatchDefinitions.h"
@@ -13,7 +13,7 @@
 class MessageQueueMockBase : public MessageQueueBase {
  public:
   MessageQueueMockBase()
-   : MessageQueueBase(MessageQueueIF::NO_QUEUE, MessageQueueIF::NO_QUEUE, nullptr) {}
+      : MessageQueueBase(MessageQueueIF::NO_QUEUE, MessageQueueIF::NO_QUEUE, nullptr) {}
 
   uint8_t messageSentCounter = 0;
   bool messageSent = false;