diff --git a/docs/pipelines/shiva.md b/docs/pipelines/shiva.md
index 011bd1e7e046e9a90e48c8a743c4024289e7592f..ead5f91acca3309831b4c00c56a3e17e3127d431 100644
--- a/docs/pipelines/shiva.md
+++ b/docs/pipelines/shiva.md
@@ -135,6 +135,17 @@ To view all possible config options please navigate to our Gitlab wiki page
 Since Shiva uses the [Mapping](mapping.md) pipeline internally, mapping config values can be specified as well.
 For all the options, please see the corresponding documentation for the mapping pipeline.
 
+### Exome variant calling
+
+If one calls variants with Shiva on exome samples and a ```amplicon_bed``` file is available, the user is able to add this file to the config file.
+ When the file is given, the coverage over the positions in the bed file will be calculated plus the number of variants on each position. If there is an interest
+ in a specific region of the genome/exome one is capable to give multiple ```regionOfInterest.bed``` files with the option ```regions_of_interest``` (in list/array format).
+ 
+ A short recap: the option ```amplicon_bed``` can only be given one time and should be composed of the amplicon kit used to obtain the exome data.
+ The option ```regions_of_interest``` can contain multiple bed files in ```list``` format and can contain any region a user wants. If multiple regions are given,
+ the pipeline will make an coverage plot over each bed file separately. 
+ 
+
 ### Modes
 
 Shiva furthermore supports three modes. The default and recommended option is `multisample_variantcalling`.
diff --git a/public/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/BiopetCommandLineFunction.scala b/public/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/BiopetCommandLineFunction.scala
index c0046d0535ccb5c429b2fa8b5707868c74f71f41..a413c8bad83199c38a1b156a67118d2e7262b50c 100644
--- a/public/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/BiopetCommandLineFunction.scala
+++ b/public/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/BiopetCommandLineFunction.scala
@@ -83,13 +83,14 @@ trait BiopetCommandLineFunction extends CommandLineResources { biopetFunction =>
   /** Set default output file, threads and vmem for current job */
   final def internalBeforeGraph(): Unit = {
 
-    pipesJobs.foreach(_.beforeGraph())
-    pipesJobs.foreach(_.internalBeforeGraph())
+    _pipesJobs.foreach(_.beforeGraph())
+    _pipesJobs.foreach(_.internalBeforeGraph())
 
   }
 
   /**
    * Can override this value is executable may not be converted to CanonicalPath
+   *
    * @deprecated
    */
   val executableToCanonicalPath = true
@@ -121,6 +122,7 @@ trait BiopetCommandLineFunction extends CommandLineResources { biopetFunction =>
 
   /**
    * This operator sends stdout to `that` and combine this into 1 command line function
+   *
    * @param that Function that will read from stdin
    * @return BiopetPipe function
    */
@@ -141,6 +143,7 @@ trait BiopetCommandLineFunction extends CommandLineResources { biopetFunction =>
 
   /**
    * This operator can be used to give a program a file as stdin
+   *
    * @param file File that will become stdin for this program
    * @return It's own class
    */
@@ -152,6 +155,7 @@ trait BiopetCommandLineFunction extends CommandLineResources { biopetFunction =>
 
   /**
    * This operator can be used to give a program a file write it's atdout
+   *
    * @param file File that will become stdout for this program
    * @return It's own class
    */
@@ -169,6 +173,7 @@ trait BiopetCommandLineFunction extends CommandLineResources { biopetFunction =>
 
   /**
    * This function needs to be implemented to define the command that is executed
+   *
    * @return Command to run
    */
   protected[core] def cmdLine: String
@@ -176,6 +181,7 @@ trait BiopetCommandLineFunction extends CommandLineResources { biopetFunction =>
   /**
    * implementing a final version of the commandLine from org.broadinstitute.gatk.queue.function.CommandLineFunction
    * User needs to implement cmdLine instead
+   *
    * @return Command to run
    */
   override final def commandLine: String = {
@@ -187,10 +193,11 @@ trait BiopetCommandLineFunction extends CommandLineResources { biopetFunction =>
     cmd
   }
 
-  private[core] var pipesJobs: List[BiopetCommandLineFunction] = Nil
+  private[core] var _pipesJobs: List[BiopetCommandLineFunction] = Nil
+  def pipesJobs = _pipesJobs
   def addPipeJob(job: BiopetCommandLineFunction) {
-    pipesJobs :+= job
-    pipesJobs = pipesJobs.distinct
+    _pipesJobs :+= job
+    _pipesJobs = _pipesJobs.distinct
   }
 }
 
diff --git a/public/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/BiopetFifoPipe.scala b/public/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/BiopetFifoPipe.scala
index 8b4f1f801681f8ead4a58e2e02264acf8680c57d..287064130a8a055b7457a2e583517c8e60a1b5df 100644
--- a/public/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/BiopetFifoPipe.scala
+++ b/public/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/BiopetFifoPipe.scala
@@ -67,8 +67,8 @@ class BiopetFifoPipe(val root: Configurable,
     deps :::= inputs.values.toList.flatten.filter(!fifoFiles.contains(_))
     deps = deps.distinct
 
-    pipesJobs :::= commands
-    pipesJobs = pipesJobs.distinct
+    _pipesJobs :::= commands
+    _pipesJobs = _pipesJobs.distinct
   }
 
   override def beforeCmd(): Unit = {
diff --git a/public/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/BiopetPipe.scala b/public/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/BiopetPipe.scala
index f7be2d57f1c3cb6a724a9c89acb51592f8045432..af98f00969a0c0b0b77c59db903f7b3346ce3274 100644
--- a/public/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/BiopetPipe.scala
+++ b/public/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/BiopetPipe.scala
@@ -41,7 +41,7 @@ class BiopetPipe(val commands: List[BiopetCommandLineFunction]) extends BiopetCo
     case e: Exception => Nil
   }
 
-  pipesJobs :::= commands
+  _pipesJobs :::= commands
 
   override def beforeGraph() {
     super.beforeGraph()
@@ -61,7 +61,7 @@ class BiopetPipe(val commands: List[BiopetCommandLineFunction]) extends BiopetCo
   }
 
   override def setResources(): Unit = {
-    combineResources(pipesJobs)
+    combineResources(_pipesJobs)
   }
 
   override def setupRetry(): Unit = {
diff --git a/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Freebayes.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Freebayes.scala
index f2a387a08b50e37f44dcb21911acff65bab808c3..3cf3b47d5c598644154c363a2b036423c49c048e 100644
--- a/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Freebayes.scala
+++ b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Freebayes.scala
@@ -37,7 +37,92 @@ class Freebayes(val root: Configurable) extends BiopetCommandLineFunction with R
   @Output(required = true)
   var outputVcf: File = null
 
+  @Input(required = false)
+  var bam_list: Option[File] = config("bam_list")
+
+  @Input(required = false)
+  var targets: Option[File] = config("targets")
+
+  @Input(required = false)
+  var samples: Option[File] = config("samples")
+
+  @Input(required = false)
+  var populations: Option[File] = config("populations")
+
+  @Input(required = false)
+  var cnv_map: Option[File] = config("cnv_map")
+
+  @Input(required = false)
+  var trace: Option[File] = config("trace")
+
+  @Input(required = false)
+  var failed_alleles: Option[File] = config("failed_alleles")
+
+  @Input(required = false)
+  var observation_bias: Option[File] = config("observation_bias")
+
+  @Input(required = false)
+  var contamination_estimates: Option[File] = config("contamination_estimates")
+
+  @Input(required = false)
+  var variant_input: Option[File] = config("variant_input")
+
+  @Input(required = false)
+  var haplotype_basis_alleles: Option[File] = config("haplotype_basis_alleles")
+
+  var pvar: Option[Int] = config("pvar")
+  var theta: Option[Int] = config("theta")
   var ploidy: Option[Int] = config("ploidy")
+  var use_best_n_alleles: Option[Int] = config("use_best_n_alleles")
+  var max_complex_gap: Option[Int] = config("max_complex_gap")
+  var min_repeat_size: Option[Int] = config("min_repeat_size")
+  var min_repeat_entropy: Option[Int] = config("min_repeat_entropy")
+  var read_mismatch_limit: Option[Int] = config("read_mismatch_limit")
+  var read_max_mismatch_fraction: Option[Int] = config("read_max_mismatch_fraction")
+  var read_snp_limit: Option[Int] = config("read_snp_limit")
+  var read_indel_limit: Option[Int] = config("read_indel_limit")
+  var min_alternate_fraction: Option[Double] = config("min_alternate_fraction")
+  var min_alternate_count: Option[Int] = config("min_alternate_count")
+  var min_alternate_qsum: Option[Int] = config("min_alternate_qsum")
+  var min_alternate_total: Option[Int] = config("min_alternate_total")
+  var min_coverage: Option[Int] = config("min_coverage")
+  var genotyping_max_iterations: Option[Int] = config("genotyping_max_iterations")
+  var genotyping_max_banddepth: Option[Int] = config("genotyping_max_banddepth")
+  var genotype_variant_threshold: Option[Int] = config("genotype_variant_threshold")
+  var read_dependence_factor: Option[Int] = config("read_dependence_factor")
+  var min_mapping_quality: Option[Double] = config("min_mapping_quality")
+  var min_base_quality: Option[Double] = config("min_base_quality")
+  var min_supporting_allele_qsum: Option[Double] = config("min_supporting_allele_qsum")
+  var min_supporting_mapping_qsum: Option[Double] = config("min_supporting_mapping_qsum")
+  var mismatch_base_quality_threshold: Option[Double] = config("mismatch_base_quality_threshold")
+  var base_quality_cap: Option[Double] = config("base_quality_cap")
+  var prob_contamination: Option[Double] = config("prob_contamination")
+  var only_use_input_alleles: Boolean = config("only_use_input_alleles", default = false)
+  var report_all_haplotype_alleles: Boolean = config("report_all_haplotype_alleles", default = false)
+  var report_monomorphic: Boolean = config("report_monomorphic", default = false)
+  var pooled_discrete: Boolean = config("pooled_discrete", default = false)
+  var pooled_continuous: Boolean = config("pooled_continuous", default = false)
+  var use_reference_allele: Boolean = config("use_reference_allele", default = false)
+  var no_snps: Boolean = config("no_snps", default = false)
+  var no_indels: Boolean = config("no_indels", default = false)
+  var no_mnps: Boolean = config("no_mnps", default = false)
+  var no_complex: Boolean = config("no_complex", default = false)
+  var no_partial_observations: Boolean = config("no_partial_observations", default = false)
+  var dont_left_align_indels: Boolean = config("dont_left_align_indels", default = false)
+  var use_duplicate_reads: Boolean = config("use_duplicate_reads", default = false)
+  var standard_filters: Boolean = config("standard_filters", default = false)
+  var no_population_priors: Boolean = config("no_population_priors", default = false)
+  var hwe_priors_off: Boolean = config("hwe_priors_off", default = false)
+  var binomial_obs_priors_off: Boolean = config("binomial_obs_priors_off", default = false)
+  var allele_balance_priors_off: Boolean = config("allele_balance_priors_off", default = false)
+  var legacy_gls: Boolean = config("legacy_gls", default = false)
+  var report_genotype_likelihood_max: Boolean = config("report_genotype_likelihood_max", default = false)
+  var exclude_unobserved_genotypes: Boolean = config("exclude_unobserved_genotypes", default = false)
+  var use_mapping_quality: Boolean = config("use_mapping_quality", default = false)
+  var harmonic_indel_quality: Boolean = config("harmonic_indel_quality", default = false)
+  var genotype_qualities: Boolean = config("genotype_qualities", default = false)
+  var debug: Boolean = config("debug", default = logger.isDebugEnabled)
+
   var haplotypeLength: Option[Int] = config("haplotype_length")
 
   executable = config("exe", default = "freebayes")
@@ -52,7 +137,70 @@ class Freebayes(val root: Configurable) extends BiopetCommandLineFunction with R
   def cmdLine = executable +
     required("--fasta-reference", reference) +
     repeat("--bam", bamfiles) +
-    optional("--vcf", outputVcf) +
+    optional("--bam-list", bam_list) +
+    optional("--targets", targets) +
+    optional("--samples", samples) +
+    optional("--populations", populations) +
+    optional("--cnv-map", cnv_map) +
+    optional("--trace", trace) +
+    optional("--failed-alleles", failed_alleles) +
+    optional("--observation-bias", observation_bias) +
+    optional("--contamination-estimates", contamination_estimates) +
+    optional("--variant-input", variant_input) +
+    optional("--haplotype-basis-alleles", haplotype_basis_alleles) +
+    optional("--pvar", pvar) +
+    optional("--theta", theta) +
     optional("--ploidy", ploidy) +
-    optional("--haplotype-length", haplotypeLength)
+    optional("--use-best-n-alleles", use_best_n_alleles) +
+    optional("--max-complex-gap", max_complex_gap) +
+    optional("--min-repeat-size", min_repeat_size) +
+    optional("--min-repeat-entropy", min_repeat_entropy) +
+    optional("--read-mismatch-limit", read_mismatch_limit) +
+    optional("--read-max-mismatch-fraction", read_max_mismatch_fraction) +
+    optional("--read-snp-limit", read_snp_limit) +
+    optional("--read-indel-limit", read_indel_limit) +
+    optional("--min-alternate-fraction", min_alternate_fraction) +
+    optional("--min-alternate-count", min_alternate_count) +
+    optional("--min-alternate-qsum", min_alternate_qsum) +
+    optional("--min-alternate-total", min_alternate_total) +
+    optional("--min-coverage", min_coverage) +
+    optional("--genotyping-max-iterations", genotyping_max_iterations) +
+    optional("--genotyping-max-banddepth", genotyping_max_banddepth) +
+    optional("--genotype-variant-threshold", genotype_variant_threshold) +
+    optional("--read-dependence-factor", read_dependence_factor) +
+    optional("--min-mapping-quality", min_mapping_quality) +
+    optional("--min-base-quality", min_base_quality) +
+    optional("--min-supporting-allele-qsum", min_supporting_allele_qsum) +
+    optional("--min-supporting-mapping-qsum", min_supporting_mapping_qsum) +
+    optional("--mismatch-base-quality-threshold", mismatch_base_quality_threshold) +
+    optional("--base-quality-cap", base_quality_cap) +
+    optional("--prob-contamination", prob_contamination) +
+    conditional(only_use_input_alleles, "--only-use-input-alleles") +
+    conditional(report_all_haplotype_alleles, "--report-all-haplotype-alleles") +
+    conditional(report_monomorphic, "--report-monomorphic") +
+    conditional(pooled_discrete, "--pooled-discrete") +
+    conditional(pooled_continuous, "--pooled-continuous") +
+    conditional(use_reference_allele, "--use-reference-allele") +
+    conditional(no_snps, "--no-snps") +
+    conditional(no_indels, "--no-indels") +
+    conditional(no_mnps, "--no-mnps") +
+    conditional(no_complex, "--no-complex") +
+    conditional(no_partial_observations, "--no-partial-observations") +
+    conditional(dont_left_align_indels, "--dont-left-align-indels") +
+    conditional(use_duplicate_reads, "--use-duplicate-reads") +
+    conditional(standard_filters, "--standard-filters") +
+    conditional(no_population_priors, "--no-population-priors") +
+    conditional(hwe_priors_off, "--hwe-priors-off") +
+    conditional(binomial_obs_priors_off, "--binomial-obs-priors-off") +
+    conditional(allele_balance_priors_off, "--allele-balance-priors-off") +
+    conditional(legacy_gls, "--legacy-gls") +
+    conditional(report_genotype_likelihood_max, "--report-genotype-likelihood-max") +
+    conditional(exclude_unobserved_genotypes, "--exclude-unobserved-genotypes") +
+    conditional(use_mapping_quality, "--use-mapping-quality") +
+    conditional(harmonic_indel_quality, "--harmonic-indel-quality") +
+    conditional(genotype_qualities, "--genotype-qualities") +
+    conditional(debug, "--debug") +
+    optional("--haplotype-length", haplotypeLength) +
+    (if (inputAsStdin) required("--stdin") else "") +
+    (if (outputAsStsout) "" else optional("--vcf", outputVcf))
 }
diff --git a/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/VariantEffectPredictor.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/VariantEffectPredictor.scala
index c5c0a0446926c8a0da19ecbaea4755662c79087f..9cc29dc4440faa7005b504a39697a3dfe5e05f2a 100644
--- a/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/VariantEffectPredictor.scala
+++ b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/VariantEffectPredictor.scala
@@ -148,6 +148,8 @@ class VariantEffectPredictor(val root: Configurable) extends BiopetCommandLineFu
   // ought to be a flag, but is BUG in VEP; becomes numeric ("1" is true)
   var failed: Option[Int] = config("failed")
 
+  override def defaultCoreMemory = 4.0
+
   override def beforeGraph(): Unit = {
     super.beforeGraph()
     if (!cache && !database) {
@@ -155,6 +157,7 @@ class VariantEffectPredictor(val root: Configurable) extends BiopetCommandLineFu
     } else if (cache && dir.isEmpty) {
       Logging.addError("Must supply dir to cache for VariantEffectPredictor")
     }
+    if (stats_text) outputFiles :+= new File(output.getAbsolutePath + "_summary.txt")
   }
 
   /** Returns command to execute */
diff --git a/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bowtie/Bowtie2.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bowtie/Bowtie2.scala
index 2ebce9331ec32c152695c1dac4adea618040b7b1..0a8310fd28f8c2d51500c800a2704fe34011ef38 100644
--- a/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bowtie/Bowtie2.scala
+++ b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bowtie/Bowtie2.scala
@@ -135,7 +135,12 @@ class Bowtie2(val root: Configurable) extends BiopetCommandLineFunction with Ref
     val indexDir = new File(bowtieIndex).getParentFile
     val basename = bowtieIndex.stripPrefix(indexDir.getPath + File.separator)
     if (indexDir.exists()) {
-      if (!indexDir.list().toList.filter(_.startsWith(basename)).exists(_.endsWith(".bt2")))
+      if (!indexDir.list()
+        .toList
+        .filter(_.startsWith(basename))
+        .exists({ p =>
+          p.endsWith(".bt2") || p.endsWith(".bt2l")
+        }))
         Logging.addError(s"No index files found for bowtie2 in: $indexDir with basename: $basename")
     }
   }
diff --git a/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/kraken/Kraken.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/kraken/Kraken.scala
index f8623c82ffd15079a319de3ffaced92aed55c4cf..99f2621ee36e22e208feff99892ac6dfd2fb57f5 100644
--- a/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/kraken/Kraken.scala
+++ b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/kraken/Kraken.scala
@@ -53,7 +53,7 @@ class Kraken(val root: Configurable) extends BiopetCommandLineFunction with Vers
 
   def versionCommand = executable + " --version"
 
-  override def defaultCoreMemory = 15.0
+  override def defaultCoreMemory = 17.0
 
   override def defaultThreads = 4
 
diff --git a/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/qiime/PickClosedReferenceOtus.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/qiime/PickClosedReferenceOtus.scala
index d0ddad3afa35e043670cf71e6050ee8224e2d8ae..1c52fe148d10bb4dc1796bc83752caba95c270fb 100644
--- a/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/qiime/PickClosedReferenceOtus.scala
+++ b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/qiime/PickClosedReferenceOtus.scala
@@ -17,8 +17,8 @@ class PickClosedReferenceOtus(val root: Configurable) extends BiopetCommandLineF
 
   var outputDir: File = null
 
-  override def defaultThreads = 2
-  override def defaultCoreMemory = 10.0
+  override def defaultThreads = 3
+  override def defaultCoreMemory = 12.0
   def versionCommand = executable + " --version"
   def versionRegex = """Version: (.*)""".r
 
diff --git a/public/flexiprep/src/main/resources/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepFastaqcPlot.ssp b/public/flexiprep/src/main/resources/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepFastQcPlot.ssp
similarity index 74%
rename from public/flexiprep/src/main/resources/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepFastaqcPlot.ssp
rename to public/flexiprep/src/main/resources/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepFastQcPlot.ssp
index 8ca3f81e493799d8de488c3e333ca8cc3114268e..f8dd3e533d3ff2eacb2420af05efeee136acf090 100644
--- a/public/flexiprep/src/main/resources/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepFastaqcPlot.ssp
+++ b/public/flexiprep/src/main/resources/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepFastQcPlot.ssp
@@ -14,14 +14,19 @@
 
     def getPlot(read:String) = {
         summary.getLibraryValue(sampleId.get, libId.get, "flexiprep", "files", read, plot, "path").collect {
-            case value => {
-                val file = new File(value.toString)
+            case path => {
+                val file = new File(path.toString)
                 val newFile = new File(outputDir, read + "_" + file.getName)
                 if (file.exists()) FileUtils.copyFile(file, newFile)
                 newFile.getName
             }
         }
     }
+
+    def plotAvailable(read:String) = {
+        new File(summary.getLibraryValue(sampleId.get, libId.get, "flexiprep", "files", read, plot, "path").get.toString).exists()
+    }
+
 }#
 
 <div class="row">
@@ -32,11 +37,19 @@
 <div class="row">
     <div class="col-md-1"><b>R1</b></div>
     <div class="col-md-5">
+    #if (plotAvailable( "fastqc_R1" ))
         <img class="img-responsive" src="${getPlot("fastqc_R1")}" />
+    #else
+        Image was not generated by FastQC
+    #end
     </div>
     #if (!skipTrim || !skipClip)
     <div class="col-md-5">
+    #if (plotAvailable( "fastqc_R1_qc" ))
         <img class="img-responsive" src="${getPlot("fastqc_R1_qc")}" />
+    #else
+        Image was not generated by FastQC
+    #end
     </div>
      #end
 </div>
@@ -44,11 +57,19 @@
     <div class="row">
         <div class="col-md-1"><b>R2</b></div>
         <div class="col-md-5">
+        #if (plotAvailable( "fastqc_R2" ))
             <img class="img-responsive" src="${getPlot("fastqc_R2")}" />
+        #else
+            Image was not generated by FastQC
+        #end
         </div>
         #if (!skipTrim || !skipClip)
         <div class="col-md-5">
+        #if (plotAvailable( "fastqc_R2_qc" ))
             <img class="img-responsive" src="${getPlot("fastqc_R2_qc")}" />
+        #else
+            Image was not generated by FastQC
+        #end
         </div>
          #end
     </div>
diff --git a/public/flexiprep/src/main/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/FlexiprepReport.scala b/public/flexiprep/src/main/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/FlexiprepReport.scala
index c715f1338e944bd560b6c2103615e620398b88fc..83b78b657cdeed9e8110109c50abd7fdaafe6c00 100644
--- a/public/flexiprep/src/main/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/FlexiprepReport.scala
+++ b/public/flexiprep/src/main/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/FlexiprepReport.scala
@@ -62,7 +62,7 @@ object FlexiprepReport extends ReportBuilder {
       fastqcPlotSection("Sequence quality", "plot_per_sequence_quality"),
       fastqcPlotSection("Base GC content", "plot_per_base_gc_content"),
       fastqcPlotSection("Sequence GC content", "plot_per_sequence_gc_content"),
-      fastqcPlotSection("Base seqeunce content", "plot_per_base_sequence_content"),
+      fastqcPlotSection("Base sequence content", "plot_per_base_sequence_content"),
       fastqcPlotSection("Duplication", "plot_duplication_levels"),
       fastqcPlotSection("Kmers", "plot_kmer_profiles"),
       fastqcPlotSection("Length distribution", "plot_sequence_length_distribution")
@@ -71,7 +71,7 @@ object FlexiprepReport extends ReportBuilder {
   )
 
   protected def fastqcPlotSection(name: String, tag: String) = {
-    name -> ReportSection("/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepFastaqcPlot.ssp", Map("plot" -> tag))
+    name -> ReportSection("/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepFastQcPlot.ssp", Map("plot" -> tag))
   }
 
   /**
diff --git a/public/shiva/src/main/scala/nl/lumc/sasc/biopet/pipelines/shiva/variantcallers/Freebayes.scala b/public/shiva/src/main/scala/nl/lumc/sasc/biopet/pipelines/shiva/variantcallers/Freebayes.scala
index 3227c2dc2fc845fdeb18f3915ae4c692369fdcca..d276abc7c940b3c70e589b3888b544dc4d19a490 100644
--- a/public/shiva/src/main/scala/nl/lumc/sasc/biopet/pipelines/shiva/variantcallers/Freebayes.scala
+++ b/public/shiva/src/main/scala/nl/lumc/sasc/biopet/pipelines/shiva/variantcallers/Freebayes.scala
@@ -14,15 +14,8 @@ class Freebayes(val root: Configurable) extends Variantcaller {
     val fb = new nl.lumc.sasc.biopet.extensions.Freebayes(this)
     fb.bamfiles = inputBams.values.toList
     fb.outputVcf = new File(outputDir, namePrefix + ".freebayes.vcf")
-    fb.isIntermediate = true
-    add(fb)
+    add(fb | new Bgzip(this) > outputFile)
 
-    //TODO: need piping for this, see also issue #114
-    val bz = new Bgzip(this)
-    bz.input = List(fb.outputVcf)
-    bz.output = outputFile
-    add(bz)
-
-    add(Tabix.apply(this, bz.output))
+    add(Tabix.apply(this, outputFile))
   }
 }
diff --git a/public/shiva/src/test/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaVariantcallingTest.scala b/public/shiva/src/test/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaVariantcallingTest.scala
index 44c3d60cf762325cbbbe8207b9b7a977a0398791..b1699c7b97132b1df20c88d49c6202164fa89227 100644
--- a/public/shiva/src/test/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaVariantcallingTest.scala
+++ b/public/shiva/src/test/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaVariantcallingTest.scala
@@ -18,16 +18,17 @@ package nl.lumc.sasc.biopet.pipelines.shiva
 import java.io.{ File, FileOutputStream }
 
 import com.google.common.io.Files
-import nl.lumc.sasc.biopet.utils.config.Config
+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
-import nl.lumc.sasc.biopet.extensions.tools.VcfFilter
+import nl.lumc.sasc.biopet.extensions.tools.{ MpileupToVcf, VcfFilter }
 import nl.lumc.sasc.biopet.utils.ConfigUtils
-import org.apache.commons.io.FileUtils
+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.{ AfterClass, DataProvider, Test }
+import org.testng.annotations.{ DataProvider, Test }
 
 import scala.collection.mutable.ListBuffer
 
@@ -88,11 +89,13 @@ class ShivaVariantcallingTest extends TestNGSuite with Matchers {
       pipeline.init()
       pipeline.script()
 
+      val pipesJobs = pipeline.functions.filter(_.isInstanceOf[BiopetPipe]).flatMap(_.asInstanceOf[BiopetPipe].pipesJobs)
+
       pipeline.functions.count(_.isInstanceOf[CombineVariants]) shouldBe (1 + (if (raw) 1 else 0) + (if (varscanCnsSinglesample) 1 else 0))
-      //pipeline.functions.count(_.isInstanceOf[Bcftools]) shouldBe (if (bcftools) 1 else 0)
-      //FIXME: Can not check for bcftools because of piping
-      pipeline.functions.count(_.isInstanceOf[Freebayes]) shouldBe (if (freebayes) 1 else 0)
-      //pipeline.functions.count(_.isInstanceOf[MpileupToVcf]) shouldBe (if (raw) bams else 0)
+      pipesJobs.count(_.isInstanceOf[BcftoolsCall]) shouldBe (if (bcftools) 1 else 0) + (if (bcftoolsSinglesample) bams else 0)
+      pipeline.functions.count(_.isInstanceOf[BcftoolsMerge]) shouldBe (if (bcftoolsSinglesample && bams > 1) 1 else 0)
+      pipesJobs.count(_.isInstanceOf[Freebayes]) shouldBe (if (freebayes) 1 else 0)
+      pipesJobs.count(_.isInstanceOf[MpileupToVcf]) shouldBe (if (raw) bams else 0)
       pipeline.functions.count(_.isInstanceOf[VcfFilter]) shouldBe (if (raw) bams else 0)
     }
   }