Minor fixes for chrome compatibility
diff --git a/lib/Korap.pm b/lib/Korap.pm
index f79ef61..259383b 100644
--- a/lib/Korap.pm
+++ b/lib/Korap.pm
@@ -3,28 +3,27 @@
 
 our $VERSION = '0.03';
 
-# This method will run once at server start
+# Start the application and register all routes and plugins
 sub startup {
   my $self = shift;
 
+  # Set secret for signed cookies
   $self->secrets(['fmhsfjgfchgsdbfgshfxztsbt32477eb45veu4vubrghfgghbtv']);
 
-  $self->plugin('Config');
-  $self->plugin('CHI');
-  $self->plugin('TagHelpers::Pagination' => {
-    prev => '<span><i class="fa fa-caret-left"></i></span>',
-    next => '<span><i class="fa fa-caret-right"></i></span>',
-    ellipsis => '<span><i class="fa fa-ellipsis-h"></i></span>',
-    separator => '',
-    current => '<span>{current}</span>',
-    page => '<span>{page}</span>'
-  });
-  $self->plugin('Notifications');
-  $self->plugin('Number::Commify');
+  # Add additional plugin path
   push(@{$self->plugins->namespaces}, __PACKAGE__ . '::Plugin');
-  $self->plugin('KorapSearch');
-  $self->plugin('KorapInfo');
-  $self->plugin('KorapTagHelpers');
+
+  # Load plugins
+  foreach (qw/Config
+	      CHI
+	      TagHelpers::Pagination
+	      Notifications
+	      Number::Commify
+	      KorapSearch
+	      KorapInfo
+	      KorapTagHelpers/) {
+    $self->plugin($_);
+  };
 
   $self->helper(
     date_format => sub {
@@ -36,40 +35,29 @@
   # Routes
   my $r = $self->routes;
 
-  # Create search endpoint
-  $r->add_shortcut(
-    search => sub {
-      shift->route('/search')->to('search#remote')
-    }
-  );
-
+  # Base search route
   $r->get('/')->to('search#remote')->name('index');
-  $r->get('/util/query')->to('search#query');
 
-  # Tutorial
-  $r->get('/tutorial/(*tutorial)', { tutorial => 'start' })->to('tutorial#page')->name('tutorial');
+  # Tutorial data
+  $r->get('/tutorial/(*tutorial)', { tutorial => 'start' })
+    ->to('tutorial#page')->name('tutorial');
 
+  # Collection data
   my $collection = $r->route('/collection');
   $collection->to('search#info');
   $collection->search;
 
+  # Corpus data
   my $corpus = $r->route('/corpus');
   $corpus->search;
   $corpus->route('/:corpus_id')->search;
-  $corpus->route('/:corpus_id/:doc_id')->search;
-  $corpus->route('/:corpus_id/#doc_id/:match_id')->to('info#about_match');
+  $corpus->route('/:corpus_id/#doc_id')->search;
+  $corpus->route('/:corpus_id/#doc_id/:match_id')
+         ->to('info#about_match');
 
-
-
-#  $r->get(
-#    '/:resource/:corpus_id/#doc_id/#match_id',
-#    resource => [qw/collection corpus/])->to('search#match')->name('match');
- # /matchInfo?id=...&f=&l=&spans
+  # Utilities
+  $r->get('/util/query')->to('search#query');
 };
 
 
 1;
-
-__END__
-
-  # TODO: Write search snippet
diff --git a/lib/Korap/Plugin/KorapInfo.pm b/lib/Korap/Plugin/KorapInfo.pm
index a1f3af8..5ef48d3 100644
--- a/lib/Korap/Plugin/KorapInfo.pm
+++ b/lib/Korap/Plugin/KorapInfo.pm
@@ -3,6 +3,9 @@
 use Mojo::JSON qw/decode_json/;
 use Mojo::ByteStream 'b';
 
+# Todo: Make the requests non-blocking
+
+# Register plugin
 sub register {
   my ($plugin, $mojo, $param) = @_;
   $param ||= {};
@@ -12,37 +15,43 @@
     $param = { %$param, %$config_param };
   };
 
+  # Temporary info data
   state $json = decode_json(b(join('', <DATA>))->encode);
 
+  # Get the API endpoint
   my $api = $param->{api};
 
   # Todo: Make this recognize the user!
   $mojo->helper(
     resource_info => sub {
       my $c = shift;
-
       my $src = shift;
 
+      # Dispatch for test mode
       if ($c->app->mode eq 'test') {
 	if ($src eq 'collection') {
 	  return $json->{collections};
 	};
       };
 
+      # 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);
 
-      my $chi = $c->chi;
-      if (my $json = $chi->get($url->to_string)) {
+      # Check for cached information
+      if (my $json = $c->chi->get($url->to_string)) {
 	return $json;
       }
+
+      # Retrieve and set the cache
       elsif (my $response = $c->ua->get($url)->success) {
 	my $json = $response->json;
-	$c->chi->set($url->to_string => $json);
+	$c->chi->set($url->to_string => $json, '24 hours');
 	return $json;
       };
+
+      # Something went wrong
       $c->notify(error => 'Unable to retrieve resource');
       return [];
     }
@@ -55,8 +64,12 @@
 
       return $json->{matchInfo} if $c->app->mode eq 'test';
 
+      # Build url
       my $url = Mojo::URL->new($api)->path('resource/matchInfo');
+
+      # Build match id
       $match = 'match-' . $corpus . '!' . $corpus . '_' . $doc . '-' . $match;
+
       $url->query({
 	id => $match,
 	f => 'mate',
@@ -76,16 +89,51 @@
 1;
 
 __DATA__
-
 {
-"matchInfo":
-
-{"author":"Filzstift,Alexander Sommer,TheK","textClass":"freizeit-unterhaltung reisen","corpusID":"WPD","title":"Neuseeland","foundries":"xip xip/morpho xip/constituency xip/dependency corenlp corenlp/namedentities corenlp/namedentities/ne_dewac_175m_600 corenlp/namedentities corenlp/namedentities/ne_hgc_175m_600 mate mate/morpho mate/dependency connexor connexor/morpho connexor/syntax connexor/phrase treetagger treetagger/morpho base base/sentences base/paragraphs opennlp opennlp/morpho","tokenization":"opennlp#tokens","field":"tokens","startMore":false,"endMore":false,"docID":"WPD_NNN.02848","snippet":"<span class=\"context-left\"></span><span class=\"match\"><span title=\"mate/l:besonders\"><span title=\"mate/p:ADV\">Besonders</span></span> <span title=\"mate/l:auffällig\"><span title=\"mate/m:degree:pos\"><span title=\"mate/p:ADJD\">auffällig</span></span></span> <span title=\"mate/l:sein\"><span title=\"mate/m:mood:ind\"><span title=\"mate/m:number:pl\"><span title=\"mate/m:person:3\"><span title=\"mate/m:tense:pres\"><span title=\"mate/p:VAFIN\">sind</span></span></span></span></span></span> <span title=\"mate/l:schließlich\"><span title=\"mate/p:ADV\">schließlich</span></span> <span title=\"mate/l:noch\"><span title=\"mate/p:ADV\">noch</span></span> <span title=\"mate/l:der\"><span title=\"mate/m:case:nom\"><span title=\"mate/m:gender:masc\"><span title=\"mate/m:number:sg\"><span title=\"mate/p:ART\">der</span></span></span></span></span> <span title=\"mate/l:pohutukawa\"><span title=\"mate/m:case:nom\"><span title=\"mate/m:gender:masc\"><span title=\"mate/m:number:sg\"><span title=\"mate/p:NE\">Pohutukawa</span></span></span></span></span> <span title=\"mate/l:und\"><span title=\"mate/p:KON\">und</span></span> <span title=\"mate/l:der\"><span title=\"mate/m:case:nom\"><span title=\"mate/m:gender:masc\"><span title=\"mate/m:number:sg\"><span title=\"mate/p:ART\">der</span></span></span></span></span> <span title=\"mate/l:cabbage\"><span title=\"mate/m:case:nom\"><span title=\"mate/m:gender:masc\"><span title=\"mate/m:number:sg\"><span title=\"mate/p:NE\">Cabbage</span></span></span></span></span> <span title=\"mate/l:tree\"><span title=\"mate/m:gender:masc\"><span title=\"mate/m:number:sg\"><span title=\"mate/p:NE\"><span title=\"mate/m:case:nom\">Tree</span></span></span></span></span></span><span class=\"context-right\"></span>","ID":"match-WPD!WPD_NNN.02848-p1213-1224","pubDate":"2005-03-28","context":{"left":["token",0],"right":["token",0]}},
-
-
-"collections" :
-[{"shared":false,"id":1,"managed":true,"created":1401193381119,"stats":{"documents":196510,"tokens":51545081,"sentences":4116282,"paragraphs":2034752},"query":[{"@type":"korap:meta-filter","@value":{"@type":"korap:term","@field":"korap:field#corpusID","@value":"WPD"}}],"description":"Die freie Enzyklopädie","name":"Wikipedia","foundries":"base;corenlp;mate;mpt;opennlp;tt;xip"}]
-
-
-
+  "matchInfo": {
+    "author":"Filzstift,Alexander Sommer,TheK",
+    "textClass":"freizeit-unterhaltung reisen",
+    "corpusID":"WPD",
+    "title":"Neuseeland",
+    "foundries":"xip xip/morpho xip/constituency xip/dependency corenlp corenlp/namedentities corenlp/namedentities/ne_dewac_175m_600 corenlp/namedentities corenlp/namedentities/ne_hgc_175m_600 mate mate/morpho mate/dependency connexor connexor/morpho connexor/syntax connexor/phrase treetagger treetagger/morpho base base/sentences base/paragraphs opennlp opennlp/morpho",
+    "tokenization":"opennlp#tokens",
+    "field":"tokens",
+    "startMore":false,
+    "endMore":false,
+    "docID":"WPD_NNN.02848",
+    "snippet":"<span class=\"context-left\"></span><span class=\"match\"><span title=\"mate/l:besonders\"><span title=\"mate/p:ADV\">Besonders</span></span> <span title=\"mate/l:auffällig\"><span title=\"mate/m:degree:pos\"><span title=\"mate/p:ADJD\">auffällig</span></span></span> <span title=\"mate/l:sein\"><span title=\"mate/m:mood:ind\"><span title=\"mate/m:number:pl\"><span title=\"mate/m:person:3\"><span title=\"mate/m:tense:pres\"><span title=\"mate/p:VAFIN\">sind</span></span></span></span></span></span> <span title=\"mate/l:schließlich\"><span title=\"mate/p:ADV\">schließlich</span></span> <span title=\"mate/l:noch\"><span title=\"mate/p:ADV\">noch</span></span> <span title=\"mate/l:der\"><span title=\"mate/m:case:nom\"><span title=\"mate/m:gender:masc\"><span title=\"mate/m:number:sg\"><span title=\"mate/p:ART\">der</span></span></span></span></span> <span title=\"mate/l:pohutukawa\"><span title=\"mate/m:case:nom\"><span title=\"mate/m:gender:masc\"><span title=\"mate/m:number:sg\"><span title=\"mate/p:NE\">Pohutukawa</span></span></span></span></span> <span title=\"mate/l:und\"><span title=\"mate/p:KON\">und</span></span> <span title=\"mate/l:der\"><span title=\"mate/m:case:nom\"><span title=\"mate/m:gender:masc\"><span title=\"mate/m:number:sg\"><span title=\"mate/p:ART\">der</span></span></span></span></span> <span title=\"mate/l:cabbage\"><span title=\"mate/m:case:nom\"><span title=\"mate/m:gender:masc\"><span title=\"mate/m:number:sg\"><span title=\"mate/p:NE\">Cabbage</span></span></span></span></span> <span title=\"mate/l:tree\"><span title=\"mate/m:gender:masc\"><span title=\"mate/m:number:sg\"><span title=\"mate/p:NE\"><span title=\"mate/m:case:nom\">Tree</span></span></span></span></span></span><span class=\"context-right\"></span>",
+    "ID":"match-WPD!WPD_NNN.02848-p1213-1224",
+    "pubDate":"2005-03-28",
+    "context":{
+      "left":["token",0],
+      "right":["token",0]
+    }
+  },
+  "collections" : [
+    {
+      "shared":false,
+      "id":1,
+      "managed":true,
+      "created":1401193381119,
+      "stats":{
+        "documents":196510,
+        "tokens":51545081,
+        "sentences":4116282,
+        "paragraphs":2034752
+      },
+      "query":[
+        {
+          "@type":"korap:meta-filter",
+          "@value":{
+            "@type":"korap:term",
+            "@field":"korap:field#corpusID",
+            "@value":"WPD"
+          }
+        }
+      ],
+      "description":"Die freie Enzyklopädie",
+      "name":"Wikipedia",
+      "foundries":"base;corenlp;mate;mpt;opennlp;tt;xip"
+    }
+  ]
 }
diff --git a/lib/Korap/Plugin/KorapSearch.pm b/lib/Korap/Plugin/KorapSearch.pm
index 39b5c15..015a1a8 100644
--- a/lib/Korap/Plugin/KorapSearch.pm
+++ b/lib/Korap/Plugin/KorapSearch.pm
@@ -5,6 +5,7 @@
 
 # TODO: This will probably be an engine for M::P::Search
 # cutoff has to be true or false
+# TODO: Write search snippet
 
 sub register {
   my ($plugin, $mojo, $param) = @_;
@@ -37,6 +38,13 @@
     }
   );
 
+  # Create search endpoint
+  $mojo->routes->add_shortcut(
+    search => sub {
+      shift->route('/search')->to('search#remote')
+    }
+  );
+
   $mojo->helper(
     search => sub {
       my $c = shift;