diff --git a/biopet/sampleconfig.wdl b/biopet/sampleconfig.wdl
index 61defae84ff0583b3515f16a8e6948bbc564c84a..dacf47ee661a69498303bf3241c83f18f76bd1f6 100644
--- a/biopet/sampleconfig.wdl
+++ b/biopet/sampleconfig.wdl
@@ -1,5 +1,7 @@
 version 1.0
 
+import "../common.wdl" as common
+
 task SampleConfig {
     input {
         File? toolJar
@@ -77,3 +79,41 @@ task SampleConfigCromwellArrays {
         memory: ceil(memory * memoryMultiplier)
     }
 }
+
+task CaseControl {
+    input {
+        File? toolJar
+        String? preCommand
+        Array[File]+ inputFiles
+        Array[File]+ sampleConfigs
+        String outputPath
+        String controlTag = "control"
+
+        Int memory = 4
+        Float memoryMultiplier = 1.5
+    }
+
+    String toolCommand = if defined(toolJar)
+        then "java -Xmx" + memory + "G -jar " + toolJar
+        else "biopet-sampleconfig -Xmx" + memory + "G"
+
+    command {
+        set -e -o pipefail
+        ~{preCommand}
+        mkdir -p $(dirname ~{outputPath})
+        ~{toolCommand} CromwellArrays \
+        -i ~{sep="-i " inputFiles} \
+        -s ~{sep="-s " inputFiles} \
+        ~{"-o " + outputPath} \
+        ~{"--controlTag " + controlTag}
+    }
+
+    output {
+        File outputFile = outputPath
+        Array[CaseControl] controls = read_json(outputFile)
+    }
+
+    runtime {
+        memory: ceil(memory * memoryMultiplier)
+    }
+}
diff --git a/common.wdl b/common.wdl
index af3b66bf470be5da4cf72ca1bcb8d5cc77cacb88..c618cbfdf7d155d6b783f3d8bb8b8dc201fd8d0e 100644
--- a/common.wdl
+++ b/common.wdl
@@ -163,3 +163,10 @@ struct FastqPair {
     File? R2
     File? R2_md5
 }
+
+struct CaseControl {
+    String inputName
+    IndexedBamFile inputBam
+    String controlName
+    IndexedBamFile controlBam
+}