diff --git a/lib/Korap.pm b/lib/Kalamar.pm
similarity index 73%
rename from lib/Korap.pm
rename to lib/Kalamar.pm
index e60357c..f6deba7 100644
--- a/lib/Korap.pm
+++ b/lib/Kalamar.pm
@@ -1,21 +1,23 @@
-package Korap;
+package Kalamar;
 use Mojo::Base 'Mojolicious';
 use Mojo::ByteStream 'b';
 
 our $VERSION = '0.13';
 
-# Start dev with
-# morbo -w lib -w templates -w public/sass -w public/js -w public/css script/korap
-# morbo -m test -w lib -w templates -w public/sass -w public/js -w public/css script/korap
-
 # Start the application and register all routes and plugins
 sub startup {
   my $self = shift;
 
-  $self->defaults(layout => 'default');
+  # Set default totle
+  $self->defaults(
+    layout => 'default',
+    title => 'KorAP - Korpusanalyseplattform der nächsten Generation'
+  );
 
   # Set secret for signed cookies
-  $self->secrets(['fmhsfjgfchgsdbfgshfxztsbt32477eb45veu4vubrghfgghbtv']);
+  $self->secrets([
+    b($self->home . '/kalamar.secret')->slurp->split("\n")
+  ]);
 
   # Add additional plugin path
   push(@{$self->plugins->namespaces}, __PACKAGE__ . '::Plugin');
@@ -27,20 +29,21 @@
 	      Notifications
 	      Number::Commify
 	      Search
-	      KorapHelpers
-	      KorapTagHelpers
-	     /) {
+	      KalamarHelpers
+	      KalamarTagHelpers/) {
     $self->plugin($_);
   };
 
-#  $self->plugin(AssetPack => { minify => 1 });
+  # $self->plugin(AssetPack => { minify => 1 });
   $self->plugin('AssetPack');
   $self->plugin('AssetPack::LibSass');
   $self->plugin('MailException' => $self->config('MailException'));
 
   # Add assets for AssetPack
   $self->asset(
-    'korap.css' => (
+    'kalamar.css' => (
+
+      # Sass files
       '/sass/style.scss',
       '/sass/sidebar.scss',
       '/sass/tutorial.scss',
@@ -49,16 +52,18 @@
       '/sass/matchinfo.scss',
       '/sass/pagination.scss',
       '/sass/kwic-4.0.scss',
+      '/sass/alertify.scss',
+
+      # CSS files
       '/css/media.css',
       '/css/font-awesome.min.css',
       '/css/highlight.css',
-      '/sass/alertify.scss',
       $self->notifications->styles
     )
   );
 
   $self->asset(
-    'korap.js' => (
+    'kalamar.js' => (
 #      '/js/d3.v3.min.js',
 #      '/js/dagre-d3.min.js',
 #      '/js/dagre-d3.js',
@@ -72,12 +77,12 @@
     )
   );
 
-  $self->helper(
-    date_format => sub {
-      my ($c, $date) = @_;
-      return $date;
-    }
-  );
+  # $self->helper(
+  #   date_format => sub {
+  #     my ($c, $date) = @_;
+  #     return $date;
+  #   }
+  # );
 
   # Routes
   my $r = $self->routes;
@@ -88,7 +93,9 @@
   # Get match information
   my $corpus = $r->route('/corpus/:corpus_id');
   my $doc    = $corpus->route('/#doc_id');
-  my $match = $doc->route('/:match_id')->to('search#match_info')->name('match');
+  my $match = $doc->route('/:match_id')
+    ->to('search#match_info')
+      ->name('match');
 
   # Tutorial data
   $r->get('/tutorial')->to('tutorial#page', tutorial => 'index');
diff --git a/lib/Korap/API.pm b/lib/Kalamar/API.pm
similarity index 99%
rename from lib/Korap/API.pm
rename to lib/Kalamar/API.pm
index 9392f4d..8cc1d41 100644
--- a/lib/Korap/API.pm
+++ b/lib/Kalamar/API.pm
@@ -1,4 +1,4 @@
-package Korap::API;
+package Kalamar::API;
 use Mojo::Base 'Mojolicious::Plugin';
 use Scalar::Util qw/blessed weaken/;
 use strict;
diff --git a/lib/Korap/Controller/Search.pm b/lib/Kalamar/Controller/Search.pm
similarity index 98%
rename from lib/Korap/Controller/Search.pm
rename to lib/Kalamar/Controller/Search.pm
index a4ba64b..33185b9 100644
--- a/lib/Korap/Controller/Search.pm
+++ b/lib/Kalamar/Controller/Search.pm
@@ -1,4 +1,4 @@
-package Korap::Controller::Search;
+package Kalamar::Controller::Search;
 use Mojo::Base 'Mojolicious::Controller';
 
 # Add X-Forwarded-For to user agent call everywhere
diff --git a/lib/Korap/Controller/Tutorial.pm b/lib/Kalamar/Controller/Tutorial.pm
similarity index 92%
rename from lib/Korap/Controller/Tutorial.pm
rename to lib/Kalamar/Controller/Tutorial.pm
index 186439d..db86998 100644
--- a/lib/Korap/Controller/Tutorial.pm
+++ b/lib/Kalamar/Controller/Tutorial.pm
@@ -1,4 +1,4 @@
-package Korap::Controller::Tutorial;
+package Kalamar::Controller::Tutorial;
 use Mojo::Base 'Mojolicious::Controller';
 
 # Todo: Set title as defaults
diff --git a/lib/Kalamar/Plugin/KalamarHelpers.pm b/lib/Kalamar/Plugin/KalamarHelpers.pm
new file mode 100644
index 0000000..08ff41f
--- /dev/null
+++ b/lib/Kalamar/Plugin/KalamarHelpers.pm
@@ -0,0 +1,25 @@
+package Kalamar::Plugin::KalamarHelpers;
+use Mojo::Base 'Mojolicious::Plugin';
+
+sub register {
+  my ($plugin, $mojo) = @_;
+
+  $mojo->helper(
+    kalamar_test_port => sub {
+      my $c = shift;
+      if (defined $c->stash('kalamar.test_port')) {
+	return $c->stash('kalamar.test_port');
+      };
+
+      if ($c->req->url->to_abs->port == 6666 ||
+	    $c->app->mode =~ m/^development|test$/) {
+	$c->stash('kalamar.test_port' => 1);
+	return 1;
+      };
+
+      $c->stash('kalamar.test_port' => 0);
+      return 0;
+    });
+};
+
+1;
diff --git a/lib/Korap/Plugin/KorapTagHelpers.pm b/lib/Kalamar/Plugin/KalamarTagHelpers.pm
similarity index 94%
rename from lib/Korap/Plugin/KorapTagHelpers.pm
rename to lib/Kalamar/Plugin/KalamarTagHelpers.pm
index 6753ad5..6041b9c 100644
--- a/lib/Korap/Plugin/KorapTagHelpers.pm
+++ b/lib/Kalamar/Plugin/KalamarTagHelpers.pm
@@ -1,4 +1,4 @@
-package Korap::Plugin::KorapTagHelpers;
+package Kalamar::Plugin::KalamarTagHelpers;
 use Mojo::Base 'Mojolicious::Plugin';
 use Mojo::JSON 'decode_json';
 use Mojo::JSON::Pointer;
@@ -10,7 +10,7 @@
 
   # Create helper for queries in the tutorial
   $mojo->helper(
-    korap_tut_query => sub {
+    kalamar_tut_query => sub {
       my ($c, $ql, $q, %param) = @_;
       my $onclick = 'top.useQuery(this)';
 
@@ -27,7 +27,7 @@
 
       # Tutorial wasn't embedded - but opened for testing
  #     elsif ($c->param('testing') &&
-#	       $c->korap_test_port &&
+#	       $c->kalamar_test_port &&
 #		 $param{tests}) {
 #
 # Currently disabled
@@ -105,7 +105,7 @@
 #
 #	# Emit hook to possible subscribers
 #	# This is used for self-testing
-#	# $plugin->emit_hook(korap_tut_query => (
+#	# $plugin->emit_hook(kalamar_tut_query => (
 #	#   query_language => $ql,
 #	#   query => $q,
 #	#   %param
@@ -142,7 +142,7 @@
   # Create links in the tutorial that make sure the current position is preserved,
   # in case the tutorial was opened embedded
   $mojo->helper(
-    korap_tut_link_to => sub {
+    kalamar_tut_link_to => sub {
       my $c = shift;
       my $title = shift;
       my $link = shift;
diff --git a/lib/Korap/Plugin/KorapHelpers.pm b/lib/Korap/Plugin/KorapHelpers.pm
deleted file mode 100644
index 45cf3cb..0000000
--- a/lib/Korap/Plugin/KorapHelpers.pm
+++ /dev/null
@@ -1,25 +0,0 @@
-package Korap::Plugin::KorapHelpers;
-use Mojo::Base 'Mojolicious::Plugin';
-
-sub register {
-  my ($plugin, $mojo) = @_;
-
-  $mojo->helper(
-    korap_test_port => sub {
-      my $c = shift;
-      if (defined $c->stash('korap.test_port')) {
-	return $c->stash('korap.test_port');
-      };
-
-      if ($c->req->url->to_abs->port == 6666 ||
-	    $c->app->mode =~ m/^development|test$/) {
-	$c->stash('korap.test_port' => 1);
-	return 1;
-      };
-
-      $c->stash('korap.test_port' => 0);
-      return 0;
-    });
-};
-
-1;
