diff --git a/CPAT.wdl b/CPAT.wdl
index 098d9ca61cc84de480f0a407868541937def3650..8d212b074fe7896ea8eee03b389825a00a4904a1 100644
--- a/CPAT.wdl
+++ b/CPAT.wdl
@@ -31,6 +31,7 @@ task CPAT {
         # CPAT should not index the reference genome.
         Array[String]? startCodons
         Array[String]? stopCodons
+        Int timeMinutes = 1 + ceil(size(gene, "G") * 30)
         String dockerImage = "biocontainers/cpat:v1.2.4_cv1"
     }
 
@@ -55,6 +56,7 @@ task CPAT {
 
     runtime {
         docker: dockerImage
+        time_minutes: timeMinutes
     }
 
     parameter_meta {
@@ -67,6 +69,7 @@ task CPAT {
                                category: "advanced"}
         startCodons: {description: "Equivalent to CPAT's `--start` option.", category: "advanced"}
         stopCodons: {description: "Equivalent to CPAT's `--stop` option.", category: "advanced"}
+        timeMinutes: {description: "The maximum amount of time the job will run in minutes.", 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"}
     }
diff --git a/bcftools.wdl b/bcftools.wdl
index d923885db5bf3cc1c07099fe29fba605d4690083..53165c6be2118579bc1705a11577b52e80c8591e 100644
--- a/bcftools.wdl
+++ b/bcftools.wdl
@@ -27,7 +27,7 @@ task Bcf2Vcf {
         File bcf
         String outputPath = "./bcftools/SV.vcf"
         String memory = "2G"
-        Int timeMinutes = ceil(size(bcf, "G"))
+        Int timeMinutes = 1 + ceil(size(bcf, "G"))
         String dockerImage = "quay.io/biocontainers/bcftools:1.9--ha228f0b_3"
     }
 
diff --git a/bedtools.wdl b/bedtools.wdl
index 4f39e2a8907b3b8a713373a562e466905f727587..99bb351edce2583eb0835fac39a98ffcf654343f 100644
--- a/bedtools.wdl
+++ b/bedtools.wdl
@@ -24,8 +24,10 @@ task Complement {
     input {
         File faidx
         File inputBed
-        String dockerImage = "quay.io/biocontainers/bedtools:2.23.0--hdbcaa40_3"
         String outputBed = basename(inputBed, "\.bed") + ".complement.bed"
+        String memory = "2G"
+        Int timeMinutes = 1 + ceil(size([inputBed, faidx], "G"))
+        String dockerImage = "quay.io/biocontainers/bedtools:2.23.0--hdbcaa40_3"
     }
 
     # Use a fasta index file to get the genome sizes. And convert that to the
@@ -44,20 +46,19 @@ task Complement {
     }
 
     runtime {
+        memory: memory
+        time_minutes: timeMinutes
         docker: dockerImage
     }
 
     parameter_meta {
-        faidx: {description: "The fasta index (.fai) file from which to extract the genome sizes",
-                category: "required"}
-        inputBed: {description: "The inputBed to complement",
-                category: "required"}
-        outputBed: {description: "The path to write the output to",
-                     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"
-        }
+        faidx: {description: "The fasta index (.fai) file from which to extract the genome sizes.", category: "required"}
+        inputBed: {description: "The inputBed to complement.", category: "required"}
+        outputBed: {description: "The path to write the output to.", category: "advanced"}
+        memory: {description: "The amount of memory needed for the job.", category: "advanced"}
+        timeMinutes: {description: "The maximum amount of time the job will run in minutes.", 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"}
     }
 }
 
@@ -97,6 +98,8 @@ task MergeBedFiles {
     input {
         Array[File]+ bedFiles
         String outputBed = "merged.bed"
+        String memory = "2G"
+        Int timeMinutes = 1 + ceil(size(bedFiles, "G"))
         String dockerImage = "quay.io/biocontainers/bedtools:2.23.0--hdbcaa40_3"
     }
 
@@ -111,17 +114,17 @@ task MergeBedFiles {
     }
 
     runtime {
+        memory: memory
+        time_minutes: timeMinutes
         docker: dockerImage
     }
     parameter_meta {
-        bedFiles: {description: "The bed files to merge",
-                category: "required"}
-        outputBed: {description: "The path to write the output to",
-                     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"
-        }
+        bedFiles: {description: "The bed files to merge.", category: "required"}
+        outputBed: {description: "The path to write the output to.", category: "advanced"}
+        memory: {description: "The amount of memory needed for the job.", category: "advanced"}
+        timeMinutes: {description: "The maximum amount of time the job will run in minutes.", 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"}
     }
 }
 
@@ -172,6 +175,8 @@ task Intersect {
         # Giving a faidx file will set the sorted option.
         File? faidx
         String outputBed = "intersect.bed"
+        String memory = "2G"
+        Int timeMinutes = 1 + ceil([regionsA, regionsB], "G"))
         String dockerImage = "quay.io/biocontainers/bedtools:2.23.0--hdbcaa40_3"
     }
     Boolean sorted = defined(faidx)
@@ -192,21 +197,20 @@ task Intersect {
     }
 
     runtime {
+        memory: memory
+        time_minutes: timeMinutes
         docker: dockerImage
     }
 
     parameter_meta {
         faidx: {description: "The fasta index (.fai) file that is used to create the genome file required for sorted output. Implies sorted option.",
                 category: "common"}
-        regionsA: {description: "Region file a to intersect",
-                   category: "required"}
-        regionsB: {description: "Region file b to intersect",
-                   category: "required"}
-        outputBed: {description: "The path to write the output to",
-                    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"
-        }
+        regionsA: {description: "Region file a to intersect", category: "required"}
+        regionsB: {description: "Region file b to intersect", category: "required"}
+        outputBed: {description: "The path to write the output to", category: "advanced"}
+        memory: {description: "The amount of memory needed for the job.", category: "advanced"}
+        timeMinutes: {description: "The maximum amount of time the job will run in minutes.", 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"}
     }
 }
diff --git a/bowtie.wdl b/bowtie.wdl
index 94a809fa6787d85eb355c38f969f02285b74a004..87427e7dc1261aff0473bd353958719710761ff0 100644
--- a/bowtie.wdl
+++ b/bowtie.wdl
@@ -37,7 +37,7 @@ task Bowtie {
         String? samRG
 
         Int threads = 1
-        Int timeMinutes = ceil(size(flatten([readsUpstream, readsDownstream]), "G") * 300 / threads)
+        Int timeMinutes = 1 + ceil(size(flatten([readsUpstream, readsDownstream]), "G") * 300 / threads)
         String memory = "10G"
         String picardXmx = "4G"
         # Image contains bowtie=1.2.2 and picard=2.9.2
diff --git a/bwa.wdl b/bwa.wdl
index 247386d87c8df17d2ec5d161d2323d7f280ece01..a39eb3e9ffc3b4ddb2180c2a4a2d712f00efe56d 100644
--- a/bwa.wdl
+++ b/bwa.wdl
@@ -31,7 +31,7 @@ task Mem {
         Int threads = 4
         String memory = "20G"
         String picardXmx = "4G"
-        Int timeMinutes = ceil(size([read1, read2], "G") * 200 / threads)
+        Int timeMinutes = 1 + ceil(size([read1, read2], "G") * 200 / threads)
         # A mulled container is needed to have both picard and bwa in one container.
         # This container contains: picard (2.18.7), bwa (0.7.17-r1188)
         String dockerImage = "quay.io/biocontainers/mulled-v2-002f51ea92721407ef440b921fb5940f424be842:43ec6124f9f4f875515f9548733b8b4e5fed9aa6-0"
@@ -100,7 +100,7 @@ task Kit {
         String sortMemoryPerThread = "4G"
         Int compressionLevel = 1
         String memory = "20G"
-        Int timeMinutes = ceil(size([read1, read2], "G") * 220 / threads)
+        Int timeMinutes = 1 + ceil(size([read1, read2], "G") * 220 / threads)
         String dockerImage = "biocontainers/bwakit:v0.7.15_cv1"
     }
 
diff --git a/clever.wdl b/clever.wdl
index 2da9f4d2922435698f25f8580a1727b7a24fc141..7e1eac4686b72263de74c457831b03152742836d 100644
--- a/clever.wdl
+++ b/clever.wdl
@@ -78,6 +78,7 @@ task Mateclever {
         outputPath: {description: "The location the output VCF file should be written.", category: "common"}
         threads: {description: "The the number of threads required to run a program", category: "advanced"}
         memory: {description: "The memory required to run the programs", category: "advanced"}
+        timeMinutes: {description: "The maximum amount of time the job will run in minutes.", 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"}
     }
 }
diff --git a/cutadapt.wdl b/cutadapt.wdl
index 421259d9bf28b5a54e33d929c2f4e3b39977f5bd..ad32ff21aff4958f9955628753a7b68468a855cd 100644
--- a/cutadapt.wdl
+++ b/cutadapt.wdl
@@ -173,227 +173,70 @@ task Cutadapt {
     }
 
     parameter_meta {
-        read1: {
-            description: "The first or single end fastq file to be run through cutadapt.",
-            category: "required"
-        }
-        read2: {
-            description: "An optional second end fastq file to be run through cutadapt.",
-            category: "common"
-        }
-        read1output: {
-            description: "The name of the resulting first or single end fastq file.",
-            category: "common"
-        }
-        read2output: {
-            description: "The name of the resulting second end fastq file.",
-            category: "common"
-        }
-        adapter: {
-            description: "A list of 3' ligated adapter sequences to be cut from the given first or single end fastq file.",
-            category: "common"
-        }
-        front: {
-            description: "A list of 5' ligated adapter sequences to be cut from the given first or single end fastq file.",
-            category: "advanced"
-        }
-        anywhere: {
-            description: "A list of 3' or 5' ligated adapter sequences to be cut from the given first or single end fastq file.",
-            category: "advanced"
-        }
-        adapterRead2: {
-            description: "A list of 3' ligated adapter sequences to be cut from the given second end fastq file.",
-            category: "common"
-        }
-        frontRead2: {
-            description: "A list of 5' ligated adapter sequences to be cut from the given second end fastq file.",
-            category: "advanced"
-        }
-        anywhereRead2: {
-            description: "A list of 3' or 5' ligated adapter sequences to be cut from the given second end fastq file.",
-            category: "advanced"
-        }
-        interleaved: {
-            description: "Equivalent to cutadapt's --interleaved flag.",
-            category: "advanced"
-        }
-        pairFilter: {
-            description: "Equivalent to cutadapt's --pair-filter option.",
-            category: "advanced"
-        }
-        errorRate: {
-            description: "Equivalent to cutadapt's --error-rate option.",
-            category: "advanced"
-        }
-        noIndels: {
-            description: "Equivalent to cutadapt's --no-indels flag.",
-            category: "advanced"
-        }
-        times: {
-            description: "Equivalent to cutadapt's --times option.",
-            category: "advanced"
-        }
-        overlap: {
-            description: "Equivalent to cutadapt's --overlap option.",
-            category: "advanced"
-        }
-        matchReadWildcards: {
-            description: "Equivalent to cutadapt's --match-read-wildcards flag.",
-            category: "advanced"
-        }
-        noMatchAdapterWildcards: {
-            description: "Equivalent to cutadapt's --no-match-adapter-wildcards flag.",
-            category: "advanced"
-        }
-        noTrim: {
-            description: "Equivalent to cutadapt's --no-trim flag.",
-            category: "advanced"
-        }
-        maskAdapter: {
-            description: "Equivalent to cutadapt's --mask-adapter flag.",
-            category: "advanced"
-        }
-        cut: {
-            description: "Equivalent to cutadapt's --cut option.",
-            category: "advanced"
-        }
-        nextseqTrim: {
-            description: "Equivalent to cutadapt's --nextseq-trim option.",
-            category: "advanced"
-        }
-        qualityCutoff: {
-            description: "Equivalent to cutadapt's --quality-cutoff option.",
-            category: "advanced"
-        }
-        qualityBase: {
-            description: "Equivalent to cutadapt's --quality-base option.",
-            category: "advanced"
-        }
-        length: {
-            description: "Equivalent to cutadapt's --length option.",
-            category: "advanced"
-        }
-        trimN: {
-            description: "Equivalent to cutadapt's --trim-n flag.",
-            category: "advanced"
-        }
-        lengthTag: {
-            description: "Equivalent to cutadapt's --length-tag option.",
-            category: "advanced"
-        }
-        stripSuffix: {
-            description: "Equivalent to cutadapt's --strip-suffix option.",
-            category: "advanced"
-        }
-        prefix: {
-            description: "Equivalent to cutadapt's --prefix option.",
-            category: "advanced"
-        }
-        suffix: {
-            description: "Equivalent to cutadapt's --suffix option.",
-            category: "advanced"
-        }
-        minimumLength: {
-            description: "Equivalent to cutadapt's --minimum-length option.",
-            category: "advanced"
-        }
-        maximumLength: {
-            description: "Equivalent to cutadapt's --maximum-length option.",
-            category: "advanced"
-        }
-        maxN: {
-            description: "Equivalent to cutadapt's --max-n option.",
-            category: "advanced"
-        }
-        discardTrimmed: {
-            description: "Equivalent to cutadapt's --quality-cutoff option.",
-            category: "advanced"
-        }
-        discardUntrimmed: {
-            description: "Equivalent to cutadapt's --discard-untrimmed option.",
-            category: "advanced"
-        }
-        infoFilePath: {
-            description: "Equivalent to cutadapt's --info-file option.",
-            category: "advanced"
-        }
-        restFilePath: {
-            description: "Equivalent to cutadapt's --rest-file option.",
-            category: "advanced"
-        }
-        wildcardFilePath: {
-            description: "Equivalent to cutadapt's --wildcard-file option.",
-            category: "advanced"
-        }
-        tooShortOutputPath: {
-            description: "Equivalent to cutadapt's --too-short-output option.",
-            category: "advanced"
-        }
-        tooLongOutputPath: {
-            description: "Equivalent to cutadapt's --too-long-output option.",
-            category: "advanced"
-        }
-        untrimmedOutputPath: {
-            description: "Equivalent to cutadapt's --untrimmed-output option.",
-            category: "advanced"
-        }
-        tooShortPairedOutputPath: {
-            description: "Equivalent to cutadapt's --too-short-paired-output option.",
-            category: "advanced"
-        }
-        tooLongPairedOutputPath: {
-            description: "Equivalent to cutadapt's --too-long-paired-output option.",
-            category: "advanced"
-        }
-        untrimmedPairedOutputPath: {
-            description: "Equivalent to cutadapt's --untrimmed-paired-output option.",
-            category: "advanced"
-        }
-        colorspace: {
-            description: "Equivalent to cutadapt's --colorspace flag.",
-            category: "advanced"
-        }
-        doubleEncode: {
-            description: "Equivalent to cutadapt's --double-encode flag.",
-            category: "advanced"
-        }
-        stripF3: {
-            description: "Equivalent to cutadapt's --strip-f3 flag.",
-            category: "advanced"
-        }
-        maq: {
-            description: "Equivalent to cutadapt's --maq flag.",
-            category: "advanced"
-        }
-        bwa: {
-            description: "Equivalent to cutadapt's --bwa flag.",
-            category: "advanced"
-        }
-        zeroCap: {
-            description: "Equivalent to cutadapt's --zero-cap flag.",
-            category: "advanced"
-        }
-        noZeroCap: {
-            description: "Equivalent to cutadapt's --no-zero-cap flag.",
-            category: "advanced"
-        }
-        reportPath: {
-            description: "The name of the file to write cutadapts's stdout to, this contains some metrics.",
-            category: "common"
-        }
-        compressionLevel: {description: "The compression level if gzipped output is used.",
-                           category: "advanced"}
-        cores: {
-            description: "The number of cores 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"
-        }
+        read1: {description: "The first or single end fastq file to be run through cutadapt.", category: "required"}
+        read2: {description: "An optional second end fastq file to be run through cutadapt.", category: "common"}
+        read1output: {description: "The name of the resulting first or single end fastq file.", category: "common"}
+        read2output: {description: "The name of the resulting second end fastq file.", category: "common"}
+        adapter: {description: "A list of 3' ligated adapter sequences to be cut from the given first or single end fastq file.",
+                  category: "common"}
+        front: {description: "A list of 5' ligated adapter sequences to be cut from the given first or single end fastq file.",
+                category: "advanced"}
+        anywhere: {description: "A list of 3' or 5' ligated adapter sequences to be cut from the given first or single end fastq file.",
+                   category: "advanced"}
+        adapterRead2: {description: "A list of 3' ligated adapter sequences to be cut from the given second end fastq file.",
+                       category: "common"}
+        frontRead2: {description: "A list of 5' ligated adapter sequences to be cut from the given second end fastq file.",
+                     category: "advanced"}
+        anywhereRead2: {description: "A list of 3' or 5' ligated adapter sequences to be cut from the given second end fastq file.",
+                        category: "advanced"}
+        interleaved: {description: "Equivalent to cutadapt's --interleaved flag.", category: "advanced"}
+        pairFilter: {description: "Equivalent to cutadapt's --pair-filter option.", category: "advanced"}
+        errorRate: {description: "Equivalent to cutadapt's --error-rate option.", category: "advanced"}
+        noIndels: {description: "Equivalent to cutadapt's --no-indels flag.", category: "advanced"}
+        times: {description: "Equivalent to cutadapt's --times option.", category: "advanced"}
+        overlap: {description: "Equivalent to cutadapt's --overlap option.", category: "advanced"}
+        matchReadWildcards: {description: "Equivalent to cutadapt's --match-read-wildcards flag.", category: "advanced"}
+        noMatchAdapterWildcards: {description: "Equivalent to cutadapt's --no-match-adapter-wildcards flag.", category: "advanced"}
+        noTrim: {description: "Equivalent to cutadapt's --no-trim flag.", category: "advanced"}
+        maskAdapter: {description: "Equivalent to cutadapt's --mask-adapter flag.", category: "advanced"}
+        cut: {description: "Equivalent to cutadapt's --cut option.", category: "advanced"}
+        nextseqTrim: {description: "Equivalent to cutadapt's --nextseq-trim option.", category: "advanced"}
+        qualityCutoff: {description: "Equivalent to cutadapt's --quality-cutoff option.", category: "advanced"}
+        qualityBase: {description: "Equivalent to cutadapt's --quality-base option.", category: "advanced"}
+        length: {description: "Equivalent to cutadapt's --length option.", category: "advanced"}
+        trimN: {description: "Equivalent to cutadapt's --trim-n flag.", category: "advanced"}
+        lengthTag: {description: "Equivalent to cutadapt's --length-tag option.", category: "advanced"}
+        stripSuffix: {description: "Equivalent to cutadapt's --strip-suffix option.", category: "advanced"}
+        prefix: {description: "Equivalent to cutadapt's --prefix option.", category: "advanced"}
+        suffix: {description: "Equivalent to cutadapt's --suffix option.", category: "advanced"}
+        minimumLength: {description: "Equivalent to cutadapt's --minimum-length option.", category: "advanced"}
+        maximumLength: {description: "Equivalent to cutadapt's --maximum-length option.", category: "advanced"}
+        maxN: {description: "Equivalent to cutadapt's --max-n option.", category: "advanced"}
+        discardTrimmed: {description: "Equivalent to cutadapt's --quality-cutoff option.", category: "advanced"}
+        discardUntrimmed: {description: "Equivalent to cutadapt's --discard-untrimmed option.", category: "advanced"}
+        infoFilePath: {description: "Equivalent to cutadapt's --info-file option.", category: "advanced"}
+        restFilePath: {description: "Equivalent to cutadapt's --rest-file option.", category: "advanced"}
+        wildcardFilePath: {description: "Equivalent to cutadapt's --wildcard-file option.", category: "advanced"}
+        tooShortOutputPath: {description: "Equivalent to cutadapt's --too-short-output option.", category: "advanced"}
+        tooLongOutputPath: {description: "Equivalent to cutadapt's --too-long-output option.", category: "advanced"}
+        untrimmedOutputPath: {description: "Equivalent to cutadapt's --untrimmed-output option.", category: "advanced"}
+        tooShortPairedOutputPath: {description: "Equivalent to cutadapt's --too-short-paired-output option.", category: "advanced"}
+        tooLongPairedOutputPath: {description: "Equivalent to cutadapt's --too-long-paired-output option.", category: "advanced"}
+        untrimmedPairedOutputPath: {description: "Equivalent to cutadapt's --untrimmed-paired-output option.", category: "advanced"}
+        colorspace: {description: "Equivalent to cutadapt's --colorspace flag.", category: "advanced"}
+        doubleEncode: {description: "Equivalent to cutadapt's --double-encode flag.", category: "advanced"}
+        stripF3: {description: "Equivalent to cutadapt's --strip-f3 flag.", category: "advanced"}
+        maq: {description: "Equivalent to cutadapt's --maq flag.", category: "advanced"}
+        bwa: {description: "Equivalent to cutadapt's --bwa flag.", category: "advanced"}
+        zeroCap: {description: "Equivalent to cutadapt's --zero-cap flag.", category: "advanced"}
+        noZeroCap: {description: "Equivalent to cutadapt's --no-zero-cap flag.", category: "advanced"}
+        reportPath: {description: "The name of the file to write cutadapts's stdout to, this contains some metrics.",
+                     category: "common"}
+        compressionLevel: {description: "The compression level if gzipped output is used.", category: "advanced"}
+        cores: {description: "The number of cores to use.", category: "advanced"}
+        memory: {description: "The amount of memory this job will use.", category: "advanced"}
+        timeMinutes: {description: "The maximum amount of time the job will run in minutes.", 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"}
     }
 }
diff --git a/fastqc.wdl b/fastqc.wdl
index 6708a6bc5a26407cbf6718e6fb7ba45836c6fab2..606c1bd4207c42c38f745a4f437d4d85e2008857 100644
--- a/fastqc.wdl
+++ b/fastqc.wdl
@@ -40,7 +40,7 @@ task Fastqc {
         Int threads = 1
         # Fastqc uses 250MB per thread in its wrapper.
         String memory = "~{250 + 250 * threads}M"
-        Int? timeMinutes = 1 + ceil(size(seqFile, "G")) * 4
+        Int timeMinutes = 1 + ceil(size(seqFile, "G")) * 4
         String dockerImage = "quay.io/biocontainers/fastqc:0.11.9--0"
         Array[File]? NoneArray
         File? NoneFile
@@ -106,6 +106,7 @@ task Fastqc {
         dir: {description: "Equivalent to fastqc's --dir option.", category: "advanced"}
         threads: {description: "The number of cores to use.", category: "advanced"}
         memory: {description: "The amount of memory this job will use.", category: "advanced"}
+        timeMinutes: {description: "The maximum amount of time the job will run in minutes.", 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"}
     }
diff --git a/gatk.wdl b/gatk.wdl
index cb26ca7511e1f1fb628208e84dea4185f52fa190..366b32ddb166a9f3de730804ae8d58cbad19cda4 100644
--- a/gatk.wdl
+++ b/gatk.wdl
@@ -416,7 +416,7 @@ task CombineGVCFs {
 
         String memory = "5G"
         String javaXmx = "4G"
-        Int timeMinutes = ceil(size(gvcfFiles, "G") * 8)
+        Int timeMinutes = 1 + ceil(size(gvcfFiles, "G") * 8)
         String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
     }
 
diff --git a/gffcompare.wdl b/gffcompare.wdl
index ca2b1669d64c2fe95c7068df00a8445fa9f6e21a..197dd9ade74cade9b67bb77bbd1eee2492a7924e 100644
--- a/gffcompare.wdl
+++ b/gffcompare.wdl
@@ -44,6 +44,7 @@ task GffCompare {
         Boolean verbose = false
         Boolean debugMode = false
 
+        Int timeMinutes = 1 + ceil(size(inputGtfFiles, "G") * 30)
         String dockerImage = "quay.io/biocontainers/gffcompare:0.10.6--h2d50403_0"
 
         # This workaround only works in the input section.
@@ -110,6 +111,7 @@ task GffCompare {
     }
 
     runtime {
+       time_minutes: timeMinutes
        docker: dockerImage
     }
 
@@ -134,6 +136,7 @@ task GffCompare {
         noTmap: {description: "Equivalent to gffcompare's `-T` flag.", category: "advanced"}
         verbose: {description: "Equivalent to gffcompare's `-V` flag.", category: "advanced"}
         debugMode: {description: "Equivalent to gffcompare's `-D` flag.", category: "advanced"}
+        timeMinutes: {description: "The maximum amount of time the job will run in minutes.", 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"}
     }
diff --git a/gffread.wdl b/gffread.wdl
index 6b23785c7ee37c0fb112ed59d45424d2bced07d0..d83e4d76564411d1edd8b3ef5a17ac208f8bad67 100644
--- a/gffread.wdl
+++ b/gffread.wdl
@@ -30,6 +30,7 @@ task GffRead {
         String? proteinFastaPath
         String? filteredGffPath
         Boolean outputGtfFormat = false
+        Int timeMinutes = 1 + ceil(size(inputGff) * 10)
         String dockerImage = "quay.io/biocontainers/gffread:0.9.12--0"
     }
 
@@ -62,6 +63,7 @@ task GffRead {
 
     runtime {
         docker: dockerImage
+        time_minutes: timeMinutes
     }
 
     parameter_meta {
@@ -73,6 +75,7 @@ task GffRead {
         proteinFastaPath: {description: "The location the protein fasta should be written to.", category: "advanced"}
         filteredGffPath: {description: "The location the filtered GFF should be written to.", category: "advanced"}
         outputGtfFormat: {description: "Equivalent to gffread's `-T` flag.", category: "advanced"}
+        timeMinutes: {description: "The maximum amount of time the job will run in minutes.", 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"}
     }
diff --git a/hisat2.wdl b/hisat2.wdl
index bc6be2e84315d05a05f9d14da75cbe4c0507bbd4..3ea18ee8a8d272e0af04ec59f3e79e6352538eba 100644
--- a/hisat2.wdl
+++ b/hisat2.wdl
@@ -32,8 +32,9 @@ task Hisat2 {
         String platform = "illumina"
         Boolean downstreamTranscriptomeAssembly = true
 
-        Int threads = 1
+        Int threads = 4
         String memory = "48G"
+        Int timeMinutes = 1 + ceil(size([inputR1, inputR2], "G") * 180 / threads)
         # quay.io/biocontainers/mulled-v2-a97e90b3b802d1da3d6958e0867610c718cb5eb1
         # is a combination of hisat2 and samtools
         # hisat2=2.1.0, samtools=1.8
@@ -67,6 +68,7 @@ task Hisat2 {
     runtime {
         memory: memory
         cpu: threads + 1
+        time_minutes: timeMinutes
         docker: dockerImage
     }
 
@@ -82,6 +84,7 @@ task Hisat2 {
         downstreamTranscriptomeAssembly: {description: "Equivalent to hisat2's `--dta` flag.", category: "advanced"}
         threads: {description: "The number of threads to use.", category: "advanced"}
         memory: {description: "The amount of memory this job will use.", category: "advanced"}
+        timeMinutes: {description: "The maximum amount of time the job will run in minutes.", 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"}
     }
diff --git a/htseq.wdl b/htseq.wdl
index 900a88a79b96fab968b1244d0b3d6e090db70df5..9fad1714a69edc988ed16aba5e4ff231185ff0ed 100644
--- a/htseq.wdl
+++ b/htseq.wdl
@@ -33,6 +33,7 @@ task HTSeqCount {
         Array[String] additionalAttributes = []
 
         String memory = "40G"
+        Int timeMinutes = 1 + ceil(size(inputBams, "G") * 60)
         String dockerImage = "quay.io/biocontainers/htseq:0.11.2--py37h637b7d7_1"
     }
 
@@ -56,54 +57,24 @@ task HTSeqCount {
     }
 
     runtime {
+        time_minutes: timeMinutes
         memory: memory
         docker: dockerImage
     }
 
     parameter_meta {
-        inputBams: {
-            description: "The input BAM files.",
-            category: "required"
-        }
-        gtfFile: {
-            description: "A GTF/GFF file containing the features of interest.",
-            category: "required"
-        }
-        outputTable: {
-            description: "The path to which the output table should be written.",
-            category: "common"
-        }
-        format: {
-            description: "Equivalent to the -f option of htseq-count.",
-            category: "advanced"
-        }
-        order: {
-            description: "Equivalent to the -r option of htseq-count.",
-            category: "advanced"
-        }
-        stranded: {
-            description: "Equivalent to the -s option of htseq-count.",
-            category: "common"
-        }
-        featureType: {
-            description: "Equivalent to the --type option of htseq-count.",
-            category: "advanced"
-        }
-        idattr: {
-            description: "Equivalent to the --idattr option of htseq-count.",
-            category: "advanced"
-        }
-        additionalAttributes: {
-            description: "Equivalent to the --additional-attr option of htseq-count.",
-            category: "advanced"
-        }
-        memory: {
-            description: "The amount of memory the job requires in GB.",
-            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"
-        }
+        inputBams: {description: "The input BAM files.", category: "required"}
+        gtfFile: {description: "A GTF/GFF file containing the features of interest.", category: "required"}
+        outputTable: {description: "The path to which the output table should be written.", category: "common"}
+        format: {description: "Equivalent to the -f option of htseq-count.", category: "advanced"}
+        order: {description: "Equivalent to the -r option of htseq-count.", category: "advanced"}
+        stranded: {description: "Equivalent to the -s option of htseq-count.", category: "common"}
+        featureType: {description: "Equivalent to the --type option of htseq-count.", category: "advanced"}
+        idattr: {description: "Equivalent to the --idattr option of htseq-count.", category: "advanced"}
+        additionalAttributes: {description: "Equivalent to the --additional-attr option of htseq-count.", category: "advanced"}
+        memory: {description: "The amount of memory the job requires in GB.", category: "advanced"}
+        timeMinutes: {description: "The maximum amount of time the job will run in minutes.", 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"}
     }
 }
diff --git a/picard.wdl b/picard.wdl
index 2eb9d410e9be3248264c091bc8f5ce816a44a44b..d19e3ac41e17370eec001a8df0f1c2a44e8c7c7e 100644
--- a/picard.wdl
+++ b/picard.wdl
@@ -87,7 +87,7 @@ task CollectMultipleMetrics {
 
         String memory = "10G"
         String javaXmx = "8G"
-        Int timeMinutes = ceil(size(inputBam, "G") * 6)
+        Int timeMinutes = 1 + ceil(size(inputBam, "G") * 6)
         String dockerImage = "quay.io/biocontainers/picard:2.20.5--0"
     }
 
@@ -208,7 +208,7 @@ task CollectRnaSeqMetrics {
 
         String memory = "10G"
         String javaXmx =  "8G"
-        Int timeMinutes = ceil(size(inputBam, "G") * 6)
+        Int timeMinutes = 1 + ceil(size(inputBam, "G") * 6)
         String dockerImage = "quay.io/biocontainers/picard:2.20.5--0"
     }
 
@@ -268,7 +268,7 @@ task CollectTargetedPcrMetrics {
 
         String memory = "5G"
         String javaXmx = "4G"
-        Int timeMinutes = ceil(size(inputBam, "G") * 6)
+        Int timeMinutes = 1 + ceil(size(inputBam, "G") * 6)
         String dockerImage = "quay.io/biocontainers/picard:2.20.5--0"
     }
 
@@ -333,7 +333,7 @@ task GatherBamFiles {
 
         String memory = "5G"
         String javaXmx = "4G"
-        Int timeMinutes = ceil(size(inputBams, "G") * 0.5)
+        Int timeMinutes = 1 + ceil(size(inputBams, "G") * 0.5)
         String dockerImage = "quay.io/biocontainers/picard:2.20.5--0"
     }
 
@@ -428,7 +428,7 @@ task MarkDuplicates {
 
         String memory = "10G"
         String javaXmx = "8G"
-        Int timeMinutes = ceil(size(inputBams, "G")* 8)
+        Int timeMinutes = 1 + ceil(size(inputBams, "G")* 8)
         String dockerImage = "quay.io/biocontainers/picard:2.20.5--0"
 
         # The program default for READ_NAME_REGEX is appropriate in nearly every case.
@@ -499,7 +499,7 @@ task MergeVCFs {
 
         String memory = "5G"
         String javaXmx = "4G"
-        Int timeMinutes = ceil(size(inputVCFs, "G"))
+        Int timeMinutes = 1 + ceil(size(inputVCFs, "G"))
         String dockerImage = "quay.io/biocontainers/picard:2.20.5--0"
     }
 
diff --git a/samtools.wdl b/samtools.wdl
index dc462f824e5ea23878794c532c1aeb13b9ac8598..5ffebc9ced931a1edba9022e2bb9df2fafb8d1c2 100644
--- a/samtools.wdl
+++ b/samtools.wdl
@@ -61,6 +61,8 @@ task Index {
     input {
         File bamFile
         String? outputBamPath
+        String memory = "2G"
+        Int timeMinutes = 1 + ceil(size(bamFile, "G") * 4)
         String dockerImage = "quay.io/biocontainers/samtools:1.8--h46bd0b3_5"
     }
 
@@ -87,6 +89,8 @@ task Index {
     }
 
     runtime {
+        memory: memory
+        time_minutes: timeMinutes
         docker: dockerImage
     }
 
@@ -95,6 +99,8 @@ task Index {
         bamFile: {description: "The BAM file for which an index should be made.", category: "required"}
         outputBamPath: {description: "The location where the BAM file should be written to. The index will appear alongside this link to the BAM file.",
                         category: "common"}
+        memory: {description: "The amount of memory needed for the job.", category: "advanced"}
+        timeMinutes: {description: "The maximum amount of time the job will run in minutes.", 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"}
     }
@@ -203,7 +209,7 @@ task FilterShortReadsBam {
         File bamFile
         String outputPathBam
         String memory = "1G"
-        Int timeMinutes = ceil(size(bamFile, "G") * 8)
+        Int timeMinutes = 1 + ceil(size(bamFile, "G") * 8)
         String dockerImage = "quay.io/biocontainers/samtools:1.8--h46bd0b3_5"
     }
 
@@ -244,7 +250,7 @@ task Flagstat {
         String outputPath
 
         String memory = "1G"
-        Int timeMinutes = ceil(size(inputBam, "G"))
+        Int timeMinutes = 1 + ceil(size(inputBam, "G"))
         String dockerImage = "quay.io/biocontainers/samtools:1.8--h46bd0b3_5"
     }
 
@@ -268,6 +274,7 @@ task Flagstat {
         # inputs
         inputBam: {description: "The BAM file for which statistics should be retrieved.", category: "required"}
         outputPath: {description: "The location the ouput should be written to.", category: "required"}
+        memory: {description: "The amount of memory needed for the job.", category: "advanced"}
         timeMinutes: {description: "The maximum amount of time the job will run in minutes.", 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"}
diff --git a/star.wdl b/star.wdl
index e1e55a262388f7f22a9c800ce558a24dbb447c73..94cdfa80bf12b0ca1a9141c34d06e2935f721473 100644
--- a/star.wdl
+++ b/star.wdl
@@ -36,6 +36,7 @@ task Star {
 
         Int runThreadN = 4
         String memory = "48G"
+        Int timeMinutes = 1 + ceil(size([inputR1, inputR2], "G") * 180 / runThreadN)
         String dockerImage = "quay.io/biocontainers/star:2.7.3a--0"
     }
 
@@ -66,6 +67,7 @@ task Star {
     runtime {
         cpu: runThreadN
         memory: memory
+        time_minutes: timeMinutes
         docker: dockerImage
     }
 
@@ -83,6 +85,7 @@ task Star {
         limitBAMsortRAM: {description: "Equivalent to star's `--limitBAMsortRAM` option.", category: "advanced"}
         runThreadN: {description: "The number of threads to use.", category: "advanced"}
         memory: {description: "The amount of memory this job will use.", category: "advanced"}
+        timeMinutes: {description: "The maximum amount of time the job will run in minutes.", 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"}
     }
diff --git a/stringtie.wdl b/stringtie.wdl
index cfaccc92f80d1ab9d489e37e31ea2dd3e28c0584..f1d994b3d4600817af4b605a27a913a1e85944fc 100644
--- a/stringtie.wdl
+++ b/stringtie.wdl
@@ -33,6 +33,7 @@ task Stringtie {
 
         Int threads = 1
         String memory = "10G"
+        Int timeMinutes = 1 + ceil(size(bam, "G") * 60 / threads)
         String dockerImage = "quay.io/biocontainers/stringtie:1.3.4--py35_0"
     }
 
@@ -58,54 +59,24 @@ task Stringtie {
     runtime {
         cpu: threads
         memory: memory
+        time_minutes: timeMinutes
         docker: dockerImage
     }
 
     parameter_meta {
-        bam: {
-            description: "The input BAM file.",
-            category: "required"
-        }
-        bamIndex: {
-            description: "The input BAM file's index.",
-            category: "required"
-        }
-        referenceGtf: {
-            description: "A reference GTF file to be used as guide.",
-            category: "common"
-        }
-        skipNovelTranscripts: {
-            description: "Whether new transcripts should be assembled or not.",
-            category: "common"
-        }
-        assembledTranscriptsFile: {
-            description: "Where the output of the assembly should be written.",
-            category: "required"
-        }
-        firstStranded: {
-            description: "Equivalent to the --rf flag of stringtie.",
-            category: "required"
-        }
-        secondStranded: {
-            description: "Equivalent to the --fr flag of stringtie.",
-            category: "required"
-        }
-        geneAbundanceFile: {
-            description: "Where the abundance file should be written.",
-            category: "common"
-        }
-        threads: {
-            description: "The number of threads to use.",
-            category: "advanced"
-        }
-        memory: {
-            description: "The amount of memory needed for this task in GB.",
-            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"
-        }
+        bam: {description: "The input BAM file.", category: "required"}
+        bamIndex: {description: "The input BAM file's index.", category: "required"}
+        referenceGtf: {description: "A reference GTF file to be used as guide.", category: "common"}
+        skipNovelTranscripts: {description: "Whether new transcripts should be assembled or not.", category: "common"}
+        assembledTranscriptsFile: {description: "Where the output of the assembly should be written.", category: "required"}
+        firstStranded: {description: "Equivalent to the --rf flag of stringtie.", category: "required"}
+        secondStranded: {description: "Equivalent to the --fr flag of stringtie.", category: "required"}
+        geneAbundanceFile: {description: "Where the abundance file should be written.", category: "common"}
+        threads: {description: "The number of threads to use.", category: "advanced"}
+        memory: {description: "The amount of memory needed for this task in GB.", category: "advanced"}
+        timeMinutes: {description: "The maximum amount of time the job will run in minutes.", 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"}
     }
 }
 
@@ -123,6 +94,7 @@ task Merge {
         String? label
 
         String memory = "10G"
+        Int timeMinutes = 1 + ceil(size(gtfFiles, "G") * 20)
         String dockerImage = "quay.io/biocontainers/stringtie:1.3.4--py35_0"
     }
 
@@ -148,57 +120,24 @@ task Merge {
 
     runtime {
         memory: memory
+        time_minutes: timeMinutes
         docker: dockerImage
     }
 
     parameter_meta {
-        gtfFiles: {
-            description: "The GTF files produced by stringtie.",
-            category: "required"
-        }
-        outputGtfPath: {
-            description: "Where the output should be written.",
-            category: "required"
-        }
-        guideGtf: {
-            description: "Equivalent to the -G option of 'stringtie --merge'.",
-            category: "advanced"
-        }
-        minimumLength: {
-            description: "Equivalent to the -m option of 'stringtie --merge'.",
-            category: "advanced"
-        }
-        minimumCoverage: {
-            description: "Equivalent to the -c option of 'stringtie --merge'.",
-            category: "advanced"
-        }
-        minimumFPKM: {
-            description: "Equivalent to the -F option of 'stringtie --merge'.",
-            category: "advanced"
-        }
-        minimumTPM: {
-            description: "Equivalent to the -T option of 'stringtie --merge'.",
-            category: "advanced"
-        }
-        minimumIsoformFraction: {
-            description: "Equivalent to the -f option of 'stringtie --merge'.",
-            category: "advanced"
-        }
-        keepMergedTranscriptsWithRetainedIntrons: {
-            description: "Equivalent to the -i flag of 'stringtie --merge'.",
-            category: "advanced"
-        }
-        label: {
-            description: "Equivalent to the -l option of 'stringtie --merge'.",
-            category: "advanced"
-        }
-        memory: {
-            description: "The amount of memory needed for this task in GB.",
-            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"
-        }
+        gtfFiles: {description: "The GTF files produced by stringtie.", category: "required"}
+        outputGtfPath: {description: "Where the output should be written.", category: "required"}
+        guideGtf: {description: "Equivalent to the -G option of 'stringtie --merge'.", category: "advanced"}
+        minimumLength: {description: "Equivalent to the -m option of 'stringtie --merge'.", category: "advanced"}
+        minimumCoverage: {description: "Equivalent to the -c option of 'stringtie --merge'.", category: "advanced"}
+        minimumFPKM: {description: "Equivalent to the -F option of 'stringtie --merge'.", category: "advanced"}
+        minimumTPM: {description: "Equivalent to the -T option of 'stringtie --merge'.", category: "advanced"}
+        minimumIsoformFraction: {description: "Equivalent to the -f option of 'stringtie --merge'.", category: "advanced"}
+        keepMergedTranscriptsWithRetainedIntrons: {description: "Equivalent to the -i flag of 'stringtie --merge'.", category: "advanced"}
+        label: {description: "Equivalent to the -l option of 'stringtie --merge'.", category: "advanced"}
+        memory: {description: "The amount of memory needed for this task in GB.", category: "advanced"}
+        timeMinutes: {description: "The maximum amount of time the job will run in minutes.", 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"}
     }
 }
diff --git a/umi-tools.wdl b/umi-tools.wdl
index c44635ce0ef7d3cab9d3c9023a64989bb0259d11..608924f3fdd8dc7f5592e54f9cddadc7044c9039 100644
--- a/umi-tools.wdl
+++ b/umi-tools.wdl
@@ -76,7 +76,7 @@ task Dedup {
         Boolean paired = true
 
         String memory = "5G"
-        Int timeMinutes = ceil(size(inputBam, "G") * 18)
+        Int timeMinutes = 1 + ceil(size(inputBam, "G") * 18)
 
         # Use a multi-package-container which includes umi_tools (0.5.5) and samtools (1.9)
         String dockerImage = "quay.io/biocontainers/mulled-v2-509311a44630c01d9cb7d2ac5727725f51ea43af:6089936aca6219b5bb5f54210ac5eb456c7503f2-0"