diff --git a/.gitignore b/.gitignore
index bd4989d..752da96 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,6 +7,7 @@
 *.iml
 dependency-reduced-pom.xml
 admin_token
+/sandbox/
 /bin/
 /db.sqlite
 /lite/liteDB.sqlite
diff --git a/core/Changes b/core/Changes
index bec0bd2..12117b3 100644
--- a/core/Changes
+++ b/core/Changes
@@ -2,7 +2,9 @@
 24/01/2020
    - Removed salt from config and updated config files.
 05/02/2020
-   - Added welcome page.   
+   - Added welcome page.
+11/05/2020
+   - Added tool to create VC from list (diewald)
 
 # version 0.62.3
 03/12/2019
diff --git a/tools/list2vc.pl b/tools/list2vc.pl
new file mode 100644
index 0000000..9a5f1e6
--- /dev/null
+++ b/tools/list2vc.pl
@@ -0,0 +1,101 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+sub shorten ($) {
+  my $line = shift;
+  if (length($line) < 20) {
+    return $line;
+  }
+  else {
+    return substr($line,0,17) . '...';
+  };
+};
+
+
+unless (@ARGV) {
+  print <<'HELP';
+Convert a line-separated list of corpus sigles, doc sigles or
+text sigles into a virtual corpus query.
+
+  $ perl list2vc.pl my_vc.txt | gzip -vc > my_vc.jsonld.gz
+
+HELP
+exit 0;
+};
+
+my $fh;
+if (open($fh, '<' . $ARGV[0])) {
+  my %data = (
+    corpus => [],
+    doc => [],
+    text => []
+  );
+
+  # Iterate over the whole list
+  while (!eof $fh) {
+    my $line = readline($fh);
+    chomp $line;
+
+    # Get text sigles
+    if ($line =~ m!^([^\/]+\/){2}[^\/]+$!) {
+      push @{$data{text}}, $line;
+    }
+
+    # Get doc sigles
+    elsif ($line =~ m!^[^\/]+\/[^\/]+$!) {
+      push @{$data{doc}}, $line;
+    }
+
+    # Get corpus sigles
+    elsif ($line !~ m!\/!) {
+      push @{$data{corpus}}, $line;
+    }
+
+    else {
+      warn shorten($line) . q! isn't a valid sigle!;
+    };
+  };
+
+  # Create collection object
+  my $json = '{';
+  $json .= '"@context":"http://korap.ids-mannheim.de/ns/KoralQuery/v0.3/context.jsonld",';
+  $json .= '"collection":{';
+
+  unless (@{$data{corpus}} || @{$data{doc}} || @{$data{text}}) {
+    $json .= '}}';
+    close($fh);
+    print $json;
+    exit(0);
+  };
+
+  $json .= '"@type":"koral:docGroup",';
+  $json .= '"operation":"operation:or",';
+  $json .= '"operands":[';
+
+  foreach my $type (qw/corpus doc text/) {
+    unless (@{$data{$type}}) {
+      next;
+    };
+    $json .= '{';
+    $json .= '"@type":"koral:doc",';
+    $json .= '"key":"' . $type . 'Sigle",';
+    $json .= '"match":"match:eq",';
+    $json .= '"value":[';
+    $json .= join ',', map { '"' . $_ . '"' } @{$data{$type}};
+    $json .=  ']';
+    $json .= '},';
+  };
+
+  # Remove the last comma
+  chop $json;
+
+  $json .= ']}}';
+
+  close($fh);
+
+  print $json;
+} else {
+  warn $ARGV[0] . " can't be opened";
+};
+
