diff --git a/bammetrics/src/main/scala/nl/lumc/sasc/biopet/pipelines/bammetrics/BamMetrics.scala b/bammetrics/src/main/scala/nl/lumc/sasc/biopet/pipelines/bammetrics/BamMetrics.scala
index 78bf5f309f77ea2916715a0681640b4d1400cd72..67240e7ed0dc80ac33eee75c9fb0c8f25ba0f6f4 100644
--- a/bammetrics/src/main/scala/nl/lumc/sasc/biopet/pipelines/bammetrics/BamMetrics.scala
+++ b/bammetrics/src/main/scala/nl/lumc/sasc/biopet/pipelines/bammetrics/BamMetrics.scala
@@ -17,15 +17,16 @@ package nl.lumc.sasc.biopet.pipelines.bammetrics
 
 import java.io.File
 
-import nl.lumc.sasc.biopet.core.annotations.{ RibosomalRefFlat, AnnotationRefFlat }
+import nl.lumc.sasc.biopet.core.annotations.{ AnnotationRefFlat, RibosomalRefFlat }
 import nl.lumc.sasc.biopet.utils.config.Configurable
 import nl.lumc.sasc.biopet.core.summary.SummaryQScript
-import nl.lumc.sasc.biopet.core.{ Reference, BiopetFifoPipe, PipelineCommand, SampleLibraryTag }
+import nl.lumc.sasc.biopet.core.{ BiopetFifoPipe, PipelineCommand, Reference, SampleLibraryTag }
 import nl.lumc.sasc.biopet.extensions.bedtools.{ BedtoolsCoverage, BedtoolsIntersect }
 import nl.lumc.sasc.biopet.extensions.picard._
 import nl.lumc.sasc.biopet.extensions.samtools.SamtoolsFlagstat
 import nl.lumc.sasc.biopet.pipelines.bammetrics.scripts.CoverageStats
 import nl.lumc.sasc.biopet.extensions.tools.BiopetFlagstat
+import nl.lumc.sasc.biopet.utils.intervals.BedCheck
 import org.broadinstitute.gatk.queue.QScript
 
 class BamMetrics(val root: Configurable) extends QScript
@@ -72,6 +73,8 @@ class BamMetrics(val root: Configurable) extends QScript
   /** executed before script */
   def init(): Unit = {
     inputFiles :+= new InputFile(inputBam)
+    ampliconBedFile.foreach(BedCheck.checkBedFileToReference(_, referenceFasta(), biopetError = true))
+    roiBedFiles.foreach(BedCheck.checkBedFileToReference(_, referenceFasta(), biopetError = true))
   }
 
   /** Script to add jobs */
diff --git a/bammetrics/src/test/scala/nl/lumc/sasc/biopet/pipelines/bammetrics/BamMetricsTest.scala b/bammetrics/src/test/scala/nl/lumc/sasc/biopet/pipelines/bammetrics/BamMetricsTest.scala
index 4a75d99e00d3a21324c8d5459d891e6435691185..6da49168e2166189dd05fb481ded00ccff66b43a 100644
--- a/bammetrics/src/test/scala/nl/lumc/sasc/biopet/pipelines/bammetrics/BamMetricsTest.scala
+++ b/bammetrics/src/test/scala/nl/lumc/sasc/biopet/pipelines/bammetrics/BamMetricsTest.scala
@@ -61,9 +61,9 @@ class BamMetricsTest extends TestNGSuite with Matchers {
   def testBamMetrics(rois: Int, amplicon: Boolean, rna: Boolean, wgs: Boolean) = {
     val map = ConfigUtils.mergeMaps(Map("output_dir" -> BamMetricsTest.outputDir, "rna_metrics" -> rna, "wgs_metrics" -> wgs),
       Map(BamMetricsTest.executables.toSeq: _*)) ++
-      (if (amplicon) Map("amplicon_bed" -> "amplicon.bed") else Map()) ++
+      (if (amplicon) Map("amplicon_bed" -> BamMetricsTest.ampliconBed.getAbsolutePath) else Map()) ++
       (if (rna) Map("annotation_refflat" -> "transcripts.refFlat") else Map()) ++
-      Map("regions_of_interest" -> (1 to rois).map("roi_" + _ + ".bed").toList)
+      Map("regions_of_interest" -> (1 to rois).map(BamMetricsTest.roi(_).getAbsolutePath).toList)
     val bammetrics: BamMetrics = initPipeline(map)
 
     bammetrics.inputBam = BamMetricsTest.bam
@@ -94,6 +94,14 @@ object BamMetricsTest {
 
   val bam = new File(outputDir, "input" + File.separator + "bla.bam")
   Files.touch(bam)
+  val ampliconBed = new File(outputDir, "input" + File.separator + "amplicon_bed.bed")
+  Files.touch(ampliconBed)
+
+  def roi(i: Int): File = {
+    val roi = new File(outputDir, "input" + File.separator + s"roi${i}.bed")
+    Files.touch(roi)
+    roi
+  }
 
   private def copyFile(name: String): Unit = {
     val is = getClass.getResourceAsStream("/" + name)
diff --git a/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/BiopetFifoPipe.scala b/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/BiopetFifoPipe.scala
index 16626532ce11401652fef73d9320b689a8dc138d..8c044f719aa4516f519705ee37476ff7c0c7c4b9 100644
--- a/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/BiopetFifoPipe.scala
+++ b/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/BiopetFifoPipe.scala
@@ -73,6 +73,8 @@ class BiopetFifoPipe(val root: Configurable,
 
     _pipesJobs :::= commands
     _pipesJobs = _pipesJobs.distinct
+
+    analysisName = commands.map(_.analysisName).mkString("_")
   }
 
   override def beforeCmd(): Unit = {
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 43af927eb622b8831a1a0343b9eecb761de433d8..8365cc946ef6395409744f612eec2d9e3b6b52af 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 sys.exit(1)
+    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 5eedb3db7c718a6b5293fab25bff182c629e3909..e80887e8edcb5e8f2c73cfa268964fb39cf326c8 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 sys.exit(1)
+    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 0add274bfbc477ab771466f9b4b5cdfc2024a1f1..6bba497ca162ca63574fb99f048cba119f9e9cf6 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,10 +53,7 @@ object BaseCounter extends ToolCommand {
 
   def main(args: Array[String]): Unit = {
     val argsParser = new OptParser
-    val cmdArgs: Args = argsParser.parse(args, Args()) match {
-      case Some(x) => x
-      case _       => 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 2ad247900d7a1537e93c3f20b039cf1962d1fa42..100209b1d266bd326c91c543631a8b4dfd78c10d 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 sys.exit(1)
+    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 f9646c4c9ebe7473e5ccb39e833d8ae87176b84a..b82b7b74286258ac5bdd11a796c1924bd1c3d4af 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 sys.exit(1)
+    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 b9ef718165ff3a7f2b67853c83c3e7d0fbbbe297..40ad0b93b3ad8404382be17ff8fa862851db961a 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 sys.exit(1)
+    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 4d98bda24b5c4eb1072cd5d1739efbf242d4a1bf..51f1c1cbecba4e079534eaa380f8be072950c3d1 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 sys.exit(1)
+    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 141633c5358a21c931555d5efbd18c615b7c6f77..fccebd08aa15ea28c90f6b64af57e196e6091e55 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 sys.exit(1)
+    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/ExtractAlignedFastq.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/ExtractAlignedFastq.scala
index b02074875b2e27021e123139da7ef42d1bce8700..622c4a9c4cc9807e67a15719561d94eba3970355 100644
--- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/ExtractAlignedFastq.scala
+++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/ExtractAlignedFastq.scala
@@ -242,7 +242,7 @@ object ExtractAlignedFastq extends ToolCommand {
   def parseArgs(args: Array[String]): Args =
     new OptParser()
       .parse(args, Args())
-      .getOrElse(sys.exit(1))
+      .getOrElse(throw new IllegalArgumentException)
 
   def main(args: Array[String]): Unit = {
 
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 46a4abd0cac604dedc239845565f5d1acdd85b72..f0214b3392255f2c4e81de571c35a152343a86d5 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 sys.exit(1)
+    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/FastqSync.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/FastqSync.scala
index e56393b38eb62499c39469b452baefc818812e28..7b364d1ffb36ab8879236d125196119813cbadb8 100644
--- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/FastqSync.scala
+++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/FastqSync.scala
@@ -151,7 +151,7 @@ object FastqSync extends ToolCommand {
    */
   def parseArgs(args: Array[String]): Args = new OptParser()
     .parse(args, Args())
-    .getOrElse(sys.exit(1))
+    .getOrElse(throw new IllegalArgumentException)
 
   def main(args: Array[String]): Unit = {
 
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 f752e3be6863928122bf233b9b911b2d50b8a432..92c8782a75707b646e9cc10e3a97f822a2f53ae0 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 sys.exit(1)
+    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 e9b24a378eef5b06a0a1e10832943b07852985c1..fcb302c3c7b9e551d9a7190d14c4d9f29ce48478 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 sys.exit(1)
+    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/KrakenReportToJson.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/KrakenReportToJson.scala
index ee59a22aaab5a1b21ad8565a74f41d432cde096b..ce47b649de633d0db2cdf497421c972d43fe32bb 100644
--- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/KrakenReportToJson.scala
+++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/KrakenReportToJson.scala
@@ -90,7 +90,7 @@ object KrakenReportToJson extends ToolCommand {
    */
   def parseArgs(args: Array[String]): Args = new OptParser()
     .parse(args, Args())
-    .getOrElse(sys.exit(1))
+    .getOrElse(throw new IllegalArgumentException)
 
   /**
    * Takes a line from the kraken report, converts into Map with taxonID and
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 02f4b4709398e244a40ba13139993d2230d54fd3..8187064d10ddbfda5a4642a821b30b23e56bfbe4 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 sys.exit(1)
+    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 15b76aa44063bbeeb3f79606225d88b0d4666ed3..f853d66a5018559569a02b5ded85a04e19d57711 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 sys.exit(1)
+    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/MergeTables.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/MergeTables.scala
index 426043c4b92ff49a1f987c418658ffd4180ba702..07de8a2b895e9c6b079087dae3844a084b5380a3 100644
--- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/MergeTables.scala
+++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/MergeTables.scala
@@ -188,7 +188,7 @@ object MergeTables extends ToolCommand {
   /** Parses the command line argument */
   def parseArgs(args: Array[String]): Args = new OptParser()
     .parse(args, Args())
-    .getOrElse(sys.exit(1))
+    .getOrElse(throw new IllegalArgumentException)
 
   /** Transforms the input file seq into a seq of [[InputTable]] objects */
   def prepInput(inFiles: Seq[File], ext: String, columnNames: Option[Seq[String]]): Seq[InputTable] = {
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 91761c1965510f240af328bb54f4408d6388a75b..df159c33dd4c05af042ea8f6cfc5a1735cac6013 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 sys.exit(1)
+    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 a5040a24f735e88d0c0877b7e2e0923c1e5de2c8..6be7f11fb878af4e6679f661327f9b85cc3ab4a3 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 sys.exit(1)
+    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 bdfb0be7f8e51495fed176ac7ab386104a04948e..4af0fc390709c0e7e5ac7f3fc7e3fdeb0c48e8a1 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 sys.exit(1)
+    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 e559f22216b5f08fd625b24931251694733a81c4..0ea5fcc73ff7f1c5caed520ce8360d1d2c1dd820 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 sys.exit(1)
+    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 f5ffa5e5a43e63c95d6610ca9e58c1170ae44369..71dfbbacb788829a98821e00fe51d28f47830423 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 sys.exit(1)
+    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 9ff037eae73d81cd39345d6028e903af220ae35c..2ae201ea18512c2f3ee5a6b7c05efad3015b3cba 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 sys.exit(1)
+    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 d9b1d25fd67b51b76e52d62bca776dd3773417e4..4d1f2b82d865cbed58ee329c6f985646df6ed5e3 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 sys.exit(1)
+    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/SeqStat.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/SeqStat.scala
index fe59522374391b9ed5af74df61ed34d58db15339..3c39667cbff6ce005b9e45d411c410cd3bed4eae 100644
--- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/SeqStat.scala
+++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/SeqStat.scala
@@ -76,7 +76,7 @@ object SeqStat extends ToolCommand {
    */
   def parseArgs(args: Array[String]): Args = new OptParser()
     .parse(args, Args())
-    .getOrElse(sys.exit(1))
+    .getOrElse(throw new IllegalArgumentException)
 
   /**
    *
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 0941da9e512949c19ebcd10991d29ad56d30ca85..413d335ab01b3897e7d4a2eff2205923cd06fc6b 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 sys.exit(1)
+    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 9c4629bd45d0111657f871e9587ed09faa6dd611..084a8cf693a0dbb9fd9708dd624df60c3c2629ed 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 sys.exit(1)
+    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 b2e1aeb9651cc9690ad7926ecb76f4f4a5627d8c..975a6dbd13e4741e93a1709f8f02e01283f216b1 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 sys.exit(1)
+    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 cffe91f625699a517d0a7b07a60cd171d805917f..3897c3c9e577e9bb81e0075ba3729b8aa52d7ce3 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 sys.exit(1)
+    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 62b04375f630ab59fea18d9c1d974bdf038cb767..677b4d739621f718b0d4c1d1f9f5531ca465ee7f 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 sys.exit(1)
+    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 20a15dacacba466b41235f32e77062179ad5f0a4..a86eb7c630f4a605c9f4c96a56f8c8e2ea7e89e0 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 sys.exit(1)
+    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/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/VepNormalizer.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/VepNormalizer.scala
index 89d87c2825ee2b730d698deea8b6e3cad5a1dd27..feee8e280c1a9314da92dd183e6d23560395228a 100644
--- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/VepNormalizer.scala
+++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/VepNormalizer.scala
@@ -39,7 +39,7 @@ object VepNormalizer extends ToolCommand {
   def main(args: Array[String]): Unit = {
     val commandArgs: Args = new OptParser()
       .parse(args, Args())
-      .getOrElse(sys.exit(1))
+      .getOrElse(throw new IllegalArgumentException)
 
     val input = commandArgs.inputVCF
     val output = commandArgs.outputVCF
diff --git a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/WipeReads.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/WipeReads.scala
index 082ad2626b1667d4438857b64f6579cfc725f4af..882cb649df599b4ef492a9653dd7f1cb99c58cb9 100644
--- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/WipeReads.scala
+++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/WipeReads.scala
@@ -399,7 +399,7 @@ object WipeReads extends ToolCommand {
   /** Parses the command line argument */
   def parseArgs(args: Array[String]): Args = new OptParser()
     .parse(args, Args())
-    .getOrElse(sys.exit(1))
+    .getOrElse(throw new IllegalArgumentException)
 
   def main(args: Array[String]): Unit = {
 
diff --git a/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/intervals/BedCheck.scala b/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/intervals/BedCheck.scala
new file mode 100644
index 0000000000000000000000000000000000000000..c432fbab3c20a28ed6f3dc7f759b07feb248e03e
--- /dev/null
+++ b/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/intervals/BedCheck.scala
@@ -0,0 +1,27 @@
+package nl.lumc.sasc.biopet.utils.intervals
+
+import java.io.File
+import scala.collection.mutable.Set
+
+import nl.lumc.sasc.biopet.utils.Logging
+
+/**
+ * Created by pjvanthof on 14/05/16.
+ */
+object BedCheck {
+  private val cache: Set[(File, File)] = Set()
+
+  def checkBedFileToReference(bedFile: File, reference: File, biopetError: Boolean = false, ignoreCache: Boolean = false): Unit = {
+    if (ignoreCache || !cache.contains((bedFile, reference))) {
+      cache.add((bedFile, reference))
+      val bedrecords = BedRecordList.fromFile(bedFile)
+      if (biopetError) {
+        try {
+          bedrecords.validateContigs(reference)
+        } catch {
+          case e: IllegalArgumentException => Logging.addError(e.getMessage + s", Bedfile: $bedFile")
+        }
+      } else bedrecords.validateContigs(reference)
+    }
+  }
+}