diff --git a/Changes b/Changes
index 2dc9ce4..7a57280 100644
--- a/Changes
+++ b/Changes
@@ -1,4 +1,4 @@
-0.18 2016-07-12
+0.18 2016-08-01
         - Added REI test.
 	- Added multiple archive support to korapxml2krill.
 	- Added support for prefix negation in korapxml2krill.
@@ -7,6 +7,7 @@
 	- Added support for MDParser annotation.
 	- Added batch processing class for documents.
 	- Added test for direct I5 support.
+	- Fixed support for Mojolicious 7.
 
 0.17 2016-03-22
         - Rewrite siglen to use slashes as separators.
diff --git a/lib/KorAP/XML/Meta/I5.pm b/lib/KorAP/XML/Meta/I5.pm
index 9cd504d..41fcbe6 100644
--- a/lib/KorAP/XML/Meta/I5.pm
+++ b/lib/KorAP/XML/Meta/I5.pm
@@ -3,6 +3,15 @@
 
 our $SIGLE_RE = qr/^([^_\/]+)(?:[_\/]([^\._\/]+?)(?:\.(.+?))?)?$/;
 
+sub _squish ($) {
+  for ($_[0]) {
+    s!\s\s+! !g;
+    s!^\s*!!;
+    s!\s*$!!;
+  };
+  $_[0];
+};
+
 # Parse meta data
 sub parse {
   my ($self, $dom, $type) = @_;
@@ -13,7 +22,7 @@
   if ($type eq 'text' && !$self->text_sigle) {
     my $v = $dom->at('textSigle');
     if ($v) {
-      $self->{_text_sigle} = $v->text;
+      $self->{_text_sigle} = _squish $v->text;
       if ($self->{_text_sigle} =~ $SIGLE_RE) {
 	$self->{_text_sigle} = join('/', $1, $2, $3);
 	$self->{_doc_sigle} = join('/', $1, $2);
@@ -49,10 +58,10 @@
     my $author    = $analytic->at('h\.author');
     my $editor    = $analytic->at('editor');
 
-    $title     = $title     ? $title->all_text     : undef;
-    $sub_title = $sub_title ? $sub_title->all_text : undef;
-    $author    = $author    ? $author->all_text    : undef;
-    $editor    = $editor    ? $editor->all_text    : undef;
+    $title     = $title     ? _squish $title->all_text     : undef;
+    $sub_title = $sub_title ? _squish $sub_title->all_text : undef;
+    $author    = $author    ? _squish $author->all_text    : undef;
+    $editor    = $editor    ? _squish $editor->all_text    : undef;
 
     # Text meta data
     if ($type eq 'text') {
@@ -127,13 +136,13 @@
   if ($temp = $dom->at('pubPlace')) {
     my $place_attr = $temp->attr('key');
     $self->{pub_place_key} = $place_attr if $place_attr;
-    $temp = $temp->all_text;
+    $temp = _squish $temp->all_text;
     $self->{pub_place} = $temp if $temp;
   };
 
   # Get Publisher
   if ($temp = $dom->at('imprint publisher')) {
-    $temp = $temp->all_text;
+    $temp = _squish $temp->all_text;
     $self->{publisher} = $temp if $temp;
   };
 
@@ -143,25 +152,25 @@
 
   if ($temp) {
     if ($temp_2 = $temp->at('textType')) {
-      $temp_2 = $temp_2->all_text;
+      $temp_2 = _squish $temp_2->all_text;
       $self->{text_type} = $temp_2 if $temp_2;
     };
 
     # Get text domain
     if ($temp_2 = $temp->at('textDomain')) {
-      $temp_2 = $temp_2->all_text;
+      $temp_2 = _squish $temp_2->all_text;
       $self->{text_domain} = $temp_2 if $temp_2;
     };
 
     # Get text type art
     if ($temp_2 = $temp->at('textTypeArt')) {
-      $temp_2 = $temp_2->all_text;
+      $temp_2 = _squish $temp_2->all_text;
       $self->{text_type_art} = $temp_2 if $temp_2;
     };
 
     # Get text type ref
     if ($temp_2 = $temp->at('textTypeRef')) {
-      $temp_2 = $temp_2->all_text;
+      $temp_2 = _squish $temp_2->all_text;
       $self->{text_type_ref} = $temp_2 if $temp_2;
     };
   };
@@ -194,7 +203,7 @@
   # creatDate
   my $create_date = $dom->at('creatDate');
   if ($create_date && $create_date->text) {
-    $create_date = $create_date->all_text;
+    $create_date = _squish $create_date->all_text;
     if (index($create_date, '-') > -1) {
       $self->log->warn("Creation date ranges are not supported");
       ($create_date) = split /\s*-\s*/, $create_date;
@@ -229,18 +238,18 @@
   };
 
   if ($temp = $dom->at('biblFull editionStmt')) {
-    $temp = $temp->all_text;
+    $temp = _squish $temp->all_text;
     $self->{bibl_edition_statement} = $temp if $temp;
   };
 
   if ($temp = $dom->at('fileDescl editionStmt')) {
-    $temp = $temp->all_text;
+    $temp = _squish $temp->all_text;
     $self->{file_edition_statement} = $temp if $temp;
   };
 
   if ($temp = $dom->at('fileDesc')) {
     if (my $availability = $temp->at('publicationStmt > availability')) {
-      $temp = $availability->all_text;
+      $temp = _squish $availability->all_text;
       $self->{availability} = $temp if $temp;
     };
   };
@@ -256,19 +265,19 @@
   elsif ($type eq 'text') {
 
     if ($temp = $dom->at('sourceDesc reference[type=complete]')) {
-      if (my $ref_text = $temp->all_text) {
+      if (my $ref_text = _squish $temp->all_text) {
 	$ref_text =~ s!$REF_RE!!;
 	$self->{reference} = $ref_text;
       };
     };
 
     $temp = $dom->at('textDesc > column');
-    if ($temp && ($temp = $temp->all_text)) {
+    if ($temp && ($temp = _squish $temp->all_text)) {
       $self->{text_column} = $temp;
     };
 
     if ($temp = $dom->at('biblStruct biblScope[type=pp]')) {
-      $temp = $temp->all_text;
+      $temp = _squish $temp->all_text;
       if ($temp && $temp =~ m/(\d+)\s*-\s*(\d+)/) {
 	$self->{pages} = $1 . '-' . $2;
       };
@@ -288,11 +297,9 @@
   $prefix =~ s!^([^/]+?/[^/]+?)/!$1\.!;
   if (index($title, $prefix) == 0) {
     $title = substr($title, length($prefix));
-    $title =~ s/^\s+//;
-    $title =~ s/\s+$//;
   };
 
-  return $title;
+  return _squish $title;
 };
 
 
diff --git a/t/tokens.t b/t/tokens.t
index 59b83f3..cb7f623 100644
--- a/t/tokens.t
+++ b/t/tokens.t
@@ -5,9 +5,9 @@
 use Benchmark ':hireswallclock';
 use lib 'lib', '../lib';
 
-use_ok('KorAP::XML::Field::MultiTerm');
+use_ok('KorAP::XML::Index::MultiTerm');
 
-ok(my $term = KorAP::XML::Field::MultiTerm->new(
+ok(my $term = KorAP::XML::Index::MultiTerm->new(
   term => 'Baum',
   p_start => 0,
   p_end => 56,
@@ -24,7 +24,7 @@
 is($term->payload, '<i>56');
 is($term->to_string, 'Baum$<i>34<i>120<i>56<i>56');
 
-ok($term = KorAP::XML::Field::MultiTerm->new(
+ok($term = KorAP::XML::Index::MultiTerm->new(
   term => 'Baum'
 ), 'Create new object');
 
@@ -36,7 +36,7 @@
 is($term->payload, undef);
 is($term->to_string, 'Baum');
 
-ok($term = KorAP::XML::Field::MultiTerm->new(
+ok($term = KorAP::XML::Index::MultiTerm->new(
   term => 'Ba#um'
 ), 'Create new object');
 
@@ -48,7 +48,7 @@
 is($term->payload, undef);
 is($term->to_string, 'Ba\#um');
 
-ok($term = KorAP::XML::Field::MultiTerm->new(
+ok($term = KorAP::XML::Index::MultiTerm->new(
   term => 'Ba#u$m',
   payload => '<i>45'
 ), 'Create new object');
