diff --git a/CHANGELOG.md b/CHANGELOG.md
index a167222c853a0f006596e3014739cca6799b3814..05e79ac365c6e1d8d28d46e3726b7041587fe707 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -19,6 +19,7 @@ version 3.2.0-develop
   number of minutes that the job will run. The associated runtime 
   attribute is `time_minutes` which can be used to inform
   a scheduler (eg. slurm) of the run time of the job.
++ 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.
@@ -33,6 +34,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 94a090a8a9bceceb5130a424e01a26ed53070078..7824c764b92e53ec39a64a1cc704382eb7fad979 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