diff --git a/Makefile.PL b/Makefile.PL
index 2cc7547..b055a82 100644
--- a/Makefile.PL
+++ b/Makefile.PL
@@ -17,12 +17,13 @@
     'IO::Uncompress::Unzip' => '2.091',
     'Pod::Usage'      => 0,
     'Dumbbench' => '0.111',
-    'DateTime' => '1.51'
+    'DateTime' => '1.51',
+    'Capture::Tiny' => '0.48'
   },
   PREREQ_PM => {
     'XML::CompactTree::XS'     => '0.03',
     'XML::LibXML::Reader' => '2.0201',
-    'IO::Compress::Zip' => '2.091',
+    'IO::Compress::Zip' => '2.091'
   },
   MIN_PERL_VERSION => '5.016',
   EXE_FILES => ['script/tei2korapxml']
diff --git a/lib/Test/KorAP/XML/TEI.pm b/lib/Test/KorAP/XML/TEI.pm
index f43843e..7e82b9c 100644
--- a/lib/Test/KorAP/XML/TEI.pm
+++ b/lib/Test/KorAP/XML/TEI.pm
@@ -1,10 +1,18 @@
 package Test::KorAP::XML::TEI;
 use strict;
 use warnings;
+use Test::More;
+use Test::XML::Loy;
+use Capture::Tiny qw'capture_stderr';
+use Encode 'encode';
 use File::Temp qw/tempfile/;
+use File::Basename 'dirname';
+use File::Spec::Functions qw/catfile/;
+use IO::Uncompress::Unzip qw($UnzipError);
+
 use Exporter 'import';
 
-our @EXPORT_OK = qw(korap_tempfile i5_template);
+our @EXPORT_OK = qw(korap_tempfile i5_template test_tei2korapxml);
 
 our $data;
 unless ($data) {
@@ -52,6 +60,183 @@
   return $tpl;
 };
 
+# Construct script test helper object.
+# WARNING:
+#   This isn't very portable and works only in the context
+#   of the test suite.
+sub test_tei2korapxml {
+  my ($file, $script, $pattern);
+  my ($env, $param) = ('', '');
+
+  if (@_ == 1) {
+    $file = shift;
+  }
+
+  else {
+    my %hash = @_;
+    $file    = $hash{file};
+    $script  = $hash{script} if $hash{script};
+    $param   = $hash{param}  if $hash{param};
+    $env     = $hash{env}    if $hash{env};
+    $pattern = $hash{tmp}    if $hash{tmp};
+  };
+
+  # Assume script in test environment
+  unless ($script) {
+    $script = catfile(dirname(__FILE__), '..', '..', '..', '..', 'script', 'tei2korapxml');
+
+    unless (-e $script) {
+      $script = undef;
+    };
+  };
+
+  my $call;
+  if ($script) {
+    $call = "perl '$script'";
+  }
+
+  # Take installed path
+  else {
+    # This may be unoptimal, as it is silent
+    $call = 'tei2korapxml';
+  };
+
+  # Because of some capturing issues and for debugging purposes
+  # we pipe stdout through a temp file.
+  my (undef, $fn) = korap_tempfile($pattern);
+
+  $call = "cat '$file' | $env $call $param > $fn";
+  my $stderr = capture_stderr { `$call` };
+
+  # Read from written file
+  my $stdout = '';
+  if (open(my $fh, '<', $fn)) {
+    binmode($fh);
+    $stdout .= <$fh> while !eof($fh);
+    close($fh);
+  };
+
+  # Bless data for inspection
+  return bless {
+    stdout => $stdout,
+    stderr => $stderr
+  }, __PACKAGE__;
+};
+
+
+# Set or get success of the last test
+sub success {
+  my $self = shift;
+  if (@_) {
+    $self->{success} = shift;
+    return $self;
+  };
+  return $self->{success} // 0;
+};
+
+
+# Check for stderr equality
+sub stderr_is {
+  my ($self, $value, $desc) = @_;
+  return $self->_test(
+    'is',
+    $self->{stderr},
+    $value,
+    _desc($desc, 'exact match for stderr')
+  );
+};
+
+
+# Check for stderr similarity
+sub stderr_like {
+  my ($self, $value, $desc) = @_;
+  return $self->_test(
+    'like',
+    $self->{stderr},
+    $value,
+    _desc($desc, 'similar to stderr')
+  );
+};
+
+
+# Check if a zip exists
+sub file_exists {
+  my ($self, $file, $desc) = @_;
+
+  my $exists;
+  if (my $zip = IO::Uncompress::Unzip->new(\$self->{stdout}, Name => $file)) {
+    $exists = 1;
+  };
+
+  return $self->_test(
+    'ok',
+    $exists,
+    _desc($desc, "File $file exists in zip file")
+  );
+};
+
+
+# Check if a zip does not exist
+sub file_exists_not {
+  my ($self, $file, $desc) = @_;
+
+  my $exists = 1;
+  if (my $zip = IO::Uncompress::Unzip->new(\$self->{stdout}, Name => $file)) {
+    $exists = 0;
+  };
+
+  return $self->_test(
+    'ok',
+    $exists,
+    _desc($desc, "File $file does not exist in zip file")
+  );
+};
+
+
+# Check if a zip exists
+sub file_readable {
+  my ($self, $file, $desc) = @_;
+
+  my $readable;
+  if (my $zip = IO::Uncompress::Unzip->new(\$self->{stdout}, Name => $file)) {
+    $readable = !$zip->eof;
+  };
+
+  return $self->_test(
+    'ok',
+    $readable,
+    _desc($desc, "File $file exists in zip file and is readable")
+  );
+};
+
+
+# Returns an Test::XML::Loy object
+sub unzip_xml {
+  my ($self, $file) = @_;
+  if (my $zip = IO::Uncompress::Unzip->new(\$self->{stdout}, Name => $file)) {
+    my $data = '';
+    $data .= $zip->getline while !$zip->eof;
+    $zip->close;
+
+    return Test::XML::Loy->new($data);
+  };
+
+  $self->_test('ok', 0, qq!Unable to unzip "$file"!);
+  return;
+};
+
+
+sub _test {
+  my ($self, $name, @args) = @_;
+  local $Test::Builder::Level = $Test::Builder::Level + 2;
+  return $self->success(!!Test::More->can($name)->(@args));
+};
+
+
+sub _desc {
+  encode 'UTF-8', shift || shift;
+};
+
 
 1;
 
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')
