diff --git a/lib/Korap.pm b/lib/Korap.pm
index f0115ae..0dc9655 100644
--- a/lib/Korap.pm
+++ b/lib/Korap.pm
@@ -1,7 +1,7 @@
 package Korap;
 use Mojo::Base 'Mojolicious';
 
-our $VERSION = '0.04';
+our $VERSION = '0.05';
 
 # Start dev with
 # morbo -w lib -w templates -w public/sass -w public/js script/korap
@@ -36,6 +36,7 @@
   });
 
   $self->plugin('AssetPack::LibSass');
+  $self->plugin('MailException' => $self->config('MailException'));
 
   $self->asset(
     'korap.css' => (
@@ -56,6 +57,7 @@
   $self->asset(
     'korap.js' => (
       '/js/jquery-2.0.0.min.js',
+      '/js/tutorialCookie.js',
       '/js/translateTable.js',
       '/js/hint.js',
       '/js/highlight.pack.js'
@@ -76,8 +78,8 @@
   $r->get('/')->to('search#remote')->name('index');
 
   # Tutorial data
-  $r->get('/tutorial/(*tutorial)', { tutorial => 'start' })
-    ->to('tutorial#page')->name('tutorial');
+  $r->get('/tutorial')->to('tutorial#page', tutorial => 'index');
+  $r->get('/tutorial/(*tutorial)')->to('tutorial#page')->name('tutorial');
 
   # Collection data
   my $collection = $r->bridge('/collection');
diff --git a/lib/Korap/Info.pm b/lib/Korap/Info.pm
index b4c5d91..2780ebb 100644
--- a/lib/Korap/Info.pm
+++ b/lib/Korap/Info.pm
@@ -19,7 +19,9 @@
 
   return $c->respond_to(
     json => sub {
-      $c->render(json => $c->notifications(json => $c->match_info($corpus_id, $doc_id, $match_id, %query)))
+      $c->render(json => $c->notifications(
+	json => $c->match_info($corpus_id, $doc_id, $match_id, %query))
+      )
     },
     html => sub {
       my $match = $c->match_info($corpus_id, $doc_id, $match_id);
@@ -40,7 +42,6 @@
 # Todo: Return info for all collections
 sub about_collection {
   my $c = shift;
-  my $api = $c->config('KorAP')->{'api0.1'};
   my $src = $c->stash('collection_id');
   if ($src) {
     $c->render(
diff --git a/lib/Korap/Plugin/KorapInfo.pm b/lib/Korap/Plugin/KorapInfo.pm
index 946c997..4de0406 100644
--- a/lib/Korap/Plugin/KorapInfo.pm
+++ b/lib/Korap/Plugin/KorapInfo.pm
@@ -26,7 +26,7 @@
   state $json = decode_json(b(join('', <DATA>))->encode);
 
   # Get the API endpoint
-  my $api = $param->{api};
+  my $api = $param->{'api-0.1'};
 
   # Todo: Make this recognize the user!
   $mojo->helper(
@@ -42,9 +42,11 @@
       };
 
       # Rename info endpoints and build URL
-      $src = 'VirtualCollection' if $src eq 'collection';
-      $src = 'Corpus' if $src eq 'corpus';
-      my $url = Mojo::URL->new($api)->path('resource/' . $src);
+      $src = 'virtualcollection' if $src eq 'collection';
+      $src = 'corpus' if $src eq 'corpus';
+      my $url = Mojo::URL->new($api)->path($src);
+
+      $c->app->log->debug($url);
 
       # Check for cached information
       if (my $json = $c->chi->get($url->to_string)) {
@@ -156,7 +158,7 @@
       "id":1,
       "managed":true,
       "created":1401193381119,
-      "stats":{
+      "statistics":{
         "documents":196510,
         "tokens":51545081,
         "sentences":4116282,
diff --git a/lib/Korap/Plugin/KorapTagHelpers.pm b/lib/Korap/Plugin/KorapTagHelpers.pm
index b2b9a4e..25ca691 100644
--- a/lib/Korap/Plugin/KorapTagHelpers.pm
+++ b/lib/Korap/Plugin/KorapTagHelpers.pm
@@ -9,12 +9,30 @@
   $mojo->helper(
     korap_tut_query => sub {
       my ($c, $ql, $q) = @_;
+      my $onclick = 'top.useQuery(this)';
+      if ($c->param('embedded')) {
+	$onclick = 'setTutorialPage(this);' . $onclick;
+      };
       $q = xml_escape $q;
-      b('<pre class="query tutorial" onclick="top.useQuery(this)" ' .
+      b('<pre class="query tutorial" onclick="' . $onclick . '" ' .
 	  qq!data-query="$q" data-query-language="$ql"><code>! .
 	    $q . '</code></pre>');
     }
   );
+
+  $mojo->helper(
+    korap_tut_link_to => sub {
+      my $c = shift;
+      my $title = shift;
+      my $link = shift;
+      my $url = Mojo::URL->new($link);
+      if ($c->param('embedded')) {
+	$url->query({ embedded => 1 });
+	return $c->link_to($title, $url, onclick => 'setTutorialPage("' . $url . '")');
+      };
+      return $c->link_to($title, $url);
+    }
+  );
 };
 
 1;
diff --git a/lib/Korap/Tutorial.pm b/lib/Korap/Tutorial.pm
index 3da233a..f9d99da 100644
--- a/lib/Korap/Tutorial.pm
+++ b/lib/Korap/Tutorial.pm
@@ -14,10 +14,10 @@
   $c->title('KorAP');
 
   my $page = $c->stash('tutorial');
-
-  $c->render(template => 'tutorial');
+  return $c->render(template => 'tutorial/' . $page);
 };
 
+
 1;
 
 
