diff --git a/CHANGELOG b/CHANGELOG
index 5b62fee111319e4552c6da4d82c7223705e1883d..8afa070c8833176aa5ef92e45ad85f067d93396f 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -8,6 +8,8 @@ minerva (14.0.0~alpha.1) unstable; urgency=low
   * Bug fix: some project couldn't be accessed due to problem with migration of 
     reaction with unknown boolean operator (#880)
   * Bug fix: problem with unloading plugin is properly handled (#884)
+  * Bug fix: upload of invalid plugin doesn't add it to plugin tab and list of 
+    loaded plugins (#885)
 
  -- Piotr Gawron <piotr.gawron@uni.lu>  Mon, 12 Aug 2019 10:00:00 +0200
 
diff --git a/frontend-js/src/main/js/plugin/Plugin.js b/frontend-js/src/main/js/plugin/Plugin.js
index 89b722618bf8163ed691864ffb5f515bf1bbd662..1db70c2911ca6246950e205f731e58ae8d24d1d1 100644
--- a/frontend-js/src/main/js/plugin/Plugin.js
+++ b/frontend-js/src/main/js/plugin/Plugin.js
@@ -107,6 +107,10 @@ Plugin.prototype.getMinervaPluginProxy = function () {
  * @returns {string}
  */
 Plugin.prototype.getPluginId = function () {
+  if (this.getMinervaPluginProxy() === undefined) {
+    logger.warn("Plugin is not loaded properly");
+    return undefined;
+  }
   return this.getMinervaPluginProxy().pluginId;
 };
 
diff --git a/frontend-js/src/main/js/plugin/PluginManager.js b/frontend-js/src/main/js/plugin/PluginManager.js
index ff458420f697e3e4fdc740db0538f14ac5ccce9f..be4a4bafc94cce9c85dea3cd1cdf017a2a0607ba 100644
--- a/frontend-js/src/main/js/plugin/PluginManager.js
+++ b/frontend-js/src/main/js/plugin/PluginManager.js
@@ -94,6 +94,7 @@ PluginManager.prototype.addPlugin = function (options) {
         map: self.getMap(),
         serverConnector: self.getServerConnector()
       });
+      self._plugins.push(plugin);
     } else {
       plugin = new Plugin({
         url: options.url,
@@ -105,11 +106,11 @@ PluginManager.prototype.addPlugin = function (options) {
       plugin.addListener("onUnload", function () {
         self.getGuiUtils().removeTab(self, element);
       });
+      self._plugins.push(plugin);
       if (!self.isValidUrl(options.url)) {
         return Promise.reject(new InvalidArgumentError("url: '" + options.url + "' is invalid"));
       }
     }
-    self._plugins.push(plugin);
     return plugin.load();
   }).then(function () {
     $("a[href='#" + element.parentNode.id + "']", $(self.getElement()))[0].innerHTML = plugin.getName();
@@ -140,7 +141,7 @@ PluginManager.prototype.addPlugin = function (options) {
     GuiConnector.setUrlParam("plugins", self._getLoadedPluginsAsHashList());
     return plugin;
   }).catch(function (e) {
-    return plugin.unload().then(function () {
+    return self.removePlugin(plugin).then(function () {
       GuiConnector.alert("Problem with loading plugin:<br/>" + e.message);
     });
   });
diff --git a/frontend-js/src/test/js/plugin/PluginManager-test.js b/frontend-js/src/test/js/plugin/PluginManager-test.js
index 4ac0fac0eb50dee16e4f78d2699d2c231c87dd60..ef6f02df82478b6bb21d2d0859771700e78e948e 100644
--- a/frontend-js/src/test/js/plugin/PluginManager-test.js
+++ b/frontend-js/src/test/js/plugin/PluginManager-test.js
@@ -88,10 +88,11 @@ describe('PluginManager', function () {
 
     it('with error', function () {
       var manager = createPluginManager();
-      return manager.addPlugin({url: "./invalid.js"}).then(function (plugin) {
+      return manager.addPlugin({url: "./invalid.js"}).then(function () {
         assert.notOk("Expected error");
       }).catch(function (e) {
-        assert.ok(e.message.indexOf("Problem with loading plugin") >= 0)
+        assert.ok(e.message.indexOf("Problem with loading plugin") >= 0);
+        assert.equal(0, manager.getPlugins().length);
       });
     });
     it('with invalid url', function () {
@@ -99,7 +100,7 @@ describe('PluginManager', function () {
       manager.isValidUrl = function () {
         return false;
       };
-      return manager.addPlugin({url: "xx"}).then(function (plugin) {
+      return manager.addPlugin({url: "xx"}).then(function () {
         assert.notOk("Expected error");
       }).catch(function (e) {
         assert.ok(e.message.indexOf("Problem with loading plugin") >= 0)
@@ -146,7 +147,14 @@ describe('PluginManager', function () {
 
     it('removing non existing plugin', function () {
       var manager = createPluginManager();
-      var plugin = new Plugin({url: "testFiles/plugin/empty.js"});
+      var plugin = new Plugin({
+        url: "testFiles/plugin/empty.js",
+        map: manager.getMap(),
+        configuration: manager.getConfiguration(),
+        serverConnector: manager.getServerConnector(),
+        element: testDiv
+      });
+
       return manager.removePlugin(plugin).then(function () {
         assert.notOk("Error expected");
       }, function (error) {