diff --git a/HelloWorld/CoinCircleVideoSubscriber.cpp b/HelloWorld/CoinCircleVideoSubscriber.cpp
index 6b4a94e..5e963cb 100644
--- a/HelloWorld/CoinCircleVideoSubscriber.cpp
+++ b/HelloWorld/CoinCircleVideoSubscriber.cpp
@@ -24,10 +24,8 @@
 #include <libavutil/display.h>
 }
 #include <accel.h>
-
-// LOGGING
+#include <frameUtils.h>
 #include <pluglog.h>
-
 #include <stdio.h>
 #include <opencv2/imgproc.hpp>
 
@@ -48,21 +46,21 @@
 }
 
 void
-CoinCircleVideoSubscriber::update(jami::Observable<AVFrame*>*, AVFrame* const& iFrame)
+CoinCircleVideoSubscriber::update(jami::Observable<AVFrame*>*, AVFrame* const& pluginFrame)
 {
-    if (!iFrame)
+    if (!pluginFrame)
         return;
-    AVFrame* pluginFrame = const_cast<AVFrame*>(iFrame);
 
     //======================================================================================
     // GET FRAME ROTATION
-    AVFrameSideData* side_data = av_frame_get_side_data(iFrame, AV_FRAME_DATA_DISPLAYMATRIX);
+    AVFrameSideData* side_data = av_frame_get_side_data(pluginFrame, AV_FRAME_DATA_DISPLAYMATRIX);
 
     int angle {0};
     if (side_data) {
         auto matrix_rotation = reinterpret_cast<int32_t*>(side_data->data);
         angle = static_cast<int>(av_display_rotation_get(matrix_rotation));
     }
+    delete side_data;
 
     //======================================================================================
     // GET RAW FRAME
@@ -70,10 +68,12 @@
     // Convert input frame to RGB
     int inputHeight = pluginFrame->height;
     int inputWidth = pluginFrame->width;
-    FrameUniquePtr bgrFrame = scaler.convertFormat(transferToMainMemory(pluginFrame,
-                                                                        AV_PIX_FMT_NV12),
-                                                   AV_PIX_FMT_RGB24);
-
+    AVFrame* temp = transferToMainMemory(pluginFrame, AV_PIX_FMT_NV12);
+    AVFrame* bgrFrame = scaler.convertFormat(temp, AV_PIX_FMT_RGB24);
+    av_frame_unref(temp);
+    av_frame_free(&temp);
+    if (!bgrFrame)
+        return;
     resultFrame = cv::Mat {bgrFrame->height,
                            bgrFrame->width,
                            CV_8UC3,
@@ -99,7 +99,7 @@
 
     //======================================================================================
     // REPLACE AVFRAME DATA WITH FRAME DATA
-    if (bgrFrame && bgrFrame->data[0]) {
+    if (bgrFrame->data[0]) {
         uint8_t* frameData = bgrFrame->data[0];
         if (angle == 90 || angle == -90) {
             std::memmove(frameData,
@@ -107,15 +107,12 @@
                          static_cast<size_t>(pluginFrame->width * pluginFrame->height * 3)
                              * sizeof(uint8_t));
         }
-    }
-    // Copy Frame meta data
-    if (bgrFrame && pluginFrame) {
-        av_frame_copy_props(bgrFrame.get(), pluginFrame);
-        scaler.moveFrom(pluginFrame, bgrFrame.get());
-    }
 
-    // Remove the pointer
-    pluginFrame = nullptr;
+        av_frame_copy_props(bgrFrame, pluginFrame);
+        moveFrom(pluginFrame, bgrFrame);
+    }
+    av_frame_unref(bgrFrame);
+    av_frame_free(&bgrFrame);
 }
 
 void
