diff --git a/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/report/ReportBuilder.scala b/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/report/ReportBuilder.scala
index 8365cc946ef6395409744f612eec2d9e3b6b52af..eb3a51b54f3d050cbf6c9766e3eef81b1c8607c7 100644
--- a/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/report/ReportBuilder.scala
+++ b/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/report/ReportBuilder.scala
@@ -132,7 +132,7 @@ trait ReportBuilder extends ToolCommand {
     logger.info("Start")
 
     val argsParser = new OptParser
-    val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
+    val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse (throw new IllegalArgumentException)
 
     require(cmdArgs.outputDir.exists(), "Output dir does not exist")
     require(cmdArgs.outputDir.isDirectory, "Output dir is not a directory")
diff --git a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/AnnotateVcfWithBed.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/AnnotateVcfWithBed.scala
index e80887e8edcb5e8f2c73cfa268964fb39cf326c8..13d579930cc0d5faa0979498a87440f62453b6ba 100644
--- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/AnnotateVcfWithBed.scala
+++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/AnnotateVcfWithBed.scala
@@ -80,7 +80,7 @@ object AnnotateVcfWithBed extends ToolCommand {
     logger.info("Start")
 
     val argsParser = new OptParser
-    val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
+    val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse (throw new IllegalArgumentException)
 
     val fieldType = cmdArgs.fieldType match {
       case "Integer"   => VCFHeaderLineType.Integer
diff --git a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/BaseCounter.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/BaseCounter.scala
index 6bba497ca162ca63574fb99f048cba119f9e9cf6..66b8af4b3eab2dcc3d4b6469c7cae27e2c26bc26 100644
--- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/BaseCounter.scala
+++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/BaseCounter.scala
@@ -53,7 +53,7 @@ object BaseCounter extends ToolCommand {
 
   def main(args: Array[String]): Unit = {
     val argsParser = new OptParser
-    val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
+    val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse (throw new IllegalArgumentException)
 
     //Sets picard logging level
     htsjdk.samtools.util.Log.setGlobalLogLevel(htsjdk.samtools.util.Log.LogLevel.valueOf(logger.getLevel.toString))
diff --git a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/BastyGenerateFasta.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/BastyGenerateFasta.scala
index 100209b1d266bd326c91c543631a8b4dfd78c10d..cb482e6706a5f1a4632d75ad9bccff43e1633474 100644
--- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/BastyGenerateFasta.scala
+++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/BastyGenerateFasta.scala
@@ -113,7 +113,7 @@ object BastyGenerateFasta extends ToolCommand {
    */
   def main(args: Array[String]): Unit = {
     val argsParser = new OptParser
-    cmdArgs = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
+    cmdArgs = argsParser.parse(args, Args()) getOrElse (throw new IllegalArgumentException)
 
     if (cmdArgs.outputVariants != null) {
       writeVariantsOnly()
diff --git a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/BedToInterval.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/BedToInterval.scala
index b82b7b74286258ac5bdd11a796c1924bd1c3d4af..6461d5417aaabe4a8481bdbc9d2c213dba7228a4 100644
--- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/BedToInterval.scala
+++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/BedToInterval.scala
@@ -47,7 +47,7 @@ object BedToInterval extends ToolCommand {
    */
   def main(args: Array[String]): Unit = {
     val argsParser = new OptParser
-    val commandArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
+    val commandArgs: Args = argsParser.parse(args, Args()) getOrElse (throw new IllegalArgumentException)
 
     val writer = new PrintWriter(commandArgs.outputFile)
 
diff --git a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/BedtoolsCoverageToCounts.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/BedtoolsCoverageToCounts.scala
index 40ad0b93b3ad8404382be17ff8fa862851db961a..c5509721ad6375aefd3f1deb586fb6bfe193528e 100644
--- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/BedtoolsCoverageToCounts.scala
+++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/BedtoolsCoverageToCounts.scala
@@ -39,7 +39,7 @@ object BedtoolsCoverageToCounts extends ToolCommand {
    */
   def main(args: Array[String]): Unit = {
     val argsParser = new OptParser
-    val commandArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
+    val commandArgs: Args = argsParser.parse(args, Args()) getOrElse (throw new IllegalArgumentException)
 
     if (!commandArgs.input.exists) throw new IllegalStateException("Input file not found, file: " + commandArgs.input)
 
diff --git a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/BiopetFlagstat.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/BiopetFlagstat.scala
index 51f1c1cbecba4e079534eaa380f8be072950c3d1..5d53f2ef8ab2be24fff67af1fee6504181dac0e7 100644
--- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/BiopetFlagstat.scala
+++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/BiopetFlagstat.scala
@@ -50,7 +50,7 @@ object BiopetFlagstat extends ToolCommand {
    */
   def main(args: Array[String]): Unit = {
     val argsParser = new OptParser
-    val commandArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
+    val commandArgs: Args = argsParser.parse(args, Args()) getOrElse (throw new IllegalArgumentException)
 
     val inputSam = SamReaderFactory.makeDefault.open(commandArgs.inputFile)
     val iterSam = if (commandArgs.region.isEmpty) inputSam.iterator else {
diff --git a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/CheckAllelesVcfInBam.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/CheckAllelesVcfInBam.scala
index fccebd08aa15ea28c90f6b64af57e196e6091e55..ff7a9036c189fa2f89488ffb8b281537e65e6a6e 100644
--- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/CheckAllelesVcfInBam.scala
+++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/CheckAllelesVcfInBam.scala
@@ -71,7 +71,7 @@ object CheckAllelesVcfInBam extends ToolCommand {
 
   def main(args: Array[String]): Unit = {
     val argsParser = new OptParser
-    val commandArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
+    val commandArgs: Args = argsParser.parse(args, Args()) getOrElse (throw new IllegalArgumentException)
 
     if (commandArgs.bamFiles.size != commandArgs.samples.size)
       logger.warn("Number of samples is different from number of bam files: additional samples or bam files will not be used")
diff --git a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/FastqSplitter.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/FastqSplitter.scala
index f0214b3392255f2c4e81de571c35a152343a86d5..b85a935b1e49b1545bb3dd6ed28c782a98a97be1 100644
--- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/FastqSplitter.scala
+++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/FastqSplitter.scala
@@ -45,7 +45,7 @@ object FastqSplitter extends ToolCommand {
    */
   def main(args: Array[String]): Unit = {
     val argsParser = new OptParser
-    val commandArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
+    val commandArgs: Args = argsParser.parse(args, Args()) getOrElse (throw new IllegalArgumentException)
 
     val groupSize = 100
     val output = for (file <- commandArgs.outputFile) yield new AsyncFastqWriter(new BasicFastqWriter(file), groupSize)
diff --git a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/FindRepeatsPacBio.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/FindRepeatsPacBio.scala
index 92c8782a75707b646e9cc10e3a97f822a2f53ae0..4daee3d96b843926bf26da0717b69ebe1c176291 100644
--- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/FindRepeatsPacBio.scala
+++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/FindRepeatsPacBio.scala
@@ -46,7 +46,7 @@ object FindRepeatsPacBio extends ToolCommand {
   def main(args: Array[String]): Unit = {
 
     val argsParser = new OptParser
-    val commandArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
+    val commandArgs: Args = argsParser.parse(args, Args()) getOrElse (throw new IllegalArgumentException)
     val bamReader = SamReaderFactory.makeDefault
       .validationStringency(ValidationStringency.SILENT)
       .open(commandArgs.inputBam)
diff --git a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/GvcfToBed.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/GvcfToBed.scala
index fcb302c3c7b9e551d9a7190d14c4d9f29ce48478..bb9e239480906d6390b76644a349440056aca2ec 100644
--- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/GvcfToBed.scala
+++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/GvcfToBed.scala
@@ -57,7 +57,7 @@ object GvcfToBed extends ToolCommand {
 
   def main(args: Array[String]): Unit = {
     val argsParser = new OptParser
-    val cmdArgs = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
+    val cmdArgs = argsParser.parse(args, Args()) getOrElse (throw new IllegalArgumentException)
 
     logger.debug("Opening reader")
     val reader = new VCFFileReader(cmdArgs.inputVcf, false)
diff --git a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/MergeAlleles.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/MergeAlleles.scala
index 8187064d10ddbfda5a4642a821b30b23e56bfbe4..a64a8e8fd92bf6c35120109fd8be8f22c43ec2e3 100644
--- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/MergeAlleles.scala
+++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/MergeAlleles.scala
@@ -50,7 +50,7 @@ object MergeAlleles extends ToolCommand {
    */
   def main(args: Array[String]): Unit = {
     val argsParser = new OptParser
-    val commandArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
+    val commandArgs: Args = argsParser.parse(args, Args()) getOrElse (throw new IllegalArgumentException)
 
     val readers = commandArgs.inputFiles.map(new VCFFileReader(_, true))
     val referenceFile = new FastaSequenceFile(commandArgs.reference, true)
diff --git a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/MergeOtuMaps.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/MergeOtuMaps.scala
index f853d66a5018559569a02b5ded85a04e19d57711..4caf55ab0ebdde7f861e8582d32c0715cabf8169 100644
--- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/MergeOtuMaps.scala
+++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/MergeOtuMaps.scala
@@ -41,7 +41,7 @@ object MergeOtuMaps extends ToolCommand {
    */
   def main(args: Array[String]): Unit = {
     val argsParser = new OptParser
-    val commandArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
+    val commandArgs: Args = argsParser.parse(args, Args()) getOrElse (throw new IllegalArgumentException)
 
     var map: Map[Long, String] = Map()
 
diff --git a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/MpileupToVcf.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/MpileupToVcf.scala
index df159c33dd4c05af042ea8f6cfc5a1735cac6013..cb0dbce5a01fc56a0ef0a615327ea5a4ea2972bd 100644
--- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/MpileupToVcf.scala
+++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/MpileupToVcf.scala
@@ -62,7 +62,7 @@ object MpileupToVcf extends ToolCommand {
    */
   def main(args: Array[String]): Unit = {
     val argsParser = new OptParser
-    val commandArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
+    val commandArgs: Args = argsParser.parse(args, Args()) getOrElse (throw new IllegalArgumentException)
     if (commandArgs.input != null && !commandArgs.input.exists) throw new IllegalStateException("Input file does not exist")
 
     val writer = new PrintWriter(commandArgs.output)
diff --git a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/PrefixFastq.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/PrefixFastq.scala
index 6be7f11fb878af4e6679f661327f9b85cc3ab4a3..23a981d516fd80ba1d676645b5da268e78d598bf 100644
--- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/PrefixFastq.scala
+++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/PrefixFastq.scala
@@ -52,7 +52,7 @@ object PrefixFastq extends ToolCommand {
     logger.info("Start")
 
     val argsParser = new OptParser
-    val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
+    val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse (throw new IllegalArgumentException)
 
     val writer = new AsyncFastqWriter(new BasicFastqWriter(cmdArgs.output), 3000)
     val reader = new FastqReader(cmdArgs.input)
diff --git a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/RegionAfCount.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/RegionAfCount.scala
index 4af0fc390709c0e7e5ac7f3fc7e3fdeb0c48e8a1..bb93144eba8fc32e2b076ada8b15542336307af0 100644
--- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/RegionAfCount.scala
+++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/RegionAfCount.scala
@@ -49,7 +49,7 @@ object RegionAfCount extends ToolCommand {
 
   def main(args: Array[String]): Unit = {
     val argsParser = new OptParser
-    val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
+    val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse (throw new IllegalArgumentException)
 
     logger.info("Start")
     logger.info("Reading bed file")
diff --git a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/SageCountFastq.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/SageCountFastq.scala
index 0ea5fcc73ff7f1c5caed520ce8360d1d2c1dd820..66d4f2e1db1bfeadbadd24d30c3a482985455188 100644
--- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/SageCountFastq.scala
+++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/SageCountFastq.scala
@@ -41,7 +41,7 @@ object SageCountFastq extends ToolCommand {
    */
   def main(args: Array[String]): Unit = {
     val argsParser = new OptParser
-    val commandArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
+    val commandArgs: Args = argsParser.parse(args, Args()) getOrElse (throw new IllegalArgumentException)
 
     if (!commandArgs.input.exists) throw new IllegalStateException("Input file not found, file: " + commandArgs.input)
 
diff --git a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/SageCreateLibrary.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/SageCreateLibrary.scala
index 71dfbbacb788829a98821e00fe51d28f47830423..2b0c203e3da70a88dd6ed899772c3d876e93e58f 100644
--- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/SageCreateLibrary.scala
+++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/SageCreateLibrary.scala
@@ -74,7 +74,7 @@ object SageCreateLibrary extends ToolCommand {
    */
   def main(args: Array[String]): Unit = {
     val argsParser = new OptParser
-    val commandArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
+    val commandArgs: Args = argsParser.parse(args, Args()) getOrElse (throw new IllegalArgumentException)
 
     if (!commandArgs.input.exists) throw new IllegalStateException("Input file not found, file: " + commandArgs.input)
 
diff --git a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/SageCreateTagCounts.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/SageCreateTagCounts.scala
index 2ae201ea18512c2f3ee5a6b7c05efad3015b3cba..58b3976f1534bc744ff732fe5f8befbbb0171150 100644
--- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/SageCreateTagCounts.scala
+++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/SageCreateTagCounts.scala
@@ -52,7 +52,7 @@ object SageCreateTagCounts extends ToolCommand {
    */
   def main(args: Array[String]): Unit = {
     val argsParser = new OptParser
-    val commandArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
+    val commandArgs: Args = argsParser.parse(args, Args()) getOrElse (throw new IllegalArgumentException)
 
     if (!commandArgs.input.exists) throw new IllegalStateException("Input file not found, file: " + commandArgs.input)
 
diff --git a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/SamplesTsvToJson.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/SamplesTsvToJson.scala
index 4d1f2b82d865cbed58ee329c6f985646df6ed5e3..36ec914e31445381dd8cf4850bbf26727f5f3f16 100644
--- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/SamplesTsvToJson.scala
+++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/SamplesTsvToJson.scala
@@ -46,7 +46,7 @@ object SamplesTsvToJson extends ToolCommand {
   /** Executes SamplesTsvToJson */
   def main(args: Array[String]): Unit = {
     val argsParser = new OptParser
-    val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
+    val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse (throw new IllegalArgumentException)
 
     val jsonString = stringFromInputs(cmdArgs.inputFiles, cmdArgs.tagFiles)
     cmdArgs.outputFile match {
diff --git a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/SquishBed.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/SquishBed.scala
index 413d335ab01b3897e7d4a2eff2205923cd06fc6b..b6b1780a56249d49700dde42fc62c38ec4540f88 100644
--- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/SquishBed.scala
+++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/SquishBed.scala
@@ -46,7 +46,7 @@ object SquishBed extends ToolCommand {
    */
   def main(args: Array[String]): Unit = {
     val argsParser = new OptParser
-    val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
+    val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse (throw new IllegalArgumentException)
 
     if (!cmdArgs.input.exists) throw new IllegalStateException("Input file not found, file: " + cmdArgs.input)
 
diff --git a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/SummaryToTsv.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/SummaryToTsv.scala
index 084a8cf693a0dbb9fd9708dd624df60c3c2629ed..44519d087f20f38fea420ef2b4dba326c6bf0e43 100644
--- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/SummaryToTsv.scala
+++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/SummaryToTsv.scala
@@ -61,7 +61,7 @@ object SummaryToTsv extends ToolCommand {
 
   def main(args: Array[String]): Unit = {
     val argsParser = new OptParser
-    val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
+    val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse (throw new IllegalArgumentException)
 
     val summary = new Summary(cmdArgs.summary)
 
diff --git a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/ValidateFastq.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/ValidateFastq.scala
index 975a6dbd13e4741e93a1709f8f02e01283f216b1..76c55043e4b379d7d9b071895d6f10af69f0ed5c 100644
--- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/ValidateFastq.scala
+++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/ValidateFastq.scala
@@ -51,7 +51,7 @@ object ValidateFastq extends ToolCommand {
 
     //parse all possible options into OptParser
     val argsParser = new OptParser
-    val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
+    val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse (throw new IllegalArgumentException)
 
     //read in fastq file 1 and if present fastq file 2
     val readFq1 = new FastqReader(cmdArgs.input)
diff --git a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/VcfFilter.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/VcfFilter.scala
index 3897c3c9e577e9bb81e0075ba3729b8aa52d7ce3..8833ad596defb0179ed5ad75544afb5a1ea45c44 100644
--- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/VcfFilter.scala
+++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/VcfFilter.scala
@@ -137,7 +137,7 @@ object VcfFilter extends ToolCommand {
   def main(args: Array[String]): Unit = {
     logger.info("Start")
     val argsParser = new OptParser
-    val cmdArgs = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
+    val cmdArgs = argsParser.parse(args, Args()) getOrElse (throw new IllegalArgumentException)
 
     val reader = new VCFFileReader(cmdArgs.inputVcf, false)
     val header = reader.getFileHeader
diff --git a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/VcfStats.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/VcfStats.scala
index 677b4d739621f718b0d4c1d1f9f5531ca465ee7f..09a251ad381fee30896d48e07dc2fe6fb1291045 100644
--- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/VcfStats.scala
+++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/VcfStats.scala
@@ -206,7 +206,7 @@ object VcfStats extends ToolCommand {
   def main(args: Array[String]): Unit = {
     logger.info("Started")
     val argsParser = new OptParser
-    cmdArgs = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
+    cmdArgs = argsParser.parse(args, Args()) getOrElse (throw new IllegalArgumentException)
 
     val reader = new VCFFileReader(cmdArgs.inputFile, true)
     val header = reader.getFileHeader
diff --git a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/VcfToTsv.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/VcfToTsv.scala
index a86eb7c630f4a605c9f4c96a56f8c8e2ea7e89e0..0a03991ed928d9aa3a9795bdd1f7dbf6526ab2f5 100644
--- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/VcfToTsv.scala
+++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/VcfToTsv.scala
@@ -72,7 +72,7 @@ object VcfToTsv extends ToolCommand {
 
   def main(args: Array[String]): Unit = {
     val argsParser = new OptParser
-    val commandArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
+    val commandArgs: Args = argsParser.parse(args, Args()) getOrElse (throw new IllegalArgumentException)
 
     // Throw exception if separator and listSeparator are identical
     if (commandArgs.separator == commandArgs.listSeparator) throw new IllegalArgumentException(
diff --git a/mapping/src/main/scala/nl/lumc/sasc/biopet/pipelines/mapping/MultisampleMappingTrait.scala b/mapping/src/main/scala/nl/lumc/sasc/biopet/pipelines/mapping/MultisampleMapping.scala
similarity index 97%
rename from mapping/src/main/scala/nl/lumc/sasc/biopet/pipelines/mapping/MultisampleMappingTrait.scala
rename to mapping/src/main/scala/nl/lumc/sasc/biopet/pipelines/mapping/MultisampleMapping.scala
index f0d3c7313cef6f247ede75d1d2eab235f1d3bb7d..306152341be07d1e22aba08b7eacc977f7365435 100644
--- a/mapping/src/main/scala/nl/lumc/sasc/biopet/pipelines/mapping/MultisampleMappingTrait.scala
+++ b/mapping/src/main/scala/nl/lumc/sasc/biopet/pipelines/mapping/MultisampleMapping.scala
@@ -43,7 +43,7 @@ trait MultisampleMappingTrait extends MultiSampleQScript
   /** With this method the merge strategy for libraries to samples is defined. This can be overriden to fix the merge strategy. */
   def mergeStrategy: MergeStrategy.Value = {
     val value: String = config("merge_strategy", default = "preprocessmarkduplicates")
-    MergeStrategy.values.find(_.toString.toLowerCase == value) match {
+    MergeStrategy.values.find(_.toString.toLowerCase == value.toLowerCase) match {
       case Some(v) => v
       case _       => throw new IllegalArgumentException(s"merge_strategy '$value' does not exist")
     }
@@ -151,10 +151,9 @@ trait MultisampleMappingTrait extends MultiSampleQScript
               try {
                 header.getSequenceDictionary.assertSameDictionary(referenceFile.getSequenceDictionary)
               } catch {
-                case e: AssertionError => {
+                case e: AssertionError =>
                   logger.error(e.getMessage)
                   oke = false
-                }
               }
               oke
             }
@@ -172,8 +171,7 @@ trait MultisampleMappingTrait extends MultiSampleQScript
                 "Sample readgroup and/or library of input bamfile is not correct, file: " + bamFile +
                   "\nPlease note that it is possible to set 'correct_readgroups' to true in the config to automatic fix this")
               if (!dictOke) Logging.addError(
-                "Sequence dictionary in the bam file is not the same as the reference, file: " + bamFile +
-                  "\nPlease note that it is possible to set 'correct_dict' to true in the config to automatic fix this")
+                "Sequence dictionary in the bam file is not the same as the reference, file: " + bamFile)
 
               if (!readGroupOke && correctReadgroups) {
                 logger.info("Correcting readgroups, file:" + inputBam.get)
diff --git a/mapping/src/test/resources/empty.sam b/mapping/src/test/resources/empty.sam
new file mode 100644
index 0000000000000000000000000000000000000000..26ac25ee2cd79105b11d4896ea684edcb89f8c41
--- /dev/null
+++ b/mapping/src/test/resources/empty.sam
@@ -0,0 +1,4 @@
+@HD	VN:1.5	SO:coordinate
+@SQ	SN:chr1	LN:9	UR:file:/home/pjvan_thof/pipelines/biopet/public/mapping/src/test/resources/ref.fa	M5:fe15dbbd0900310caf32827f6da57550
+@RG	ID:001	SM:sample3	LB:lib1
+r02	0	chr1	210	60	10M	*	0	0	TACGTACGTA	EEFFGGHHII	RG:Z:001
diff --git a/mapping/src/test/scala/nl/lumc/sasc/biopet/pipelines/mapping/MappingTest.scala b/mapping/src/test/scala/nl/lumc/sasc/biopet/pipelines/mapping/MappingTest.scala
index 7b8f289df558dfa2667fd44cbdcfc0b3874926b6..cc2ba1b9e76a2bb2d460e46c0adbd953af44db9f 100644
--- a/mapping/src/test/scala/nl/lumc/sasc/biopet/pipelines/mapping/MappingTest.scala
+++ b/mapping/src/test/scala/nl/lumc/sasc/biopet/pipelines/mapping/MappingTest.scala
@@ -18,6 +18,7 @@ package nl.lumc.sasc.biopet.pipelines.mapping
 import java.io.{ File, FileOutputStream }
 
 import com.google.common.io.Files
+import nl.lumc.sasc.biopet.extensions.kraken.Kraken
 import nl.lumc.sasc.biopet.pipelines.flexiprep.Fastqc
 import nl.lumc.sasc.biopet.utils.ConfigUtils
 import nl.lumc.sasc.biopet.utils.config.Config
@@ -25,7 +26,7 @@ import org.apache.commons.io.FileUtils
 import org.broadinstitute.gatk.queue.QSettings
 import org.scalatest.Matchers
 import org.scalatest.testng.TestNGSuite
-import org.testng.annotations.{ BeforeClass, AfterClass, DataProvider, Test }
+import org.testng.annotations.{ AfterClass, BeforeClass, DataProvider, Test }
 
 /**
  * Test class for [[Mapping]]
@@ -42,14 +43,15 @@ abstract class AbstractTestMapping(val aligner: String) extends TestNGSuite with
     }
   }
 
+  def paired = Array(true, false)
+  def chunks = Array(1, 5)
+  def skipMarkDuplicates = Array(true, false)
+  def skipFlexipreps = Array(true, false)
+  def zipped = Array(true, false)
+  def unmappedToGears = false
+
   @DataProvider(name = "mappingOptions")
   def mappingOptions = {
-    val paired = Array(true, false)
-    val chunks = Array(1, 5)
-    val skipMarkDuplicates = Array(true, false)
-    val skipFlexipreps = Array(true, false)
-    val zipped = Array(true, false)
-
     for (
       pair <- paired;
       chunk <- chunks;
@@ -68,7 +70,8 @@ abstract class AbstractTestMapping(val aligner: String) extends TestNGSuite with
       "aligner" -> aligner,
       "number_chunks" -> chunks,
       "skip_markduplicates" -> skipMarkDuplicate,
-      "skip_flexiprep" -> skipFlexiprep
+      "skip_flexiprep" -> skipFlexiprep,
+      "unmapped_to_gears" -> unmappedToGears
     ), Map(executables.toSeq: _*))
     val mapping: Mapping = initPipeline(map)
 
@@ -85,6 +88,8 @@ abstract class AbstractTestMapping(val aligner: String) extends TestNGSuite with
 
     //Flexiprep
     mapping.functions.count(_.isInstanceOf[Fastqc]) shouldBe (if (skipFlexiprep) 0 else if (paired) 4 else 2)
+
+    mapping.functions.count(_.isInstanceOf[Kraken]) shouldBe (if (unmappedToGears) 1 else 0)
   }
 
   val outputDir = Files.createTempDir()
@@ -133,6 +138,8 @@ abstract class AbstractTestMapping(val aligner: String) extends TestNGSuite with
     "bowtie2" -> Map("exe" -> "test"),
     "stampy" -> Map("exe" -> "test", "genome" -> "test", "hash" -> "test"),
     "samtools" -> Map("exe" -> "test"),
+    "kraken" -> Map("exe" -> "test", "db" -> "test"),
+    "krakenreport" -> Map("exe" -> "test", "db" -> "test"),
     "md5sum" -> Map("exe" -> "test")
   )
 
@@ -151,3 +158,13 @@ class MappingBowtie2Test extends AbstractTestMapping("bowtie2")
 class MappingStampyTest extends AbstractTestMapping("stampy")
 class MappingGsnapTest extends AbstractTestMapping("gsnap")
 class MappingTophatTest extends AbstractTestMapping("tophat")
+
+class MappingGearsTest extends AbstractTestMapping("bwa-mem") {
+  override def unmappedToGears = true
+
+  override def paired = Array(true)
+  override def chunks = Array(1)
+  override def skipMarkDuplicates = Array(true)
+  override def skipFlexipreps = Array(true)
+  override def zipped = Array(true)
+}
diff --git a/mapping/src/test/scala/nl/lumc/sasc/biopet/pipelines/mapping/MultisampleMappingTest.scala b/mapping/src/test/scala/nl/lumc/sasc/biopet/pipelines/mapping/MultisampleMappingTest.scala
new file mode 100644
index 0000000000000000000000000000000000000000..beac59c9c68d1168a4a40408408e63378287b217
--- /dev/null
+++ b/mapping/src/test/scala/nl/lumc/sasc/biopet/pipelines/mapping/MultisampleMappingTest.scala
@@ -0,0 +1,226 @@
+package nl.lumc.sasc.biopet.pipelines.mapping
+
+import java.io.{ File, FileOutputStream }
+
+import com.google.common.io.Files
+import nl.lumc.sasc.biopet.extensions.kraken.Kraken
+import nl.lumc.sasc.biopet.extensions.picard.{ MarkDuplicates, MergeSamFiles }
+import nl.lumc.sasc.biopet.utils.ConfigUtils
+import nl.lumc.sasc.biopet.utils.config.Config
+import org.broadinstitute.gatk.queue.QSettings
+import org.scalatest.Matchers
+import org.scalatest.testng.TestNGSuite
+import org.testng.annotations.{ DataProvider, Test }
+
+/**
+ * Created by pjvanthof on 15/05/16.
+ */
+trait MultisampleMappingTestTrait extends TestNGSuite with Matchers {
+  def initPipeline(map: Map[String, Any]): MultisampleMapping = {
+    new MultisampleMapping() {
+      override def configNamespace = "multisamplemapping"
+      override def globalConfig = new Config(ConfigUtils.mergeMaps(map, MultisampleMappingTestTrait.config))
+      qSettings = new QSettings
+      qSettings.runName = "test"
+    }
+  }
+
+  def mergeStrategies = MultisampleMapping.MergeStrategy.values
+  def bamToFastq = false
+  def correctReadgroups = false
+  def unmappedToGears = false
+  def sample1 = Array(true, false)
+  def sample2 = Array(true, false)
+  def sample3 = false
+  def sample4 = false
+
+  @DataProvider(name = "mappingOptions")
+  def mappingOptions = {
+    for (
+      merge <- mergeStrategies.toArray; s1 <- sample1; s2 <- sample2
+    ) yield Array(merge, s1, s2)
+  }
+
+  @Test(dataProvider = "mappingOptions")
+  def testMultisampleMapping(merge: MultisampleMapping.MergeStrategy.Value, sample1: Boolean, sample2: Boolean): Unit = {
+    val map: Map[String, Any] = {
+      var m: Map[String, Any] = MultisampleMappingTestTrait.config
+      if (sample1) m = ConfigUtils.mergeMaps(MultisampleMappingTestTrait.sample1, m)
+      if (sample2) m = ConfigUtils.mergeMaps(MultisampleMappingTestTrait.sample2, m)
+      if (sample3) m = ConfigUtils.mergeMaps(MultisampleMappingTestTrait.sample3, m)
+      if (sample4) m = ConfigUtils.mergeMaps(MultisampleMappingTestTrait.sample4, m)
+      m ++ Map(
+        "merge_strategy" -> merge.toString,
+        "bam_to_fastq" -> bamToFastq,
+        "correct_readgroups" -> correctReadgroups,
+        "unmapped_to_gears" -> unmappedToGears
+      )
+    }
+
+    if (!sample1 && !sample2 && !sample3 && !sample4) { // When no samples
+      intercept[IllegalArgumentException] {
+        initPipeline(map).script()
+      }
+    } else if (sample4 && !bamToFastq && !correctReadgroups) {
+      intercept[IllegalStateException] {
+        initPipeline(map).script()
+      }
+    } else {
+      val pipeline = initPipeline(map)
+      pipeline.script()
+
+      val numberFastqLibs = (if (sample1) 1 else 0) + (if (sample2) 2 else 0) + (if (sample3 && bamToFastq) 1 else 0) + (if (sample4 && bamToFastq) 1 else 0)
+      val numberSamples = (if (sample1) 1 else 0) + (if (sample2) 1 else 0)
+
+      import MultisampleMapping.MergeStrategy
+      pipeline.functions.count(_.isInstanceOf[MarkDuplicates]) shouldBe (numberFastqLibs +
+        (if (sample2 && (merge == MergeStrategy.MarkDuplicates || merge == MergeStrategy.PreProcessMarkDuplicates)) 1 else 0))
+      pipeline.functions.count(_.isInstanceOf[MergeSamFiles]) shouldBe (
+        (if (sample2 && (merge == MergeStrategy.MergeSam || merge == MergeStrategy.PreProcessMergeSam)) 1 else 0))
+      pipeline.samples.foreach {
+        case (sampleName, sample) =>
+          if (merge == MergeStrategy.None) sample.bamFile shouldBe None
+          sample.summaryStats shouldBe Map()
+          sample.libraries.foreach {
+            case (libraryId, library) =>
+              library.summaryStats shouldBe Map()
+          }
+      }
+
+      pipeline.functions.count(_.isInstanceOf[Kraken]) shouldBe (if (unmappedToGears) (numberFastqLibs + numberSamples) else 0)
+
+      pipeline.summarySettings.get("merge_strategy") shouldBe Some(merge.toString)
+    }
+  }
+}
+
+class MultisampleMappingTest extends MultisampleMappingTestTrait {
+  override def sample1 = Array(true)
+}
+
+class MultisampleMappingNoSamplesTest extends MultisampleMappingTestTrait {
+  override def sample1 = Array(false)
+  override def sample2 = Array(false)
+  override def mergeStrategies = MultisampleMapping.MergeStrategy.values.filter(_ == MultisampleMapping.MergeStrategy.PreProcessMarkDuplicates)
+}
+
+class MultisampleMappingGearsTest extends MultisampleMappingTestTrait {
+  override def sample1 = Array(true)
+  override def sample2 = Array(false)
+  override def unmappedToGears = true
+  override def mergeStrategies = MultisampleMapping.MergeStrategy.values.filter(_ == MultisampleMapping.MergeStrategy.PreProcessMarkDuplicates)
+}
+
+class MultisampleMappingBamTest extends MultisampleMappingTestTrait {
+  override def sample1 = Array(false)
+  override def sample2 = Array(false)
+  override def sample3 = true
+  override def mergeStrategies = MultisampleMapping.MergeStrategy.values.filter(_ == MultisampleMapping.MergeStrategy.PreProcessMarkDuplicates)
+}
+
+class MultisampleMappingWrongBamTest extends MultisampleMappingTestTrait {
+  override def sample1 = Array(false)
+  override def sample2 = Array(false)
+  override def sample4 = true
+  override def mergeStrategies = MultisampleMapping.MergeStrategy.values.filter(_ == MultisampleMapping.MergeStrategy.PreProcessMarkDuplicates)
+}
+
+class MultisampleMappingCorrectBamTest extends MultisampleMappingTestTrait {
+  override def sample1 = Array(false)
+  override def sample2 = Array(false)
+  override def correctReadgroups = true
+  override def sample4 = true
+  override def mergeStrategies = MultisampleMapping.MergeStrategy.values.filter(_ == MultisampleMapping.MergeStrategy.PreProcessMarkDuplicates)
+}
+
+class MultisampleMappingBamToFastqTest extends MultisampleMappingTestTrait {
+  override def sample1 = Array(false)
+  override def sample2 = Array(false)
+  override def bamToFastq = true
+  override def sample3 = true
+  override def sample4 = true
+  override def mergeStrategies = MultisampleMapping.MergeStrategy.values.filter(_ == MultisampleMapping.MergeStrategy.PreProcessMarkDuplicates)
+}
+
+object MultisampleMappingTestTrait {
+  val outputDir = Files.createTempDir()
+  outputDir.deleteOnExit()
+  new File(outputDir, "input").mkdirs()
+  def inputTouch(name: String): File = {
+    val file = new File(outputDir, "input" + File.separator + name).getAbsoluteFile
+    Files.touch(file)
+    file
+  }
+
+  private def copyFile(name: String): Unit = {
+    val is = getClass.getResourceAsStream("/" + name)
+    val os = new FileOutputStream(new File(outputDir, name))
+    org.apache.commons.io.IOUtils.copy(is, os)
+    os.close()
+  }
+
+  copyFile("ref.fa")
+  copyFile("ref.dict")
+  copyFile("ref.fa.fai")
+  copyFile("empty.sam")
+
+  val config = Map(
+    "name_prefix" -> "test",
+    "cache" -> true,
+    "dir" -> "test",
+    "vep_script" -> "test",
+    "output_dir" -> outputDir,
+    "reference_fasta" -> (outputDir + File.separator + "ref.fa"),
+    "fastqc" -> Map("exe" -> "test"),
+    "input_alleles" -> "test",
+    "fastqc" -> Map("exe" -> "test"),
+    "seqtk" -> Map("exe" -> "test"),
+    "sickle" -> Map("exe" -> "test"),
+    "cutadapt" -> Map("exe" -> "test"),
+    "bwa" -> Map("exe" -> "test"),
+    "samtools" -> Map("exe" -> "test"),
+    "igvtools" -> Map("exe" -> "test"),
+    "wigtobigwig" -> Map("exe" -> "test"),
+    "kraken" -> Map("exe" -> "test", "db" -> "test"),
+    "krakenreport" -> Map("exe" -> "test", "db" -> "test"),
+    "md5sum" -> Map("exe" -> "test")
+  )
+
+  val sample1 = Map(
+    "samples" -> Map("sample1" -> Map("libraries" -> Map(
+      "lib1" -> Map(
+        "R1" -> inputTouch("1_1_R1.fq"),
+        "R2" -> inputTouch("1_1_R2.fq")
+      )
+    )
+    )))
+
+  val sample2 = Map(
+    "samples" -> Map("sample3" -> Map("libraries" -> Map(
+      "lib1" -> Map(
+        "R1" -> inputTouch("2_1_R1.fq"),
+        "R2" -> inputTouch("2_1_R2.fq")
+      ),
+      "lib2" -> Map(
+        "R1" -> inputTouch("2_2_R1.fq"),
+        "R2" -> inputTouch("2_2_R2.fq")
+      )
+    )
+    )))
+
+  val sample3 = Map(
+    "samples" -> Map("sample3" -> Map("libraries" -> Map(
+      "lib1" -> Map(
+        "bam" -> (outputDir + File.separator + "empty.sam")
+      )
+    )
+    )))
+
+  val sample4 = Map(
+    "samples" -> Map("sample4" -> Map("libraries" -> Map(
+      "lib1" -> Map(
+        "bam" -> (outputDir + File.separator + "empty.sam")
+      )
+    )
+    )))
+}
diff --git a/shiva/src/main/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaVariantcalling.scala b/shiva/src/main/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaVariantcalling.scala
index 4f84d061198ee9449811cd414c72e661ee1e501b..d99948e4b61abe97d085410c26c6aeda2c379136 100644
--- a/shiva/src/main/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaVariantcalling.scala
+++ b/shiva/src/main/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaVariantcalling.scala
@@ -179,8 +179,8 @@ class ShivaVariantcalling(val root: Configurable) extends QScript
   /** Settings for the summary */
   def summarySettings = Map(
     "variantcallers" -> configCallers.toList,
-    "regions_of_interest" -> roiBedFiles.map(_.getName.stripSuffix(".bed")),
-    "amplicon_bed" -> ampliconBedFile.map(_.getName.stripSuffix(".bed"))
+    "regions_of_interest" -> roiBedFiles.map(_.getName),
+    "amplicon_bed" -> ampliconBedFile.map(_.getAbsolutePath)
   )
 
   /** Files for the summary */
diff --git a/shiva/src/test/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaVariantcallingTest.scala b/shiva/src/test/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaVariantcallingTest.scala
index 8c9dcb1e5496d3e43792bcc83d56644396eaeee6..2904d79a6f8abb6890dc5597c318464b57ec79d3 100644
--- a/shiva/src/test/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaVariantcallingTest.scala
+++ b/shiva/src/test/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaVariantcallingTest.scala
@@ -11,9 +11,10 @@ import com.google.common.io.Files
 import nl.lumc.sasc.biopet.core.BiopetPipe
 import nl.lumc.sasc.biopet.extensions.Freebayes
 import nl.lumc.sasc.biopet.extensions.bcftools.{ BcftoolsCall, BcftoolsMerge }
-import nl.lumc.sasc.biopet.extensions.gatk.{ CombineVariants, HaplotypeCaller, UnifiedGenotyper }
+import nl.lumc.sasc.biopet.extensions.gatk.{ CombineVariants, GenotypeConcordance, HaplotypeCaller, UnifiedGenotyper }
 import nl.lumc.sasc.biopet.utils.config.Config
 import nl.lumc.sasc.biopet.extensions.tools.{ MpileupToVcf, VcfFilter, VcfStats }
+import nl.lumc.sasc.biopet.extensions.vt.{ VtDecompose, VtNormalize }
 import nl.lumc.sasc.biopet.utils.ConfigUtils
 import org.broadinstitute.gatk.queue.QSettings
 import org.scalatest.Matchers
@@ -47,6 +48,12 @@ trait ShivaVariantcallingTestTrait extends TestNGSuite with Matchers {
   def haplotypeCaller: Boolean = false
   def freebayes: Boolean = false
   def varscanCnsSinglesample: Boolean = false
+  def referenceVcf: Option[File] = None
+  def roiBedFiles: List[File] = Nil
+  def ampliconBedFile: Option[File] = None
+
+  def normalize = false
+  def decompose = false
 
   @DataProvider(name = "shivaVariantcallingOptions")
   def shivaVariantcallingOptions = {
@@ -79,7 +86,12 @@ trait ShivaVariantcallingTestTrait extends TestNGSuite with Matchers {
     if (haplotypeCaller) callers.append("haplotypecaller")
     if (freebayes) callers.append("freebayes")
     if (varscanCnsSinglesample) callers.append("varscan_cns_singlesample")
-    val map = Map("variantcallers" -> callers.toList)
+    val map = Map(
+      "variantcallers" -> callers.toList,
+      "execute_vt_normalize" -> normalize,
+      "execute_vt_decompose" -> decompose,
+      "regions_of_interest" -> roiBedFiles.map(_.getAbsolutePath)
+    ) ++ referenceVcf.map("reference_vcf" -> _) ++ ampliconBedFile.map("amplicon_bed" -> _.getAbsolutePath)
     val pipeline = initPipeline(map)
 
     pipeline.inputBams = (for (n <- 1 to bams) yield n.toString -> ShivaVariantcallingTest.inputTouch("bam_" + n + ".bam")).toMap
@@ -105,7 +117,14 @@ trait ShivaVariantcallingTestTrait extends TestNGSuite with Matchers {
         (if (haplotypeCallerAllele) 1 else 0) + (if (haplotypeCallerGvcf) bams else 0)
       pipeline.functions.count(_.isInstanceOf[UnifiedGenotyper]) shouldBe (if (unifiedGenotyper) 1 else 0) +
         (if (unifiedGenotyperAllele) 1 else 0)
-      pipeline.functions.count(_.isInstanceOf[VcfStats]) shouldBe (1 + callers.size)
+      pipeline.functions.count(_.isInstanceOf[VcfStats]) shouldBe (1 + callers.size + (roiBedFiles ++ ampliconBedFile).length * (1 + callers.size))
+      pipeline.functions.count(_.isInstanceOf[VtNormalize]) shouldBe (if (normalize) callers.size else 0)
+      pipeline.functions.count(_.isInstanceOf[VtDecompose]) shouldBe (if (decompose) callers.size else 0)
+      pipeline.functions.count(_.isInstanceOf[GenotypeConcordance]) shouldBe (if (referenceVcf.isDefined) 1 + callers.size else 0)
+
+      pipeline.summarySettings.get("variantcallers").map(_.asInstanceOf[List[String]].toSet) shouldBe Some(callers.toSet)
+      pipeline.summarySettings.get("amplicon_bed") shouldBe Some(ampliconBedFile.map(_.getAbsolutePath))
+      pipeline.summarySettings.get("regions_of_interest") shouldBe Some(roiBedFiles.map(_.getAbsolutePath))
     }
   }
 }
@@ -153,6 +172,27 @@ class ShivaVariantcallingFreebayesTest extends ShivaVariantcallingTestTrait {
 class ShivaVariantcallingVarscanCnsSinglesampleTest extends ShivaVariantcallingTestTrait {
   override def varscanCnsSinglesample: Boolean = true
 }
+class ShivaVariantcallingNormalizeTest extends ShivaVariantcallingTestTrait {
+  override def unifiedGenotyper: Boolean = true
+  override def normalize = true
+}
+class ShivaVariantcallingDecomposeTest extends ShivaVariantcallingTestTrait {
+  override def unifiedGenotyper: Boolean = true
+  override def decompose = true
+}
+class ShivaVariantcallingNormalizeDecomposeTest extends ShivaVariantcallingTestTrait {
+  override def unifiedGenotyper: Boolean = true
+  override def normalize = true
+  override def decompose = true
+}
+class ShivaVariantcallingReferenceVcfTest extends ShivaVariantcallingTestTrait {
+  override def unifiedGenotyper: Boolean = true
+  override def referenceVcf = Some(new File("ref.vcf"))
+}
+class ShivaVariantcallingAmpliconTest extends ShivaVariantcallingTestTrait {
+  override def unifiedGenotyper: Boolean = true
+  override def ampliconBedFile = Some(new File("amplicon.bed"))
+}
 
 object ShivaVariantcallingTest {
   val outputDir = Files.createTempDir()
@@ -189,6 +229,7 @@ object ShivaVariantcallingTest {
     "bgzip" -> Map("exe" -> "test"),
     "tabix" -> Map("exe" -> "test"),
     "input_alleles" -> "test.vcf.gz",
-    "varscan_jar" -> "test"
+    "varscan_jar" -> "test",
+    "vt" -> Map("exe" -> "test")
   )
 }
\ No newline at end of file