diff --git a/.gitattributes b/.gitattributes
index 07a4a56143d25a23ce6ab0320d147c3096caa5f6..574339b69b82d0008d4b3ffd2e7398ad5d82ed6d 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -32,4 +32,16 @@ runs/kallisto_sleuth/sleuth_dge.csv filter=lfs diff=lfs merge=lfs -text
 studies/TalinumGenomeDraft/resources/Talinum.gm.CDS.nt.fa filter=lfs diff=lfs merge=lfs -text
 runs/sleuth/kallisto_sleuthObject.RData filter=lfs diff=lfs merge=lfs -text
 runs/sleuth/out/kallisto_sleuthObject.RData filter=lfs diff=lfs merge=lfs -text
-runs/kallisto/kallisto_results/** filter=lfs diff=lfs merge=lfs -text
\ No newline at end of file
+runs/kallisto/kallisto_results/** filter=lfs diff=lfs merge=lfs -text
+runs/fastqc/results/DB_097_CAMMD_CAGATC_L001_R1_001_fastqc.zip filter=lfs diff=lfs merge=lfs -text
+runs/fastqc/results/DB_163_reC3MD_GTGAAA_L001_R1_001_fastqc.html filter=lfs diff=lfs merge=lfs -text
+runs/fastqc/results/DB_097_CAMMD_CAGATC_L001_R1_001_fastqc.html filter=lfs diff=lfs merge=lfs -text
+runs/fastqc/results/DB_099_CAMMD_CTTGTA_L001_R1_001_fastqc.html filter=lfs diff=lfs merge=lfs -text
+runs/fastqc/results/DB_099_CAMMD_CTTGTA_L001_R1_001_fastqc.zip filter=lfs diff=lfs merge=lfs -text
+runs/fastqc/results/DB_103_CAMMD_AGTCAA_L001_R1_001_fastqc.html filter=lfs diff=lfs merge=lfs -text
+runs/fastqc/results/DB_103_CAMMD_AGTCAA_L001_R1_001_fastqc.zip filter=lfs diff=lfs merge=lfs -text
+runs/fastqc/results/DB_161_reC3MD_GTCCGC_L001_R1_001_fastqc.html filter=lfs diff=lfs merge=lfs -text
+runs/fastqc/results/DB_161_reC3MD_GTCCGC_L001_R1_001_fastqc.zip filter=lfs diff=lfs merge=lfs -text
+runs/fastqc/results/DB_163_reC3MD_GTGAAA_L001_R1_001_fastqc.zip filter=lfs diff=lfs merge=lfs -text
+runs/fastqc/results/DB_165_re-C3MD_GTGAAA_L002_R1_001_fastqc.html filter=lfs diff=lfs merge=lfs -text
+runs/fastqc/results/DB_165_re-C3MD_GTGAAA_L002_R1_001_fastqc.zip filter=lfs diff=lfs merge=lfs -text
diff --git a/assays/Talinum_RNASeq_minimal/dataset/.gitkeep b/assays/Talinum_RNASeq_minimal/dataset/.gitkeep
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/runs/fastqc/results/DB_097_CAMMD_CAGATC_L001_R1_001_fastqc.html b/runs/fastqc/results/DB_097_CAMMD_CAGATC_L001_R1_001_fastqc.html
new file mode 100644
index 0000000000000000000000000000000000000000..51bd550d5177f5d8001e285b9e3b186f22a7206a
--- /dev/null
+++ b/runs/fastqc/results/DB_097_CAMMD_CAGATC_L001_R1_001_fastqc.html
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:496b053b05cdbff7213e1ce93e168c9aae01830b875ba4f140f0445add3a4c9d
+size 608772
diff --git a/runs/fastqc/results/DB_097_CAMMD_CAGATC_L001_R1_001_fastqc.zip b/runs/fastqc/results/DB_097_CAMMD_CAGATC_L001_R1_001_fastqc.zip
new file mode 100644
index 0000000000000000000000000000000000000000..9cf6ee9b211654b1618a018cfd9d8328430bb381
--- /dev/null
+++ b/runs/fastqc/results/DB_097_CAMMD_CAGATC_L001_R1_001_fastqc.zip
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:453098e0f3046efe2317023867e5859e92ee91b254da02f4c84c6a569a12c358
+size 423523
diff --git a/runs/fastqc/results/DB_099_CAMMD_CTTGTA_L001_R1_001_fastqc.html b/runs/fastqc/results/DB_099_CAMMD_CTTGTA_L001_R1_001_fastqc.html
new file mode 100644
index 0000000000000000000000000000000000000000..141b06f5d05da67b23731dd73f70df429c516163
--- /dev/null
+++ b/runs/fastqc/results/DB_099_CAMMD_CTTGTA_L001_R1_001_fastqc.html
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6d20c29bba7d056d66f6a6516c4d1044cdb26184971499eb8814de46ebcbaf6c
+size 610809
diff --git a/runs/fastqc/results/DB_099_CAMMD_CTTGTA_L001_R1_001_fastqc.zip b/runs/fastqc/results/DB_099_CAMMD_CTTGTA_L001_R1_001_fastqc.zip
new file mode 100644
index 0000000000000000000000000000000000000000..3424223ad1bc8913bfc56dfbc320daeea46c538e
--- /dev/null
+++ b/runs/fastqc/results/DB_099_CAMMD_CTTGTA_L001_R1_001_fastqc.zip
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c51133d51ff8d98ddaf9df5373e5dc832a66de48b603fc1fca788b75fc9314f8
+size 425882
diff --git a/runs/fastqc/results/DB_103_CAMMD_AGTCAA_L001_R1_001_fastqc.html b/runs/fastqc/results/DB_103_CAMMD_AGTCAA_L001_R1_001_fastqc.html
new file mode 100644
index 0000000000000000000000000000000000000000..1bbad97077bfab908d6766c70e34915a5988f5e7
--- /dev/null
+++ b/runs/fastqc/results/DB_103_CAMMD_AGTCAA_L001_R1_001_fastqc.html
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:462d62cb603020068aff4606f26b62d818d2bfb56eb1894dc993638a5763c7ae
+size 611722
diff --git a/runs/fastqc/results/DB_103_CAMMD_AGTCAA_L001_R1_001_fastqc.zip b/runs/fastqc/results/DB_103_CAMMD_AGTCAA_L001_R1_001_fastqc.zip
new file mode 100644
index 0000000000000000000000000000000000000000..3ebe7614ff4e82ecc20df2d88ff803c94f888c8e
--- /dev/null
+++ b/runs/fastqc/results/DB_103_CAMMD_AGTCAA_L001_R1_001_fastqc.zip
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6e7d78a994d307c6a57adbb4b41d22207d0ae7ebf2ace568f9fbe70aa606da03
+size 424835
diff --git a/runs/fastqc/results/DB_161_reC3MD_GTCCGC_L001_R1_001_fastqc.html b/runs/fastqc/results/DB_161_reC3MD_GTCCGC_L001_R1_001_fastqc.html
new file mode 100644
index 0000000000000000000000000000000000000000..25b6a558790028b0b6654d8cc85efe226691ea9f
--- /dev/null
+++ b/runs/fastqc/results/DB_161_reC3MD_GTCCGC_L001_R1_001_fastqc.html
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9e689e4f749d29fff8ec52ada03471255579e43f04e49191bb8b19896348e576
+size 608061
diff --git a/runs/fastqc/results/DB_161_reC3MD_GTCCGC_L001_R1_001_fastqc.zip b/runs/fastqc/results/DB_161_reC3MD_GTCCGC_L001_R1_001_fastqc.zip
new file mode 100644
index 0000000000000000000000000000000000000000..545e4bacd602bfbef83d7df68ac96811c098ff2b
--- /dev/null
+++ b/runs/fastqc/results/DB_161_reC3MD_GTCCGC_L001_R1_001_fastqc.zip
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1772958d490994dabde1091c2506c634b78d12698027b37e9d8e15d20a72fbc1
+size 420951
diff --git a/runs/fastqc/results/DB_163_reC3MD_GTGAAA_L001_R1_001_fastqc.html b/runs/fastqc/results/DB_163_reC3MD_GTGAAA_L001_R1_001_fastqc.html
new file mode 100644
index 0000000000000000000000000000000000000000..9df68457865e1dd583b6ae2c5a6b2b18536feb53
--- /dev/null
+++ b/runs/fastqc/results/DB_163_reC3MD_GTGAAA_L001_R1_001_fastqc.html
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4f54fd0ae336e95fa780a9b0fb097beb1f50cdbbc24610d6247066eba3b0454a
+size 610537
diff --git a/runs/fastqc/results/DB_163_reC3MD_GTGAAA_L001_R1_001_fastqc.zip b/runs/fastqc/results/DB_163_reC3MD_GTGAAA_L001_R1_001_fastqc.zip
new file mode 100644
index 0000000000000000000000000000000000000000..d94d2956abb44ef6071f5d4e888d4fe0396f10fd
--- /dev/null
+++ b/runs/fastqc/results/DB_163_reC3MD_GTGAAA_L001_R1_001_fastqc.zip
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:be44017bdb5956ac2b479115fd26a5f605b493b3224050bb0a0af6deb53786ac
+size 424179
diff --git a/runs/fastqc/results/DB_165_re-C3MD_GTGAAA_L002_R1_001_fastqc.html b/runs/fastqc/results/DB_165_re-C3MD_GTGAAA_L002_R1_001_fastqc.html
new file mode 100644
index 0000000000000000000000000000000000000000..5c6ddb761ce58660638ba16115b6d5dd8823b9b1
--- /dev/null
+++ b/runs/fastqc/results/DB_165_re-C3MD_GTGAAA_L002_R1_001_fastqc.html
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:24474916df5d793336d0806f8ae28754e3ce1c03c3c3979f91a37550f26eb126
+size 609445
diff --git a/runs/fastqc/results/DB_165_re-C3MD_GTGAAA_L002_R1_001_fastqc.zip b/runs/fastqc/results/DB_165_re-C3MD_GTGAAA_L002_R1_001_fastqc.zip
new file mode 100644
index 0000000000000000000000000000000000000000..1e9c80dd29f9e25c31b0a5eeb1cae36f5c46e214
--- /dev/null
+++ b/runs/fastqc/results/DB_165_re-C3MD_GTGAAA_L002_R1_001_fastqc.zip
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6c7efe5eb2d68cb409f26228692e0b0d19da26787a2a3716faafd6f88722fdb0
+size 426039
diff --git a/runs/fastqc/run.cwl b/runs/fastqc/run.cwl
new file mode 100644
index 0000000000000000000000000000000000000000..974e99274b8fab4201a548c27fdda57f059544b4
--- /dev/null
+++ b/runs/fastqc/run.cwl
@@ -0,0 +1,24 @@
+cwlVersion: v1.2
+class: Workflow
+
+requirements:
+  SubworkflowFeatureRequirement: {}
+  ScatterFeatureRequirement: {}
+  MultipleInputFeatureRequirement: {}
+
+inputs:
+  fastq: File[]
+  finaloutdir: string
+
+steps:
+  fastqc:
+    run: ../../workflows/fastqc/workflow.cwl
+    in:
+      fastq: fastq
+      finaloutdir: finaloutdir
+    out: [outdir]
+
+outputs:
+  outdir:
+    type: Directory
+    outputSource: fastqc/outdir
\ No newline at end of file
diff --git a/runs/fastqc/run.yml b/runs/fastqc/run.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d9744cf09a5b541d9497c4831f5a81055fdc996d
--- /dev/null
+++ b/runs/fastqc/run.yml
@@ -0,0 +1,14 @@
+finaloutdir: "results"
+fastq:
+  - class: File
+    path: ../../assays/Talinum_RNASeq_minimal/dataset/DB_097_CAMMD_CAGATC_L001_R1_001.fastq.gz
+  - class: File
+    path: ../../assays/Talinum_RNASeq_minimal/dataset/DB_099_CAMMD_CTTGTA_L001_R1_001.fastq.gz
+  - class: File
+    path: ../../assays/Talinum_RNASeq_minimal/dataset/DB_103_CAMMD_AGTCAA_L001_R1_001.fastq.gz
+  - class: File
+    path: ../../assays/Talinum_RNASeq_minimal/dataset/DB_161_reC3MD_GTCCGC_L001_R1_001.fastq.gz
+  - class: File
+    path: ../../assays/Talinum_RNASeq_minimal/dataset/DB_163_reC3MD_GTGAAA_L001_R1_001.fastq.gz
+  - class: File
+    path: ../../assays/Talinum_RNASeq_minimal/dataset/DB_165_re-C3MD_GTGAAA_L002_R1_001.fastq.gz
\ No newline at end of file
diff --git a/runs/kallisto/run.cwl b/runs/kallisto/run.cwl
index 7ab4d83630e9cacda2b7da8c7a9b3ac804c5f12e..3ec2a22fd3d933361182dff470de94caf611a092 100644
--- a/runs/kallisto/run.cwl
+++ b/runs/kallisto/run.cwl
@@ -4,16 +4,20 @@ class: Workflow
 
 requirements:
   SubworkflowFeatureRequirement: {}
+  MultipleInputFeatureRequirement: {}
 
 inputs:
   IndexInput: File[]
-  InputReadsMultipleSamples:
-    type: 
+  sampleRecord:
+    type:
       type: array
-      items: 
-        type: array
-        items: File
-  numUnderscoresFileName: int
+      items:
+        type: record
+        fields:
+          readsOfOneSample:
+            type: File[]
+          sampleName:
+            type: string?
   isSingle: boolean
   FragmentLength: double?  
   StandardDeviation: double?
@@ -25,8 +29,7 @@ steps:
     run:  ../../workflows/kallisto/workflow.cwl
     in:
       IndexInput: IndexInput
-      InputReadsMultipleSamples: InputReadsMultipleSamples
-      numUnderscoresFileName: numUnderscoresFileName
+      sampleRecord: sampleRecord
       isSingle: isSingle
       FragmentLength: FragmentLength
       StandardDeviation: StandardDeviation
diff --git a/runs/kallisto/run.yml b/runs/kallisto/run.yml
index 1d147f9882253552f871d417b493cb2cf9ca5c17..541e17004c6844c012e70922d7bc4470a59b8963 100644
--- a/runs/kallisto/run.yml
+++ b/runs/kallisto/run.yml
@@ -5,44 +5,47 @@ IndexInput:
     format: edam:format_1929 # FASTA
 
 ## Fastq files to be mapped
-# The `InputReadsMultipleSamples` looks more complicated than needed
-# It's an array of File arrays to generically allow multiple fastq files per sample
+# The `readsOfOneSample` looks more complicated than needed
+# It's an array of records (each with one or mupltiple files and a sample name) to generically allow multiple fastq files per sample
 
-InputReadsMultipleSamples:
-  - 
+sampleRecord:
+  - readsOfOneSample:
     - class: File
       path: ../../assays/Talinum_RNASeq_minimal/dataset/DB_097_CAMMD_CAGATC_L001_R1_001.fastq.gz
-      format: edam:format_1930 # FASTQ
-  - 
+      format: edam:format_1930
+    sampleName: 'DB_097'
+  - readsOfOneSample:  
+    - class: File
+      path: ../../assays/Talinum_RNASeq_minimal/dataset/DB_163_reC3MD_GTGAAA_L001_R1_001.fastq.gz
+      format: edam:format_1930
+    sampleName: 'DB_163'
+  - readsOfOneSample:
     - class: File
       path: ../../assays/Talinum_RNASeq_minimal/dataset/DB_099_CAMMD_CTTGTA_L001_R1_001.fastq.gz
-      format: edam:format_1930 # FASTQ
-  # - 
-  #   - class: File
-  #     path: ../../assays/Talinum_RNASeq_minimal/dataset/DB_103_CAMMD_AGTCAA_L001_R1_001.fastq.gz
-  #     format: edam:format_1930 # FASTQ
-  # - 
-  #   - class: File
-  #     path: ../../assays/Talinum_RNASeq_minimal/dataset/DB_161_reC3MD_GTCCGC_L001_R1_001.fastq.gz
-  #     format: edam:format_1930 # FASTQ
-  # - 
-  #   - class: File
-  #     path: ../../assays/Talinum_RNASeq_minimal/dataset/DB_163_reC3MD_GTGAAA_L001_R1_001.fastq.gz
-  #     format: edam:format_1930 # FASTQ
-  # - 
-  #   - class: File
-  #     path: ../../assays/Talinum_RNASeq_minimal/dataset/DB_165_re-C3MD_GTGAAA_L002_R1_001.fastq.gz
-  #     format: edam:format_1930 # FASTQ
-
-numUnderscoresFileName: 2
+      format: edam:format_1930
+    sampleName: 'DB_099'
+  - readsOfOneSample:
+    - class: File
+      path: ../../assays/Talinum_RNASeq_minimal/dataset/DB_103_CAMMD_AGTCAA_L001_R1_001.fastq.gz
+      format: edam:format_1930
+    sampleName: 'DB_103'
+  - readsOfOneSample:
+    - class: File
+      path: ../../assays/Talinum_RNASeq_minimal/dataset/DB_161_reC3MD_GTCCGC_L001_R1_001.fastq.gz
+      format: edam:format_1930
+    sampleName: 'DB_161'
+  - readsOfOneSample:
+    - class: File
+      path: ../../assays/Talinum_RNASeq_minimal/dataset/DB_165_re-C3MD_GTGAAA_L002_R1_001.fastq.gz
+      format: edam:format_1930
+    sampleName: 'DB_165'
 
 ### Kallisto quant Parameters
 isSingle: true
 FragmentLength: 200
 StandardDeviation: 20
 BootstrapSamples: 30
-
-resultsFolder: test
+resultsFolder: kallisto_results
 
 $namespaces:
   edam: https://edamontology.org/
\ No newline at end of file
diff --git a/workflows/fastqc/collectFilesInDir.cwl b/workflows/fastqc/collectFilesInDir.cwl
new file mode 100644
index 0000000000000000000000000000000000000000..39f9ff8ae5a33d939136c081a9cd79533972eddc
--- /dev/null
+++ b/workflows/fastqc/collectFilesInDir.cwl
@@ -0,0 +1,20 @@
+cwlVersion: v1.2
+class: ExpressionTool
+label: Collect files in a directory
+doc: |
+  Takes Files (e.g. from a workflow step) and yields them in a desired directory.
+requirements:
+  - class: InlineJavascriptRequirement
+inputs:
+  files: File[]
+  destination: string
+expression: |
+  ${
+    return {"outDir": {
+      "class": "Directory", 
+      "basename": inputs.destination,
+      "listing": inputs.files
+    } };
+  }
+outputs:
+  outDir: Directory
\ No newline at end of file
diff --git a/workflows/fastqc/fastqc.cwl b/workflows/fastqc/fastqc.cwl
new file mode 100644
index 0000000000000000000000000000000000000000..a2e408db732fa6913af001c6349dda4ac30a116e
--- /dev/null
+++ b/workflows/fastqc/fastqc.cwl
@@ -0,0 +1,48 @@
+#!/usr/bin/env cwl-runner
+cwlVersion: v1.2
+class: CommandLineTool
+
+label: Run fastqc on raw reads in FASTQ format (single or paired end) or aligned reads in BAM.
+
+doc: |
+  simplified from: https://github.com/common-workflow-library/bio-cwl-tools/blob/66f620da5b0a11e934a6da83272205a2516bcd91/fastqc/fastqc_1.cwl
+  
+  Run fastqc on raw reads in FASTQ format (single or paired end) or aligned reads in BAM.
+
+hints:
+  ResourceRequirement:
+    coresMin: 1
+    ramMin: 5000
+  DockerRequirement:
+    dockerPull: quay.io/biocontainers/fastqc:0.11.9--hdfd78af_1
+  SoftwareRequirement:
+    packages:
+      fastqc:
+        specs: [ https://identifiers.org/biotools/fastqc ]
+        version: [ "0.11.9" ]
+
+
+baseCommand: "fastqc"
+arguments: 
+  - valueFrom: $(runtime.outdir)
+    prefix: "-o"
+  - valueFrom: "--noextract"
+
+inputs:
+  fastq:
+    type: File
+    inputBinding:
+      position: 1
+ 
+outputs:
+  fastqc_zip:
+    doc: all data e.g. figures
+    type: File
+    outputBinding:
+      glob: "*_fastqc.zip"
+  fastqc_html:
+    doc: html report showing results from zip
+    type: File
+    outputBinding:
+      glob: "*_fastqc.html"
+    
diff --git a/workflows/fastqc/workflow.cwl b/workflows/fastqc/workflow.cwl
new file mode 100644
index 0000000000000000000000000000000000000000..d80a7eaafc7c6f530d3c43ca21716b005e7d1f4e
--- /dev/null
+++ b/workflows/fastqc/workflow.cwl
@@ -0,0 +1,32 @@
+#!/usr/bin/env cwl-runner
+cwlVersion: v1.2
+class: Workflow
+
+requirements:
+  ScatterFeatureRequirement: {}
+  SubworkflowFeatureRequirement: {}
+
+inputs:
+  fastq: File[]
+  finaloutdir: string
+ 
+steps:
+  fastqc:
+    run: fastqc.cwl
+    scatter: fastq
+    in:
+      fastq: fastq
+    out: [fastqc_zip, fastqc_html]
+  collectFiles:
+    run: ./collectFilesInDir.cwl
+    in: 
+      destination: finaloutdir
+      files:
+        source: [fastqc/fastqc_html, fastqc/fastqc_zip]
+        linkMerge: merge_flattened
+    out: [outDir]
+  
+outputs:
+  outdir:
+    type: Directory
+    outputSource: collectFiles/outDir
\ No newline at end of file
diff --git a/workflows/kallisto/README.md b/workflows/kallisto/README.md
deleted file mode 100644
index 244a3c13bfec41dce6d7e5e892b1b5e37fe55d2f..0000000000000000000000000000000000000000
--- a/workflows/kallisto/README.md
+++ /dev/null
@@ -1,12 +0,0 @@
-
-# Kallisto
-
-CWL adapted from: https://github.com/common-workflow-library/bio-cwl-tools/commit/91c42fb809ce18eafe16155cca0abf362270c0fe
-
-## Workflow graph
-
-```bash
-cwltool --print-dot kallisto-workflow.cwl | dot -Tsvg > kallisto_workflow_graph.svg
-```
-
-![alt text](kallisto_workflow_graph.svg)
\ No newline at end of file
diff --git a/workflows/kallisto/kallisto-help.cwl b/workflows/kallisto/kallisto-test.cwl
similarity index 100%
rename from workflows/kallisto/kallisto-help.cwl
rename to workflows/kallisto/kallisto-test.cwl
diff --git a/workflows/kallisto/kallisto_workflow_graph.svg b/workflows/kallisto/kallisto_workflow_graph.svg
deleted file mode 100644
index a9083cee1ed9f5c8f89da0ff9cfcd795b28818aa..0000000000000000000000000000000000000000
--- a/workflows/kallisto/kallisto_workflow_graph.svg
+++ /dev/null
@@ -1,173 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
- "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 2.50.0 (20220117.2223)
- -->
-<!-- Title: G Pages: 1 -->
-<svg width="1313pt" height="395pt"
- viewBox="0.00 0.00 1313.00 395.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 391)">
-<title>G</title>
-<polygon fill="#eeeeee" stroke="transparent" points="-4,4 -4,-391 1309,-391 1309,4 -4,4"/>
-<g id="clust1" class="cluster">
-<title>cluster_inputs</title>
-<polygon fill="#eeeeee" stroke="black" stroke-dasharray="5,2" points="8,-303 8,-379 1297,-379 1297,-303 8,-303"/>
-<text text-anchor="middle" x="1230" y="-310.8" font-family="Times,serif" font-size="14.00">Workflow Inputs</text>
-</g>
-<g id="clust2" class="cluster">
-<title>cluster_outputs</title>
-<polygon fill="#eeeeee" stroke="black" stroke-dasharray="5,2" points="310,-8 310,-84 456,-84 456,-8 310,-8"/>
-<text text-anchor="middle" x="383" y="-15.8" font-family="Times,serif" font-size="14.00">Workflow Outputs</text>
-</g>
-<!-- quant -->
-<g id="node1" class="node">
-<title>quant</title>
-<polygon fill="lightgoldenrodyellow" stroke="black" points="647,-185.5 647,-221.5 705,-221.5 705,-185.5 647,-185.5"/>
-<text text-anchor="middle" x="676" y="-199.8" font-family="Times,serif" font-size="14.00">quant</text>
-</g>
-<!-- collectResults -->
-<g id="node2" class="node">
-<title>collectResults</title>
-<polygon fill="lightgoldenrodyellow" stroke="black" points="325,-112.5 325,-148.5 441,-148.5 441,-112.5 325,-112.5"/>
-<text text-anchor="middle" x="383" y="-126.8" font-family="Times,serif" font-size="14.00">collectResults</text>
-</g>
-<!-- quant&#45;&gt;collectResults -->
-<g id="edge1" class="edge">
-<title>quant&#45;&gt;collectResults</title>
-<path fill="none" stroke="black" d="M646.83,-195.43C601.59,-184.47 513.24,-163.06 451.29,-148.05"/>
-<polygon fill="black" stroke="black" points="451.75,-144.56 441.2,-145.6 450.1,-151.36 451.75,-144.56"/>
-</g>
-<!-- finalOut -->
-<g id="node12" class="node">
-<title>finalOut</title>
-<polygon fill="#94ddf4" stroke="black" points="346,-39.5 346,-75.5 420,-75.5 420,-39.5 346,-39.5"/>
-<text text-anchor="middle" x="383" y="-53.8" font-family="Times,serif" font-size="14.00">finalOut</text>
-</g>
-<!-- collectResults&#45;&gt;finalOut -->
-<g id="edge13" class="edge">
-<title>collectResults&#45;&gt;finalOut</title>
-<path fill="none" stroke="black" d="M383,-112.31C383,-104.29 383,-94.55 383,-85.57"/>
-<polygon fill="black" stroke="black" points="386.5,-85.53 383,-75.53 379.5,-85.53 386.5,-85.53"/>
-</g>
-<!-- index -->
-<g id="node3" class="node">
-<title>index</title>
-<polygon fill="lightgoldenrodyellow" stroke="black" points="166,-258.5 166,-294.5 222,-294.5 222,-258.5 166,-258.5"/>
-<text text-anchor="middle" x="194" y="-272.8" font-family="Times,serif" font-size="14.00">index</text>
-</g>
-<!-- index&#45;&gt;quant -->
-<g id="edge2" class="edge">
-<title>index&#45;&gt;quant</title>
-<path fill="none" stroke="black" d="M222.35,-271.32C304.43,-259.23 542.41,-224.18 636.78,-210.28"/>
-<polygon fill="black" stroke="black" points="637.39,-213.73 646.77,-208.81 636.37,-206.8 637.39,-213.73"/>
-</g>
-<!-- resultsFolder -->
-<g id="node4" class="node">
-<title>resultsFolder</title>
-<polygon fill="#94ddf4" stroke="black" points="16,-334.5 16,-370.5 128,-370.5 128,-334.5 16,-334.5"/>
-<text text-anchor="middle" x="72" y="-348.8" font-family="Times,serif" font-size="14.00">resultsFolder</text>
-</g>
-<!-- resultsFolder&#45;&gt;collectResults -->
-<g id="edge3" class="edge">
-<title>resultsFolder&#45;&gt;collectResults</title>
-<path fill="none" stroke="black" d="M84.72,-334.44C100.23,-314.43 127.98,-281.07 157,-258 213.1,-213.41 286.94,-175.31 334.69,-152.9"/>
-<polygon fill="black" stroke="black" points="336.29,-156.02 343.88,-148.63 333.34,-149.67 336.29,-156.02"/>
-</g>
-<!-- IndexInput -->
-<g id="node5" class="node">
-<title>IndexInput</title>
-<polygon fill="#94ddf4" stroke="black" points="146.5,-334.5 146.5,-370.5 241.5,-370.5 241.5,-334.5 146.5,-334.5"/>
-<text text-anchor="middle" x="194" y="-348.8" font-family="Times,serif" font-size="14.00">IndexInput</text>
-</g>
-<!-- IndexInput&#45;&gt;index -->
-<g id="edge4" class="edge">
-<title>IndexInput&#45;&gt;index</title>
-<path fill="none" stroke="black" d="M188.2,-334.34C187.27,-325.56 187.02,-314.66 187.46,-304.77"/>
-<polygon fill="black" stroke="black" points="190.97,-304.8 188.21,-294.57 183.99,-304.29 190.97,-304.8"/>
-</g>
-<!-- IndexInput&#45;&gt;index -->
-<g id="edge5" class="edge">
-<title>IndexInput&#45;&gt;index</title>
-<path fill="none" stroke="black" d="M199.8,-334.34C200.73,-325.56 200.98,-314.66 200.54,-304.77"/>
-<polygon fill="black" stroke="black" points="204.01,-304.29 199.79,-294.57 197.03,-304.8 204.01,-304.29"/>
-</g>
-<!-- BootstrapSamples -->
-<g id="node6" class="node">
-<title>BootstrapSamples</title>
-<polygon fill="#94ddf4" stroke="black" points="260,-334.5 260,-370.5 408,-370.5 408,-334.5 260,-334.5"/>
-<text text-anchor="middle" x="334" y="-348.8" font-family="Times,serif" font-size="14.00">BootstrapSamples</text>
-</g>
-<!-- BootstrapSamples&#45;&gt;quant -->
-<g id="edge6" class="edge">
-<title>BootstrapSamples&#45;&gt;quant</title>
-<path fill="none" stroke="black" d="M361.03,-334.43C377.21,-324.58 398.38,-312.33 418,-303 493.49,-267.08 585.84,-234.39 637.06,-217.2"/>
-<polygon fill="black" stroke="black" points="638.36,-220.46 646.74,-213.97 636.15,-213.81 638.36,-220.46"/>
-</g>
-<!-- FragmentLength -->
-<g id="node7" class="node">
-<title>FragmentLength</title>
-<polygon fill="#94ddf4" stroke="black" points="426.5,-334.5 426.5,-370.5 563.5,-370.5 563.5,-334.5 426.5,-334.5"/>
-<text text-anchor="middle" x="495" y="-348.8" font-family="Times,serif" font-size="14.00">FragmentLength</text>
-</g>
-<!-- FragmentLength&#45;&gt;quant -->
-<g id="edge7" class="edge">
-<title>FragmentLength&#45;&gt;quant</title>
-<path fill="none" stroke="black" d="M516.12,-334.35C548.54,-308.02 610.66,-257.56 647.19,-227.9"/>
-<polygon fill="black" stroke="black" points="649.46,-230.56 655.02,-221.54 645.05,-225.13 649.46,-230.56"/>
-</g>
-<!-- StandardDeviation -->
-<g id="node8" class="node">
-<title>StandardDeviation</title>
-<polygon fill="#94ddf4" stroke="black" points="581.5,-334.5 581.5,-370.5 732.5,-370.5 732.5,-334.5 581.5,-334.5"/>
-<text text-anchor="middle" x="657" y="-348.8" font-family="Times,serif" font-size="14.00">StandardDeviation</text>
-</g>
-<!-- StandardDeviation&#45;&gt;quant -->
-<g id="edge8" class="edge">
-<title>StandardDeviation&#45;&gt;quant</title>
-<path fill="none" stroke="black" d="M659.22,-334.35C662.48,-309.12 668.6,-261.76 672.48,-231.74"/>
-<polygon fill="black" stroke="black" points="675.99,-231.91 673.8,-221.54 669.04,-231.01 675.99,-231.91"/>
-</g>
-<!-- isSingle -->
-<g id="node9" class="node">
-<title>isSingle</title>
-<polygon fill="#94ddf4" stroke="black" points="751,-334.5 751,-370.5 825,-370.5 825,-334.5 751,-334.5"/>
-<text text-anchor="middle" x="788" y="-348.8" font-family="Times,serif" font-size="14.00">isSingle</text>
-</g>
-<!-- isSingle&#45;&gt;quant -->
-<g id="edge9" class="edge">
-<title>isSingle&#45;&gt;quant</title>
-<path fill="none" stroke="black" d="M775.14,-334.23C766.7,-323.94 754.87,-311.31 742,-303 732.91,-297.13 727.06,-302.23 719,-295 700.25,-278.19 688.96,-251.45 682.68,-231.39"/>
-<polygon fill="black" stroke="black" points="685.99,-230.23 679.84,-221.59 679.26,-232.17 685.99,-230.23"/>
-</g>
-<!-- numUnderscoresFileName -->
-<g id="node10" class="node">
-<title>numUnderscoresFileName</title>
-<polygon fill="#94ddf4" stroke="black" points="843,-334.5 843,-370.5 1051,-370.5 1051,-334.5 843,-334.5"/>
-<text text-anchor="middle" x="947" y="-348.8" font-family="Times,serif" font-size="14.00">numUnderscoresFileName</text>
-</g>
-<!-- numUnderscoresFileName&#45;&gt;quant -->
-<g id="edge10" class="edge">
-<title>numUnderscoresFileName&#45;&gt;quant</title>
-<path fill="none" stroke="black" d="M914.31,-334.34C892.23,-323.54 862.1,-310.31 834,-303 800.7,-294.34 787.64,-310.65 757,-295 749.29,-291.06 718.14,-254.93 696.79,-229.53"/>
-<polygon fill="black" stroke="black" points="699.35,-227.14 690.25,-221.72 693.99,-231.63 699.35,-227.14"/>
-</g>
-<!-- InputReadsMultipleSamples -->
-<g id="node11" class="node">
-<title>InputReadsMultipleSamples</title>
-<polygon fill="#94ddf4" stroke="black" points="1069.5,-334.5 1069.5,-370.5 1288.5,-370.5 1288.5,-334.5 1069.5,-334.5"/>
-<text text-anchor="middle" x="1179" y="-348.8" font-family="Times,serif" font-size="14.00">InputReadsMultipleSamples</text>
-</g>
-<!-- InputReadsMultipleSamples&#45;&gt;quant -->
-<g id="edge11" class="edge">
-<title>InputReadsMultipleSamples&#45;&gt;quant</title>
-<path fill="none" stroke="black" d="M1133.09,-334.43C1108.8,-324.46 1078.54,-312.1 1051,-303 930.41,-263.16 784.15,-229.58 715.25,-213.93"/>
-<polygon fill="black" stroke="black" points="715.79,-210.46 705.27,-211.66 714.25,-217.29 715.79,-210.46"/>
-</g>
-<!-- InputReadsMultipleSamples&#45;&gt;quant -->
-<g id="edge12" class="edge">
-<title>InputReadsMultipleSamples&#45;&gt;quant</title>
-<path fill="none" stroke="black" d="M1148.73,-334.43C1126.8,-324.46 1096.54,-312.1 1069,-303 941.93,-261.02 786.37,-225.99 714.95,-211.57"/>
-<polygon fill="black" stroke="black" points="715.53,-208.11 705.04,-209.59 714.16,-214.98 715.53,-208.11"/>
-</g>
-</g>
-</svg>
diff --git a/workflows/kallisto/workflow.cwl b/workflows/kallisto/workflow.cwl
index 1d020e1110afc46d500e96eef07a1f7282164219..4ce56173769787379dddf9cd977d60b18e6ff9c1 100644
--- a/workflows/kallisto/workflow.cwl
+++ b/workflows/kallisto/workflow.cwl
@@ -1,3 +1,4 @@
+#!/usr/bin/env cwl-runner
 cwlVersion: v1.2
 class: Workflow
 
@@ -7,62 +8,58 @@ requirements:
   InlineJavascriptRequirement: {}
 
 inputs:
-  IndexInput: File[]
-  InputReadsMultipleSamples:
-    type: 
-      type: array
-      items: 
-        type: array
-        items: File
-  # numCharsFileName:
-  #   type: int
-  #   default: 6
-  numUnderscoresFileName:
-    type: int
-    default: 2
-  isSingle: boolean
-  FragmentLength: double?  
-  StandardDeviation: double?
-  BootstrapSamples: int?
-  resultsFolder: string
+    IndexInput: File[]
+    sampleRecord:
+        type:
+          type: array
+          items:
+            type: record
+            fields:
+              readsOfOneSample:
+                type: File[]
+              sampleName:
+                type: string?
+    isSingle: boolean
+    FragmentLength: double?
+    StandardDeviation: double?
+    BootstrapSamples: int?
+    resultsFolder: string
 
 steps:
-  index:
-    run: kallisto-index.cwl
-    in:
-      InputFiles: IndexInput
-      IndexName: 
-        source: IndexInput
-        valueFrom: $(self[0].nameroot)
-    out: [index]
-  quant:
-    run: kallisto-quant.cwl
-    scatter: 
-      - InputReads
-      - QuantOutfolder
-    scatterMethod: dotproduct
-    in:
-      InputReads: InputReadsMultipleSamples
-      # numChars:
-      #   source: numCharsFileName
-      numUnderscores: numUnderscoresFileName
-      QuantOutfolder:
-        source: InputReadsMultipleSamples
-        # valueFrom: $(self[0].nameroot.substring(0, inputs.numChars))
-        valueFrom: $(self[0].nameroot.split('_').slice(0, inputs.numUnderscores).join('_'))
-      Index: index/index
-      isSingle: isSingle
-      FragmentLength: FragmentLength 
-      StandardDeviation: StandardDeviation
-      BootstrapSamples: BootstrapSamples
-    out: [outFolder]
-  collectResults:
-    run: ./yield-dirInDestination.cwl
-    scatter: inDir
-    in:
-      inDir: quant/outFolder
-      destinationDir: resultsFolder
-    out: [outDir]
+    index:
+        run: kallisto-index.cwl
+        in:
+            InputFiles: IndexInput
+            IndexName:
+                source: IndexInput
+                valueFrom: $(self[0].nameroot)
+        out: [index]
+
+    quant:
+        run: kallisto-quant.cwl
+        scatter: [InputReads, QuantOutfolder]
+        scatterMethod: dotproduct
+        in:
+            InputReads:
+                source: sampleRecord
+                valueFrom: $(self.readsOfOneSample)
+            QuantOutfolder:
+                source: sampleRecord
+                valueFrom: $(self.sampleName)
+            Index: index/index
+            isSingle: isSingle
+            FragmentLength: FragmentLength
+            StandardDeviation: StandardDeviation
+            BootstrapSamples: BootstrapSamples
+        out: [outFolder]
+
+    collectResults:
+        run: ./yield-dirInDestination.cwl
+        scatter: inDir
+        in:
+            inDir: quant/outFolder
+            destinationDir: resultsFolder
+        out: [outDir]
 
 outputs:
   finalOut:
diff --git a/workflows/kallisto/yield-dirInDestination.cwl b/workflows/kallisto/yield-dirInDestination.cwl
index c2a20eabcd7bfc412238d74a99aedb6eac468008..bc90cb81f1a907735bd433d6117c55872c213f92 100644
--- a/workflows/kallisto/yield-dirInDestination.cwl
+++ b/workflows/kallisto/yield-dirInDestination.cwl
@@ -1,7 +1,7 @@
 cwlVersion: v1.2
 class: ExpressionTool
 doc: |
-  Takes a directory (e.g. from a workflow step) and yield it in a desired directory.
+  Takes a directory (e.g. from a workflow step) and yields it in a desired directory.
 requirements:
   - class: InlineJavascriptRequirement
 inputs: