diff --git a/src/api/pluginmodel.h b/src/api/pluginmodel.h
index 89a76f79ef53253575630b37b8768a428cec15e3..80b2d1342b7abf3276c21d071952712181dda607 100644
--- a/src/api/pluginmodel.h
+++ b/src/api/pluginmodel.h
@@ -181,6 +181,7 @@ public:
 
 Q_SIGNALS:
     void chatHandlerStatusUpdated(bool isVisible);
+    void modelUpdated();
 };
 
 } // namespace api
diff --git a/src/pluginmodel.cpp b/src/pluginmodel.cpp
index 1bc38e9acb731032699da3f8b568b4b90f56682f..3c55ff6eb8298e32bffd07d9015c1886485cfb79 100644
--- a/src/pluginmodel.cpp
+++ b/src/pluginmodel.cpp
@@ -53,9 +53,11 @@ PluginModel::setPluginsEnabled(bool enable)
 {
     PluginManager::instance().setPluginsEnabled(enable);
     if (!enable)
-        emit chatHandlerStatusUpdated(false);
+        Q_EMIT chatHandlerStatusUpdated(false);
     else
-        emit chatHandlerStatusUpdated(getChatHandlers().size() > 0);
+        Q_EMIT chatHandlerStatusUpdated(getChatHandlers().size() > 0);
+
+    Q_EMIT modelUpdated();
 }
 
 bool
@@ -102,7 +104,9 @@ bool
 PluginModel::installPlugin(const QString& jplPath, bool force)
 {
     if (getPluginsEnabled()) {
-        return PluginManager::instance().installPlugin(jplPath, force);
+        auto result = PluginManager::instance().installPlugin(jplPath, force);
+        Q_EMIT modelUpdated();
+        return result;
     }
     return false;
 }
@@ -110,13 +114,16 @@ PluginModel::installPlugin(const QString& jplPath, bool force)
 bool
 PluginModel::uninstallPlugin(const QString& rootPath)
 {
-    return PluginManager::instance().uninstallPlugin(rootPath);
+    auto result = PluginManager::instance().uninstallPlugin(rootPath);
+    Q_EMIT modelUpdated();
+    return result;
 }
 
 bool
 PluginModel::loadPlugin(const QString& path)
 {
     bool status = PluginManager::instance().loadPlugin(path);
+    Q_EMIT modelUpdated();
     if (getChatHandlers().size() > 0)
         emit chatHandlerStatusUpdated(getPluginsEnabled());
     return status;
@@ -126,6 +133,7 @@ bool
 PluginModel::unloadPlugin(const QString& path)
 {
     bool status = PluginManager::instance().unloadPlugin(path);
+    Q_EMIT modelUpdated();
     if (getChatHandlers().size() <= 0)
         emit chatHandlerStatusUpdated(false);
     return status;
@@ -143,6 +151,7 @@ PluginModel::toggleCallMediaHandler(const QString& mediaHandlerId,
                                     bool toggle)
 {
     PluginManager::instance().toggleCallMediaHandler(mediaHandlerId, callId, toggle);
+    Q_EMIT modelUpdated();
 }
 
 VectorString
@@ -158,6 +167,7 @@ PluginModel::toggleChatHandler(const QString& chatHandlerId,
                                bool toggle)
 {
     PluginManager::instance().toggleChatHandler(chatHandlerId, accountId, peerId, toggle);
+    Q_EMIT modelUpdated();
 }
 
 VectorString
@@ -219,7 +229,9 @@ PluginModel::getPluginPreferences(const QString& path)
 bool
 PluginModel::setPluginPreference(const QString& path, const QString& key, const QString& value)
 {
-    return PluginManager::instance().setPluginPreference(path, key, value);
+    auto result = PluginManager::instance().setPluginPreference(path, key, value);
+    Q_EMIT modelUpdated();
+    return result;
 }
 
 MapStringString
@@ -231,7 +243,9 @@ PluginModel::getPluginPreferencesValues(const QString& path)
 bool
 PluginModel::resetPluginPreferencesValues(const QString& path)
 {
-    return PluginManager::instance().resetPluginPreferencesValues(path);
+    auto result = PluginManager::instance().resetPluginPreferencesValues(path);
+    Q_EMIT modelUpdated();
+    return result;
 }
 
 } // namespace lrc