diff --git a/src/fsfw/power/CMakeLists.txt b/src/fsfw/power/CMakeLists.txt
index 10e4a44d..e195b1c0 100644
--- a/src/fsfw/power/CMakeLists.txt
+++ b/src/fsfw/power/CMakeLists.txt
@@ -4,4 +4,5 @@ target_sources(${LIB_FSFW_NAME} PRIVATE
     PowerSensor.cpp
     PowerSwitcher.cpp
     DummyPowerSwitcher.cpp
+    PowerSwitcherComponent.cpp
 )
\ No newline at end of file
diff --git a/src/fsfw/power/DummyPowerSwitcher.cpp b/src/fsfw/power/DummyPowerSwitcher.cpp
index 799d49aa..48ab22c6 100644
--- a/src/fsfw/power/DummyPowerSwitcher.cpp
+++ b/src/fsfw/power/DummyPowerSwitcher.cpp
@@ -17,28 +17,28 @@ void DummyPowerSwitcher::setInitialFusesList(std::vector<ReturnValue_t> fuseList
 }
 
 ReturnValue_t DummyPowerSwitcher::sendSwitchCommand(power::Switch_t switchNr, ReturnValue_t onOff) {
-  if (switchNr < switcherList.capacity()) {
+  if (switchNr < switcherList.size()) {
     switcherList[switchNr] = onOff;
   }
   return RETURN_FAILED;
 }
 
 ReturnValue_t DummyPowerSwitcher::sendFuseOnCommand(uint8_t fuseNr) {
-  if (fuseNr < fuseList.capacity()) {
+  if (fuseNr < fuseList.size()) {
     fuseList[fuseNr] = FUSE_ON;
   }
   return RETURN_FAILED;
 }
 
 ReturnValue_t DummyPowerSwitcher::getSwitchState(power::Switch_t switchNr) const {
-  if (switchNr < switcherList.capacity()) {
+  if (switchNr < switcherList.size()) {
     return switcherList[switchNr];
   }
   return HasReturnvaluesIF::RETURN_FAILED;
 }
 
 ReturnValue_t DummyPowerSwitcher::getFuseState(uint8_t fuseNr) const {
-  if (fuseNr < fuseList.capacity()) {
+  if (fuseNr < fuseList.size()) {
     return fuseList[fuseNr];
   }
   return HasReturnvaluesIF::RETURN_FAILED;
diff --git a/src/fsfw/power/PowerSensor.cpp b/src/fsfw/power/PowerSensor.cpp
index e73b12d0..08ff4724 100644
--- a/src/fsfw/power/PowerSensor.cpp
+++ b/src/fsfw/power/PowerSensor.cpp
@@ -15,8 +15,7 @@ PowerSensor::PowerSensor(object_id_t objectId, sid_t setId, VariableIds ids, Def
                    limits.currentMin, limits.currentMax, events.currentLow, events.currentHigh),
       voltageLimit(objectId, MODULE_ID_VOLTAGE, ids.pidVoltage, confirmationCount,
                    limits.voltageMin, limits.voltageMax, events.voltageLow, events.voltageHigh) {
-  commandQueue =
-      QueueFactory::instance()->createMessageQueue(3, MessageQueueMessage::MAX_MESSAGE_SIZE);
+  commandQueue = QueueFactory::instance()->createMessageQueue();
 }
 
 PowerSensor::~PowerSensor() { QueueFactory::instance()->deleteMessageQueue(commandQueue); }
diff --git a/src/fsfw/power/PowerSwitcherComponent.cpp b/src/fsfw/power/PowerSwitcherComponent.cpp
new file mode 100644
index 00000000..5dda02c3
--- /dev/null
+++ b/src/fsfw/power/PowerSwitcherComponent.cpp
@@ -0,0 +1,108 @@
+#include "PowerSwitcherComponent.h"
+
+#include <fsfw/ipc/QueueFactory.h>
+#include <fsfw/power/PowerSwitchIF.h>
+
+PowerSwitcherComponent::PowerSwitcherComponent(object_id_t objectId, PowerSwitchIF* pwrSwitcher, power::Switch_t pwrSwitch)
+  : SystemObject(objectId), switcher(pwrSwitcher, pwrSwitch), modeHelper(this),
+    healthHelper(this, objectId) {
+  queue = QueueFactory::instance()->createMessageQueue();
+}
+
+ReturnValue_t PowerSwitcherComponent::performOperation(uint8_t opCode) {
+  ReturnValue_t result;
+  CommandMessage command;
+
+  for (result = queue->receiveMessage(&command); result == RETURN_OK;
+       result = queue->receiveMessage(&command)) {
+    result = healthHelper.handleHealthCommand(&command);
+    if (result == RETURN_OK) {
+      continue;
+    }
+
+    result = modeHelper.handleModeCommand(&command);
+    if (result == RETURN_OK) {
+      continue;
+    }
+  }
+  if(switcher.active()) {
+    switcher.doStateMachine();
+    auto currState = switcher.getState();
+    if (currState == PowerSwitcher::SWITCH_IS_OFF) {
+      setMode(MODE_OFF, 0);
+    } else if(currState == PowerSwitcher::SWITCH_IS_ON) {
+      setMode(MODE_ON, 0);
+    }
+  }
+  return RETURN_OK;
+}
+
+ReturnValue_t PowerSwitcherComponent::initialize() {
+  ReturnValue_t result = modeHelper.initialize();
+  if(result != HasReturnvaluesIF::RETURN_OK) {
+    return result;
+  }
+  result = healthHelper.initialize();
+  if(result != HasReturnvaluesIF::RETURN_OK) {
+    return result;
+  }
+  return SystemObject::initialize();
+}
+
+MessageQueueId_t PowerSwitcherComponent::getCommandQueue() const {
+  return queue->getId();
+}
+
+void PowerSwitcherComponent::getMode(Mode_t *mode, Submode_t *submode) {
+  *mode = this->mode;
+  *submode = this->submode;
+}
+
+ReturnValue_t PowerSwitcherComponent::setHealth(HealthState health) {
+  healthHelper.setHealth(health);
+  return RETURN_OK;
+}
+
+ReturnValue_t PowerSwitcherComponent::checkModeCommand(Mode_t mode, Submode_t submode,
+    uint32_t *msToReachTheMode) {
+  *msToReachTheMode = 5000;
+  if(mode != MODE_ON and mode != MODE_OFF) {
+    return TRANS_NOT_ALLOWED;
+  }
+  return RETURN_OK;
+}
+
+void PowerSwitcherComponent::startTransition(Mode_t mode, Submode_t submode) {
+  if(mode == MODE_OFF) {
+    switcher.turnOff(true);
+    switcher.doStateMachine();
+    if(switcher.getState() == PowerSwitcher::SWITCH_IS_OFF) {
+      setMode(MODE_OFF, 0);
+    }
+  } else if (mode == MODE_ON) {
+    switcher.turnOn(true);
+    switcher.doStateMachine();
+    if(switcher.getState() == PowerSwitcher::SWITCH_IS_ON) {
+      setMode(MODE_ON, 0);
+    }
+  }
+}
+
+void PowerSwitcherComponent::setToExternalControl() {
+  healthHelper.setHealth(HasHealthIF::EXTERNAL_CONTROL);
+}
+
+void PowerSwitcherComponent::announceMode(bool recursive) {
+  triggerEvent(MODE_INFO, mode, submode);
+}
+
+void PowerSwitcherComponent::setMode(Mode_t newMode, Submode_t newSubmode) {
+  this->mode = newMode;
+  this->submode = newSubmode;
+  modeHelper.modeChanged(mode, submode);
+  announceMode(false);
+}
+
+HasHealthIF::HealthState PowerSwitcherComponent::getHealth() {
+  return healthHelper.getHealth();
+}
diff --git a/src/fsfw/power/PowerSwitcherComponent.h b/src/fsfw/power/PowerSwitcherComponent.h
new file mode 100644
index 00000000..3a075c12
--- /dev/null
+++ b/src/fsfw/power/PowerSwitcherComponent.h
@@ -0,0 +1,64 @@
+#ifndef _FSFW_POWER_POWERSWITCHERCOMPONENT_H_
+#define _FSFW_POWER_POWERSWITCHERCOMPONENT_H_
+
+#include <fsfw/health/HasHealthIF.h>
+#include <fsfw/health/HealthHelper.h>
+#include <fsfw/modes/HasModesIF.h>
+#include <fsfw/modes/ModeHelper.h>
+#include <fsfw/objectmanager/SystemObject.h>
+#include <fsfw/power/definitions.h>
+#include <fsfw/power/PowerSwitcher.h>
+#include <fsfw/tasks/ExecutableObjectIF.h>
+
+class PowerSwitchIF;
+
+/**
+ * @brief Allows to create an power switch object with its own mode and health
+ * @details
+ * This basic component allows to create an object which is solely responsible for managing a
+ * switch. It also has a mode and a health by implementing the respective interface components
+ * which allows integrating this component into a system mode tree.
+ *
+ * Commanding this component to MODE_OFF will cause the switcher to turn the switch off while
+ * commanding in to MODE_ON will cause the switcher to turn the switch on.
+ */
+class PowerSwitcherComponent:
+    public SystemObject,
+    public HasReturnvaluesIF,
+    public ExecutableObjectIF,
+    public HasModesIF,
+    public HasHealthIF {
+public:
+  PowerSwitcherComponent(object_id_t objectId, PowerSwitchIF* pwrSwitcher,
+      power::Switch_t pwrSwitch);
+
+private:
+
+  MessageQueueIF* queue = nullptr;
+  PowerSwitcher switcher;
+
+  Mode_t mode = MODE_OFF;
+  Submode_t submode = 0;
+
+  ModeHelper modeHelper;
+  HealthHelper healthHelper;
+
+  void setMode(Mode_t newMode, Submode_t newSubmode);
+
+  virtual ReturnValue_t performOperation(uint8_t opCode) override;
+
+  ReturnValue_t initialize() override;
+
+  MessageQueueId_t getCommandQueue() const override;
+  void getMode(Mode_t *mode, Submode_t *submode) override;
+  ReturnValue_t checkModeCommand(Mode_t mode, Submode_t submode,
+                                         uint32_t *msToReachTheMode) override;
+  void startTransition(Mode_t mode, Submode_t submode) override;
+  void setToExternalControl() override;
+  void announceMode(bool recursive) override;
+
+  ReturnValue_t setHealth(HealthState health) override;
+  HasHealthIF::HealthState getHealth() override;
+};
+
+#endif /* _FSFW_POWER_POWERSWITCHERCOMPONENT_H_ */