diff --git a/src/problem/problem.cpp b/src/problem/problem.cpp
index 6fe2afb34530e550d8a361e56bcaae2c07938349..0fc42a15dbf90088f389d87cf98705a5947ca047 100644
--- a/src/problem/problem.cpp
+++ b/src/problem/problem.cpp
@@ -104,26 +104,6 @@ ProblemPtr Problem::autoSetup(ParamsServer &_server)
     if (plugins_path.back() != '/'){
         plugins_path += '/';  // only works for UNIX systems
     }
-    /*try
-    {
-        plugins_path = _server.getParam<std::string>("plugins_path");
-    }
-    catch (MissingValueException& e)
-    {
-      WOLF_WARN(e.what());
-      WOLF_WARN("Setting '/usr/local/lib/' as plugins path...");
-      plugins_path="/usr/local/lib/";
-    }*/
-    for (auto plugin_name : _server.getParam<std::vector<std::string>>("plugins"))
-    {
-      if (plugin_name == "core" or plugin_name == "wolf" or plugin_name == "") continue; // ignore plugin "core"
-
-      std::string plugin = plugins_path + "libwolf" + plugin_name + lib_extension;
-      WOLF_TRACE("Loading plugin " + plugin_name + " via " + plugin);
-      auto l = std::make_shared<LoaderRaw>(plugin);
-      l->load();
-      loaders.push_back(l);
-    }
 
     // load raw libs
     std::vector<std::string> raw_libs;
@@ -143,20 +123,35 @@ ProblemPtr Problem::autoSetup(ParamsServer &_server)
         loaders.push_back(l);
     }
 
-    // Install sensors and processors
+    // Install sensors and processors -- load plugins only if sensors and processor are not registered
     auto sensors        = _server.getParam<std::vector<std::map<std::string, std::string>>>("sensors");
-    for(auto sen : sensors)
-        problem->installSensor(sen["type"],
-                               sen["name"],
-                               _server);
-
-    auto processors     = _server.getParam<std::vector<std::map<std::string, std::string>>>("processors");
-    for(auto prc : processors)
-        problem->installProcessor(prc["type"],
-                                  prc["name"],
-                                  prc["sensor_name"],
-                                  _server);
-
+    for (auto sen : sensors)
+    {
+        if (not AutoConfFactorySensor::isCreatorRegistered(sen["type"]))
+        {
+            auto        plugin_name = sen["plugin"];
+            std::string plugin      = plugins_path + "libwolf" + plugin_name + lib_extension;
+            WOLF_TRACE("Loading plugin " + plugin_name + " via " + plugin);
+            auto l = std::make_shared<LoaderRaw>(plugin);
+            l->load();
+            loaders.push_back(l);
+        }
+        problem->installSensor(sen["type"], sen["name"], _server);
+    }
+    auto processors = _server.getParam<std::vector<std::map<std::string, std::string>>>("processors");
+    for (auto prc : processors)
+    {
+        if (not AutoConfFactoryProcessor::isCreatorRegistered(prc["type"]))
+        {
+            auto        plugin_name = prc["plugin"];
+            std::string plugin      = plugins_path + "libwolf" + plugin_name + lib_extension;
+            WOLF_TRACE("Loading plugin " + plugin_name + " via " + plugin);
+            auto l = std::make_shared<LoaderRaw>(plugin);
+            l->load();
+            loaders.push_back(l);
+        }
+        problem->installProcessor(prc["type"], prc["name"], prc["sensor_name"], _server);
+    }
 
     // Map (optional)
     std::string map_type, map_plugin;