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';
