diff --git a/camera/hal/intel/ipu3/AAL/Camera3HAL.h b/camera/hal/intel/ipu3/AAL/Camera3HAL.h
index 65668ab..e14a8a4 100644
--- a/camera/hal/intel/ipu3/AAL/Camera3HAL.h
+++ b/camera/hal/intel/ipu3/AAL/Camera3HAL.h
@@ -17,7 +17,7 @@
 #ifndef _CAMERA3_HAL_H_
 #define _CAMERA3_HAL_H_
 
-#include <cros-camera/camera_mojo_channel_manager.h>
+#include <cros-camera/camera_mojo_channel_manager_token.h>
 #include <hardware/camera3.h>
 
 #include "CameraConf.h"
@@ -27,7 +27,7 @@
 namespace cros {
 namespace intel {
 
-extern CameraMojoChannelManager* g_mojo_manager;
+extern CameraMojoChannelManagerToken* g_mojo_manager_token;
 
 /**
  * \class Camera3HAL
diff --git a/camera/hal/intel/ipu3/Camera3HALModule.cpp b/camera/hal/intel/ipu3/Camera3HALModule.cpp
index 76449d6..2b19445 100644
--- a/camera/hal/intel/ipu3/Camera3HALModule.cpp
+++ b/camera/hal/intel/ipu3/Camera3HALModule.cpp
@@ -54,7 +54,7 @@
  */
 static std::mutex sCameraHalMutex;
 
-CameraMojoChannelManager* cros::intel::g_mojo_manager = nullptr;
+CameraMojoChannelManagerToken* cros::intel::g_mojo_manager_token = nullptr;
 
 int openCameraHardware(int id, const hw_module_t* module, hw_device_t** device)
 {
@@ -233,9 +233,9 @@
     return 0;
 }
 
-static void set_up(CameraMojoChannelManager* mojo_manager)
+static void set_up(CameraMojoChannelManagerToken* token)
 {
-    cros::intel::g_mojo_manager = mojo_manager;
+    cros::intel::g_mojo_manager_token = token;
 
     LogHelper::setDebugLevel();
     PerformanceTraces::reset();
@@ -251,7 +251,7 @@
 {
     PlatformData::deinit();
 
-    cros::intel::g_mojo_manager = nullptr;
+    cros::intel::g_mojo_manager_token = nullptr;
 }
 
 static struct hw_module_methods_t hal_module_methods = {
diff --git a/camera/hal/intel/ipu3/common/jpeg/ImgEncoder.cpp b/camera/hal/intel/ipu3/common/jpeg/ImgEncoder.cpp
index ef5084a..c7c4c26 100644
--- a/camera/hal/intel/ipu3/common/jpeg/ImgEncoder.cpp
+++ b/camera/hal/intel/ipu3/common/jpeg/ImgEncoder.cpp
@@ -28,7 +28,7 @@
 namespace intel {
 
 ImgEncoder::ImgEncoder(int cameraid) :
-    mJpegCompressor(cros::JpegCompressor::GetInstance(g_mojo_manager))
+    mJpegCompressor(cros::JpegCompressor::GetInstance(g_mojo_manager_token))
 {
     LOG1("@%s", __FUNCTION__);
 }
diff --git a/camera/hal/intel/ipu3/psl/ipu3/CaptureUnit.h b/camera/hal/intel/ipu3/psl/ipu3/CaptureUnit.h
index b0198ee..af24537 100644
--- a/camera/hal/intel/ipu3/psl/ipu3/CaptureUnit.h
+++ b/camera/hal/intel/ipu3/psl/ipu3/CaptureUnit.h
@@ -14,6 +14,7 @@
  * limitations under the License.
  */
 
+#include <queue>
 #include <utils/Errors.h>
 #include <vector>
 
diff --git a/camera/hal/intel/ipu3/psl/ipu3/ipc/client/Intel3AClient.cpp b/camera/hal/intel/ipu3/psl/ipu3/ipc/client/Intel3AClient.cpp
index 0c54ef5..ddb7c76 100644
--- a/camera/hal/intel/ipu3/psl/ipu3/ipc/client/Intel3AClient.cpp
+++ b/camera/hal/intel/ipu3/psl/ipu3/ipc/client/Intel3AClient.cpp
@@ -41,7 +41,7 @@
     Intel3AClient::notify = notifyCallback;
 
     mBridge = cros::CameraAlgorithmBridge::CreateInstance(
-        cros::CameraAlgorithmBackend::kVendorCpu, g_mojo_manager);
+        cros::CameraAlgorithmBackend::kVendorCpu, g_mojo_manager_token);
     CheckError(!mBridge, VOID_VALUE, "@%s, mBridge is nullptr", __FUNCTION__);
     CheckError((mBridge->Initialize(this) != 0), VOID_VALUE, "@%s, call mBridge->Initialize fail", __FUNCTION__);
 
diff --git a/camera/hal/intel/ipu6/aal/Camera3HALModule.cpp b/camera/hal/intel/ipu6/aal/Camera3HALModule.cpp
index a004e46..4c1627c 100644
--- a/camera/hal/intel/ipu6/aal/Camera3HALModule.cpp
+++ b/camera/hal/intel/ipu6/aal/Camera3HALModule.cpp
@@ -246,15 +246,15 @@
  *  4. get_number_of_cameras()
  *  ......
  */
-static void hal_set_up(cros::CameraMojoChannelManager* mojoManager) {
+static void hal_set_up(cros::CameraMojoChannelManagerToken* token) {
     LOG1("@%s", __func__);
 
     icamera::Log::setDebugLevel();
     icamera::CameraDump::setDumpLevel();
 
 #ifdef ENABLE_SANDBOXING
-    // Create IntelAlgoClient and set the mojo manager
-    icamera::IntelAlgoClient::getInstance()->setMojoManager(mojoManager);
+    // Create IntelAlgoClient and set the mojo manager token
+    icamera::IntelAlgoClient::getInstance()->setMojoManagerToken(token);
 #endif
 }
 
diff --git a/camera/hal/intel/ipu6/modules/sandboxing/client/IntelAlgoClient.cpp b/camera/hal/intel/ipu6/modules/sandboxing/client/IntelAlgoClient.cpp
index 44c330f..7546a14 100644
--- a/camera/hal/intel/ipu6/modules/sandboxing/client/IntelAlgoClient.cpp
+++ b/camera/hal/intel/ipu6/modules/sandboxing/client/IntelAlgoClient.cpp
@@ -60,7 +60,7 @@
         : mErrCb(nullptr),
           mGpuBridge(nullptr),
           mIPCStatus(true),
-          mMojoManager(nullptr),
+          mMojoManagerToken(nullptr),
           mInitialized(false) {
     LOGIPC("@%s", __func__);
 }
@@ -70,8 +70,8 @@
 }
 
 int IntelAlgoClient::initialize() {
-    LOGIPC("@%s, mMojoManager: %p", __func__, mMojoManager);
-    CheckError(!mMojoManager, UNKNOWN_ERROR, "@%s, mMojoManager is nullptr", __func__);
+    LOGIPC("@%s, mMojoManagerToken: %p", __func__, mMojoManagerToken);
+    CheckError(!mMojoManagerToken, UNKNOWN_ERROR, "@%s, mMojoManagerToken is nullptr", __func__);
 
     mCallback = base::Bind(&IntelAlgoClient::callbackHandler, base::Unretained(this));
     IntelAlgoClient::return_callback = returnCallback;
@@ -80,14 +80,14 @@
     IntelAlgoClient::notify = notifyCallback;
 
     mBridge = cros::CameraAlgorithmBridge::CreateInstance(cros::CameraAlgorithmBackend::kVendorCpu,
-                                                          mMojoManager);
+                                                          mMojoManagerToken);
     CheckError(!mBridge, UNKNOWN_ERROR, "@%s, mBridge is nullptr", __func__);
     CheckError(mBridge->Initialize(this) != 0, UNKNOWN_ERROR, "@%s, mBridge init fails", __func__);
 
     if (PlatformData::isUsingGpuAlgo()) {
         LOGIPC("@%s GPU algo enabled", __func__);
         mGpuBridge = cros::CameraAlgorithmBridge::CreateInstance(
-            cros::CameraAlgorithmBackend::kVendorGpu, mMojoManager);
+            cros::CameraAlgorithmBackend::kVendorGpu, mMojoManagerToken);
         CheckError(!mGpuBridge, UNKNOWN_ERROR, "@%s, mGpuBridge is nullptr", __func__);
         CheckError(mGpuBridge->Initialize(this) != 0, UNKNOWN_ERROR, "@%s, mGpuBridge init fails",
                    __func__);
diff --git a/camera/hal/intel/ipu6/modules/sandboxing/client/IntelAlgoClient.h b/camera/hal/intel/ipu6/modules/sandboxing/client/IntelAlgoClient.h
index 2e4edac..7cfa6f2 100644
--- a/camera/hal/intel/ipu6/modules/sandboxing/client/IntelAlgoClient.h
+++ b/camera/hal/intel/ipu6/modules/sandboxing/client/IntelAlgoClient.h
@@ -47,7 +47,7 @@
     IntelAlgoClient();
     virtual ~IntelAlgoClient();
 
-    void setMojoManager(cros::CameraMojoChannelManager* manager) { mMojoManager = manager; }
+    void setMojoManagerToken(cros::CameraMojoChannelManagerToken* token) { mMojoManagerToken = token; }
 
     // Connect to the algo processes(cpu and gpu)
     // It must be called after all preparation are ready in camera service
@@ -106,7 +106,7 @@
     std::unordered_map<void*, int32_t> mShmMap[MAX_ALGO_SHM];
     std::mutex mShmMapMutex;  // the mutex for mShmMap
 
-    cros::CameraMojoChannelManager* mMojoManager;
+    cros::CameraMojoChannelManagerToken* mMojoManagerToken;
     bool mInitialized;
 
  private:
