diff --git a/lib/Kalamar/Controller/Search2.pm b/lib/Kalamar/Controller/Search2.pm
index c7e9736..e16a744 100644
--- a/lib/Kalamar/Controller/Search2.pm
+++ b/lib/Kalamar/Controller/Search2.pm
@@ -15,6 +15,7 @@
 # TODO:
 #   Add match_info template for HTML
 
+
 # Query endpoint
 sub query {
   my $c = shift;
@@ -91,7 +92,8 @@
   # Create remote request URL
   my $url = Mojo::URL->new($c->korap->api);
   $url->path('search');
-  $url->query(\%query);
+  # $url->query(%query);
+  $url->query(map { $_ => $query{$_}} sort keys %query);
 
   # Check if total results is cached
   my $total_results = -1;
@@ -108,58 +110,19 @@
     $url->query({cutoff => 'true'});
   };
 
-  # Check if the request is cached
-  my $url_string = $url->to_string;
+  # Choose the snippet based on the parameter
+  # TODO:
+  #   scalar $v->param('snippet') ? 'snippet' : 'search2';
+  $c->stash(template => 'search2');
 
-  # Set api request for debugging
-  $c->stash(api_request => $url_string);
-
-  # Debugging
-  $c->app->log->debug("Search for $url_string");
-
-  # Check for cache
-  my $json = $c->chi->get("matches-$user-$url_string");
-
-  # Initialize promise object
-  my $promise;
-
-  # Result is cached
-  if ($json) {
-    $json->{cached} = 'true';
-
-    # The promise is already satisfied by the cache
-    $promise = Mojo::Promise->new->resolve($json)->then(
-      sub {
-        my $json = shift;
-        $c->notify_on_warnings($json);
-        return $json;
-      }
-    );
-  }
-
-  # Retrieve from URL
-  else {
-
-    # Wrap a user agent method with a promise
-    $promise = $c->user->auth_request_p(get => $url)->then(
-      sub {
-
-        # Catch errors and warnings
-        return $c->catch_errors_and_warnings(shift)
-      }
-    );
-  };
 
   # Wait for rendering
   $c->render_later;
 
-  # Choose the snippet based on the parameter
-  # scalar $v->param('snippet') ? 'snippet' : 'search2';
-  my $template = 'search2';
-  $c->stash(template => $template);
+  # Fetch resource
+  $c->cached_koral_p('get', $url)->then(
 
-  # Process response
-  $promise->then(
+    # Process response
     sub {
       my $json = shift;
 
@@ -200,9 +163,6 @@
         );
       };
 
-      # Cache result
-      $c->chi->set('matches-' . $user . '-' . $url_string => $json);
-
       # Process match results
       $c->_process_query_response($json);
 
@@ -270,17 +230,12 @@
     ))
   );
 
-  # Set query parameters
-  $url->query(\%query);
+  # Set query parameters in order
+  $url->query(map { $_ => $query{$_}} sort keys %query);
 
   $c->render_later;
 
-  # TODO: Add caching!
-  $c->user->auth_request_p(get => $url)->then(
-    sub {
-      return $c->catch_errors_and_warnings(shift);
-    }
-  )->then(
+  $c->cached_koral_p('get', $url)->then(
     sub {
       my $json = shift;
 
@@ -322,9 +277,6 @@
   my $v = $c->validation;
   $v->optional('cq');
 
-  # Async
-  $c->render_later;
-
   my $url = Mojo::URL->new($c->korap->api);
 
   # Use hash slice to create path
@@ -338,25 +290,11 @@
 
   $c->app->log->debug("Statistics info: $url");
 
-  # non-blocking
-  $c->user->auth_request_p(get => $url)->then(
-    sub {
-      return $c->catch_errors_and_warnings(shift);
-    }
-  )->then(
-    sub {
-      my $json = shift;
+  # Async
+  $c->render_later;
 
-      # TODO: CACHING!!!
-      # my $user = $c->stash('user') // 'not_logged_in';
-      # $c->stash('search.resource' => $json);
-      # $c->chi->set($user . $c->stash('search._resource_cache') => $json, '24 hours');
-
-      # $self->_process_response('resource', $index, $tx);
-
-      return $json;
-    }
-  )
+  # Request koral, maybe cached
+  $c->cached_koral_p('get', $url)
 
   # Process response
   ->then(
diff --git a/lib/Kalamar/Plugin/KalamarHelpers.pm b/lib/Kalamar/Plugin/KalamarHelpers.pm
index b6a67c9..7d1e1b8 100644
--- a/lib/Kalamar/Plugin/KalamarHelpers.pm
+++ b/lib/Kalamar/Plugin/KalamarHelpers.pm
@@ -1,7 +1,6 @@
 package Kalamar::Plugin::KalamarHelpers;
 use Mojo::Base 'Mojolicious::Plugin';
-use Mojo::JSON 'decode_json';
-use Mojo::JSON::Pointer;
+use Mojo::JSON qw/decode_json true false/;
 use Mojo::ByteStream 'b';
 use Mojo::Util qw/xml_escape/;
 
@@ -276,6 +275,68 @@
       return shift->config('Search')->{api};
     }
   );
+
+
+  # Get a cached request from the backend
+  $mojo->helper(
+    cached_koral_p => sub {
+      my ($c, $method, $url) = @_;
+
+      # In case the user is not known, it is assumed,
+      # the user is not logged in
+      my $user = $c->stash('user') // 'not_logged_in';
+
+      # Set api request for debugging
+      my $cache_str = "$method-$user-" . $url->to_string;
+      $c->stash(api_request => $cache_str);
+
+      if ($c->no_cache) {
+        return $c->user->auth_request_p($method => $url)->then(
+          sub {
+            # Catch errors and warnings
+            return $c->catch_errors_and_warnings(shift)
+          }
+        );
+      };
+
+      # Get koral from cache
+      my $koral = $c->chi->get($cache_str);
+
+      my $promise;
+
+      # Cache was found
+      if ($koral) {
+
+        # Mark response as cache
+        $koral->{'X-cached'} = Mojo::JSON->true;
+
+        # The promise is already satisfied by the cache
+        return Mojo::Promise->new->resolve($koral)->then(
+          sub {
+            my $json = shift;
+            $c->notify_on_warnings($json);
+            return $json;
+          }
+        );
+      };
+
+      # Resolve request
+      return $c->user->auth_request_p($method => $url)->then(
+        sub {
+          # Catch errors and warnings
+          return $c->catch_errors_and_warnings(shift)
+        }
+      )->then(
+        # Cache on success
+        sub {
+          my $json = shift;
+          $c->chi->set($cache_str => $json);
+          return $json;
+        }
+      );
+    }
+  );
+
 };
 
 
diff --git a/t/corpus_info.t b/t/corpus_info.t
index e5d1987..1d8290b 100644
--- a/t/corpus_info.t
+++ b/t/corpus_info.t
@@ -31,6 +31,7 @@
   ->json_is('/tokens', 665842)
   ->json_is('/sentences', 25074)
   ->json_is('/paragraphs', 772)
+  ->json_is('/X-cached', undef)
   ;
 
 $t->get_ok('/corpus2?cq=docSigle+%3D+\"GOE/AGA\"')
@@ -39,6 +40,7 @@
   ->json_is('/tokens', 108557)
   ->json_is('/sentences', 3835)
   ->json_is('/paragraphs', 124)
+  ->json_is('/X-cached', undef)
   ;
 
 $t->get_ok('/corpus2?cq=4')
@@ -46,5 +48,16 @@
   ->json_is('/notifications/0/1', "302: Could not parse query >>> (4) <<<.")
   ;
 
+# Query passed
+$t->get_ok('/corpus2')
+  ->status_is(200)
+  ->json_is('/documents', 11)
+  ->json_is('/tokens', 665842)
+  ->json_is('/sentences', 25074)
+  ->json_is('/paragraphs', 772)
+  ->json_is('/X-cached', 1)
+  ;
+
+
 done_testing;
 __END__
diff --git a/t/match_info.t b/t/match_info.t
index 58191a5..c07e7aa 100644
--- a/t/match_info.t
+++ b/t/match_info.t
@@ -29,6 +29,7 @@
   ->status_is(200)
   ->json_is('/textSigle', 'WPD15/232/39681')
   ->json_like('/snippet', qr!<span class=\"context-left\">!)
+  ->json_is('/X-cached', undef)
   ;
 
 $t->get_ok('/corpus2/GOE/AGF/02286/p75682-75683')
@@ -89,6 +90,14 @@
   ->json_is('/notifications/0/1', 'Message structure failed')
   ;
 
+# Get from cache
+$t->get_ok('/corpus2/WPD15/232/39681/p2133-2134?spans=false&foundry=*')
+  ->status_is(200)
+  ->json_is('/textSigle', 'WPD15/232/39681')
+  ->json_like('/snippet', qr!<span class=\"context-left\">!)
+  ->json_is('/X-cached', 1)
+  ;
+
 
 done_testing;
 __END__
