diff --git a/public/bammetrics/src/main/scala/nl/lumc/sasc/biopet/pipelines/bammetrics/BamMetrics.scala b/public/bammetrics/src/main/scala/nl/lumc/sasc/biopet/pipelines/bammetrics/BamMetrics.scala
index ed89542f2a3e1f5869131c5c6ae5bd9a2abb6be0..3e6059b1c67f54c2efece6d45c7052b16dcaf97d 100644
--- a/public/bammetrics/src/main/scala/nl/lumc/sasc/biopet/pipelines/bammetrics/BamMetrics.scala
+++ b/public/bammetrics/src/main/scala/nl/lumc/sasc/biopet/pipelines/bammetrics/BamMetrics.scala
@@ -151,29 +151,21 @@ class BamMetrics(val root: Configurable) extends QScript with SummaryQScript wit
       val targetDir = new File(outputDir, targetName)
 
       val biStrict = BedtoolsIntersect(this, inputBam, intervals.bed,
-        output = new File(targetDir, inputBam.getName.stripSuffix(".bam") + ".overlap.strict.bam"),
+        output = new File(targetDir, inputBam.getName.stripSuffix(".bam") + ".overlap.strict.sam"),
         minOverlap = config("strict_intersect_overlap", default = 1.0))
-      biStrict.isIntermediate = true
-      add(biStrict)
-      add(SamtoolsFlagstat(this, biStrict.output, targetDir))
       val biopetFlagstatStrict = BiopetFlagstat(this, biStrict.output, targetDir)
-      add(biopetFlagstatStrict)
       addSummarizable(biopetFlagstatStrict, targetName + "_biopet_flagstat_strict")
+      add(new BiopetFifoPipe(this, List(biStrict, biopetFlagstatStrict)))
 
       val biLoose = BedtoolsIntersect(this, inputBam, intervals.bed,
-        output = new File(targetDir, inputBam.getName.stripSuffix(".bam") + ".overlap.loose.bam"),
+        output = new File(targetDir, inputBam.getName.stripSuffix(".bam") + ".overlap.loose.sam"),
         minOverlap = config("loose_intersect_overlap", default = 0.01))
-      biLoose.isIntermediate = true
-      add(biLoose)
-      add(SamtoolsFlagstat(this, biLoose.output, targetDir))
       val biopetFlagstatLoose = BiopetFlagstat(this, biLoose.output, targetDir)
-      add(biopetFlagstatLoose)
       addSummarizable(biopetFlagstatLoose, targetName + "_biopet_flagstat_loose")
+      add(new BiopetFifoPipe(this, List(biLoose, biopetFlagstatLoose)))
 
-      val coverageFile = new File(targetDir, inputBam.getName.stripSuffix(".bam") + ".coverage")
-
-      val bedCov = BedtoolsCoverage(this, inputBam, intervals.bed, coverageFile, depth = true)
-      val covStats = CoverageStats(this, coverageFile, targetDir)
+      val bedCov = BedtoolsCoverage(this, inputBam, intervals.bed, depth = true)
+      val covStats = CoverageStats(this, targetDir, inputBam.getName.stripSuffix(".bam") + ".coverage")
       covStats.title = Some("Coverage for " + targetName)
       covStats.subTitle = Some(".")
       add(bedCov | covStats)
diff --git a/public/bammetrics/src/main/scala/nl/lumc/sasc/biopet/pipelines/bammetrics/scripts/CoverageStats.scala b/public/bammetrics/src/main/scala/nl/lumc/sasc/biopet/pipelines/bammetrics/scripts/CoverageStats.scala
index 4a4795cf91a498775718f8b58e7fb4ae3b1618a9..a12aced89381468c3e51bdb6dc533af08446eb45 100644
--- a/public/bammetrics/src/main/scala/nl/lumc/sasc/biopet/pipelines/bammetrics/scripts/CoverageStats.scala
+++ b/public/bammetrics/src/main/scala/nl/lumc/sasc/biopet/pipelines/bammetrics/scripts/CoverageStats.scala
@@ -55,11 +55,10 @@ class CoverageStats(val root: Configurable) extends PythonCommandLineFunction wi
 }
 
 object CoverageStats {
-  def apply(root: Configurable, input: File, outputDir: File): CoverageStats = {
+  def apply(root: Configurable, outputDir: File, name: String): CoverageStats = {
     val coverageStats = new CoverageStats(root)
-    coverageStats.input = input
-    coverageStats.output = new File(outputDir, input.getName + ".stats")
-    coverageStats.plot = new File(outputDir, input.getName + ".stats.png")
+    coverageStats.output = new File(outputDir, name + ".stats")
+    coverageStats.plot = new File(outputDir, name + ".stats.png")
     coverageStats
   }
 }
diff --git a/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bedtools/BedtoolsCoverage.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bedtools/BedtoolsCoverage.scala
index efb3c1abe0e0e6aeb6d726b55e18facdda89396f..8b1476857fc244ea1b58fe0bde6b20f1c5c44724 100644
--- a/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bedtools/BedtoolsCoverage.scala
+++ b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bedtools/BedtoolsCoverage.scala
@@ -61,12 +61,12 @@ class BedtoolsCoverage(val root: Configurable) extends Bedtools {
 
 object BedtoolsCoverage {
   /** Returns defaul bedtools coverage */
-  def apply(root: Configurable, input: File, intersect: File, output: File,
+  def apply(root: Configurable, input: File, intersect: File, output: Option[File] = None,
             depth: Boolean = true, sameStrand: Boolean = false, diffStrand: Boolean = false): BedtoolsCoverage = {
     val bedtoolsCoverage = new BedtoolsCoverage(root)
     bedtoolsCoverage.input = input
     bedtoolsCoverage.intersectFile = intersect
-    bedtoolsCoverage.output = output
+    output.foreach(bedtoolsCoverage.output = _)
     bedtoolsCoverage.depth = depth
     bedtoolsCoverage.sameStrand = sameStrand
     bedtoolsCoverage.diffStrand = diffStrand
diff --git a/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bedtools/BedtoolsIntersect.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bedtools/BedtoolsIntersect.scala
index 75f179ad326939d65f01031a4e909c59565e4906..bbd110c88d4d45a516fb8df3c92ff35c7b961284 100644
--- a/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bedtools/BedtoolsIntersect.scala
+++ b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bedtools/BedtoolsIntersect.scala
@@ -40,6 +40,8 @@ class BedtoolsIntersect(val root: Configurable) extends Bedtools {
 
   var inputTag = "-a"
 
+  var ubam = false
+
   override def beforeCmd() {
     if (input.getName.endsWith(".bam")) inputTag = "-abam"
   }
@@ -50,6 +52,7 @@ class BedtoolsIntersect(val root: Configurable) extends Bedtools {
     required("-b", intersectFile) +
     optional("-f", minOverlap) +
     conditional(count, "-c") +
+    conditional(ubam, "-ubam") +
     " > " + required(output)
 }
 
@@ -61,6 +64,7 @@ object BedtoolsIntersect {
     bedtoolsIntersect.input = input
     bedtoolsIntersect.intersectFile = intersect
     bedtoolsIntersect.output = output
+    if (output.getName.endsWith(".sam")) bedtoolsIntersect.ubam = true
     bedtoolsIntersect.minOverlap = minOverlap
     bedtoolsIntersect.count = count
     bedtoolsIntersect