diff --git a/lib/KorAP/XML/Annotation/Base/Paragraphs.pm b/lib/KorAP/XML/Annotation/Base/Paragraphs.pm
index 235e2ff..694dfc8 100644
--- a/lib/KorAP/XML/Annotation/Base/Paragraphs.pm
+++ b/lib/KorAP/XML/Annotation/Base/Paragraphs.pm
@@ -10,13 +10,13 @@
     layer => 'paragraph',
     cb => sub {
       my ($stream, $span) = @_;
-      my $mtt = $stream->pos($span->p_start);
+      my $mtt = $stream->pos($span->get_p_start);
 
       $mtt->add(
         term => '<>:base/s:p',
-        o_start => $span->o_start,
-        o_end => $span->o_end,
-        p_end => $span->p_end,
+        o_start => $span->get_o_start,
+        o_end => $span->get_o_end,
+        p_end => $span->get_p_end,
         payload => '<b>1',
         pti => 64
       );
diff --git a/lib/KorAP/XML/Annotation/Base/Sentences.pm b/lib/KorAP/XML/Annotation/Base/Sentences.pm
index 1d66c8a..852146f 100644
--- a/lib/KorAP/XML/Annotation/Base/Sentences.pm
+++ b/lib/KorAP/XML/Annotation/Base/Sentences.pm
@@ -12,33 +12,23 @@
     layer => 'sentences',
     cb => sub {
       my ($stream, $span) = @_;
-      my $mtt = $stream->pos($span->p_start);
+      my $mtt = $stream->pos($span->get_p_start);
 
-      $first = [$span->p_start, $span->o_start] unless defined $first;
+      $first = [$span->get_p_start, $span->get_o_start] unless defined $first;
       $mtt->add(
         term => '<>:base/s:s',
-        o_start => $span->o_start,
-        o_end => $span->o_end,
-        p_end => $span->p_end,
+        o_start => $span->get_o_start,
+        o_end => $span->get_o_end,
+        p_end => $span->get_p_end,
         payload => '<b>2',
         pti => 64
       );
-      $last_p = $span->p_end;
-      $last_o = $span->o_end;
+      $last_p = $span->get_p_end;
+      $last_o = $span->get_o_end;
       $i++;
     }
   ) or return;
 
-  #  my $mt = $$self->stream->pos($first->[0]);
-  #  $mt->add(
-  #    term => '<>:base/s:t',
-  #    o_start => $first->[1],
-  #    p_end => $last_p,
-  #    o_end => $last_o,
-  #    payload => '<b>0',
-  #    pti => 64
-  #  );
-
   $$self->stream->add_meta('base/sentences', '<i>' . $i);
 
   return 1;
diff --git a/lib/KorAP/XML/Annotation/CMC/Morpho.pm b/lib/KorAP/XML/Annotation/CMC/Morpho.pm
index 731950a..29c563a 100644
--- a/lib/KorAP/XML/Annotation/CMC/Morpho.pm
+++ b/lib/KorAP/XML/Annotation/CMC/Morpho.pm
@@ -9,9 +9,9 @@
     layer => 'morpho',
     cb => sub {
       my ($stream, $token) = @_;
-      my $mtt = $stream->pos($token->pos);
+      my $mtt = $stream->pos($token->get_pos);
 
-      my $content = $token->hash->{fs}->{f};
+      my $content = $token->get_hash->{fs}->{f};
 
       my $array = $content->{fs}->{f} or return;
 
@@ -42,6 +42,6 @@
 
 sub layer_info {
   ['cmc/l=tokens', 'cmc/p=tokens']
-}
+};
 
 1;
diff --git a/lib/KorAP/XML/Annotation/Connexor/Morpho.pm b/lib/KorAP/XML/Annotation/Connexor/Morpho.pm
index 9f79305..6500ab6 100644
--- a/lib/KorAP/XML/Annotation/Connexor/Morpho.pm
+++ b/lib/KorAP/XML/Annotation/Connexor/Morpho.pm
@@ -27,9 +27,9 @@
     layer => 'morpho',
     cb => sub {
       my ($stream, $token) = @_;
-      my $mtt = $stream->pos($token->pos);
+      my $mtt = $stream->pos($token->get_pos);
 
-      my $content = $token->hash->{fs}->{f};
+      my $content = $token->get_hash->{fs}->{f};
 
       my $found;
 
@@ -37,39 +37,38 @@
 
       for my $f (@$features) {
 
-      # Lemma
-	if (($f->{-name} eq 'lemma') && ($found = $f->{'#text'})) {
-	  if (index($found, "\N{U+00a0}") >= 0) {
-	    foreach (split(/\x{00A0}/, $found)) {
-	      $mtt->add(
-		term => 'cnx/l:' . $_
-	      );
-	    }
-	  }
-	  else {
-	    $mtt->add(
-	      term => 'cnx/l:' . $found
-	    );
-	  };
-	}
+        # Lemma
+        if (($f->{-name} eq 'lemma') && ($found = $f->{'#text'})) {
+          if (index($found, "\N{U+00a0}") >= 0) {
+            foreach (split(/\x{00A0}/, $found)) {
+              $mtt->add(
+                term => 'cnx/l:' . $_
+              );
+            }
+          }
+          else {
+            $mtt->add(
+              term => 'cnx/l:' . $found
+            );
+          };
+        }
 
-	# POS
-	elsif (($f->{-name} eq 'pos') && ($found = $f->{'#text'})) {
-	  $mtt->add(
-	    term => 'cnx/p:' . $found
-	  );
-
-	}
-	# MSD
-	# This could follow
-	# http://www.ids-mannheim.de/cosmas2/projekt/referenz/connexor/morph.html
-	elsif (($f->{-name} eq 'msd') && ($found = $f->{'#text'})) {
-	  foreach (split(':', $found)) {
-	    $mtt->add(
-	      term => 'cnx/m:' . $_
-	    );
-	  };
-	};
+        # POS
+        elsif (($f->{-name} eq 'pos') && ($found = $f->{'#text'})) {
+          $mtt->add(
+            term => 'cnx/p:' . $found
+          );
+        }
+        # MSD
+        # This could follow
+        # http://www.ids-mannheim.de/cosmas2/projekt/referenz/connexor/morph.html
+        elsif (($f->{-name} eq 'msd') && ($found = $f->{'#text'})) {
+          foreach (split(':', $found)) {
+            $mtt->add(
+              term => 'cnx/m:' . $_
+            );
+          };
+        };
       };
     }
   ) or return;
@@ -78,7 +77,7 @@
 };
 
 sub layer_info {
-    ['cnx/l=tokens', 'cnx/p=tokens', 'cnx/m=tokens'];
+  ['cnx/l=tokens', 'cnx/p=tokens', 'cnx/m=tokens'];
 };
 
 
diff --git a/lib/KorAP/XML/Annotation/Connexor/Phrase.pm b/lib/KorAP/XML/Annotation/Connexor/Phrase.pm
index 1fb5901..754cf4f 100644
--- a/lib/KorAP/XML/Annotation/Connexor/Phrase.pm
+++ b/lib/KorAP/XML/Annotation/Connexor/Phrase.pm
@@ -10,22 +10,22 @@
     cb => sub {
       my ($stream, $span) = @_;
 
-      my $content = $span->hash->{fs}->{f};
+      my $content = $span->get_hash->{fs}->{f};
 
       return if $content->{-name} ne 'pos';
 
       my $type = $content->{'#text'};
 
       if ($type) {
-	my $mtt = $stream->pos($span->p_start);
-	$mtt->add(
-	  term => '<>:cnx/c:' . $type,
-	  o_start => $span->o_start,
-	  o_end => $span->o_end,
-	  p_end => $span->p_end,
-	  pti => 64,
-	  payload => '<b>0' # Pseudo-depth
-	);
+        my $mtt = $stream->pos($span->get_p_start);
+        $mtt->add(
+          term => '<>:cnx/c:' . $type,
+          o_start => $span->get_o_start,
+          o_end => $span->get_o_end,
+          p_end => $span->get_p_end,
+          pti => 64,
+          payload => '<b>0' # Pseudo-depth
+        );
       };
     }
   ) or return;
diff --git a/lib/KorAP/XML/Annotation/Connexor/Sentences.pm b/lib/KorAP/XML/Annotation/Connexor/Sentences.pm
index 52798b4..b36956f 100644
--- a/lib/KorAP/XML/Annotation/Connexor/Sentences.pm
+++ b/lib/KorAP/XML/Annotation/Connexor/Sentences.pm
@@ -10,14 +10,14 @@
     layer => 'sentences',
     cb => sub {
       my ($stream, $span) = @_;
-      my $mtt = $stream->pos($span->p_start);
+      my $mtt = $stream->pos($span->get_p_start);
       $mtt->add(
-	term => '<>:cnx/s:s',
-	o_start => $span->o_start,
-	o_end => $span->o_end,
-	p_end => $span->p_end,
-	pti => 64,
-	payload => '<b>0'
+        term => '<>:cnx/s:s',
+        o_start => $span->get_o_start,
+        o_end => $span->get_o_end,
+        p_end => $span->get_p_end,
+        pti => 64,
+        payload => '<b>0'
       );
       $i++;
     }
diff --git a/lib/KorAP/XML/Annotation/Connexor/Syntax.pm b/lib/KorAP/XML/Annotation/Connexor/Syntax.pm
index a75e4cd..171e0ec 100644
--- a/lib/KorAP/XML/Annotation/Connexor/Syntax.pm
+++ b/lib/KorAP/XML/Annotation/Connexor/Syntax.pm
@@ -9,17 +9,17 @@
     layer => 'syntax',
     cb => sub {
       my ($stream, $token) = @_;
-      my $mtt = $stream->pos($token->pos);
+      my $mtt = $stream->pos($token->get_pos);
       my $found;
-      my $spans = $token->hash->{fs}->{f}->{fs}->{f};
+      my $spans = $token->get_hash->{fs}->{f}->{fs}->{f};
 
       # syntax
       foreach (@$spans) {
-	if (($_->{-name} eq 'pos') && ($found = $_->{'#text'})) {
-	  $mtt->add(
-	    term => 'cnx/syn:' . $found
-	  );
-	};
+        if (($_->{-name} eq 'pos') && ($found = $_->{'#text'})) {
+          $mtt->add(
+            term => 'cnx/syn:' . $found
+          );
+        };
       };
     }) or return;
 
diff --git a/lib/KorAP/XML/Annotation/CoreNLP/Constituency.pm b/lib/KorAP/XML/Annotation/CoreNLP/Constituency.pm
index 8b712e5..849a3c7 100644
--- a/lib/KorAP/XML/Annotation/CoreNLP/Constituency.pm
+++ b/lib/KorAP/XML/Annotation/CoreNLP/Constituency.pm
@@ -17,26 +17,26 @@
     cb => sub {
       my ($stream, $span) = @_;
 
-      $corenlp_const{$span->id} = $span;
+      $corenlp_const{$span->get_id} = $span;
 
       # Maybe root
-      $corenlp_const_root->insert($span->id);
+      $corenlp_const_root->insert($span->get_id);
 
-      my $rel = $span->hash->{rel} or return;
+      my $rel = $span->get_hash->{rel} or return;
 
       # Make rel an array in case it's not
       $rel = [$rel] unless ref $rel eq 'ARRAY';
 
       foreach (@$rel) {
-	if ($_->{-label} eq 'dominates') {
-	  if ($_->{-target}) {
-	    $corenlp_const_noroot->insert($_->{-target});
-	  }
-	  elsif (my $uri = $_->{-uri}) {
-	    $uri =~ s/^morpho\.xml#//;
-	    $corenlp_const_noroot->insert($uri);
-	  };
-	};
+        if ($_->{-label} eq 'dominates') {
+          if ($_->{-target}) {
+            $corenlp_const_noroot->insert($_->{-target});
+          }
+          elsif (my $uri = $_->{-uri}) {
+            $uri =~ s/^morpho\.xml#//;
+            $corenlp_const_noroot->insert($uri);
+          };
+        };
       };
     }
   ) or return;
@@ -50,9 +50,9 @@
   $add_const = sub {
     my $span = shift;
     my $level = shift;
-    my $mtt = $stream->pos($span->p_start);
+    my $mtt = $stream->pos($span->get_p_start);
 
-    my $content = $span->hash;
+    my $content = $span->get_hash;
     my $f = $content->{fs}->{f};
     return unless $f->{-name} eq 'const';
 
@@ -61,9 +61,9 @@
     # $type is now NPA, NP, NUM ...
     my %term = (
       term => '<>:corenlp/c:' . $type,
-      o_start => $span->o_start,
-      o_end => $span->o_end,
-      p_end => $span->p_end,
+      o_start => $span->get_o_start,
+      o_end => $span->get_o_end,
+      p_end => $span->get_p_end,
       pti => 64
     );
 
diff --git a/lib/KorAP/XML/Annotation/CoreNLP/Morpho.pm b/lib/KorAP/XML/Annotation/CoreNLP/Morpho.pm
index 6711fe0..97a139f 100644
--- a/lib/KorAP/XML/Annotation/CoreNLP/Morpho.pm
+++ b/lib/KorAP/XML/Annotation/CoreNLP/Morpho.pm
@@ -9,16 +9,16 @@
     layer => 'morpho',
     cb => sub {
       my ($stream, $token) = @_;
-      my $mtt = $stream->pos($token->pos);
+      my $mtt = $stream->pos($token->get_pos);
 
-      my $content = $token->hash->{fs}->{f} or return;
+      my $content = $token->get_hash->{fs}->{f} or return;
       $content = $content->{fs}->{f};
 
       # syntax
       if (($content->{-name} eq 'pos') && ($content->{'#text'})) {
-	$mtt->add(
-	  term => 'corenlp/p:' . $content->{'#text'}
-	);
+        $mtt->add(
+          term => 'corenlp/p:' . $content->{'#text'}
+        );
       };
     }) or return;
 
diff --git a/lib/KorAP/XML/Annotation/CoreNLP/NamedEntities.pm b/lib/KorAP/XML/Annotation/CoreNLP/NamedEntities.pm
index 317b9e9..0a9862e 100644
--- a/lib/KorAP/XML/Annotation/CoreNLP/NamedEntities.pm
+++ b/lib/KorAP/XML/Annotation/CoreNLP/NamedEntities.pm
@@ -14,19 +14,19 @@
     layer => $model // lc('NamedEntities'),
     cb => sub {
       my ($stream, $token) = @_;
-      my $mtt = $stream->pos($token->pos);
+      my $mtt = $stream->pos($token->get_pos);
 
-      my $content = $token->hash->{fs}->{f} or return;
+      my $content = $token->get_hash->{fs}->{f} or return;
       my $found;
 
       if (($content->{-name} eq 'ne') &&
-	    ($found = $content->{fs}) &&
-	      ($found = $found->{f}) &&
-		($found->{-name} eq 'ent') &&
-		  ($found = $found->{'#text'})) {
-	$mtt->add(
-	  term => 'corenlp/ne:' . $found
-	);
+            ($found = $content->{fs}) &&
+            ($found = $found->{f}) &&
+            ($found->{-name} eq 'ent') &&
+            ($found = $found->{'#text'})) {
+        $mtt->add(
+          term => 'corenlp/ne:' . $found
+        );
       };
     }) or return;
 
@@ -34,7 +34,7 @@
 };
 
 sub layer_info {
-    ['corenlp/ne=tokens'];
+  ['corenlp/ne=tokens'];
 };
 
 1;
diff --git a/lib/KorAP/XML/Annotation/CoreNLP/Sentences.pm b/lib/KorAP/XML/Annotation/CoreNLP/Sentences.pm
index f643526..e6b4cc0 100644
--- a/lib/KorAP/XML/Annotation/CoreNLP/Sentences.pm
+++ b/lib/KorAP/XML/Annotation/CoreNLP/Sentences.pm
@@ -10,14 +10,14 @@
     layer => 'sentences',
     cb => sub {
       my ($stream, $span) = @_;
-      my $mtt = $stream->pos($span->p_start);
+      my $mtt = $stream->pos($span->get_p_start);
       $mtt->add(
-	term => '<>:corenlp/s:s',
-	o_start => $span->o_start,
-	o_end => $span->o_end,
-	p_end => $span->p_end,
-	pti => 64,
-	payload => '<b>0' # Could also be 2 for t/p/s
+        term => '<>:corenlp/s:s',
+        o_start => $span->get_o_start,
+        o_end => $span->get_o_end,
+        p_end => $span->get_p_end,
+        pti => 64,
+        payload => '<b>0' # Could also be 2 for t/p/s
       );
       $i++;
     }
diff --git a/lib/KorAP/XML/Annotation/DGD/Morpho.pm b/lib/KorAP/XML/Annotation/DGD/Morpho.pm
index 49ccba8..0aed712 100644
--- a/lib/KorAP/XML/Annotation/DGD/Morpho.pm
+++ b/lib/KorAP/XML/Annotation/DGD/Morpho.pm
@@ -10,10 +10,10 @@
     layer => 'annot',
     cb => sub {
       my ($stream, $token) = @_;
-      my $mtt = $stream->pos($token->pos);
-      my $tui = $stream->tui($token->pos);
+      my $mtt = $stream->pos($token->get_pos);
+      my $tui = $stream->tui($token->get_pos);
 
-      my $content = $token->hash->{fs}->{f} or return;
+      my $content = $token->get_hash->{fs}->{f} or return;
 
       $content = $content->{fs}->{f};
       $content = [$content] unless ref $content eq 'ARRAY';
diff --git a/lib/KorAP/XML/Annotation/DGD/Structure.pm b/lib/KorAP/XML/Annotation/DGD/Structure.pm
index 4b49349..0643caf 100644
--- a/lib/KorAP/XML/Annotation/DGD/Structure.pm
+++ b/lib/KorAP/XML/Annotation/DGD/Structure.pm
@@ -23,7 +23,7 @@
       my ($stream, $span) = @_;
 
       # Read feature
-      my $feature = $span->hash->{fs}->{f};
+      my $feature = $span->get_hash->{fs}->{f};
       my $attrs;
 
       # Get attributes
@@ -38,10 +38,10 @@
 
       # Check only for anchors
       if ($name eq 'anchor') {
-        push @milestones, [ $span->p_start, $span->o_start ];
+        push @milestones, [ $span->get_p_start, $span->get_o_start ];
       } else {
-        $last_p = $span->p_start;
-        $last_o = $span->o_end;
+        $last_p = $span->get_p_start;
+        $last_o = $span->get_o_end;
       }
     }
   ) or return;
diff --git a/lib/KorAP/XML/Annotation/DRuKoLa/Morpho.pm b/lib/KorAP/XML/Annotation/DRuKoLa/Morpho.pm
index 4cf6d50..efdf5ed 100644
--- a/lib/KorAP/XML/Annotation/DRuKoLa/Morpho.pm
+++ b/lib/KorAP/XML/Annotation/DRuKoLa/Morpho.pm
@@ -9,9 +9,9 @@
     layer => 'morpho',
     cb => sub {
       my ($stream, $token) = @_;
-      my $mtt = $stream->pos($token->pos);
+      my $mtt = $stream->pos($token->get_pos);
 
-      my $content = $token->hash->{fs}->{f};
+      my $content = $token->get_hash->{fs}->{f};
 
       my $found;
 
diff --git a/lib/KorAP/XML/Annotation/DeReKo/Structure.pm b/lib/KorAP/XML/Annotation/DeReKo/Structure.pm
index d56173a..c60a3b4 100644
--- a/lib/KorAP/XML/Annotation/DeReKo/Structure.pm
+++ b/lib/KorAP/XML/Annotation/DeReKo/Structure.pm
@@ -16,10 +16,10 @@
       my $tui = 0;
 
       # Get starting position
-      my $p_start = $span->p_start;
+      my $p_start = $span->get_p_start;
 
       # Read feature
-      my $feature = $span->hash->{fs}->{f};
+      my $feature = $span->get_hash->{fs}->{f};
       my $attrs;
 
       # Get attributes
@@ -46,19 +46,19 @@
         return;
       };
 
-      my $p_end = $span->p_end;
+      my $p_end = $span->get_p_end;
 
       # Add structure
       my $mt = $mtt->add(
         term    => '<>:dereko/s:' . $name,
-        o_start => $span->o_start,
-        o_end   => $span->o_end,
+        o_start => $span->get_o_start,
+        o_end   => $span->get_o_end,
         p_start => $p_start,
         p_end   => $p_end,
-        pti     => $span->milestone ? 65 : 64,
+        pti     => $span->get_milestone ? 65 : 64,
       );
 
-      my $level = $span->hash->{'-l'};
+      my $level = $span->get_hash->{'-l'};
       if ($level || $tui) {
         my $pl;
         $pl .= '<b>' . ($level ? $level - 1 : 0);
@@ -95,7 +95,7 @@
           if (my $nr = first { $_->{-name} eq 'n' } @$attrs) {
             if (($nr = $nr->{'#text'}) && looks_like_number($nr)) {
               my $mt2 = $mtt->add('~:base/s:pb');
-              $mt2->set_payload('<i>' . $nr . '<i>' . $span->o_start);
+              $mt2->set_payload('<i>' . $nr . '<i>' . $span->get_o_start);
               $mt2->set_stored_offsets(0);
             };
           };
@@ -115,7 +115,7 @@
             p_start => $p_start,
             pti     => 17,
             payload => '<s>' . $tui .
-              ($span->milestone ? '' : '<i>' . $p_end)
+              ($span->get_milestone ? '' : '<i>' . $p_end)
             );
         };
       };
diff --git a/lib/KorAP/XML/Annotation/Glemm/Morpho.pm b/lib/KorAP/XML/Annotation/Glemm/Morpho.pm
index c4ccea5..61f4d9b 100644
--- a/lib/KorAP/XML/Annotation/Glemm/Morpho.pm
+++ b/lib/KorAP/XML/Annotation/Glemm/Morpho.pm
@@ -12,40 +12,40 @@
     cb => sub {
       my ($stream, $token) = @_;
 
-      my $mtt = $stream->pos($token->pos);
+      my $mtt = $stream->pos($token->get_pos);
 
-      my $content = $token->hash->{'fs'}->{'f'} or return;
+      my $content = $token->get_hash->{'fs'}->{'f'} or return;
 
       # All interpretations
       foreach (ref $content eq 'ARRAY' ? @$content : $content) {
 
-	# All features
-	$content = $_->{'fs'}->{'f'};
+        # All features
+        $content = $_->{'fs'}->{'f'};
 
-	my $lemma;
-	my ($composition, $derivation) = (0,0);
+        my $lemma;
+        my ($composition, $derivation) = (0,0);
 
-	# Iterate over
-	foreach (ref $content eq 'ARRAY' ? @$content : $content) {
+        # Iterate over
+        foreach (ref $content eq 'ARRAY' ? @$content : $content) {
 
-	  # syntax
-	  if (($_->{-name} eq 'lemma') && $_->{'#text'}) {
-	    $lemma = $_->{'#text'};
-	  }
-	  elsif ($_->{-name} eq 'composition' && $_->{'#text'} eq 'true') {
-	    $composition = 1;
-	  }
-	  elsif ($_->{-name} eq 'derivation' && $_->{'#text'} eq 'true') {
-	    $derivation = 1;
-	  };
-	};
+          # syntax
+          if (($_->{-name} eq 'lemma') && $_->{'#text'}) {
+            $lemma = $_->{'#text'};
+          }
+          elsif ($_->{-name} eq 'composition' && $_->{'#text'} eq 'true') {
+            $composition = 1;
+          }
+          elsif ($_->{-name} eq 'derivation' && $_->{'#text'} eq 'true') {
+            $derivation = 1;
+          };
+        };
 
-	$mtt->add(
-	  term => 'glemm/l:' .
-	    ($composition ? '+' : '_') .
-	      ($derivation ? '+' : '_') .
-		$lemma
-	) if $lemma;
+        $mtt->add(
+          term => 'glemm/l:' .
+            ($composition ? '+' : '_') .
+            ($derivation ? '+' : '_') .
+            $lemma
+          ) if $lemma;
       };
     }) or return;
 
@@ -53,7 +53,7 @@
 };
 
 sub layer_info {
-    ['glemm/l=tokens'];
+  ['glemm/l=tokens'];
 };
 
 1;
diff --git a/lib/KorAP/XML/Annotation/HNC/Morpho.pm b/lib/KorAP/XML/Annotation/HNC/Morpho.pm
index 8128015..4b2e5f4 100644
--- a/lib/KorAP/XML/Annotation/HNC/Morpho.pm
+++ b/lib/KorAP/XML/Annotation/HNC/Morpho.pm
@@ -10,9 +10,9 @@
     cb => sub {
       my ($stream, $token) = @_;
 
-      my $mtt = $stream->pos($token->pos);
+      my $mtt = $stream->pos($token->get_pos);
 
-      my $content = $token->hash->{fs}->{f};
+      my $content = $token->get_hash->{fs}->{f};
 
       my $found;
 
diff --git a/lib/KorAP/XML/Annotation/LWC/Dependency.pm b/lib/KorAP/XML/Annotation/LWC/Dependency.pm
index ffc3875..b7532f4 100644
--- a/lib/KorAP/XML/Annotation/LWC/Dependency.pm
+++ b/lib/KorAP/XML/Annotation/LWC/Dependency.pm
@@ -14,10 +14,10 @@
       my ($stream, $source, $tokens) = @_;
 
       # Get MultiTermToken from stream for source
-      my $mtt = $stream->pos($source->pos);
+      my $mtt = $stream->pos($source->get_pos);
 
       # Serialized information from token
-      my $content = $source->hash;
+      my $content = $source->get_hash;
 
       # Get relation information
       my $rel = $content->{rel};
@@ -42,18 +42,18 @@
             term => '>:lwc/d:' . $label,
             pti => 32, # term-to-term relation
             payload =>
-              '<i>' . $target->pos # . # right part token position
+              '<i>' . $target->get_pos # . # right part token position
               # '<s>0' . # $source_term->tui . # left part tui
               # '<s>0' # . $target_term->tui # right part tui
             );
 
-          my $target_mtt = $stream->pos($target->pos);
+          my $target_mtt = $stream->pos($target->get_pos);
 
           $target_mtt->add(
             term => '<:lwc/d:' . $label,
             pti => 32, # term-to-term relation
             payload =>
-              '<i>' . $source->pos # . # left part token position
+              '<i>' . $source->get_pos # . # left part token position
               # '<s>0' . # $source_term->tui . # left part tui
               # '<s>0' # . $target_term->tui # right part tui
             );
@@ -66,23 +66,23 @@
             term => '>:lwc/d:' . $label,
             pti => 33, # term-to-element relation
             payload =>
-              '<i>' . $target->o_start . # end position
-              '<i>' . $target->o_end . # end position
-              '<i>' . $target->p_start . # right part start position
-              '<i>' . $target->p_end # . # right part end position
+              '<i>' . $target->get_o_start . # end position
+              '<i>' . $target->get_o_end . # end position
+              '<i>' . $target->get_p_start . # right part start position
+              '<i>' . $target->get_p_end # . # right part end position
               # '<s>0' . # $source_term->tui . # left part tui
               # '<s>0' # . $target_span->tui # right part tui
             );
 
-          my $target_mtt = $stream->pos($target->p_start);
+          my $target_mtt = $stream->pos($target->get_p_start);
           $target_mtt->add(
             term => '<:lwc/d:' . $label,
             pti => 34, # element-to-term relation
             payload =>
-              '<i>' . $target->o_start . # end position
-              '<i>' . $target->o_end . # end position
-              '<i>' . $target->p_end . # right part end position
-              '<i>' . $source->pos # . # left part token position
+              '<i>' . $target->get_o_start . # end position
+              '<i>' . $target->get_o_end . # end position
+              '<i>' . $target->get_p_end . # right part end position
+              '<i>' . $source->get_pos # . # left part token position
               #	'<s>0' . # $source_term->tui . # left part tui
               # '<s>0' # . $target_span->tui # right part tui
             );
diff --git a/lib/KorAP/XML/Annotation/MDParser/Dependency.pm b/lib/KorAP/XML/Annotation/MDParser/Dependency.pm
index f8a14b6..8816f1f 100644
--- a/lib/KorAP/XML/Annotation/MDParser/Dependency.pm
+++ b/lib/KorAP/XML/Annotation/MDParser/Dependency.pm
@@ -17,10 +17,10 @@
       my ($stream, $source, $tokens) = @_;
 
       # Get MultiTermToken from stream for source
-      my $mtt = $stream->pos($source->pos);
+      my $mtt = $stream->pos($source->get_pos);
 
       # Serialized information from token
-      my $content = $source->hash;
+      my $content = $source->get_hash;
 
       # Get relation information
       my $rel = $content->{rel};
@@ -28,72 +28,71 @@
 
       # Iterate over relations
       foreach (@$rel) {
-	my $label = $_->{-label};
+        my $label = $_->{-label};
 
-	#my $target = $stream->tui($source->pos);
-	my $from = $_->{span}->{-from};
-	my $to   = $_->{span}->{-to};
+        #my $target = $stream->tui($source->pos);
+        my $from = $_->{span}->{-from};
+        my $to   = $_->{span}->{-to};
 
-	# Target
-	my $target = $tokens->token($from, $to);
+        # Target
+        my $target = $tokens->token($from, $to);
 
-	# Relation is term-to-term with a found target!
-	if ($target) {
+        # Relation is term-to-term with a found target!
+        if ($target) {
 
-	  # Unary means, it refers to itself!
-	  $mtt->add(
-	    term => '>:mdp/d:' . $label,
-	    pti => 32, # term-to-term relation
-	    payload =>
-	      '<i>' . $target->pos # . # right part token position
-		# '<s>0' . # $source_term->tui . # left part tui
-		# '<s>0' # . $target_term->tui # right part tui
-	    );
+          # Unary means, it refers to itself!
+          $mtt->add(
+            term => '>:mdp/d:' . $label,
+            pti => 32, # term-to-term relation
+            payload =>
+              '<i>' . $target->get_pos # . # right part token position
+              # '<s>0' . # $source_term->tui . # left part tui
+              # '<s>0' # . $target_term->tui # right part tui
+            );
 
-	  my $target_mtt = $stream->pos($target->pos);
+          my $target_mtt = $stream->pos($target->get_pos);
 
-	  $target_mtt->add(
-	    term => '<:mdp/d:' . $label,
-	    pti => 32, # term-to-term relation
-	    payload =>
-	      '<i>' . $source->pos # . # left part token position
-		# '<s>0' . # $source_term->tui . # left part tui
-		# '<s>0' # . $target_term->tui # right part tui
-	    );
-	}
+          $target_mtt->add(
+            term => '<:mdp/d:' . $label,
+            pti => 32, # term-to-term relation
+            payload =>
+              '<i>' . $source->get_pos # . # left part token position
+              # '<s>0' . # $source_term->tui . # left part tui
+              # '<s>0' # . $target_term->tui # right part tui
+            );
+        }
 
-	# Relation is possibly term-to-element with a found target!
-	elsif ($target = $tokens->span($from, $to)) {
-	  $mtt->add(
-	    term => '>:mdp/d:' . $label,
-	    pti => 33, # term-to-element relation
-	    payload =>
-	      '<i>' . $target->o_start . # end position
-		'<i>' . $target->o_end . # end position
-		  '<i>' . $target->p_start . # right part start position
-		    '<i>' . $target->p_end # . # right part end position
-		      # '<s>0' . # $source_term->tui . # left part tui
-		      # '<s>0' # . $target_span->tui # right part tui
-	    );
+        # Relation is possibly term-to-element with a found target!
+        elsif ($target = $tokens->span($from, $to)) {
+          $mtt->add(
+            term => '>:mdp/d:' . $label,
+            pti => 33, # term-to-element relation
+            payload =>
+              '<i>' . $target->get_o_start . # end position
+              '<i>' . $target->get_o_end . # end position
+              '<i>' . $target->get_p_start . # right part start position
+              '<i>' . $target->get_p_end # . # right part end position
+              # '<s>0' . # $source_term->tui . # left part tui
+              # '<s>0' # . $target_span->tui # right part tui
+            );
 
-	  my $target_mtt = $stream->pos($target->p_start);
-	  $target_mtt->add(
-	    term => '<:mdp/d:' . $label,
-	    pti => 34, # element-to-term relation
-	    payload =>
-	      '<i>' . $target->o_start . # end position
-		'<i>' . $target->o_end . # end position
-		  '<i>' . $target->p_end . # right part end position
-		    '<i>' . $source->pos # . # left part token position
-		      #	'<s>0' . # $source_term->tui . # left part tui
-		      # '<s>0' # . $target_span->tui # right part tui
-
-	    );
-	}
-	else {
-	  use Data::Dumper;
-	  $$self->log->warn('Relation currently not supported: ' . Dumper($content));
-	};
+          my $target_mtt = $stream->pos($target->get_p_start);
+          $target_mtt->add(
+            term => '<:mdp/d:' . $label,
+            pti => 34, # element-to-term relation
+            payload =>
+              '<i>' . $target->get_o_start . # end position
+              '<i>' . $target->get_o_end . # end position
+              '<i>' . $target->get_p_end . # right part end position
+              '<i>' . $source->get_pos # . # left part token position
+              #	'<s>0' . # $source_term->tui . # left part tui
+              # '<s>0' # . $target_span->tui # right part tui
+            );
+        }
+        else {
+          use Data::Dumper;
+          $$self->log->warn('Relation currently not supported: ' . Dumper($content));
+        };
       };
     }) or return;
 
diff --git a/lib/KorAP/XML/Annotation/Malt/Dependency.pm b/lib/KorAP/XML/Annotation/Malt/Dependency.pm
index a7bd31b..8ea01a5 100644
--- a/lib/KorAP/XML/Annotation/Malt/Dependency.pm
+++ b/lib/KorAP/XML/Annotation/Malt/Dependency.pm
@@ -17,10 +17,10 @@
       my ($stream, $source, $tokens) = @_;
 
       # Get MultiTermToken from stream for source
-      my $mtt = $stream->pos($source->pos);
+      my $mtt = $stream->pos($source->get_pos);
 
       # Serialized information from token
-      my $content = $source->hash;
+      my $content = $source->get_hash;
 
       # Get relation information
       my $rel = $content->{rel};
@@ -28,72 +28,71 @@
 
       # Iterate over relations
       foreach (@$rel) {
-	my $label = $_->{-label};
+        my $label = $_->{-label};
 
-	#my $target = $stream->tui($source->pos);
-	my $from = $_->{span}->{-from};
-	my $to   = $_->{span}->{-to};
+        #my $target = $stream->tui($source->pos);
+        my $from = $_->{span}->{-from};
+        my $to   = $_->{span}->{-to};
 
-	# Target
-	my $target = $tokens->token($from, $to);
+        # Target
+        my $target = $tokens->token($from, $to);
 
-	# Relation is term-to-term with a found target!
-	if ($target) {
+        # Relation is term-to-term with a found target!
+        if ($target) {
 
-	  # Unary means, it refers to itself!
-	  $mtt->add(
-	    term => '>:malt/d:' . $label,
-	    pti => 32, # term-to-term relation
-	    payload =>
-	      '<i>' . $target->pos # . # right part token position
-		# '<s>0' . # $source_term->tui . # left part tui
-		# '<s>0' # . $target_term->tui # right part tui
-	    );
+          # Unary means, it refers to itself!
+          $mtt->add(
+            term => '>:malt/d:' . $label,
+            pti => 32, # term-to-term relation
+            payload =>
+              '<i>' . $target->get_pos # . # right part token position
+              # '<s>0' . # $source_term->tui . # left part tui
+              # '<s>0' # . $target_term->tui # right part tui
+            );
 
-	  my $target_mtt = $stream->pos($target->pos);
+          my $target_mtt = $stream->pos($target->get_pos);
 
-	  $target_mtt->add(
-	    term => '<:malt/d:' . $label,
-	    pti => 32, # term-to-term relation
-	    payload =>
-	      '<i>' . $source->pos # . # left part token position
-		# '<s>0' . # $source_term->tui . # left part tui
-		# '<s>0' # . $target_term->tui # right part tui
-	    );
-	}
+          $target_mtt->add(
+            term => '<:malt/d:' . $label,
+            pti => 32, # term-to-term relation
+            payload =>
+              '<i>' . $source->get_pos # . # left part token position
+              # '<s>0' . # $source_term->tui . # left part tui
+              # '<s>0' # . $target_term->tui # right part tui
+            );
+        }
 
-	# Relation is possibly term-to-element with a found target!
-	elsif ($target = $tokens->span($from, $to)) {
-	  $mtt->add(
-	    term => '>:malt/d:' . $label,
-	    pti => 33, # term-to-element relation
-	    payload =>
-	      '<i>' . $target->o_start . # end position
-		'<i>' . $target->o_end . # end position
-		  '<i>' . $target->p_start . # right part start position
-		    '<i>' . $target->p_end # . # right part end position
-		      # '<s>0' . # $source_term->tui . # left part tui
-		      # '<s>0' # . $target_span->tui # right part tui
-	    );
+        # Relation is possibly term-to-element with a found target!
+        elsif ($target = $tokens->span($from, $to)) {
+          $mtt->add(
+            term => '>:malt/d:' . $label,
+            pti => 33, # term-to-element relation
+            payload =>
+              '<i>' . $target->get_o_start . # end position
+              '<i>' . $target->get_o_end . # end position
+              '<i>' . $target->get_p_start . # right part start position
+              '<i>' . $target->get_p_end # . # right part end position
+              # '<s>0' . # $source_term->tui . # left part tui
+              # '<s>0' # . $target_span->tui # right part tui
+            );
 
-	  my $target_mtt = $stream->pos($target->p_start);
-	  $target_mtt->add(
-	    term => '<:malt/d:' . $label,
-	    pti => 34, # element-to-term relation
-	    payload =>
-	      '<i>' . $target->o_start . # end position
-		'<i>' . $target->o_end . # end position
-		  '<i>' . $target->p_end . # right part end position
-		    '<i>' . $source->pos # . # left part token position
-		      #	'<s>0' . # $source_term->tui . # left part tui
-		      # '<s>0' # . $target_span->tui # right part tui
-
-	    );
-	}
-	else {
-	  use Data::Dumper;
-	  $$self->log->warn('Relation currently not supported: ' . Dumper($content));
-	};
+          my $target_mtt = $stream->pos($target->get_p_start);
+          $target_mtt->add(
+            term => '<:malt/d:' . $label,
+            pti => 34, # element-to-term relation
+            payload =>
+              '<i>' . $target->get_o_start . # end position
+              '<i>' . $target->get_o_end . # end position
+              '<i>' . $target->get_p_end . # right part end position
+              '<i>' . $source->get_pos # . # left part token position
+              #	'<s>0' . # $source_term->tui . # left part tui
+              # '<s>0' # . $target_span->tui # right part tui
+            );
+        }
+        else {
+          use Data::Dumper;
+          $$self->log->warn('Relation currently not supported: ' . Dumper($content));
+        };
       };
     }) or return;
 
diff --git a/lib/KorAP/XML/Annotation/MarMoT/Morpho.pm b/lib/KorAP/XML/Annotation/MarMoT/Morpho.pm
index 212d8fb..ced57ab 100644
--- a/lib/KorAP/XML/Annotation/MarMoT/Morpho.pm
+++ b/lib/KorAP/XML/Annotation/MarMoT/Morpho.pm
@@ -10,9 +10,9 @@
     layer => 'morpho',
     cb => sub {
       my ($stream, $token) = @_;
-      my $mtt = $stream->pos($token->pos);
+      my $mtt = $stream->pos($token->get_pos);
 
-      my $content = $token->hash->{fs}->{f};
+      my $content = $token->get_hash->{fs}->{f};
 
       my $found;
 
diff --git a/lib/KorAP/XML/Annotation/Mate/Dependency.pm b/lib/KorAP/XML/Annotation/Mate/Dependency.pm
index 6d242c9..7a85859 100644
--- a/lib/KorAP/XML/Annotation/Mate/Dependency.pm
+++ b/lib/KorAP/XML/Annotation/Mate/Dependency.pm
@@ -19,10 +19,10 @@
       my ($stream, $source, $tokens) = @_;
 
       # Get MultiTermToken from stream for source
-      my $mtt = $stream->pos($source->pos);
+      my $mtt = $stream->pos($source->get_pos);
 
       # Serialized information from token
-      my $content = $source->hash;
+      my $content = $source->get_hash;
 
       # Get relation information
       my $rel = $content->{rel};
@@ -46,7 +46,7 @@
           #    );
 
           # Target is at the same position!
-          my $pos = $source->pos;
+          my $pos = $source->get_pos;
 
           my %rel = (
             pti => 32, # term-to-term relation
@@ -95,17 +95,17 @@
               term => '>:mate/d:' . $label,
               pti => 32, # term-to-term relation
               payload =>
-                '<i>' . $target->pos # . # right part token position
+                '<i>' . $target->get_pos # . # right part token position
                 #      '<s>0' . # $source_term->tui . # left part tui
                 #        '<s>0' # . $target_term->tui # right part tui
               );
 
-            my $target_mtt = $stream->pos($target->pos);
+            my $target_mtt = $stream->pos($target->get_pos);
             $target_mtt->add(
               term => '<:mate/d:' . $label,
               pti => 32, # term-to-term relation
               payload =>
-                '<i>' . $source->pos # . # left part token position
+                '<i>' . $source->get_pos # . # left part token position
                 #      '<s>0' . # $source_term->tui . # left part tui
                 #        '<s>0' # . $target_term->tui # right part tui
               );
@@ -139,7 +139,7 @@
                 '<i>' . $target->o_start . # end position
                 '<i>' . $target->o_end . # end position
                 '<i>' . $target->p_end . # right part end position
-                '<i>' . $source->pos # . # left part token position
+                '<i>' . $source->get_pos # . # left part token position
                 #      '<s>0' . # $source_term->tui . # left part tui
                 #        '<s>0' # . $target_span->tui # right part tui
 
diff --git a/lib/KorAP/XML/Annotation/Mate/Morpho.pm b/lib/KorAP/XML/Annotation/Mate/Morpho.pm
index 7f21afa..0d1744b 100644
--- a/lib/KorAP/XML/Annotation/Mate/Morpho.pm
+++ b/lib/KorAP/XML/Annotation/Mate/Morpho.pm
@@ -9,9 +9,9 @@
     layer => 'morpho',
     cb => sub {
       my ($stream, $token) = @_;
-      my $mtt = $stream->pos($token->pos);
+      my $mtt = $stream->pos($token->get_pos);
 
-      my $content = $token->hash->{fs}->{f};
+      my $content = $token->get_hash->{fs}->{f};
 
       my $found;
 
@@ -19,30 +19,30 @@
 
       foreach my $f (@{$content->{fs}->{f}}) {
 
-	#pos
-	if (($f->{-name} eq 'pos') &&
-	      ($found = $f->{'#text'})) {
-	  $mtt->add(term => 'mate/p:' . $found);
-	}
+        #pos
+        if (($f->{-name} eq 'pos') &&
+              ($found = $f->{'#text'})) {
+          $mtt->add(term => 'mate/p:' . $found);
+        }
 
-	# lemma
-	elsif (($f->{-name} eq 'lemma')
-		 && ($found = $f->{'#text'})
-		   && $found ne '--') {
-	  # b($found)->decode('latin-1')->encode->to_string
-	  $mtt->add(term => 'mate/l:' . $found);
-	}
+        # lemma
+        elsif (($f->{-name} eq 'lemma')
+                 && ($found = $f->{'#text'})
+                 && $found ne '--') {
+          # b($found)->decode('latin-1')->encode->to_string
+          $mtt->add(term => 'mate/l:' . $found);
+        }
 
-	# MSD
-	elsif (($f->{-name} eq 'msd') &&
-		 ($found = $f->{'#text'}) &&
-		   ($found ne '_')) {
-	  foreach (split '\|', $found) {
-	    my ($x, $y) = split "=", $_;
-	    # case, tense, number, mood, person, degree, gender
-	    $mtt->add(term => 'mate/m:' . $x . ($y ? ':' . $y : ''));
-	  };
-	};
+        # MSD
+        elsif (($f->{-name} eq 'msd') &&
+                 ($found = $f->{'#text'}) &&
+                 ($found ne '_')) {
+          foreach (split '\|', $found) {
+            my ($x, $y) = split "=", $_;
+            # case, tense, number, mood, person, degree, gender
+            $mtt->add(term => 'mate/m:' . $x . ($y ? ':' . $y : ''));
+          };
+        };
       };
     }) or return;
 
@@ -50,7 +50,7 @@
 };
 
 sub layer_info {
-    ['mate/l=tokens', 'mate/p=tokens', 'mate/m=tokens']
+  ['mate/l=tokens', 'mate/p=tokens', 'mate/m=tokens']
 }
 
 1;
diff --git a/lib/KorAP/XML/Annotation/Mate/MorphoAttr.pm b/lib/KorAP/XML/Annotation/Mate/MorphoAttr.pm
index ce140e7..67818f6 100644
--- a/lib/KorAP/XML/Annotation/Mate/MorphoAttr.pm
+++ b/lib/KorAP/XML/Annotation/Mate/MorphoAttr.pm
@@ -11,9 +11,9 @@
     layer => 'morpho',
     cb => sub {
       my ($stream, $token) = @_;
-      my $mtt = $stream->pos($token->pos);
+      my $mtt = $stream->pos($token->get_pos);
 
-      my $content = $token->hash->{fs}->{f};
+      my $content = $token->get_hash->{fs}->{f};
 
       my ($found, $pos, $msd, $tui);
 
@@ -21,50 +21,50 @@
 
       foreach my $f (@{$content->{fs}->{f}}) {
 
-	#pos
-	if (($f->{-name} eq 'pos') && ($found = $f->{'#text'})) {
-	  $pos = $found;
-	}
+        #pos
+        if (($f->{-name} eq 'pos') && ($found = $f->{'#text'})) {
+          $pos = $found;
+        }
 
-	# lemma
-	elsif (($f->{-name} eq 'lemma')
-		 && ($found = $f->{'#text'})
-		   && $found ne '--') {
-	  $mtt->add(term => 'mate/l:' . $found);
-	}
+        # lemma
+        elsif (($f->{-name} eq 'lemma')
+                 && ($found = $f->{'#text'})
+                 && $found ne '--') {
+          $mtt->add(term => 'mate/l:' . $found);
+        }
 
-	# MSD
-	elsif (($f->{-name} eq 'msd') &&
-		 ($found = $f->{'#text'}) &&
-		   ($found ne '_')) {
-	  $msd = $found;
-	  $tui = $mtt->id_counter;
-	};
+        # MSD
+        elsif (($f->{-name} eq 'msd') &&
+                 ($found = $f->{'#text'}) &&
+                 ($found ne '_')) {
+          $msd = $found;
+          $tui = $mtt->id_counter;
+        };
       };
 
       my %term = (
-	term => 'mate/p:' . $pos
+        term => 'mate/p:' . $pos
       );
 
       # There are attributes needed
       if ($tui) {
-	$term{pti} = 128;
-	$term{payload} = '<s>' . $tui
-      };;
+        $term{pti} = 128;
+        $term{payload} = '<s>' . $tui
+      };
 
       $mtt->add(%term);
 
       # MSD
       if ($msd) {
-	foreach (split '\|', $msd) {
-	  my ($x, $y) = split "=", $_;
-	  # case, tense, number, mood, person, degree, gender
-	  $mtt->add(
-	    term => '@:' . $x . ($y ? '=' . $y : ''),
-	    pti => 16,
-	    payload => '<s>' . $tui
-	  );
-	};
+        foreach (split '\|', $msd) {
+          my ($x, $y) = split "=", $_;
+          # case, tense, number, mood, person, degree, gender
+          $mtt->add(
+            term => '@:' . $x . ($y ? '=' . $y : ''),
+            pti => 16,
+            payload => '<s>' . $tui
+          );
+        };
       };
     }) or return;
 
@@ -72,7 +72,7 @@
 };
 
 sub layer_info {
-    ['mate/l=tokens', 'mate/p=tokens']
+  ['mate/l=tokens', 'mate/p=tokens']
 };
 
 1;
diff --git a/lib/KorAP/XML/Annotation/OpenNLP/Morpho.pm b/lib/KorAP/XML/Annotation/OpenNLP/Morpho.pm
index 3eb2e37..6b3175a 100644
--- a/lib/KorAP/XML/Annotation/OpenNLP/Morpho.pm
+++ b/lib/KorAP/XML/Annotation/OpenNLP/Morpho.pm
@@ -8,18 +8,18 @@
     layer => 'morpho',
     cb => sub {
       my ($stream, $token) = @_;
-      my $mtt = $stream->pos($token->pos);
+      my $mtt = $stream->pos($token->get_pos);
 
-      my $content = $token->hash->{fs}->{f} or return;
+      my $content = $token->get_hash->{fs}->{f} or return;
 
       $content = $content->{fs}->{f};
       my $found;
 
       # syntax
       if (($content->{-name} eq 'pos') && ($content->{'#text'})) {
-	$mtt->add(
-	  term => 'opennlp/p:' . $content->{'#text'}
-	) if $content->{'#text'};
+        $mtt->add(
+          term => 'opennlp/p:' . $content->{'#text'}
+        ) if $content->{'#text'};
       };
     }) or return;
 
@@ -27,7 +27,7 @@
 };
 
 sub layer_info {
-    ['opennlp/p=tokens'];
+  ['opennlp/p=tokens'];
 };
 
 1;
diff --git a/lib/KorAP/XML/Annotation/OpenNLP/Sentences.pm b/lib/KorAP/XML/Annotation/OpenNLP/Sentences.pm
index b448817..954cda3 100644
--- a/lib/KorAP/XML/Annotation/OpenNLP/Sentences.pm
+++ b/lib/KorAP/XML/Annotation/OpenNLP/Sentences.pm
@@ -10,14 +10,14 @@
     layer => 'sentences',
     cb => sub {
       my ($stream, $span) = @_;
-      my $mtt = $stream->pos($span->p_start);
+      my $mtt = $stream->pos($span->get_p_start);
       $mtt->add(
-	term => '<>:opennlp/s:s',
-	o_start => $span->o_start,
-	o_end => $span->o_end,
-	p_end => $span->p_end,
-	pti => 64,
-	payload => '<b>0'
+        term => '<>:opennlp/s:s',
+        o_start => $span->get_o_start,
+        o_end => $span->get_o_end,
+        p_end => $span->get_p_end,
+        pti => 64,
+        payload => '<b>0'
       );
       $i++;
     }
diff --git a/lib/KorAP/XML/Annotation/RWK/Morpho.pm b/lib/KorAP/XML/Annotation/RWK/Morpho.pm
index 517d0c6..8d9d822 100644
--- a/lib/KorAP/XML/Annotation/RWK/Morpho.pm
+++ b/lib/KorAP/XML/Annotation/RWK/Morpho.pm
@@ -9,9 +9,9 @@
     layer => 'morpho',
     cb => sub {
       my ($stream, $token) = @_;
-      my $mtt = $stream->pos($token->pos);
+      my $mtt = $stream->pos($token->get_pos);
 
-      my $content = $token->hash->{fs}->{f};
+      my $content = $token->get_hash->{fs}->{f};
 
       my $found;
 
diff --git a/lib/KorAP/XML/Annotation/RWK/Structure.pm b/lib/KorAP/XML/Annotation/RWK/Structure.pm
index 0d1bb2f..18edae7 100644
--- a/lib/KorAP/XML/Annotation/RWK/Structure.pm
+++ b/lib/KorAP/XML/Annotation/RWK/Structure.pm
@@ -19,7 +19,7 @@
       my ($stream, $span) = @_;
 
       # Read feature
-      my $feature = $span->hash->{fs}->{f};
+      my $feature = $span->get_hash->{fs}->{f};
       my $attrs;
 
       # Get attributes
@@ -34,14 +34,14 @@
 
       # Check only for anchors
       if ($name eq 's-milestone') {
-        push @{$milestones{s}}, [ $span->p_start, $span->o_start ];
+        push @{$milestones{s}}, [ $span->get_p_start, $span->get_o_start ];
       }
       elsif ($name eq 'p-milestone') {
-        push @{$milestones{p}}, [ $span->p_start, $span->o_start ];
+        push @{$milestones{p}}, [ $span->get_p_start, $span->get_o_start ];
       }
       else {
-        $last_p = $span->p_start;
-        $last_o = $span->o_end;
+        $last_p = $span->get_p_start;
+        $last_o = $span->get_o_end;
       }
     }
   ) or return;
diff --git a/lib/KorAP/XML/Annotation/Sgbr/Lemma.pm b/lib/KorAP/XML/Annotation/Sgbr/Lemma.pm
index a8a169b..6cb6711 100644
--- a/lib/KorAP/XML/Annotation/Sgbr/Lemma.pm
+++ b/lib/KorAP/XML/Annotation/Sgbr/Lemma.pm
@@ -10,40 +10,40 @@
     layer => 'lemma',
     cb => sub {
       my ($stream, $token) = @_;
-      my $mtt = $stream->pos($token->pos);
+      my $mtt = $stream->pos($token->get_pos);
 
-      my $content = $token->hash->{fs}->{f};
+      my $content = $token->get_hash->{fs}->{f};
 
       my $found;
 
       my $capital = 0;
 
       my $lemmata = (ref $content->{fs}->{f} eq 'ARRAY') ?
-	$content->{fs}->{f} : [$content->{fs}->{f}];
+        $content->{fs}->{f} : [$content->{fs}->{f}];
 
       my $first = 0;
 
       # Iterate over all lemmata
       foreach my $f (@$lemmata) {
 
-	# lemma
-	if (($f->{-name} eq 'lemma')
-	      && ($found = $f->{'#text'})) {
+        # lemma
+        if (($f->{-name} eq 'lemma')
+              && ($found = $f->{'#text'})) {
 
-	  # $found = b($found)->decode('latin-1')->encode->to_string;
-	  # warn $found;
+          # $found = b($found)->decode('latin-1')->encode->to_string;
+          # warn $found;
 
-	  unless ($first++) {
-	    $mtt->add(
-	      term => 'sgbr/l:' . $found
-	    );
-	  }
-	  else {
-	    $mtt->add(
-	      term => 'sgbr/lv:' . $found
-	    );
-	  };
-	};
+          unless ($first++) {
+            $mtt->add(
+              term => 'sgbr/l:' . $found
+            );
+          }
+          else {
+            $mtt->add(
+              term => 'sgbr/lv:' . $found
+            );
+          };
+        };
       };
     }) or return;
 
diff --git a/lib/KorAP/XML/Annotation/Sgbr/Morpho.pm b/lib/KorAP/XML/Annotation/Sgbr/Morpho.pm
index 9eb261b..c3e35d7 100644
--- a/lib/KorAP/XML/Annotation/Sgbr/Morpho.pm
+++ b/lib/KorAP/XML/Annotation/Sgbr/Morpho.pm
@@ -9,22 +9,22 @@
     layer => 'ana',
     cb => sub {
       my ($stream, $token) = @_;
-      my $mtt = $stream->pos($token->pos);
+      my $mtt = $stream->pos($token->get_pos);
 
       my $found;
-      my $content = $token->hash->{fs}->{f};
+      my $content = $token->get_hash->{fs}->{f};
       my $pos = (ref $content->{fs}->{f} eq 'ARRAY') ?
-	$content->{fs}->{f} : [$content->{fs}->{f}];
+        $content->{fs}->{f} : [$content->{fs}->{f}];
 
       # Iterate over all lemmata
       foreach my $f (@$pos) {
 
-	# lemma
-	if (($f->{-name} eq 'ctag')
-	      && ($found = $f->{'#text'})) {
-	  # b($found)->decode('latin-1')->encode->to_string
-	  $mtt->add(term => 'sgbr/p:' . $found);
-	};
+        # lemma
+        if (($f->{-name} eq 'ctag')
+              && ($found = $f->{'#text'})) {
+          # b($found)->decode('latin-1')->encode->to_string
+          $mtt->add(term => 'sgbr/p:' . $found);
+        };
       };
     }) or return;
 
diff --git a/lib/KorAP/XML/Annotation/Talismane/Dependency.pm b/lib/KorAP/XML/Annotation/Talismane/Dependency.pm
index ea7bbf3..efd301e 100644
--- a/lib/KorAP/XML/Annotation/Talismane/Dependency.pm
+++ b/lib/KorAP/XML/Annotation/Talismane/Dependency.pm
@@ -14,10 +14,10 @@
       my ($stream, $source, $tokens) = @_;
 
       # Get MultiTermToken from stream for source
-      my $mtt = $stream->pos($source->pos);
+      my $mtt = $stream->pos($source->get_pos);
 
       # Serialized information from token
-      my $content = $source->hash;
+      my $content = $source->get_hash;
 
       # Get relation information
       my $rel = $content->{rel};
@@ -40,18 +40,18 @@
             term => '>:talismane/d:' . $label,
             pti => 32, # term-to-term relation
             payload =>
-              '<i>' . $target->pos # . # right part token position
+              '<i>' . $target->get_pos # . # right part token position
               # '<s>0' . # $source_term->tui . # left part tui
               # '<s>0' # . $target_term->tui # right part tui
             );
 
-          my $target_mtt = $stream->pos($target->pos);
+          my $target_mtt = $stream->pos($target->get_pos);
 
           $target_mtt->add(
             term => '<:talismane/d:' . $label,
             pti => 32, # term-to-term relation
             payload =>
-              '<i>' . $source->pos # . # left part token position
+              '<i>' . $source->get_pos # . # left part token position
               # '<s>0' . # $source_term->tui . # left part tui
               # '<s>0' # . $target_term->tui # right part tui
             );
@@ -63,23 +63,23 @@
             term => '>:talismane/d:' . $label,
             pti => 33, # term-to-element relation
             payload =>
-              '<i>' . $target->o_start . # end position
-              '<i>' . $target->o_end . # end position
-              '<i>' . $target->p_start . # right part start position
-              '<i>' . $target->p_end # . # right part end position
+              '<i>' . $target->get_o_start . # end position
+              '<i>' . $target->get_o_end . # end position
+              '<i>' . $target->get_p_start . # right part start position
+              '<i>' . $target->get_p_end # . # right part end position
               # '<s>0' . # $source_term->tui . # left part tui
               # '<s>0' # . $target_span->tui # right part tui
             );
 
-          my $target_mtt = $stream->pos($target->p_start);
+          my $target_mtt = $stream->pos($target->get_p_start);
           $target_mtt->add(
             term => '<:talismane/d:' . $label,
             pti => 34, # element-to-term relation
             payload =>
-              '<i>' . $target->o_start . # end position
-              '<i>' . $target->o_end . # end position
-              '<i>' . $target->p_end . # right part end position
-              '<i>' . $source->pos # . # left part token position
+              '<i>' . $target->get_o_start . # end position
+              '<i>' . $target->get_o_end . # end position
+              '<i>' . $target->get_p_end . # right part end position
+              '<i>' . $source->get_pos # . # left part token position
               #	'<s>0' . # $source_term->tui . # left part tui
               # '<s>0' # . $target_span->tui # right part tui
 
diff --git a/lib/KorAP/XML/Annotation/Talismane/Morpho.pm b/lib/KorAP/XML/Annotation/Talismane/Morpho.pm
index 85a0786..bd5c30b 100644
--- a/lib/KorAP/XML/Annotation/Talismane/Morpho.pm
+++ b/lib/KorAP/XML/Annotation/Talismane/Morpho.pm
@@ -9,9 +9,9 @@
     layer => 'morpho',
     cb => sub {
       my ($stream, $token) = @_;
-      my $mtt = $stream->pos($token->pos);
+      my $mtt = $stream->pos($token->get_pos);
 
-      my $content = $token->hash->{fs}->{f};
+      my $content = $token->get_hash->{fs}->{f};
 
       my $found;
 
diff --git a/lib/KorAP/XML/Annotation/TreeTagger/Morpho.pm b/lib/KorAP/XML/Annotation/TreeTagger/Morpho.pm
index 54d2436..9215595 100644
--- a/lib/KorAP/XML/Annotation/TreeTagger/Morpho.pm
+++ b/lib/KorAP/XML/Annotation/TreeTagger/Morpho.pm
@@ -10,9 +10,9 @@
     layer => 'morpho',
     cb => sub {
       my ($stream, $token) = @_;
-      my $mtt = $stream->pos($token->pos);
+      my $mtt = $stream->pos($token->get_pos);
 
-      my $content = $token->hash->{fs}->{f};
+      my $content = $token->get_hash->{fs}->{f};
 
       my $found;
 
@@ -84,7 +84,7 @@
 };
 
 sub layer_info {
-    ['tt/p=tokens', 'tt/l=tokens']
+  ['tt/p=tokens', 'tt/l=tokens']
 };
 
 1;
diff --git a/lib/KorAP/XML/Annotation/TreeTagger/Sentences.pm b/lib/KorAP/XML/Annotation/TreeTagger/Sentences.pm
index 721ea5c..567dace 100644
--- a/lib/KorAP/XML/Annotation/TreeTagger/Sentences.pm
+++ b/lib/KorAP/XML/Annotation/TreeTagger/Sentences.pm
@@ -10,14 +10,14 @@
     layer => 'sentences',
     cb => sub {
       my ($stream, $span) = @_;
-      my $mtt = $stream->pos($span->p_start);
+      my $mtt = $stream->pos($span->get_p_start);
       $mtt->add(
-	term => '<>:tt/s:s',
-	o_start => $span->o_start,
-	o_end => $span->o_end,
-	p_end => $span->p_end,
-	pti => 64,
-	payload => '<b>0' # Could be 2 as well t/p/s
+        term => '<>:tt/s:s',
+        o_start => $span->get_o_start,
+        o_end => $span->get_o_end,
+        p_end => $span->get_p_end,
+        pti => 64,
+        payload => '<b>0' # Could be 2 as well t/p/s
       );
       $i++;
     }
@@ -29,7 +29,7 @@
 };
 
 sub layer_info {
-    ['tt/s=spans'];
+  ['tt/s=spans'];
 };
 
 
diff --git a/lib/KorAP/XML/Annotation/XIP/Constituency.pm b/lib/KorAP/XML/Annotation/XIP/Constituency.pm
index 7fd05f9..1637279 100644
--- a/lib/KorAP/XML/Annotation/XIP/Constituency.pm
+++ b/lib/KorAP/XML/Annotation/XIP/Constituency.pm
@@ -26,13 +26,13 @@
       my ($stream, $span) = @_;
 
       # Collect the span
-      $xip_const{$span->id} = $span;
-      # warn 'Remember ' . $span->id;
+      $xip_const{$span->get_id} = $span;
+      # warn 'Remember ' . $span->get_id;
 
       # It's probably a root
-      $xip_const_root->insert($span->id);
+      $xip_const_root->insert($span->get_id);
 
-      my $rel = $span->hash->{rel} or return;
+      my $rel = $span->get_hash->{rel} or return;
 
       $rel = [$rel] unless ref $rel eq 'ARRAY';
 
@@ -71,9 +71,9 @@
     weaken $xip_const_noroot;
 
     # Get the correct position for the span
-    my $mtt = $stream->pos($span->p_start);
+    my $mtt = $stream->pos($span->get_p_start);
 
-    my $content = $span->hash;
+    my $content = $span->get_hash;
     my $f = $content->{fs}->{f};
 
     unless ($f->{-name} eq 'const') {
@@ -91,9 +91,9 @@
     # $type is now NPA, NP, NUM ...
     my %term = (
       term => '<>:xip/c:' . $type,
-      o_start => $span->o_start,
-      o_end => $span->o_end,
-      p_end => $span->p_end,
+      o_start => $span->get_o_start,
+      o_end => $span->get_o_end,
+      p_end => $span->get_p_end,
       pti => 64
     );
 
@@ -133,9 +133,7 @@
       my $subspan = delete $xip_const{$target};
       # warn "A-Forgot about $target: " . ($subspan ? 'yes' : 'no');
 
-      unless ($subspan) {
-        next;
-      };
+      next unless $subspan;
       #  warn "Span " . $target . " not found";
 
       $this->($subspan, $level + 1);
@@ -151,9 +149,7 @@
 
     # warn "B-Forgot about $_: " . ($obj ? 'yes' : 'no');
 
-    unless ($obj) {
-      next;
-    };
+    next unless $obj;
 
     $add_const->($obj, 0);
   };
diff --git a/lib/KorAP/XML/Annotation/XIP/Morpho.pm b/lib/KorAP/XML/Annotation/XIP/Morpho.pm
index 1760d25..012207d 100644
--- a/lib/KorAP/XML/Annotation/XIP/Morpho.pm
+++ b/lib/KorAP/XML/Annotation/XIP/Morpho.pm
@@ -10,48 +10,48 @@
     encoding => 'xip',
     cb => sub {
       my ($stream, $token) = @_;
-      my $mtt = $stream->pos($token->pos);
+      my $mtt = $stream->pos($token->get_pos);
 
-      my $content = $token->hash->{fs}->{f}->{fs}->{f};
+      my $content = $token->get_hash->{fs}->{f}->{fs}->{f};
 
       my $found;
 
       my $capital = 0;
       foreach (@$content) {
-	# pos
-	if (($_->{-name} eq 'pos') &&
-	      ($found = $_->{'#text'})) {
-	  $mtt->add(
-	    term => 'xip/p:' . $found
-	  );
+        # pos
+        if (($_->{-name} eq 'pos') &&
+              ($found = $_->{'#text'})) {
+          $mtt->add(
+            term => 'xip/p:' . $found
+          );
 
-	  $capital = 1 if $found eq 'NOUN';
-	}
+          $capital = 1 if $found eq 'NOUN';
+        }
       };
 
       foreach (@$content) {
-	# lemma
-	if (($_->{-name} eq 'lemma') &&
-	      ($found = $_->{'#text'})) {
+        # lemma
+        if (($_->{-name} eq 'lemma') &&
+              ($found = $_->{'#text'})) {
 
-	  # Verb delimiter (aus=druecken)
-	  $mtt->add(term => 'xip/l:' . $found);
-	  if ($found =~ tr/=//d) {
-	    $mtt->add(term => 'xip/l:' . $found);
-	  };
+          # Verb delimiter (aus=druecken)
+          $mtt->add(term => 'xip/l:' . $found);
+          if ($found =~ tr/=//d) {
+            $mtt->add(term => 'xip/l:' . $found);
+          };
 
-	  # Composites
-	  my (@token) = split('#', $found);
+          # Composites
+          my (@token) = split('#', $found);
 
-	  next if @token == 1;
+          next if @token == 1;
 
-	  my $full = '';
-	  foreach (@token) {
-	    $full .= $_;
-	    $_ =~ s{/\w+$}{};
-	    $mtt->add(term => 'xip/l:#' . $_);
-	  };
-	};
+          my $full = '';
+          foreach (@token) {
+            $full .= $_;
+            $_ =~ s{/\w+$}{};
+            $mtt->add(term => 'xip/l:#' . $_);
+          };
+        };
       };
     }) or return;
 
diff --git a/lib/KorAP/XML/Annotation/XIP/Sentences.pm b/lib/KorAP/XML/Annotation/XIP/Sentences.pm
index 56a0e53..03cb585 100644
--- a/lib/KorAP/XML/Annotation/XIP/Sentences.pm
+++ b/lib/KorAP/XML/Annotation/XIP/Sentences.pm
@@ -13,14 +13,14 @@
     cb => sub {
       my ($stream, $span) = @_;
 
-      my $mtt = $stream->pos($span->p_start);
+      my $mtt = $stream->pos($span->get_p_start);
       $mtt->add(
-	term => '<>:xip/s:s',
-	o_start => $span->o_start,
-	o_end => $span->o_end,
-	p_end => $span->p_end,
-	pti => 64,
-	payload => '<b>0' # Could be 2 as well for t/p/s
+        term => '<>:xip/s:s',
+        o_start => $span->get_o_start,
+        o_end => $span->get_o_end,
+        p_end => $span->get_p_end,
+        pti => 64,
+        payload => '<b>0' # Could be 2 as well for t/p/s
       );
       $i++;
     }
@@ -32,7 +32,7 @@
 };
 
 sub layer_info {
-    ['xip/s=spans'];
+  ['xip/s=spans'];
 };
 
 
diff --git a/lib/KorAP/XML/Index/MultiTermToken.pm b/lib/KorAP/XML/Index/MultiTermToken.pm
index 2815eff..cae6cba 100644
--- a/lib/KorAP/XML/Index/MultiTermToken.pm
+++ b/lib/KorAP/XML/Index/MultiTermToken.pm
@@ -64,11 +64,11 @@
 };
 
 sub surface {
-  substr($_[0]->[0]->[0]->term,2);
+  substr($_[0]->[MT]->[0]->term,2);
 };
 
 sub lc_surface {
-  substr($_[0]->[0]->[1]->term,2);
+  substr($_[0]->[MT]->[1]->term,2);
 };
 
 sub to_array {
diff --git a/lib/KorAP/XML/Tokenizer.pm b/lib/KorAP/XML/Tokenizer.pm
index 65daa94..c2d0c55 100644
--- a/lib/KorAP/XML/Tokenizer.pm
+++ b/lib/KorAP/XML/Tokenizer.pm
@@ -342,7 +342,7 @@
 
   if ($cb) {
     foreach (@$spanarray) {
-      $cb->($self->stream, $_) if defined $_->p_start;
+      $cb->($self->stream, $_) if defined $_->get_p_start;
     };
     return 1;
   };
@@ -398,7 +398,7 @@
   if ($cb) {
     foreach (@$tokenarray) {
       # weaken $tokens;
-      $cb->($self->stream, $_, $tokens) if defined $_->pos;
+      $cb->($self->stream, $_, $tokens) if defined $_->get_pos;
       #, $tokens);
     };
     return 1;
@@ -771,12 +771,12 @@
     layer => 'sentences',
     cb => sub {
       my ($stream, $span) = @_;
-      my $mtt = $stream->pos($span->p_start);
+      my $mtt = $stream->pos($span->get_p_start);
       $mtt->add(
         term    => '<>:s',
-        o_start => $span->o_start,
-        o_end   => $span->o_end,
-        p_end   => $span->p_end
+        o_start => $span->get_o_start,
+        o_end   => $span->get_o_end,
+        p_end   => $span->get_p_end
       );
     }
   );
diff --git a/lib/KorAP/XML/Tokenizer/Span.pm b/lib/KorAP/XML/Tokenizer/Span.pm
index 962d002..0162ac2 100644
--- a/lib/KorAP/XML/Tokenizer/Span.pm
+++ b/lib/KorAP/XML/Tokenizer/Span.pm
@@ -4,6 +4,19 @@
 use Mojo::DOM;
 use Clone;
 
+use constant {
+  O_START   => 0,
+  O_END     => 1,
+  P_START   => 2,
+  P_END     => 3,
+  ID        => 4,
+  CONTENT   => 5,
+  DOM       => 6,
+  HASH      => 7,
+  MILESTONE => 8,
+  PTI       => 9
+};
+
 sub new {
   bless [], shift;
 };
@@ -12,123 +25,103 @@
   'span';
 };
 
-sub o_start {
-  if (defined $_[1]) {
-    $_[0]->[0] = $_[1];
-  };
-  $_[0]->[0];
-};
-
 sub set_o_start {
-  $_[0]->[0] = $_[1];
+  $_[0]->[O_START] = $_[1];
 };
 
-sub o_end {
-  if (defined $_[1]) {
-    $_[0]->[1] = $_[1];
-  };
-  $_[0]->[1];
+sub get_o_start {
+  $_[0]->[O_START]
 };
 
 sub set_o_end {
-  $_[0]->[1] = $_[1];
+  $_[0]->[O_END] = $_[1];
 };
 
-sub p_start {
-  if (defined $_[1]) {
-    $_[0]->[2] = $_[1];
-  };
-  $_[0]->[2];
+sub get_o_end {
+  $_[0]->[O_END]
 };
 
 sub set_p_start {
-  $_[0]->[2] = $_[1];
+  $_[0]->[P_START] = $_[1];
 };
 
-sub p_end {
-  if (defined $_[1]) {
-    $_[0]->[3] = $_[1];
-  };
-  $_[0]->[3];
+sub get_p_start {
+  $_[0]->[P_START]
 };
 
 sub set_p_end {
-  $_[0]->[3] = $_[1];
+  $_[0]->[P_END] = $_[1];
 };
 
-sub id {
-  if (defined $_[1]) {
-    $_[0]->[4] = $_[1];
-  };
-  $_[0]->[4];
+sub get_p_end {
+  $_[0]->[P_END];
 };
 
-sub content {
-  if (defined $_[1]) {
-    $_[0]->[5] = $_[1];
-  }
-  else {
-    return $_[0]->[5];
-  };
+sub set_id {
+  $_[0]->[ID] = $_[1];
+};
+
+sub get_id {
+  $_[0]->[ID];
+};
+
+sub set_content {
+  $_[0]->[CONTENT] = $_[1];
+};
+
+sub get_content {
+  $_[0]->[CONTENT];
 };
 
 sub dom {
-  if ($_[0]->[6]) {
-    return $_[0]->[6];
+  if ($_[0]->[DOM]) {
+    return $_[0]->[DOM];
   }
   else {
-    my $c = Mojo::DOM->new($_[0]->[5]);
+    my $c = Mojo::DOM->new($_[0]->[CONTENT]);
     $c->xml(1);
-    return $_[0]->[6] = $c;
+    return $_[0]->[DOM] = $c;
   };
 };
 
-sub hash {
-  if (defined $_[1]) {
-    $_[0]->[7] = $_[1];
-  }
-  else {
-    return $_[0]->[7];
-  };
+sub set_hash {
+  $_[0]->[HASH] = $_[1];
 };
 
-
-sub milestone {
-  if (defined $_[1]) {
-    $_[0]->[8] = 1;
-  };
-  $_[0]->[8] ? 1 : 0;
+sub get_hash {
+  return $_[0]->[HASH];
 };
 
-
-#sub tui {
-#  if (defined $_[1]) {
-#    $_[0]->[9] = $_[1];
-#  };
-#  $_[0]->[9];
-#};
-
-sub pti {
-  if (defined $_[1]) {
-    $_[0]->[10] = $_[1];
-  };
-  $_[0]->[10];
+sub set_milestone {
+  $_[0]->[MILESTONE] = 1;
 };
 
+sub get_milestone {
+  $_[0]->[MILESTONE] ? 1 : 0;
+};
+
+sub set_pti {
+  $_[0]->[PTI] = $_[1];
+};
+
+sub get_pti {
+  $_[0]->[PTI];
+};
 
 sub to_string {
   my $v = shift;
   {
     no warnings;
-    return '[(' . $v->[0] . ':' . $v->[1] . '|' .
-      $v->[2] . ':' . $v->[3] . ')' .
-      $v->[4] . '-' .$v->[5] . ']';
+    return '[(' . $v->[O_START] . ':' . $v->[O_END] . '|' .
+      $v->[P_START] . ':' . $v->[P_END] . ')' .
+      $v->[ID] . '-' .$v->[CONTENT] . ']';
   };
 };
 
-
 # Clone the span
 sub clone {
+  # TODO:
+  #   Optionally clone without DOM and treat hash specially
   return Clone::clone(shift);
 };
 
diff --git a/lib/KorAP/XML/Tokenizer/Token.pm b/lib/KorAP/XML/Tokenizer/Token.pm
index 815f9e8..c3cabfa 100644
--- a/lib/KorAP/XML/Tokenizer/Token.pm
+++ b/lib/KorAP/XML/Tokenizer/Token.pm
@@ -3,6 +3,14 @@
 use warnings;
 use Mojo::DOM;
 
+use constant {
+  POS     => 0,
+  CONTENT => 1,
+  ID      => 2,
+  DOM     => 3,
+  HASH    => 4,
+};
+
 sub new {
   bless [], shift;
 };
@@ -11,63 +19,56 @@
   'token';
 };
 
-# get or set token position
-sub pos {
-  if (defined $_[1]) {
-    $_[0]->[0] = $_[1];
-  };
-  $_[0]->[0];
+sub set_pos {
+  $_[0]->[POS] = $_[1];
 };
 
-
-# Get or set token content
-sub content {
-  if (defined $_[1]) {
-    $_[0]->[1] = $_[1];
-  }
-  else {
-    return $_[0]->[1];
-  };
+sub get_pos {
+  $_[0]->[POS];
 };
 
-
-# Get or set token id
-sub id {
-  if ($_[1]) {
-    $_[0]->[2] = $_[1];
-  }
-  else {
-    $_[0]->[2];
-  };
+sub set_content {
+  $_[0]->[CONTENT] = $_[1];
 };
 
+sub get_content {
+  $_[0]->[CONTENT];
+};
+
+sub set_id {
+  $_[0]->[ID] = $_[1];
+};
+
+sub get_id {
+  $_[0]->[ID];
+};
 
 sub dom {
-  if ($_[0]->[3]) {
-    return $_[0]->[3];
+  if ($_[0]->[DOM]) {
+    return $_[0]->[DOM];
   }
   else {
-    my $c = Mojo::DOM->new($_[0]->[1]);
+    my $c = Mojo::DOM->new($_[0]->[CONTENT]);
     $c->xml(1);
-    return $_[0]->[3] = $c;
+    return $_[0]->[DOM] = $c;
   };
 };
 
-sub hash {
-  if (defined $_[1]) {
-    $_[0]->[4] = $_[1];
-  }
-  else {
-    return $_[0]->[4];
-  };
+sub set_hash {
+  return $_[0]->[HASH] = $_[1];
 };
 
+sub get_hash {
+  return $_[0]->[HASH];
+};
+
+
 sub to_string {
   my $v = shift;
   {
     no warnings;
-    return '[(' . $v->[0] . ')' .
-      $v->[1] . '-' .$v->[2] . ']';
+    return '[(' . $v->[POS] . ')' .
+      $v->[CONTENT] . '-' . $v->[ID] . ']';
   };
 };
 
diff --git a/lib/KorAP/XML/Tokenizer/Units.pm b/lib/KorAP/XML/Tokenizer/Units.pm
index 7d31626..df22ab0 100644
--- a/lib/KorAP/XML/Tokenizer/Units.pm
+++ b/lib/KorAP/XML/Tokenizer/Units.pm
@@ -32,21 +32,21 @@
 
   # The span is a milestone
   if ($from == $to) {
-    $span->milestone(1);
+    $span->set_milestone(1);
   };
 
   # The span has an id (probably useful)
-  $span->id($s->{-id}) if $s && $s->{-id};
+  $span->set_id($s->{-id}) if $s && $s->{-id};
 
   # Set character offsets
-  $span->o_start($from);
-  $span->o_end($to);
+  $span->set_o_start($from);
+  $span->set_o_end($to);
 
   # Get start position (exactly)
-  my $start = $self->match->startswith($span->o_start);
+  my $start = $self->match->startswith($from);
 
   unless (defined $start) {
-    $start = $self->range->after($span->o_start);
+    $start = $self->range->after($from);
 
     unless (defined $start) {
       if (DEBUG) {
@@ -57,21 +57,21 @@
   };
 
   # Set start token position to span
-  $span->p_start($start);
+  $span->set_p_start($start);
 
-  if ($span->milestone) {
-    $span->p_end($start);
+  if ($span->get_milestone) {
+    $span->set_p_end($start);
   }
   else {
 
     # Get end position (exactly)
-    my $end = $self->match->endswith($span->o_end);
+    my $end = $self->match->endswith($span->get_o_end);
 
     unless (defined $end) {
-      $end = $self->range->before($span->o_end);
+      $end = $self->range->before($span->get_o_end);
 
       if (DEBUG && $span->o_end == 196) {
-        warn 'SPAN ends at ' . $span->o_end . ' and has ' . $end;
+        warn 'SPAN ends at ' . $span->get_o_end . ' and has ' . $end;
       };
 
       unless (defined $end) {
@@ -98,21 +98,21 @@
     # return unless $span->p_end >= $span->p_start;
 
     # EXPERIMENTAL:
-    unless ($end >= $span->p_start) {
+    unless ($end >= $span->get_p_start) {
       if (DEBUG) {
-        warn 'Ignore ' . $span->id . ' with ' . $span->p_start . '-' . $end;
+        warn 'Ignore ' . $span->id . ' with ' . $span->get_p_start . '-' . $end;
       };
       return;
     };
 
-    $span->p_end($end + 1);
+    $span->set_p_end($end + 1);
   }
 
   if (DEBUG && $from == 124) {
-    warn 'exact: ' . $span->p_start . '-' . $span->p_end;
+    warn 'exact: ' . $span->get_p_start . '-' . $span->get_p_end;
   };
 
-  $span->hash($s) if $s;
+  $span->set_hash($s) if $s;
 
   $span;
 };
@@ -132,10 +132,10 @@
   return unless defined $pos;
 
   my $token = KorAP::XML::Tokenizer::Token->new;
-  $token->id($s->{-id}) if $s && $s->{-id};
-  $token->pos($pos);
+  $token->set_id($s->{-id}) if $s && $s->{-id};
+  $token->set_pos($pos);
 
-  $token->hash($s) if $s;
+  $token->set_hash($s) if $s;
 
   $token;
 };
