diff --git a/GreenScreen/pluginMediaHandler.cpp b/GreenScreen/pluginMediaHandler.cpp
index 2643d6d..1bc9465 100644
--- a/GreenScreen/pluginMediaHandler.cpp
+++ b/GreenScreen/pluginMediaHandler.cpp
@@ -20,8 +20,8 @@
  */
 
 #include "pluginMediaHandler.h"
-// Logger
-#include "pluglog.h"
+
+#include <pluglog.h>
 #include <string_view>
 const char sep = separator();
 const std::string TAG = "FORESEG";
@@ -32,25 +32,24 @@
 
 PluginMediaHandler::PluginMediaHandler(std::map<std::string, std::string>&& preferences,
                                        std::string&& datapath)
-    : datapath_ {datapath}
+    : dataPath_ {datapath}
     , preferences_ {preferences}
 {
-    setId(datapath_);
+    setId(dataPath_);
 #ifdef __ANDROID__
-    mVS = std::make_shared<VideoSubscriber>(datapath_,
-                                            "mModel.ort",
-                                            preferences_.at("background"),
+    mVS = std::make_shared<VideoSubscriber>(dataPath_ + sep + "model/mModel.ort",
                                             preferences_.at("acceleration") == "1");
 #else
 #ifdef NVIDIA
-    mVS = std::make_shared<VideoSubscriber>(datapath_,
-                                            "mModel.onnx",
-                                            preferences_.at("background"),
+    mVS = std::make_shared<VideoSubscriber>(dataPath_ + sep + "model/mModel.onnx",
                                             preferences_.at("acceleration") == "1");
 #else
-    mVS = std::make_shared<VideoSubscriber>(datapath_, "mModel.onnx", preferences_.at("background"));
+    mVS = std::make_shared<VideoSubscriber>(dataPath_ + sep + "model/mModel.onnx");
 #endif // NVIDIA
 #endif // ANDROID
+    mVS->setBackground(preferences_.at("background"));
+    mVS->setBlur(preferences_.at("blur") == "1");
+    mVS->setBlurLevel(preferences_.at("blurlevel"));
 }
 
 void
@@ -68,12 +67,14 @@
     oss << "preferredStreamDirection " << preferredStreamDirection << std::endl;
     if (data.type == StreamType::video && !data.direction
         && data.direction == preferredStreamDirection) {
-        subject->attach(mVS.get()); // my image
+        detach();
+        subject->attachPriorityObserver(mVS); // my image
         oss << "got my sent image attached" << std::endl;
         attached_ = '1';
     } else if (data.type == StreamType::video && data.direction
                && data.direction == preferredStreamDirection) {
-        subject->attach(mVS.get()); // the image I receive from the others on the call
+        detach();
+        subject->attachPriorityObserver(mVS); // the image I receive from the others on the call
         oss << "got my received image attached" << std::endl;
         attached_ = '1';
     }
@@ -85,7 +86,7 @@
 PluginMediaHandler::getCallMediaHandlerDetails()
 {
     return {{"name", NAME},
-            {"iconPath", datapath_ + sep + "icon.svg"},
+            {"iconPath", dataPath_ + sep + "icon.svg"},
             {"pluginId", id()},
             {"attached", attached_},
             {"dataType", "1"}};
@@ -100,16 +101,19 @@
         if (key == "background") {
             mVS->setBackground(value);
         }
+        if (key == "blur") {
+            mVS->setBlur(value == "1");
+        }
+        if (key == "blurlevel") {
+            mVS->setBlurLevel(value);
+        }
     }
 }
 
 bool
 PluginMediaHandler::preferenceMapHasKey(const std::string& key)
 {
-    if (key == "background") {
-        return true;
-    }
-    return false;
+    return (key == "background" || key == "blur" || key == "blurlevel");
 }
 
 void
