diff --git a/CHANGELOG.md b/CHANGELOG.md
index 153fa69c72fa136041550e180b2caec3d19da859..33f85337a40d19520b36117a57720916ddbd3288 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,7 @@ that users understand how the changes affect the new version.
 
 version 3.2.0-develop
 ---------------------------
++ Added STAR GenomeGenerate task.
 + GATK.HaplotypeCaller: Add `--dont-use-soft-clipped-bases` and 
   `--standard-min-confidence-threshold-for-calling` options. These are 
   required for RNA seq variant calling according to GATK best practices.
@@ -25,6 +26,7 @@ version 3.2.0-develop
 + Lima: Replace mv command with cp.
 + Add WDL task for smoove (lumpy) sv-caller.
 
+
 version 3.1.0
 ---------------------------
 + Default threads for BWA in bwa.Kit task: 4. Samtools sort in the
diff --git a/star.wdl b/star.wdl
index e1e55a262388f7f22a9c800ce558a24dbb447c73..4c4073310f9b025889652477c985a3b05bb5828e 100644
--- a/star.wdl
+++ b/star.wdl
@@ -20,6 +20,72 @@ version 1.0
 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 # SOFTWARE.
 
+task GenomeGenerate {
+    input {
+        String genomeDir = "STAR_index"
+        File referenceFasta
+        File? referenceGtf
+        Int? sjdbOverhang
+
+        Int threads = 4
+        String memory = "32G"
+        Int timeMinutes = ceil(size(referenceFasta, "G") * 240 / threads)
+        String dockerImage = "quay.io/biocontainers/star:2.7.3a--0"
+    }
+
+    command {
+        set -e
+        mkdir -p "$(dirname ~{genomeDir})"
+        STAR \
+        --runMode genomeGenerate \
+        --runThreadN ~{threads} \
+        --genomeDir ~{genomeDir} \
+        --genomeFastaFiles ~{referenceFasta} \
+        ~{"--sjdbGTFfile " + referenceGtf} \
+        ~{"--sjdbOverhang " + sjdbOverhang}
+    }
+
+    output {
+        File chrLength = "~{genomeDir}/chrLength.txt"
+        File chrNameLength = "~{genomeDir}/chrNameLength.txt"
+        File chrName = "~{genomeDir}/chrName.txt"
+        File chrStart = "~{genomeDir}/chrStart.txt"
+        File genome = "~{genomeDir}/genome.txt"
+        File genomeParameters = "~{genomeDir}/genomeParameters.txt"
+        File sa = "~{genomeDir}/SA"
+        File saIndex = "~{genomeDir}/SAindex"
+        File? exonGeTrInfo = "~{genomeDir}/exonGeTrInfo.tab"
+        File? exonInfo = "~{genomeDir}/exonInfo.tab"
+        File? geneInfo = "~{genomeDir}/geneInfo.tab"
+        File? sjdbInfo = "~{genomeDir}/sjdbInfo.txt"
+        File? sjdbListFromGtfOut = "~{genomeDir}/sjdbList.fromGTF.out.tab"
+        File? sjdbListOut = "~{genomeDir}/sjdbList.out.tab"
+        File? transcriptInfo = "~{genomeDir}/transcriptInfo.tab"
+        Array[File] starIndex = select_all([chrLength, chrNameLength, chrName, chrStart, genome, genomeParameters,
+                                            sa, saIndex, exonGeTrInfo, exonInfo, geneInfo, sjdbInfo, sjdbListFromGtfOut,
+                                            sjdbListOut, transcriptInfo])
+    }
+
+    runtime {
+        cpu: threads
+        memory: memory
+        time_minutes: timeMinutes
+        docker: dockerImage
+    }
+
+    parameter_meta {
+        genomeDir: {description:"The directory the STAR index should be written to.", categroy: "common"}
+        referenceFasta: {description: "The reference Fasta file.", category: "required"}
+        referenceGtf: {description: "The reference GTF file.", category: "common"}
+        sjdbOverhang: {description: "Equivalent to STAR's `--sjdbOverhang` option.", category: "advanced"}
+
+        threads: {description: "The number of threads to use.", category: "advanced"}
+        memory: {description: "The amount of memory this job will use.", category: "advanced"}
+        dockerImage: {description: "The docker image used for this task. Changing this may result in errors which the developers may choose not to address.",
+                      category: "advanced"}
+    }
+}
+
 task Star {
     input {
         Array[File]+ inputR1