diff --git a/workflow/modules.nf b/workflow/modules.nf
new file mode 100644
index 0000000000000000000000000000000000000000..25a294076e49a8103dc3a336f245aaa40996034b
--- /dev/null
+++ b/workflow/modules.nf
@@ -0,0 +1,115 @@
+process DEBUG_INFO {
+    output:
+    stdout
+
+    """
+    echo ""
+    echo "This script is running on:"
+    cat /etc/os-release
+    echo ""
+
+    echo "Test Parameters Provided:"
+    echo ""
+    printf '%-30s : %s\n' "source_entrypoint" "${params.source_entrypoint}"
+    printf '%-30s : %s\n' "profile" "${params.profile}"
+    printf '%-30s : %s\n' "input" "${params.input}"
+    printf '%-30s : %s\n' "fragment_size" "${params.fragment_size}"
+    printf '%-30s : %s\n' "read_length" "${params.read_length}"
+    printf '%-30s : %s\n' "with_control" "${params.with_control}"
+    printf '%-30s : %s\n' "multiqc_title" "${params.multiqc_title}"
+    printf '%-30s : %s\n' "genome" "${params.genome}"
+    printf '%-30s : %s\n' "fasta" "${params.fasta}"
+    printf '%-30s : %s\n' "gtf" "${params.gtf}"
+    printf '%-30s : %s\n' "gff" "${params.gff}"
+    printf '%-30s : %s\n' "bwa_index" "${params.bwa_index}"
+    printf '%-30s : %s\n' "bowtie2_index" "${params.bowtie2_index}"
+    printf '%-30s : %s\n' "chromap_index" "${params.chromap_index}"
+    printf '%-30s : %s\n' "gene_bed" "${params.gene_bed}"
+    printf '%-30s : %s\n' "tss_bed" "${params.tss_bed}"
+    printf '%-30s : %s\n' "blacklist" "${params.blacklist}"
+    printf '%-30s : %s\n' "mito_name" "${params.mito_name}"
+    printf '%-30s : %s\n' "keep_mito" "${params.keep_mito}"
+    printf '%-30s : %s\n' "ataqv_mito_reference" "${params.ataqv_mito_reference}"
+    printf '%-30s : %s\n' "clip_r1" "${params.clip_r1}"
+    printf '%-30s : %s\n' "clip_r2" "${params.clip_r2}"
+    printf '%-30s : %s\n' "three_prime_clip_r1" "${params.three_prime_clip_r1}"
+    printf '%-30s : %s\n' "three_prime_clip_r2" "${params.three_prime_clip_r2}"
+    printf '%-30s : %s\n' "trim_nextseq" "${params.trim_nextseq}"
+    printf '%-30s : %s\n' "min_trimmed_reads" "${params.min_trimmed_reads}"
+    printf '%-30s : %s\n' "skip_trimming" "${params.skip_trimming}"
+    printf '%-30s : %s\n' "aligner" "${params.aligner}"
+    printf '%-30s : %s\n' "keep_dups" "${params.keep_dups}"
+    printf '%-30s : %s\n' "keep_multi_map" "${params.keep_multi_map}"
+    printf '%-30s : %s\n' "skip_merge_replicates" "${params.skip_merge_replicates}"
+    printf '%-30s : %s\n' "narrow_peak" "${params.narrow_peak}"
+    printf '%-30s : %s\n' "broad_cutoff" "${params.broad_cutoff}"
+    printf '%-30s : %s\n' "macs_fdr" "${params.macs_fdr}"
+    printf '%-30s : %s\n' "macs_pvalue" "${params.macs_pvalue}"
+    printf '%-30s : %s\n' "min_reps_consensus" "${params.min_reps_consensus}"
+    printf '%-30s : %s\n' "skip_peak_qc" "${params.skip_peak_qc}"
+    printf '%-30s : %s\n' "skip_peak_annotation" "${params.skip_peak_annotation}"
+    printf '%-30s : %s\n' "skip_consensus_peak" "${params.skip_consensus_peak}"
+    printf '%-30s : %s\n' "deseq2_vst" "${params.deseq2_vst}"
+    printf '%-30s : %s\n' "skip_deseq2_qc" "${params.skip_deseq2_qc}"
+    printf '%-30s : %s\n' "skip_fastqc" "${params.skip_fastqc}"
+    printf '%-30s : %s\n' "skip_picard_metrics" "${params.skip_picard_metrics}"
+    printf '%-30s : %s\n' "skip_preseq" "${params.skip_preseq}"
+    printf '%-30s : %s\n' "skip_plot_profile" "${params.skip_plot_profile}"
+    printf '%-30s : %s\n' "skip_plot_fingerprint" "${params.skip_plot_fingerprint}"
+    printf '%-30s : %s\n' "skip_igv" "${params.skip_igv}"
+    printf '%-30s : %s\n' "skip_multiqc" "${params.skip_multiqc}"
+    printf '%-30s : %s\n' "skip_qc" "${params.skip_qc}"
+    printf '%-30s : %s\n' "skip_ataqv" "${params.skip_ataqv}"
+    printf '%-30s : %s\n' "multiqc_methods_description" "${params.multiqc_methods_description}"
+    """
+}
+
+process PARAMS {
+    input:
+    val validate_params
+
+    output:
+    stdout
+
+    script:
+    """
+
+    echo \"${validate_params}\" | sed "s/, / /g" | tr -d "[" | tr -d "]" | tr -d "{" | tr -d "}" | sed "s/--source_entrypoint ${params.source_entrypoint} //g" | tr -d "\\n"
+
+    """
+}
+
+process RUN_SOURCE {
+    publishDir params.results, mode: 'copy'
+
+    input:
+    file inputfile
+    file reads
+    val options
+
+    output:
+    file("nfcore_atacseq_runner.out")
+    path("nfcore_output/bwa/")
+    path("nfcore_output/fastqc/")
+    path("nfcore_output/genome/")
+    path("nfcore_output/igv/")
+    path("nfcore_output/multiqc/")
+    path("nfcore_output/pipeline_info/")
+    path("nfcore_output/trimgalore/")
+    
+    script:
+    """
+    module load ${params.singularity}
+
+    Cmd="$baseDir/../workflow/external_repo/nfcore_atacseq_runner/${params.source_entrypoint} --workdir ${baseDir} ${options}"
+    
+    echo "The command passed to runner is:"
+    echo ""
+    echo "\${Cmd}" 
+    echo ""
+
+    # run the command
+    eval \${Cmd} &> nfcore_atacseq_runner.out
+
+    """
+}