diff --git a/src/docker_modules/MultiQC/1.0/Dockerfile b/src/docker_modules/MultiQC/1.0/Dockerfile
index 09b218a95597c3df504e78bc2043d2a139730016..d351f1c6a979de6616edce3fd276be262bad8b43 100644
--- a/src/docker_modules/MultiQC/1.0/Dockerfile
+++ b/src/docker_modules/MultiQC/1.0/Dockerfile
@@ -6,10 +6,16 @@ ENV PACKAGES build-essential=12.4* \
              python3-pip=9.0.1* \
              python3-setuptools=39.0.1* \
              python3-dev=3.6.5* \
-             python3-wheel=0.30.0*
+             python3-wheel=0.30.0* \
+             locales
 
 RUN apt-get update && \
     apt-get install -y --no-install-recommends ${PACKAGES} && \
     apt-get clean
 
+RUN locale-gen en_US.UTF-8
+ENV LC_ALL=en_US.utf-8
+ENV LANG=en_US.utf-8
+
 RUN pip3 install multiqc==${MULTIQC_VERSION}
+
diff --git a/src/nf_modules/MultiQC/multiqc.config b/src/nf_modules/MultiQC/multiqc.config
new file mode 100644
index 0000000000000000000000000000000000000000..c1bda95e70a612c7caf4825930e740faedd1c62d
--- /dev/null
+++ b/src/nf_modules/MultiQC/multiqc.config
@@ -0,0 +1,38 @@
+profiles {
+  docker {
+    docker.temp = 'auto'
+    docker.enabled = true
+    process {
+      $fastqc_fastq {
+        container = "fastqc:0.11.5"
+      }
+      $multiqc {
+        container = "multiqc:1.0"
+      }
+    }
+  }
+  sge {
+    process{
+      $fastqc_fastq {
+        beforeScript = "module purge; module load FastQC/0.11.5"
+        executor = "sge"
+        cpus = 1
+        memory = "5GB"
+        time = "6h"
+        queueSize = 1000
+        pollInterval = '60sec'
+        queue = 'monointeldeb128'
+      }
+      $multiqc {
+        beforeScript = "module purge; module load FastQC/1.0"
+        executor = "sge"
+        cpus = 1
+        memory = "5GB"
+        time = "6h"
+        queueSize = 1000
+        pollInterval = '60sec'
+        queue = 'monointeldeb128'
+      }
+    }
+  }
+}
diff --git a/src/nf_modules/MultiQC/multiqc.nf b/src/nf_modules/MultiQC/multiqc.nf
new file mode 100644
index 0000000000000000000000000000000000000000..eae20b515bb37218265d95c3fb4bb7e27b80c7a8
--- /dev/null
+++ b/src/nf_modules/MultiQC/multiqc.nf
@@ -0,0 +1,25 @@
+/*
+* multiqc :
+* Imputs : report files
+* Output :  multiqc report
+*/
+
+/*                      MultiQC                                     */
+
+process multiqc {
+  tag "$repport.baseName"
+  publishDir "results/fastq/multiqc/", mode: 'copy'
+  cpus = 1
+
+  input:
+    file repport from fastqc_repport.collect()
+
+  output:
+    file "*multiqc_*" into multiqc_report
+
+  script:
+"""
+multiqc -f .
+"""
+}
+
diff --git a/src/nf_modules/MultiQC/tests/multiqc_paired.nf b/src/nf_modules/MultiQC/tests/multiqc_paired.nf
new file mode 100644
index 0000000000000000000000000000000000000000..7db2ea32544ed119e1e3cba66ec70b949f2e7a61
--- /dev/null
+++ b/src/nf_modules/MultiQC/tests/multiqc_paired.nf
@@ -0,0 +1,43 @@
+params.fastq = "$baseDir/data/fastq/*_{1,2}.fastq"
+
+log.info "fastq files : ${params.fastq}"
+
+Channel
+  .fromFilePairs( params.fastq )
+  .ifEmpty { error "Cannot find any fastq files matching: ${params.fastq}" }
+  .set { fastq_files }
+
+process fastqc_fastq {
+  tag "$pair_id"
+  publishDir "results/fastq/fastqc/", mode: 'copy'
+
+  input:
+  set pair_id, file(reads) from fastq_files
+
+  output:
+    file "*.{zip,html}" into fastqc_repport
+
+  script:
+"""
+fastqc --quiet --threads ${task.cpus} --format fastq --outdir ./ \
+${reads[0]} ${reads[1]}
+"""
+}
+
+process multiqc {
+  tag "$repport[0].baseName"
+  publishDir "results/fastq/multiqc/", mode: 'copy'
+  cpus = 1
+
+  input:
+    file repport from fastqc_repport.collect()
+
+  output:
+    file "*multiqc_*" into multiqc_report
+
+  script:
+"""
+multiqc -f .
+"""
+}
+
diff --git a/src/nf_modules/MultiQC/tests/multiqc_single.nf b/src/nf_modules/MultiQC/tests/multiqc_single.nf
new file mode 100644
index 0000000000000000000000000000000000000000..30edc7bcb8cd4dd37d35ae830981c36362ec7f04
--- /dev/null
+++ b/src/nf_modules/MultiQC/tests/multiqc_single.nf
@@ -0,0 +1,43 @@
+params.fastq = "$baseDir/data/fastq/*.fastq"
+
+log.info "fastq files : ${params.fastq}"
+
+Channel
+  .fromPath( params.fastq )
+  .ifEmpty { error "Cannot find any fastq files matching: ${params.fastq}" }
+  .set { fastq_files }
+
+process fastqc_fastq {
+  tag "$reads.baseName"
+  publishDir "results/fastq/fastqc/", mode: 'copy'
+  cpus = 1
+
+  input:
+    file reads from fastq_files
+
+  output:
+    file "*.{zip,html}" into fastqc_repport
+
+  script:
+"""
+fastqc --quiet --threads ${task.cpus} --format fastq --outdir ./ ${reads}
+"""
+}
+
+process multiqc {
+  tag "$repport[0].baseName"
+  publishDir "results/fastq/multiqc/", mode: 'copy'
+  cpus = 1
+
+  input:
+    file repport from fastqc_repport.collect()
+
+  output:
+    file "*multiqc_*" into multiqc_report
+
+  script:
+"""
+multiqc -f .
+"""
+}
+
diff --git a/src/nf_modules/MultiQC/tests/tests.sh b/src/nf_modules/MultiQC/tests/tests.sh
new file mode 100755
index 0000000000000000000000000000000000000000..8aaa83c1e1eed5d173efd0b62fad37a5173734db
--- /dev/null
+++ b/src/nf_modules/MultiQC/tests/tests.sh
@@ -0,0 +1,9 @@
+nextflow src/nf_modules/MultiQC/tests/multiqc_paired.nf \
+  -c src/nf_modules/MultiQC/multiqc.config \
+  -profile docker \
+  --fastq "data/tiny_dataset/fastq/tiny_R{1,2}.fastq"
+
+nextflow src/nf_modules/MultiQC/tests/multiqc_single.nf \
+  -c src/nf_modules/MultiQC/multiqc.config \
+  -profile docker \
+  --fastq "data/tiny_dataset/fastq/tiny_S.fastq"