diff --git a/.gitignore b/.gitignore
index 219d538..87ea481 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,6 +9,7 @@
 cache/data
 public
 kalamar.*.conf
+kalamar.conf.json
 script/hypnotoad.pid
 .sass-cache
 dev/css
diff --git a/Gruntfile.js b/Gruntfile.js
index af74d0e..830a0eb 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -14,26 +14,48 @@
  * TODO: Implement a LaTeX generator for a pdf of the dokumentation 
  */
 
-// Generate requireJS files for l10n
-var reqTasks = [];
-for (var i in {'en' : 0, 'de' : 1}) {
-  reqTasks.push({
-    options: {
-      // optimize: "uglify",
-      baseUrl: 'dev/js/src',
-      paths : {
-	      'lib': '../lib'
-      },
-      wrap:true,
-      // dir : 'public/js',
-      name: 'lib/almond',
-      include : ['app/' + i],
-      out: 'public/js/kalamar-<%= pkg.version %>-' + i + '.js'
-    }
-  })
-};
-
 module.exports = function(grunt) {
+
+  var config;
+
+  try {
+    config = grunt.file.readJSON('kalamar.conf.json');
+  }
+  catch(err) {
+    console.log("Error: " + err);
+    config = {};
+  };
+
+  if (config["include"] === undefined) {
+    config["include"] = [
+      'hint/foundries/base',
+      'hint/foundries/dereko'
+    ];
+  };
+
+  // Generate requireJS files for l10n
+  var reqTasks = [];
+  for (var i in {'en' : 0, 'de' : 1}) {
+
+    var includeFiles = config["include"].slice();
+    includeFiles.push('app/' + i);
+
+    reqTasks.push({
+      options: {
+        // optimize: "uglify",
+        baseUrl: 'dev/js/src',
+        paths : {
+	        'lib': '../lib'
+        },
+        wrap:true,
+        // dir : 'public/js',
+        name: 'lib/almond',
+        include : includeFiles,
+        out: 'public/js/kalamar-<%= pkg.version %>-' + i + '.js'
+      }
+    })
+  };
+
   grunt.initConfig({
     pkg: grunt.file.readJSON('package.json'),
     requirejs: reqTasks,
diff --git a/dev/js/spec/hintSpec.js b/dev/js/spec/hintSpec.js
index 5df65fd..1ff9343 100644
--- a/dev/js/spec/hintSpec.js
+++ b/dev/js/spec/hintSpec.js
@@ -143,7 +143,7 @@
 
 
   describe('KorAP.Hint', function () {
-    KorAP.hintArray = {
+    KorAP.annotationHelper = {
       "-" : [
   ["Base Annotation", "base/s=", "Structure"],
   ["CoreNLP", "corenlp/", "Constituency, Named Entities, Part-of-Speech"]
diff --git a/dev/js/spec/menuSpec.js b/dev/js/spec/menuSpec.js
index aba3f1e..a60d7ab 100644
--- a/dev/js/spec/menuSpec.js
+++ b/dev/js/spec/menuSpec.js
@@ -295,6 +295,7 @@
         // Highlight in the middle - both
         menuItem = KorAP.ComplexMenuItem.create(['CoreNLP', 'corenlp/', 'This is my Example']);
         menuItem.highlight("e");
+
         expect(menuItem.element().innerHTML).toEqual("<div><h1>Cor<mark>e</mark>NLP</h1><h2>cor<mark>e</mark>nlp/</h2><h3>This is my <mark>E</mark>xampl<mark>e</mark></h3></div>");
 
         menuItem.lowlight();
@@ -328,6 +329,21 @@
         ["Syntax", "syn="]
       ];
 
+      var listMultiPrefix = [
+        ["PP","PP ","Personal Pronoun"],
+        ["PPP","PPP ","Personal Pronoun, Plural"],
+        ["PPPA","PPPA ","Personal Pronoun, Plural, Acc."],
+        ["PPPD","PPPD ","Personal Pronoun, Plural, Dative"],
+        ["PPPR","PPPR ","Personal Pronoun, Plural, Direct"],
+        ["PPPO","PPPO ","Personal Pronoun, Plural, Oblique"],
+        ["PPS","PPS ","Personal Pronoun, Singular"],
+        ["PPSA","PPSA ","Personal Pronoun, Singular, Accusative"],
+        ["PPSD","PPSD ","Personal Pronoun, Singular, Dative"],
+        ["PPSR","PPSR ","Personal Pronoun, Singular, Direct"],
+        ["PPSN","PPSN ","Personal Pronoun, Singular, Nominative"],
+        ["PPSO","PPSO ","Personal Pronoun, Singular, Oblique"]
+      ];
+      
       var demolist = [
         ['Titel', 'title'],
         ['Untertitel', 'subTitle'],
@@ -784,7 +800,43 @@
         expect(menu.shownItem(2)).toBe(undefined);
       });
 
+      it('should be filterable (multiple prefix = "pro sin")', function () {
+        var menu = KorAP.HintMenu.create("drukola/p=", listMultiPrefix);
+        menu._firstActive = true;
 
+        menu.limit(2);
+        expect(menu.prefix("pro sin").show()).toBe(true);
+        expect(menu.shownItem(0).name()).toEqual("PPS");
+        expect(menu.element().childNodes[3].innerHTML).toEqual(
+          "<strong>PPS</strong><span>Personal <mark>Pro</mark>noun, <mark>Sin</mark>gular</span>"
+        );
+
+        expect(menu.shownItem(0).active()).toBe(true);
+        expect(menu.shownItem(1).name()).toEqual("PPSA");
+        expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>PPSA</strong><span>Personal <mark>Pro</mark>noun, <mark>Sin</mark>gular, Accusative</span>");
+        expect(menu.shownItem(1).active()).toBe(false);
+
+        expect(menu.shownItem(2)).toBe(undefined);
+      });
+
+      it('should be filterable (trimming = " p")', function () {
+        var menu = KorAP.HintMenu.create("/p=", listMultiPrefix);
+        // menu._firstActive = true;
+
+        menu.limit(2);
+        expect(menu.show()).toBe(true);
+        menu._prefix.add(" ");
+        expect(menu.show()).toBe(true);
+        menu._prefix.add("p")
+        expect(menu.show()).toBe(true);
+        expect(menu.shownItem(0).name()).toEqual("PP");
+        expect(menu.element().childNodes[3].innerHTML).toEqual(
+          "<strong><mark>P</mark><mark>P</mark></strong>"+
+            "<span><mark>P</mark>ersonal <mark>P</mark>ronoun</span>"
+        );
+      });
+
+      
       it('should choose prefix with failing prefix (1)', function () {
         var menu = KorAP.HintMenu.create("cnx/", list);
         menu.limit(2);
diff --git a/dev/js/src/hint.js b/dev/js/src/hint.js
index 238b737..2ebc395 100644
--- a/dev/js/src/hint.js
+++ b/dev/js/src/hint.js
@@ -42,7 +42,7 @@
     ")?" +
     ")?" +
     ")$";
-  KorAP.hintArray = KorAP.hintArray || {};
+  KorAP.annotationHelper = KorAP.annotationHelper || { "-" : [] };
 
   /**
    * Return keycode based on event
@@ -175,12 +175,12 @@
       if (this._menu[action] === undefined) {
 
 	      // No matching hint menu
-	      if (KorAP.hintArray[action] === undefined)
+	      if (KorAP.annotationHelper[action] === undefined)
 	        return;
 
 	      // Create matching hint menu
 	      this._menu[action] = menuClass.create(
-	        this, action, KorAP.hintArray[action]
+	        this, action, KorAP.annotationHelper[action]
 	      );
       };
 
diff --git a/dev/js/src/hint/array.js b/dev/js/src/hint/array.js
deleted file mode 100644
index fcfe9a2..0000000
--- a/dev/js/src/hint/array.js
+++ /dev/null
@@ -1,463 +0,0 @@
-/*
-var menuContent = [
-  ['cnx/c', 'cnx', 'c'],
-  ['mate/c', 'mate', 'c'],
-  ['base/c', 'base', 'c'],
-  ['xip/c', 'xip', 'c'],
-  ['tt/c', 'tt', 'c']
-];
-*/
-
-var namedEntities = [
-  ["I-LOC",  "I-LOC ",  "Location"],
-  ["I-MISC", "I-MISC ", "Miscellaneous"],
-  ["I-ORG",  "I-ORG ",  "Organization"],
-  ["I-PER",  "I-PER ",  "Person"]
-];
-
-// http://www.ids-mannheim.de/cosmas2/projekt/referenz/stts/morph.html
-// http://nachhalt.sfb632.uni-potsdam.de/owl-docu/stts.html
-var sttsArray = [
-  // "$.", "$(", "$,"
-  ["ADJA","ADJA ", "Attributive Adjective"],
-  ["ADJD","ADJD ", "Predicative Adjective"],
-  ["ADV","ADV ", "Adverb"],
-  ["APPO","APPO ", "Postposition"],
-  ["APPR","APPR ", "Preposition"],
-  ["APPRART","APPRART ", "Preposition with Determiner"],
-  ["APZR","APZR ","Right Circumposition"],
-  ["ART","ART ", "Determiner"],
-  ["CARD","CARD ", "Cardinal Number"],
-  ["FM","FM ", "Foreign Material"],
-  ["ITJ","ITJ ", "Interjection"],
-  ["KOKOM","KOKOM ", "Comparison Particle"],
-  ["KON","KON ", "Coordinating Conjuncion"],
-  ["KOUI","KOUI ", "Subordinating Conjunction with 'zu'"],
-  ["KOUS","KOUS ", "Subordinating Conjunction with Sentence"],
-  ["NE","NE ", "Named Entity"],
-  ["NN","NN ", "Normal Nomina"],
-  ["PAV", "PAV ", "Pronominal Adverb"],
-  ["PDAT","PDAT ","Attributive Demonstrative Pronoun"],
-  ["PDS","PDS ", "Substitutive Demonstrative Pronoun"],
-  ["PIAT","PIAT ", "Attributive Indefinite Pronoun without Determiner"],
-  ["PIDAT","PIDAT ", "Attributive Indefinite Pronoun with Determiner"],
-  ["PIS","PIS ", "Substitutive Indefinite Pronoun"],
-  ["PPER","PPER ", "Personal Pronoun"],
-  ["PPOSAT","PPOSAT ", "Attributive Possessive Pronoun"],
-  ["PPOSS","PPOSS ", "Substitutive Possessive Pronoun"],
-  ["PRELAT","PRELAT ", "Attributive Relative Pronoun"],
-  ["PRELS","PRELS ", "Substitutive Relative Pronoun"],
-  ["PRF","PRF ", "Reflexive Pronoun"],
-  ["PROAV","PROAV ", "Pronominal Adverb"],
-  ["PTKA","PTKA ","Particle with Adjective"],
-  ["PTKANT","PTKANT ", "Answering Particle"],
-  ["PTKNEG","PTKNEG ", "Negation Particle"],
-  ["PTKVZ","PTKVZ ", "Separated Verbal Particle"],
-  ["PTKZU","PTKZU ", "'zu' Particle"],
-  ["PWAT","PWAT ", "Attributive Interrogative Pronoun"],
-  ["PWAV","PWAV ", "Adverbial Interrogative Pronoun"],
-  ["PWS","PWS ", "Substitutive Interrogative Pronoun"],
-  ["TRUNC","TRUNC ","Truncated"],
-  ["VAFIN","VAFIN ", "Auxiliary Finite Verb"],
-  ["VAIMP","VAIMP ", "Auxiliary Finite Imperative Verb"],
-  ["VAINF","VAINF ", "Auxiliary Infinite Verb"],
-  ["VAPP","VAPP ", "Auxiliary Perfect Participle"],
-  ["VMFIN","VMFIN ", "Modal Finite Verb"],
-  ["VMINF","VMINF ", "Modal Infinite Verb"],
-  ["VMPP","VMPP ", "Modal Perfect Participle"],
-  ["VVFIN","VVFIN ","Finite Verb"],
-  ["VVIMP","VVIMP ", "Finite Imperative Verb"],
-  ["VVINF","VVINF ", "Infinite Verb"],
-  ["VVIZU","VVIZU ", "Infinite Verb with 'zu'"],
-  ["VVPP","VVPP ", "Perfect Participle"],
-  ["XY", "XY ", "Non-Word"]
-];
-
-
-// http://www.coli.uni-saarland.de/projects/sfb378/negra-corpus/negra-corpus.html
-// http://www.coli.uni-saarland.de/projects/sfb378/negra-corpus/knoten.html
-var negraNodes = [
-  ["AA", "AA", "superlative phrase with 'am'"],
-  ["AP","AP", "adjektive phrase"],
-  ["AVP","AVP", "adverbial phrase"],
-  ["CAP","CAP", "coordinated adjektive phrase"],
-  ["CAVP","CAVP", "coordinated adverbial phrase"],
-  ["CAC","CAC", "coordinated adposition"],
-  ["CCP","CCP", "coordinated complementiser"],
-  ["CH","CH", "chunk"],
-  ["CNP","CNP", "coordinated noun phrase"],
-  ["CO","CO", "coordination"],
-  ["CPP","CPP", "coordinated adpositional phrase"],
-  ["CS","CS", "coordinated sentence"],
-  ["CVP","CVP", "coordinated verb phrase (non-finite)"],
-  ["CVZ","CVZ", "coordinated zu-marked infinitive"],
-  ["DL","DL", "discourse level constituent"],
-  ["ISU","ISU", "idiosyncratis unit"],
-  ["MPN","MPN", "multi-word proper noun"],
-  ["MTA","MTA", "multi-token adjective"],
-  ["NM","NM", "multi-token number"],
-  ["NP","NP", "noun phrase"],
-  ["PP","PP", "adpositional phrase"],
-  ["QL","QL", "quasi-languag"],
-  ["ROOT","ROOT", "root node"],
-  ["S","S", "sentence"],
-  ["VP","VP", "verb phrase (non-finite)"],
-  ["VZ","VZ", "zu-marked infinitive"]
-];
-
-// http://www.coli.uni-saarland.de/projects/sfb378/negra-corpus/kanten.html
-var negraEdges = [
-  ["AC","AC","adpositional case marker"],
-  ["ADC","ADC","adjective component"],
-  ["AMS","AMS","measure argument of adj"],
-  ["APP","APP","apposition"],
-  ["AVC","AVC","adverbial phrase component"],
-  ["CC","CC","comparative complement"],
-  ["CD","CD","coordinating conjunction"],
-  ["CJ","CJ","conjunct"],
-  ["CM","CM","comparative concjunction"],
-  ["CP","CP","complementizer"],
-  ["DA","DA","dative"],
-  ["DH","DH","discourse-level head"],
-  ["DM","DM","discourse marker"],
-  ["GL","GL","prenominal genitive"],
-  ["GR","GR","postnominal genitive"],
-  ["HD","HD","head"],
-  ["JU","JU","junctor"],
-  ["MC","MC","comitative"],
-  ["MI","MI","instrumental"],
-  ["ML","ML","locative"],
-  ["MNR","MNR","postnominal modifier"],
-  ["MO","MO","modifier"],
-  ["MR","MR","rhetorical modifier"],
-  ["MW","MW","way (directional modifier)"],
-  ["NG","NG","negation"],
-  ["NK","NK","noun kernel modifier"],
-  ["NMC","NMC","numerical component"], 
-  ["OA","OA","accusative object"],
-  ["OA2","OA2","second accusative object"], 
-  ["OC","OC","clausal object"],
-  ["OG","OG","genitive object"], 
-  ["PD","PD","predicate"],
-  ["PG","PG","pseudo-genitive"],
-  ["PH","PH","placeholder"],
-  ["PM","PM","morphological particle"],
-  ["PNC","PNC","proper noun component"], 
-  ["RC","RC","relative clause"],
-  ["RE","RE","repeated element"],
-  ["RS","RS","reported speech"],
-  ["SB","SB","subject"],
-  ["SBP","SBP","passivised subject (PP)"], 
-  ["SP","SP","subject or predicate"],
-  ["SVP","SVP","separable verb prefix"],
-  ["UC","UC","(idiosyncratic) unit component"], 
-  ["VO","VO","vocative"]
-];
-
-var mateSttsArray = sttsArray.slice(0);
-mateSttsArray.push(
-  ["<root-POS>","<root-POS>","Root Part of Speech"]
-);
-
-var sgbrSttsArray = sttsArray.slice(0);
-
-// Push specific information for Schreibgebrauch
-sgbrSttsArray.push(
-  ["NNE", "NNE", "Normal Nomina with Named Entity"],
-  ["ADVART","ADVART",   "Adverb with Article"],
-  ["EMOASC","EMOASC",   "ASCII emoticon"],
-  ["EMOIMG","EMOIMG",   "Graphic emoticon"],
-  ["ERRTOK","ERRTOK",   "Tokenisation Error"],
-  ["HST",     "HST",      "Hashtag"],
-  ["KOUSPPER","KOUSPPER", "Subordinating Conjunction (with Sentence) with Personal Pronoun"],
-  ["ONO",     "ONO",      "Onomatopoeia"],
-  ["PPERPPER","PPERPPER", "Personal Pronoun with Personal Pronoun"],
-  ["URL",     "URL",      "Uniform Resource Locator"],
-  ["VAPPER",  "VAPPER",   "Finite Auxiliary Verb with Personal Pronoun"],
-  ["VMPPER",  "VMPPER",   "Fintite Modal Verb with Personal Pronoun"],
-  ["VVPPER",  "VVPPER",   "Finite Full Verb with Personal Pronoun"],
-  ["AW", "AW", "Interaction Word"],
-  ["ADR", "ADR", "Addressing Term"],
-  ["AWIND", "AWIND", "Punctuation Indicating Addressing Term"],
-  ["ERRAW","ERRAW", "Part of Erroneously Separated Compound"]
-  /*
-    As KorAP currently doesn't support these tags, they could also be ommited
-    ["_KOMMA", "_KOMMA", "Comma"],
-    ["_SONST", "_SONST", "Intrasentential Punctuation Mark"],
-    ["_ENDE", "_ENDE", "Punctuation Mark at the end of the Sentence"]
-  */
-);
-
-// Sort by tag
-sgbrSttsArray.sort(function (a,b) { return a[0].localeCompare(b[0]) });
-
-define(function () {
-  var obj = {
-    "-" : [
-      ["Base Annotation", "base/s=", "Structure"],
-//      ["Connexor", "cnx/", "Constituency, Lemma, Morphology, Part-of-Speech, Syntax"],
-      ["CoreNLP", "corenlp/", "Constituency, Named Entities, Part-of-Speech"],
-      ["DeReKo", "dereko/s=", "Structure"],
-      ["DRuKoLa", "drukola/", "Lemma, Morphology, Part-of-Speech"],
-//      ["Mate", "mate/", "Lemma, Morphology, Part-of-Speech"],
-      ["Malt", "malt/", "Dependency"],
-      ["OpenNLP", "opennlp/", "Part-of-Speech"],
-//      ["Schreibgebrauch", "sgbr/", "Lemma, Lemma Variants, Part-of-Speech"],
-      ["TreeTagger", "tt/", "Lemma, Part-of-Speech"],
-//      ["Xerox Parser", "xip/", "Constituency, Lemma, Part-of-Speech"]
-      ["MarMoT", "marmot/", "Morphology, Part-of-Speech"],
-    ],
-    "base/s=" : [
-      ["s", "s", "Sentence"],
-      ["p", "p", "Paragraph"],
-      ["t", "t", "Text"]
-    ],
-    "corenlp/" : [
-      ["Constituency", "c="],
-      ["Named Entity", "ne=" , "Combined"],
-      ["Named Entity", "ne_dewac_175m_600=" , "ne_dewac_175m_600"],
-      ["Named Entity", "ne_hgc_175m_600=",    "ne_hgc_175m_600"],
-      ["Part-of-Speech", "p="]
-    ],
-    "corenlp/ne=" : namedEntities,
-    "corenlp/ne_dewac_175m_600=" : namedEntities,
-    "corenlp/ne_hgc_175m_600=" : namedEntities,
-    "corenlp/p=" : sttsArray,
-    "corenlp/c=" : negraNodes,
-    "cnx/" : [
-      ["Constituency", "c="],
-      ["Lemma", "l="],
-      ["Morphology", "m="],
-      ["Part-of-Speech", "p="],
-      ["Syntax", "syn="]
-    ],
-    "cnx/c=" : [
-      ["np", "np ", "Nominal Phrase"]
-    ],
-    // http://www.ids-mannheim.de/cosmas2/projekt/referenz/connexor/morph.html
-    "cnx/m=" : [
-      ["Abbr","Abbr ", "Nouns: Abbreviation"],
-      ["CMP","CMP ", "Adjective: Comparative"],
-      ["IMP", "IMP ", "Mood: Imperative"],
-      ["IND", "IND ", "Mood: Indicative"],
-      ["INF", "INF ", "Infinitive"],
-      ["ORD","ORD ", "Numeral: Ordinal"],
-      ["PAST", "PAST ", "Tense: past"],
-      ["PCP", "PCP ", "Participle"],
-      ["PERF", "PERF ", "Perfective Participle"],
-      ["PL","PL ", "Nouns: Plural"],
-      ["PRES", "PRES ", "Tense: present"],
-      ["PROG", "PROG ", "Progressive Participle"],
-      ["Prop","Prop ", "Nouns: Proper Noun"],
-      ["SUB", "SUB ", "Mood: Subjunctive"],
-      ["SUP","SUP ", "Adjective: Superlative"]
-    ],
-    // http://www.ids-mannheim.de/cosmas2/projekt/referenz/connexor/morph.html
-    "cnx/p=" : [
-      ["A", "A ", "Adjective"],
-      ["ADV", "ADV ", "Adverb"],
-      ["CC", "CC ", "Coordination Marker"],
-      ["CS", "CS ", "Clause Marker"],
-      ["DET", "DET ", "Determiner"],
-      ["INTERJ", "INTERJ ", "Interjection"],
-      ["N", "N ", "Noun"],
-      ["NUM", "NUM ", "Numeral"],
-      ["PREP", "PREP ", "Preposition"],
-      ["PRON", "PRON ", "Pro-Nominal"],
-      ["V", "V ", "Verb"]
-    ],
-    // http://www.ids-mannheim.de/cosmas2/projekt/referenz/connexor/syntax.html
-    "cnx/syn=" : [
-      ["@ADVL", "@ADVL ", "Adverbial Head"],
-      ["@AUX", "@AUX ", "Auxiliary Verb"],
-      ["@CC", "@CC ", "Coordination"]
-      ["@MAIN", "@MAIN ", "Main Verb"],
-      ["@NH", "@NH ", "Nominal Head"],
-      ["@POSTMOD", "@POSTMOD ", "Postmodifier"],
-      ["@PREMARK", "@PREMARK ", "Preposed Marker"],
-      ["@PREMOD", "@POSTMOD ", "Premodifier"]
-    ],
-    "drukola/" : [
-      ["Lemma", "l="],
-      ["Morphology", "m="],
-      ["Part-of-Speech", "p="]      
-    ],
-    "opennlp/" : [
-      ["Part-of-Speech", "p="]
-    ],
-    "opennlp/p=" : sttsArray,
-    "sgbr/" : [
-      ["Lemma", "l="],
-      ["Lemma Variants", "lv="],
-      ["Part-of-Speech", "p="]
-    ],
-    "sgbr/p=" : sgbrSttsArray,
-    "xip/" : [
-      ["Constituency", "c="],
-      // Inactive: ["Dependency", "d="],
-      ["Lemma", "l="],
-      ["Part-of-Speech", "p="],
-    ],
-    // "xip/c=" : [],
-    // Inactive: "xip/d=" : [],
-    // "xip/p=" : [],
-    "tt/" : [
-      ["Lemma", "l="],
-      ["Part-of-Speech", "p="]
-    ],
-    "tt/p=" : sttsArray,
-    "marmot/" : [
-      ["Morphology", "m="],
-      ["Part-of-Speech", "p="]
-    ],
-    "marmot/p=" : sttsArray,
-    "malt/" : [
-      ["Dependency", "d="]
-    ],
-    "mate/" : [
-      // Inactive: "d" : ["d=", "Dependency"],
-      ["Lemma", "l="],
-      ["Morphology", "m="],
-      ["Part-of-Speech", "p="]
-    ],
-    // Inactive: mate/d=
-    "mate/p=" : mateSttsArray,
-    "mate/m=" : [
-      ["Case", "case:"],
-      ["Degree", "degree:"],
-      ["Gender", "gender:"],
-      ["Mood", "mood:"],
-      ["Number", "number:"],
-      ["Person", "person:"],
-      ["Tense","tense:"],
-      ["No type", "<no-type> "]
-    ],
-    "marmot/m=" : [
-      ["Case", "case:"],
-      ["Degree", "degree:"],
-      ["Gender", "gender:"],
-      ["Mood", "mood:"],
-      ["Number", "number:"],
-      ["Person", "person:"],
-      ["Tense","tense:"],
-      ["No type", "<no-type> "]
-    ],
-    "mate/m=case:" : [
-      ["acc", "acc ", "Accusative"],
-      ["dat","dat ", "Dative"],
-      ["gen", "gen ","Genitive"],
-      ["nom","nom ", "Nominative"],
-      ["*","* ", "Undefined"]
-    ],
-    "marmot/m=case:" : [
-      ["acc", "acc ", "Accusative"],
-      ["dat","dat ", "Dative"],
-      ["gen", "gen ","Genitive"],
-      ["nom","nom ", "Nominative"],
-      ["*","* ", "Undefined"]
-    ],
-    "mate/m=degree:" : [
-      ["comp","comp ", "Comparative"],
-      ["pos","pos ", "Positive"],
-      ["sup","sup ", "Superative"]
-    ],
-    "marmot/m=degree:" : [
-      ["comp","comp ", "Comparative"],
-      ["pos","pos ", "Positive"],
-      ["sup","sup ", "Superative"]
-    ],
-    "mate/m=gender:" : [
-      ["fem", "fem ", "Feminium"],
-      ["masc", "masc ", "Masculinum"],
-      ["neut","neut ", "Neuter"],
-      ["*","* ","Undefined"]
-    ],
-    "marmot/m=gender:" : [
-      ["fem", "fem ", "Feminium"],
-      ["masc", "masc ", "Masculinum"],
-      ["neut","neut ", "Neuter"],
-      ["*","* ","Undefined"]
-    ],
-    "mate/m=mood:" : [
-      ["imp","imp ", "Imperative"],
-      ["ind","ind ", "Indicative"],
-      ["subj","subj ", "Subjunctive"]
-    ],
-    "marmot/m=mood:" : [
-      ["imp","imp ", "Imperative"],
-      ["ind","ind ", "Indicative"],
-      ["subj","subj ", "Subjunctive"]
-    ], 
-    "mate/m=number:" : [
-      ["pl","pl ","Plural"],
-      ["sg","sg ","Singular"],
-      ["*","* ","Undefined"]
-    ],
-    "marmot/m=number" : [
-      ["pl","pl ","Plural"],
-      ["sg","sg ","Singular"],
-      ["*","* ","Undefined"]
-    ],
-    "mate/m=person:" : [
-      ["1","1 ", "First Person"],
-      ["2","2 ", "Second Person"],
-      ["3","3 ", "Third Person"]
-    ],
-    "marmot/m=person:" : [
-      ["1","1 ", "First Person"],
-      ["2","2 ", "Second Person"],
-      ["3","3 ", "Third Person"]
-    ],
-    "mate/m=tense:" : [
-      ["past","past ", "Past"],
-      ["pres","pres ", "Present"]
-    ],
-    "marmot/m=tense:" : [
-      ["past","past ", "Past"],
-      ["pres","pres ", "Present"]
-    ],
-    "malt/d=" : [
-      ["-PUNCT-", "-PUNCT- "],
-      ["-UNKNOWN-","-UNKNOWN- "],
-      ["ADV","ADV "],
-      ["APP","APP "],
-      ["ATTR","ATTR "],
-      ["AUX","AUX "],
-      ["AVZ","AVZ "],
-      ["CJ","CJ "],
-      ["DET","DET "],
-      ["EXPL","EXPL "],
-      ["GMOD","GMOD "],
-      ["GRAD","GRAD "],
-      ["KOM","KOM "],
-      ["KON","KON "],
-      ["KONJ","KONJ "],
-      ["NEB","NEB "],
-      ["OBJA","OBJA "],
-      ["OBJC","OBJC "],
-      ["OBJD","OBJD "],
-      ["OBJG","OBJG "],
-      ["OBJI","OBJI "],
-      ["OBJP","OBJP "],
-      ["PAR","PAR "],
-      ["PART","PART "],
-      ["PN","PN "],
-      ["PP","PP "],
-      ["PRED","PRED "],
-      ["REL","REL "],
-      ["ROOT","ROOT "],
-      ["S","S "],
-      ["SUBJ","SUBJ "],
-      ["SUBJC","SUBJC "],
-      ["ZEIT","ZEIT "],
-      ["gmod-app","gmod-app "],
-      ["koord","koord "]
-    ]
-  };
-
-  for (var i in negraNodes) {
-    obj["corenlp/c=" + negraNodes[i][0] + '-'] = negraEdges;
-  };
-
-  return obj;
-});
diff --git a/dev/js/src/hint/foundries/base.js b/dev/js/src/hint/foundries/base.js
new file mode 100644
index 0000000..0bb26fc
--- /dev/null
+++ b/dev/js/src/hint/foundries/base.js
@@ -0,0 +1,11 @@
+var ah = KorAP.annotationHelper = KorAP.annotationHelper || { "-" : [] };
+
+ah["-"].push(
+  ["Base Annotation", "base/s=", "Structure"]
+);
+
+ah["base/s="] = [
+  ["s", "s", "Sentence"],
+  ["p", "p", "Paragraph"],
+  ["t", "t", "Text"]
+];
diff --git a/dev/js/src/hint/foundries/cnx.js b/dev/js/src/hint/foundries/cnx.js
new file mode 100644
index 0000000..0c6f8cb
--- /dev/null
+++ b/dev/js/src/hint/foundries/cnx.js
@@ -0,0 +1,63 @@
+var ah = KorAP.annotationHelper = KorAP.annotationHelper || { "-" : [] };
+
+ah["-"].push(
+  ["Connexor", "cnx/", "Constituency, Lemma, Morphology, Part-of-Speech, Syntax"]
+);
+
+ah["cnx/"] = [
+  ["Constituency", "c="],
+  ["Lemma", "l="],
+  ["Morphology", "m="],
+  ["Part-of-Speech", "p="],
+  ["Syntax", "syn="]
+];
+
+ah["cnx/c="] = [
+  ["np", "np ", "Nominal Phrase"]
+];
+
+// http://www.ids-mannheim.de/cosmas2/projekt/referenz/connexor/morph.html
+ah["cnx/m="] = [
+  ["Abbr","Abbr ", "Nouns: Abbreviation"],
+  ["CMP","CMP ", "Adjective: Comparative"],
+  ["IMP", "IMP ", "Mood: Imperative"],
+  ["IND", "IND ", "Mood: Indicative"],
+  ["INF", "INF ", "Infinitive"],
+  ["ORD","ORD ", "Numeral: Ordinal"],
+  ["PAST", "PAST ", "Tense: past"],
+  ["PCP", "PCP ", "Participle"],
+  ["PERF", "PERF ", "Perfective Participle"],
+  ["PL","PL ", "Nouns: Plural"],
+  ["PRES", "PRES ", "Tense: present"],
+  ["PROG", "PROG ", "Progressive Participle"],
+  ["Prop","Prop ", "Nouns: Proper Noun"],
+  ["SUB", "SUB ", "Mood: Subjunctive"],
+  ["SUP","SUP ", "Adjective: Superlative"]
+];
+
+// http://www.ids-mannheim.de/cosmas2/projekt/referenz/connexor/morph.html
+ah["cnx/p="] = [
+  ["A", "A ", "Adjective"],
+  ["ADV", "ADV ", "Adverb"],
+  ["CC", "CC ", "Coordination Marker"],
+  ["CS", "CS ", "Clause Marker"],
+  ["DET", "DET ", "Determiner"],
+  ["INTERJ", "INTERJ ", "Interjection"],
+  ["N", "N ", "Noun"],
+  ["NUM", "NUM ", "Numeral"],
+  ["PREP", "PREP ", "Preposition"],
+  ["PRON", "PRON ", "Pro-Nominal"],
+  ["V", "V ", "Verb"]
+];
+
+// http://www.ids-mannheim.de/cosmas2/projekt/referenz/connexor/syntax.html
+ah["cnx/syn="] = [
+  ["@ADVL", "@ADVL ", "Adverbial Head"],
+  ["@AUX", "@AUX ", "Auxiliary Verb"],
+  ["@CC", "@CC ", "Coordination"]
+  ["@MAIN", "@MAIN ", "Main Verb"],
+  ["@NH", "@NH ", "Nominal Head"],
+  ["@POSTMOD", "@POSTMOD ", "Postmodifier"],
+  ["@PREMARK", "@PREMARK ", "Preposed Marker"],
+  ["@PREMOD", "@POSTMOD ", "Premodifier"]
+];
diff --git a/dev/js/src/hint/foundries/corenlp.js b/dev/js/src/hint/foundries/corenlp.js
new file mode 100644
index 0000000..b591c62
--- /dev/null
+++ b/dev/js/src/hint/foundries/corenlp.js
@@ -0,0 +1,112 @@
+require(["hint/foundries/stts"], function (sttsArray) {
+  var ah = KorAP.annotationHelper = KorAP.annotationHelper || { "-" : [] };
+
+  var namedEntities = [
+    ["I-LOC",  "I-LOC ",  "Location"],
+    ["I-MISC", "I-MISC ", "Miscellaneous"],
+    ["I-ORG",  "I-ORG ",  "Organization"],
+    ["I-PER",  "I-PER ",  "Person"]
+  ];
+
+  // http://www.coli.uni-saarland.de/projects/sfb378/negra-corpus/negra-corpus.html
+  // http://www.coli.uni-saarland.de/projects/sfb378/negra-corpus/knoten.html
+  var negraNodes = [
+    ["AA", "AA", "superlative phrase with 'am'"],
+    ["AP","AP", "adjektive phrase"],
+    ["AVP","AVP", "adverbial phrase"],
+    ["CAP","CAP", "coordinated adjektive phrase"],
+    ["CAVP","CAVP", "coordinated adverbial phrase"],
+    ["CAC","CAC", "coordinated adposition"],
+    ["CCP","CCP", "coordinated complementiser"],
+    ["CH","CH", "chunk"],
+    ["CNP","CNP", "coordinated noun phrase"],
+    ["CO","CO", "coordination"],
+    ["CPP","CPP", "coordinated adpositional phrase"],
+    ["CS","CS", "coordinated sentence"],
+    ["CVP","CVP", "coordinated verb phrase (non-finite)"],
+    ["CVZ","CVZ", "coordinated zu-marked infinitive"],
+    ["DL","DL", "discourse level constituent"],
+    ["ISU","ISU", "idiosyncratis unit"],
+    ["MPN","MPN", "multi-word proper noun"],
+    ["MTA","MTA", "multi-token adjective"],
+    ["NM","NM", "multi-token number"],
+    ["NP","NP", "noun phrase"],
+    ["PP","PP", "adpositional phrase"],
+    ["QL","QL", "quasi-languag"],
+    ["ROOT","ROOT", "root node"],
+    ["S","S", "sentence"],
+    ["VP","VP", "verb phrase (non-finite)"],
+    ["VZ","VZ", "zu-marked infinitive"]
+  ];
+
+  // http://www.coli.uni-saarland.de/projects/sfb378/negra-corpus/kanten.html
+  var negraEdges = [
+    ["AC","AC","adpositional case marker"],
+    ["ADC","ADC","adjective component"],
+    ["AMS","AMS","measure argument of adj"],
+    ["APP","APP","apposition"],
+    ["AVC","AVC","adverbial phrase component"],
+    ["CC","CC","comparative complement"],
+    ["CD","CD","coordinating conjunction"],
+    ["CJ","CJ","conjunct"],
+    ["CM","CM","comparative concjunction"],
+    ["CP","CP","complementizer"],
+    ["DA","DA","dative"],
+    ["DH","DH","discourse-level head"],
+    ["DM","DM","discourse marker"],
+    ["GL","GL","prenominal genitive"],
+    ["GR","GR","postnominal genitive"],
+    ["HD","HD","head"],
+    ["JU","JU","junctor"],
+    ["MC","MC","comitative"],
+    ["MI","MI","instrumental"],
+    ["ML","ML","locative"],
+    ["MNR","MNR","postnominal modifier"],
+    ["MO","MO","modifier"],
+    ["MR","MR","rhetorical modifier"],
+    ["MW","MW","way (directional modifier)"],
+    ["NG","NG","negation"],
+    ["NK","NK","noun kernel modifier"],
+    ["NMC","NMC","numerical component"], 
+    ["OA","OA","accusative object"],
+    ["OA2","OA2","second accusative object"], 
+    ["OC","OC","clausal object"],
+    ["OG","OG","genitive object"], 
+    ["PD","PD","predicate"],
+    ["PG","PG","pseudo-genitive"],
+    ["PH","PH","placeholder"],
+    ["PM","PM","morphological particle"],
+    ["PNC","PNC","proper noun component"], 
+    ["RC","RC","relative clause"],
+    ["RE","RE","repeated element"],
+    ["RS","RS","reported speech"],
+    ["SB","SB","subject"],
+    ["SBP","SBP","passivised subject (PP)"], 
+    ["SP","SP","subject or predicate"],
+    ["SVP","SVP","separable verb prefix"],
+    ["UC","UC","(idiosyncratic) unit component"], 
+    ["VO","VO","vocative"]
+  ];
+
+  ah["-"].push(
+    ["CoreNLP", "corenlp/", "Constituency, Named Entities, Part-of-Speech"]
+  );
+
+  ah["corenlp/"] = [
+    ["Constituency", "c="],
+    ["Named Entity", "ne=" , "Combined"],
+    ["Named Entity", "ne_dewac_175m_600=" , "ne_dewac_175m_600"],
+    ["Named Entity", "ne_hgc_175m_600=",    "ne_hgc_175m_600"],
+    ["Part-of-Speech", "p="]
+  ];
+
+  ah["corenlp/ne="] = namedEntities;
+  ah["corenlp/ne_dewac_175m_600="] = namedEntities;
+  ah["corenlp/ne_hgc_175m_600="] = namedEntities;
+  ah["corenlp/p="] = sttsArray;
+  ah["corenlp/c="] = negraNodes;
+
+  for (var i in negraNodes) {
+    ah["corenlp/c=" + negraNodes[i][0] + '-'] = negraEdges;
+  };
+});
diff --git a/dev/js/src/hint/foundries/dereko.js b/dev/js/src/hint/foundries/dereko.js
new file mode 100644
index 0000000..c8afe08
--- /dev/null
+++ b/dev/js/src/hint/foundries/dereko.js
@@ -0,0 +1,5 @@
+var ah = KorAP.annotationHelper = KorAP.annotationHelper || { "-" : [] };
+
+ah["-"].push(
+  ["DeReKo", "dereko/s=", "Structure"]
+);
diff --git a/dev/js/src/hint/foundries/drukola.js b/dev/js/src/hint/foundries/drukola.js
new file mode 100644
index 0000000..2fec26d
--- /dev/null
+++ b/dev/js/src/hint/foundries/drukola.js
@@ -0,0 +1,105 @@
+var ah = KorAP.annotationHelper = KorAP.annotationHelper || { "-" : [] };
+
+ah["-"].push(
+  ["DRuKoLa", "drukola/", "Lemma, Morphology, Part-of-Speech"]
+);
+
+ah["drukola/"] = [
+  ["Lemma", "l="],
+  ["Morphology", "m="],
+  ["Part-of-Speech", "p="]      
+];
+
+ah["drukola/m="] =  [
+  ["CTAG", "ctag:"]
+];
+
+ah["drukola/m=ctag:"] = [
+  ["A","A ","Adjective"],
+  ["Y","Y ","Abbreviation"],
+  ["AN","AN ","Adjective, Indefinite"],
+  ["APRY","APRY ","Adjective, Plural, Direct, Definite"],
+  ["APN","APN ","Adjective, Plural, Indefinite"],
+  ["APOY","APOY ","Adjective, Plural, Oblique, Definite"],
+  ["APON","APON ","Adjective, Plural, Oblique, Indefinite"],
+  ["ASRY","ASRY ","Adjective, Singular, Direct, Definite"],
+  ["ASN","ASN ","Adjective, Singular, Indefinite"],
+  ["ASOY","ASOY ","Adjective, Singular, Oblique, Definite"],
+  ["ASON","ASON ","Adjective, Singular, Oblique, Indefinite"],
+  ["ASVY","ASVY ","Adjective, Singular, Vocative, Definite"],
+  ["ASVN","ASVN ","Adjective, Singular, Vocative, Indefinite"],
+  ["R","R ","Adverb"],
+  ["RC","RC ","Adverb, Portmanteau"],
+  ["TS","TS ","Article, Definite or Possessive, Singular"],
+  ["TP","TP ","Article, Indefinite or Possessive, Plural"],
+  ["TPR","TPR ","Article, non-Possessive, Plural, Direct"],
+  ["TPO","TPO ","Article, non-Possessive, Plural, Oblique"],
+  ["TSR","TSR ","Article, non-Possessive, Singular, Direct"],
+  ["TSO","TSO ","Article, non-Possessive, Singular, Oblique"],
+  ["NPRY","NPRY ","Common Noun, Plural, Direct, Definite"],
+  ["NPN","NPN ","Common Noun, Plural, Indefinite"],
+  ["NPOY","NPOY ","Common Noun, Plural, Oblique, Definite"],
+  ["NPVY","NPVY ","Common Noun, Plural, Vocative, Definite"],
+  ["NN","NN ","Common Noun, singular"],
+  ["NSY","NSY ","Common Noun, Singular, Definite"],
+  ["NSRY","NSRY ","Common Noun, Singular, Direct, Definite"],
+  ["NSRN","NSRN ","Common Noun, Singular, Direct, Indefinite"],
+  ["NSN","NSN ","Common Noun, Singular, Indefinite"],
+  ["NSOY","NSOY ","Common Noun, Singular, Oblique, Definite"],
+  ["NSON","NSON ","Common Noun, Singular, Oblique, Indefinite"],
+  ["NSVY","NSVY ","Common Noun, Singular, Vocative, Definite"],
+  ["NSVN","NSVN ","Common Noun, Singular, Vocative, Indefinite"],
+  ["CR","CR ","Conjunctio, portmanteau"],
+  ["C","C ","Conjunction"],
+  ["QF","QF ","Future Particle"],
+  ["QN","QN ","Infinitival Particle"],
+  ["I","I ","Interjection"],
+  ["QZ","QZ ","Negative Particle"],
+  ["M","M ","Numeral"],
+  ["PP","PP ","Personal Pronoun"],
+  ["PPP","PPP ","Personal Pronoun, Plural"],
+  ["PPPA","PPPA ","Personal Pronoun, Plural, Acc."],
+  ["PPPD","PPPD ","Personal Pronoun, Plural, Dative"],
+  ["PPPR","PPPR ","Personal Pronoun, Plural, Direct"],
+  ["PPPO","PPPO ","Personal Pronoun, Plural, Oblique"],
+  ["PPS","PPS ","Personal Pronoun, Singular"],
+  ["PPSA","PPSA ","Personal Pronoun, Singular, Accusative"],
+  ["PPSD","PPSD ","Personal Pronoun, Singular, Dative"],
+  ["PPSR","PPSR ","Personal Pronoun, Singular, Direct"],
+  ["PPSN","PPSN ","Personal Pronoun, Singular, Nominative"],
+  ["PPSO","PPSO ","Personal Pronoun, Singular, Oblique"],
+  ["S","S ","Preposition"],
+  ["DMPR","DMPR ","Pronoun or Determiner, Demonstrative, Plural, Direct"],
+  ["DMPO","DMPO ","Pronoun or Determiner, Demonstrative, Plural, Oblique"],
+  ["DMSR","DMSR ","Pronoun or Determiner, Demonstrative, Singular, Direct"],
+  ["DMSO","DMSO ","Pronoun or Determiner, Demonstrative, Singular, Oblique"],
+  ["PS","PS ","Pronoun or Determiner, Poss or Emph"],
+  ["PSS","PSS ","Pronoun or Determiner, Poss or Emph, Singular"],
+  ["RELR","RELR ","Pronoun or Determiner, Relative, Direct"],
+  ["RELO","RELO ","Pronoun or Determiner, Relative, Oblique"],
+  ["NP","NP ","Proper Noun"],
+  ["PI","PI ","Quantifier Pronoun or Determiner"],
+  ["PXA","PXA ","Reflexive Pronoun, Accusative"],
+  ["PXD","PXD ","Reflexive Pronoun, Dative"],
+  ["X","X ","Residual"],
+  ["QS","QS ","Subjunctive Particle"],
+  ["VA","VA ","Verb, Auxiliary"],
+  ["VA1","VA1 ","Verb, Auxiliary, 1st person"],
+  ["VA2P","VA2P ","Verb, Auxiliary, 2nd person, Plural"],
+  ["VA2S","VA2S ","Verb, Auxiliary, 2nd person, Singular"],
+  ["VA3","VA3 ","Verb, Auxiliary, 3rd person"],
+  ["VA3P","VA3P ","Verb, Auxiliary, 3rd person, Plural"],
+  ["VA3S","VA3S ","Verb, Auxiliary, 3rd person, Singular"],
+  ["VA1P","VA1P ","Verb, Auxiliary,1st person, Plural"],
+  ["VA1S","VA1S ","Verb, Auxiliary,1st person, Singular"],
+  ["VG","VG ","Verb, Gerund"],
+  ["VN","VN ","Verb, Infinitive"],
+  ["V1","V1 ","Verb, Main, 1st person"],
+  ["V2","V2 ","Verb, Main, 2nd person"],
+  ["V3","V3 ","Verb, Main, 3rd person"],
+  ["VPPF","VPPF ","Verb, Participle, Plural, Feminine"],
+  ["VPPM","VPPM ","Verb, Participle, Plural, Masculine"],
+  ["VPSF","VPSF ","Verb, Participle, Singular, Feminine"],
+  ["VPSM","VPSM ","Verb, Participle, Singular, Masculine"]
+];
+
diff --git a/dev/js/src/hint/foundries/malt.js b/dev/js/src/hint/foundries/malt.js
new file mode 100644
index 0000000..c81df9e
--- /dev/null
+++ b/dev/js/src/hint/foundries/malt.js
@@ -0,0 +1,47 @@
+var ah = KorAP.annotationHelper = KorAP.annotationHelper || { "-" : [] };
+
+ah["-"].push(
+  ["Malt", "malt/", "Dependency"]
+);
+
+ah["malt/"] = [
+  ["Dependency", "d="]
+];
+
+ah["malt/d="] = [
+  ["-PUNCT-", "-PUNCT- "],
+  ["-UNKNOWN-","-UNKNOWN- "],
+  ["ADV","ADV "],
+  ["APP","APP "],
+  ["ATTR","ATTR "],
+  ["AUX","AUX "],
+  ["AVZ","AVZ "],
+  ["CJ","CJ "],
+  ["DET","DET "],
+  ["EXPL","EXPL "],
+  ["GMOD","GMOD "],
+  ["GRAD","GRAD "],
+  ["KOM","KOM "],
+  ["KON","KON "],
+  ["KONJ","KONJ "],
+  ["NEB","NEB "],
+  ["OBJA","OBJA "],
+  ["OBJC","OBJC "],
+  ["OBJD","OBJD "],
+  ["OBJG","OBJG "],
+  ["OBJI","OBJI "],
+  ["OBJP","OBJP "],
+  ["PAR","PAR "],
+  ["PART","PART "],
+  ["PN","PN "],
+  ["PP","PP "],
+  ["PRED","PRED "],
+  ["REL","REL "],
+  ["ROOT","ROOT "],
+  ["S","S "],
+  ["SUBJ","SUBJ "],
+  ["SUBJC","SUBJC "],
+  ["ZEIT","ZEIT "],
+  ["gmod-app","gmod-app "],
+  ["koord","koord "]
+];
diff --git a/dev/js/src/hint/foundries/marmot.js b/dev/js/src/hint/foundries/marmot.js
new file mode 100644
index 0000000..0b80292
--- /dev/null
+++ b/dev/js/src/hint/foundries/marmot.js
@@ -0,0 +1,69 @@
+require(["hint/foundries/stts"], function () {
+  var ah = KorAP.annotationHelper = KorAP.annotationHelper || { "-" : [] };
+
+  ah["-"].push(
+    ["MarMoT", "marmot/", "Morphology, Part-of-Speech"]
+  );
+
+  ah["marmot/"] = [
+    ["Morphology", "m="],
+    ["Part-of-Speech", "p="]
+  ];
+
+  ah["marmot/p="] = sttsArray;
+
+  ah["marmot/m="] = [
+    ["Case", "case:"],
+    ["Degree", "degree:"],
+    ["Gender", "gender:"],
+    ["Mood", "mood:"],
+    ["Number", "number:"],
+    ["Person", "person:"],
+    ["Tense","tense:"],
+    ["No type", "<no-type> "]
+  ];
+
+  ah["marmot/m=case:"] = [
+    ["acc", "acc ", "Accusative"],
+    ["dat","dat ", "Dative"],
+    ["gen", "gen ","Genitive"],
+    ["nom","nom ", "Nominative"],
+    ["*","* ", "Undefined"]
+  ];
+
+  ah["marmot/m=degree:"] = [
+    ["comp","comp ", "Comparative"],
+    ["pos","pos ", "Positive"],
+    ["sup","sup ", "Superative"]
+  ];
+  
+  ah["marmot/m=gender:"] = [
+    ["fem", "fem ", "Feminium"],
+    ["masc", "masc ", "Masculinum"],
+    ["neut","neut ", "Neuter"],
+    ["*","* ","Undefined"]
+  ];
+
+  ah["marmot/m=mood:"] = [
+    ["imp","imp ", "Imperative"],
+    ["ind","ind ", "Indicative"],
+    ["subj","subj ", "Subjunctive"]
+  ];
+
+  ah["marmot/m=number"] = [
+    ["pl","pl ","Plural"],
+    ["sg","sg ","Singular"],
+    ["*","* ","Undefined"]
+  ];
+
+  ah["marmot/m=person:"] = [
+    ["1","1 ", "First Person"],
+    ["2","2 ", "Second Person"],
+    ["3","3 ", "Third Person"]
+  ];
+
+  ah["marmot/m=tense:"] = [
+    ["past","past ", "Past"],
+    ["pres","pres ", "Present"]
+  ];
+});
diff --git a/dev/js/src/hint/foundries/mate.js b/dev/js/src/hint/foundries/mate.js
new file mode 100644
index 0000000..d837fd7
--- /dev/null
+++ b/dev/js/src/hint/foundries/mate.js
@@ -0,0 +1,76 @@
+require(["hint/foundries/stts"], function (sttsArray) {
+  var mateSttsArray = sttsArray.slice(0);
+  mateSttsArray.push(
+    ["<root-POS>","<root-POS>","Root Part of Speech"]
+  );
+
+  var ah = KorAP.annotationHelper = KorAP.annotationHelper || { "-" : [] };
+
+  ah["-"].push(
+    ["Mate", "mate/", "Lemma, Morphology, Part-of-Speech"]
+  );
+
+  ah["mate/"] = [
+    // Inactive: "d" : ["d=", "Dependency"],
+    ["Lemma", "l="],
+    ["Morphology", "m="],
+    ["Part-of-Speech", "p="]
+  ];
+
+  // Inactive: mate/d=
+  ah["mate/p="] = mateSttsArray;
+
+  ah["mate/m="] = [
+    ["Case", "case:"],
+    ["Degree", "degree:"],
+    ["Gender", "gender:"],
+    ["Mood", "mood:"],
+    ["Number", "number:"],
+    ["Person", "person:"],
+    ["Tense","tense:"],
+    ["No type", "<no-type> "]
+  ];
+
+  ah["mate/m=case:"] = [
+    ["acc", "acc ", "Accusative"],
+    ["dat","dat ", "Dative"],
+    ["gen", "gen ","Genitive"],
+    ["nom","nom ", "Nominative"],
+    ["*","* ", "Undefined"]
+  ];
+
+  ah["mate/m=degree:"] = [
+    ["comp","comp ", "Comparative"],
+    ["pos","pos ", "Positive"],
+    ["sup","sup ", "Superative"]
+  ];
+
+  ah["mate/m=gender:"] = [
+    ["fem", "fem ", "Feminium"],
+    ["masc", "masc ", "Masculinum"],
+    ["neut","neut ", "Neuter"],
+    ["*","* ","Undefined"]
+  ];
+
+  ah["mate/m=mood:"] = [
+    ["imp","imp ", "Imperative"],
+    ["ind","ind ", "Indicative"],
+    ["subj","subj ", "Subjunctive"]
+  ];
+
+  ah["mate/m=number:"] = [
+    ["pl","pl ","Plural"],
+    ["sg","sg ","Singular"],
+    ["*","* ","Undefined"]
+  ];
+
+  ah["mate/m=person:"] = [
+    ["1","1 ", "First Person"],
+    ["2","2 ", "Second Person"],
+    ["3","3 ", "Third Person"]
+  ];
+  ah["mate/m=tense:"] = [
+    ["past","past ", "Past"],
+    ["pres","pres ", "Present"]
+  ];
+});
diff --git a/dev/js/src/hint/foundries/opennlp.js b/dev/js/src/hint/foundries/opennlp.js
new file mode 100644
index 0000000..267bf8d
--- /dev/null
+++ b/dev/js/src/hint/foundries/opennlp.js
@@ -0,0 +1,14 @@
+require(["hint/foundries/stts"], function (sttsArray) {
+  
+  var ah = KorAP.annotationHelper = KorAP.annotationHelper || { "-" : [] };
+
+  ah["-"].push(
+    ["OpenNLP", "opennlp/", "Part-of-Speech"]
+  );
+
+  ah["opennlp/"] = [
+    ["Part-of-Speech", "p="]
+  ];
+
+  ah["opennlp/p="] = sttsArray;
+});
diff --git a/dev/js/src/hint/foundries/schreibgebrauch.js b/dev/js/src/hint/foundries/schreibgebrauch.js
new file mode 100644
index 0000000..7cce57e
--- /dev/null
+++ b/dev/js/src/hint/foundries/schreibgebrauch.js
@@ -0,0 +1,48 @@
+require(["hint/foundries/stts"], function (sttsArray) {
+  var ah = KorAP.annotationHelper = KorAP.annotationHelper || { "-" : [] };
+
+  var sgbrSttsArray = sttsArray.slice(0);
+
+  // Push specific information for Schreibgebrauch
+  sgbrSttsArray.push(
+    ["NNE", "NNE", "Normal Nomina with Named Entity"],
+    ["ADVART","ADVART",   "Adverb with Article"],
+    ["EMOASC","EMOASC",   "ASCII emoticon"],
+    ["EMOIMG","EMOIMG",   "Graphic emoticon"],
+    ["ERRTOK","ERRTOK",   "Tokenisation Error"],
+    ["HST",     "HST",      "Hashtag"],
+    ["KOUSPPER","KOUSPPER", "Subordinating Conjunction (with Sentence) with Personal Pronoun"],
+    ["ONO",     "ONO",      "Onomatopoeia"],
+    ["PPERPPER","PPERPPER", "Personal Pronoun with Personal Pronoun"],
+    ["URL",     "URL",      "Uniform Resource Locator"],
+    ["VAPPER",  "VAPPER",   "Finite Auxiliary Verb with Personal Pronoun"],
+    ["VMPPER",  "VMPPER",   "Fintite Modal Verb with Personal Pronoun"],
+    ["VVPPER",  "VVPPER",   "Finite Full Verb with Personal Pronoun"],
+    ["AW", "AW", "Interaction Word"],
+    ["ADR", "ADR", "Addressing Term"],
+    ["AWIND", "AWIND", "Punctuation Indicating Addressing Term"],
+    ["ERRAW","ERRAW", "Part of Erroneously Separated Compound"]
+    /*
+      As KorAP currently doesn't support these tags, they could also be ommited
+      ["_KOMMA", "_KOMMA", "Comma"],
+      ["_SONST", "_SONST", "Intrasentential Punctuation Mark"],
+      ["_ENDE", "_ENDE", "Punctuation Mark at the end of the Sentence"]
+    */
+  );
+
+  // Sort by tag
+  sgbrSttsArray.sort(function (a,b) { return a[0].localeCompare(b[0]) });
+
+  
+  ah["-"].push(
+    ["Schreibgebrauch", "sgbr/", "Lemma, Lemma Variants, Part-of-Speech"]
+  );
+
+  ah["sgbr/"] = [
+    ["Lemma", "l="],
+    ["Lemma Variants", "lv="],
+    ["Part-of-Speech", "p="]
+  ];
+
+  ah["sgbr/p="] = sgbrSttsArray;
+});
diff --git a/dev/js/src/hint/foundries/stts.js b/dev/js/src/hint/foundries/stts.js
new file mode 100644
index 0000000..f7d3b62
--- /dev/null
+++ b/dev/js/src/hint/foundries/stts.js
@@ -0,0 +1,59 @@
+define(function () {
+  return [
+    // http://www.ids-mannheim.de/cosmas2/projekt/referenz/stts/morph.html
+    // http://nachhalt.sfb632.uni-potsdam.de/owl-docu/stts.html
+    // "$.", "$(", "$,"
+    ["ADJA","ADJA ", "Attributive Adjective"],
+    ["ADJD","ADJD ", "Predicative Adjective"],
+    ["ADV","ADV ", "Adverb"],
+    ["APPO","APPO ", "Postposition"],
+    ["APPR","APPR ", "Preposition"],
+    ["APPRART","APPRART ", "Preposition with Determiner"],
+    ["APZR","APZR ","Right Circumposition"],
+    ["ART","ART ", "Determiner"],
+    ["CARD","CARD ", "Cardinal Number"],
+    ["FM","FM ", "Foreign Material"],
+    ["ITJ","ITJ ", "Interjection"],
+    ["KOKOM","KOKOM ", "Comparison Particle"],
+    ["KON","KON ", "Coordinating Conjuncion"],
+    ["KOUI","KOUI ", "Subordinating Conjunction with 'zu'"],
+    ["KOUS","KOUS ", "Subordinating Conjunction with Sentence"],
+    ["NE","NE ", "Named Entity"],
+    ["NN","NN ", "Normal Nomina"],
+    ["PAV", "PAV ", "Pronominal Adverb"],
+    ["PDAT","PDAT ","Attributive Demonstrative Pronoun"],
+    ["PDS","PDS ", "Substitutive Demonstrative Pronoun"],
+    ["PIAT","PIAT ", "Attributive Indefinite Pronoun without Determiner"],
+    ["PIDAT","PIDAT ", "Attributive Indefinite Pronoun with Determiner"],
+    ["PIS","PIS ", "Substitutive Indefinite Pronoun"],
+    ["PPER","PPER ", "Personal Pronoun"],
+    ["PPOSAT","PPOSAT ", "Attributive Possessive Pronoun"],
+    ["PPOSS","PPOSS ", "Substitutive Possessive Pronoun"],
+    ["PRELAT","PRELAT ", "Attributive Relative Pronoun"],
+    ["PRELS","PRELS ", "Substitutive Relative Pronoun"],
+    ["PRF","PRF ", "Reflexive Pronoun"],
+    ["PROAV","PROAV ", "Pronominal Adverb"],
+    ["PTKA","PTKA ","Particle with Adjective"],
+    ["PTKANT","PTKANT ", "Answering Particle"],
+    ["PTKNEG","PTKNEG ", "Negation Particle"],
+    ["PTKVZ","PTKVZ ", "Separated Verbal Particle"],
+    ["PTKZU","PTKZU ", "'zu' Particle"],
+    ["PWAT","PWAT ", "Attributive Interrogative Pronoun"],
+    ["PWAV","PWAV ", "Adverbial Interrogative Pronoun"],
+    ["PWS","PWS ", "Substitutive Interrogative Pronoun"],
+    ["TRUNC","TRUNC ","Truncated"],
+    ["VAFIN","VAFIN ", "Auxiliary Finite Verb"],
+    ["VAIMP","VAIMP ", "Auxiliary Finite Imperative Verb"],
+    ["VAINF","VAINF ", "Auxiliary Infinite Verb"],
+    ["VAPP","VAPP ", "Auxiliary Perfect Participle"],
+    ["VMFIN","VMFIN ", "Modal Finite Verb"],
+    ["VMINF","VMINF ", "Modal Infinite Verb"],
+    ["VMPP","VMPP ", "Modal Perfect Participle"],
+    ["VVFIN","VVFIN ","Finite Verb"],
+    ["VVIMP","VVIMP ", "Finite Imperative Verb"],
+    ["VVINF","VVINF ", "Infinite Verb"],
+    ["VVIZU","VVIZU ", "Infinite Verb with 'zu'"],
+    ["VVPP","VVPP ", "Perfect Participle"],
+    ["XY", "XY ", "Non-Word"]
+  ];
+});
diff --git a/dev/js/src/hint/foundries/treetagger.js b/dev/js/src/hint/foundries/treetagger.js
new file mode 100644
index 0000000..35fcfcc
--- /dev/null
+++ b/dev/js/src/hint/foundries/treetagger.js
@@ -0,0 +1,14 @@
+require(["hint/foundries/stts"], function (sttsArray) {
+  var ah = KorAP.annotationHelper = KorAP.annotationHelper || { "-" : [] };
+
+  ah["-"].push(
+    ["TreeTagger", "tt/", "Lemma, Part-of-Speech"]
+  );
+
+  ah["tt/"] = [
+    ["Lemma", "l="],
+    ["Part-of-Speech", "p="]
+  ];
+
+  ah["tt/p="] = sttsArray;
+});
diff --git a/dev/js/src/hint/foundries/xip.js b/dev/js/src/hint/foundries/xip.js
new file mode 100644
index 0000000..cd9fc8a
--- /dev/null
+++ b/dev/js/src/hint/foundries/xip.js
@@ -0,0 +1,12 @@
+var ah = KorAP.annotationHelper = KorAP.annotationHelper || { "-" : [] };
+
+ah["-"].push(
+  ["Xerox Parser", "xip/", "Constituency, Lemma, Part-of-Speech"]
+);
+
+ah["xip/"] = [
+  ["Constituency", "c="],
+  // Inactive: ["Dependency", "d="],
+  ["Lemma", "l="],
+  ["Part-of-Speech", "p="]
+];
diff --git a/dev/js/src/init.js b/dev/js/src/init.js
index 6eee4f8..fdc2fab 100644
--- a/dev/js/src/init.js
+++ b/dev/js/src/init.js
@@ -16,7 +16,6 @@
   'vc',
   'tutorial',
   'lib/domReady',
-  'hint/array',
   'vc/array',
   'lib/alertify',
   'session',
@@ -31,16 +30,12 @@
              vcClass,
              tutClass,
              domReady,
-             hintArray,
              vcArray,
              alertifyClass,
              sessionClass,
              tagger,
              selectMenuClass) {
 
-  // Set hint array for hint helper
-  KorAP.hintArray = hintArray;
-
   // Localization values
   var loc = KorAP.Locale;
   loc.VC_allCorpora    = loc.VC_allCorpora    || 'all corpora';
diff --git a/dev/js/src/menu.js b/dev/js/src/menu.js
index e575b7e..d7ec89f 100644
--- a/dev/js/src/menu.js
+++ b/dev/js/src/menu.js
@@ -4,7 +4,6 @@
  * @author Nils Diewald
  */
 /*
- * TODO: space is not a valid prefix!
  * TODO: Show the slider briefly on move (whenever screen is called).
  * TODO: Ignore alt+ and strg+ key strokes.
  * TODO: Should scroll to a chosen value after prefixing, if the chosen value is live
@@ -13,6 +12,7 @@
  *       or anytime items would be outside the screen.
  * TODO: Add a .match() method to items for scrolling and probably for prefixing.
  * TODO: Add static header (for title, sortation fields, but also for menu points like "fragments" and "history".
+ * TODO: Support space separated list of prefixes so "co no" will highlight "common noun"
  */
 define([
   'menu/item',
@@ -181,18 +181,44 @@
        * There is a prefix set, so filter the list!
        */
       var pos;
-      var prefix = " " + this.prefix().toLowerCase();
+      var prefixList = this.prefix().toLowerCase().split(" ");
+
+      var items = [];
+      var maxPoints = 1; // minimum 1
 
       // Iterate over all items and choose preferred matching items
       // i.e. the matching happens at the word start
       for (pos = 0; pos < this._items.length; pos++) {
-        if ((this.item(pos).lcField().indexOf(prefix)) >= 0)
+
+        var points = 0;
+
+        for (pref = 0; pref < prefixList.length; pref++) {
+          var prefix = " " + prefixList[pref];
+
+          // Check if it matches at the beginning
+          if ((this.item(pos).lcField().indexOf(prefix)) >= 0) {
+            points += 5;
+          }
+
+          // Check if it matches anywhere
+          else if ((this.item(pos).lcField().indexOf(prefix.substring(1))) >= 0) {
+            points += 1;
+          };
+        };
+
+        if (points > maxPoints) {
+          this._list = [pos];
+          maxPoints = points;
+        }
+        else if (points == maxPoints) {
           this._list.push(pos);
+        }
       };
 
       // The list is empty - so lower your expectations
       // Iterate over all items and choose matching items
       // i.e. the matching happens anywhere in the word
+      /*
       prefix = prefix.substring(1);
       if (this._list.length == 0) {
         for (pos = 0; pos < this._items.length; pos++) {
@@ -200,6 +226,7 @@
             this._list.push(pos);
         };
       };
+      */
 
       this._slider.length(this._list.length).reInit();
 
diff --git a/dev/js/src/menu/item.js b/dev/js/src/menu/item.js
index 3f955be..812a398 100644
--- a/dev/js/src/menu/item.js
+++ b/dev/js/src/menu/item.js
@@ -5,6 +5,8 @@
  * further: action happen on right arrow
  */
 
+"use strict";
+
 /**
  * Item in the Dropdown menu
  */
@@ -153,13 +155,13 @@
     for (var i = marks.length - 1; i >= 0; i--) {
       // Create text node clone
       var x = document.createTextNode(
-	marks[i].firstChild.nodeValue
+	      marks[i].firstChild.nodeValue
       );
       
       // Replace with content
       marks[i].parentNode.replaceChild(
-	x,
-	marks[i]
+	      x,
+	      marks[i]
       );
     };
 
@@ -169,48 +171,82 @@
   },
 
   // Highlight a certain substring of the menu item
-  _highlight : function (elem, prefix) {
+  _highlight : function (elem, prefixString) {    
     if (elem.nodeType === 3) {
       
       var text   = elem.nodeValue;
       var textlc = text.toLowerCase();
-      var pos    = textlc.indexOf(prefix);
-      if (pos >= 0) {
+
+      // Split prefixes
+      if (prefixString) {
+
+        // ND:
+        //   Doing this in a single line can trigger
+        //   a deep-recursion in Firefox 57.01, though I don't know why.
+        prefixString = prefixString.trim();
+        var prefixes = prefixString.split(" ");
+
+        var prefix;
+        var testPos;
+        var pos = -1;
+        var len = 0;
+
+        // Iterate over all prefixes and get the best one
+        for (var i = 0; i < prefixes.length; i++) {
+
+          // Get first pos of a matching prefix
+          testPos = textlc.indexOf(prefixes[i]);
+          if (testPos < 0)
+            continue;
+
+          if (pos === -1 || testPos < pos) {
+            pos = testPos;
+            len = prefixes[i].length;
+          }
+          else if (testPos === pos && prefixes[i].length > len) {
+            len = prefixes[i].length;
+          };
+        };
+
+        // Matches!
+        if (pos >= 0) {
 	
-	// First element
-	if (pos > 0) {
-	  elem.parentNode.insertBefore(
-	    document.createTextNode(text.substr(0, pos)),
-	    elem
-	  );
-	};
+	        // First element
+	        if (pos > 0) {
+	          elem.parentNode.insertBefore(
+	            document.createTextNode(text.substr(0, pos)),
+	            elem
+	          );
+	        };
 	
-	// Second element
-	var hl = document.createElement("mark");
-	hl.appendChild(
-	  document.createTextNode(text.substr(pos, prefix.length))
-	);
-	elem.parentNode.insertBefore(hl, elem);
+	        // Second element
+	        var hl = document.createElement("mark");
+	        hl.appendChild(
+	          document.createTextNode(text.substr(pos, len))
+	        );
+	        elem.parentNode.insertBefore(hl, elem);
 	
-	// Third element
-	var third = text.substr(pos + prefix.length);
-	if (third.length > 0) {
-	  var thirdE = document.createTextNode(third);
-	  elem.parentNode.insertBefore(
-	    thirdE,
-	    elem
-	  );
-	  this._highlight(thirdE, prefix);
-	};
+	        // Third element
+	        var third = text.substr(pos + len);
+
+	        if (third.length > 0) {
+	          var thirdE = document.createTextNode(third);
+	          elem.parentNode.insertBefore(
+	            thirdE,
+	            elem
+	          );
+	          this._highlight(thirdE, prefixString);
+	        };
 	
-	var p = elem.parentNode;
-	p.removeChild(elem);
+	        var p = elem.parentNode;
+	        p.removeChild(elem);
+        };
       };
     }
     else {
       var children = elem.childNodes;
       for (var i = children.length -1; i >= 0; i--) {
-	this._highlight(children[i], prefix);
+	      this._highlight(children[i], prefixString);
       };
     };
   },
diff --git a/dev/js/src/menu/prefix.js b/dev/js/src/menu/prefix.js
index abcf66c..90924c9 100644
--- a/dev/js/src/menu/prefix.js
+++ b/dev/js/src/menu/prefix.js
@@ -107,7 +107,7 @@
     // Prefix is long enough for backspace
     if (this._string.length > 1) {
       this._string = this._string.substring(
-	0, this._string.length - 1
+	      0, this._string.length - 1
       );
     }
     else {
