diff --git a/Changes b/Changes
index d89f27e..b0efd68 100755
--- a/Changes
+++ b/Changes
@@ -1,3 +1,7 @@
+0.16 2015-06-18
+        - Update to new KoralQuery API.
+	- Introduced new notifications engine.
+
 0.15 2015-05-21
         - Cleanup for GitHub release
 	- First realease on GitHub.
diff --git a/dev/demo/all.html b/dev/demo/all.html
index d2fd6ce..70457e7 100644
--- a/dev/demo/all.html
+++ b/dev/demo/all.html
@@ -148,5 +148,11 @@
       var KorAP = KorAP || {};
       KorAP.URL = 'http://localhost:3000';
     </script>
+    <script>//<![CDATA[
+KorAP.Notifications = [];
+KorAP.Notifications.push(["warn","767: Case insensitivity is currently not supported for this layer"]);
+KorAP.Notifications.push(["error","404: Not Found (remote)"]);
+//]]>
+    </script>
   </body>
 </html>
diff --git a/dev/js/src/init.js b/dev/js/src/init.js
index 7c403aa..a414020 100644
--- a/dev/js/src/init.js
+++ b/dev/js/src/init.js
@@ -23,14 +23,14 @@
 
   // Override KorAP.log
   window.alertify = alertifyClass;
-  KorAP.log = function (type, msg) {
+  KorAP.log = function (code, msg) {
 
     // Use alertify to log errors
     alertifyClass.log(
-      (type === 0 ? '' : type + ': ') +
+      (code === 0 ? '' : code + ': ') +
 	msg,
       'error',
-      5000
+      10000
     );
   };
 
@@ -38,6 +38,16 @@
     var obj = {};
 
     /**
+     * Release notifications
+     */
+    if (KorAP.Notifications !== undefined) {
+      var n = KorAP.Notifications;
+      for (var i = 0; i < n.length; i++) {
+	alertifyClass.log(n[i][1], n[i][0], 10000);
+      };
+    };
+
+    /**
      * Replace Virtual Collection field
      */
     var vcname;
diff --git a/kalamar.conf b/kalamar.conf
index 085fdf4..dc3c5f0 100644
--- a/kalamar.conf
+++ b/kalamar.conf
@@ -3,14 +3,13 @@
     'api-0.1' => 'http://10.0.10.13:7070/api/v0.1/'
   },
   Notifications => {
-    Alertify => {
-      base_timeout => 10_000
-    },
+    'Kalamar::Plugin::Notifications' => 1,
     JSON => 1
   },
   Search => {
     engine => 'Kalamar::API',
-    api => 'http://10.0.10.13:7070/api/v0.1/'
+#    api => 'http://10.0.10.13:7070/api/v0.1/'
+    api => 'http://localhost:9999/api/v0.1/'
   },
   CHI => {
     default => {
diff --git a/lib/Kalamar/API.pm b/lib/Kalamar/API.pm
index fc49af8..9b480f6 100644
--- a/lib/Kalamar/API.pm
+++ b/lib/Kalamar/API.pm
@@ -279,7 +279,7 @@
     $c->notify(
       error =>
 	($e->{code} ? $e->{code} . ': ' : '') .
-	  $e->{message} . ' (remote)'
+	  $e->{message} . ' for ' . $type . ' (remote)'
 	);
     return;
   };
@@ -288,7 +288,7 @@
   if (my $res = $tx->success) {
 
     # Set api response for debugging
-    $index->api_response($res->body) if $c->kalamar_test_port;
+    $index->api_response($res->body); # if $c->kalamar_test_port;
 
     # Json failure
     my $json;
@@ -313,12 +313,7 @@
 
     return 1 if ref $json ne 'HASH';
 
-    # Add warnings (Legacy)
-    if ($json->{warning}) {
-      $json->{warning} =~ s/;\s+null$//;
-      $c->notify(warn => $json->{warning});
-    };
-
+    $self->_notify_on_warnings($c, $json);
     $self->_notify_on_error($c, 0, $json);
   }
 
@@ -405,7 +400,7 @@
     $json = $res->json if blessed $res ne 'Mojo::JSON';
   };
 
-  # Chec json response error message
+  # Check json response error message
   if ($json) {
     if ($json->{error}) {
       # Temp
@@ -422,6 +417,18 @@
       return;
     }
 
+    elsif ($json->{errors}) {
+      my $errors = $json->{errors};
+      # TODO: Check for ref!
+      foreach (@$errors) {
+	$c->notify(
+	  error =>
+	    ($_->[0] ? $_->[0] . ': ' : '') .
+	      $_->[1]
+	  );
+      };
+    }
+
     # policy service error messages
     elsif ($json->{status}) {
       $c->notify(error => 'Middleware error ' . $json->{status});
@@ -440,6 +447,31 @@
 };
 
 
+sub _notify_on_warnings {
+  my ($self, $c, $json) = @_;
+
+  # Add warnings (Legacy)
+  if ($json->{warning}) {
+    $json->{warning} =~ s/;\s+null$//;
+    $c->notify(warn => $json->{warning});
+  }
+
+  # Add warnings
+  elsif ($json->{warnings}) {
+
+    my $warnings = $json->{warnings};
+    # TODO: Check for ref!
+    foreach (@$warnings) {
+      $c->notify(
+	warn =>
+	  ($_->[0] ? $_->[0] . ': ' : '') .
+	    $_->[1]
+	  );
+    };
+  };
+};
+
+
 # Cleanup array of matches
 sub _map_matches {
   return () unless $_[0];
diff --git a/lib/Kalamar/Controller/Search.pm b/lib/Kalamar/Controller/Search.pm
index 66b602e..c0c3e6e 100644
--- a/lib/Kalamar/Controller/Search.pm
+++ b/lib/Kalamar/Controller/Search.pm
@@ -50,10 +50,10 @@
       ) if $query;
 
       # Search resource (async)
-      $c->search->resource(
-	type => 'collection',
-	$delay->begin
-      );
+      # $c->search->resource(
+      #   type => 'collection',
+      #   $delay->begin
+      # );
     },
 
     # Collected search
diff --git a/lib/Kalamar/Plugin/Notifications.pm b/lib/Kalamar/Plugin/Notifications.pm
new file mode 100644
index 0000000..9fea51b
--- /dev/null
+++ b/lib/Kalamar/Plugin/Notifications.pm
@@ -0,0 +1,35 @@
+package Kalamar::Plugin::Notifications;
+use Mojo::Base 'Mojolicious::Plugin::Notifications::Engine';
+use Mojo::ByteStream 'b';
+use Mojo::Util qw/xml_escape quote/;
+use Mojo::JSON qw/decode_json encode_json/;
+use File::Spec;
+use File::Basename;
+
+# Notification method
+sub notifications {
+  my ($self, $c, $notify_array) = @_;
+
+  return '' unless @$notify_array;
+
+  # Start JavaScript snippet
+  my $js .= qq{<script>//<![CDATA[\n};
+  $js .= "KorAP.Notifications = [];\n";
+  my $noscript = "<noscript>";
+
+  # Add notifications
+  foreach (@$notify_array) {
+    $js .= 'KorAP.Notifications.push([';
+    $js .= quote($_->[0]) . ',' . quote($_->[-1]);
+    $js .= "]);\n";
+
+    $noscript .= qq{<div class="notify notify-} . $_->[0] . '">' .
+      xml_escape($_->[-1]) .
+	"</div>\n";
+  };
+
+  return b($js . "//]]>\n</script>\n" . $noscript . '</noscript>');
+};
+
+
+1;
diff --git a/package.json b/package.json
index e617117..61e2062 100755
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "Kalamar",
   "description": "Mojolicious-based Frontend for KorAP",
-  "version": "0.15.0",
+  "version": "0.16.0",
   "repository" : {
     "type": "git",
     "url": "https://github.com/KorAP/Kalamar.git"
diff --git a/templates/layouts/main.html.ep b/templates/layouts/main.html.ep
index d05aac0..9050f77 100644
--- a/templates/layouts/main.html.ep
+++ b/templates/layouts/main.html.ep
@@ -40,6 +40,6 @@
       <%= doc_link_to 'V '. $Kalamar::VERSION, 'korap', 'kalamar' %>
     </footer>
     % };
-%= notifications 'Alertify', -no_include
+%= notifications 'Kalamar::Plugin::Notifications'
   </body>
 </html>
diff --git a/templates/query.html.ep b/templates/query.html.ep
index 954488c..9b796f3 100644
--- a/templates/query.html.ep
+++ b/templates/query.html.ep
@@ -3,3 +3,7 @@
 %= javascript begin
  KorAP.currentQuery = <%== Mojo::JSON::encode_json(search->query_jsonld) %>;
 % end
+
+<pre>
+%== Mojo::JSON::encode_json(search->api_response)
+</pre>
