diff --git a/src/libcamera/include/ipa_manager.h b/src/libcamera/include/ipa_manager.h
index 126f8ba..edaedf9 100644
--- a/src/libcamera/include/ipa_manager.h
+++ b/src/libcamera/include/ipa_manager.h
@@ -7,6 +7,9 @@
#ifndef __LIBCAMERA_IPA_MANAGER_H__
#define __LIBCAMERA_IPA_MANAGER_H__
+#include <functional>
+#include <memory>
+#include <mutex>
#include <vector>
 #include <ipa/ipa_interface.h>
@@ -33,6 +36,11 @@ private:
               ~IPAManager();
                int addDir(const char *libDir);
+
+private:
+             static std::unique_ptr<IPAManager, std::function<void(IPAManager*)>> singleton_;
+             static std::once_flag singletonFlag_;
+
};
 } /* namespace libcamera */
diff --git a/src/libcamera/ipa_manager.cpp b/src/libcamera/ipa_manager.cpp
index f3180c0..8f60be4 100644
--- a/src/libcamera/ipa_manager.cpp
+++ b/src/libcamera/ipa_manager.cpp
@@ -9,6 +9,7 @@
 #include <algorithm>
#include <dirent.h>
+#include <memory>
#include <string.h>
#include <sys/types.h>
@@ -79,6 +80,9 @@ IPAManager::~IPAManager()
                               delete module;
