diff --git a/Gruntfile.js b/Gruntfile.js
index 106e241..e3601bd 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -18,17 +18,13 @@
 
 module.exports = function(grunt) {
   var config;
-  var includeFile = 'default';
-  if (grunt.file.exists('kalamar.conf.js')) {
-    includeFile = 'root/kalamar.conf';
-  };
 
   // Generate requireJS files for l10n
   var reqTasks = [];
   var uglyFiles = {
     'public/js/korap-plugin-<%= pkg.pluginVersion %>.js': ['dev/js/src/plugin/client.js']
   };
-  
+
   for (var i in {'en' : 0, 'de' : 1}) {
 
     reqTasks.push({
@@ -43,7 +39,7 @@
         wrap: true,
         // dir : 'public/js',
         name: 'lib/almond',
-        include : [includeFile, "app/" + i],
+        include : ["app/" + i],
         out: 'public/js/kalamar-<%= pkg.version %>-' + i + '.js'
       }
     });
@@ -115,6 +111,44 @@
       },
       main: {
 	      files:[
+            {
+            expand: true,
+            src: 'kalamar.conf.js',
+            dest:'public/js/hintc/',
+            filter: 'isFile',
+            timestamp: true
+          },
+          {
+            expand: true,
+            cwd: 'dev/js/src/',
+            src: ['default.js','util.js'],
+            dest:'public/js/hintc/',
+            filter: 'isFile',
+            timestamp: true
+          },
+          {
+            expand: true,
+            cwd: 'dev/js/lib/',
+            src: 'require.js',
+            dest:'public/js/hintc/',
+            filter: 'isFile',
+            timestamp: true
+          },
+          {
+            expand: true,
+            cwd: 'dev/js/src/hint/foundries',
+            src: '**',
+            dest:'public/js/hintc/hint/foundries',
+            timestamp: true
+          },
+          {
+            expand: true,
+            cwd: 'dev/js/src/hint/',
+            src: 'foundries.js',
+            dest:'public/js/hintc/hint',
+            filter: 'isFile',
+            timestamp: true
+          },
 	        {
 	          expand: true,
 	          cwd: 'dev/font/',
diff --git a/dev/js/src/hint.js b/dev/js/src/hint.js
index e700b94..ee5e344 100644
--- a/dev/js/src/hint.js
+++ b/dev/js/src/hint.js
@@ -25,11 +25,15 @@
   'hint/contextanalyzer',
   'hint/alert',
   'util'
-], function (inputClass, 
+], function (inputClass,
              menuClass,
              analyzerClass,
              alertClass) {
 
+  //needed for localization
+  const loc   = KorAP.Locale;
+  loc.HINT_noAnnot =  loc.HINT_noAnnot || 'The assistant can not be displayed.';
+
   // Initialize hint array
 
   /**
@@ -266,10 +270,13 @@
      * @param {boolean} Boolean value to indicate if context
      *        is necessary (true) or if the main context should
      *        be shown if context fails.
-     *        
+     *
      */
     show : function (ifContext) {
-
+      if(KorAP.annotationHelper["-"].length == 0){
+        this.alert(0,loc.HINT_noAnnot);
+        return;
+      }
       // Remove the active object
       this._unshow();
       
diff --git a/dev/js/src/init.js b/dev/js/src/init.js
index 1e9a805..24c2348 100644
--- a/dev/js/src/init.js
+++ b/dev/js/src/init.js
@@ -15,6 +15,7 @@
  * - obj.alignment() // toggle
  */
 
+
 "use strict";
 define([
   'match',
@@ -95,21 +96,46 @@
     gt.addEventListener('click', function(){
       tourClass.gTstartSearch().start();
     });
-    
+
     KorAP.tourshowR = function(){
       tourClass.gTshowResults().start();
     };
   };
 
+
+  addHintM = function(scripte, file){
+    KorAP.annotationHelper = KorAP.annotationHelper || { '-' : [] };
+    let scriptEl = scripte;
+    scriptEl.setAttribute("type", "text/javascript");
+    scriptEl.setAttribute("async", "async");
+    scriptEl.setAttribute("defer", "defer");
+    scriptEl.setAttribute("src", "require.js");
+    scriptEl.setAttribute("data-main", file);
+    document.getElementsByTagName("head")[0].appendChild(scriptEl);
+  };
+
   domReady(function (event) {
-      
+
     var obj = {};
 
     // What should be visible in the beginning?
     var show = KorAP.session.get('show') || {};
-    
+
     KorAP.Panel = KorAP.Panel || {}
 
+    var scriptElement =document.createElement("script")
+    fetch("kalamar.conf.js", { method: "HEAD" })
+      .then(response => {
+         if (response.ok) {
+          addHintM(scriptElement, "kalamar.conf.js");
+         } else {
+          addHintM(scriptElement, "default.js");
+         }
+     })
+     .catch(error => {
+         KorAP.log(0, "No kalamar.conf.js or default.js file");
+      });
+
     /**
      * Release notifications
      */
@@ -270,9 +296,8 @@
       sb.insertBefore(resultPanel.element(), sb.firstChild);
     };
 
-    
     // There is a koralQuery
-    if (KorAP.koralQuery !== undefined) {    
+    if (KorAP.koralQuery !== undefined) {
 
       // Add KoralQuery view to result panel
       if (resultInfo !== null) {
@@ -406,13 +431,12 @@
         d.getElementById('qsubmit').classList.add("loading");
       });
     };
- 
-    
+
     //Starts the guided tour at the next page
     if(KorAP.session.get("tour")){
       tourClass.gTshowResults().start();
     }
-    
+
     /**
      * Init hint helper
      * has to be final because of
@@ -420,13 +444,12 @@
      */
     // Todo: Pass an element, so this works with
     // tutorial pages as well!
+    scriptElement.onload = function(){
     if (obj.hint === undefined)
       obj.hint = hintClass.create();
-
-    // Add the hinthelper to the KorAP object to make it manipulatable globally
-    KorAP.Hint = obj.hint;
-
-
+      // Add the hinthelper to the KorAP object to make it manipulatable globally
+      KorAP.Hint = obj.hint;
+    };
     /**
      * Add query panel
      */
diff --git a/dev/js/src/loc/de.js b/dev/js/src/loc/de.js
index c5f83cc..d01479b 100644
--- a/dev/js/src/loc/de.js
+++ b/dev/js/src/loc/de.js
@@ -103,5 +103,6 @@
 
   // Pagination panel
   loc.RANDOM_PAGE = 'Zufallsseite';
-
+  
+  loc.HINT_noAnnot = 'Der Assistent kann nicht angezeigt werden.';
 });
diff --git a/lib/Kalamar.pm b/lib/Kalamar.pm
index f79c77c..bd117ae 100644
--- a/lib/Kalamar.pm
+++ b/lib/Kalamar.pm
@@ -202,6 +202,10 @@
     push @{$self->static->paths}, 'dev';
   };
 
+
+  # Add another "public" directory
+  push @{$self->static->paths}, 'public/js/hintc';
+
   # Set proxy timeouts
   if ($conf->{proxy_inactivity_timeout}) {
     $self->ua->inactivity_timeout($conf->{proxy_inactivity_timeout});
