diff --git a/lib/Kalamar.pm b/lib/Kalamar.pm
index 12b5ded..3f1e3bf 100644
--- a/lib/Kalamar.pm
+++ b/lib/Kalamar.pm
@@ -102,9 +102,19 @@
   my $navi = Mojo::File->new($self->home->child('templates','doc','navigation.json'))->slurp;
   $self->config(navi => decode_json($navi)) if $navi;
 
+  $self->log->info('API expected at ' . $self->config->{Kalamar}->{api});
 
-  # Establish routes
-  my $r = $self->routes;
+  # Establish routes with authentification
+  my $r = $self->routes->under(
+    '/' => sub {
+      my $c = shift;
+
+      if ($c->session('auth')) {
+        $c->stash(auth => $c->session('auth'));
+      };
+      return 1;
+    }
+  );
 
   # Base query route
   $r->get('/')->to('search#query')->name('index');
@@ -131,11 +141,11 @@
   $match->to('search#match_info')->name('match');
 
   # User Management
-  $r->any('/user')->to(controller => 'User');
-  $r->post('/login')->to(action => 'login')->name('login');
-  $r->get('/logout')->to(action => 'logout')->name('logout');
-  $r->any('/register')->to(action => 'register')->name('register');
-  $r->any('/forgotten')->to(action => 'pwdforgotten')->name('pwdforgotten');
+  my $user = $r->any('/user')->to(controller => 'User');
+  $user->post('/login')->to(action => 'login')->name('login');
+#  $r->get('/logout')->to(action => 'logout')->name('logout');
+#  $r->any('/register')->to(action => 'register')->name('register');
+#  $r->any('/forgotten')->to(action => 'pwdforgotten')->name('pwdforgotten');
 
   # Default user is called 'korap'
   # $r->route('/user/:user/:collection')
diff --git a/lib/Kalamar/API.pm b/lib/Kalamar/API.pm
index 84e208e..fcf1c5e 100644
--- a/lib/Kalamar/API.pm
+++ b/lib/Kalamar/API.pm
@@ -71,8 +71,10 @@
   # Check cache for total results
   my $total_results;
 
+  my $user = $c->stash('user') // '?';
+
   if (!$index->no_cache &&
-	defined ($total_results = $c->chi->get($index->_api_cache))) {
+	defined ($total_results = $c->chi->get($user . $index->_api_cache))) {
 
     # Set total results from cache
     $index->total_results($total_results);
@@ -86,7 +88,7 @@
   $index->api_request($url->to_string);
 
   # Create new user agent and set timeout to 2 minutes
-  my $ua = $c->ua;
+  my $ua = $c->user->ua;
   $ua->inactivity_timeout(120);
 
   # Debugging
@@ -97,10 +99,10 @@
 
     $ua->get(
       $url => sub {
-	my $tx = pop;
-	$self->_process_response('matches', $index, $tx);
-	weaken $index;
-	return $cb->($index);
+        my $tx = pop;
+        $self->_process_response('matches', $index, $tx);
+        weaken $index;
+        return $cb->($index);
       });
   }
 
@@ -138,7 +140,7 @@
   $url->path('search');
 
   # Create new user agent and set timeout to 30 seconds
-  my $ua = $c->ua; # Mojo::UserAgent->new;
+  my $ua = $c->user->ua; # Mojo::UserAgent->new;
   $ua->inactivity_timeout(30);
 
   # Build transaction
@@ -198,7 +200,7 @@
   $c->app->log->debug('Match info: ' . $url);
 
   # Create new user agent and set timeout to 30 seconds
-  my $ua = $c->ua; # Mojo::UserAgent->new;
+  my $ua = $c->user->ua; # Mojo::UserAgent->new;
   $ua->inactivity_timeout(30);
 
   # non-blocking
@@ -206,9 +208,9 @@
     weaken $index;
     $ua->get(
       $url => sub {
-	my $tx = pop;
-	$self->_process_response('match', $index, $tx);
-	return $cb->($index);
+        my $tx = pop;
+        $self->_process_response('match', $index, $tx);
+        return $cb->($index);
       });
   }
 
@@ -228,6 +230,8 @@
   # Get controller
   my $c = $index->controller;
 
+  my $user = $c->stash('user') // '?';
+
   # If there is a callback, do async
   my $cb = pop if ref $_[-1] && ref $_[-1] eq 'CODE';
 
@@ -244,7 +248,7 @@
   $c->app->log->debug('Get resource info on '. $url);
 
   # Check for cached information
-  if (my $json = $c->chi->get($url->to_string)) {
+  if (my $json = $c->chi->get($user . $url->to_string)) {
 
     # TODO: That's unfortunate, as it prohibits caching of multiple resources
     $c->app->log->debug('Get resource info from cache');
@@ -264,8 +268,8 @@
     weaken $index;
     $ua->get(
       $url => sub {
-	$self->_process_response('resource', $index, pop);
-	return $cb->($index);
+        $self->_process_response('resource', $index, pop);
+        return $cb->($index);
       })
   }
 
@@ -385,9 +389,10 @@
 
     if ($meta->{totalResults} && $meta->{totalResults} > -1) {
       my $c = $index->controller;
+      my $user = $c->stash('user') // '?';
 
       $c->app->log->debug('Cache total result');
-      $c->chi->set($index->_api_cache => $meta->{totalResults}, '120min');
+      $c->chi->set($user . $index->_api_cache => $meta->{totalResults}, '120min');
       $index->total_results($meta->{totalResults});
     };
   };
@@ -413,10 +418,12 @@
   my ($self, $index, $json) = @_;
   my $c = $index->controller;
 
+  my $user = $c->stash('user') // '?';
+
   # TODO: That's unfortunate, as it prohibits multiple resources
   $c->stash('search.resource' => $json);
   $c->app->log->debug('Cache resource info');
-  $c->chi->set($c->stash('search._resource_cache') => $json, '24 hours');
+  $c->chi->set($user . $c->stash('search._resource_cache') => $json, '24 hours');
 };
 
 
diff --git a/lib/Kalamar/Controller/User.pm b/lib/Kalamar/Controller/User.pm
index f59f932..1584225 100644
--- a/lib/Kalamar/Controller/User.pm
+++ b/lib/Kalamar/Controller/User.pm
@@ -1,18 +1,22 @@
 package Kalamar::Controller::User;
 use Mojo::Base 'Mojolicious::Controller';
 
+# Login action
 sub login {
   my $c = shift;
-  my $v = $c->validator;
+
+  # Validate input
+  my $v = $c->validation;
   $v->required('handle_or_email');
   $v->required('pwd');
 
-  my $handle = $v->param('handle_or_email');
-  my $pwd = $v->param('pwd');
+  # Login user
+  $c->user->login(
+    $v->param('handle_or_email'),
+    $v->param('pwd')
+  );
 
-  $c->user->login($handle, $pwd);
-
-  return $c->redirect_to;
+  return $c->redirect_to('/');
 };
 
 sub logout {
diff --git a/lib/Kalamar/Plugin/KalamarUser.pm b/lib/Kalamar/Plugin/KalamarUser.pm
index 7650e02..76233c5 100644
--- a/lib/Kalamar/Plugin/KalamarUser.pm
+++ b/lib/Kalamar/Plugin/KalamarUser.pm
@@ -35,9 +35,28 @@
       my $token = $c->stash('auth');
       return $token if $token;
 
+      # Get auth from session
+      my $auth = $c->session('auth') or return;
+
       # Set token to stash
-      $c->stash(auth => $c->session('auth'));
-      return $c->stash('auth');
+      $c->stash(auth => $auth);
+      return $auth;
+    }
+  );
+
+  $mojo->helper(
+    'user.ua' => sub {
+      my $c = shift;
+      my $auth = $c->user_auth;
+      return $plugin->ua unless $auth;
+      my $ua = Mojo::UserAgent->new;
+      $ua->on(
+        start => sub {
+          my ($ua, $tx) = @_;
+          $tx->req->headers->header('Authorization' => $auth);
+        }
+      );
+      return $ua;
     }
   );
 
@@ -50,7 +69,7 @@
       return if (index($user, ':') >= 0);
 
       my $url = Mojo::URL->new($plugin->api)->path('auth/apiToken');
-      my $tx = $c->ua->get($url => {
+      my $tx = $plugin->ua->get($url => {
         Authorization => 'Basic ' . b($user . ':' . $pwd)->b64_encode
       });
 
@@ -59,6 +78,9 @@
 
         my $jwt = $res->json;
 
+
+        # TODO: Deal with user return values.
+
         my $auth = $jwt->{token_type} . ' ' . $jwt->{token};
 
         $mojo->log->debug(qq!Login successful: "$user" with "$auth"!);
