Now working full non-blocking (maybe leaky here and there)
diff --git a/templates/api-communication.html.ep b/templates/api-communication.html.ep
index 341a2da..30034af 100644
--- a/templates/api-communication.html.ep
+++ b/templates/api-communication.html.ep
@@ -1,11 +1,11 @@
 % use JSON::XS;
 
-% if (stash('test_port') && stash('search.apirequest')) {
+% if (stash('test_port') && search->api_request) {
 <pre class="query api" onclick="this.classList.toggle('active')">
   <span>API Response for </span>
-  <span style="font-size: 70%"><%= stash('search.apirequest') %></span>
+  <span style="font-size: 70%"><%= search->api_request %></span>
   <code>
-<%= stash('search.apiresponse') =%>
+%= search->api_response
   </code>
 </pre>
 %= javascript begin
diff --git a/templates/collections.html.ep b/templates/collections.html.ep
index 465b71e..0102536 100644
--- a/templates/collections.html.ep
+++ b/templates/collections.html.ep
@@ -1,6 +1,6 @@
 <h2>Virtual Collections</h2>
 <ul>
-% foreach my $vc (@{resource_info('collection')}) {
+% foreach my $vc (@{stash('search.resource') // []}) {
   <li class="active" title="<%= $vc->{description} // '' %>"><h3><%= $vc->{name} %></h3>
 % my $stats = $vc->{statistics};
     <dl class="info">
diff --git a/templates/match.html.ep b/templates/match.html.ep
index e6e6866..adf5a0e 100644
--- a/templates/match.html.ep
+++ b/templates/match.html.ep
@@ -10,7 +10,7 @@
   <div>
     <div class="snippet"><%== $match->{snippet} %></div>
     <div class="tokenInfo"></div>
-    <div class="treeInfo"></div>
+%#    <div class="treeInfo"></div>
   </div>
 %#
 %# -- Reference string
@@ -31,7 +31,7 @@
     <li class="open" title="Open in new tab"><a href="#<%= $match->{corpusID} %>-<%= $match->{docID} %>-<%= $match->{ID} %>" target="_blank"><i class="fa fa-external-link-square"></i></a></li>
 % };
     <li onclick="showTable(this)" title="Annotations"><i class="fa fa-info-circle"></i></li>
-    <li onclick="showTree(this, 'xip', 'c')" title="Tree Visualizations"><i class="fa fa-sitemap"></i></li>
+%#    <li onclick="showTree(this, 'xip', 'c')" title="Tree Visualizations"><i class="fa fa-sitemap"></i></li>
 %#    <li title="Remember"><i class="fa fa-star-o"></i></li>
   </ul>
 </li>
diff --git a/templates/query.html.ep b/templates/query.html.ep
index 9c077b8..8f58838 100644
--- a/templates/query.html.ep
+++ b/templates/query.html.ep
@@ -1,7 +1,7 @@
 % use JSON::XS;
 % use Mojo::JSON;
 
-% if (stash('search.query') && stash('test_port')) {
+% if (search->query_jsonld && stash('test_port')) {
 %   my $action;
 %   if (param('action') && param('action') eq 'inspect') {
 %     $action = ' active" style="cursor: default';
@@ -11,7 +11,7 @@
   <span>JSON-LD Serialization for <%= param 'q' %> (<%= param 'ql' %>)</span>
   <code>
 %# Workaround to keep true, false, and null intact
-%= $json->encode($json->decode(Mojo::JSON::encode_json(stash('search.query'))))
+%= $json->encode($json->decode(Mojo::JSON::encode_json(search->query_jsonld)))
   </code>
 </pre>
 %= javascript begin
diff --git a/templates/search.html.ep b/templates/search.html.ep
index 2bf4f80..ee24e79 100644
--- a/templates/search.html.ep
+++ b/templates/search.html.ep
@@ -3,28 +3,27 @@
 %     unless (param 'snippet') {
 <div style="clear: both">
 %       my $url = url_with->query(['p' => '{page}']);
-%       my $pages;
-%       $pages = stash('search.totalResults') == -1 ? -1 : (stash('search.totalResults') / (stash('search.itemsPerPage') || 1));
-  <div id="pagination"><%= pagination(stash('search.startPage'), $pages, $url) =%></div>
+%       my $pages = search->total_pages;
+  <div id="pagination"><%= pagination(search->start_page, $pages, $url) =%></div>
   <p class="found">Found
-% my $found = stash('search.totalResults');
+% my $found = search->total_results;
 % if ($found == -1) {
 %   $found = 'unknown amount of';
-% } elsif (stash('search.timeExceeded')) {
+% } elsif (search->timeExceeded) {
 %   $found = 'more than ' . $found;
 % }; 
     <span id="total-results"><%= $found %> matches</span>
-    <% if (stash 'search.benchmark') { %> in <%= stash 'search.benchmark' %><% } %>
+    <% if (search->benchmark) { %> in <%= search->benchmark %><% } %>
   </p>
 </div>
 %= include 'query'
 %= include 'api-communication'
 %     };
 
-% if (stash('search.totalResults') != 0 && scalar @{stash('search.hits')}) {
+% if (search->total_results != 0 && search->results->size) {
 <div id="search">
 <ol class="align-left">
-%=    search_hits begin
+%=    search_results begin
 %=      include 'match', match => $_
 %     end
 </ol>