diff --git a/t/script.t b/t/script.t
index 742b417..533e08e 100644
--- a/t/script.t
+++ b/t/script.t
@@ -3,18 +3,16 @@
 use File::Basename 'dirname';
 use File::Spec::Functions qw/catfile/;
 use Encode qw!encode_utf8 decode_utf8 encode!;
-use IO::Uncompress::Unzip qw(unzip $UnzipError);
 
 use Test::More;
 use Test::Output;
-use Test::XML::Loy;
 
 use FindBin;
 BEGIN {
   unshift @INC, "$FindBin::Bin/../lib";
 };
 
-use Test::KorAP::XML::TEI qw!korap_tempfile i5_template!;
+use Test::KorAP::XML::TEI qw!korap_tempfile i5_template test_tei2korapxml!;
 
 my $f = dirname(__FILE__);
 my $script = catfile($f, '..', 'script', 'tei2korapxml');
@@ -26,292 +24,183 @@
   'Help'
 );
 
+
 stdout_like(
   sub { system('perl', $script, '--version') },
   qr!tei2korapxml - v\d+?\.\d+?!,
   'Version'
 );
 
-
 # Load example file
 my $file = catfile($f, 'data', 'goe_sample.i5.xml');
 
-my ($fh, $outzip) = korap_tempfile('script_out');
+subtest 'Basic processing' => sub {
 
-# Generate zip file (unportable!)
-stderr_like(
-  sub { `cat '$file' | perl '$script' -ti > '$outzip'` },
-# approaches for working with $fh (also better use OO interface then)
-#  sub { open STDOUT, '>&', $fh; system("cat '$file' | perl '$script'") },
-#  sub { open(my $pipe, "cat '$file' | perl '$script'|"); while(<$pipe>){$fh->print($_)}; $fh->close },
-#  sub {
-#    defined(my $pid = fork) or die "fork: $!";
-#    if (!$pid) {
-#      open STDOUT, '>&', $fh;
-#      exec "cat '$file' | perl '$script'"
-#    }
-#    waitpid $pid, 0;
-#    $fh->close;
-#  },
-  qr!tei2korapxml: .*? text_id=GOE_AGA\.00000!,
-  'Processing'
-);
-
-ok(-e $outzip, "File $outzip exists");
-
-# Uncompress GOE/header.xml from zip file
-my $zip = IO::Uncompress::Unzip->new($outzip, Name => 'GOE/header.xml');
-
-ok($zip, 'Zip-File is created');
-
-# TODO: check wrong encoding in header-files (compare with input document)!
-# Read GOE/header.xml
-my $header_xml = '';
-$header_xml .= $zip->getline while !$zip->eof;
-ok($zip->close, 'Closed');
-
-my $t = Test::XML::Loy->new($header_xml);
-
-$t->text_is('korpusSigle', 'GOE', 'korpusSigle')
-  ->text_is('h\.title[type=main]', 'Goethes Werke', 'h.title')
-  ->text_is('h\.author', 'Goethe, Johann Wolfgang von', 'h.author')
-  ->text_is('pubDate[type=year]', '1982', 'pubDate');
+  my $t = test_tei2korapxml(
+    tmp => 'script_out',
+    file => $file,
+    param => '-ti'
+  )->stderr_like(qr!tei2korapxml: .*? text_id=GOE_AGA\.00000!);
 
 
-# Uncompress GOE/AGA/header.xml from zip file
-$zip = IO::Uncompress::Unzip->new($outzip, Name => 'GOE/AGA/header.xml');
+  # Uncompress GOE/header.xml from zip file
+  $t->unzip_xml('GOE/header.xml')
 
-ok($zip, 'Zip-File is found');
+    # TODO: check wrong encoding in header-files (compare with input document)!
+    ->text_is('korpusSigle', 'GOE', 'korpusSigle')
+    ->text_is('h\.title[type=main]', 'Goethes Werke', 'h.title')
+    ->text_is('h\.author', 'Goethe, Johann Wolfgang von', 'h.author')
+    ->text_is('pubDate[type=year]', '1982', 'pubDate');
 
-# Read GOE/AGA/header.xml
-$header_xml = '';
-$header_xml .= $zip->getline while !$zip->eof;
-ok($zip->close, 'Closed');
+  # Uncompress GOE/AGA/header.xml from zip file
+  $t->unzip_xml('GOE/AGA/header.xml')
+    ->text_is('dokumentSigle', 'GOE/AGA', 'dokumentSigle')
+    ->text_is('d\.title', 'Goethe: Autobiographische Schriften II, (1817-1825, 1832)', 'd.title')
+    ->text_is('creatDate', '1820-1822', 'creatDate');
 
-$t = Test::XML::Loy->new($header_xml);
-
-$t->text_is('dokumentSigle', 'GOE/AGA', 'dokumentSigle')
-  ->text_is('d\.title', 'Goethe: Autobiographische Schriften II, (1817-1825, 1832)', 'd.title')
-  ->text_is('creatDate', '1820-1822', 'creatDate');
-
-# Uncompress GOE/AGA/00000/header.xml from zip file
-$zip = IO::Uncompress::Unzip->new($outzip, Name => 'GOE/AGA/00000/header.xml');
-
-ok($zip, 'Zip-File is found');
-
-# Read GOE/AGA/00000/header.xml
-$header_xml = '';
-$header_xml .= $zip->getline while !$zip->eof;
-ok($zip->close, 'Closed');
-
-$t = Test::XML::Loy->new($header_xml);
-$t->text_is('textSigle', 'GOE/AGA.00000', 'textSigle')
-  ->text_is('analytic > h\.title[type=main]', 'Campagne in Frankreich', 'h.title');
+  # Uncompress GOE/AGA/00000/header.xml from zip file
+  $t->unzip_xml('GOE/AGA/00000/header.xml')
+    ->text_is('textSigle', 'GOE/AGA.00000', 'textSigle')
+    ->text_is('analytic > h\.title[type=main]', 'Campagne in Frankreich', 'h.title');
 
 # Uncompress GOE/AGA/00000/data.xml from zip file
-$zip = IO::Uncompress::Unzip->new($outzip, Name => 'GOE/AGA/00000/data.xml');
+  $t->unzip_xml('GOE/AGA/00000/data.xml')
+    ->attr_is('raw_text', 'docid', 'GOE_AGA.00000', 'text id')
+    ->text_like(
+      'raw_text > text',
+      qr!^Campagne in Frankreich 1792.*?uns allein begl.*cke\.$!,
+      'text content');
 
-ok($zip, 'Zip-File is found');
+  $t->unzip_xml('GOE/AGA/00000/struct/structure.xml')
+    ->text_is('span[id=s3] *[name=type]', 'Autobiographie', 'text content');
 
-# Read GOE/AGA/00000/data.xml
-my $data_xml = '';
-$data_xml .= $zip->getline while !$zip->eof;
-ok($zip->close, 'Closed');
+  $t->file_exists_not('GOE/AGA/00000/base/tokens.xml', 'External not generated');
 
-$t = Test::XML::Loy->new($data_xml);
-$t->attr_is('raw_text', 'docid', 'GOE_AGA.00000', 'text id')
-  ->text_like('raw_text > text', qr!^Campagne in Frankreich 1792.*?uns allein begl.*cke\.$!, 'text content');
+  # Uncompress GOE/AGA/00000/base/tokens_aggressive.xml from zip file
+  $t->unzip_xml('GOE/AGA/00000/base/tokens_aggressive.xml')
+    ->attr_is('spanList span:nth-child(1)', 'to', 8)
+    ->attr_is('spanList span#t_1', 'from', 9)
+    ->attr_is('spanList span#t_1', 'to', 11)
 
-# Uncompress GOE/AGA/00000/struct/structure.xml from zip file
-$zip = IO::Uncompress::Unzip->new($outzip, Name => 'GOE/AGA/00000/struct/structure.xml');
+    ->attr_is('spanList span#t_67', 'from', 427)
+    ->attr_is('spanList span#t_67', 'to', 430)
 
-ok($zip, 'Zip-File is found');
+    ->attr_is('spanList span#t_214', 'from', 1209)
+    ->attr_is('spanList span#t_214', 'to', 1212)
 
-# Read GOE/AGA/00000/struct/structure.xml
-my $struct_xml = '';
-$struct_xml .= $zip->getline while !$zip->eof;
+    ->element_count_is('spanList span', 227);
 
-ok($zip->close, 'Closed');
+  # Uncompress GOE/AGA/00000/base/tokens_conservative.xml from zip file
+  $t->unzip_xml('GOE/AGA/00000/base/tokens_conservative.xml')
+    ->attr_is('spanList span:nth-child(1)', 'to', 8)
 
-$t = Test::XML::Loy->new($struct_xml);
-$t->text_is('span[id=s3] *[name=type]', 'Autobiographie', 'text content');
+    ->attr_is('spanList span#t_1', 'from', 9)
+    ->attr_is('spanList span#t_1', 'to', 11)
 
-$zip = IO::Uncompress::Unzip->new($outzip, Name => 'GOE/AGA/00000/base/tokens.xml');
-ok(!$zip, 'External not generated');
+    ->attr_is('spanList span#t_67', 'from', 427)
+    ->attr_is('spanList span#t_67', 'to', 430)
 
-# Uncompress GOE/AGA/00000/base/tokens_aggressive.xml from zip file
-$zip = IO::Uncompress::Unzip->new($outzip, Name => 'GOE/AGA/00000/base/tokens_aggressive.xml');
+    ->attr_is('spanList span#t_214', 'from', 1209)
+    ->attr_is('spanList span#t_214', 'to', 1212)
 
-# Read GOE/AGA/00000/base/tok.xml
-my $tokens_xml = '';
-$tokens_xml .= $zip->getline while !$zip->eof;
-ok($zip->close, 'Closed');
+    ->element_count_is('spanList span', 227);
+};
 
-$t = Test::XML::Loy->new($tokens_xml);
-$t->attr_is('spanList span:nth-child(1)', 'to', 8);
 
-$t->attr_is('spanList span#t_1', 'from', 9);
-$t->attr_is('spanList span#t_1', 'to', 11);
+subtest 'Tokenize with external tokenizer' => sub {
 
-$t->attr_is('spanList span#t_67', 'from', 427);
-$t->attr_is('spanList span#t_67', 'to', 430);
+  my $cmd = catfile($f, 'cmd', 'tokenizer.pl');
 
-$t->attr_is('spanList span#t_214', 'from', 1209);
-$t->attr_is('spanList span#t_214', 'to', 1212);
+  test_tei2korapxml(
+    file => $file,
+    param => "-tc='perl $cmd'",
+    tmp => 'script_out2'
+  )
+    ->stderr_like(qr!tei2korapxml: .*? text_id=GOE_AGA\.00000!)
+    ->file_readable('GOE/AGA/00000/base/tokens.xml')
 
-$t->element_count_is('spanList span', 227);
+    # Uncompress GOE/AGA/00000/base/tokens.xml from zip file
+    ->unzip_xml('GOE/AGA/00000/base/tokens.xml')
+    ->attr_is('spanList span:nth-child(1)', 'to', 8)
+    ->attr_is('spanList span#t_1', 'from', 9)
+    ->attr_is('spanList span#t_1', 'to', 11)
+    ->attr_is('spanList span#t_67', 'from', 427)
+    ->attr_is('spanList span#t_67', 'to', 430)
+    ->attr_is('spanList span#t_214', 'from', 1209)
+    ->attr_is('spanList span#t_214', 'to', 1212)
+    ->element_count_is('spanList span', 227);
+};
 
 
-# Uncompress GOE/AGA/00000/base/tokens_conservative.xml from zip file
-$zip = IO::Uncompress::Unzip->new($outzip, Name => 'GOE/AGA/00000/base/tokens_conservative.xml');
+subtest 'Test Tokenizations' => sub {
 
-$tokens_xml = '';
-$tokens_xml .= $zip->getline while !$zip->eof;
-ok($zip->close, 'Closed');
+  my $t = test_tei2korapxml(
+    file => catfile($f, 'data', 'text_with_blanks.i5.xml'),
+    tmp => 'script_out3',
+    param => '-ti'
+  )->stderr_like(qr!tei2korapxml: .*? text_id=CORP_DOC.00001!);
 
-$t = Test::XML::Loy->new($tokens_xml);
-$t->attr_is('spanList span:nth-child(1)', 'to', 8);
+  # ~ test conservative tokenization ~
+  $t->unzip_xml('CORP/DOC/00001/base/tokens_conservative.xml')
+    ->attr_is('spanList span:nth-child(1)', 'to', 6)
 
-$t->attr_is('spanList span#t_1', 'from', 9);
-$t->attr_is('spanList span#t_1', 'to', 11);
+    ->attr_is('spanList span#t_1', 'from', 7)
+    ->attr_is('spanList span#t_1', 'to', 9)
 
-$t->attr_is('spanList span#t_67', 'from', 427);
-$t->attr_is('spanList span#t_67', 'to', 430);
+    ->attr_is('spanList span#t_3', 'from', 12)
+    ->attr_is('spanList span#t_3', 'to', 16)
 
-$t->attr_is('spanList span#t_214', 'from', 1209);
-$t->attr_is('spanList span#t_214', 'to', 1212);
+    ->attr_is('spanList span#t_9', 'from', 36)
+    ->attr_is('spanList span#t_9', 'to', 37)
 
-$t->element_count_is('spanList span', 227);
+    ->attr_is('spanList span#t_13', 'from', 44)
+    ->attr_is('spanList span#t_13', 'to', 45)          # "
 
+    ->attr_is('spanList span#t_14', 'from', 45)        # twenty-two
+    ->attr_is('spanList span#t_14', 'to', 55)
 
-# Tokenize with external tokenizer
-my $cmd = catfile($f, 'cmd', 'tokenizer.pl');
+    ->attr_is('spanList span#t_15', 'from', 55)        # "
+    ->attr_is('spanList span#t_15', 'to', 56)
 
-my ($fh2, $outzip2) = korap_tempfile('script_out2');
+    ->attr_is('spanList span#t_19', 'from', 66)
+    ->attr_is('spanList span#t_19', 'to', 67)
 
-stderr_like(
-  sub { `cat '$file' | perl '$script' -tc='perl $cmd' > '$outzip2'` },
-  qr!tei2korapxml: .*? text_id=GOE_AGA\.00000!,
-  'Processing'
-);
-
-# Uncompress GOE/AGA/00000/base/tokens.xml from zip file
-$zip = IO::Uncompress::Unzip->new($outzip2, Name => 'GOE/AGA/00000/base/tokens.xml');
-ok($zip, 'Found');
-ok(!$zip->eof, 'Readable');
-
-# Read GOE/AGA/00000/base/tokens.xml
-$tokens_xml = '';
-$tokens_xml .= $zip->getline while !$zip->eof;
-ok($zip->close, 'Closed');
-
-$t = Test::XML::Loy->new($tokens_xml);
-$t->attr_is('spanList span:nth-child(1)', 'to', 8);
-
-$t->attr_is('spanList span#t_1', 'from', 9);
-$t->attr_is('spanList span#t_1', 'to', 11);
-
-$t->attr_is('spanList span#t_67', 'from', 427);
-$t->attr_is('spanList span#t_67', 'to', 430);
-
-$t->attr_is('spanList span#t_214', 'from', 1209);
-$t->attr_is('spanList span#t_214', 'to', 1212);
-
-$t->element_count_is('spanList span', 227);
-
-
-my ($fh3, $outzip3) = korap_tempfile('script_out3');
-
-
-# ~ test conservative tokenization ~
-
-$file = catfile($f, 'data', 'text_with_blanks.i5.xml');
-
-stderr_like(
-  sub { `cat '$file' | perl '$script' --ti > '$outzip3'` },
-  qr!tei2korapxml: .*? text_id=CORP_DOC.00001!,
-  'Processing'
-);
-
-ok(-e $outzip3, "File $outzip3 exists");
-
-$zip = IO::Uncompress::Unzip->new($outzip3, Name => 'CORP/DOC/00001/base/tokens_conservative.xml');
-
-ok($zip, 'Zip-File is created');
-
-my $cons = '';
-$cons .= $zip->getline while !$zip->eof;
-ok($zip->close, 'Closed');
-
-$t = Test::XML::Loy->new($cons);
-$t->attr_is('spanList span:nth-child(1)', 'to', 6);
-
-$t->attr_is('spanList span#t_1', 'from', 7);
-$t->attr_is('spanList span#t_1', 'to', 9);
-
-$t->attr_is('spanList span#t_3', 'from', 12);
-$t->attr_is('spanList span#t_3', 'to', 16);
-
-$t->attr_is('spanList span#t_9', 'from', 36);
-$t->attr_is('spanList span#t_9', 'to', 37);
-
-$t->attr_is('spanList span#t_13', 'from', 44);
-$t->attr_is('spanList span#t_13', 'to', 45);          # "
-
-$t->attr_is('spanList span#t_14', 'from', 45);        # twenty-two
-$t->attr_is('spanList span#t_14', 'to', 55);
-
-$t->attr_is('spanList span#t_15', 'from', 55);        # "
-$t->attr_is('spanList span#t_15', 'to', 56);
-
-$t->attr_is('spanList span#t_19', 'from', 66);
-$t->attr_is('spanList span#t_19', 'to', 67);
-
-$t->element_count_is('spanList span', 20);
-
-
-# ~ test aggressive tokenization ~
-
-$zip = IO::Uncompress::Unzip->new($outzip3, Name => 'CORP/DOC/00001/base/tokens_aggressive.xml');
-
-ok($zip, 'Zip-File is created');
-
-my $aggr = '';
-$aggr .= $zip->getline while !$zip->eof;
-ok($zip->close, 'Closed');
+    ->element_count_is('spanList span', 20);
 
-$t = Test::XML::Loy->new($aggr);
 
-$t->attr_is('spanList span:nth-child(1)', 'to', 6);
+  # ~ test aggressive tokenization ~
+  $t->unzip_xml('CORP/DOC/00001/base/tokens_aggressive.xml')
+    ->attr_is('spanList span:nth-child(1)', 'to', 6)
 
-$t->attr_is('spanList span#t_1', 'from', 7);
-$t->attr_is('spanList span#t_1', 'to', 9);
+    ->attr_is('spanList span#t_1', 'from', 7)
+    ->attr_is('spanList span#t_1', 'to', 9)
 
-$t->attr_is('spanList span#t_3', 'from', 12);
-$t->attr_is('spanList span#t_3', 'to', 16);
+    ->attr_is('spanList span#t_3', 'from', 12)
+    ->attr_is('spanList span#t_3', 'to', 16)
 
-$t->attr_is('spanList span#t_9', 'from', 36);
-$t->attr_is('spanList span#t_9', 'to', 37);
+    ->attr_is('spanList span#t_9', 'from', 36)
+    ->attr_is('spanList span#t_9', 'to', 37)
 
-$t->attr_is('spanList span#t_13', 'from', 44);
-$t->attr_is('spanList span#t_13', 'to', 45);          # "
+    ->attr_is('spanList span#t_13', 'from', 44)
+    ->attr_is('spanList span#t_13', 'to', 45)          # "
 
-$t->attr_is('spanList span#t_14', 'from', 45);        # twenty
-$t->attr_is('spanList span#t_14', 'to', 51);
+    ->attr_is('spanList span#t_14', 'from', 45)        # twenty
+    ->attr_is('spanList span#t_14', 'to', 51)
 
-$t->attr_is('spanList span#t_15', 'from', 51);        # -
-$t->attr_is('spanList span#t_15', 'to', 52);
+    ->attr_is('spanList span#t_15', 'from', 51)        # -
+    ->attr_is('spanList span#t_15', 'to', 52)
 
-$t->attr_is('spanList span#t_16', 'from', 52);        # two
-$t->attr_is('spanList span#t_16', 'to', 55);
+    ->attr_is('spanList span#t_16', 'from', 52)        # two
+    ->attr_is('spanList span#t_16', 'to', 55)
 
-$t->attr_is('spanList span#t_17', 'from', 55);        # "
-$t->attr_is('spanList span#t_17', 'to', 56);
+    ->attr_is('spanList span#t_17', 'from', 55)        # "
+    ->attr_is('spanList span#t_17', 'to', 56)
 
-$t->attr_is('spanList span#t_21', 'from', 66);
-$t->attr_is('spanList span#t_21', 'to', 67);
+    ->attr_is('spanList span#t_21', 'from', 66)
+    ->attr_is('spanList span#t_21', 'to', 67)
 
-$t->element_count_is('spanList span', 22);
+    ->element_count_is('spanList span', 22);
+};
 
 
 subtest 'Check Tokenization Flags' => sub {
@@ -321,25 +210,16 @@
   my $cmd = catfile($f, 'cmd', 'tokenizer.pl');
 
   # Load example file
-  my $file = catfile($f, 'data', 'goe_sample.i5.xml');
-
-  my ($fh, $outzip) = korap_tempfile('script_tokflags');
-
-  # Generate zip file (unportable!)
-  stderr_like(
-    sub { `cat '$file' | perl '$script' -ti -tc 'perl $cmd' > '$outzip'` },
-    qr!tei2korapxml: .*? text_id=GOE_AGA\.00000!,
-    'Processing'
-  );
-
-  ok(-e $outzip, "File $outzip exists");
-
-  $zip = IO::Uncompress::Unzip->new($outzip, Name => 'GOE/AGA/00000/base/tokens_aggressive.xml');
-  ok($zip, 'Aggressive generated');
-  $zip = IO::Uncompress::Unzip->new($outzip, Name => 'GOE/AGA/00000/base/tokens_conservative.xml');
-  ok($zip, 'Conservative generated');
-  $zip = IO::Uncompress::Unzip->new($outzip, Name => 'GOE/AGA/00000/base/tokens.xml');
-  ok($zip, 'External generated');
+  test_tei2korapxml(
+    file => catfile($f, 'data', 'goe_sample.i5.xml'),
+    param => "-ti -tc 'perl $cmd'",
+    tmp => 'script_tokflags'
+  )
+    ->stderr_like(qr!tei2korapxml: .*? text_id=GOE_AGA\.00000!)
+    ->file_exists('GOE/AGA/00000/base/tokens_aggressive.xml')
+    ->file_exists('GOE/AGA/00000/base/tokens_conservative.xml')
+    ->file_exists('GOE/AGA/00000/base/tokens.xml')
+    ;
 };
 
 
@@ -396,30 +276,17 @@
   # Load example file
   my $file = catfile($f, 'data', 'goe_sample_tagged.i5.xml');
 
-  my ($fh, $outzip) = korap_tempfile('script_tagged');
+  my $t = test_tei2korapxml(
+    file => $file,
+    env => 'KORAPXMLTEI_INLINE=1',
+    tmp => 'script_tagged'
+  )
+    ->stderr_like(qr!tei2korapxml: .*? text_id=GOE_AGA\.00000!)
 
-  # Generate zip file (unportable!)
-  stderr_like(
-    sub { `cat '$file' | KORAPXMLTEI_INLINE=1 perl '$script' > '$outzip'` },
-    qr!tei2korapxml: .*? text_id=GOE_AGA\.00000!,
-    'Processing'
-  );
+    # Check zip using xml loy
+    ->unzip_xml('GOE/AGA/00000/tokens/morpho.xml')
 
-  ok(-e $outzip, "File $outzip exists");
-
-  my $zip = IO::Uncompress::Unzip->new(
-    $outzip,
-    Name => 'GOE/AGA/00000/tokens/morpho.xml'
-  );
-  ok($zip, 'Inline annotations');
-
-  my $tokens;
-  $tokens .= $zip->getline while !$zip->eof;
-  ok($zip->close, 'Closed');
-
-  my $t = Test::XML::Loy->new($tokens);
-
-  $t->attr_is('layer', 'docid', 'GOE_AGA.00000')
+    ->attr_is('layer', 'docid', 'GOE_AGA.00000')
     ->attr_is('spanList span:nth-child(1)', 'id', 's0')
     ->attr_is('spanList span:nth-child(1)', 'from', '75')
     ->attr_is('spanList span:nth-child(1)', 'to', '81')
