diff --git a/src/private/directrenderer.cpp b/src/private/directrenderer.cpp
index 85b092d585d73df5a6d0ce1cd4723f1cdd9e3dad..128657eba2841f5095bb59c591256518d1c19c97 100644
--- a/src/private/directrenderer.cpp
+++ b/src/private/directrenderer.cpp
@@ -72,7 +72,8 @@ void Video::DirectRenderer::stopRendering ()
    emit stopped();
 }
 
-void Video::DirectRenderer::onNewFrame(const std::shared_ptr<std::vector<unsigned char> >& frame, int w, int h)
+
+void Video::DirectRenderer::onNewFrame(int w, int h)
 {
    if (!isRendering()) {
       return;
@@ -80,7 +81,7 @@ void Video::DirectRenderer::onNewFrame(const std::shared_ptr<std::vector<unsigne
 
    Video::Renderer::d_ptr->m_pSize.setWidth(w);
    Video::Renderer::d_ptr->m_pSize.setHeight(h);
-   Video::Renderer::d_ptr->m_pSFrame = frame;
+   Video::Renderer::d_ptr->m_pFrame = reinterpret_cast<char*>(frameBuffer_.data());
    emit frameUpdated();
 }
 
diff --git a/src/private/directrenderer.h b/src/private/directrenderer.h
index 85ae6406ae5398a1b4146cda4fe1dcebfd639be9..7eff8976ca2e56b94465328d0cdb02f18f2c9ceb 100644
--- a/src/private/directrenderer.h
+++ b/src/private/directrenderer.h
@@ -17,8 +17,6 @@
  ***************************************************************************/
 #pragma once
 
-#include <memory>
-
 //Base
 #include <QtCore/QObject>
 #include "typedefs.h"
@@ -52,7 +50,9 @@ public:
    //Getter
    virtual ColorSpace colorSpace() const override;
 
-   void onNewFrame(const std::shared_ptr<std::vector<unsigned char> >& frame, int w, int h);
+   void onNewFrame(int w, int h);
+
+   std::vector<unsigned char> frameBuffer_;
 
 public Q_SLOTS:
    virtual void startRendering() override;
@@ -61,7 +61,6 @@ public Q_SLOTS:
 private:
    QScopedPointer<DirectRendererPrivate> d_ptr;
    Q_DECLARE_PRIVATE(DirectRenderer)
-
 };
 
 }
diff --git a/src/private/videorenderer_p.h b/src/private/videorenderer_p.h
index 546b7533eedaaeecc308b12d2b966ce8e7d8f186..1e5d4592bcfc9a60e210c105c225066c3e99ef7d 100644
--- a/src/private/videorenderer_p.h
+++ b/src/private/videorenderer_p.h
@@ -17,7 +17,6 @@
  ***************************************************************************/
 #pragma once
 
-#include <memory>
 
 //Qt
 #include <QtCore/QObject>
@@ -43,7 +42,6 @@ public:
    QString           m_Id         ;
    QSize             m_pSize      ;
    char*             m_pFrame     ;
-   std::shared_ptr<std::vector<unsigned char> > m_pSFrame;
    QByteArray        m_Content    ;
    unsigned int      m_FrameSize  ;
 
diff --git a/src/private/videorenderermanager.cpp b/src/private/videorenderermanager.cpp
index 1af06735332d71b1af235352fc924a9aadf74852..f379fec6e767927aad1b2550ad3da343cf96b2d4 100644
--- a/src/private/videorenderermanager.cpp
+++ b/src/private/videorenderermanager.cpp
@@ -213,9 +213,10 @@ void VideoRendererManagerPrivate::startedDecoding(const QString& id, const QStri
       m_hRenderers[rid] = r;
       m_hRendererIds[r]=rid;
 
-      DBus::VideoManager::instance().registerSinkTarget(id, [this, id, width, height] (const std::shared_ptr<std::vector<unsigned char> >& frame, int w, int h) {
+      DBus::VideoManager::instance().registerSinkTarget(id, static_cast<Video::DirectRenderer*>(r)->frameBuffer_,
+      [this, id, width, height] (int w, int h) {
          static_cast<Video::DirectRenderer*>(m_hRenderers[id.toLatin1()])->onNewFrame(
-            frame, w, h
+            w, h
          );
       });
 
@@ -243,9 +244,10 @@ void VideoRendererManagerPrivate::startedDecoding(const QString& id, const QStri
       r->setSize(res);
 
 #ifdef ENABLE_LIBWRAP
-      DBus::VideoManager::instance().registerSinkTarget(id, [this, id, width, height] (const std::shared_ptr<std::vector<unsigned char> >& frame, int w, int h) {
+      DBus::VideoManager::instance().registerSinkTarget(id, static_cast<Video::DirectRenderer*>(r)->frameBuffer_,
+      [this, id, width, height] (int w, int h) {
         static_cast<Video::DirectRenderer*>(m_hRenderers[id.toLatin1()])->onNewFrame(
-            frame, w, h
+            w, h
         );
       });
 
diff --git a/src/qtwrapper/videomanager_wrap.h b/src/qtwrapper/videomanager_wrap.h
index 336acb0283104198910c42cfa2c180929037a519..68072c99e6f52211344423471b728c74c3ad345f 100644
--- a/src/qtwrapper/videomanager_wrap.h
+++ b/src/qtwrapper/videomanager_wrap.h
@@ -195,17 +195,21 @@ public Q_SLOTS: // METHODS
 #endif
     }
 
-    void registerSinkTarget(const QString &sinkID, std::function<void(std::shared_ptr<std::vector<unsigned char> >&, int, int)>&& cb)
+    void registerSinkTarget(const QString &sinkID,
+                            std::vector<unsigned char>& frameBuffer,
+                            std::function<void(int, int)>&& cb)
     {
 #ifdef ENABLE_VIDEO
-        DRing::registerSinkTarget(sinkID.toStdString(), std::move(cb));
+        DRing::registerSinkTarget(sinkID.toStdString(), frameBuffer, std::move(cb));
 #endif
     }
 
-    void registerSinkTarget(const QString &sinkID, std::function<void(std::shared_ptr<std::vector<unsigned char> >&, int, int)>& cb)
+    void registerSinkTarget(const QString &sinkID,
+                            std::vector<unsigned char>& frameBuffer,
+                            std::function<void(int, int)>& cb)
     {
 #ifdef ENABLE_VIDEO
-        DRing::registerSinkTarget(sinkID.toStdString(), std::move(cb));
+        DRing::registerSinkTarget(sinkID.toStdString(), frameBuffer, std::move(cb));
 #endif
     }
 
diff --git a/src/video/renderer.cpp b/src/video/renderer.cpp
index 98e5ccb3648cc8cdd7603b0e30ad9d0f91a2920b..e67668e196bf0f8631c78d04f96ebba7d292fcf3 100644
--- a/src/video/renderer.cpp
+++ b/src/video/renderer.cpp
@@ -73,21 +73,6 @@ const QByteArray& Video::Renderer::currentFrame() const
    return d_ptr->m_Content;
 }
 
-const std::shared_ptr<std::vector<unsigned char> >& Video::Renderer::currentSmartFrame() const
-{
-   return d_ptr->m_pSFrame;
-}
-
-bool Video::Renderer::isFrameSmart() const
-{
-#ifdef ENABLE_LIBWRAP
-  return true;
-#else
-  return false;
-#endif
-}
-
-
 /*****************************************************************************
  *                                                                           *
  *                                 Setters                                   *
diff --git a/src/video/renderer.h b/src/video/renderer.h
index 18d379848d417cd17a3ff714e359b19d549424cb..ff9691f7037cb3b192aa2d700ac7062f8173ebc2 100644
--- a/src/video/renderer.h
+++ b/src/video/renderer.h
@@ -17,7 +17,6 @@
  ***************************************************************************/
 #pragma once
 
-#include <memory>
 
 //Base
 #include <QtCore/QObject>
@@ -76,8 +75,6 @@ public:
    //Getters
    virtual bool              isRendering     () const;
    virtual const QByteArray& currentFrame    () const;
-   virtual const std::shared_ptr<std::vector<unsigned char> >& currentSmartFrame() const;
-   virtual bool        isFrameSmart() const;
    virtual QSize             size            () const;
    virtual QMutex*           mutex           () const;
    virtual ColorSpace        colorSpace      () const = 0;