diff --git a/src/.docker_modules/deseq2-wrapper/1.0.0/Dockerfile b/src/.docker_modules/deseq2-wrapper/1.0.0/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..bf24a2dabe688156049f7b0a7bc89a95ecdcde4a
--- /dev/null
+++ b/src/.docker_modules/deseq2-wrapper/1.0.0/Dockerfile
@@ -0,0 +1,17 @@
+FROM rocker/r-base:4.2.3
+
+LABEL MAINTAINER "Xavier Grand <xavier.grand@ens-lyon.fr>"
+
+RUN apt update && apt-get install -y apt-transport-https
+RUN apt install -y pandoc libfontconfig1-dev libcurl4-openssl-dev \
+                   libssl-dev libssh2-1-dev libxml2-dev zlib1g-dev \
+                   libharfbuzz-dev libfribidi-dev libfreetype6-dev \
+                   libpng-dev libtiff5-dev libjpeg-dev && \
+  R -e "install.packages(c('devtools', 'testthat', 'roxygen2', 'BiocManager', 'plotly'))" && \
+  R -e "BiocManager::install('DESeq2')"
+
+COPY *.R .
+
+RUN Rscript install_deseq2-wrapper.R
+
+CMD [ "bash" ]
\ No newline at end of file
diff --git a/src/.docker_modules/deseq2-wrapper/1.0.0/deseq2-wrapper.R b/src/.docker_modules/deseq2-wrapper/1.0.0/deseq2-wrapper.R
new file mode 100755
index 0000000000000000000000000000000000000000..62b9783ba6fff4d54386f0765205036a6a4db03a
--- /dev/null
+++ b/src/.docker_modules/deseq2-wrapper/1.0.0/deseq2-wrapper.R
@@ -0,0 +1,5 @@
+# deseq2-wrapper.R
+
+#!/bin/Rscript
+library(DESeqwrapper)
+cli_run_deseq2()
diff --git a/src/.docker_modules/deseq2-wrapper/1.0.0/docker_init.sh b/src/.docker_modules/deseq2-wrapper/1.0.0/docker_init.sh
new file mode 100755
index 0000000000000000000000000000000000000000..d581461f48102fd09a74734a67c76fc7515d2c1e
--- /dev/null
+++ b/src/.docker_modules/deseq2-wrapper/1.0.0/docker_init.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+# docker pull xgrand/deseq2-wrapper:1.0.0
+docker build src/.docker_modules/deseq2-wrapper/1.0.0 -t 'xgrand/deseq2-wrapper:1.0.0'
+docker push xgrand/deseq2-wrapper:1.0.0
+# docker buildx build --platform linux/amd64,linux/arm64 -t "xgrand/deseq2-wrapper:1.0.0" --push src/.docker_modules/deseq2-wrapper/1.0.0
\ No newline at end of file
diff --git a/src/.docker_modules/deseq2-wrapper/1.0.0/install_deseq2-wrapper.R b/src/.docker_modules/deseq2-wrapper/1.0.0/install_deseq2-wrapper.R
new file mode 100644
index 0000000000000000000000000000000000000000..9db139e2ebfad502795a3a7103bc7c396c0823f9
--- /dev/null
+++ b/src/.docker_modules/deseq2-wrapper/1.0.0/install_deseq2-wrapper.R
@@ -0,0 +1,4 @@
+#!/usr/bin/env Rscript
+install.packages("devtools")
+library(devtools)
+install_gitlab("LBMC/regards/deseq2-wrapper", host = "https://gitbio.ens-lyon.fr", quiet = FALSE)
diff --git a/src/arriba_fusion.nf b/src/arriba_fusion.nf
index 0d5c7db8962cac5f2e9b589be7ac9bc3aaf17741..f183a8751850b73da60b483602e2fc486769274e 100644
--- a/src/arriba_fusion.nf
+++ b/src/arriba_fusion.nf
@@ -31,6 +31,7 @@ def helpMessage() {
     Input:
       --fastq [path]                  Path to fastq folder.
       --bam [path]                    Path to the bam folder (indexed and sorted).
+      --design [path]                 Path to the design file.
 
     References:                       Can be downloaded with download_references.sh (not implemented in pipeline).
       --genome [path]                 Path to genome reference fasta file.
@@ -83,6 +84,8 @@ params.star_mapping2fusion_out = "06_mapping2fusion"
 params.filter_bam_quality_out = "07_Filtered_bam"
 params.arriba_out = "10_Arriba_results"
 params.draw_fusions_out = "11_drawn_fusions"
+params.concat_fusion_out = "12_concat_fusions"
+params.fusion_out = "13_DFG"
 
 /*
  ****************************************************************
@@ -122,6 +125,10 @@ Channel
     .fromPath( params.gtf )
     .set { gtf_file }
 
+Channel
+    .fromPath( params.design )
+    .set { design }
+
 if(params.bam) {
     Channel
         .fromPath( bam_list )
@@ -162,6 +169,8 @@ include { index_bam } from './nf_modules/samtools/main.nf'
 include { htseq_count } from './nf_modules/htseq/main.nf' addParams(htseq_out: '09_htseq_count', htseq_param: "${params.htseq_param}" )
 include { arriba } from "./nf_modules/arriba/main.nf"
 include { draw_fusions } from "./nf_modules/arriba/main.nf"
+include { concat_fusion } from "./nf_modules/concatenate/main.nf"
+include { parsefusion } from "./nf_modules/fusion_parser/main.nf"
 
 /*
  ****************************************************************
@@ -232,4 +241,6 @@ workflow {
  ****************************************************************
 */
 
+  concat_fusion(arriba.out.fusions, arriba.out.discarded)
+  parsefusion(concat_fusion.out.concatenated_fusions)
 }
\ No newline at end of file
diff --git a/src/nf_modules/concatenate/main.nf b/src/nf_modules/concatenate/main.nf
new file mode 100755
index 0000000000000000000000000000000000000000..c67cf8a7d988c607e050f99577bdc90121ed9d02
--- /dev/null
+++ b/src/nf_modules/concatenate/main.nf
@@ -0,0 +1,48 @@
+version = "3.15.4"
+container_url = "xgrand/alpine:${version}"
+
+
+params.fastq_out = ""
+process concatenate {
+    tag "fastq_folder"
+    label "big_mem_mono_cpus"
+
+    if (params.fastq_out != "") {
+        publishDir "results/${params.fastq_out}", mode: 'copy'
+    }
+
+    input:
+        path fastq
+
+    output:
+        path "merged.fastq.gz", emit: merged_fastq
+
+    script:
+"""
+zcat ${fastq}/*.fastq.gz > merged.fastq
+gzip --quiet merged.fastq
+"""
+}
+
+params.concat_fusion_out = ""
+process concat_fusion {
+    tag "concat_fusion"
+    label "big_mem_mono_cpus"
+
+    if (params.fastq_out != "") {
+        publishDir "results/${concat_fusion_out}", mode: 'copy'
+    }
+
+    input:
+        path fusions
+        path discarded_fusions
+
+    output:
+        path "*_fusions.tsv", emit: concatenated_fusions
+
+    script:
+"""
+cat ${fusions} > res_fusions.tsv
+tail +2 ${discarded_fusions} >> res_fusions.tsv
+"""
+}
\ No newline at end of file
diff --git a/src/nf_modules/fusion_parser/main.nf b/src/nf_modules/fusion_parser/main.nf
index ceac664d686eaa6b4d3cfe68cec00541797e351e..6023c3dad0b2f7b1839b785ef48e18fbd74d688b 100644
--- a/src/nf_modules/fusion_parser/main.nf
+++ b/src/nf_modules/fusion_parser/main.nf
@@ -1,6 +1,7 @@
 version = "1.0"
 container_url = "xgrand/fusion_parser:${version}"
 
+params.fusion_out = ""
 process parsefusion{
   container = "${container_url}"
   label "big_mem_multi_cpus"