diff --git a/inc/projection.h b/inc/projection.h
index a5ce9eb953310ca4d01e8cd9319ff49f64da1537..5390b06abbcbfa78dcb4329b3dd7de5425e11a2e 100644
--- a/inc/projection.h
+++ b/inc/projection.h
@@ -7,7 +7,7 @@
 
 class Projection{
     private:
-        cv::Mat adjustingMatrix;
+        cv::Mat_<float> adjustingMatrix;
         float distanceTopSandbox;
 
         cv::Mat_<float> resized_depth;
@@ -28,14 +28,14 @@ class Projection{
     public:
         Projection();
 
-        void setAdjustingMatrix(cv::Mat matrix){ adjustingMatrix = matrix; }
+        void setAdjustingMatrix(cv::Mat_<float> matrix){ adjustingMatrix = matrix; }
         cv::Mat getAdjustingMatrix(){ return adjustingMatrix; }
         void setDistanceTopSandbox(float dist){ distanceTopSandbox = dist; };
         float getDistanceTopSandbox(){ return distanceTopSandbox; };
 
         cv::Point2i rotatePixel(cv::Point2i pixel);
         cv::Point2i revertRotatePixel(cv::Point2i pixel);
-        void adjustFrame(cv::Mat_<float> depth, cv::Mat_<cv::Vec3b> src, cv::Mat_<cv::Vec3b> &dst, Camera *camera, cv::Point3f beamer_pos);
+        void adjustFrame(cv::Mat_<float> &depth, cv::Mat_<cv::Vec3b> &src, cv::Mat_<cv::Vec3b> &dst, Camera *camera, cv::Point3f beamer_pos);
         void printAdjustingMatrix();
 
 };
diff --git a/inc/sandbox.h b/inc/sandbox.h
index 02828dbd5304e80478c9db5215c0ae625c75f01f..bb45cae46c256a29dc8419ae40d2200f345de457 100644
--- a/inc/sandbox.h
+++ b/inc/sandbox.h
@@ -13,6 +13,7 @@ class Sandbox{
         Projection *projection;
         Camera *camera;
         Beamer *beamer;
+        cv::Mat_<cv::Vec3b> projectedFrame;
 
     public:
         Sandbox();
@@ -26,8 +27,8 @@ class Sandbox{
         void captureFrame();
         cv::Mat_<cv::Vec3b> getColorFrame();
         cv::Mat_<float> getDepthFrame();
-        cv::Mat_<cv::Vec3b> adjustProjection(cv::Mat_<cv::Vec3b> frame);
-        cv::Mat_<cv::Vec3b> adjustProjection(cv::Mat_<cv::Vec3b> frame, cv::Mat_<float> depth);
+        cv::Mat_<cv::Vec3b> adjustProjection(cv::Mat_<cv::Vec3b> &frame);
+        cv::Mat_<cv::Vec3b> adjustProjection(cv::Mat_<cv::Vec3b> &frame, cv::Mat_<float> &depth);
         int loadConfig();
         int loadConfigFrom(char *path);
     
diff --git a/src/components/projection.cpp b/src/components/projection.cpp
index 90206c065ac9edc116a5fb01134df6477fe02363..483e696aec11eb6ebfcd23830ac17ee79c88e945 100644
--- a/src/components/projection.cpp
+++ b/src/components/projection.cpp
@@ -1,5 +1,5 @@
 #include "../../inc/projection.h"
-
+#include <chrono>
 
 /*
  *   MAIN
@@ -30,15 +30,16 @@ cv::Point2i Projection::revertRotatePixel(cv::Point2i pixel){
 /*
     Adjust the projected frame with the topology from the camera to the beamer POV
 */
-void Projection::adjustFrame(cv::Mat_<float> depth, cv::Mat_<cv::Vec3b> src, cv::Mat_<cv::Vec3b> &dst, Camera *camera, cv::Point3f beamer_pos){
+void Projection::adjustFrame(cv::Mat_<float> &depth, cv::Mat_<cv::Vec3b> &src, cv::Mat_<cv::Vec3b> &dst, Camera *camera, cv::Point3f beamer_pos){
 
-    if(deprojectMap.empty() || deprojectMap.size() != depth.size()){
+    if(deprojectMap.empty() || deprojectMap.size() != dst.size()){
         if(!deprojectMap.empty()){
             deprojectMap.release();
             frameMap.release();
             resized_depth.release();
             resized_src.release();
         }
+        std::cout << "Create" << std::endl;
         deprojectMap.create(dst.rows, dst.cols);
         frameMap.create(dst.rows, dst.cols);
         resized_depth.create(dst.rows, dst.cols);
@@ -57,9 +58,25 @@ void Projection::adjustFrame(cv::Mat_<float> depth, cv::Mat_<cv::Vec3b> src, cv:
     cv::resize(src, resized_src, dst.size());
     cv::resize(depth, resized_depth, dst.size());    
 
+    // 75 ms
+    //std::chrono::milliseconds start_ms = std::chrono::duration_cast< std::chrono::milliseconds >( std::chrono::system_clock::now().time_since_epoch() );
     deprojectPixelsFromDepth(resized_depth, camera, camera->getCroppingMask() , beamer_pos, deprojectMap, fxy, ppxy);
+    //std::chrono::milliseconds now_ms = std::chrono::duration_cast< std::chrono::milliseconds >( std::chrono::system_clock::now().time_since_epoch() );
+    //std::cout << "Deproject : " << (now_ms - start_ms).count() << std::endl;
+
+    // 18-19 ms
+    //start_ms = std::chrono::duration_cast< std::chrono::milliseconds >( std::chrono::system_clock::now().time_since_epoch() );
     filterLowestDeprojectedPoints(resized_depth, deprojectMap, frameMap);
+    //now_ms = std::chrono::duration_cast< std::chrono::milliseconds >( std::chrono::system_clock::now().time_since_epoch() );
+    //std::cout << "Filter : " << (now_ms - start_ms).count() << std::endl;
+    
+    // 14-15 ms
+    //start_ms = std::chrono::duration_cast< std::chrono::milliseconds >( std::chrono::system_clock::now().time_since_epoch() );
     buildFrame(resized_depth, frameMap, resized_src, dst);
+    //now_ms = std::chrono::duration_cast< std::chrono::milliseconds >( std::chrono::system_clock::now().time_since_epoch() );
+    //std::cout << "Build : " << (now_ms - start_ms).count() << std::endl;
+    
+    
 
     cv::warpAffine(dst, dst, adjustingMatrix, dst.size());
 }
diff --git a/src/lib/sandbox.cpp b/src/lib/sandbox.cpp
index f5747f0a20b99ede034b607ec5ae2d97fa79eba1..aa5fd148d0690edaac54439e84c472045ace9d22 100644
--- a/src/lib/sandbox.cpp
+++ b/src/lib/sandbox.cpp
@@ -38,20 +38,23 @@ cv::Mat_<float> Sandbox::getDepthFrame(){
     return camera->getDepthFrame()(camera->getCroppingMask());
 }
 
-cv::Mat_<cv::Vec3b> Sandbox::adjustProjection(cv::Mat_<cv::Vec3b> frame, cv::Mat_<float> depth){
+cv::Mat_<cv::Vec3b> Sandbox::adjustProjection(cv::Mat_<cv::Vec3b> &frame, cv::Mat_<float> &depth){
     
-    static cv::Mat_<cv::Vec3b> imageCalibrate = cv::Mat_<cv::Vec3b>(cv::Size(beamer->getWidth(), beamer->getHeight()));
-    imageCalibrate = cv::Vec3b(0, 0, 0);
-    projection->adjustFrame(depth, frame, imageCalibrate, camera, beamer->getPosition());
+    if(projectedFrame.empty()){
+        projectedFrame.create(beamer->getHeight(), beamer->getWidth());
+    }
+
+    projectedFrame = cv::Vec3b(0, 0, 0);
+    projection->adjustFrame(depth, frame, projectedFrame, camera, beamer->getPosition());
 
     // frame after process
-    //cv::dilate(imageCalibrate, imageCalibrate, cv::Mat(), cv::Point(-1, -1), 2, 1, 1);
-    //cv::erode(imageCalibrate, imageCalibrate, cv::Mat(), cv::Point(-1, -1), 2, 1, 1);
+    //cv::dilate(projectedFrame, projectedFrame, cv::Mat(), cv::Point(-1, -1), 2, 1, 1);
+    //cv::erode(projectedFrame, projectedFrame, cv::Mat(), cv::Point(-1, -1), 2, 1, 1);
     
-    return imageCalibrate;
+    return projectedFrame;
 }
 
-cv::Mat_<cv::Vec3b> Sandbox::adjustProjection(cv::Mat_<cv::Vec3b> frame){
+cv::Mat_<cv::Vec3b> Sandbox::adjustProjection(cv::Mat_<cv::Vec3b> &frame){
     
     captureFrame();
     cv::Mat_<float> depth = getDepthFrame();