diff --git a/bam2wig/pom.xml b/bam2wig/pom.xml
index 5afb29d42f96f6bda92b4d8c6a35d2b09308f558..82fc7fff5fd91f4c46fd22421fdb54c89ccf3871 100644
--- a/bam2wig/pom.xml
+++ b/bam2wig/pom.xml
@@ -45,6 +45,18 @@
             <artifactId>BiopetExtensions</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.scalatest</groupId>
+            <artifactId>scalatest_2.10</artifactId>
+            <version>2.2.1</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.testng</groupId>
+            <artifactId>testng</artifactId>
+            <version>6.8</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/bam2wig/src/test/resources/empty.bam b/bam2wig/src/test/resources/empty.bam
new file mode 100644
index 0000000000000000000000000000000000000000..bd4073d80cbf73c689e97d2814f9b1fd00d63895
Binary files /dev/null and b/bam2wig/src/test/resources/empty.bam differ
diff --git a/bam2wig/src/test/scala/nl/lumc/sasc/biopet/pipelines/bamtobigwig/BamToChromSizesTest.scala b/bam2wig/src/test/scala/nl/lumc/sasc/biopet/pipelines/bamtobigwig/BamToChromSizesTest.scala
new file mode 100644
index 0000000000000000000000000000000000000000..eaf2ae37a5d844ba93669f2fef4f0a5d98ab962d
--- /dev/null
+++ b/bam2wig/src/test/scala/nl/lumc/sasc/biopet/pipelines/bamtobigwig/BamToChromSizesTest.scala
@@ -0,0 +1,30 @@
+package nl.lumc.sasc.biopet.pipelines.bamtobigwig
+
+import java.io.File
+import java.nio.file.Paths
+
+import org.scalatest.Matchers
+import org.scalatest.testng.TestNGSuite
+import org.testng.annotations.Test
+
+import scala.io.Source
+
+/**
+ * Created by pjvanthof on 09/05/16.
+ */
+class BamToChromSizesTest extends TestNGSuite with Matchers {
+  private def resourcePath(p: String): String = {
+    Paths.get(getClass.getResource(p).toURI).toString
+  }
+
+  @Test
+  def testChromSizes: Unit = {
+    val bamFile = new File(resourcePath("/empty.bam"))
+    val bamToChromSizes = new BamToChromSizes(null)
+    bamToChromSizes.bamFile = bamFile
+    bamToChromSizes.chromSizesFile = File.createTempFile("chrom.", ".sizes")
+    bamToChromSizes.chromSizesFile.deleteOnExit()
+    bamToChromSizes.run()
+    Source.fromFile(bamToChromSizes.chromSizesFile).getLines().toList shouldBe List("chrQ\t10000", "chrR\t10000")
+  }
+}
diff --git a/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/WriteDependencies.scala b/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/WriteDependencies.scala
index a43cb3890bcf3521e3be6645b4e175c59f84d143..529e6830db48b454499a7344c8606229669acab9 100644
--- a/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/WriteDependencies.scala
+++ b/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/WriteDependencies.scala
@@ -30,18 +30,16 @@ import scala.collection.mutable.ListBuffer
  */
 object WriteDependencies extends Logging with Configurable {
   val root: Configurable = null
-  private val functionNames: mutable.Map[QFunction, String] = mutable.Map()
-
-  private def createFunctionNames(functions: Seq[QFunction]): Unit = {
+  private def createFunctionNames(functions: Seq[QFunction]): Map[QFunction, String] = {
     val cache: mutable.Map[String, Int] = mutable.Map()
-    for (function <- functions) {
+    (for (function <- functions) yield {
       val baseName = function match {
         case f: Configurable => f.configNamespace
         case f               => f.getClass.getSimpleName
       }
       cache += baseName -> (cache.getOrElse(baseName, 0) + 1)
-      functionNames += function -> s"$baseName-${cache(baseName)}"
-    }
+      function -> s"$baseName-${cache(baseName)}"
+    }).toMap
   }
 
   /**
@@ -55,7 +53,7 @@ object WriteDependencies extends Logging with Configurable {
 
     val errorOnMissingInput: Boolean = config("error_on_missing_input", false)
 
-    createFunctionNames(functions)
+    val functionNames = createFunctionNames(functions)
 
     case class QueueFile(file: File) {
       private val inputJobs: ListBuffer[QFunction] = ListBuffer()
diff --git a/biopet-core/src/test/scala/nl/lumc/sasc/biopet/core/WriteDependenciesTest.scala b/biopet-core/src/test/scala/nl/lumc/sasc/biopet/core/WriteDependenciesTest.scala
new file mode 100644
index 0000000000000000000000000000000000000000..b8dee445d737323893c1f5a85dce8b75f7feec72
--- /dev/null
+++ b/biopet-core/src/test/scala/nl/lumc/sasc/biopet/core/WriteDependenciesTest.scala
@@ -0,0 +1,60 @@
+package nl.lumc.sasc.biopet.core
+
+import java.io.File
+import java.nio.file.Files
+
+import nl.lumc.sasc.biopet.utils.ConfigUtils
+import org.broadinstitute.gatk.queue.function.QFunction
+import org.scalatest.Matchers
+import org.scalatest.testng.TestNGSuite
+import org.testng.annotations.Test
+
+import scala.io.Source
+
+/**
+ * Created by pjvanthof on 09/05/16.
+ */
+class WriteDependenciesTest extends TestNGSuite with Matchers {
+
+  import WriteDependenciesTest._
+
+  case class Qfunc(in: Seq[File], out: Seq[File]) extends QFunction {
+    override def inputs = in
+    override def outputs = out
+    override def doneOutputs = out.map(x => new File(x.getParentFile, s".${x.getName}.done"))
+    override def failOutputs = out.map(x => new File(x.getParentFile, s".${x.getName}.fail"))
+    jobOutputFile = new File(out.head + ".out")
+  }
+
+  @Test
+  def testDeps: Unit = {
+    val outputFile = File.createTempFile("deps.", ".json")
+    outputFile.deleteOnExit()
+    val func1 = Qfunc(file1 :: Nil, file2 :: Nil)
+    val func2 = Qfunc(file2 :: Nil, file3 :: Nil)
+    WriteDependencies.writeDependencies(func1 :: func2 :: Nil, outputFile)
+    val deps = ConfigUtils.fileToConfigMap(outputFile)
+    deps("jobs") shouldBe a[Map[_, _]]
+    val jobs = deps("jobs").asInstanceOf[Map[String, Map[String, Any]]]
+    jobs.count(_._1.contains("Qfunc")) shouldBe 2
+
+    deps("files") shouldBe a[List[_]]
+    val files = deps("files").asInstanceOf[List[Map[String, Any]]]
+    val paths = files.map(x => x.get("path")).flatten
+    assert(paths.contains(file1.toString))
+    assert(paths.contains(file2.toString))
+    assert(paths.contains(file3.toString))
+
+    files.find(_.get("path") == Some(file1.toString)).flatMap(_.get("pipeline_input")) shouldBe Some(true)
+    files.find(_.get("path") == Some(file2.toString)).flatMap(_.get("pipeline_input")) shouldBe Some(false)
+    files.find(_.get("path") == Some(file3.toString)).flatMap(_.get("pipeline_input")) shouldBe Some(false)
+  }
+}
+
+object WriteDependenciesTest {
+  val tempDir = Files.createTempDirectory("test").toFile
+  tempDir.deleteOnExit()
+  val file1 = new File(tempDir, "file1.txt")
+  val file2 = new File(tempDir, "file2.txt")
+  val file3 = new File(tempDir, "file3.txt")
+}
\ No newline at end of file
diff --git a/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/summary/Summary.scala b/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/summary/Summary.scala
index 6b863f81d16d4f26754ea87ddf5c703f35fd4588..301fdf1f31bb8475c1092fb76b69e2c667448ec1 100644
--- a/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/summary/Summary.scala
+++ b/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/summary/Summary.scala
@@ -61,7 +61,7 @@ class Summary(file: File) {
   }
 
   /** Executes given function for each sample */
-  def getSampleValues(function: (Summary, String) => Option[Any]): Map[String, Option[Any]] = {
+  def getSampleValues[T](function: (Summary, String) => Option[T]): Map[String, Option[T]] = {
     (for (sample <- samples) yield sample -> function(this, sample)).toMap
   }
 
@@ -95,7 +95,7 @@ class Summary(file: File) {
    * @param function Function to execute
    * @return (sampleId, libId) -> value
    */
-  def getLibraryValues(function: (Summary, String, String) => Option[Any]): Map[(String, String), Option[Any]] = {
+  def getLibraryValues[T](function: (Summary, String, String) => Option[T]): Map[(String, String), Option[T]] = {
     (for (sample <- samples; lib <- libraries.getOrElse(sample, Set())) yield {
       (sample, lib) -> function(this, sample, lib)
     }).toMap
diff --git a/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/summary/SummaryValue.scala b/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/summary/SummaryValue.scala
index dbce03915e2ed8512e9e737f9189147670b76a5e..9ad67419137321027aceaa14a88781a32c74f0ff 100644
--- a/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/summary/SummaryValue.scala
+++ b/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/summary/SummaryValue.scala
@@ -33,7 +33,6 @@ case class SummaryValue(value: Option[Any]) {
     })
   }
 
-  //TODO: Calculations are not yet used somewhere, needs more testing
   def +(that: SummaryValue): SummaryValue = {
     (this.value, that.value) match {
       case (Some(a: Double), Some(b)) => SummaryValue(Some(a + b.toString.toDouble))
diff --git a/biopet-utils/src/test/scala/nl/lumc/sasc/biopet/utils/IoUtilsTest.scala b/biopet-utils/src/test/scala/nl/lumc/sasc/biopet/utils/IoUtilsTest.scala
new file mode 100644
index 0000000000000000000000000000000000000000..cd319fee6bcb0da8bccb7a1c474f1c566ab0dab5
--- /dev/null
+++ b/biopet-utils/src/test/scala/nl/lumc/sasc/biopet/utils/IoUtilsTest.scala
@@ -0,0 +1,81 @@
+package nl.lumc.sasc.biopet.utils
+
+import java.io.{ File, FileNotFoundException, PrintWriter }
+import java.nio.file.Files
+
+import org.scalatest.Matchers
+import org.scalatest.testng.TestNGSuite
+import org.testng.annotations.Test
+
+import scala.io.Source
+
+/**
+ * Created by pjvanthof on 05/05/16.
+ */
+class IoUtilsTest extends TestNGSuite with Matchers {
+
+  def createTempTestFile(file: File): Unit = {
+    file.getParentFile.mkdirs()
+    val writer = new PrintWriter(file)
+    writer.println("test")
+    writer.close()
+    file.deleteOnExit()
+  }
+
+  @Test
+  def testCopyFile: Unit = {
+    val temp1 = File.createTempFile("test.", ".txt")
+    temp1.deleteOnExit()
+    val temp2 = File.createTempFile("test.", ".txt")
+    temp2.deleteOnExit()
+    createTempTestFile(temp1)
+    IoUtils.copyFile(temp1, temp2)
+    val reader = Source.fromFile(temp2)
+    reader.getLines().toList shouldBe List("test")
+    reader.close()
+  }
+
+  @Test
+  def testCopyFileNonExistingDir: Unit = {
+    val temp1 = File.createTempFile("test.", ".txt")
+    val tempDir = new File(Files.createTempDirectory("test").toFile, "non-exist")
+    tempDir.deleteOnExit()
+    tempDir shouldNot exist
+    val temp2 = new File(tempDir, "test.txt")
+    createTempTestFile(temp1)
+    intercept[FileNotFoundException] {
+      IoUtils.copyFile(temp1, temp2)
+    }
+    IoUtils.copyFile(temp1, temp2, true)
+    val reader = Source.fromFile(temp2)
+    reader.getLines().toList shouldBe List("test")
+    reader.close()
+  }
+
+  @Test
+  def testCopyDir: Unit = {
+    val tempDir1 = Files.createTempDirectory("test").toFile
+    tempDir1.deleteOnExit()
+    val tempDir2 = Files.createTempDirectory("test").toFile
+    tempDir2.deleteOnExit()
+    val relativePaths: List[String] = List(
+      "test1.txt",
+      "test2.txt",
+      "dir1" + File.separator + "test1.txt",
+      "dir1" + File.separator + "test2.txt",
+      "dir2" + File.separator + "test1.txt",
+      "dir2" + File.separator + "test2.txt")
+    relativePaths.foreach { x =>
+      createTempTestFile(new File(tempDir1, x))
+      new File(tempDir2, x) shouldNot exist
+    }
+    IoUtils.copyDir(tempDir1, tempDir2)
+    relativePaths.foreach { x =>
+      val file = new File(tempDir2, x)
+      file should exist
+      val reader = Source.fromFile(file)
+      reader.getLines().toList shouldBe List("test")
+      reader.close()
+    }
+  }
+}
diff --git a/biopet-utils/src/test/scala/nl/lumc/sasc/biopet/utils/summary/SummaryTest.scala b/biopet-utils/src/test/scala/nl/lumc/sasc/biopet/utils/summary/SummaryTest.scala
new file mode 100644
index 0000000000000000000000000000000000000000..45f650496cfa4e04784c4b4a9748d5b6ab18be5f
--- /dev/null
+++ b/biopet-utils/src/test/scala/nl/lumc/sasc/biopet/utils/summary/SummaryTest.scala
@@ -0,0 +1,96 @@
+package nl.lumc.sasc.biopet.utils.summary
+
+import java.io.{ File, PrintWriter }
+
+import nl.lumc.sasc.biopet.utils.ConfigUtils
+import org.scalatest.Matchers
+import org.scalatest.testng.TestNGSuite
+import org.testng.annotations.Test
+
+/**
+ * Created by pjvanthof on 06/05/16.
+ */
+class SummaryTest extends TestNGSuite with Matchers {
+  @Test
+  def testSamples: Unit = {
+    val summary = new Summary(SummaryTest.testSummaryFile)
+    summary.samples shouldBe Set("sample1")
+  }
+
+  @Test
+  def testLibraries: Unit = {
+    val summary = new Summary(SummaryTest.testSummaryFile)
+    summary.libraries shouldBe Map("sample1" -> Set("lib1"))
+  }
+
+  @Test
+  def testValue: Unit = {
+    val summary = new Summary(SummaryTest.testSummaryFile)
+    summary.getValue("key_1") shouldBe Some("test_1")
+    summary.getValue("key_x") shouldBe None
+    summary.getValue("samples", "sample1", "key_2") shouldBe Some("test_2")
+    summary.getValue("samples", "sample1", "libraries", "lib1", "key_3") shouldBe Some("test_3")
+
+    summary.getValue(Some("sample1"), None, "key_2") shouldBe Some("test_2")
+    summary.getValue(Some("sample1"), None, "key_x") shouldBe None
+    summary.getValue(Some("sample1"), Some("lib1"), "key_3") shouldBe Some("test_3")
+    summary.getValue(Some("sample1"), Some("lib1"), "key_x") shouldBe None
+    summary.getValue(None, None, "key_1") shouldBe Some("test_1")
+    summary.getValue(None, None, "key_x") shouldBe None
+  }
+
+  @Test
+  def testSampleValue: Unit = {
+    val summary = new Summary(SummaryTest.testSummaryFile)
+    summary.getSampleValue("sample1", "key_2") shouldBe Some("test_2")
+    summary.getSampleValue("sample1", "key_x") shouldBe None
+    summary.getSampleValue("samplex", "key_x") shouldBe None
+  }
+
+  @Test
+  def testSampleValues: Unit = {
+    val summary = new Summary(SummaryTest.testSummaryFile)
+    summary.getSampleValues("key_2") shouldBe Map("sample1" -> Some("test_2"))
+    summary.getSampleValues("key_x") shouldBe Map("sample1" -> None)
+    summary.getSampleValues((summary, sample) => summary.getSampleValue(sample, "key_2")) shouldBe Map("sample1" -> Some("test_2"))
+
+  }
+
+  @Test
+  def testLibraryValue: Unit = {
+    val summary = new Summary(SummaryTest.testSummaryFile)
+    summary.getLibraryValue("sample1", "lib1", "key_3") shouldBe Some("test_3")
+    summary.getLibraryValue("sample1", "lib1", "key_x") shouldBe None
+    summary.getLibraryValue("samplex", "libx", "key_x") shouldBe None
+  }
+
+  @Test
+  def testLibraryValues: Unit = {
+    val summary = new Summary(SummaryTest.testSummaryFile)
+    summary.getLibraryValues("key_3") shouldBe Map(("sample1", "lib1") -> Some("test_3"))
+    summary.getLibraryValues("key_x") shouldBe Map(("sample1", "lib1") -> None)
+    summary.getLibraryValues((summary, sample, lib) => summary.getLibraryValue(sample, lib, "key_3")) shouldBe Map(("sample1", "lib1") -> Some("test_3"))
+  }
+
+}
+
+object SummaryTest {
+  val testSummary = Map(
+    "key_1" -> "test_1",
+    "samples" -> Map(
+      "sample1" -> Map(
+        "key_2" -> "test_2",
+        "libraries" -> Map(
+          "lib1" -> Map("key_3" -> "test_3")
+        )
+      )
+    )
+  )
+
+  val testSummaryFile = File.createTempFile("summary.", ".json")
+  testSummaryFile.deleteOnExit()
+
+  val writer = new PrintWriter(testSummaryFile)
+  writer.println(ConfigUtils.mapToJson(testSummary).nospaces)
+  writer.close()
+}
diff --git a/biopet-utils/src/test/scala/nl/lumc/sasc/biopet/utils/summary/SummaryValueTest.scala b/biopet-utils/src/test/scala/nl/lumc/sasc/biopet/utils/summary/SummaryValueTest.scala
new file mode 100644
index 0000000000000000000000000000000000000000..f2996d522025debf22430cffdc3feae29e7b0737
--- /dev/null
+++ b/biopet-utils/src/test/scala/nl/lumc/sasc/biopet/utils/summary/SummaryValueTest.scala
@@ -0,0 +1,95 @@
+package nl.lumc.sasc.biopet.utils.summary
+
+import java.io.{ File, PrintWriter }
+
+import nl.lumc.sasc.biopet.utils.ConfigUtils
+import org.scalatest.Matchers
+import org.scalatest.testng.TestNGSuite
+import org.testng.annotations.Test
+
+/**
+ * Created by pjvanthof on 06/05/16.
+ */
+class SummaryValueTest extends TestNGSuite with Matchers {
+  @Test
+  def testConstructor: Unit = {
+    val summary = new Summary(SummaryValueTest.testSummaryFile)
+    new SummaryValue(None).value shouldBe None
+    new SummaryValue(Some(1)).value shouldBe Some(1)
+    new SummaryValue(List("key_1"), summary, None, None).value shouldBe Some("test_1")
+    new SummaryValue(List("key_2"), summary, Some("sample1"), None).value shouldBe Some("test_2")
+    new SummaryValue(List("key_3"), summary, Some("sample1"), Some("lib1")).value shouldBe Some("test_3")
+  }
+
+  @Test
+  def testPlus: Unit = {
+    new SummaryValue(Some(1.0)) + new SummaryValue(Some(1.0)) shouldBe new SummaryValue(Some(2.0))
+    new SummaryValue(Some(1.0)) + new SummaryValue(Some(1)) shouldBe new SummaryValue(Some(2.0))
+    new SummaryValue(Some(1)) + new SummaryValue(Some(1)) shouldBe new SummaryValue(Some(2))
+    new SummaryValue(Some("1")) + new SummaryValue(Some(1)) shouldBe new SummaryValue(Some(2.0))
+    new SummaryValue(Some("1")) + new SummaryValue(Some(1.0)) shouldBe new SummaryValue(Some(2.0))
+    new SummaryValue(None) + new SummaryValue(Some(1.0)) shouldBe new SummaryValue(None)
+  }
+
+  @Test
+  def testMin: Unit = {
+    new SummaryValue(Some(1.0)) - new SummaryValue(Some(1.0)) shouldBe new SummaryValue(Some(0.0))
+    new SummaryValue(Some(1.0)) - new SummaryValue(Some(1)) shouldBe new SummaryValue(Some(0.0))
+    new SummaryValue(Some(1)) - new SummaryValue(Some(1)) shouldBe new SummaryValue(Some(0))
+    new SummaryValue(Some("1")) - new SummaryValue(Some(1)) shouldBe new SummaryValue(Some(0.0))
+    new SummaryValue(Some("1")) - new SummaryValue(Some(1.0)) shouldBe new SummaryValue(Some(0.0))
+    new SummaryValue(None) - new SummaryValue(Some(1.0)) shouldBe new SummaryValue(None)
+  }
+
+  @Test
+  def testMultiply: Unit = {
+    new SummaryValue(Some(1.0)) * new SummaryValue(Some(2.0)) shouldBe new SummaryValue(Some(2.0))
+    new SummaryValue(Some(1.0)) * new SummaryValue(Some(2)) shouldBe new SummaryValue(Some(2.0))
+    new SummaryValue(Some(1)) * new SummaryValue(Some(2)) shouldBe new SummaryValue(Some(2))
+    new SummaryValue(Some("1")) * new SummaryValue(Some(2)) shouldBe new SummaryValue(Some(2.0))
+    new SummaryValue(Some("1")) * new SummaryValue(Some(2.0)) shouldBe new SummaryValue(Some(2.0))
+    new SummaryValue(None) * new SummaryValue(Some(2.0)) shouldBe new SummaryValue(None)
+  }
+
+  @Test
+  def testDivide: Unit = {
+    new SummaryValue(Some(2.0)) / new SummaryValue(Some(1.0)) shouldBe new SummaryValue(Some(2.0))
+    new SummaryValue(Some(2.0)) / new SummaryValue(Some(1)) shouldBe new SummaryValue(Some(2.0))
+    new SummaryValue(Some(2)) / new SummaryValue(Some(1)) shouldBe new SummaryValue(Some(2))
+    new SummaryValue(Some("2")) / new SummaryValue(Some(1)) shouldBe new SummaryValue(Some(2.0))
+    new SummaryValue(Some("2")) / new SummaryValue(Some(1.0)) shouldBe new SummaryValue(Some(2.0))
+    new SummaryValue(None) / new SummaryValue(Some(1.0)) shouldBe new SummaryValue(None)
+  }
+
+  @Test
+  def testLeft: Unit = {
+    new SummaryValue(Some(2.0)) % new SummaryValue(Some(1.0)) shouldBe new SummaryValue(Some(0))
+    new SummaryValue(Some(2.0)) % new SummaryValue(Some(1)) shouldBe new SummaryValue(Some(0))
+    new SummaryValue(Some(2)) % new SummaryValue(Some(1)) shouldBe new SummaryValue(Some(0))
+    new SummaryValue(Some("2")) % new SummaryValue(Some(1)) shouldBe new SummaryValue(Some(0))
+    new SummaryValue(Some("2")) % new SummaryValue(Some(1.0)) shouldBe new SummaryValue(Some(0))
+    new SummaryValue(None) % new SummaryValue(Some(1.0)) shouldBe new SummaryValue(None)
+  }
+
+}
+
+object SummaryValueTest {
+  val testSummary = Map(
+    "key_1" -> "test_1",
+    "samples" -> Map(
+      "sample1" -> Map(
+        "key_2" -> "test_2",
+        "libraries" -> Map(
+          "lib1" -> Map("key_3" -> "test_3")
+        )
+      )
+    )
+  )
+
+  val testSummaryFile = File.createTempFile("summary.", ".json")
+  testSummaryFile.deleteOnExit()
+
+  val writer = new PrintWriter(testSummaryFile)
+  writer.println(ConfigUtils.mapToJson(testSummary).nospaces)
+  writer.close()
+}
diff --git a/carp/src/main/scala/nl/lumc/sasc/biopet/pipelines/carp/Carp.scala b/carp/src/main/scala/nl/lumc/sasc/biopet/pipelines/carp/Carp.scala
index 8d3e47bdd9182a24d493c9083944f2fe98dc5287..d6b0f8c1d4f96a3c5af267341336cc8d0f2c452f 100644
--- a/carp/src/main/scala/nl/lumc/sasc/biopet/pipelines/carp/Carp.scala
+++ b/carp/src/main/scala/nl/lumc/sasc/biopet/pipelines/carp/Carp.scala
@@ -58,7 +58,7 @@ class Carp(val root: Configurable) extends QScript with MultisampleMappingTrait
   override def makeSample(id: String) = new Sample(id)
   class Sample(sampleId: String) extends super.Sample(sampleId) {
 
-    override def preProcessBam = Some(createFile(".filter.bam"))
+    override def preProcessBam = Some(createFile("filter.bam"))
 
     val controls: List[String] = config("control", default = Nil)
 
diff --git a/shiva/src/test/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaTest.scala b/shiva/src/test/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaTest.scala
index eb1d40ece24ce6862023eae3343b84c840ea3e42..976fa91996d820ff38fcf22357a358f46277a848 100644
--- a/shiva/src/test/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaTest.scala
+++ b/shiva/src/test/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaTest.scala
@@ -58,7 +58,9 @@ trait ShivaTestTrait extends TestNGSuite with Matchers {
   def multisampleCalling: Boolean = true
   def sampleCalling = false
   def libraryCalling = false
-  def dbsnp: Boolean = true
+  def dbsnp = true
+  def svCalling = false
+  def annotation = false
 
   @Test(dataProvider = "shivaOptions")
   def testShiva(f: String, sample1: Boolean, sample2: Boolean,
@@ -73,7 +75,9 @@ trait ShivaTestTrait extends TestNGSuite with Matchers {
         "single_sample_variantcalling" -> sampleCalling,
         "library_variantcalling" -> libraryCalling,
         "use_indel_realigner" -> realign,
-        "use_base_recalibration" -> baseRecalibration), m)
+        "use_base_recalibration" -> baseRecalibration,
+        "sv_calling" -> svCalling,
+        "annotation" -> annotation), m)
 
     }
 
@@ -96,6 +100,21 @@ trait ShivaTestTrait extends TestNGSuite with Matchers {
       pipeline.functions.count(_.isInstanceOf[BaseRecalibrator]) shouldBe (if (dbsnp && baseRecalibration) (numberLibs * 2) else 0)
       pipeline.functions.count(_.isInstanceOf[PrintReads]) shouldBe (if (dbsnp && baseRecalibration) numberLibs else 0)
 
+      pipeline.summarySettings.get("annotation") shouldBe Some(annotation)
+      pipeline.summarySettings.get("sv_calling") shouldBe Some(svCalling)
+
+      pipeline.samples foreach {
+        case (sampleId, sample) =>
+          sample.summarySettings.get("single_sample_variantcalling") shouldBe Some(sampleCalling)
+          sample.summarySettings.get("use_indel_realigner") shouldBe Some(realign)
+          sample.libraries.foreach {
+            case (libId, lib) =>
+              lib.summarySettings.get("library_variantcalling") shouldBe Some(libraryCalling)
+              lib.summarySettings.get("use_indel_realigner") shouldBe Some(realign)
+              lib.summarySettings.get("use_base_recalibration") shouldBe Some(baseRecalibration && dbsnp)
+          }
+      }
+
       pipeline.functions.count(_.isInstanceOf[VcfStats]) shouldBe (
         (if (multisampleCalling) 2 else 0) +
         (if (sampleCalling) numberSamples * 2 else 0) +
@@ -125,6 +144,20 @@ class ShivaSampleCallingTest extends ShivaTestTrait {
   override def baseRecalibrationProvider = Array(false)
   override def sampleCalling = true
 }
+class ShivaWithSvCallingTest extends ShivaTestTrait {
+  override def sample1 = Array(true)
+  override def sample2 = Array(false)
+  override def realignProvider = Array(false)
+  override def baseRecalibrationProvider = Array(false)
+  override def svCalling = true
+}
+class ShivaWithAnnotationTest extends ShivaTestTrait {
+  override def sample1 = Array(true)
+  override def sample2 = Array(false)
+  override def realignProvider = Array(false)
+  override def baseRecalibrationProvider = Array(false)
+  override def annotation = true
+}
 
 object ShivaTest {
   val outputDir = Files.createTempDir()
@@ -170,7 +203,18 @@ object ShivaTest {
     "wigtobigwig" -> Map("exe" -> "test"),
     "md5sum" -> Map("exe" -> "test"),
     "bgzip" -> Map("exe" -> "test"),
-    "tabix" -> Map("exe" -> "test")
+    "tabix" -> Map("exe" -> "test"),
+    "breakdancerconfig" -> Map("exe" -> "test"),
+    "breakdancercaller" -> Map("exe" -> "test"),
+    "pindelconfig" -> Map("exe" -> "test"),
+    "pindelcaller" -> Map("exe" -> "test"),
+    "pindelvcf" -> Map("exe" -> "test"),
+    "clever" -> Map("exe" -> "test"),
+    "delly" -> Map("exe" -> "test"),
+    "pysvtools" -> Map(
+      "exe" -> "test",
+      "exclusion_regions" -> "test",
+      "translocations_only" -> false)
   )
 
   val sample1 = Map(