diff --git a/lib/KorAP/XML/TEI/Header.pm b/lib/KorAP/XML/TEI/Header.pm
index 9193928..44e7804 100644
--- a/lib/KorAP/XML/TEI/Header.pm
+++ b/lib/KorAP/XML/TEI/Header.pm
@@ -36,7 +36,7 @@
   my $self = bless [$text, undef, ''], $class;
 
   # Check header types to distinguish between siglen types
-  if ($text =~ m!^<${_HEADER_TAG} [^<]*type="([^"]+)"!) {
+  if ($text =~ m!^<${_HEADER_TAG}\s+[^<]*type="([^"]+)"!) {
     $self->[HEADTYPE] = $1;
   }
 
@@ -56,6 +56,9 @@
 
   my $sig_type = $sig{$self->[HEADTYPE]} // 'textSigle';
 
+  my $pos;
+  my $l = length('</' . $_HEADER_TAG) + 1;
+
   # Iterate over file handle
   while (<$fh>) {
 
@@ -63,40 +66,36 @@
     #   This version keeps comments in header files
 
     # End of header found - finish parsing
-    if ( m!^(.*</${_HEADER_TAG}>)(.*)$! ){
+    if (($pos = index($_, '</' . $_HEADER_TAG)) >= 0) {
 
       # Add to text
-      $self->[TEXT] .= $1;
+      $self->[TEXT] .= substr($_, 0, $l + $pos);
 
       die $log->fatal("Line with tag '</${_HEADER_TAG}>' (L$.) contains additional information")
-        if $2 !~ /^\s*$/;
+        if substr($_, $l + $pos) !~ /^\s*$/;
 
       if ($self->dir eq '') {
         $log->error("Empty '<$sig_type />' (L$.) in header");
         return;
-
       };
 
       return $self;
     };
 
     # Check for sigle in line
-    if ( m!^(.*)<$sig_type(?: [^>]*)?>([^<]*)(.*)$! ){
+    if (index($_, '<' . $sig_type) >= 0) {
 
-      my $pfx = $1;
-      my $sig = $2;
-      my $sfx = $3;
+      unless (m!^\s*<$sig_type[^>]*>([^<]*)</$sig_type>\s*$!) {
+        die $log->fatal("line with '<$sig_type />' (L$.) is not in expected format");
+      };
 
-      die $log->fatal("line with '<$sig_type />' (L$.) is not in expected format")
-        if $pfx !~ /^\s*$/  || $sfx !~ m!^</$sig_type>\s*$! || $sig =~ /^\s*$/;
-
-      $self->[SIGLE] = encode('UTF-8' , $sig);
+      $self->[SIGLE] = encode('UTF-8' , $1);
 
       # Escape sig
       my $sig_esc = decode('UTF-8', $self->sigle_esc);
 
       # replace sigle in header, if there's an escaped version that differs
-      s!(<$sig_type(?: [^>]*)?>)[^<]+</$sig_type>!$1$sig_esc</$sig_type>! if $sig_esc ne $sig;
+      s!$1</$sig_type>!$sig_esc</$sig_type>! if $sig_esc ne $1;
     };
 
     # Add line to header text
@@ -104,6 +103,7 @@
   };
 };
 
+
 # Type of the header
 sub type {
   $_[0]->[HEADTYPE];
diff --git a/script/tei2korapxml b/script/tei2korapxml
index 60a7ceb..280cacc 100755
--- a/script/tei2korapxml
+++ b/script/tei2korapxml
@@ -245,6 +245,8 @@
   # see in perlfunc: If LAYER is omitted or specified as ":raw" the filehandle is made suitable for passing binary data.
   binmode $input_fh;
 
+  my $pos;
+  my $l = length('</' . $_TEXT_BODY) + 1;
 
   # ~ loop (reading input document) ~
 
@@ -254,19 +256,16 @@
     # must-have, otherwise comments in input could be fatal (e.g.: ...<!--\n<idsHeader...\n-->...)
     remove_xml_comments( $input_fh, $_ ); # remove HTML comments (<!--...-->)
 
-    if ( $data_fl && m#^(.*)</${_TEXT_BODY}>(.*)$# ){
-
+    if ( $data_fl && ($pos = index($_, '</' . $_TEXT_BODY)) >= 0) {
 
       # ~ end of text body ~
 
 
       # write data.xml, structure.xml and evtl. morpho.xml and/or tokenization files (s.a.: $_tok_file_ext, $_tok_file_con, $_tok_file_agg)
 
-      $pfx = $1; $sfx = $2;
-
       die "ERROR ($0): main(): input line number $.: line with closing text-body tag '${_TEXT_BODY}'"
         ." contains additional information ... => Aborting\n\tline=$_"
-          if $pfx !~ /^\s*$/ || $sfx !~ /^\s*$/;
+        if (substr($_, 0, $pos) . substr($_, $l + $pos)) !~ /^\s*$/;
 
       if ( $dir ne "" ){
 
@@ -433,7 +432,7 @@
       # add line to buffer
       $buf_in .= $_;
 
-    } elsif ( m#^(.*)<${_TEXT_BODY}(?: [^>]*)?>(.*)$# ){
+    } elsif ( index($_, $_TEXT_BODY) >= 0 && m#^(.*)<${_TEXT_BODY}(?: [^>]*)?>(.*)$# ){
 
       # ~ start of text body ~
 
