diff --git a/dev/js/spec/pluginSpec.js b/dev/js/spec/pluginSpec.js
index fa74486..62aa3c7 100644
--- a/dev/js/spec/pluginSpec.js
+++ b/dev/js/spec/pluginSpec.js
@@ -13,7 +13,8 @@
       var div = document.createElement("div");
       var id = manager.addWidget(div, 'about:blank');
       expect(id).toMatch(/^id-/);
-      expect(div.firstChild.tagName).toEqual("IFRAME");
+      expect(div.firstChild.classList.contains('widget')).toBeTruthy();
+      expect(div.firstChild.firstChild.tagName).toEqual("IFRAME");
       manager.destroy();
     });
   });
diff --git a/dev/js/src/plugin/server.js b/dev/js/src/plugin/server.js
index d4190fb..6689529 100644
--- a/dev/js/src/plugin/server.js
+++ b/dev/js/src/plugin/server.js
@@ -14,6 +14,10 @@
   // Contains all widgets to address with
   // messages to them
   var widgets = {};
+  var plugins = {};
+  var buttons = {
+    match : []
+  };
 
   // This is a counter to limit acceptable incoming messages
   // to a certain amount. For every message, this counter will
@@ -45,6 +49,96 @@
     },
 
     /**
+     * Register a plugin described as a JSON object.
+     *
+     * This is work in progress.
+     */
+    register : function (obj) {
+
+      /* Example:
+
+         KorAP.Plugin.register({
+           'name' : 'CatContent',
+           'desc' : 'Some content about cats',
+           'about' : 'https://localhost:5678/',
+           'embed' : [{
+             'buttonGroup' : 'match',
+             'title' : loc.TRANSLATE,
+             'classes' : ['translate']
+             'onClick' : {
+               'action' : 'addWidget',
+               'panel' : 'match',
+               'template' : 'https://localhost:5678/?match={matchid}',
+             }
+           }]
+         });
+      */
+
+      // TODO:
+      //   These fields need to be localized by a structure like
+      //   {
+      //     de : {
+      //       name : '..'
+      //     }
+      //     en : ...
+      //   }
+      // for display
+      var name = obj["name"];
+
+      // Register plugin by name
+      var plugin = plugins[name] = {
+        name : name,
+        desc : obj["desc"],
+        about : obj["about"],
+        widgets : []
+      };
+ 
+      // Embed all embeddings of the plugin
+      for (var i in obj["embed"]) {
+        var embed = obj["embed"][i];
+        var addTo = embed["buttonGroup"];
+        var onClick = embed["onClick"];
+
+        // Needs to be localized as well
+        var title = embed["title"];
+
+        // The embedding will open a widget
+        if (onClick["action"] == "addWidget") {
+
+          var panel = onClick["panel"];
+          var that = this;
+          var cb = function (e) {
+
+            // Get the URL of the widget
+            var url = onClick["template"]; // that._interpolateURI(onClick["template"], this.match);
+
+            // Add the widget to the panel
+            var id = that.addWidget(document.getElementById(panel), name, url);
+            plugin["widgets"].push(id);
+          };
+
+          buttons["match"].push([title, embed["classes"], cb]);
+        };
+      };
+    },
+
+
+    // TODO:
+    //   Interpolate URIs similar to https://tools.ietf.org/html/rfc6570
+    //   but as simple as possible
+    _interpolateURI : function (uri, obj) {
+      // ...
+    },
+
+
+    /**
+     * Get named button group
+     */
+    buttonGroup : function (name) {
+      return buttons[name];
+    },
+    
+    /**
      * Open a new widget as a child to a certain element
      */
     addWidget : function (element, name, src) {
@@ -79,6 +173,8 @@
       limits[id] = maxMessages;
 
       // Open widget in frontend
+      // TODO:
+      //   Instead of an "element" this should probably be a 'panel' object!
       element.appendChild(
         widget.element()
       );
@@ -119,6 +215,9 @@
 
         // Kill widget
         KorAP.log(0, 'Suspicious action by widget', widget.src);
+
+        // TODO:
+        //   Potentially kill the whole plugin!
         this.closeWidget(widget);
         return;
       };
diff --git a/dev/js/src/util.js b/dev/js/src/util.js
index cb60c2a..27c3d8d 100644
--- a/dev/js/src/util.js
+++ b/dev/js/src/util.js
@@ -83,6 +83,9 @@
   KorAP.API = KorAP.API || {};
   KorAP.Locale = KorAP.Locale || {};
 
+  // This should load plugin/server
+  KorAP.Plugin = KorAP.Plugin || {};
+
   const loc = KorAP.Locale;
   loc.OR  = loc.OR  || 'or';
   loc.AND = loc.AND || 'and';
