diff --git a/CHANGELOG.md b/CHANGELOG.md
index f50bf65084a3e88c07a8ac6c35c1c7a7b96ed498..22e6c56fda38058a6b841fa30f8722166f27a2ff 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,11 @@ that users understand how the changes affect the new version.
 
 version 4.0.0-develop
 ---------------------------
++ Reworked bcf2vcf task into bcftools view task.
++ Removed the redundant format flag from the htseq interface. This is 
+  autodetected in newer versions of htseq.
++ Update docker images for samtools, bcftools, picard, GATK, cutadapt, htseq
+  and chunked-scatter.
 + Default docker images for bwa, bwakit and hisat2 updated to include samtools
   1.10.
 + Alignment tasks (STAR, Hisat2, BWA) now produce BAM files at level 1 
diff --git a/bcftools.wdl b/bcftools.wdl
index e1ec3059d022a76be71550ff9e993d8f1bc6d445..2677899be23d70b102a357a9ff9b593c2fbb2832 100644
--- a/bcftools.wdl
+++ b/bcftools.wdl
@@ -22,23 +22,31 @@ version 1.0
 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 # SOFTWARE.
 
-task Bcf2Vcf {
+task View {
     input {
-        File bcf
-        String outputPath = "./bcftools/SV.vcf"
-        String memory = "2G"
-        Int timeMinutes = 1 + ceil(size(bcf, "G"))
-        String dockerImage = "quay.io/biocontainers/bcftools:1.9--ha228f0b_3"
+        File inputFile
+        String outputPath = "output.vcf.gz"
+        String memory = "256M"
+        Int timeMinutes = 1 + ceil(size(inputFile, "G"))
+        String dockerImage = "quay.io/biocontainers/bcftools:1.10.2--h4f4756c_2"
+        String outputType = "z"
+        Int compressionLevel = 1
     }
 
     command {
         set -e
         mkdir -p "$(dirname ~{outputPath})"
-        bcftools view ~{bcf} -O v -o ~{outputPath}
+        bcftools view \
+        -o ~{outputPath} \
+        -O ~{outputType} \
+        -l ~{compressionLevel} \
+        ~{inputFile}
+        bcftools index --tbi ~{outputPath}
     }
 
     output {
         File outputVcf = outputPath
+        File outputVcfIndex = outputPath + ".tbi"
     }
 
     runtime {
@@ -48,9 +56,11 @@ task Bcf2Vcf {
     }
 
     parameter_meta {
-        bcf: {description: "The generated BCF from an SV caller", category: "required"}
+        inputFile: {description: "A vcf or bcf file.", category: "required"}
         outputPath: {description: "The location the output VCF file should be written.", category: "common"}
+        outputType: {description: "Output type: v=vcf, z=vcf.gz, b=bcf, u=uncompressed bcf"}
         memory: {description: "The amount of memory this job will use.", category: "advanced"}
+        compressionLevel: {description: "Compression level from 0 (uncompressed) to 9 (best).", 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"}
     }
@@ -87,7 +97,7 @@ task Stats {
         Int threads = 0
         Int timeMinutes = 1 + 2* ceil(size(select_all([inputVcf, compareVcf]), "G"))  # TODO: Estimate, 2 minutes per GB, refine later.
         String memory = "256M" 
-        String dockerImage = "quay.io/biocontainers/bcftools:1.9--ha228f0b_3"
+        String dockerImage = "quay.io/biocontainers/bcftools:1.10.2--h4f4756c_2"
     }
     
     command {
@@ -159,4 +169,4 @@ task Stats {
         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"}
     }
-}
\ No newline at end of file
+}
diff --git a/chunked-scatter.wdl b/chunked-scatter.wdl
index 3ef0c74784c8fb91e78ecb2055dfa84be9174c88..b54a7d2e909a20d43bbe194d9f28496b7753ce5d 100644
--- a/chunked-scatter.wdl
+++ b/chunked-scatter.wdl
@@ -30,7 +30,7 @@ task ChunkedScatter {
 
         String memory = "256M"
         Int timeMinutes = 2
-        String dockerImage = "quay.io/biocontainers/chunked-scatter:0.2.0--py_0"
+        String dockerImage = "quay.io/biocontainers/chunked-scatter:1.0.0--py_0"
     }
 
     command {
diff --git a/cutadapt.wdl b/cutadapt.wdl
index ad32ff21aff4958f9955628753a7b68468a855cd..d125af43b3039fd2ba9aa2b63b0819d4676fbf41 100644
--- a/cutadapt.wdl
+++ b/cutadapt.wdl
@@ -81,7 +81,7 @@ task Cutadapt {
         Int cores = 4
         String memory = "~{300 + 100 * cores}M"
         Int timeMinutes = 1 + ceil(size([read1, read2], "G")  * 12.0 / cores)
-        String dockerImage = "quay.io/biocontainers/cutadapt:2.8--py37h516909a_0"
+        String dockerImage = "quay.io/biocontainers/cutadapt:2.10--py37h516909a_0"
     }
 
     String realRead2output = select_first([read2output, "cut_r2.fq.gz"])
diff --git a/gatk.wdl b/gatk.wdl
index 939513db6a92d2f4b4fda5fdf22c26a079be68f0..e0209a0c4ef0f4b19fde26f3b47f0d0bd2b33fe0 100644
--- a/gatk.wdl
+++ b/gatk.wdl
@@ -35,7 +35,7 @@ task AnnotateIntervals {
         String memory = "3G"
         String javaXmx = "2G"
         Int timeMinutes = 5
-        String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
+        String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
     }
 
     command {
@@ -96,7 +96,7 @@ task ApplyBQSR {
         Int memoryMb = javaXmxMb + 512
         Int javaXmxMb = 2048
         Int timeMinutes = 120 # This will likely be used with intervals, as such size based estimation can't be used.
-        String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
+        String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
     }
 
     command {
@@ -168,7 +168,7 @@ task BaseRecalibrator {
         Int memoryMb = javaXmxMb + 512
         Int javaXmxMb = 1024
         Int timeMinutes = 120 # This will likely be used with intervals, as such size based estimation can't be used.
-        String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
+        String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
     }
 
     command {
@@ -227,7 +227,7 @@ task CalculateContamination {
         String memory = "13G"
         String javaXmx = "12G"
         Int timeMinutes = 180
-        String dockerImage = "quay.io/biocontainers/gatk4:4.1.2.0--1"
+        String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
     }
 
     command {
@@ -271,7 +271,7 @@ task CallCopyRatioSegments {
         String memory = "3G"
         String javaXmx = "2G"
         Int timeMinutes = 2
-        String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
+        String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
     }
 
     command {
@@ -320,7 +320,7 @@ task CollectAllelicCounts {
         String memory = "11G"
         String javaXmx = "10G"
         Int timeMinutes = 120
-        String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
+        String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
     }
 
     command {
@@ -376,7 +376,7 @@ task CollectReadCounts {
         String memory = "8G"
         String javaXmx = "7G"
         Int timeMinutes = 1 + ceil(size(inputBam, "G") * 5)
-        String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
+        String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
     }
 
     command {
@@ -433,7 +433,7 @@ task CombineGVCFs {
         String memory = "5G"
         String javaXmx = "4G"
         Int timeMinutes = 1 + ceil(size(gvcfFiles, "G") * 8)
-        String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
+        String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
     }
 
     command {
@@ -560,7 +560,7 @@ task CreateReadCountPanelOfNormals {
         String memory = "8G"
         String javaXmx = "7G"
         Int timeMinutes = 5
-        String dockerImage = "broadinstitute/gatk:4.1.4.0" # The biocontainer causes a spark related error for some reason...
+        String dockerImage = "broadinstitute/gatk:4.1.8.0" # The biocontainer causes a spark related error for some reason...
     }
 
     command {
@@ -607,7 +607,7 @@ task DenoiseReadCounts {
         String memory = "5G"
         String javaXmx = "4G"
         Int timeMinutes = 5
-        String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
+        String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
     }
 
     command {
@@ -665,7 +665,7 @@ task FilterMutectCalls {
         String memory = "13G"
         String javaXmx = "12G"
         Int timeMinutes = 60
-        String dockerImage = "quay.io/biocontainers/gatk4:4.1.2.0--1"
+        String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
     }
 
     command {
@@ -728,7 +728,7 @@ task GatherBqsrReports {
         Int memoryMb = 256 + javaXmxMb
         Int javaXmxMb = 256
         Int timeMinutes = 1
-        String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
+        String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
     }
 
     command {
@@ -774,7 +774,7 @@ task GenomicsDBImport {
         String memory = "5G"
         String javaXmx = "4G"
         Int timeMinutes = 180
-        String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
+        String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
     }
 
     command {
@@ -833,7 +833,7 @@ task GenotypeGVCFs {
         String memory = "7G"
         String javaXmx = "6G"
         Int timeMinutes = 120 # This will likely be used with intervals, as such size based estimation can't be used.
-        String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
+        String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
     }
 
     command {
@@ -899,7 +899,7 @@ task GetPileupSummaries {
         String memory = "13G"
         String javaXmx = "12G"
         Int timeMinutes = 120
-        String dockerImage = "quay.io/biocontainers/gatk4:4.1.2.0--1"
+        String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
     }
 
     command {
@@ -966,7 +966,7 @@ task HaplotypeCaller {
         # Memory increases with time used. 4G should cover most use cases.
         Int javaXmxMb = 4096
         Int timeMinutes = 400 # This will likely be used with intervals, as such size based estimation can't be used.
-        String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
+        String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
     }
 
     command {
@@ -1040,7 +1040,7 @@ task LearnReadOrientationModel {
         String memory = "13G"
         String javaXmx = "12G"
         Int timeMinutes = 120
-        String dockerImage = "quay.io/biocontainers/gatk4:4.1.2.0--1"
+        String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
     }
 
     command {
@@ -1079,7 +1079,7 @@ task MergeStats {
         String memory = "15G"
         String javaXmx = "14G"
         Int timeMinutes = 30
-        String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
+        String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
     }
 
     command {
@@ -1126,7 +1126,7 @@ task ModelSegments {
         String memory = "11G"
         String javaXmx = "10G"
         Int timeMinutes = 60
-        String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
+        String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
     }
 
     command {
@@ -1202,7 +1202,7 @@ task MuTect2 {
         String memory = "5G"
         String javaXmx = "4G"
         Int timeMinutes = 240
-        String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
+        String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
     }
 
     command {
@@ -1271,7 +1271,7 @@ task PlotDenoisedCopyRatios {
         String memory = "4G"
         String javaXmx = "3G"
         Int timeMinutes = 2
-        String dockerImage = "broadinstitute/gatk:4.1.4.0" # The biocontainer doesn't seem to contain R.
+        String dockerImage = "broadinstitute/gatk:4.1.8.0"
     }
 
     command {
@@ -1289,7 +1289,7 @@ task PlotDenoisedCopyRatios {
 
     output {
         File denoisedCopyRatiosPlot = outputDir + "/" + outputPrefix + ".denoised.png"
-        File denoisedCopyRatiosLimitedPlot = outputDir + "/" + outputPrefix + ".denoisedLimit4.png"
+        File? denoisedCopyRatiosLimitedPlot = outputDir + "/" + outputPrefix + ".denoisedLimit4.png"
         File standardizedMedianAbsoluteDeviation = outputDir + "/" + outputPrefix + ".standardizedMAD.txt"
         File denoisedMedianAbsoluteDeviation = outputDir + "/" + outputPrefix + ".denoisedMAD.txt"
         File deltaMedianAbsoluteDeviation = outputDir + "/" + outputPrefix + ".deltaMAD.txt"
@@ -1331,7 +1331,7 @@ task PlotModeledSegments {
         String memory = "4G"
         String javaXmx = "3G"
         Int timeMinutes = 2
-        String dockerImage = "broadinstitute/gatk:4.1.4.0" # The biocontainer doesn't seem to contain R.
+        String dockerImage = "broadinstitute/gatk:4.1.8.0"
     }
 
     command {
@@ -1389,7 +1389,7 @@ task PreprocessIntervals {
         String memory = "4G"
         String javaXmx = "3G"
         Int timeMinutes = 1 + ceil(size(referenceFasta, "G") * 6)
-        String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
+        String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
     }
 
     command {
@@ -1447,7 +1447,7 @@ task SelectVariants {
         String memory = "5G"
         String javaXmx = "4G"
         Int timeMinutes = 60
-        String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
+        String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
     }
 
     command {
@@ -1507,7 +1507,7 @@ task SplitNCigarReads {
         String memory = "5G"
         String javaXmx = "4G"
         Int timeMinutes = 120 # This will likely be used with intervals, as such size based estimation can't be used.
-        String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
+        String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
     }
 
     command {
@@ -1576,7 +1576,7 @@ task VariantEval {
         String javaXmx = "4G"
         # TODO: Refine estimate. For now 4 minutes per GB of input.
         Int timeMinutes = ceil(size(flatten([evalVcfs, comparisonVcfs, select_all([referenceFasta, dbsnpVCF])]), "G") * 20)
-        String dockerImage = "quay.io/biocontainers/gatk4:4.1.7.0--py38_0"
+        String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
     }
 
     command {
@@ -1647,7 +1647,7 @@ task VariantFiltration {
         String memory = "5G"
         String javaXmx = "4G"
         Int timeMinutes = 120
-        String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
+        String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
     }
 
     command {
diff --git a/htseq.wdl b/htseq.wdl
index cba32c6f7b7ecda00c9deeda1f19fb6aec762f42..cbd8e2acded8d7e89157201a548aa6a29768096b 100644
--- a/htseq.wdl
+++ b/htseq.wdl
@@ -25,23 +25,23 @@ task HTSeqCount {
         Array[File]+ inputBams
         File gtfFile
         String outputTable = "output.tsv"
-        String format = "bam"
         String order = "pos"
         String stranded = "no"
         String? featureType
         String? idattr
         Array[String] additionalAttributes = []
 
+        Int nprocesses = 1
         String memory = "8G"
         Int timeMinutes = 10 + ceil(size(inputBams, "G") * 60)
-        String dockerImage = "quay.io/biocontainers/htseq:0.11.2--py37h637b7d7_1"
+        String dockerImage = "quay.io/biocontainers/htseq:0.12.4--py37hb3f55d8_0"
     }
 
     command {
         set -e
         mkdir -p "$(dirname ~{outputTable})"
         htseq-count \
-        -f ~{format} \
+        --nprocesses ~{nprocesses} \
         -r ~{order} \
         -s ~{stranded} \
         ~{"--type " + featureType} \
@@ -49,7 +49,7 @@ task HTSeqCount {
         ~{true="--additional-attr " false="" length(additionalAttributes) > 0 }~{sep=" --additional-attr " additionalAttributes} \
         ~{sep=" " inputBams} \
         ~{gtfFile} \
-        > ~{outputTable}
+        -c ~{outputTable}
     }
 
     output {
@@ -57,6 +57,7 @@ task HTSeqCount {
     }
 
     runtime {
+        cpu: nprocesses
         time_minutes: timeMinutes
         memory: memory
         docker: dockerImage
@@ -66,7 +67,7 @@ task HTSeqCount {
         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"}
+        nprocesses: {description: "Number of processes to run htseq with.", 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"}
diff --git a/picard.wdl b/picard.wdl
index f9dd52109f3302df1909aa0fbe24878cdb0b3520..adb55b4b52d2dce2bc3ae45a67a02b479dd9c181 100644
--- a/picard.wdl
+++ b/picard.wdl
@@ -89,7 +89,7 @@ task CollectMultipleMetrics {
         Int javaXmxMb = 3072
         # Additional * 2 because picard multiple metrics reads the reference fasta twice.
         Int timeMinutes = 1 + ceil(size(referenceFasta, "G") * 3 * 2) + ceil(size(inputBam, "G") * 6)
-        String dockerImage = "quay.io/biocontainers/picard:2.20.5--0"
+        String dockerImage = "quay.io/biocontainers/picard:2.23.2--0"
     }
 
 
@@ -205,7 +205,7 @@ task CollectRnaSeqMetrics {
         String javaXmx =  "8G"
         # With 6 minutes per G there were several timeouts. 
         Int timeMinutes = 1 + ceil(size(inputBam, "G") * 12)
-        String dockerImage = "quay.io/biocontainers/picard:2.20.5--0"
+        String dockerImage = "quay.io/biocontainers/picard:2.23.2--0"
     }
 
     command {
@@ -263,7 +263,7 @@ task CollectTargetedPcrMetrics {
         String memory = "4G"
         String javaXmx = "3G"
         Int timeMinutes = 1 + ceil(size(inputBam, "G") * 6)
-        String dockerImage = "quay.io/biocontainers/picard:2.20.5--0"
+        String dockerImage = "quay.io/biocontainers/picard:2.23.2--0"
     }
 
     command {
@@ -322,7 +322,7 @@ task CreateSequenceDictionary {
 
         String memory = "3G"
         String javaXmx = "2G"
-        String dockerImage = "quay.io/biocontainers/picard:2.22.3--0"
+        String dockerImage = "quay.io/biocontainers/picard:2.23.2--0"
     }
 
     command {
@@ -370,7 +370,7 @@ task GatherBamFiles {
         Boolean createMd5File = false
         # One minute per input gigabyte.
         Int timeMinutes = 1 + ceil(size(inputBams, "G") * 1)
-        String dockerImage = "quay.io/biocontainers/picard:2.20.5--0"
+        String dockerImage = "quay.io/biocontainers/picard:2.23.2--0"
     }
 
     command {
@@ -422,7 +422,7 @@ task GatherVcfs {
         String memory = "5G"
         String javaXmx = "4G"
         Int timeMinutes = 1 + ceil(size(inputVcfs, "G") * 2)
-        String dockerImage = "quay.io/biocontainers/picard:2.20.5--0"
+        String dockerImage = "quay.io/biocontainers/picard:2.23.2--0"
     }
 
     command {
@@ -478,7 +478,7 @@ task MarkDuplicates {
         String memoryMb = javaXmxMb + 512
 
         Int timeMinutes = 1 + ceil(size(inputBams, "G") * 8)
-        String dockerImage = "quay.io/biocontainers/picard:2.20.5--0"
+        String dockerImage = "quay.io/biocontainers/picard:2.23.2--0"
 
         # The program default for READ_NAME_REGEX is appropriate in nearly every case.
         # Sometimes we wish to supply "null" in order to turn off optical duplicate detection
@@ -554,7 +554,7 @@ task MergeVCFs {
         String memory = "5G"
         String javaXmx = "4G"
         Int timeMinutes = 1 + ceil(size(inputVCFs, "G"))
-        String dockerImage = "quay.io/biocontainers/picard:2.20.5--0"
+        String dockerImage = "quay.io/biocontainers/picard:2.23.2--0"
     }
 
     # Using MergeVcfs instead of GatherVcfs so we can create indices
@@ -603,7 +603,7 @@ task SamToFastq {
 
         String memory = "17G"
         String javaXmx = "16G" # High memory default to avoid crashes.
-        String dockerImage = "quay.io/biocontainers/picard:2.20.5--0"
+        String dockerImage = "quay.io/biocontainers/picard:2.23.2--0"
         File? NONE
     }
 
@@ -640,7 +640,7 @@ task ScatterIntervalList {
 
         String memory = "4G"
         String javaXmx = "3G"
-        String dockerImage = "quay.io/biocontainers/picard:2.20.5--0"
+        String dockerImage = "quay.io/biocontainers/picard:2.23.2--0"
     }
 
     command {
@@ -681,9 +681,7 @@ task SortSam {
         # GATK Best practices uses 75000 here: https://github.com/gatk-workflows/broad-prod-wgs-germline-snps-indels/blob/d2934ed656ade44801f9cfe1c0e78d4f80684b7b/PairedEndSingleSampleWf-fc-hg38.wdl#L778
         Int XmxGb = ceil(maxRecordsInRam / 125001.0)
         Int timeMinutes = 1 + ceil(size(inputBam, "G") * 3)
-        # 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/picard:2.23.1--h37ae868_0"
+        String dockerImage = "quay.io/biocontainers/picard:2.23.2--0"
     }
 
     command {
diff --git a/samtools.wdl b/samtools.wdl
index 5daf57ab3375ddb57193b4ad868268c755ddd079..0b8394bff308d65874d03170918569417b1c751e 100644
--- a/samtools.wdl
+++ b/samtools.wdl
@@ -114,7 +114,7 @@ task Fastq {
         Int threads = 1
         String memory = "1G"
         Int timeMinutes = 1 + ceil(size(inputBam) * 2)
-        String dockerImage = "quay.io/biocontainers/samtools:1.8--h46bd0b3_5"
+        String dockerImage = "quay.io/biocontainers/samtools:1.10--h9402c20_2"
     }
 
     command {
@@ -170,7 +170,7 @@ task FilterShortReadsBam {
         String outputPathBam
         String memory = "1G"
         Int timeMinutes = 1 + ceil(size(bamFile, "G") * 8)
-        String dockerImage = "quay.io/biocontainers/samtools:1.8--h46bd0b3_5"
+        String dockerImage = "quay.io/biocontainers/samtools:1.10--h9402c20_2"
     }
 
     String outputPathBamIndex = sub(outputPathBam, "\.bam$", ".bai")
@@ -211,7 +211,7 @@ task Flagstat {
 
         String memory = "256M"  # Only 40.5 MiB used for 150G bam file.
         Int timeMinutes = 1 + ceil(size(inputBam, "G"))
-        String dockerImage = "quay.io/biocontainers/samtools:1.8--h46bd0b3_5"
+        String dockerImage = "quay.io/biocontainers/samtools:1.10--h9402c20_2"
     }
 
     command {
@@ -247,7 +247,7 @@ task Index {
         String? outputBamPath
         String memory = "2G"
         Int timeMinutes = 1 + ceil(size(bamFile, "G") * 4)
-        String dockerImage = "quay.io/biocontainers/samtools:1.8--h46bd0b3_5"
+        String dockerImage = "quay.io/biocontainers/samtools:1.10--h9402c20_2"
     }
 
     # Select_first is needed, otherwise womtool validate fails.
@@ -296,7 +296,7 @@ task Markdup {
         String outputBamPath
 
         Int timeMinutes = 1 + ceil(size(inputBam, "G") * 2)
-        String dockerImage = "quay.io/biocontainers/samtools:1.8--h46bd0b3_5"
+        String dockerImage = "quay.io/biocontainers/samtools:1.10--h9402c20_2"
     }
 
     command {
@@ -332,7 +332,7 @@ task Merge {
         Int threads = 1
 
         Int timeMinutes = 1 + ceil(size(bamFiles, "G") * 2)
-        String dockerImage = "quay.io/biocontainers/samtools:1.8--h46bd0b3_5"
+        String dockerImage = "quay.io/biocontainers/samtools:1.10--h9402c20_2"
     }
     String indexPath = sub(outputBamPath, "\.bam$",".bai")
 
@@ -483,7 +483,7 @@ task View {
         Int threads = 1
         String memory = "1G"
         Int timeMinutes = 1 + ceil(size(inFile, "G") * 5)
-        String dockerImage = "quay.io/biocontainers/samtools:1.8--h46bd0b3_5"
+        String dockerImage = "quay.io/biocontainers/samtools:1.10--h9402c20_2"
     }
     String outputIndexPath = basename(outputFileName) + ".bai"