diff --git a/src/nf_modules/macs2/main.nf b/src/nf_modules/macs2/main.nf
index 139a8db66029324a2340be8ac9bb7b485e3c0baa..fddb38074775dd825d192bc0831ba455833b397d 100644
--- a/src/nf_modules/macs2/main.nf
+++ b/src/nf_modules/macs2/main.nf
@@ -1,9 +1,12 @@
 version = "2.1.2"
 container_url = "lbmc/macs2:${version}"
 
+params.macs_gsize=3e9
+params.macs_mfold=[5, 50]
+
 process peak_calling {
   container = "${container_url}"
-  label "big_mem_multi_cpus"
+  label "big_mem_mono_cpus"
   tag "${file_id}"
 
   input:
@@ -16,17 +19,54 @@ process peak_calling {
   script:
 /* remove --nomodel option for real dataset */
 """
-macs2 callpeak \
-  --treatment ${file_ip} \
-  --call-summits "True"\
-  --control ${file_control} \
-  --keep-dup "auto" \
+macs3 callpeak \
+  --treatment ${bam_ip} \
+  --call-summits \
+  --control ${bam_control} \
+  --keep-dup all \
+  --mfold params.macs_mfold[0] params.macs_mfold[1]
   --name ${bam_ip.simpleName} \
-  --gsize ${params.genome_size} 2> \
-  ${bam_ip.simpleName}_macs2_report.txt
+  --gsize ${params.macs_gsize} 2> \
+  ${bam_ip.simpleName}_macs3_report.txt
+
+if grep -q "ERROR" ${bam_ip.simpleName}_macs3_report.txt; then
+  echo "MACS3 error"
+  exit 1
+fi
+"""
+}
+
+process peak_calling_bg {
+  container = "${container_url}"
+  label "big_mem_mono_cpus"
+  tag "${file_id}"
+
+  input:
+    tuple val(file_id), path(bg_ip), path(bg_control)
+
+  output:
+    path "*", emit: peak
+    path "*_report.txt", emit: report
+
+  script:
+/* remove --nomodel option for real dataset */
+"""
+awk '{print \$1"\t"\$2"\t"\$3"\t.\t+\t"\$4}' ${bg_ip} > \
+  ${bg_ip.simpleName}.bed
+awk '{print \$1"\t"\$2"\t"\$3"\t.\t+\t"\$4}' ${bg_control} > \
+  ${bg_control.simpleName}.bed
+macs3 callpeak \
+  --treatment ${bg_ip.simpleName}.bed \
+  --call-summits \
+  --control ${bg_control.simpleName}.bed \
+  --keep-dup all \
+  --mfold params.macs_mfold[0] params.macs_mfold[1]
+  --name ${bg_ip.simpleName} \
+  --gsize ${params.macs_gsize} 2> \
+  ${bg_ip.simpleName}_macs3_report.txt
 
-if grep -q "ERROR" ${bam_ip.simpleName}_macs2_report.txt; then
-  echo "MACS2 error"
+if grep -q "ERROR" ${bg_ip.simpleName}_macs3_report.txt; then
+  echo "MACS3 error"
   exit 1
 fi
 """