diff --git a/script/tei2korapxml b/script/tei2korapxml
index d50dc24..305388b 100755
--- a/script/tei2korapxml
+++ b/script/tei2korapxml
@@ -50,6 +50,7 @@
 };
 
 use KorAP::XML::TEI;
+use KorAP::XML::TEI::Tokenization;
 
 our $VERSION = '0.01';
 
@@ -107,7 +108,7 @@
 ##
 
 ## dummy tokenization (only for testing)
-my $_GEN_TOK_DUMMY             = 0;      # use dummy base tokenization for testing (base tokenization is normally done by external tools)
+my $_GEN_TOK_DUMMY             = 1;      # use dummy base tokenization for testing (base tokenization is normally done by external tools)
   my $_tok_file_con            = "tokens_conservative.xml";
   my $_tok_file_agg            = "tokens_aggressive.xml";
   my ( @tok_tokens_con, @tok_tokens_agg, $m1, $m2, $m3, $m4, $tmp, $p1, $p2, $pr, $txt, $offset );
@@ -1092,126 +1093,14 @@
 
         $txt = $e->[1];
 
+
         if ( substr( $txt, 0, 1 ) ne ' ' || substr( $txt, 1, 1) ne ' ' ){ # $txt has at least 2 chars, if it's not empty or equal to ' '
 
+          my $tok = KorAP::XML::TEI::Tokenization::conservative($txt, $offset);
+          push @tok_tokens_con, @$tok;
 
-          # ~ start: conservative tokenization ~
-
-
-          # '\p{Punct}' is equal to the character class '[-!"#%&'()*,./:;?@[\\\]_{}]'
-          while ( $txt =~ /([\p{Punct}]*)([^\p{Punct} \x{9}\n]+(?:([\p{Punct}]+)[^\p{Punct} \x{9}\n]+)*)?([\p{Punct}]*)(?:[ \x{9}\n])?/g ){
-
-            $m1 = $1; $m2 = $2; $m3 = $3; $m4 = $4;
-
-            if ( "$m1" ne "" ){ # special chars before token
-
-              $p1 = $-[1]; $p2 = $+[1];
-
-              #print STDERR "A1: ".$m1." -> from $p1 to $p2\n";
-
-              if ( $p2 == $p1+1 ){
-
-                if ( $p1 != 0 ){ $tmp = substr( $txt, $p1-1, 1 ); $pr = ( $tmp =~ /^[^A-Za-z0-9]/ ) } else { $pr = 0 };
-
-                if ( not $pr ){ $tmp = substr( $txt, $p2, 1 ); $pr = ( $tmp =~ /^[^A-Za-z0-9]/ ) };
-
-                if ( $pr ){ push @tok_tokens_con, $p1+$offset; push @tok_tokens_con, $p2+$offset }; # from and to
-
-              } else {
-
-                for ( $i = 0; $i < ( $p2-$p1 ); $i++ ){
-
-                  #print STDERR "A2: ".substr($m1,$i,1)." -> from $p1 to $p2\n";
-
-                  push @tok_tokens_con, $p1+$i+$offset; push @tok_tokens_con, $p1+$i+1+$offset; # from and to
-                }
-              }
-
-            } # fi: "$m1" ne ""
-
-            #print STDERR "B: "."$m2 -> from ".($-[2]+$offset)." to ".($+[2]+$offset)."\n" if defined $m2;   # token (wordform)
-
-            if ( defined $m2 ){ push @tok_tokens_con, $-[2]+$offset; push @tok_tokens_con, $+[2]+$offset }; # from and to
-
-            if ( defined $m3 ){
-
-              $p1 = $-[3]; $p2 = $+[3];
-
-              #print STDERR "C: ".$m3." -> from $p1 to $p2\n";
-
-              if ( $p2 == $p1+1 ){
-
-                $tmp = substr( $txt, $p2, 1); $pr = ( $tmp =~ /^$/ ); $pr = ( $tmp =~ /^[^A-Za-z0-9]/ ) if not $pr; # char after match
-
-                if ( not $pr ){ $tmp = substr( $txt, $p1-1, 1 ); $pr = ( $tmp =~ /^[^A-Za-z0-9]/ ) }; # char before match
-
-                if ( $pr ){ push @tok_tokens_con, $p1+$offset; push @tok_tokens_con, $p2+$offset }; # from and to
-
-              } else { # length($m3)>1 => print all chars
-
-                for ( $i = 0; $i < ( $p2-$p1 ); $i++ ){
-
-                  #$tmp=substr($m3,$i,1);
-                  #print STDERR "C2: $tmp -> from $p1 to $p2\n";
-
-                  push @tok_tokens_con, $p1+$i+$offset; push @tok_tokens_con, $p1+$i+1+$offset; # from and to
-                }
-
-              }
-
-            } # fi: defined $m3
-
-            if ( "$m4" ne "" ){ # special chars after token
-
-              $p1 = $-[4]; $p2 = $+[4];
-
-              #print STDERR "D1: ".$m4." -> from ".($p1+$offset)." to ".($p2+$offset)."\n";
-
-              if ( $p2 == $p1+1 ){
-
-                $tmp = substr( $txt, $p2, 1 ); $pr = ( $tmp =~ /^$/ ); $pr = ( $tmp =~ /^[^A-Za-z0-9]/ ) if not $pr; # char after match
-
-                if ( not $pr ){ $tmp = substr ( $txt, $p1-1, 1 ); $pr = ( $tmp =~ /^[^A-Za-z0-9]/ ) }; # char before match
-
-                if ( $pr ){ push @tok_tokens_con, $p1+$offset; push @tok_tokens_con, $p2+$offset } # from and to
-
-              }else{
-
-                for ( $i = 0; $i < ( $p2-$p1 ); $i++ ){
-
-                  #print STDERR "D2: ".substr($m4,$i,1)." -> from ".($p1+$i+$offset)." to ".($p1+$i+1+$offset)."\n";
-
-                  push @tok_tokens_con, $p1+$i+$offset; push @tok_tokens_con, $p1+$i+1+$offset; # from and to
-                }
-              }
-
-            }# fi: "$m4" ne ""
-
-          }# end: while
-
-
-          # ~ end: conservative tokenization ~
-
-
-          # ~ start: aggressive tokenization ~
-
-
-          while ( $txt =~ /([^\p{Punct} \x{9}\n]+)(?:([\p{Punct}])|(?:[ \x{9}\n])?)|([\p{Punct}])/g ){
-
-            if ( defined $1 ){
-
-              push @tok_tokens_agg, $-[1]+$offset; push @tok_tokens_agg, $+[1]+$offset; # from and to
-
-              if ( defined $2 ){ push @tok_tokens_agg, $-[2]+$offset; push @tok_tokens_agg, $+[2]+$offset } # from and to
-
-            }else{ # defined $3
-
-              push @tok_tokens_agg, $-[3]+$offset; push @tok_tokens_agg, $+[3]+$offset # from and to
-            }
-
-          } # end: while
-
-          # ~ end: aggressive tokenization ~
+          $tok = KorAP::XML::TEI::Tokenization::aggressive($txt, $offset);
+          push @tok_tokens_agg, @$tok;
 
           ##$offset = $dl+1;
 
