diff -x '*.po' -d -urpN abrt.5/src/Daemon/abrt.conf abrt.6/src/Daemon/abrt.conf
--- abrt.5/src/Daemon/abrt.conf	2009-11-20 14:17:44.000000000 +0100
+++ abrt.6/src/Daemon/abrt.conf	2009-11-20 17:16:33.148233710 +0100
@@ -9,8 +9,9 @@ OpenGPGCheck = no
 OpenGPGPublicKeys = /etc/pki/rpm-gpg/RPM-GPG-KEY-fedora
 # Blacklisted packages
 BlackList = nspluginwrapper
-# Enabled plugins. There has to be exactly one database plugin
-EnabledPlugins = SQLite3, CCpp, Logger, Kerneloops, KerneloopsScanner, KerneloopsReporter, Bugzilla, Python, RunApp
+# Plugins to load at startup.
+# CCpp needs to be loaded: it needs to install coredump handler
+EnabledPlugins = CCpp
 # Database
 Database = SQLite3
 # Max size for crash storage [MiB]
diff -x '*.po' -d -urpN abrt.5/src/Daemon/Daemon.cpp abrt.6/src/Daemon/Daemon.cpp
--- abrt.5/src/Daemon/Daemon.cpp	2009-11-20 14:17:44.000000000 +0100
+++ abrt.6/src/Daemon/Daemon.cpp	2009-11-20 16:36:51.807902183 +0100
@@ -812,7 +812,6 @@ int main(int argc, char** argv)
         LoadSettings();
         VERB1 log("Loading plugins");
         g_pPluginManager = new CPluginManager();
-        g_pPluginManager->LoadPlugins();
         SetUpMW(); /* logging is inside */
         if (SetUpCron() != 0)
             throw 1;
diff -x '*.po' -d -urpN abrt.5/src/Daemon/PluginManager.cpp abrt.6/src/Daemon/PluginManager.cpp
--- abrt.5/src/Daemon/PluginManager.cpp	2009-11-20 14:17:44.000000000 +0100
+++ abrt.6/src/Daemon/PluginManager.cpp	2009-11-20 16:58:33.073234310 +0100
@@ -124,42 +124,13 @@ CPluginManager::CPluginManager()
 CPluginManager::~CPluginManager()
 {}
 
-void CPluginManager::LoadPlugins()
-{
-    DIR *dir = opendir(PLUGINS_LIB_DIR);
-    if (dir != NULL)
-    {
-        struct dirent *dent;
-        while ((dent = readdir(dir)) != NULL)
-        {
-            if (is_regular_file(dent, PLUGINS_LIB_DIR))
-            {
-                std::string name = dent->d_name;
-                std::string extension = name.substr(name.length() - sizeof(PLUGINS_LIB_EXTENSION) + 1);
-                if (extension == PLUGINS_LIB_EXTENSION)
-                {
-                    name.erase(0, sizeof(PLUGINS_LIB_PREFIX) - 1);
-                    name.erase(name.length() - sizeof(PLUGINS_LIB_EXTENSION));
-                    LoadPlugin(name.c_str());
-                }
-            }
-        }
-        closedir(dir);
-    }
-}
-
-void CPluginManager::UnLoadPlugins()
+CPlugin* CPluginManager::RegisterPlugin(const char *pName)
 {
-    map_abrt_plugins_t::iterator it;
-    while ((it = m_mapABRTPlugins.begin()) != m_mapABRTPlugins.end())
-    {
-        UnLoadPlugin(it->first.c_str());
-    }
-}
+    map_abrt_plugins_t::iterator abrt_plugin;
 
-void CPluginManager::LoadPlugin(const char *pName)
-{
-    if (m_mapABRTPlugins.find(pName) == m_mapABRTPlugins.end())
+    /* Loading */
+    abrt_plugin = m_mapABRTPlugins.find(pName);
+    if (abrt_plugin == m_mapABRTPlugins.end())
     {
         CABRTPlugin* abrtPlugin = NULL;
         try
@@ -170,61 +141,55 @@ void CPluginManager::LoadPlugin(const ch
              || abrtPlugin->GetType() < 0
              || abrtPlugin->GetType() > MAX_PLUGIN_TYPE
             ) {
-                throw CABRTException(EXCEP_PLUGIN, "CPluginManager::LoadPlugin(): non-compatible plugin");
+                throw CABRTException(EXCEP_PLUGIN, "non-compatible plugin");
             }
             log("Plugin %s (%s) succesfully loaded", pName, abrtPlugin->GetVersion());
             m_mapABRTPlugins[pName] = abrtPlugin;
+	    abrt_plugin = m_mapABRTPlugins.find(pName);
         }
         catch (CABRTException& e)
         {
             delete abrtPlugin;
-            error_msg("Failed to load plugin %s: %s", pName, e.what());
+            error_msg("Can't load plugin %s: %s", pName, e.what());
+            return NULL;
         }
     }
-}
 
-void CPluginManager::UnLoadPlugin(const char *pName)
-{
-    map_abrt_plugins_t::iterator abrt_plugin = m_mapABRTPlugins.find(pName);
-    if (abrt_plugin != m_mapABRTPlugins.end())
+    /* Registering */
+    CPlugin* plugin_ptr;
+    map_plugins_t::iterator plugin = m_mapPlugins.find(pName);
+    if (plugin == m_mapPlugins.end())
     {
-        UnRegisterPlugin(pName);
-        delete abrt_plugin->second;
-        m_mapABRTPlugins.erase(abrt_plugin);
-        log("Plugin %s successfully unloaded", pName);
-    }
-}
+        plugin_ptr = abrt_plugin->second->PluginNew();
 
-void CPluginManager::RegisterPlugin(const char *pName)
-{
-    map_abrt_plugins_t::iterator abrt_plugin = m_mapABRTPlugins.find(pName);
-    if (abrt_plugin != m_mapABRTPlugins.end())
-    {
-        if (m_mapPlugins.find(pName) == m_mapPlugins.end())
+        map_plugin_settings_t pluginSettings;
+        LoadPluginSettings(ssprintf(PLUGINS_CONF_DIR"/%s."PLUGINS_CONF_EXTENSION, pName).c_str(), pluginSettings);
+        try
         {
-            CPlugin* plugin = abrt_plugin->second->PluginNew();
-            map_plugin_settings_t pluginSettings;
-
-            LoadPluginSettings(ssprintf(PLUGINS_CONF_DIR"/%s."PLUGINS_CONF_EXTENSION, pName).c_str(), pluginSettings);
-            try
-            {
-                plugin->Init();
-                plugin->SetSettings(pluginSettings);
-            }
-            catch (CABRTException& e)
-            {
-                log("Can't initialize plugin %s(%s): %s",
-                        pName,
-                        plugin_type_str[abrt_plugin->second->GetType()],
-                        e.what()
-                );
-                UnLoadPlugin(pName);
-                return;
-            }
-            m_mapPlugins[pName] = plugin;
-            log("Registered plugin %s(%s)", pName, plugin_type_str[abrt_plugin->second->GetType()]);
+            plugin_ptr->Init();
+            plugin_ptr->SetSettings(pluginSettings);
+        }
+        catch (CABRTException& e)
+        {
+            log("Can't initialize plugin %s(%s): %s",
+                    pName,
+                    plugin_type_str[abrt_plugin->second->GetType()],
+                    e.what()
+            );
+    	    delete abrt_plugin->second;
+    	    m_mapABRTPlugins.erase(abrt_plugin);
+    	    log("Unloaded plugin %s", pName);
+            return NULL;
         }
+        m_mapPlugins[pName] = plugin_ptr;
+        log("Registered plugin %s(%s)", pName, plugin_type_str[abrt_plugin->second->GetType()]);
+    }
+    else
+    {
+        plugin_ptr = plugin->second;
     }
+
+    return plugin_ptr;
 }
 
 void CPluginManager::RegisterPluginDBUS(const char *pName, const char *pDBUSSender)
@@ -234,7 +199,8 @@ void CPluginManager::RegisterPluginDBUS(
     if (polkit_result == PolkitYes)
     {
         RegisterPlugin(pName);
-    } else
+    }
+    else
     {
         log("User %s not authorized, returned %d", pDBUSSender, polkit_result);
     }
@@ -251,7 +217,11 @@ void CPluginManager::UnRegisterPlugin(co
             plugin->second->DeInit();
             delete plugin->second;
             m_mapPlugins.erase(plugin);
-            log("UnRegistered plugin %s(%s)", pName, plugin_type_str[abrt_plugin->second->GetType()]);
+            log("Unregistered plugin %s(%s)", pName, plugin_type_str[abrt_plugin->second->GetType()]);
+
+            delete abrt_plugin->second;
+            m_mapABRTPlugins.erase(abrt_plugin);
+            log("Unloaded plugin %s", pName);
         }
     }
 }
@@ -263,17 +233,26 @@ void CPluginManager::UnRegisterPluginDBU
     if (polkit_result == PolkitYes)
     {
         UnRegisterPlugin(pName);
-    } else
+    }
+    else
     {
         log("user %s not authorized, returned %d", pDBUSSender, polkit_result);
     }
 }
 
+void CPluginManager::UnLoadPlugins()
+{
+    map_abrt_plugins_t::iterator it;
+    while ((it = m_mapABRTPlugins.begin()) != m_mapABRTPlugins.end())
+    {
+        UnRegisterPlugin(it->first.c_str());
+    }
+}
 
 CAnalyzer* CPluginManager::GetAnalyzer(const char *pName)
 {
-    map_plugins_t::iterator plugin = m_mapPlugins.find(pName);
-    if (plugin == m_mapPlugins.end())
+    CPlugin *plugin = RegisterPlugin(pName);
+    if (!plugin)
     {
         throw CABRTException(EXCEP_PLUGIN, ssprintf("Plugin '%s' is not registered", pName));
     }
@@ -281,13 +260,13 @@ CAnalyzer* CPluginManager::GetAnalyzer(c
     {
         throw CABRTException(EXCEP_PLUGIN, ssprintf("Plugin '%s' is not an analyzer plugin", pName));
     }
-    return (CAnalyzer*)(plugin->second);
+    return (CAnalyzer*)plugin;
 }
 
 CReporter* CPluginManager::GetReporter(const char *pName)
 {
-    map_plugins_t::iterator plugin = m_mapPlugins.find(pName);
-    if (plugin == m_mapPlugins.end())
+    CPlugin *plugin = RegisterPlugin(pName);
+    if (!plugin)
     {
         throw CABRTException(EXCEP_PLUGIN, ssprintf("Plugin '%s' is not registered", pName));
     }
@@ -295,13 +274,13 @@ CReporter* CPluginManager::GetReporter(c
     {
         throw CABRTException(EXCEP_PLUGIN, ssprintf("Plugin '%s' is not a reporter plugin", pName));
     }
-    return (CReporter*)(plugin->second);
+    return (CReporter*)plugin;
 }
 
 CAction* CPluginManager::GetAction(const char *pName)
 {
-    map_plugins_t::iterator plugin = m_mapPlugins.find(pName);
-    if (plugin == m_mapPlugins.end())
+    CPlugin *plugin = RegisterPlugin(pName);
+    if (!plugin)
     {
         throw CABRTException(EXCEP_PLUGIN, ssprintf("Plugin '%s' is not registered", pName));
     }
@@ -309,13 +288,13 @@ CAction* CPluginManager::GetAction(const
     {
         throw CABRTException(EXCEP_PLUGIN, ssprintf("Plugin '%s' is not an action plugin", pName));
     }
-    return (CAction*)(plugin->second);
+    return (CAction*)plugin;
 }
 
 CDatabase* CPluginManager::GetDatabase(const char *pName)
 {
-    map_plugins_t::iterator plugin = m_mapPlugins.find(pName);
-    if (plugin == m_mapPlugins.end())
+    CPlugin *plugin = RegisterPlugin(pName);
+    if (!plugin)
     {
         throw CABRTException(EXCEP_PLUGIN, ssprintf("Plugin '%s' is not registered", pName));
     }
@@ -323,13 +302,13 @@ CDatabase* CPluginManager::GetDatabase(c
     {
         throw CABRTException(EXCEP_PLUGIN, ssprintf("Plugin '%s' is not a database plugin", pName));
     }
-    return (CDatabase*)(plugin->second);
+    return (CDatabase*)plugin;
 }
 
 plugin_type_t CPluginManager::GetPluginType(const char *pName)
 {
-    map_plugins_t::iterator plugin = m_mapPlugins.find(pName);
-    if (plugin == m_mapPlugins.end())
+    CPlugin *plugin = RegisterPlugin(pName);
+    if (!plugin)
     {
         throw CABRTException(EXCEP_PLUGIN, ssprintf("Plugin '%s' is not registered", pName));
     }
diff -x '*.po' -d -urpN abrt.5/src/Daemon/PluginManager.h abrt.6/src/Daemon/PluginManager.h
--- abrt.5/src/Daemon/PluginManager.h	2009-11-20 14:17:44.000000000 +0100
+++ abrt.6/src/Daemon/PluginManager.h	2009-11-20 16:48:27.960234298 +0100
@@ -63,19 +63,10 @@ class CPluginManager
          */
         ~CPluginManager();
         /**
-         * A method, which loads all plugins in plugins library direcotry.
-         */
-        void LoadPlugins();
-        /**
          * A method, which unregister and unload all loaded plugins.
          */
         void UnLoadPlugins();
         /**
-         * A method, which loads particular plugin.
-         * @param pName A plugin name.
-         */
-        void LoadPlugin(const char *pName);
-        /**
          * A method, which unloads particular plugin.
          * @param pName A plugin name.
          */
@@ -83,8 +74,9 @@ class CPluginManager
         /**
          * A method, which registers particular plugin.
          * @param pName A plugin name.
+         * @return Pointer to plugin instance or NULL.
          */
-        void RegisterPlugin(const char *pName);
+        CPlugin* RegisterPlugin(const char *pName);
         /**
          * A method, which unregister particular plugin.
          * @param pName A plugin name.
