diff --git a/examples/hal/servo/CMakeLists.txt b/examples/hal/servo/CMakeLists.txt
index 07b5202a7..b3d73df8e 100644
--- a/examples/hal/servo/CMakeLists.txt
+++ b/examples/hal/servo/CMakeLists.txt
@@ -4,6 +4,6 @@ add_rofi_firmware(hal_example_servo.elf
     FLASH_SIZE 4MB
     SOURCES main.cpp)
 target_link_libraries(hal_example_servo.elf
-    idf::esp32 idf::freertos idf::spi_flash rofi::hal)
+    idf::esp32 idf::freertos idf::spi_flash esp32++ rofi::hal::esp32)
 set_partition_table(hal_example_servo.elf partitions.csv)
 
diff --git a/hardwareModules/universalModule/software/esp32/dynamixelConfigurator/CMakeLists.txt b/hardwareModules/universalModule/software/esp32/dynamixelConfigurator/CMakeLists.txt
index 3e9bdfc8f..deb5ae282 100644
--- a/hardwareModules/universalModule/software/esp32/dynamixelConfigurator/CMakeLists.txt
+++ b/hardwareModules/universalModule/software/esp32/dynamixelConfigurator/CMakeLists.txt
@@ -2,6 +2,6 @@ add_rofi_firmware(dynamixelConfigurator.elf
     FLASH_SIZE 4MB
     SOURCES main.cpp)
 target_link_libraries(dynamixelConfigurator.elf
-    idf::esp32 idf::freertos idf::spi_flash idf::console rofi::hal
+    idf::esp32 idf::freertos idf::spi_flash idf::console esp32++ rofi::hal::esp32
     magic_enum libfort::fort)
 set_partition_table(dynamixelConfigurator.elf partitions.csv)
diff --git a/softwareComponents/esp32++/CMakeLists.txt b/softwareComponents/esp32++/CMakeLists.txt
new file mode 100644
index 000000000..ac85b1cc1
--- /dev/null
+++ b/softwareComponents/esp32++/CMakeLists.txt
@@ -0,0 +1,7 @@
+file(GLOB_RECURSE SRC src/*.cpp)
+
+add_library(esp32++ ${SRC})
+set_property(TARGET esp32++ PROPERTY CXX_STANDARD 17)
+target_include_directories(esp32++ PUBLIC include)
+target_link_libraries(esp32++ PUBLIC idf::driver atoms)
+target_compile_options(esp32++ PUBLIC -mtext-section-literals -mlongcalls)
diff --git a/softwareComponents/rofiHalEsp32/src/espDriver/gpio.hpp b/softwareComponents/esp32++/include/espDriver/gpio.hpp
similarity index 100%
rename from softwareComponents/rofiHalEsp32/src/espDriver/gpio.hpp
rename to softwareComponents/esp32++/include/espDriver/gpio.hpp
diff --git a/softwareComponents/rofiHalEsp32/src/espDriver/spi.hpp b/softwareComponents/esp32++/include/espDriver/spi.hpp
similarity index 99%
rename from softwareComponents/rofiHalEsp32/src/espDriver/spi.hpp
rename to softwareComponents/esp32++/include/espDriver/spi.hpp
index d4403ab0c..e3d006347 100644
--- a/softwareComponents/rofiHalEsp32/src/espDriver/spi.hpp
+++ b/softwareComponents/esp32++/include/espDriver/spi.hpp
@@ -118,4 +118,4 @@ void spiWrite( spi_device_handle_t dev, uint8_t ( &what )[ size ] ) {
     spi_device_transmit( dev, &t );
 }
 
-} // namespace rofi::esp32
\ No newline at end of file
+} // namespace rofi::esp32
diff --git a/softwareComponents/rofiHalEsp32/src/freeRTOS.hpp b/softwareComponents/esp32++/include/freeRTOS.hpp
similarity index 99%
rename from softwareComponents/rofiHalEsp32/src/freeRTOS.hpp
rename to softwareComponents/esp32++/include/freeRTOS.hpp
index 411880915..404c548fb 100644
--- a/softwareComponents/rofiHalEsp32/src/freeRTOS.hpp
+++ b/softwareComponents/esp32++/include/freeRTOS.hpp
@@ -357,4 +357,4 @@ class Timer {
     TimerHandle_t _t;
 };
 
-} // namespace rtos
\ No newline at end of file
+} // namespace rtos
diff --git a/softwareComponents/rofiHalEsp32/src/logging.hpp b/softwareComponents/esp32++/include/logging.hpp
similarity index 99%
rename from softwareComponents/rofiHalEsp32/src/logging.hpp
rename to softwareComponents/esp32++/include/logging.hpp
index 343eaee8f..8a17960b7 100644
--- a/softwareComponents/rofiHalEsp32/src/logging.hpp
+++ b/softwareComponents/esp32++/include/logging.hpp
@@ -52,4 +52,3 @@ void error(const std::string_view& message,
 }
 
 } // namespace rofi::log
-
diff --git a/softwareComponents/rofiHalEsp32/src/peripherals/dynamixel.hpp b/softwareComponents/esp32++/include/peripherals/dynamixel.hpp
similarity index 100%
rename from softwareComponents/rofiHalEsp32/src/peripherals/dynamixel.hpp
rename to softwareComponents/esp32++/include/peripherals/dynamixel.hpp
diff --git a/softwareComponents/rofiHalEsp32/src/peripherals/dynamixel/packet.hpp b/softwareComponents/esp32++/include/peripherals/dynamixel/packet.hpp
similarity index 100%
rename from softwareComponents/rofiHalEsp32/src/peripherals/dynamixel/packet.hpp
rename to softwareComponents/esp32++/include/peripherals/dynamixel/packet.hpp
diff --git a/softwareComponents/rofiHalEsp32/src/peripherals/herculex.hpp b/softwareComponents/esp32++/include/peripherals/herculex.hpp
similarity index 100%
rename from softwareComponents/rofiHalEsp32/src/peripherals/herculex.hpp
rename to softwareComponents/esp32++/include/peripherals/herculex.hpp
diff --git a/softwareComponents/rofiHalEsp32/src/espDriver/gpio.cpp b/softwareComponents/esp32++/src/gpio.cpp
similarity index 91%
rename from softwareComponents/rofiHalEsp32/src/espDriver/gpio.cpp
rename to softwareComponents/esp32++/src/gpio.cpp
index 2664bc207..b773b714f 100644
--- a/softwareComponents/rofiHalEsp32/src/espDriver/gpio.cpp
+++ b/softwareComponents/esp32++/src/gpio.cpp
@@ -1,4 +1,4 @@
-#include "gpio.hpp"
+#include "espDriver/gpio.hpp"
 
 std::ostream& operator<<( std::ostream& o, gpio_config_t s ) {
     o << "pin_bit_mask: " << s.pin_bit_mask << "\n";
diff --git a/softwareComponents/rofiHalEsp32/src/espDriver/spi.cpp b/softwareComponents/esp32++/src/spi.cpp
similarity index 97%
rename from softwareComponents/rofiHalEsp32/src/espDriver/spi.cpp
rename to softwareComponents/esp32++/src/spi.cpp
index 597d714f4..7afb102f6 100644
--- a/softwareComponents/rofiHalEsp32/src/espDriver/spi.cpp
+++ b/softwareComponents/esp32++/src/spi.cpp
@@ -1,4 +1,4 @@
-#include "spi.hpp"
+#include "espDriver/spi.hpp"
 
 std::ostream& rofi::esp32::operator<<( std::ostream& o, spi_bus_config_t s ) {
     o << "mosi_io_num: " << s.mosi_io_num << "\n";
diff --git a/softwareComponents/rofiHalEsp32/test-logic/CMakeLists.txt b/softwareComponents/esp32++/test-logic/CMakeLists.txt
similarity index 61%
rename from softwareComponents/rofiHalEsp32/test-logic/CMakeLists.txt
rename to softwareComponents/esp32++/test-logic/CMakeLists.txt
index 445c8aa1b..7d25dec5e 100644
--- a/softwareComponents/rofiHalEsp32/test-logic/CMakeLists.txt
+++ b/softwareComponents/esp32++/test-logic/CMakeLists.txt
@@ -1,9 +1,9 @@
 cmake_minimum_required(VERSION 3.11)
 
 if("${TARGET}" STREQUAL "esp32")
-    message(FATAL_ERROR "The logic-tests are not intendet to be compiled for ESP32")
+    message(FATAL_ERROR "The logic-tests are not intended to be compiled for ESP32")
 endif()
 
 add_executable(test-rofiHalEsp32 testPacket.cpp)
 target_link_libraries(test-rofiHalEsp32 Catch2WithMain)
-target_include_directories(test-rofiHalEsp32 PUBLIC ../src)
+target_include_directories(test-rofiHalEsp32 PRIVATE ../include)
diff --git a/softwareComponents/rofiHalEsp32/test-logic/testPacket.cpp b/softwareComponents/esp32++/test-logic/testPacket.cpp
similarity index 99%
rename from softwareComponents/rofiHalEsp32/test-logic/testPacket.cpp
rename to softwareComponents/esp32++/test-logic/testPacket.cpp
index 815aa7df5..dd7a382d0 100644
--- a/softwareComponents/rofiHalEsp32/test-logic/testPacket.cpp
+++ b/softwareComponents/esp32++/test-logic/testPacket.cpp
@@ -113,4 +113,4 @@ TEST_CASE( "Ping packet parsing" ) {
 
     std::vector< uint8_t > pData( p.raw(), p.raw() + p.rawSize() );
     REQUIRE( ref == pData );
-}
\ No newline at end of file
+}
diff --git a/softwareComponents/rofiHalEsp32/CMakeLists.txt b/softwareComponents/rofiHalEsp32/CMakeLists.txt
index 0f4f3a0f5..d51ef2038 100644
--- a/softwareComponents/rofiHalEsp32/CMakeLists.txt
+++ b/softwareComponents/rofiHalEsp32/CMakeLists.txt
@@ -1,9 +1,9 @@
 file(GLOB_RECURSE SRC src/*.cpp src/*.c)
 
 add_library(rofi_hal_esp32 ${SRC})
-target_include_directories(rofi_hal_esp32 PUBLIC src)
 set_property(TARGET rofi_hal_esp32 PROPERTY CXX_STANDARD 17)
-target_link_libraries(rofi_hal_esp32 PUBLIC idf::driver atoms rofi::hal::inc)
+target_link_libraries(rofi_hal_esp32 PRIVATE esp32++ atoms)
+target_link_libraries(rofi_hal_esp32 PUBLIC rofi::hal::inc)
 target_compile_options(rofi_hal_esp32 PUBLIC -mtext-section-literals -mlongcalls)
 
 add_library(rofi::hal::esp32 ALIAS rofi_hal_esp32)
diff --git a/softwareComponents/rofiHalEsp32/src/bsp.hpp b/softwareComponents/rofiHalEsp32/src/bsp.hpp
index e632183fc..7f29bcf29 100644
--- a/softwareComponents/rofiHalEsp32/src/bsp.hpp
+++ b/softwareComponents/rofiHalEsp32/src/bsp.hpp
@@ -9,4 +9,4 @@
     #include "bsp/v0.2.hpp"
 #else
     #error "Unsupported Universal Module board version"
-#endif
\ No newline at end of file
+#endif
diff --git a/softwareComponents/rofiHalEsp32/src/bsp/v0.2.hpp b/softwareComponents/rofiHalEsp32/src/bsp/v0.2.hpp
index 10cd81c6d..6709d3a31 100644
--- a/softwareComponents/rofiHalEsp32/src/bsp/v0.2.hpp
+++ b/softwareComponents/rofiHalEsp32/src/bsp/v0.2.hpp
@@ -32,4 +32,4 @@ inline std::string errorName( dynamixel::HardwareError e ) {
 }
 
 
-}; // rofi::hal::bsp
\ No newline at end of file
+} // rofi::hal::bsp
diff --git a/softwareComponents/rofiHalEsp32/src/cGlue.c b/softwareComponents/rofiHalEsp32/src/cGlue.c
index c53e01483..d02e06ea7 100644
--- a/softwareComponents/rofiHalEsp32/src/cGlue.c
+++ b/softwareComponents/rofiHalEsp32/src/cGlue.c
@@ -3,4 +3,4 @@
 wifi_init_config_t getDefaultWifiCfg() {
     wifi_init_config_t t = WIFI_INIT_CONFIG_DEFAULT();
     return t;
-}
\ No newline at end of file
+}
diff --git a/softwareComponents/rofiHalEsp32/src/rofi_hal.cpp b/softwareComponents/rofiHalEsp32/src/rofi_hal.cpp
index 25ed37113..914cbe37f 100644
--- a/softwareComponents/rofiHalEsp32/src/rofi_hal.cpp
+++ b/softwareComponents/rofiHalEsp32/src/rofi_hal.cpp
@@ -20,7 +20,7 @@
 #include <espDriver/gpio.hpp>
 #include <espDriver/spi.hpp>
 
-#include <bsp.hpp>
+#include "bsp.hpp"
 #include <atoms/util.hpp>
 #include <logging.hpp>
 
diff --git a/suites/desktop/CMakeLists.txt b/suites/desktop/CMakeLists.txt
index 4db845900..53159e6f7 100644
--- a/suites/desktop/CMakeLists.txt
+++ b/suites/desktop/CMakeLists.txt
@@ -227,7 +227,7 @@ if (${BUILD_GAZEBO})
 endif()
 
 # Add logic tests for the hardware-related suites
-add_subdirectory($ENV{ROFI_ROOT}/softwareComponents/rofiHalEsp32/test-logic rofiHalEsp32-test)
+add_subdirectory($ENV{ROFI_ROOT}/softwareComponents/esp32++/test-logic rofiHalEsp32-test)
 
 
 list_targets()
diff --git a/suites/esp32/CMakeLists.txt b/suites/esp32/CMakeLists.txt
index 18c4b5162..f93936de6 100644
--- a/suites/esp32/CMakeLists.txt
+++ b/suites/esp32/CMakeLists.txt
@@ -70,6 +70,7 @@ set_target_properties(build_hack PROPERTIES EXCLUDE_FROM_ALL "exclude-NOTFOUND")
 add_component(atoms)
 add_component(lwip++)
 add_component(lwipcore)
+add_component(esp32++)
 add_component(rofiHalInc)
 add_component(rofiHalEsp32)
 add_component(libfi)