diff --git a/Documentation/Doxyfile.in b/Documentation/Doxyfile.in
index 86bcc4d00f88..c3fe5f663f7c 100644
--- a/Documentation/Doxyfile.in
+++ b/Documentation/Doxyfile.in
@@ -842,10 +842,10 @@ RECURSIVE              = YES
 # run.
 
 EXCLUDE                = @TOP_SRCDIR@/include/libcamera/span.h \
+			 @TOP_SRCDIR@/include/libcamera/internal/device_enumerator_sysfs.h \
+			 @TOP_SRCDIR@/include/libcamera/internal/device_enumerator_udev.h \
 			 @TOP_SRCDIR@/src/libcamera/device_enumerator_sysfs.cpp \
 			 @TOP_SRCDIR@/src/libcamera/device_enumerator_udev.cpp \
-			 @TOP_SRCDIR@/src/libcamera/include/device_enumerator_sysfs.h \
-			 @TOP_SRCDIR@/src/libcamera/include/device_enumerator_udev.h \
 			 @TOP_SRCDIR@/src/libcamera/pipeline/ \
 			 @TOP_SRCDIR@/src/libcamera/proxy/
 
@@ -2053,7 +2053,7 @@ SEARCH_INCLUDES        = YES
 # preprocessor.
 # This tag requires that the tag SEARCH_INCLUDES is set to YES.
 
-INCLUDE_PATH           = "@TOP_SRCDIR@/include/libcamera" "@TOP_SRCDIR@/src/libcamera/include"
+INCLUDE_PATH           = "@TOP_SRCDIR@/include/libcamera"
 
 # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
 # patterns (like *.h and *.hpp) to filter out the header-files in the
diff --git a/src/libcamera/include/byte_stream_buffer.h b/include/libcamera/internal/byte_stream_buffer.h
similarity index 100%
rename from src/libcamera/include/byte_stream_buffer.h
rename to include/libcamera/internal/byte_stream_buffer.h
diff --git a/src/libcamera/include/camera_controls.h b/include/libcamera/internal/camera_controls.h
similarity index 91%
rename from src/libcamera/include/camera_controls.h
rename to include/libcamera/internal/camera_controls.h
index 265c1fe379db..dc8b3ba84bc4 100644
--- a/src/libcamera/include/camera_controls.h
+++ b/include/libcamera/internal/camera_controls.h
@@ -7,7 +7,7 @@
 #ifndef __LIBCAMERA_CAMERA_CONTROLS_H__
 #define __LIBCAMERA_CAMERA_CONTROLS_H__
 
-#include "control_validator.h"
+#include "libcamera/internal/control_validator.h"
 
 namespace libcamera {
 
diff --git a/src/libcamera/include/camera_sensor.h b/include/libcamera/internal/camera_sensor.h
similarity index 96%
rename from src/libcamera/include/camera_sensor.h
rename to include/libcamera/internal/camera_sensor.h
index 30cf5f34f485..d79bd9ce9d58 100644
--- a/src/libcamera/include/camera_sensor.h
+++ b/include/libcamera/internal/camera_sensor.h
@@ -14,8 +14,8 @@
 #include <libcamera/controls.h>
 #include <libcamera/geometry.h>
 
-#include "formats.h"
-#include "log.h"
+#include "libcamera/internal/formats.h"
+#include "libcamera/internal/log.h"
 
 namespace libcamera {
 
diff --git a/src/libcamera/include/control_serializer.h b/include/libcamera/internal/control_serializer.h
similarity index 100%
rename from src/libcamera/include/control_serializer.h
rename to include/libcamera/internal/control_serializer.h
diff --git a/src/libcamera/include/control_validator.h b/include/libcamera/internal/control_validator.h
similarity index 100%
rename from src/libcamera/include/control_validator.h
rename to include/libcamera/internal/control_validator.h
diff --git a/src/libcamera/include/device_enumerator.h b/include/libcamera/internal/device_enumerator.h
similarity index 100%
rename from src/libcamera/include/device_enumerator.h
rename to include/libcamera/internal/device_enumerator.h
diff --git a/src/libcamera/include/device_enumerator_sysfs.h b/include/libcamera/internal/device_enumerator_sysfs.h
similarity index 92%
rename from src/libcamera/include/device_enumerator_sysfs.h
rename to include/libcamera/internal/device_enumerator_sysfs.h
index 5a5c9b0f5a31..a63e737a78d5 100644
--- a/src/libcamera/include/device_enumerator_sysfs.h
+++ b/include/libcamera/internal/device_enumerator_sysfs.h
@@ -10,7 +10,7 @@
 #include <memory>
 #include <string>
 
-#include "device_enumerator.h"
+#include "libcamera/internal/device_enumerator.h"
 
 class MediaDevice;
 
diff --git a/src/libcamera/include/device_enumerator_udev.h b/include/libcamera/internal/device_enumerator_udev.h
similarity index 96%
rename from src/libcamera/include/device_enumerator_udev.h
rename to include/libcamera/internal/device_enumerator_udev.h
index fdce4520f33a..fdaa20968ef0 100644
--- a/src/libcamera/include/device_enumerator_udev.h
+++ b/include/libcamera/internal/device_enumerator_udev.h
@@ -14,7 +14,7 @@
 #include <string>
 #include <sys/types.h>
 
-#include "device_enumerator.h"
+#include "libcamera/internal/device_enumerator.h"
 
 struct udev;
 struct udev_device;
diff --git a/src/libcamera/include/event_dispatcher_poll.h b/include/libcamera/internal/event_dispatcher_poll.h
similarity index 100%
rename from src/libcamera/include/event_dispatcher_poll.h
rename to include/libcamera/internal/event_dispatcher_poll.h
diff --git a/src/libcamera/include/file.h b/include/libcamera/internal/file.h
similarity index 100%
rename from src/libcamera/include/file.h
rename to include/libcamera/internal/file.h
diff --git a/src/libcamera/include/formats.h b/include/libcamera/internal/formats.h
similarity index 96%
rename from src/libcamera/include/formats.h
rename to include/libcamera/internal/formats.h
index 291a1108aa33..4092a93ef973 100644
--- a/src/libcamera/include/formats.h
+++ b/include/libcamera/internal/formats.h
@@ -14,7 +14,7 @@
 #include <libcamera/geometry.h>
 #include <libcamera/pixelformats.h>
 
-#include "v4l2_pixelformat.h"
+#include "libcamera/internal/v4l2_pixelformat.h"
 
 namespace libcamera {
 
diff --git a/src/libcamera/include/ipa_context_wrapper.h b/include/libcamera/internal/ipa_context_wrapper.h
similarity index 96%
rename from src/libcamera/include/ipa_context_wrapper.h
rename to include/libcamera/internal/ipa_context_wrapper.h
index 0db022ef5a1b..a717d4067498 100644
--- a/src/libcamera/include/ipa_context_wrapper.h
+++ b/include/libcamera/internal/ipa_context_wrapper.h
@@ -9,7 +9,7 @@
 
 #include <ipa/ipa_interface.h>
 
-#include "control_serializer.h"
+#include "libcamera/internal/control_serializer.h"
 
 namespace libcamera {
 
diff --git a/src/libcamera/include/ipa_manager.h b/include/libcamera/internal/ipa_manager.h
similarity index 88%
rename from src/libcamera/include/ipa_manager.h
rename to include/libcamera/internal/ipa_manager.h
index aa6b9adb1f87..f07d91fc7bbf 100644
--- a/src/libcamera/include/ipa_manager.h
+++ b/include/libcamera/internal/ipa_manager.h
@@ -13,9 +13,9 @@
 #include <ipa/ipa_interface.h>
 #include <ipa/ipa_module_info.h>
 
-#include "ipa_module.h"
-#include "pipeline_handler.h"
-#include "pub_key.h"
+#include "libcamera/internal/ipa_module.h"
+#include "libcamera/internal/pipeline_handler.h"
+#include "libcamera/internal/pub_key.h"
 
 namespace libcamera {
 
diff --git a/src/libcamera/include/ipa_module.h b/include/libcamera/internal/ipa_module.h
similarity index 93%
rename from src/libcamera/include/ipa_module.h
rename to include/libcamera/internal/ipa_module.h
index 15022e19edce..2f569db0b848 100644
--- a/src/libcamera/include/ipa_module.h
+++ b/include/libcamera/internal/ipa_module.h
@@ -14,8 +14,8 @@
 #include <ipa/ipa_interface.h>
 #include <ipa/ipa_module_info.h>
 
-#include "log.h"
-#include "pipeline_handler.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/pipeline_handler.h"
 
 namespace libcamera {
 
diff --git a/src/libcamera/include/ipa_proxy.h b/include/libcamera/internal/ipa_proxy.h
similarity index 100%
rename from src/libcamera/include/ipa_proxy.h
rename to include/libcamera/internal/ipa_proxy.h
diff --git a/src/libcamera/include/ipc_unixsocket.h b/include/libcamera/internal/ipc_unixsocket.h
similarity index 100%
rename from src/libcamera/include/ipc_unixsocket.h
rename to include/libcamera/internal/ipc_unixsocket.h
diff --git a/src/libcamera/include/log.h b/include/libcamera/internal/log.h
similarity index 98%
rename from src/libcamera/include/log.h
rename to include/libcamera/internal/log.h
index ee0b4069bd32..cab2034aae6b 100644
--- a/src/libcamera/include/log.h
+++ b/include/libcamera/internal/log.h
@@ -10,7 +10,7 @@
 #include <chrono>
 #include <sstream>
 
-#include "utils.h"
+#include "libcamera/internal/utils.h"
 
 namespace libcamera {
 
diff --git a/src/libcamera/include/media_device.h b/include/libcamera/internal/media_device.h
similarity index 96%
rename from src/libcamera/include/media_device.h
rename to include/libcamera/internal/media_device.h
index 4d9f76618ec0..9fe76c514b17 100644
--- a/src/libcamera/include/media_device.h
+++ b/include/libcamera/internal/media_device.h
@@ -16,8 +16,8 @@
 
 #include <libcamera/signal.h>
 
-#include "log.h"
-#include "media_object.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/media_object.h"
 
 namespace libcamera {
 
diff --git a/src/libcamera/include/media_object.h b/include/libcamera/internal/media_object.h
similarity index 100%
rename from src/libcamera/include/media_object.h
rename to include/libcamera/internal/media_object.h
diff --git a/src/libcamera/include/meson.build b/include/libcamera/internal/meson.build
similarity index 100%
rename from src/libcamera/include/meson.build
rename to include/libcamera/internal/meson.build
diff --git a/src/libcamera/include/message.h b/include/libcamera/internal/message.h
similarity index 100%
rename from src/libcamera/include/message.h
rename to include/libcamera/internal/message.h
diff --git a/src/libcamera/include/pipeline_handler.h b/include/libcamera/internal/pipeline_handler.h
similarity index 98%
rename from src/libcamera/include/pipeline_handler.h
rename to include/libcamera/internal/pipeline_handler.h
index 706413fa6e9f..428f5887c76b 100644
--- a/src/libcamera/include/pipeline_handler.h
+++ b/include/libcamera/internal/pipeline_handler.h
@@ -19,7 +19,7 @@
 #include <libcamera/object.h>
 #include <libcamera/stream.h>
 
-#include "ipa_proxy.h"
+#include "libcamera/internal/ipa_proxy.h"
 
 namespace libcamera {
 
diff --git a/src/libcamera/include/process.h b/include/libcamera/internal/process.h
similarity index 100%
rename from src/libcamera/include/process.h
rename to include/libcamera/internal/process.h
diff --git a/src/libcamera/include/pub_key.h b/include/libcamera/internal/pub_key.h
similarity index 100%
rename from src/libcamera/include/pub_key.h
rename to include/libcamera/internal/pub_key.h
diff --git a/src/libcamera/include/semaphore.h b/include/libcamera/internal/semaphore.h
similarity index 94%
rename from src/libcamera/include/semaphore.h
rename to include/libcamera/internal/semaphore.h
index c6b286536eb3..4d93077c776f 100644
--- a/src/libcamera/include/semaphore.h
+++ b/include/libcamera/internal/semaphore.h
@@ -9,7 +9,7 @@
 
 #include <condition_variable>
 
-#include "thread.h"
+#include "libcamera/internal/thread.h"
 
 namespace libcamera {
 
diff --git a/src/libcamera/include/thread.h b/include/libcamera/internal/thread.h
similarity index 97%
rename from src/libcamera/include/thread.h
rename to include/libcamera/internal/thread.h
index d700f111a3ae..6594c9b06b8d 100644
--- a/src/libcamera/include/thread.h
+++ b/include/libcamera/internal/thread.h
@@ -14,7 +14,7 @@
 
 #include <libcamera/signal.h>
 
-#include "utils.h"
+#include "libcamera/internal/utils.h"
 
 namespace libcamera {
 
diff --git a/src/libcamera/include/utils.h b/include/libcamera/internal/utils.h
similarity index 100%
rename from src/libcamera/include/utils.h
rename to include/libcamera/internal/utils.h
diff --git a/src/libcamera/include/v4l2_controls.h b/include/libcamera/internal/v4l2_controls.h
similarity index 100%
rename from src/libcamera/include/v4l2_controls.h
rename to include/libcamera/internal/v4l2_controls.h
diff --git a/src/libcamera/include/v4l2_device.h b/include/libcamera/internal/v4l2_device.h
similarity index 94%
rename from src/libcamera/include/v4l2_device.h
rename to include/libcamera/internal/v4l2_device.h
index e604a40df4c9..d491eafd262e 100644
--- a/src/libcamera/include/v4l2_device.h
+++ b/include/libcamera/internal/v4l2_device.h
@@ -13,8 +13,8 @@
 
 #include <linux/videodev2.h>
 
-#include "log.h"
-#include "v4l2_controls.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/v4l2_controls.h"
 
 namespace libcamera {
 
diff --git a/src/libcamera/include/v4l2_pixelformat.h b/include/libcamera/internal/v4l2_pixelformat.h
similarity index 100%
rename from src/libcamera/include/v4l2_pixelformat.h
rename to include/libcamera/internal/v4l2_pixelformat.h
diff --git a/src/libcamera/include/v4l2_subdevice.h b/include/libcamera/internal/v4l2_subdevice.h
similarity index 90%
rename from src/libcamera/include/v4l2_subdevice.h
rename to include/libcamera/internal/v4l2_subdevice.h
index d0e565dbdaab..1be454f0ddda 100644
--- a/src/libcamera/include/v4l2_subdevice.h
+++ b/include/libcamera/internal/v4l2_subdevice.h
@@ -12,10 +12,10 @@
 
 #include <libcamera/geometry.h>
 
-#include "formats.h"
-#include "log.h"
-#include "media_object.h"
-#include "v4l2_device.h"
+#include "libcamera/internal/formats.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/media_object.h"
+#include "libcamera/internal/v4l2_device.h"
 
 namespace libcamera {
 
diff --git a/src/libcamera/include/v4l2_videodevice.h b/include/libcamera/internal/v4l2_videodevice.h
similarity index 97%
rename from src/libcamera/include/v4l2_videodevice.h
rename to include/libcamera/internal/v4l2_videodevice.h
index 94565b97b6b1..dc259523599c 100644
--- a/src/libcamera/include/v4l2_videodevice.h
+++ b/include/libcamera/internal/v4l2_videodevice.h
@@ -20,10 +20,10 @@
 #include <libcamera/pixelformats.h>
 #include <libcamera/signal.h>
 
-#include "formats.h"
-#include "log.h"
-#include "v4l2_device.h"
-#include "v4l2_pixelformat.h"
+#include "libcamera/internal/formats.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/v4l2_device.h"
+#include "libcamera/internal/v4l2_pixelformat.h"
 
 namespace libcamera {
 
diff --git a/include/libcamera/meson.build b/include/libcamera/meson.build
index cea47eb83030..f9c8e64bd50c 100644
--- a/include/libcamera/meson.build
+++ b/include/libcamera/meson.build
@@ -23,6 +23,8 @@ libcamera_api = files([
 
 include_dir = join_paths(libcamera_include_dir, 'libcamera')
 
+subdir('internal')
+
 install_headers(libcamera_api,
                 subdir : include_dir)
 
diff --git a/src/android/camera3_hal.cpp b/src/android/camera3_hal.cpp
index 34301ed971b6..716e36c72b83 100644
--- a/src/android/camera3_hal.cpp
+++ b/src/android/camera3_hal.cpp
@@ -7,9 +7,10 @@
 
 #include <hardware/camera_common.h>
 
+#include "libcamera/internal/log.h"
+
 #include "camera_device.h"
 #include "camera_hal_manager.h"
-#include "log.h"
 
 using namespace libcamera;
 
diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index 76af70ebccfa..4ec429fc3f8f 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -11,8 +11,8 @@
 #include <libcamera/controls.h>
 #include <libcamera/property_ids.h>
 
-#include "log.h"
-#include "utils.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/utils.h"
 
 #include "camera_metadata.h"
 
diff --git a/src/android/camera_device.h b/src/android/camera_device.h
index 55eac317e0e4..bce1cfbc85a4 100644
--- a/src/android/camera_device.h
+++ b/src/android/camera_device.h
@@ -16,7 +16,7 @@
 #include <libcamera/request.h>
 #include <libcamera/stream.h>
 
-#include "message.h"
+#include "libcamera/internal/message.h"
 
 class CameraMetadata;
 
diff --git a/src/android/camera_hal_manager.cpp b/src/android/camera_hal_manager.cpp
index 5bd3bdba8a55..759e320dcd3b 100644
--- a/src/android/camera_hal_manager.cpp
+++ b/src/android/camera_hal_manager.cpp
@@ -9,7 +9,7 @@
 
 #include <libcamera/camera.h>
 
-#include "log.h"
+#include "libcamera/internal/log.h"
 
 #include "camera_device.h"
 
diff --git a/src/android/camera_metadata.cpp b/src/android/camera_metadata.cpp
index 76965108c08b..47b2e4ef117a 100644
--- a/src/android/camera_metadata.cpp
+++ b/src/android/camera_metadata.cpp
@@ -7,7 +7,7 @@
 
 #include "camera_metadata.h"
 
-#include "log.h"
+#include "libcamera/internal/log.h"
 
 using namespace libcamera;
 
diff --git a/src/ipa/libipa/ipa_interface_wrapper.cpp b/src/ipa/libipa/ipa_interface_wrapper.cpp
index 21d8c98bddee..90f270c021a9 100644
--- a/src/ipa/libipa/ipa_interface_wrapper.cpp
+++ b/src/ipa/libipa/ipa_interface_wrapper.cpp
@@ -14,8 +14,8 @@
 
 #include <ipa/ipa_interface.h>
 
-#include "byte_stream_buffer.h"
-#include "camera_sensor.h"
+#include "libcamera/internal/byte_stream_buffer.h"
+#include "libcamera/internal/camera_sensor.h"
 
 /**
  * \file ipa_interface_wrapper.h
diff --git a/src/ipa/libipa/ipa_interface_wrapper.h b/src/ipa/libipa/ipa_interface_wrapper.h
index 56507aafd81e..b426034d551d 100644
--- a/src/ipa/libipa/ipa_interface_wrapper.h
+++ b/src/ipa/libipa/ipa_interface_wrapper.h
@@ -11,7 +11,7 @@
 
 #include <ipa/ipa_interface.h>
 
-#include "control_serializer.h"
+#include "libcamera/internal/control_serializer.h"
 
 namespace libcamera {
 
diff --git a/src/ipa/meson.build b/src/ipa/meson.build
index ab73c347021c..5a5de267c147 100644
--- a/src/ipa/meson.build
+++ b/src/ipa/meson.build
@@ -6,7 +6,6 @@ ipa_sysconf_dir = join_paths(get_option('sysconfdir'), 'libcamera', 'ipa')
 
 ipa_includes = [
     libcamera_includes,
-    libcamera_internal_includes,
 ]
 
 config_h.set('IPA_CONFIG_DIR',
diff --git a/src/ipa/raspberrypi/cam_helper.cpp b/src/ipa/raspberrypi/cam_helper.cpp
index 7f05d2c6b368..a0c73f99390f 100644
--- a/src/ipa/raspberrypi/cam_helper.cpp
+++ b/src/ipa/raspberrypi/cam_helper.cpp
@@ -11,11 +11,11 @@
 #include <map>
 #include <string.h>
 
+#include "libcamera/internal/v4l2_videodevice.h"
+
 #include "cam_helper.hpp"
 #include "md_parser.hpp"
 
-#include "v4l2_videodevice.h"
-
 using namespace RPi;
 
 static std::map<std::string, CamHelperCreateFunc> cam_helpers;
diff --git a/src/ipa/raspberrypi/cam_helper.hpp b/src/ipa/raspberrypi/cam_helper.hpp
index 0c8aa29a4cff..6877f4735031 100644
--- a/src/ipa/raspberrypi/cam_helper.hpp
+++ b/src/ipa/raspberrypi/cam_helper.hpp
@@ -11,7 +11,7 @@
 #include "camera_mode.h"
 #include "md_parser.hpp"
 
-#include "v4l2_videodevice.h"
+#include "libcamera/internal/v4l2_videodevice.h"
 
 namespace RPi {
 
diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp
index 3bcc08156902..46b244538e32 100644
--- a/src/ipa/raspberrypi/raspberrypi.cpp
+++ b/src/ipa/raspberrypi/raspberrypi.cpp
@@ -22,6 +22,10 @@
 #include <libcamera/span.h>
 #include <libipa/ipa_interface_wrapper.h>
 
+#include "libcamera/internal/camera_sensor.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/utils.h"
+
 #include <linux/bcm2835-isp.h>
 
 #include "agc_algorithm.hpp"
@@ -44,10 +48,6 @@
 #include "sdn_status.h"
 #include "sharpen_status.h"
 
-#include "camera_sensor.h"
-#include "log.h"
-#include "utils.h"
-
 namespace libcamera {
 
 /* Configure the sensor with these values initially. */
diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp
index bfa88418fa7b..4f6e0342dac1 100644
--- a/src/ipa/rkisp1/rkisp1.cpp
+++ b/src/ipa/rkisp1/rkisp1.cpp
@@ -22,8 +22,8 @@
 #include <libcamera/request.h>
 #include <libipa/ipa_interface_wrapper.h>
 
-#include "log.h"
-#include "utils.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/utils.h"
 
 namespace libcamera {
 
diff --git a/src/ipa/vimc/vimc.cpp b/src/ipa/vimc/vimc.cpp
index 9271f2d8acff..3fa6be6535e2 100644
--- a/src/ipa/vimc/vimc.cpp
+++ b/src/ipa/vimc/vimc.cpp
@@ -19,8 +19,8 @@
 
 #include <libipa/ipa_interface_wrapper.h>
 
-#include "file.h"
-#include "log.h"
+#include "libcamera/internal/file.h"
+#include "libcamera/internal/log.h"
 
 namespace libcamera {
 
diff --git a/src/libcamera/bound_method.cpp b/src/libcamera/bound_method.cpp
index 9aa59dc3678f..9993e5969aac 100644
--- a/src/libcamera/bound_method.cpp
+++ b/src/libcamera/bound_method.cpp
@@ -7,9 +7,9 @@
 
 #include <libcamera/bound_method.h>
 
-#include "message.h"
-#include "semaphore.h"
-#include "thread.h"
+#include "libcamera/internal/message.h"
+#include "libcamera/internal/semaphore.h"
+#include "libcamera/internal/thread.h"
 
 /**
  * \file bound_method.h
diff --git a/src/libcamera/buffer.cpp b/src/libcamera/buffer.cpp
index 0c5e56cf1062..1a1d4bac7aed 100644
--- a/src/libcamera/buffer.cpp
+++ b/src/libcamera/buffer.cpp
@@ -12,7 +12,7 @@
 #include <sys/mman.h>
 #include <unistd.h>
 
-#include "log.h"
+#include "libcamera/internal/log.h"
 
 /**
  * \file buffer.h
diff --git a/src/libcamera/byte_stream_buffer.cpp b/src/libcamera/byte_stream_buffer.cpp
index 20d6a6552c5f..df7029b02a7f 100644
--- a/src/libcamera/byte_stream_buffer.cpp
+++ b/src/libcamera/byte_stream_buffer.cpp
@@ -5,12 +5,12 @@
  * byte_stream_buffer.cpp - Byte stream buffer
  */
 
-#include "byte_stream_buffer.h"
+#include "libcamera/internal/byte_stream_buffer.h"
 
 #include <stdint.h>
 #include <string.h>
 
-#include "log.h"
+#include "libcamera/internal/log.h"
 
 namespace libcamera {
 
diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp
index 8c3bb2c2a01f..eac769a43964 100644
--- a/src/libcamera/camera.cpp
+++ b/src/libcamera/camera.cpp
@@ -14,9 +14,9 @@
 #include <libcamera/request.h>
 #include <libcamera/stream.h>
 
-#include "log.h"
-#include "pipeline_handler.h"
-#include "utils.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/pipeline_handler.h"
+#include "libcamera/internal/utils.h"
 
 /**
  * \file camera.h
diff --git a/src/libcamera/camera_controls.cpp b/src/libcamera/camera_controls.cpp
index 59dcede2ca36..371f6d079e2d 100644
--- a/src/libcamera/camera_controls.cpp
+++ b/src/libcamera/camera_controls.cpp
@@ -5,7 +5,7 @@
  * camera_controls.cpp - Camera controls
  */
 
-#include "camera_controls.h"
+#include "libcamera/internal/camera_controls.h"
 
 #include <libcamera/camera.h>
 #include <libcamera/controls.h>
diff --git a/src/libcamera/camera_manager.cpp b/src/libcamera/camera_manager.cpp
index fddf7349ec15..849377ad2712 100644
--- a/src/libcamera/camera_manager.cpp
+++ b/src/libcamera/camera_manager.cpp
@@ -13,12 +13,12 @@
 #include <libcamera/camera.h>
 #include <libcamera/event_dispatcher.h>
 
-#include "device_enumerator.h"
-#include "event_dispatcher_poll.h"
-#include "log.h"
-#include "pipeline_handler.h"
-#include "thread.h"
-#include "utils.h"
+#include "libcamera/internal/device_enumerator.h"
+#include "libcamera/internal/event_dispatcher_poll.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/pipeline_handler.h"
+#include "libcamera/internal/thread.h"
+#include "libcamera/internal/utils.h"
 
 /**
  * \file camera_manager.h
diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp
index 31a916a92722..174df17cfaef 100644
--- a/src/libcamera/camera_sensor.cpp
+++ b/src/libcamera/camera_sensor.cpp
@@ -5,7 +5,7 @@
  * camera_sensor.cpp - A camera sensor
  */
 
-#include "camera_sensor.h"
+#include "libcamera/internal/camera_sensor.h"
 
 #include <algorithm>
 #include <float.h>
@@ -16,9 +16,9 @@
 
 #include <libcamera/property_ids.h>
 
-#include "formats.h"
-#include "utils.h"
-#include "v4l2_subdevice.h"
+#include "libcamera/internal/formats.h"
+#include "libcamera/internal/utils.h"
+#include "libcamera/internal/v4l2_subdevice.h"
 
 /**
  * \file camera_sensor.h
diff --git a/src/libcamera/control_serializer.cpp b/src/libcamera/control_serializer.cpp
index fcff5e56fbf7..bf162b6cc471 100644
--- a/src/libcamera/control_serializer.cpp
+++ b/src/libcamera/control_serializer.cpp
@@ -5,7 +5,7 @@
  * control_serializer.cpp - Control (de)serializer
  */
 
-#include "control_serializer.h"
+#include "libcamera/internal/control_serializer.h"
 
 #include <algorithm>
 #include <memory>
@@ -16,8 +16,8 @@
 #include <libcamera/controls.h>
 #include <libcamera/span.h>
 
-#include "byte_stream_buffer.h"
-#include "log.h"
+#include "libcamera/internal/byte_stream_buffer.h"
+#include "libcamera/internal/log.h"
 
 /**
  * \file control_serializer.h
diff --git a/src/libcamera/control_validator.cpp b/src/libcamera/control_validator.cpp
index 8e5cf3c3e3ee..5a2f27ac9a3b 100644
--- a/src/libcamera/control_validator.cpp
+++ b/src/libcamera/control_validator.cpp
@@ -5,7 +5,7 @@
  * control_validator.cpp - Control validator
  */
 
-#include "control_validator.h"
+#include "libcamera/internal/control_validator.h"
 
 /**
  * \file control_validator.h
diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp
index 08df7f29e938..dca782667d88 100644
--- a/src/libcamera/controls.cpp
+++ b/src/libcamera/controls.cpp
@@ -12,9 +12,9 @@
 #include <string>
 #include <string.h>
 
-#include "control_validator.h"
-#include "log.h"
-#include "utils.h"
+#include "libcamera/internal/control_validator.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/utils.h"
 
 /**
  * \file controls.h
diff --git a/src/libcamera/device_enumerator.cpp b/src/libcamera/device_enumerator.cpp
index dd17e3e32e6c..e21a2a7deaae 100644
--- a/src/libcamera/device_enumerator.cpp
+++ b/src/libcamera/device_enumerator.cpp
@@ -5,14 +5,14 @@
  * device_enumerator.cpp - Enumeration and matching
  */
 
-#include "device_enumerator.h"
-#include "device_enumerator_sysfs.h"
-#include "device_enumerator_udev.h"
+#include "libcamera/internal/device_enumerator.h"
+#include "libcamera/internal/device_enumerator_sysfs.h"
+#include "libcamera/internal/device_enumerator_udev.h"
 
 #include <string.h>
 
-#include "log.h"
-#include "media_device.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/media_device.h"
 
 /**
  * \file device_enumerator.h
diff --git a/src/libcamera/device_enumerator_sysfs.cpp b/src/libcamera/device_enumerator_sysfs.cpp
index 3446db59e9d4..ff72885288c3 100644
--- a/src/libcamera/device_enumerator_sysfs.cpp
+++ b/src/libcamera/device_enumerator_sysfs.cpp
@@ -5,7 +5,7 @@
  * device_enumerator_sysfs.cpp - sysfs-based device enumerator
  */
 
-#include "device_enumerator_sysfs.h"
+#include "libcamera/internal/device_enumerator_sysfs.h"
 
 #include <dirent.h>
 #include <fcntl.h>
@@ -17,8 +17,8 @@
 #include <sys/types.h>
 #include <unistd.h>
 
-#include "log.h"
-#include "media_device.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/media_device.h"
 
 namespace libcamera {
 
diff --git a/src/libcamera/device_enumerator_udev.cpp b/src/libcamera/device_enumerator_udev.cpp
index 2e33c898aeef..56ca4dc2804b 100644
--- a/src/libcamera/device_enumerator_udev.cpp
+++ b/src/libcamera/device_enumerator_udev.cpp
@@ -5,7 +5,7 @@
  * device_enumerator_udev.cpp - udev-based device enumerator
  */
 
-#include "device_enumerator_udev.h"
+#include "libcamera/internal/device_enumerator_udev.h"
 
 #include <algorithm>
 #include <fcntl.h>
@@ -19,8 +19,8 @@
 
 #include <libcamera/event_notifier.h>
 
-#include "log.h"
-#include "media_device.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/media_device.h"
 
 namespace libcamera {
 
diff --git a/src/libcamera/event_dispatcher.cpp b/src/libcamera/event_dispatcher.cpp
index bb4fddfffe86..90bd5daf0612 100644
--- a/src/libcamera/event_dispatcher.cpp
+++ b/src/libcamera/event_dispatcher.cpp
@@ -7,7 +7,7 @@
 
 #include <libcamera/event_dispatcher.h>
 
-#include "log.h"
+#include "libcamera/internal/log.h"
 
 /**
  * \file event_dispatcher.h
diff --git a/src/libcamera/event_dispatcher_poll.cpp b/src/libcamera/event_dispatcher_poll.cpp
index 51ac5adf2f74..9ab85da7d75d 100644
--- a/src/libcamera/event_dispatcher_poll.cpp
+++ b/src/libcamera/event_dispatcher_poll.cpp
@@ -5,7 +5,7 @@
  * event_dispatcher_poll.cpp - Poll-based event dispatcher
  */
 
-#include "event_dispatcher_poll.h"
+#include "libcamera/internal/event_dispatcher_poll.h"
 
 #include <algorithm>
 #include <chrono>
@@ -19,9 +19,9 @@
 #include <libcamera/event_notifier.h>
 #include <libcamera/timer.h>
 
-#include "log.h"
-#include "thread.h"
-#include "utils.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/thread.h"
+#include "libcamera/internal/utils.h"
 
 /**
  * \file event_dispatcher_poll.h
diff --git a/src/libcamera/event_notifier.cpp b/src/libcamera/event_notifier.cpp
index a9be686f79ae..cc3ea0d91e5b 100644
--- a/src/libcamera/event_notifier.cpp
+++ b/src/libcamera/event_notifier.cpp
@@ -10,8 +10,8 @@
 #include <libcamera/camera_manager.h>
 #include <libcamera/event_dispatcher.h>
 
-#include "message.h"
-#include "thread.h"
+#include "libcamera/internal/message.h"
+#include "libcamera/internal/thread.h"
 
 /**
  * \file event_notifier.h
diff --git a/src/libcamera/file.cpp b/src/libcamera/file.cpp
index 8223743d5f6b..c471bde3fc68 100644
--- a/src/libcamera/file.cpp
+++ b/src/libcamera/file.cpp
@@ -5,7 +5,7 @@
  * file.cpp - File I/O operations
  */
 
-#include "file.h"
+#include "libcamera/internal/file.h"
 
 #include <errno.h>
 #include <fcntl.h>
@@ -14,7 +14,7 @@
 #include <sys/types.h>
 #include <unistd.h>
 
-#include "log.h"
+#include "libcamera/internal/log.h"
 
 /**
  * \file file.h
diff --git a/src/libcamera/file_descriptor.cpp b/src/libcamera/file_descriptor.cpp
index 88385476d890..ee60064bce6e 100644
--- a/src/libcamera/file_descriptor.cpp
+++ b/src/libcamera/file_descriptor.cpp
@@ -11,7 +11,7 @@
 #include <unistd.h>
 #include <utility>
 
-#include "log.h"
+#include "libcamera/internal/log.h"
 
 /**
  * \file file_descriptor.h
diff --git a/src/libcamera/formats.cpp b/src/libcamera/formats.cpp
index b3af0f7fcfcc..2ac3b412ecdb 100644
--- a/src/libcamera/formats.cpp
+++ b/src/libcamera/formats.cpp
@@ -5,11 +5,11 @@
  * formats.cpp - libcamera image formats
  */
 
-#include "formats.h"
+#include "libcamera/internal/formats.h"
 
 #include <errno.h>
 
-#include "log.h"
+#include "libcamera/internal/log.h"
 
 /**
  * \file formats.h
diff --git a/src/libcamera/framebuffer_allocator.cpp b/src/libcamera/framebuffer_allocator.cpp
index a37b564c6701..252191ba234c 100644
--- a/src/libcamera/framebuffer_allocator.cpp
+++ b/src/libcamera/framebuffer_allocator.cpp
@@ -13,8 +13,8 @@
 #include <libcamera/camera.h>
 #include <libcamera/stream.h>
 
-#include "log.h"
-#include "pipeline_handler.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/pipeline_handler.h"
 
 /**
  * \file framebuffer_allocator.h
diff --git a/src/libcamera/ipa_context_wrapper.cpp b/src/libcamera/ipa_context_wrapper.cpp
index 0bd3a1aeca95..bcdc55c2bcbc 100644
--- a/src/libcamera/ipa_context_wrapper.cpp
+++ b/src/libcamera/ipa_context_wrapper.cpp
@@ -5,15 +5,15 @@
  * ipa_context_wrapper.cpp - Image Processing Algorithm context wrapper
  */
 
-#include "ipa_context_wrapper.h"
+#include "libcamera/internal/ipa_context_wrapper.h"
 
 #include <vector>
 
 #include <libcamera/controls.h>
 
-#include "byte_stream_buffer.h"
-#include "camera_sensor.h"
-#include "utils.h"
+#include "libcamera/internal/byte_stream_buffer.h"
+#include "libcamera/internal/camera_sensor.h"
+#include "libcamera/internal/utils.h"
 
 /**
  * \file ipa_context_wrapper.h
diff --git a/src/libcamera/ipa_manager.cpp b/src/libcamera/ipa_manager.cpp
index 1faa3dd38188..505cf61074b7 100644
--- a/src/libcamera/ipa_manager.cpp
+++ b/src/libcamera/ipa_manager.cpp
@@ -5,19 +5,19 @@
  * ipa_manager.cpp - Image Processing Algorithm module manager
  */
 
-#include "ipa_manager.h"
+#include "libcamera/internal/ipa_manager.h"
 
 #include <algorithm>
 #include <dirent.h>
 #include <string.h>
 #include <sys/types.h>
 
-#include "file.h"
-#include "ipa_module.h"
-#include "ipa_proxy.h"
-#include "log.h"
-#include "pipeline_handler.h"
-#include "utils.h"
+#include "libcamera/internal/file.h"
+#include "libcamera/internal/ipa_module.h"
+#include "libcamera/internal/ipa_proxy.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/pipeline_handler.h"
+#include "libcamera/internal/utils.h"
 
 /**
  * \file ipa_manager.h
diff --git a/src/libcamera/ipa_module.cpp b/src/libcamera/ipa_module.cpp
index 3444a788b855..91534b61e2e4 100644
--- a/src/libcamera/ipa_module.cpp
+++ b/src/libcamera/ipa_module.cpp
@@ -5,7 +5,7 @@
  * ipa_module.cpp - Image Processing Algorithm module
  */
 
-#include "ipa_module.h"
+#include "libcamera/internal/ipa_module.h"
 
 #include <algorithm>
 #include <array>
@@ -23,10 +23,10 @@
 
 #include <libcamera/span.h>
 
-#include "file.h"
-#include "log.h"
-#include "pipeline_handler.h"
-#include "utils.h"
+#include "libcamera/internal/file.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/pipeline_handler.h"
+#include "libcamera/internal/utils.h"
 
 /**
  * \file ipa_module.h
diff --git a/src/libcamera/ipa_proxy.cpp b/src/libcamera/ipa_proxy.cpp
index 401ac52d38d6..23be24ad9bf1 100644
--- a/src/libcamera/ipa_proxy.cpp
+++ b/src/libcamera/ipa_proxy.cpp
@@ -5,16 +5,16 @@
  * ipa_proxy.cpp - Image Processing Algorithm proxy
  */
 
-#include "ipa_proxy.h"
+#include "libcamera/internal/ipa_proxy.h"
 
 #include <string.h>
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <unistd.h>
 
-#include "ipa_module.h"
-#include "log.h"
-#include "utils.h"
+#include "libcamera/internal/ipa_module.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/utils.h"
 
 /**
  * \file ipa_proxy.h
diff --git a/src/libcamera/ipa_pub_key.cpp.in b/src/libcamera/ipa_pub_key.cpp.in
index 7ffc1e24d67b..01e5333b4d30 100644
--- a/src/libcamera/ipa_pub_key.cpp.in
+++ b/src/libcamera/ipa_pub_key.cpp.in
@@ -7,7 +7,7 @@
  * This file is auto-generated. Do not edit.
  */
 
-#include "ipa_manager.h"
+#include "libcamera/internal/ipa_manager.h"
 
 namespace libcamera {
 
diff --git a/src/libcamera/ipc_unixsocket.cpp b/src/libcamera/ipc_unixsocket.cpp
index 6e5cab894a93..7df86e885f23 100644
--- a/src/libcamera/ipc_unixsocket.cpp
+++ b/src/libcamera/ipc_unixsocket.cpp
@@ -5,14 +5,14 @@
  * ipc_unixsocket.cpp - IPC mechanism based on Unix sockets
  */
 
-#include "ipc_unixsocket.h"
+#include "libcamera/internal/ipc_unixsocket.h"
 
 #include <poll.h>
 #include <string.h>
 #include <sys/socket.h>
 #include <unistd.h>
 
-#include "log.h"
+#include "libcamera/internal/log.h"
 
 /**
  * \file ipc_unixsocket.h
diff --git a/src/libcamera/log.cpp b/src/libcamera/log.cpp
index fd1b5c39a52e..180eb97ba664 100644
--- a/src/libcamera/log.cpp
+++ b/src/libcamera/log.cpp
@@ -5,7 +5,7 @@
  * log.cpp - Logging infrastructure
  */
 
-#include "log.h"
+#include "libcamera/internal/log.h"
 
 #if HAVE_BACKTRACE
 #include <execinfo.h>
@@ -22,8 +22,8 @@
 
 #include <libcamera/logging.h>
 
-#include "thread.h"
-#include "utils.h"
+#include "libcamera/internal/thread.h"
+#include "libcamera/internal/utils.h"
 
 /**
  * \file log.h
diff --git a/src/libcamera/media_device.cpp b/src/libcamera/media_device.cpp
index d4e7e1002224..de18d572f479 100644
--- a/src/libcamera/media_device.cpp
+++ b/src/libcamera/media_device.cpp
@@ -5,7 +5,7 @@
  * media_device.cpp - Media device handler
  */
 
-#include "media_device.h"
+#include "libcamera/internal/media_device.h"
 
 #include <errno.h>
 #include <fcntl.h>
@@ -18,7 +18,7 @@
 
 #include <linux/media.h>
 
-#include "log.h"
+#include "libcamera/internal/log.h"
 
 /**
  * \file media_device.h
diff --git a/src/libcamera/media_object.cpp b/src/libcamera/media_object.cpp
index ef32065c161d..ce77a72712d3 100644
--- a/src/libcamera/media_object.cpp
+++ b/src/libcamera/media_object.cpp
@@ -5,7 +5,7 @@
  * media_object.cpp - Media device objects: entities, pads and links
  */
 
-#include "media_object.h"
+#include "libcamera/internal/media_object.h"
 
 #include <errno.h>
 #include <string>
@@ -15,8 +15,8 @@
 
 #include <linux/media.h>
 
-#include "log.h"
-#include "media_device.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/media_device.h"
 
 /**
  * \file media_object.h
diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build
index d42e9720dbd6..472af451c1ef 100644
--- a/src/libcamera/meson.build
+++ b/src/libcamera/meson.build
@@ -51,13 +51,8 @@ libcamera_sources = files([
     'v4l2_videodevice.cpp',
 ])
 
-subdir('include')
-
-libcamera_internal_includes =  include_directories('include')
-
 includes = [
     libcamera_includes,
-    libcamera_internal_includes,
 ]
 
 subdir('pipeline')
diff --git a/src/libcamera/message.cpp b/src/libcamera/message.cpp
index 77f2bdd5fbac..e9b3e73f3052 100644
--- a/src/libcamera/message.cpp
+++ b/src/libcamera/message.cpp
@@ -5,11 +5,11 @@
  * message.cpp - Message queue support
  */
 
-#include "message.h"
+#include "libcamera/internal/message.h"
 
 #include <libcamera/signal.h>
 
-#include "log.h"
+#include "libcamera/internal/log.h"
 
 /**
  * \file message.h
diff --git a/src/libcamera/object.cpp b/src/libcamera/object.cpp
index 99c3bf9a709b..1544a23e4410 100644
--- a/src/libcamera/object.cpp
+++ b/src/libcamera/object.cpp
@@ -11,11 +11,11 @@
 
 #include <libcamera/signal.h>
 
-#include "log.h"
-#include "message.h"
-#include "semaphore.h"
-#include "thread.h"
-#include "utils.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/message.h"
+#include "libcamera/internal/semaphore.h"
+#include "libcamera/internal/thread.h"
+#include "libcamera/internal/utils.h"
 
 /**
  * \file object.h
diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index 1988cb0ee551..b805fea71c2d 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -17,15 +17,15 @@
 #include <libcamera/request.h>
 #include <libcamera/stream.h>
 
-#include "camera_sensor.h"
-#include "device_enumerator.h"
-#include "log.h"
-#include "media_device.h"
-#include "pipeline_handler.h"
-#include "utils.h"
-#include "v4l2_controls.h"
-#include "v4l2_subdevice.h"
-#include "v4l2_videodevice.h"
+#include "libcamera/internal/camera_sensor.h"
+#include "libcamera/internal/device_enumerator.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/media_device.h"
+#include "libcamera/internal/pipeline_handler.h"
+#include "libcamera/internal/utils.h"
+#include "libcamera/internal/v4l2_controls.h"
+#include "libcamera/internal/v4l2_subdevice.h"
+#include "libcamera/internal/v4l2_videodevice.h"
 
 namespace libcamera {
 
diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
index 41d1a522fa71..e254e5558d92 100644
--- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
+++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
@@ -21,15 +21,16 @@
 #include <linux/drm_fourcc.h>
 #include <linux/videodev2.h>
 
-#include "camera_sensor.h"
-#include "device_enumerator.h"
-#include "ipa_manager.h"
-#include "media_device.h"
-#include "pipeline_handler.h"
+#include "libcamera/internal/camera_sensor.h"
+#include "libcamera/internal/device_enumerator.h"
+#include "libcamera/internal/ipa_manager.h"
+#include "libcamera/internal/media_device.h"
+#include "libcamera/internal/pipeline_handler.h"
+#include "libcamera/internal/utils.h"
+#include "libcamera/internal/v4l2_controls.h"
+#include "libcamera/internal/v4l2_videodevice.h"
+
 #include "staggered_ctrl.h"
-#include "utils.h"
-#include "v4l2_controls.h"
-#include "v4l2_videodevice.h"
 #include "vcsm.h"
 
 namespace libcamera {
diff --git a/src/libcamera/pipeline/raspberrypi/staggered_ctrl.cpp b/src/libcamera/pipeline/raspberrypi/staggered_ctrl.cpp
index d431887ea137..391e13f54ccc 100644
--- a/src/libcamera/pipeline/raspberrypi/staggered_ctrl.cpp
+++ b/src/libcamera/pipeline/raspberrypi/staggered_ctrl.cpp
@@ -11,9 +11,9 @@
 
 #include <libcamera/controls.h>
 
-#include "log.h"
-#include "utils.h"
-#include "v4l2_videodevice.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/utils.h"
+#include "libcamera/internal/v4l2_videodevice.h"
 
 namespace libcamera {
 
diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
index 1e81a0048f09..7a0c8771ba54 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
@@ -20,16 +20,17 @@
 #include <libcamera/request.h>
 #include <libcamera/stream.h>
 
-#include "camera_sensor.h"
-#include "device_enumerator.h"
-#include "ipa_manager.h"
-#include "log.h"
-#include "media_device.h"
-#include "pipeline_handler.h"
+#include "libcamera/internal/camera_sensor.h"
+#include "libcamera/internal/device_enumerator.h"
+#include "libcamera/internal/ipa_manager.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/media_device.h"
+#include "libcamera/internal/pipeline_handler.h"
+#include "libcamera/internal/utils.h"
+#include "libcamera/internal/v4l2_subdevice.h"
+#include "libcamera/internal/v4l2_videodevice.h"
+
 #include "timeline.h"
-#include "utils.h"
-#include "v4l2_subdevice.h"
-#include "v4l2_videodevice.h"
 
 namespace libcamera {
 
diff --git a/src/libcamera/pipeline/rkisp1/timeline.cpp b/src/libcamera/pipeline/rkisp1/timeline.cpp
index f6c6434d7b53..f5194608ced7 100644
--- a/src/libcamera/pipeline/rkisp1/timeline.cpp
+++ b/src/libcamera/pipeline/rkisp1/timeline.cpp
@@ -7,7 +7,7 @@
 
 #include "timeline.h"
 
-#include "log.h"
+#include "libcamera/internal/log.h"
 
 /**
  * \file timeline.h
diff --git a/src/libcamera/pipeline/rkisp1/timeline.h b/src/libcamera/pipeline/rkisp1/timeline.h
index 9d30e4eaf874..88f99329873d 100644
--- a/src/libcamera/pipeline/rkisp1/timeline.h
+++ b/src/libcamera/pipeline/rkisp1/timeline.h
@@ -12,7 +12,7 @@
 
 #include <libcamera/timer.h>
 
-#include "utils.h"
+#include "libcamera/internal/utils.h"
 
 namespace libcamera {
 
diff --git a/src/libcamera/pipeline/simple/converter.cpp b/src/libcamera/pipeline/simple/converter.cpp
index 6d88776dc2f0..02443e7f78ed 100644
--- a/src/libcamera/pipeline/simple/converter.cpp
+++ b/src/libcamera/pipeline/simple/converter.cpp
@@ -13,9 +13,9 @@
 #include <libcamera/geometry.h>
 #include <libcamera/signal.h>
 
-#include "log.h"
-#include "media_device.h"
-#include "v4l2_videodevice.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/media_device.h"
+#include "libcamera/internal/v4l2_videodevice.h"
 
 namespace libcamera {
 
diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp
index 6673606153b8..2565190082c8 100644
--- a/src/libcamera/pipeline/simple/simple.cpp
+++ b/src/libcamera/pipeline/simple/simple.cpp
@@ -24,13 +24,13 @@
 #include <libcamera/request.h>
 #include <libcamera/stream.h>
 
-#include "camera_sensor.h"
-#include "device_enumerator.h"
-#include "log.h"
-#include "media_device.h"
-#include "pipeline_handler.h"
-#include "v4l2_subdevice.h"
-#include "v4l2_videodevice.h"
+#include "libcamera/internal/camera_sensor.h"
+#include "libcamera/internal/device_enumerator.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/media_device.h"
+#include "libcamera/internal/pipeline_handler.h"
+#include "libcamera/internal/v4l2_subdevice.h"
+#include "libcamera/internal/v4l2_videodevice.h"
 
 #include "converter.h"
 
diff --git a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp
index f0c1337de862..a074909499f1 100644
--- a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp
+++ b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp
@@ -17,13 +17,13 @@
 #include <libcamera/request.h>
 #include <libcamera/stream.h>
 
-#include "device_enumerator.h"
-#include "log.h"
-#include "media_device.h"
-#include "pipeline_handler.h"
-#include "utils.h"
-#include "v4l2_controls.h"
-#include "v4l2_videodevice.h"
+#include "libcamera/internal/device_enumerator.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/media_device.h"
+#include "libcamera/internal/pipeline_handler.h"
+#include "libcamera/internal/utils.h"
+#include "libcamera/internal/v4l2_controls.h"
+#include "libcamera/internal/v4l2_videodevice.h"
 
 namespace libcamera {
 
diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp
index 128301e3d99b..50a9f2df4c24 100644
--- a/src/libcamera/pipeline/vimc/vimc.cpp
+++ b/src/libcamera/pipeline/vimc/vimc.cpp
@@ -22,16 +22,16 @@
 #include <libcamera/request.h>
 #include <libcamera/stream.h>
 
-#include "camera_sensor.h"
-#include "device_enumerator.h"
-#include "ipa_manager.h"
-#include "log.h"
-#include "media_device.h"
-#include "pipeline_handler.h"
-#include "utils.h"
-#include "v4l2_controls.h"
-#include "v4l2_subdevice.h"
-#include "v4l2_videodevice.h"
+#include "libcamera/internal/camera_sensor.h"
+#include "libcamera/internal/device_enumerator.h"
+#include "libcamera/internal/ipa_manager.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/media_device.h"
+#include "libcamera/internal/pipeline_handler.h"
+#include "libcamera/internal/utils.h"
+#include "libcamera/internal/v4l2_controls.h"
+#include "libcamera/internal/v4l2_subdevice.h"
+#include "libcamera/internal/v4l2_videodevice.h"
 
 namespace libcamera {
 
diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp
index 254d341fb8a4..53aeebdcc14e 100644
--- a/src/libcamera/pipeline_handler.cpp
+++ b/src/libcamera/pipeline_handler.cpp
@@ -5,7 +5,7 @@
  * pipeline_handler.cpp - Pipeline handler infrastructure
  */
 
-#include "pipeline_handler.h"
+#include "libcamera/internal/pipeline_handler.h"
 
 #include <sys/sysmacros.h>
 
@@ -13,10 +13,10 @@
 #include <libcamera/camera.h>
 #include <libcamera/camera_manager.h>
 
-#include "device_enumerator.h"
-#include "log.h"
-#include "media_device.h"
-#include "utils.h"
+#include "libcamera/internal/device_enumerator.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/media_device.h"
+#include "libcamera/internal/utils.h"
 
 /**
  * \file pipeline_handler.h
diff --git a/src/libcamera/process.cpp b/src/libcamera/process.cpp
index 3b4d0f10da67..e816ee8670df 100644
--- a/src/libcamera/process.cpp
+++ b/src/libcamera/process.cpp
@@ -5,7 +5,7 @@
  * process.cpp - Process object
  */
 
-#include "process.h"
+#include "libcamera/internal/process.h"
 
 #include <algorithm>
 #include <dirent.h>
@@ -22,8 +22,8 @@
 
 #include <libcamera/event_notifier.h>
 
-#include "log.h"
-#include "utils.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/utils.h"
 
 /**
  * \file process.h
diff --git a/src/libcamera/proxy/ipa_proxy_linux.cpp b/src/libcamera/proxy/ipa_proxy_linux.cpp
index 9e0f44cf314f..7d6f8799f8ff 100644
--- a/src/libcamera/proxy/ipa_proxy_linux.cpp
+++ b/src/libcamera/proxy/ipa_proxy_linux.cpp
@@ -10,11 +10,11 @@
 #include <ipa/ipa_interface.h>
 #include <ipa/ipa_module_info.h>
 
-#include "ipa_module.h"
-#include "ipa_proxy.h"
-#include "ipc_unixsocket.h"
-#include "log.h"
-#include "process.h"
+#include "libcamera/internal/ipa_module.h"
+#include "libcamera/internal/ipa_proxy.h"
+#include "libcamera/internal/ipc_unixsocket.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/process.h"
 
 namespace libcamera {
 
diff --git a/src/libcamera/proxy/ipa_proxy_thread.cpp b/src/libcamera/proxy/ipa_proxy_thread.cpp
index 81d2d68ee715..03d4c0d927b9 100644
--- a/src/libcamera/proxy/ipa_proxy_thread.cpp
+++ b/src/libcamera/proxy/ipa_proxy_thread.cpp
@@ -10,11 +10,11 @@
 #include <ipa/ipa_interface.h>
 #include <ipa/ipa_module_info.h>
 
-#include "ipa_context_wrapper.h"
-#include "ipa_module.h"
-#include "ipa_proxy.h"
-#include "log.h"
-#include "thread.h"
+#include "libcamera/internal/ipa_context_wrapper.h"
+#include "libcamera/internal/ipa_module.h"
+#include "libcamera/internal/ipa_proxy.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/thread.h"
 
 namespace libcamera {
 
diff --git a/src/libcamera/proxy/worker/ipa_proxy_linux_worker.cpp b/src/libcamera/proxy/worker/ipa_proxy_linux_worker.cpp
index 9cefa2405e19..9ba94d01d0ca 100644
--- a/src/libcamera/proxy/worker/ipa_proxy_linux_worker.cpp
+++ b/src/libcamera/proxy/worker/ipa_proxy_linux_worker.cpp
@@ -13,10 +13,10 @@
 #include <libcamera/event_dispatcher.h>
 #include <libcamera/logging.h>
 
-#include "ipa_module.h"
-#include "ipc_unixsocket.h"
-#include "log.h"
-#include "thread.h"
+#include "libcamera/internal/ipa_module.h"
+#include "libcamera/internal/ipc_unixsocket.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/thread.h"
 
 using namespace libcamera;
 
diff --git a/src/libcamera/proxy/worker/meson.build b/src/libcamera/proxy/worker/meson.build
index 1b1bee5e0170..ac0310a74871 100644
--- a/src/libcamera/proxy/worker/meson.build
+++ b/src/libcamera/proxy/worker/meson.build
@@ -8,7 +8,6 @@ proxy_install_dir = join_paths(get_option('libexecdir'), 'libcamera')
 
 foreach t : ipa_proxy_sources
     proxy = executable(t[0], t[1],
-                       include_directories : libcamera_internal_includes,
                        install : true,
                        install_dir : proxy_install_dir,
                        dependencies : libcamera_dep)
diff --git a/src/libcamera/pub_key.cpp b/src/libcamera/pub_key.cpp
index 064d2dd200e1..2f60adbb7e62 100644
--- a/src/libcamera/pub_key.cpp
+++ b/src/libcamera/pub_key.cpp
@@ -5,7 +5,7 @@
  * pub_key.cpp - Public key signature verification
  */
 
-#include "pub_key.h"
+#include "libcamera/internal/pub_key.h"
 
 #if HAVE_GNUTLS
 #include <gnutls/abstract.h>
diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp
index ea33736fbeb5..6b9e0b4a538a 100644
--- a/src/libcamera/request.cpp
+++ b/src/libcamera/request.cpp
@@ -14,8 +14,8 @@
 #include <libcamera/control_ids.h>
 #include <libcamera/stream.h>
 
-#include "camera_controls.h"
-#include "log.h"
+#include "libcamera/internal/camera_controls.h"
+#include "libcamera/internal/log.h"
 
 /**
  * \file request.h
diff --git a/src/libcamera/semaphore.cpp b/src/libcamera/semaphore.cpp
index ce1eae4914ed..d8988a9189e8 100644
--- a/src/libcamera/semaphore.cpp
+++ b/src/libcamera/semaphore.cpp
@@ -5,8 +5,8 @@
  * semaphore.cpp - General-purpose counting semaphore
  */
 
-#include "semaphore.h"
-#include "thread.h"
+#include "libcamera/internal/semaphore.h"
+#include "libcamera/internal/thread.h"
 
 /**
  * \file semaphore.h
diff --git a/src/libcamera/signal.cpp b/src/libcamera/signal.cpp
index 6eab1fa74d42..2532df3c3073 100644
--- a/src/libcamera/signal.cpp
+++ b/src/libcamera/signal.cpp
@@ -7,7 +7,7 @@
 
 #include <libcamera/signal.h>
 
-#include "thread.h"
+#include "libcamera/internal/thread.h"
 
 /**
  * \file signal.h
diff --git a/src/libcamera/stream.cpp b/src/libcamera/stream.cpp
index 86c0b17db313..f34348f2aea0 100644
--- a/src/libcamera/stream.cpp
+++ b/src/libcamera/stream.cpp
@@ -15,8 +15,8 @@
 
 #include <libcamera/request.h>
 
-#include "log.h"
-#include "utils.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/utils.h"
 
 /**
  * \file stream.h
diff --git a/src/libcamera/thread.cpp b/src/libcamera/thread.cpp
index 85293c188c2a..d1750d72ec8a 100644
--- a/src/libcamera/thread.cpp
+++ b/src/libcamera/thread.cpp
@@ -5,7 +5,7 @@
  * thread.cpp - Thread support
  */
 
-#include "thread.h"
+#include "libcamera/internal/thread.h"
 
 #include <atomic>
 #include <condition_variable>
@@ -16,9 +16,9 @@
 
 #include <libcamera/event_dispatcher.h>
 
-#include "event_dispatcher_poll.h"
-#include "log.h"
-#include "message.h"
+#include "libcamera/internal/event_dispatcher_poll.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/message.h"
 
 /**
  * \page thread Thread Support
diff --git a/src/libcamera/timer.cpp b/src/libcamera/timer.cpp
index 24da51524efb..24e452eda49e 100644
--- a/src/libcamera/timer.cpp
+++ b/src/libcamera/timer.cpp
@@ -12,10 +12,10 @@
 #include <libcamera/camera_manager.h>
 #include <libcamera/event_dispatcher.h>
 
-#include "log.h"
-#include "message.h"
-#include "thread.h"
-#include "utils.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/message.h"
+#include "libcamera/internal/thread.h"
+#include "libcamera/internal/utils.h"
 
 /**
  * \file timer.h
diff --git a/src/libcamera/utils.cpp b/src/libcamera/utils.cpp
index fbadf350908a..d55338fe681a 100644
--- a/src/libcamera/utils.cpp
+++ b/src/libcamera/utils.cpp
@@ -5,7 +5,7 @@
  * utils.cpp - Miscellaneous utility functions
  */
 
-#include "utils.h"
+#include "libcamera/internal/utils.h"
 
 #include <dlfcn.h>
 #include <elf.h>
diff --git a/src/libcamera/v4l2_controls.cpp b/src/libcamera/v4l2_controls.cpp
index 8e2415f2a6df..3f8ec6ca00da 100644
--- a/src/libcamera/v4l2_controls.cpp
+++ b/src/libcamera/v4l2_controls.cpp
@@ -5,7 +5,7 @@
  * v4l2_controls.cpp - V4L2 Controls Support
  */
 
-#include "v4l2_controls.h"
+#include "libcamera/internal/v4l2_controls.h"
 
 #include <string.h>
 
diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp
index d08ab531f034..56ea1ddda2c1 100644
--- a/src/libcamera/v4l2_device.cpp
+++ b/src/libcamera/v4l2_device.cpp
@@ -5,7 +5,7 @@
  * v4l2_device.cpp - Common base for V4L2 video devices and subdevices
  */
 
-#include "v4l2_device.h"
+#include "libcamera/internal/v4l2_device.h"
 
 #include <fcntl.h>
 #include <iomanip>
@@ -14,9 +14,9 @@
 #include <sys/syscall.h>
 #include <unistd.h>
 
-#include "log.h"
-#include "utils.h"
-#include "v4l2_controls.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/utils.h"
+#include "libcamera/internal/v4l2_controls.h"
 
 /**
  * \file v4l2_device.h
diff --git a/src/libcamera/v4l2_pixelformat.cpp b/src/libcamera/v4l2_pixelformat.cpp
index 561f9327780a..36776be99e59 100644
--- a/src/libcamera/v4l2_pixelformat.cpp
+++ b/src/libcamera/v4l2_pixelformat.cpp
@@ -6,7 +6,7 @@
  * v4l2_pixelformat.cpp - V4L2 Pixel Format
  */
 
-#include "v4l2_pixelformat.h"
+#include "libcamera/internal/v4l2_pixelformat.h"
 
 #include <ctype.h>
 #include <map>
@@ -16,8 +16,8 @@
 
 #include <libcamera/pixelformats.h>
 
-#include "formats.h"
-#include "log.h"
+#include "libcamera/internal/formats.h"
+#include "libcamera/internal/log.h"
 
 /**
  * \file v4l2_pixelformat.h
diff --git a/src/libcamera/v4l2_subdevice.cpp b/src/libcamera/v4l2_subdevice.cpp
index 2b756178fc0a..7aefc1be032d 100644
--- a/src/libcamera/v4l2_subdevice.cpp
+++ b/src/libcamera/v4l2_subdevice.cpp
@@ -5,7 +5,7 @@
  * v4l2_subdevice.cpp - V4L2 Subdevice
  */
 
-#include "v4l2_subdevice.h"
+#include "libcamera/internal/v4l2_subdevice.h"
 
 #include <fcntl.h>
 #include <iomanip>
@@ -19,10 +19,10 @@
 
 #include <libcamera/geometry.h>
 
-#include "log.h"
-#include "media_device.h"
-#include "media_object.h"
-#include "utils.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/media_device.h"
+#include "libcamera/internal/media_object.h"
+#include "libcamera/internal/utils.h"
 
 /**
  * \file v4l2_subdevice.h
diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp
index 4b9f8b5c0413..d35596bd43e4 100644
--- a/src/libcamera/v4l2_videodevice.cpp
+++ b/src/libcamera/v4l2_videodevice.cpp
@@ -5,7 +5,7 @@
  * v4l2_videodevice.cpp - V4L2 Video Device
  */
 
-#include "v4l2_videodevice.h"
+#include "libcamera/internal/v4l2_videodevice.h"
 
 #include <fcntl.h>
 #include <iomanip>
@@ -23,10 +23,10 @@
 #include <libcamera/event_notifier.h>
 #include <libcamera/file_descriptor.h>
 
-#include "log.h"
-#include "media_device.h"
-#include "media_object.h"
-#include "utils.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/media_device.h"
+#include "libcamera/internal/media_object.h"
+#include "libcamera/internal/utils.h"
 
 /**
  * \file v4l2_videodevice.h
diff --git a/src/v4l2/meson.build b/src/v4l2/meson.build
index fc1be82d1b02..0fb941ea9b9d 100644
--- a/src/v4l2/meson.build
+++ b/src/v4l2/meson.build
@@ -22,6 +22,5 @@ v4l2_compat = shared_library('v4l2-compat',
                              v4l2_compat_sources,
                              name_prefix : '',
                              install : true,
-                             include_directories : libcamera_internal_includes,
                              dependencies : [ libcamera_dep, libdl ],
                              cpp_args : v4l2_compat_cpp_args)
diff --git a/src/v4l2/v4l2_camera.cpp b/src/v4l2/v4l2_camera.cpp
index ecbb70acfb8e..50a4121cc93f 100644
--- a/src/v4l2/v4l2_camera.cpp
+++ b/src/v4l2/v4l2_camera.cpp
@@ -9,7 +9,7 @@
 
 #include <errno.h>
 
-#include "log.h"
+#include "libcamera/internal/log.h"
 
 using namespace libcamera;
 
diff --git a/src/v4l2/v4l2_camera.h b/src/v4l2/v4l2_camera.h
index 130995d95eb4..c969130fb37d 100644
--- a/src/v4l2/v4l2_camera.h
+++ b/src/v4l2/v4l2_camera.h
@@ -17,7 +17,7 @@
 #include <libcamera/file_descriptor.h>
 #include <libcamera/framebuffer_allocator.h>
 
-#include "semaphore.h"
+#include "libcamera/internal/semaphore.h"
 
 using namespace libcamera;
 
diff --git a/src/v4l2/v4l2_camera_proxy.cpp b/src/v4l2/v4l2_camera_proxy.cpp
index 47d0528b324f..19e8f6d3b98d 100644
--- a/src/v4l2/v4l2_camera_proxy.cpp
+++ b/src/v4l2/v4l2_camera_proxy.cpp
@@ -17,8 +17,9 @@
 #include <libcamera/camera.h>
 #include <libcamera/object.h>
 
-#include "log.h"
-#include "utils.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/utils.h"
+
 #include "v4l2_camera.h"
 #include "v4l2_compat_manager.h"
 
diff --git a/src/v4l2/v4l2_compat_manager.cpp b/src/v4l2/v4l2_compat_manager.cpp
index 961d06b3e39a..cd8ac0b8e819 100644
--- a/src/v4l2/v4l2_compat_manager.cpp
+++ b/src/v4l2/v4l2_compat_manager.cpp
@@ -22,7 +22,7 @@
 #include <libcamera/camera.h>
 #include <libcamera/camera_manager.h>
 
-#include "log.h"
+#include "libcamera/internal/log.h"
 
 using namespace libcamera;
 
diff --git a/test/byte-stream-buffer.cpp b/test/byte-stream-buffer.cpp
index bc1d462ebf6f..d606f146f6ef 100644
--- a/test/byte-stream-buffer.cpp
+++ b/test/byte-stream-buffer.cpp
@@ -8,7 +8,8 @@
 #include <array>
 #include <iostream>
 
-#include "byte_stream_buffer.h"
+#include "libcamera/internal/byte_stream_buffer.h"
+
 #include "test.h"
 
 using namespace std;
diff --git a/test/camera-sensor.cpp b/test/camera-sensor.cpp
index 6069d668e495..8c7fd1d2d444 100644
--- a/test/camera-sensor.cpp
+++ b/test/camera-sensor.cpp
@@ -10,11 +10,11 @@
 
 #include <linux/media-bus-format.h>
 
-#include "camera_sensor.h"
-#include "device_enumerator.h"
-#include "media_device.h"
-#include "utils.h"
-#include "v4l2_subdevice.h"
+#include "libcamera/internal/camera_sensor.h"
+#include "libcamera/internal/device_enumerator.h"
+#include "libcamera/internal/media_device.h"
+#include "libcamera/internal/utils.h"
+#include "libcamera/internal/v4l2_subdevice.h"
 
 #include "test.h"
 
diff --git a/test/camera/buffer_import.cpp b/test/camera/buffer_import.cpp
index 3f392cdc0732..ad680a83f918 100644
--- a/test/camera/buffer_import.cpp
+++ b/test/camera/buffer_import.cpp
@@ -12,9 +12,9 @@
 #include <numeric>
 #include <vector>
 
-#include "device_enumerator.h"
-#include "media_device.h"
-#include "v4l2_videodevice.h"
+#include "libcamera/internal/device_enumerator.h"
+#include "libcamera/internal/media_device.h"
+#include "libcamera/internal/v4l2_videodevice.h"
 
 #include "buffer_source.h"
 #include "camera_test.h"
diff --git a/test/controls/control_info_map.cpp b/test/controls/control_info_map.cpp
index eeb702db095b..e4305f132db7 100644
--- a/test/controls/control_info_map.cpp
+++ b/test/controls/control_info_map.cpp
@@ -12,7 +12,7 @@
 #include <libcamera/control_ids.h>
 #include <libcamera/controls.h>
 
-#include "camera_controls.h"
+#include "libcamera/internal/camera_controls.h"
 
 #include "camera_test.h"
 #include "test.h"
diff --git a/test/controls/control_list.cpp b/test/controls/control_list.cpp
index d51ec47d61d3..5c8485b5dcc3 100644
--- a/test/controls/control_list.cpp
+++ b/test/controls/control_list.cpp
@@ -12,7 +12,7 @@
 #include <libcamera/control_ids.h>
 #include <libcamera/controls.h>
 
-#include "camera_controls.h"
+#include "libcamera/internal/camera_controls.h"
 
 #include "camera_test.h"
 #include "test.h"
diff --git a/test/event-dispatcher.cpp b/test/event-dispatcher.cpp
index 9f9cf17818f2..1b61778699ed 100644
--- a/test/event-dispatcher.cpp
+++ b/test/event-dispatcher.cpp
@@ -13,8 +13,9 @@
 #include <libcamera/event_dispatcher.h>
 #include <libcamera/timer.h>
 
+#include "libcamera/internal/thread.h"
+
 #include "test.h"
-#include "thread.h"
 
 using namespace std;
 using namespace libcamera;
diff --git a/test/event-thread.cpp b/test/event-thread.cpp
index 01120733eca4..c90e6ac04dd3 100644
--- a/test/event-thread.cpp
+++ b/test/event-thread.cpp
@@ -13,8 +13,9 @@
 #include <libcamera/event_notifier.h>
 #include <libcamera/timer.h>
 
+#include "libcamera/internal/thread.h"
+
 #include "test.h"
-#include "thread.h"
 
 using namespace std;
 using namespace libcamera;
diff --git a/test/event.cpp b/test/event.cpp
index 816060cc44a2..c865092c7a8a 100644
--- a/test/event.cpp
+++ b/test/event.cpp
@@ -13,8 +13,9 @@
 #include <libcamera/event_notifier.h>
 #include <libcamera/timer.h>
 
+#include "libcamera/internal/thread.h"
+
 #include "test.h"
-#include "thread.h"
 
 using namespace std;
 using namespace libcamera;
diff --git a/test/file-descriptor.cpp b/test/file-descriptor.cpp
index e467f3a7145e..7477a843531c 100644
--- a/test/file-descriptor.cpp
+++ b/test/file-descriptor.cpp
@@ -13,8 +13,9 @@
 
 #include <libcamera/file_descriptor.h>
 
+#include "libcamera/internal/utils.h"
+
 #include "test.h"
-#include "utils.h"
 
 using namespace libcamera;
 using namespace std;
diff --git a/test/file.cpp b/test/file.cpp
index 6558399808f8..6262a6f04c0b 100644
--- a/test/file.cpp
+++ b/test/file.cpp
@@ -13,7 +13,8 @@
 #include <sys/types.h>
 #include <unistd.h>
 
-#include "file.h"
+#include "libcamera/internal/file.h"
+
 #include "test.h"
 
 using namespace std;
diff --git a/test/ipa/ipa_interface_test.cpp b/test/ipa/ipa_interface_test.cpp
index 7fa88efee089..c394377dacd0 100644
--- a/test/ipa/ipa_interface_test.cpp
+++ b/test/ipa/ipa_interface_test.cpp
@@ -18,12 +18,13 @@
 
 #include <ipa/ipa_vimc.h>
 
-#include "device_enumerator.h"
-#include "ipa_manager.h"
-#include "ipa_module.h"
-#include "pipeline_handler.h"
+#include "libcamera/internal/device_enumerator.h"
+#include "libcamera/internal/ipa_manager.h"
+#include "libcamera/internal/ipa_module.h"
+#include "libcamera/internal/pipeline_handler.h"
+#include "libcamera/internal/thread.h"
+
 #include "test.h"
-#include "thread.h"
 
 using namespace std;
 using namespace libcamera;
diff --git a/test/ipa/ipa_module_test.cpp b/test/ipa/ipa_module_test.cpp
index e3aee190b410..bd5e0e4c738e 100644
--- a/test/ipa/ipa_module_test.cpp
+++ b/test/ipa/ipa_module_test.cpp
@@ -8,7 +8,7 @@
 #include <iostream>
 #include <string.h>
 
-#include "ipa_module.h"
+#include "libcamera/internal/ipa_module.h"
 
 #include "test.h"
 
diff --git a/test/ipa/ipa_wrappers_test.cpp b/test/ipa/ipa_wrappers_test.cpp
index 4de132123525..aa7a9dcc6050 100644
--- a/test/ipa/ipa_wrappers_test.cpp
+++ b/test/ipa/ipa_wrappers_test.cpp
@@ -15,11 +15,11 @@
 #include <libcamera/controls.h>
 #include <libipa/ipa_interface_wrapper.h>
 
-#include "camera_sensor.h"
-#include "device_enumerator.h"
-#include "ipa_context_wrapper.h"
-#include "media_device.h"
-#include "v4l2_subdevice.h"
+#include "libcamera/internal/camera_sensor.h"
+#include "libcamera/internal/device_enumerator.h"
+#include "libcamera/internal/ipa_context_wrapper.h"
+#include "libcamera/internal/media_device.h"
+#include "libcamera/internal/v4l2_subdevice.h"
 
 #include "test.h"
 
diff --git a/test/ipc/unixsocket.cpp b/test/ipc/unixsocket.cpp
index f53042b88720..4487d27b441d 100644
--- a/test/ipc/unixsocket.cpp
+++ b/test/ipc/unixsocket.cpp
@@ -18,10 +18,11 @@
 #include <libcamera/event_dispatcher.h>
 #include <libcamera/timer.h>
 
-#include "ipc_unixsocket.h"
+#include "libcamera/internal/ipc_unixsocket.h"
+#include "libcamera/internal/thread.h"
+#include "libcamera/internal/utils.h"
+
 #include "test.h"
-#include "thread.h"
-#include "utils.h"
 
 #define CMD_CLOSE	0
 #define CMD_REVERSE	1
diff --git a/test/libtest/buffer_source.cpp b/test/libtest/buffer_source.cpp
index d1dad2a0f8cf..ee87c8cd821c 100644
--- a/test/libtest/buffer_source.cpp
+++ b/test/libtest/buffer_source.cpp
@@ -10,7 +10,7 @@
 #include <iostream>
 #include <memory>
 
-#include "device_enumerator.h"
+#include "libcamera/internal/device_enumerator.h"
 
 #include "test.h"
 
diff --git a/test/libtest/buffer_source.h b/test/libtest/buffer_source.h
index ae0879c99480..95a82a8229fa 100644
--- a/test/libtest/buffer_source.h
+++ b/test/libtest/buffer_source.h
@@ -9,8 +9,8 @@
 
 #include <libcamera/libcamera.h>
 
-#include "media_device.h"
-#include "v4l2_videodevice.h"
+#include "libcamera/internal/media_device.h"
+#include "libcamera/internal/v4l2_videodevice.h"
 
 using namespace libcamera;
 
diff --git a/test/libtest/meson.build b/test/libtest/meson.build
index 481f6d6baa61..542335ea5e7c 100644
--- a/test/libtest/meson.build
+++ b/test/libtest/meson.build
@@ -15,7 +15,6 @@ test_includes_public = [
 
 test_includes_internal = [
     test_includes_public,
-    libcamera_internal_includes,
 ]
 
 libtest = static_library('libtest', libtest_sources,
diff --git a/test/log/log_api.cpp b/test/log/log_api.cpp
index 33622f841253..6f3248a79d0a 100644
--- a/test/log/log_api.cpp
+++ b/test/log/log_api.cpp
@@ -18,7 +18,8 @@
 
 #include <libcamera/logging.h>
 
-#include "log.h"
+#include "libcamera/internal/log.h"
+
 #include "test.h"
 
 using namespace std;
diff --git a/test/log/log_process.cpp b/test/log/log_process.cpp
index 2df4aa43713c..8463d0ede967 100644
--- a/test/log/log_process.cpp
+++ b/test/log/log_process.cpp
@@ -18,11 +18,12 @@
 #include <libcamera/logging.h>
 #include <libcamera/timer.h>
 
-#include "log.h"
-#include "process.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/process.h"
+#include "libcamera/internal/thread.h"
+#include "libcamera/internal/utils.h"
+
 #include "test.h"
-#include "thread.h"
-#include "utils.h"
 
 using namespace std;
 using namespace libcamera;
diff --git a/test/media_device/media_device_print_test.cpp b/test/media_device/media_device_print_test.cpp
index 5018906c75e7..1f5e3f3e84c0 100644
--- a/test/media_device/media_device_print_test.cpp
+++ b/test/media_device/media_device_print_test.cpp
@@ -10,7 +10,7 @@
 #include <sys/stat.h>
 #include <unistd.h>
 
-#include "media_device.h"
+#include "libcamera/internal/media_device.h"
 
 #include "test.h"
 
diff --git a/test/media_device/media_device_test.h b/test/media_device/media_device_test.h
index cdbd14841d5c..0c8bf9f25563 100644
--- a/test/media_device/media_device_test.h
+++ b/test/media_device/media_device_test.h
@@ -9,8 +9,8 @@
 
 #include <memory>
 
-#include "device_enumerator.h"
-#include "media_device.h"
+#include "libcamera/internal/device_enumerator.h"
+#include "libcamera/internal/media_device.h"
 
 #include "test.h"
 
diff --git a/test/message.cpp b/test/message.cpp
index 478bc79dffa6..9553ba8cbaed 100644
--- a/test/message.cpp
+++ b/test/message.cpp
@@ -9,8 +9,9 @@
 #include <iostream>
 #include <thread>
 
-#include "message.h"
-#include "thread.h"
+#include "libcamera/internal/message.h"
+#include "libcamera/internal/thread.h"
+
 #include "test.h"
 
 using namespace std;
diff --git a/test/object-invoke.cpp b/test/object-invoke.cpp
index fa162c838c78..1ae11bb11e16 100644
--- a/test/object-invoke.cpp
+++ b/test/object-invoke.cpp
@@ -11,8 +11,9 @@
 #include <libcamera/event_dispatcher.h>
 #include <libcamera/object.h>
 
+#include "libcamera/internal/thread.h"
+
 #include "test.h"
-#include "thread.h"
 
 using namespace std;
 using namespace libcamera;
diff --git a/test/object.cpp b/test/object.cpp
index 16118971c755..264659b405d9 100644
--- a/test/object.cpp
+++ b/test/object.cpp
@@ -9,8 +9,8 @@
 
 #include <libcamera/object.h>
 
-#include "message.h"
-#include "thread.h"
+#include "libcamera/internal/message.h"
+#include "libcamera/internal/thread.h"
 
 #include "test.h"
 
diff --git a/test/pipeline/ipu3/ipu3_pipeline_test.cpp b/test/pipeline/ipu3/ipu3_pipeline_test.cpp
index a5c6be0955df..34998f8f6d04 100644
--- a/test/pipeline/ipu3/ipu3_pipeline_test.cpp
+++ b/test/pipeline/ipu3/ipu3_pipeline_test.cpp
@@ -13,9 +13,10 @@
 #include <libcamera/camera.h>
 #include <libcamera/camera_manager.h>
 
-#include "device_enumerator.h"
-#include "media_device.h"
-#include "media_object.h"
+#include "libcamera/internal/device_enumerator.h"
+#include "libcamera/internal/media_device.h"
+#include "libcamera/internal/media_object.h"
+
 #include "test.h"
 
 using namespace std;
diff --git a/test/pipeline/rkisp1/rkisp1_pipeline_test.cpp b/test/pipeline/rkisp1/rkisp1_pipeline_test.cpp
index d46c928fbaf7..b6678ce76e9a 100644
--- a/test/pipeline/rkisp1/rkisp1_pipeline_test.cpp
+++ b/test/pipeline/rkisp1/rkisp1_pipeline_test.cpp
@@ -16,9 +16,10 @@
 #include <libcamera/camera.h>
 #include <libcamera/camera_manager.h>
 
-#include "device_enumerator.h"
-#include "media_device.h"
-#include "media_object.h"
+#include "libcamera/internal/device_enumerator.h"
+#include "libcamera/internal/media_device.h"
+#include "libcamera/internal/media_object.h"
+
 #include "test.h"
 
 using namespace std;
diff --git a/test/process/process_test.cpp b/test/process/process_test.cpp
index 7e7b3c2c8bf3..ce0cc7c972cd 100644
--- a/test/process/process_test.cpp
+++ b/test/process/process_test.cpp
@@ -12,10 +12,11 @@
 #include <libcamera/event_dispatcher.h>
 #include <libcamera/timer.h>
 
-#include "process.h"
+#include "libcamera/internal/process.h"
+#include "libcamera/internal/thread.h"
+#include "libcamera/internal/utils.h"
+
 #include "test.h"
-#include "thread.h"
-#include "utils.h"
 
 using namespace std;
 using namespace libcamera;
diff --git a/test/serialization/control_serialization.cpp b/test/serialization/control_serialization.cpp
index 111365241eb8..e23383d13bd6 100644
--- a/test/serialization/control_serialization.cpp
+++ b/test/serialization/control_serialization.cpp
@@ -11,8 +11,9 @@
 #include <libcamera/control_ids.h>
 #include <libcamera/controls.h>
 
-#include "byte_stream_buffer.h"
-#include "control_serializer.h"
+#include "libcamera/internal/byte_stream_buffer.h"
+#include "libcamera/internal/control_serializer.h"
+
 #include "serialization_test.h"
 #include "test.h"
 
diff --git a/test/signal-threads.cpp b/test/signal-threads.cpp
index f77733ebc030..3c5f3792e385 100644
--- a/test/signal-threads.cpp
+++ b/test/signal-threads.cpp
@@ -9,10 +9,11 @@
 #include <iostream>
 #include <thread>
 
-#include "message.h"
-#include "thread.h"
+#include "libcamera/internal/message.h"
+#include "libcamera/internal/thread.h"
+#include "libcamera/internal/utils.h"
+
 #include "test.h"
-#include "utils.h"
 
 using namespace std;
 using namespace libcamera;
diff --git a/test/threads.cpp b/test/threads.cpp
index 0454761de12c..b4b8d913cd2b 100644
--- a/test/threads.cpp
+++ b/test/threads.cpp
@@ -9,7 +9,8 @@
 #include <iostream>
 #include <thread>
 
-#include "thread.h"
+#include "libcamera/internal/thread.h"
+
 #include "test.h"
 
 using namespace std;
diff --git a/test/timer-thread.cpp b/test/timer-thread.cpp
index 32853b4e80ef..2f901787f5fb 100644
--- a/test/timer-thread.cpp
+++ b/test/timer-thread.cpp
@@ -11,8 +11,9 @@
 #include <libcamera/event_dispatcher.h>
 #include <libcamera/timer.h>
 
+#include "libcamera/internal/thread.h"
+
 #include "test.h"
-#include "thread.h"
 
 using namespace std;
 using namespace libcamera;
diff --git a/test/timer.cpp b/test/timer.cpp
index 2bdb006edccb..7d5b93c37799 100644
--- a/test/timer.cpp
+++ b/test/timer.cpp
@@ -11,8 +11,9 @@
 #include <libcamera/event_dispatcher.h>
 #include <libcamera/timer.h>
 
+#include "libcamera/internal/thread.h"
+
 #include "test.h"
-#include "thread.h"
 
 using namespace std;
 using namespace libcamera;
diff --git a/test/utils.cpp b/test/utils.cpp
index 55ce9365a53e..66b91f1203e1 100644
--- a/test/utils.cpp
+++ b/test/utils.cpp
@@ -12,8 +12,9 @@
 
 #include <libcamera/geometry.h>
 
+#include "libcamera/internal/utils.h"
+
 #include "test.h"
-#include "utils.h"
 
 using namespace std;
 using namespace libcamera;
diff --git a/test/v4l2_subdevice/list_formats.cpp b/test/v4l2_subdevice/list_formats.cpp
index 067dc5ed30f4..25503c3334e5 100644
--- a/test/v4l2_subdevice/list_formats.cpp
+++ b/test/v4l2_subdevice/list_formats.cpp
@@ -11,7 +11,8 @@
 
 #include <libcamera/geometry.h>
 
-#include "v4l2_subdevice.h"
+#include "libcamera/internal/v4l2_subdevice.h"
+
 #include "v4l2_subdevice_test.h"
 
 using namespace std;
diff --git a/test/v4l2_subdevice/test_formats.cpp b/test/v4l2_subdevice/test_formats.cpp
index 5cf5d5664b04..9635c9948946 100644
--- a/test/v4l2_subdevice/test_formats.cpp
+++ b/test/v4l2_subdevice/test_formats.cpp
@@ -8,7 +8,8 @@
 #include <iostream>
 #include <limits.h>
 
-#include "v4l2_subdevice.h"
+#include "libcamera/internal/v4l2_subdevice.h"
+
 #include "v4l2_subdevice_test.h"
 
 using namespace std;
diff --git a/test/v4l2_subdevice/v4l2_subdevice_test.cpp b/test/v4l2_subdevice/v4l2_subdevice_test.cpp
index 562a638cb28e..d8fbfd9f6b0f 100644
--- a/test/v4l2_subdevice/v4l2_subdevice_test.cpp
+++ b/test/v4l2_subdevice/v4l2_subdevice_test.cpp
@@ -9,9 +9,10 @@
 #include <string.h>
 #include <sys/stat.h>
 
-#include "device_enumerator.h"
-#include "media_device.h"
-#include "v4l2_subdevice.h"
+#include "libcamera/internal/device_enumerator.h"
+#include "libcamera/internal/media_device.h"
+#include "libcamera/internal/v4l2_subdevice.h"
+
 #include "v4l2_subdevice_test.h"
 
 using namespace std;
diff --git a/test/v4l2_subdevice/v4l2_subdevice_test.h b/test/v4l2_subdevice/v4l2_subdevice_test.h
index 3bce6691f8ef..00c6399d3b8a 100644
--- a/test/v4l2_subdevice/v4l2_subdevice_test.h
+++ b/test/v4l2_subdevice/v4l2_subdevice_test.h
@@ -10,10 +10,11 @@
 
 #include <libcamera/buffer.h>
 
-#include "device_enumerator.h"
-#include "media_device.h"
+#include "libcamera/internal/device_enumerator.h"
+#include "libcamera/internal/media_device.h"
+#include "libcamera/internal/v4l2_subdevice.h"
+
 #include "test.h"
-#include "v4l2_subdevice.h"
 
 using namespace libcamera;
 
diff --git a/test/v4l2_videodevice/buffer_sharing.cpp b/test/v4l2_videodevice/buffer_sharing.cpp
index 14d3055ad7d1..ba2cc40d7294 100644
--- a/test/v4l2_videodevice/buffer_sharing.cpp
+++ b/test/v4l2_videodevice/buffer_sharing.cpp
@@ -16,7 +16,8 @@
 #include <libcamera/event_dispatcher.h>
 #include <libcamera/timer.h>
 
-#include "thread.h"
+#include "libcamera/internal/thread.h"
+
 #include "v4l2_videodevice_test.h"
 
 class BufferSharingTest : public V4L2VideoDeviceTest
diff --git a/test/v4l2_videodevice/capture_async.cpp b/test/v4l2_videodevice/capture_async.cpp
index b38aabc6263d..13cbcc80b52b 100644
--- a/test/v4l2_videodevice/capture_async.cpp
+++ b/test/v4l2_videodevice/capture_async.cpp
@@ -11,7 +11,8 @@
 #include <libcamera/event_dispatcher.h>
 #include <libcamera/timer.h>
 
-#include "thread.h"
+#include "libcamera/internal/thread.h"
+
 #include "v4l2_videodevice_test.h"
 
 class CaptureAsyncTest : public V4L2VideoDeviceTest
diff --git a/test/v4l2_videodevice/controls.cpp b/test/v4l2_videodevice/controls.cpp
index 347af2112f1a..9f09d036e83a 100644
--- a/test/v4l2_videodevice/controls.cpp
+++ b/test/v4l2_videodevice/controls.cpp
@@ -10,7 +10,7 @@
 #include <iostream>
 #include <limits.h>
 
-#include "v4l2_videodevice.h"
+#include "libcamera/internal/v4l2_videodevice.h"
 
 #include "v4l2_videodevice_test.h"
 
diff --git a/test/v4l2_videodevice/formats.cpp b/test/v4l2_videodevice/formats.cpp
index a74214215faf..043732dcaba1 100644
--- a/test/v4l2_videodevice/formats.cpp
+++ b/test/v4l2_videodevice/formats.cpp
@@ -8,8 +8,8 @@
 #include <iostream>
 #include <limits.h>
 
-#include "utils.h"
-#include "v4l2_videodevice.h"
+#include "libcamera/internal/utils.h"
+#include "libcamera/internal/v4l2_videodevice.h"
 
 #include "v4l2_videodevice_test.h"
 
diff --git a/test/v4l2_videodevice/v4l2_m2mdevice.cpp b/test/v4l2_videodevice/v4l2_m2mdevice.cpp
index d20e5dfc3077..44a39d4d8ab7 100644
--- a/test/v4l2_videodevice/v4l2_m2mdevice.cpp
+++ b/test/v4l2_videodevice/v4l2_m2mdevice.cpp
@@ -11,10 +11,10 @@
 #include <libcamera/event_dispatcher.h>
 #include <libcamera/timer.h>
 
-#include "device_enumerator.h"
-#include "media_device.h"
-#include "thread.h"
-#include "v4l2_videodevice.h"
+#include "libcamera/internal/device_enumerator.h"
+#include "libcamera/internal/media_device.h"
+#include "libcamera/internal/thread.h"
+#include "libcamera/internal/v4l2_videodevice.h"
 
 #include "test.h"
 
diff --git a/test/v4l2_videodevice/v4l2_videodevice_test.cpp b/test/v4l2_videodevice/v4l2_videodevice_test.cpp
index 93b9e72da5b4..f23aaf8f514b 100644
--- a/test/v4l2_videodevice/v4l2_videodevice_test.cpp
+++ b/test/v4l2_videodevice/v4l2_videodevice_test.cpp
@@ -9,11 +9,11 @@
 
 #include <linux/media-bus-format.h>
 
+#include "libcamera/internal/device_enumerator.h"
+#include "libcamera/internal/media_device.h"
+
 #include "v4l2_videodevice_test.h"
 
-#include "device_enumerator.h"
-#include "media_device.h"
-
 using namespace std;
 using namespace libcamera;
 
diff --git a/test/v4l2_videodevice/v4l2_videodevice_test.h b/test/v4l2_videodevice/v4l2_videodevice_test.h
index 9acaceb84fe0..21054561e068 100644
--- a/test/v4l2_videodevice/v4l2_videodevice_test.h
+++ b/test/v4l2_videodevice/v4l2_videodevice_test.h
@@ -11,14 +11,14 @@
 
 #include <libcamera/buffer.h>
 
+#include "libcamera/internal/camera_sensor.h"
+#include "libcamera/internal/device_enumerator.h"
+#include "libcamera/internal/media_device.h"
+#include "libcamera/internal/v4l2_subdevice.h"
+#include "libcamera/internal/v4l2_videodevice.h"
+
 #include "test.h"
 
-#include "camera_sensor.h"
-#include "device_enumerator.h"
-#include "media_device.h"
-#include "v4l2_subdevice.h"
-#include "v4l2_videodevice.h"
-
 using namespace libcamera;
 
 class V4L2VideoDeviceTest : public Test
