diff --git a/textarchive/vlib001.pl b/textarchive/vlib001.pl
index 0df18ce45dae1328b041b5c17748372148452e21..af826af0eb4f175c8996d19494cd84080bf7f22a 100755
--- a/textarchive/vlib001.pl
+++ b/textarchive/vlib001.pl
@@ -280,12 +280,34 @@ elsif ($op_mode eq 'policy')
     foreach my $d_repo (sort keys %$s)
     {
       my @s_paths= sort @{$s->{$d_repo}};
+      my $part= 0;
+      my $fo_open= 0;
+      my $items= 0;
 
-      if (open (FO_COPY, '>:utf8', join ('_', '@copy', $s_repo, 'to', $d_repo)))
+      foreach my $p (@s_paths)
       {
-        foreach my $p (@s_paths) { print FO_COPY $p, "\0" }
-        close (FO_COPY);
+        unless ($fo_open)
+        {
+          my $fnm= join ('_', '@copy', $s_repo, 'to', $d_repo, 'part', ++$part);
+          unless (open (FO_COPY, '>:utf8', $fnm))
+          {
+            printf STDERR "can't write to '$fnm'\n";
+            exit;
+          }
+          print "writing items to '$fnm'\n";
+          $fo_open= 1;
+        }
+        print FO_COPY $p, "\0";
+        $items++;
+        if ($items >= 1000) # TODO: parametrize
+        {
+          close (FO_COPY);
+          $items= 0;
+          $fo_open= 0;
+        }
       }
+
+      close (FO_COPY) if ($fo_open);
     }
   }
 }