diff --git a/script/korapxml2krill b/script/korapxml2krill
index 5cdacc4..b9e43ef 100644
--- a/script/korapxml2krill
+++ b/script/korapxml2krill
@@ -16,6 +16,7 @@
 use KorAP::XML::Tokenizer;
 use Parallel::ForkManager;
 # TODO: use Parallel::Loops
+# TODO: make output files
 
 # CHANGES:
 # ----------------------------------------------------------
@@ -69,12 +70,12 @@
   $cmd = shift @ARGV;
 };
 
-my (@skip, @sigle);
+my (@skip, @sigle, @input);
 my $text;
 
 # Parse options from the command line
 GetOptions(
-  'input|i=s'   => \(my $input),
+  'input|i=s'   => \@input,
   'output|o=s'  => \(my $output),
   'overwrite|w' => \(my $overwrite),
   'meta|m=s'    => \(my $meta),
@@ -114,7 +115,7 @@
 );
 
 # Input has to be defined
-pod2usage(%ERROR_HASH) unless $input;
+pod2usage(%ERROR_HASH) unless @input;
 
 
 # Initialize log4perl object
@@ -130,8 +131,9 @@
 
 # Get file name based on path information
 sub get_file_name ($) {
+  my $i = $input[0];
   my $file = shift;
-  $file =~ s/^?\/?$input//;
+  $file =~ s/^?\/?$i//;
   $file =~ tr/\//-/;
   $file =~ s{^-+}{};
   return $file;
@@ -145,8 +147,9 @@
 
   # TODO: This should be done directly with a data structure! KorAP::XML::Wrap
 
-  my $call = 'perl ' . $LOCAL . '/korapxml2krill -i ' .
-    $anno . ' -o ' . $output . '/' . $file . '.json';
+  my $call = 'perl ' . $LOCAL . '/korapxml2krill';
+  $call .= ' -i ' . $anno;
+  $call .= ' -o ' . $output . '/' . $file . '.json';
   $call .= '.gz -z' if $gzip;
   $call .= ' -m ' . $meta if $meta;
   $call .= ' -w' if $overwrite;
@@ -170,6 +173,7 @@
 
 # Process a single file
 unless ($cmd) {
+  my $input = $input[0];
 
   # Can't print gzip to STDOUT
   pod2usage(%ERROR_HASH) if $gzip && !$output;
@@ -329,6 +333,8 @@
 # Extract XML files
 elsif ($cmd eq 'extract') {
 
+  my $input = $input[0];
+
   pod2usage(%ERROR_HASH) unless $output;
 
   # TODO: Support sigles and full archives
@@ -338,6 +344,8 @@
     exit(0);
   };
 
+#TODOOOOOO
+
   if (-f($input) && (my $archive = KorAP::XML::Archive->new($input))) {
 
     unless ($archive->test_unzip) {
@@ -380,7 +388,7 @@
     sub {
       my ($pid, $code) = shift;
       my $data = pop;
-      print 'Convert ['. ($jobs > 0 ? "$pid:" : '') .
+      print 'Convert ['. ($jobs > 0 ? "\$$pid:" : '') .
 	($iter++) . "/$count]" .
 	  ($code ? " $code" : '') .
 	    " $$data\n";
@@ -400,8 +408,8 @@
   };
 
   # Input is a directory
-  if (-d $input) {
-    my $it = Directory::Iterator->new($input);
+  if (-d $input[0]) {
+    my $it = Directory::Iterator->new($input[0]);
     my @dirs;
     my $dir;
 
@@ -443,12 +451,15 @@
   }
 
   # Input is a file
-  elsif (-f($input) && (my $archive = KorAP::XML::Archive->new($input))) {
+  elsif (-f($input[0]) && (my $archive = KorAP::XML::Archive->new(shift @input))) {
     unless ($archive->test_unzip) {
       print "Unzip is not installed or incompatible.\n\n";
       exit(1);
     };
 
+    # Add further annotation archived
+    # $doc->attach($_) foreach @input;
+
     print "Start processing ...\n";
     $t = Benchmark->new;
     my @dirs = $archive->list_texts;
@@ -485,7 +496,7 @@
       if ($archive->extract($dirs[$i], $temp)) {
 
 	# Create corpus directory
-	$input = catdir("$temp", $corpus);
+	my $input = catdir("$temp", $corpus);
 
 	# Temporary directory
 	my $dir = catdir($input, $doc, $text);
