diff --git a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/TopHat.scala b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/Tophat.scala
similarity index 68%
rename from public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/TopHat.scala
rename to public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/Tophat.scala
index ce86a1ed9bd1e8d1afa04867887be2f21cf6231b..7cca2fc1aa21642844687329fd1c30082b19101a 100644
--- a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/TopHat.scala
+++ b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/Tophat.scala
@@ -22,20 +22,28 @@ import nl.lumc.sasc.biopet.core.config.Configurable
 import org.broadinstitute.gatk.utils.commandline.{ Argument, Input, Output }
 
 class TopHat(val root: Configurable) extends BiopetCommandLineFunction {
-  @Input(doc = "FastQ file R1", shortName = "R1")
-  var R1: File = _
 
-  @Input(doc = "FastQ file R2", shortName = "R2", required = false)
-  var R2: File = _
+  @Input(doc = "FastQ file(s) R1", shortName = "R1")
+  var R1: List[File] = List.empty[File]
 
-  @Input(doc = "Bowtie index", shortName = "bti")
-  var bowtie_index: File = config("bowtie_index")
+  @Input(doc = "FastQ file(s) R2", shortName = "R2", required = false)
+  var R2: List[File] = List.empty[File]
 
-  @Argument(doc = "Output Directory")
-  var outputDir: String = _
+  /** output files, computed automatically from output directory */
 
-  @Output(doc = "Output file SAM", shortName = "output")
-  var output: File = _
+  @Output(doc = "Output SAM/BAM file")
+  lazy val outputGtf: File = {
+    require(R1.nonEmpty && output_dir != null,
+      "Read 1 input(s) are defined and output directory is defined")
+    // cufflinks always outputs a transcripts.gtf file in the output directory
+    new File(output_dir, "accepted_hits.bam")
+  }
+
+  @Argument(doc = "Bowtie index", shortName = "bti", required = true)
+  var bowtie_index: String = config("bowtie_index")
+
+  /** write all output files to this directory [./] */
+  var output_dir: File = config("output_dir", default = new File("tophat_out"))
 
   // options set via API or config
   //  var numrecords: String = config("numrecords", default = "all")
@@ -56,25 +64,18 @@ class TopHat(val root: Configurable) extends BiopetCommandLineFunction {
   //  var logfile: String = config("logfile")
 
   executable = config("exe", default = "tophat", freeVar = false)
+
   override val versionRegex = """TopHat v(.*)""".r
   override val versionExitcode = List(0, 1)
+  override def versionCommand = executable + " --version"
 
   override val defaultVmem = "4G"
   override val defaultThreads = 8
 
-  override def versionCommand = executable + " --version"
-
-  override def beforeGraph() {
-    if (!outputDir.endsWith("/")) outputDir += "/"
-    output = new File(outputDir + "accepted_hits.bam")
-  }
+  //override def beforeGraph = {}
 
-  def cmdLine: String = {
-    var cmd: String = required(executable) +
-      optional("-p", nCoresRequest) +
-      "--no-convert-bam" +
-      required(bowtie_index) +
-      required(R1) + optional(R2)
-    return cmd
-  }
+  def cmdLine: String = required(executable) +
+    required(bowtie_index) +
+    required(R1.mkString(",")) +
+    optional(R2.mkString(","))
 }
diff --git a/public/gentrap/src/main/resources/nl/lumc/sasc/biopet/pipelines/gentrap/templates/pdf/img/gentrap_front.png b/public/gentrap/src/main/resources/nl/lumc/sasc/biopet/pipelines/gentrap/templates/pdf/gentrap_front.png
similarity index 100%
rename from public/gentrap/src/main/resources/nl/lumc/sasc/biopet/pipelines/gentrap/templates/pdf/img/gentrap_front.png
rename to public/gentrap/src/main/resources/nl/lumc/sasc/biopet/pipelines/gentrap/templates/pdf/gentrap_front.png
diff --git a/public/gentrap/src/main/scala/nl/lumc/sasc/biopet/pipelines/gentrap/scripts/PdfReportTemplateWriter.scala b/public/gentrap/src/main/scala/nl/lumc/sasc/biopet/pipelines/gentrap/scripts/PdfReportTemplateWriter.scala
index 490b0e4e81b5b3e6226dc1662d8673514cbaaf94..508ce707b6186657e8258d32a2d2d01010407b6b 100644
--- a/public/gentrap/src/main/scala/nl/lumc/sasc/biopet/pipelines/gentrap/scripts/PdfReportTemplateWriter.scala
+++ b/public/gentrap/src/main/scala/nl/lumc/sasc/biopet/pipelines/gentrap/scripts/PdfReportTemplateWriter.scala
@@ -6,9 +6,9 @@
 
 package nl.lumc.sasc.biopet.pipelines.gentrap.scripts
 
-import java.io.File
+import java.io.{ File, FileOutputStream }
 
-import org.apache.commons.io.FileUtils
+import org.apache.commons.io.IOUtils
 import org.broadinstitute.gatk.utils.commandline.{ Input, Output }
 
 import nl.lumc.sasc.biopet.core.config.Configurable
@@ -19,10 +19,6 @@ import nl.lumc.sasc.biopet.extensions.PythonCommandLineFunction
  */
 class PdfReportTemplateWriter(val root: Configurable) extends PythonCommandLineFunction {
 
-  val templateResDir: File = new File(getClass.getResource("/nl/lumc/sasc/biopet/pipelines/gentrap/templates/pdf").toURI)
-  val templateWorkDir: File = new File(".queue/tmp/nl/lumc/sasc/biopet/pipelines/gentrap/templates/pdf")
-  val imgWorkDir: File = new File(templateWorkDir, "img")
-
   @Input(doc = "Input summary file", required = true)
   var summaryFile: File = null
 
@@ -30,13 +26,34 @@ class PdfReportTemplateWriter(val root: Configurable) extends PythonCommandLineF
   def mainTemplateFile: File = new File(templateWorkDir, "main.tex")
 
   @Input(doc = "Main report logo", required = true) // def since we hard-code the logo
-  def logoFile: File = new File(imgWorkDir, "gentrap_front.png")
+  def logoFile: File = new File(templateWorkDir, "gentrap_front.png")
 
   @Output(doc = "Output file", required = true)
   var output: File = null
 
-  protected def prepTemplate(): Unit = {
-    FileUtils.copyDirectory(templateResDir, templateWorkDir)
+  val templateWorkDir: File = new File(".queue/tmp/nl/lumc/sasc/biopet/pipelines/gentrap/templates/pdf")
+  val templateFiles: Seq[String] = Seq(
+    "main.tex", "gentrap_front.png",
+    "sample.tex", "sample_mapping.tex",
+    "lib.tex", "lib_seqeval.tex", "lib_mapping.tex"
+  )
+
+  protected def prepTemplate(name: String,
+                             subPackage: String = "/nl/lumc/sasc/biopet/pipelines/gentrap/templates/pdf"): Unit = {
+    val target = new File(".queue/tmp" + subPackage, name)
+    if (!target.getParentFile.exists) target.getParentFile.mkdirs()
+    val is = getClass.getResourceAsStream(subPackage + "/" + name)
+    val os = new FileOutputStream(target)
+    org.apache.commons.io.IOUtils.copy(is, os)
+    os.close()
+
+    //python_script_name = script
+    //python_script = new File(".queue/tmp/" + subpackage + python_script_name)
+    //if (!python_script.getParentFile.exists) python_script.getParentFile.mkdirs
+    //val is = getClass.getResourceAsStream(subpackage + python_script_name)
+    //val os = new FileOutputStream(python_script)
+    //org.apache.commons.io.IOUtils.copy(is, os)
+    //os.close()
   }
 
   def cmdLine = {
@@ -48,5 +65,5 @@ class PdfReportTemplateWriter(val root: Configurable) extends PythonCommandLineF
   }
 
   setPythonScript("pdf_report.py")
-  prepTemplate()
+  templateFiles.foreach(t => prepTemplate(t))
 }