[med-svn] [adapterremoval] 01/05: New upstream version 2.2.1

Andreas Tille tille at debian.org
Thu Jun 22 07:15:03 UTC 2017


This is an automated email from the git hooks/post-receive script.

tille pushed a commit to branch master
in repository adapterremoval.

commit b0e59310daadd0437c1d9ba778bfd76eda57e866
Author: Andreas Tille <tille at debian.org>
Date:   Thu Jun 22 08:52:08 2017 +0200

    New upstream version 2.2.1
---
 .gitignore                                         |   1 -
 .travis.yml                                        |  20 ++
 AdapterRemoval.pod                                 |  44 ++--
 CHANGES.md                                         |  19 +-
 Makefile                                           |  22 +-
 README.md                                          |  38 +++-
 benchmark/benchmark.sh                             |   2 +-
 benchmark/scripts/evaluate.py                      |   2 +-
 benchmark/scripts/evaluate_dmux.py                 |   2 +-
 benchmark/scripts/evaluate_id.py                   |   2 +-
 benchmark/scripts/extend_profile.py                |   2 +-
 benchmark/scripts/merge_tables.py                  |   2 +-
 benchmark/scripts/shuffle_fasta.py                 |   2 +-
 benchmark/scripts/tabulate.py                      |   2 +-
 src/adapterset.cc                                  |   2 +-
 src/adapterset.h                                   |   6 +-
 src/alignment.h                                    |   4 +-
 src/argparse.cc                                    |  66 +++++-
 src/argparse.h                                     |  52 ++++-
 src/debug.h                                        |  11 +-
 src/demultiplex.cc                                 |  15 +-
 src/demultiplex.h                                  |   9 +-
 src/fastq.cc                                       | 113 ++++++++--
 src/fastq.h                                        |  39 +++-
 src/fastq_enc.h                                    |   4 +-
 src/fastq_io.cc                                    |  52 +++--
 src/fastq_io.h                                     |  32 ++-
 src/linereader.cc                                  |   4 +-
 src/linereader.h                                   |   6 +-
 src/{threads.cc => linereader_joined.cc}           |  68 +++---
 src/{debug.h => linereader_joined.h}               |  80 +++----
 src/main.h                                         |   2 +-
 src/main_adapter_id.cc                             |  14 +-
 src/main_adapter_rm.cc                             |  26 ++-
 src/main_demultiplex.cc                            |   8 +-
 src/scheduler.cc                                   |   6 +-
 src/scheduler.h                                    |  10 +-
 src/strutils.h                                     |   6 +-
 src/threads.cc                                     |  14 +-
 src/threads.h                                      |  15 +-
 src/timer.cc                                       |   3 +-
 src/userconfig.cc                                  |  72 ++++---
 src/userconfig.h                                   |   7 +-
 tests/alignment_test.cc                            |   1 +
 tests/argparse_test.cc                             | 124 +++++++++++
 tests/fastq_test.cc                                | 229 ++++++++++++++++++---
 src/main.h => tests/testing.h                      |  34 ++-
 .../pe/collapse/your_output.sample_1.settings      |   3 +-
 .../pe/collapse/your_output.sample_2.settings      |   3 +-
 .../pe/collapse/your_output.settings               |   3 +-
 .../combined_output/your_output.sample_1.settings  |   3 +-
 .../combined_output/your_output.sample_2.settings  |   3 +-
 .../pe/combined_output/your_output.settings        |   3 +-
 .../pe/defaults/your_output.sample_1.settings      |   3 +-
 .../pe/defaults/your_output.sample_2.settings      |   3 +-
 .../pe/defaults/your_output.settings               |   3 +-
 .../interleaved/both/your_output.sample_1.settings |   3 +-
 .../interleaved/both/your_output.sample_2.settings |   3 +-
 .../pe/interleaved/both/your_output.settings       |   3 +-
 .../output/your_output.sample_1.settings           |   3 +-
 .../output/your_output.sample_2.settings           |   3 +-
 .../pe/interleaved/output/your_output.settings     |   3 +-
 .../double_indexed/pe/multiple_input/barcodes.txt  |   2 +
 .../double_indexed/pe/multiple_input/info.json     |   6 +
 .../pe/multiple_input/input_1a.fastq               |  12 ++
 .../pe/multiple_input/input_1b.fastq               |  12 ++
 .../pe/multiple_input/input_1c.fastq               |   8 +
 .../pe/multiple_input/input_2a.fastq               |  12 ++
 .../pe/multiple_input/input_2b.fastq               |  12 ++
 .../pe/multiple_input/input_2c.fastq               |   8 +
 .../multiple_input/your_output.sample_1.discarded  |   8 +
 .../your_output.sample_1.pair1.truncated           |  12 ++
 .../your_output.sample_1.pair2.truncated           |  12 ++
 .../your_output.sample_1.settings                  |   3 +-
 .../your_output.sample_1.singleton.truncated       |   0
 .../multiple_input/your_output.sample_2.discarded  |   8 +
 .../your_output.sample_2.pair1.truncated           |  12 ++
 .../your_output.sample_2.pair2.truncated           |  12 ++
 .../your_output.sample_2.settings                  |   3 +-
 .../your_output.sample_2.singleton.truncated       |   0
 .../one => multiple_input}/your_output.settings    |   3 +-
 .../pe/multiple_input/your_output.unidentified_1   |   0
 .../pe/multiple_input/your_output.unidentified_2   |   0
 .../pe/threads/one/your_output.sample_1.settings   |   3 +-
 .../pe/threads/one/your_output.sample_2.settings   |   3 +-
 .../pe/threads/one/your_output.settings            |   3 +-
 .../pe/threads/three/your_output.sample_1.settings |   3 +-
 .../pe/threads/three/your_output.sample_2.settings |   3 +-
 .../pe/threads/three/your_output.settings          |   3 +-
 .../pe/threads/two/your_output.sample_1.settings   |   3 +-
 .../pe/threads/two/your_output.sample_2.settings   |   3 +-
 .../pe/threads/two/your_output.settings            |   3 +-
 .../se/collapse/your_output.sample_1.settings      |   3 +-
 .../se/collapse/your_output.sample_2.settings      |   3 +-
 .../se/collapse/your_output.settings               |   3 +-
 .../combined_output/your_output.sample_1.settings  |   3 +-
 .../combined_output/your_output.sample_2.settings  |   3 +-
 .../se/combined_output/your_output.settings        |   3 +-
 .../se/defaults/your_output.sample_1.settings      |   3 +-
 .../se/defaults/your_output.sample_2.settings      |   3 +-
 .../se/defaults/your_output.settings               |   3 +-
 .../double_indexed/se/multiple_input/barcodes.txt  |   2 +
 .../double_indexed/se/multiple_input/info.json     |   6 +
 .../se/multiple_input/input_1a.fastq               |  13 ++
 .../se/multiple_input/input_1b.fastq               |  12 ++
 .../se/multiple_input/input_1c.fastq               |   8 +
 .../multiple_input/your_output.sample_1.discarded  |   4 +
 .../your_output.sample_1.settings                  |   3 +-
 .../multiple_input/your_output.sample_1.truncated  |  12 ++
 .../multiple_input/your_output.sample_2.discarded  |   4 +
 .../your_output.sample_2.settings                  |   3 +-
 .../multiple_input/your_output.sample_2.truncated  |  12 ++
 .../three => multiple_input}/your_output.settings  |   3 +-
 .../se/multiple_input/your_output.unidentified     |   0
 .../se/threads/one/your_output.sample_1.settings   |   3 +-
 .../se/threads/one/your_output.sample_2.settings   |   3 +-
 .../se/threads/one/your_output.settings            |   3 +-
 .../se/threads/three/your_output.sample_1.settings |   3 +-
 .../se/threads/three/your_output.sample_2.settings |   3 +-
 .../se/threads/three/your_output.settings          |   3 +-
 .../se/threads/two/your_output.sample_1.settings   |   3 +-
 .../se/threads/two/your_output.sample_2.settings   |   3 +-
 .../se/threads/two/your_output.settings            |   3 +-
 .../pe/collapse/your_output.sample_1.settings      |   3 +-
 .../pe/collapse/your_output.sample_2.settings      |   3 +-
 .../pe/collapse/your_output.settings               |   3 +-
 .../combined_output/your_output.sample_1.settings  |   3 +-
 .../combined_output/your_output.sample_2.settings  |   3 +-
 .../pe/combined_output/your_output.settings        |   3 +-
 .../pe/defaults/your_output.sample_1.settings      |   3 +-
 .../pe/defaults/your_output.sample_2.settings      |   3 +-
 .../pe/defaults/your_output.settings               |   3 +-
 .../interleaved/both/your_output.sample_1.settings |   3 +-
 .../interleaved/both/your_output.sample_2.settings |   3 +-
 .../pe/interleaved/both/your_output.settings       |   3 +-
 .../output/your_output.sample_1.settings           |   3 +-
 .../output/your_output.sample_2.settings           |   3 +-
 .../pe/interleaved/output/your_output.settings     |   3 +-
 .../single_indexed/pe/multiple_input/barcodes.txt  |   2 +
 .../single_indexed/pe/multiple_input/info.json     |   6 +
 .../pe/multiple_input/input_1a.fastq               |  12 ++
 .../pe/multiple_input/input_1b.fastq               |  12 ++
 .../pe/multiple_input/input_1c.fastq               |   8 +
 .../pe/multiple_input/input_2a.fastq               |  12 ++
 .../pe/multiple_input/input_2b.fastq               |  12 ++
 .../pe/multiple_input/input_2c.fastq               |   8 +
 .../multiple_input/your_output.sample_1.discarded  |   8 +
 .../your_output.sample_1.pair1.truncated           |  12 ++
 .../your_output.sample_1.pair2.truncated           |  12 ++
 .../your_output.sample_1.settings                  |   3 +-
 .../your_output.sample_1.singleton.truncated       |   0
 .../multiple_input/your_output.sample_2.discarded  |   8 +
 .../your_output.sample_2.pair1.truncated           |  12 ++
 .../your_output.sample_2.pair2.truncated           |  12 ++
 .../your_output.sample_2.settings                  |   3 +-
 .../your_output.sample_2.singleton.truncated       |   0
 .../output => multiple_input}/your_output.settings |   3 +-
 .../pe/multiple_input/your_output.unidentified_1   |   0
 .../pe/multiple_input/your_output.unidentified_2   |   0
 .../pe/threads/one/your_output.sample_1.settings   |   3 +-
 .../pe/threads/one/your_output.sample_2.settings   |   3 +-
 .../pe/threads/one/your_output.settings            |   3 +-
 .../pe/threads/three/your_output.sample_1.settings |   3 +-
 .../pe/threads/three/your_output.sample_2.settings |   3 +-
 .../pe/threads/three/your_output.settings          |   3 +-
 .../pe/threads/two/your_output.sample_1.settings   |   3 +-
 .../pe/threads/two/your_output.sample_2.settings   |   3 +-
 .../pe/threads/two/your_output.settings            |   3 +-
 .../se/collapse/your_output.sample_1.settings      |   3 +-
 .../se/collapse/your_output.sample_2.settings      |   3 +-
 .../se/collapse/your_output.settings               |   3 +-
 .../combined_output/your_output.sample_1.settings  |   3 +-
 .../combined_output/your_output.sample_2.settings  |   3 +-
 .../se/combined_output/your_output.settings        |   3 +-
 .../se/defaults/your_output.sample_1.settings      |   3 +-
 .../se/defaults/your_output.sample_2.settings      |   3 +-
 .../se/defaults/your_output.settings               |   3 +-
 .../single_indexed/se/multiple_input/barcodes.txt  |   2 +
 .../single_indexed/se/multiple_input/info.json     |   6 +
 .../se/multiple_input/input_1a.fastq               |   8 +
 .../se/multiple_input/input_1b.fastq               |  12 ++
 .../se/multiple_input/input_1c.fastq               |  12 ++
 .../multiple_input/your_output.sample_1.discarded  |   4 +
 .../your_output.sample_1.settings                  |   3 +-
 .../multiple_input/your_output.sample_1.truncated  |  12 ++
 .../multiple_input/your_output.sample_2.discarded  |   4 +
 .../your_output.sample_2.settings                  |   3 +-
 .../multiple_input/your_output.sample_2.truncated  |  12 ++
 .../three => multiple_input}/your_output.settings  |   3 +-
 .../se/multiple_input/your_output.unidentified     |   0
 .../se/threads/one/your_output.sample_1.settings   |   3 +-
 .../se/threads/one/your_output.sample_2.settings   |   3 +-
 .../se/threads/one/your_output.settings            |   3 +-
 .../se/threads/three/your_output.sample_1.settings |   3 +-
 .../se/threads/three/your_output.sample_2.settings |   3 +-
 .../se/threads/three/your_output.settings          |   3 +-
 .../se/threads/two/your_output.sample_1.settings   |   3 +-
 .../se/threads/two/your_output.sample_2.settings   |   3 +-
 .../se/threads/two/your_output.settings            |   3 +-
 validation/misc/bad_args/fewer_file1/info.json     |   7 +
 .../misc/bad_args/fewer_file1/input_1a.fastq       |  16 ++
 .../misc/bad_args/fewer_file1/input_1b.fastq       |  16 ++
 .../misc/bad_args/fewer_file1/input_2a.fastq       |  16 ++
 .../misc/bad_args/fewer_file1/input_2b.fastq       |  16 ++
 .../misc/bad_args/fewer_file1/input_2c.fastq       |   8 +
 validation/misc/bad_args/fewer_file2/info.json     |   7 +
 .../misc/bad_args/fewer_file2/input_1a.fastq       |  16 ++
 .../misc/bad_args/fewer_file2/input_1b.fastq       |  16 ++
 .../misc/bad_args/fewer_file2/input_2a.fastq       |  16 ++
 validation/misc/bad_args/file2_only/info.json      |   2 +-
 validation/misc/bad_args/negative_window/info.json |   7 +
 .../misc/bad_args/negative_window/input_1.fastq    |   8 +
 validation/misc/empty/pe/your_output.settings      |   3 +-
 validation/misc/empty/se/your_output.settings      |   3 +-
 .../non_overlapping/collapse/your_output.settings  |   3 +-
 .../combined_output/collapse/your_output.settings  |   3 +-
 .../interleaved/collapse/your_output.settings      |   3 +-
 .../interleaved/keep_both/your_output.settings     |   3 +-
 .../interleaved/keep_mate1/your_output.settings    |   7 +-
 .../interleaved/keep_mate2/your_output.settings    |   7 +-
 .../interleaved/keep_neither/your_output.settings  |   3 +-
 .../combined_output/keep_both/your_output.settings |   3 +-
 .../keep_mate1/your_output.settings                |   7 +-
 .../keep_mate2/your_output.settings                |   7 +-
 .../keep_neither/your_output.settings              |   3 +-
 .../crlf_newlines/your_output.settings             |   3 +-
 .../non_overlapping/defaults/your_output.settings  |   3 +-
 .../interleaved/both/your_output.settings          |   3 +-
 .../interleaved/output/your_output.settings        |   3 +-
 .../maxlength/both/your_output.settings            |   3 +-
 .../maxlength/mate1/your_output.settings           |   7 +-
 .../maxlength/mate2/your_output.settings           |   7 +-
 .../minlength/both/your_output.settings            |   3 +-
 .../minlength/mate1/your_output.settings           |   7 +-
 .../minlength/mate2/your_output.settings           |   7 +-
 .../trimns/excl_ns/your_output.settings            |   3 +-
 .../trimns/incl_ns/your_output.settings            |   3 +-
 .../trimqualities/default/your_output.settings     |   3 +-
 .../trimqualities/minq31/your_output.settings      |   3 +-
 .../overlapping/collapse/your_output.settings      |   3 +-
 .../combined_output/collapse/your_output.settings  |   3 +-
 .../interleaved/collapse/your_output.settings      |   3 +-
 .../interleaved/keep_both/your_output.settings     |   3 +-
 .../interleaved/keep_mate1/your_output.settings    |   7 +-
 .../interleaved/keep_mate2/your_output.settings    |   7 +-
 .../interleaved/keep_neither/your_output.settings  |   3 +-
 .../combined_output/keep_both/your_output.settings |   3 +-
 .../keep_mate1/your_output.settings                |   7 +-
 .../keep_mate2/your_output.settings                |   7 +-
 .../keep_neither/your_output.settings              |   3 +-
 .../overlapping/crlf_newlines/your_output.settings |   3 +-
 .../overlapping/defaults/your_output.settings      |   3 +-
 .../interleaved/both/your_output.settings          |   3 +-
 .../interleaved/output/your_output.settings        |   3 +-
 .../maxlength/both/your_output.settings            |   3 +-
 .../maxlength/mate1/your_output.settings           |   7 +-
 .../maxlength/mate2/your_output.settings           |   7 +-
 .../minlength/both/your_output.settings            |   3 +-
 .../minlength/mate1/your_output.settings           |   7 +-
 .../minlength/mate2/your_output.settings           |   7 +-
 .../trimns/excl_ns/your_output.settings            |   3 +-
 .../trimns/incl_ns/your_output.settings            |   3 +-
 .../trimqualities/default/your_output.settings     |   3 +-
 .../trimqualities/minq31/your_output.settings      |   3 +-
 .../pe/incl_adapter/collapse/your_output.settings  |   3 +-
 .../collapse_truncated/your_output.settings        |   3 +-
 .../combined_output/collapse/your_output.settings  |   3 +-
 .../collapse_truncated/your_output.settings        |   3 +-
 .../interleaved/collapse/your_output.settings      |   3 +-
 .../collapse_truncated/your_output.settings        |   3 +-
 .../interleaved/keep_both/your_output.settings     |   3 +-
 .../interleaved/keep_mate1/your_output.settings    |   7 +-
 .../interleaved/keep_mate2/your_output.settings    |   7 +-
 .../interleaved/keep_neither/your_output.settings  |   3 +-
 .../combined_output/keep_both/your_output.settings |   3 +-
 .../keep_mate1/your_output.settings                |   7 +-
 .../keep_mate2/your_output.settings                |   7 +-
 .../keep_neither/your_output.settings              |   3 +-
 .../crlf_newlines/your_output.settings             |   3 +-
 .../pe/incl_adapter/defaults/your_output.settings  |   3 +-
 .../maxlength/both/your_output.settings            |   3 +-
 .../maxlength/mate1/your_output.settings           |   7 +-
 .../maxlength/mate2/your_output.settings           |   7 +-
 .../minlength/both/your_output.settings            |   3 +-
 .../minlength/mate1/your_output.settings           |   7 +-
 .../minlength/mate2/your_output.settings           |   7 +-
 .../pe/incl_adapter/multiple_input/info.json       |   6 +
 .../pe/incl_adapter/multiple_input/input_1a.fastq  |  16 ++
 .../pe/incl_adapter/multiple_input/input_1b.fastq  |  16 ++
 .../pe/incl_adapter/multiple_input/input_1c.fastq  |   8 +
 .../pe/incl_adapter/multiple_input/input_2a.fastq  |  16 ++
 .../pe/incl_adapter/multiple_input/input_2b.fastq  |  16 ++
 .../pe/incl_adapter/multiple_input/input_2c.fastq  |   8 +
 .../multiple_input/your_output.discarded           |   0
 .../multiple_input/your_output.pair1.truncated     |  40 ++++
 .../multiple_input/your_output.pair2.truncated     |  40 ++++
 .../multiple_input}/your_output.settings           |  25 +--
 .../multiple_input/your_output.singleton.truncated |   0
 .../incl_adapter/threads/one/your_output.settings  |   3 +-
 .../threads/three/your_output.settings             |   3 +-
 .../incl_adapter/threads/two/your_output.settings  |   3 +-
 .../trimns/excl_ns/your_output.settings            |   3 +-
 .../trimns/incl_ns/your_output.settings            |   3 +-
 .../trimqualities/default/your_output.settings     |   3 +-
 .../trimqualities/minq35/your_output.settings      |   3 +-
 .../pe/only_adapter/collapse/your_output.settings  |   3 +-
 .../combined_output/collapse/your_output.settings  |   3 +-
 .../combined_output/defaults/your_output.settings  |   3 +-
 .../crlf_newlines/your_output.settings             |   3 +-
 .../pe/only_adapter/defaults/your_output.settings  |   3 +-
 .../pe/only_adapter/minlength/your_output.settings |   3 +-
 validation/run                                     | 116 ++++++-----
 .../se/excl_adapter/collapse/your_output.settings  |   3 +-
 .../combined_output/collapse/your_output.settings  |   3 +-
 .../combined_output/discarded/your_output.settings |   3 +-
 .../combined_output/retained/your_output.settings  |   3 +-
 .../crlf_newlines/your_output.settings             |   3 +-
 .../se/excl_adapter/defaults/your_output.settings  |   3 +-
 .../se/excl_adapter/maxlength/your_output.settings |   3 +-
 .../se/excl_adapter/minlength/your_output.settings |   3 +-
 .../trimns/excl_ns/your_output.settings            |   3 +-
 .../trimns/incl_ns/your_output.settings            |   3 +-
 .../trimqualities/default/your_output.settings     |   3 +-
 .../trimqualities/minq31/your_output.settings      |   3 +-
 .../se/incl_adapter/collapse/your_output.settings  |   3 +-
 .../collapse_truncated/your_output.settings        |   3 +-
 .../combined_output/collapse/your_output.settings  |   3 +-
 .../collapse_truncated/your_output.settings        |   3 +-
 .../combined_output/discarded/your_output.settings |   3 +-
 .../combined_output/retained/your_output.settings  |   3 +-
 .../crlf_newlines/your_output.settings             |   3 +-
 .../se/incl_adapter/defaults/your_output.settings  |   3 +-
 .../se/incl_adapter/maxlength/your_output.settings |   3 +-
 .../se/incl_adapter/minlength/your_output.settings |   3 +-
 .../se/incl_adapter/multiple_input/info.json       |   6 +
 .../se/incl_adapter/multiple_input/input_1a.fastq  |  16 ++
 .../se/incl_adapter/multiple_input/input_1b.fastq  |  16 ++
 .../se/incl_adapter/multiple_input/input_1c.fastq  |   8 +
 .../multiple_input/your_output.discarded           |   0
 .../multiple_input}/your_output.settings           |  29 +--
 .../multiple_input/your_output.truncated           |  40 ++++
 .../incl_adapter/threads/one/your_output.settings  |   3 +-
 .../threads/three/your_output.settings             |   3 +-
 .../incl_adapter/threads/two/your_output.settings  |   3 +-
 .../trimns/excl_ns/your_output.settings            |   3 +-
 .../trimns/incl_ns/your_output.settings            |   3 +-
 .../trimqualities/default/your_output.settings     |   3 +-
 .../trimqualities/minq36/your_output.settings      |   3 +-
 .../se/only_adapter/collapse/your_output.settings  |   3 +-
 .../combined_output/discarded/your_output.settings |   3 +-
 .../combined_output/retained/your_output.settings  |   3 +-
 .../crlf_newlines/your_output.settings             |   3 +-
 .../se/only_adapter/defaults/your_output.settings  |   3 +-
 .../se/only_adapter/minlength/your_output.settings |   3 +-
 validation/trimwindows/pe/excl_n/info.json         |   6 +
 validation/trimwindows/pe/excl_n/input_1.fastq     |   4 +
 validation/trimwindows/pe/excl_n/input_2.fastq     |   4 +
 .../trimwindows/pe/excl_n/your_output.discarded    |   4 +
 .../pe/excl_n/your_output.pair1.truncated          |   0
 .../pe/excl_n/your_output.pair2.truncated          |   0
 .../pe/excl_n}/your_output.settings                |  41 +---
 .../pe/excl_n/your_output.singleton.truncated      |   4 +
 validation/trimwindows/pe/incl_n/info.json         |   6 +
 validation/trimwindows/pe/incl_n/input_1.fastq     |   4 +
 validation/trimwindows/pe/incl_n/input_2.fastq     |   4 +
 .../trimwindows/pe/incl_n/your_output.discarded    |   4 +
 .../pe/incl_n/your_output.pair1.truncated          |   0
 .../pe/incl_n/your_output.pair2.truncated          |   0
 .../pe/incl_n}/your_output.settings                |  42 +---
 .../pe/incl_n/your_output.singleton.truncated      |   4 +
 validation/trimwindows/se/excl_n/info.json         |   6 +
 validation/trimwindows/se/excl_n/input_1.fastq     |   4 +
 .../trimwindows/se/excl_n/your_output.discarded    |   0
 .../se/excl_n}/your_output.settings                |  34 +--
 .../trimwindows/se/excl_n/your_output.truncated    |   4 +
 validation/trimwindows/se/incl_n/info.json         |   6 +
 validation/trimwindows/se/incl_n/input_1.fastq     |   4 +
 .../trimwindows/se/incl_n/your_output.discarded    |   0
 .../se/incl_n}/your_output.settings                |  36 +---
 .../trimwindows/se/incl_n/your_output.truncated    |   4 +
 380 files changed, 2483 insertions(+), 776 deletions(-)

diff --git a/.gitignore b/.gitignore
index 3670538..6964f6a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,3 @@
 build
-misc
 googletest-release*
 *~
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..e677399
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,20 @@
+language: cpp
+
+dist: trusty
+
+compiler:
+  - clang
+  - gcc
+
+addons:
+  apt:
+    packages:
+      - zlib1g-dev
+      - libbz2-dev
+
+install: true
+
+script:
+    - make
+    - make test
+    - make validate
diff --git a/AdapterRemoval.pod b/AdapterRemoval.pod
index 0c01b55..7ff5f02 100644
--- a/AdapterRemoval.pod
+++ b/AdapterRemoval.pod
@@ -6,31 +6,31 @@ AdapterRemoval - Remove adapters from sequences in either single end or paired e
 
 =head1 SYNOPSIS
 
-B<AdapterRemoval> --file1 filename [--file2 filename] [--interleaved] [--interleaved-input] [--interleaved-output] [--combined-output] [--basename filename] [--identify-adapters] [--trimns] [--maxns max] [--trimqualities] [--minquality minimum] [--collapse] [--version] [--mm mismatchrate] [--minlength len] [--minalignmentlength len] [--qualitybase base] [--qualitybase-output base] [--shift num] [--adapter1 sequence] [--adapter2 sequence] [--adapter-list filename] [--barcode-list filename [...]
+B<AdapterRemoval> --file1 filenames [--file2 filenames] [--interleaved] [--interleaved-input] [--interleaved-output] [--combined-output] [--basename filename] [--identify-adapters] [--trimns] [--maxns max] [--trimqualities] [--trimwindows length] [--minquality minimum] [--collapse] [--version] [--mm mismatchrate] [--minlength len] [--minalignmentlength len] [--qualitybase base] [--qualitybase-output base] [--shift num] [--adapter1 sequence] [--adapter2 sequence] [--adapter-list filename] [...]
 
 
 =head1 DESCRIPTION
 
-B<AdapterRemoval> reads either one FASTQ file (single ended mode) or two FASTQ files (paired ended mode). It removes the residual adapter sequence from the reads and optionally trims Ns from the reads, and low qualities bases using the quality string, and collapses overlapping paired ended mates into one read. Reads are discarded if the remaining genomic part is too short, or if the read contains more than an (user specified) amount of amigious nucleotides ('N'). These operations may be  [...]
+B<AdapterRemoval> reads either one FASTQ file (single ended mode) or two FASTQ files (paired ended mode). It removes the residual adapter sequence from the reads and optionally trims Ns from the reads, and low qualities bases using the quality string, and collapses overlapping paired ended mates into one read. Reads are discarded if the remaining genomic part is too short, or if the read contains more than an (user specified) amount of amigious nucleotides ('N'). These operations may be  [...]
 
-Alternatively, B<AdapterRemoval> may attempt to reconstruct a consensus adapter sequences from paired-ended data, in order to allow the identification of the adapter sequences originally used, and thereby ensure proper trimming of these reads.
-
-The reads and adapters are transformed to upper case for comparison. It is assumed that the letter 'N' is used for an unknown nucleotide, but in case the program encounters a '.' in the sequence, they will be treated as (and translated into) Ns. The program tries to check for invalid input and / or nonsensical combinations of parameters but please report strange behaviour, bugs and such to MSchubert at snm.ku.dk
+The reads and adapters are transformed to upper case for comparison. It is assumed that the letter 'N' is used for an unknown nucleotide, but in case the program encounters a '.' in the sequence, they will be treated as (and translated into) Ns. The program tries to check for invalid input and / or nonsensical combinations of parameters but please report strange behaviour, bugs and such to MikkelSch at gmail.com
 
 If you use this program, please cite the paper:
-Stinus Lindgreen (2012): AdapterRemoval: easy cleaning of next-generation sequencing reads. BMC Res Notes, 5:337. doi: 10.1186/1756-0500-5-337.
+
+Schubert, Lindgreen, and Orlando (2016). AdapterRemoval v2: rapid adapter trimming, identification, and read merging. BMC Research Notes, 12;9(1):88
+http://bmcresnotes.biomedcentral.com/articles/10.1186/s13104-016-1900-2
 
 =head1 OPTIONS
 
 =over 9
 
-=item B<--file1> I<filename>
+=item B<--file1> I<filename> [...]
 
-Read FASTQ reads from file I<filename>. This contains either the single ended (SE) reads or, if paired ended, the mate 1 reads. If running in paired end mode, both file1 and file2 must be set. The file may optionally be gzip or bzip2 compressed.
+Read FASTQ reads from one or more files. This contains either the single ended (SE) reads or, if paired ended, the mate 1 reads. If running in paired end mode, both I<--file1> and I<--file2> must be set. The files may optionally be gzip or bzip2 compressed.
 
-=item B<--file2> I<filename>
+=item B<--file2> I<filename> [...]
 
-Read FASTQ file I<filename> containing mate 2 reads for a paired end run. If specified, --file1 must also be set. The file may optionally be gzip or bzip2 compressed.
+Read one or more FASTQ files containing mate 2 reads for a paired end run. If specified, --file1 must also be set. The files may optionally be gzip or bzip2 compressed.
 
 =item B<--interleaved>
 
@@ -42,11 +42,11 @@ If set, input is expected to be a single FASTQ file specified using I<--file1>,
 
 =item B<--interleaved-ouput>
 
-If set, and AdapterRemoval is processing paired-end reads, retained pairs of reads are written to a single FASTQ file, one pair after each otehr (read1/1, read1/2, read2/1, read2/2, etc.). By default, this file is named I<basename.paired.truncated>, but this may be changed using the I<--output1> option.
+If set, and AdapterRemoval is processing paired-end reads, retained pairs of reads are written to a single FASTQ file, one pair after each other (read1/1, read1/2, read2/1, read2/2, etc.). By default, this file is named I<basename.paired.truncated>, but this may be changed using the I<--output1> option.
 
 =item B<--combined-output>
 
-If set, all reads are written to the same file(s), specified by --output1 and --output2. Each read is futher marked by either a "PASSED" or a "FAILED" flag, and any read that has been FAILED (including the mate for collapsed reads) are replaced with a single 'N' with Phred score 0. This option can be combined with --interleaved / --interleaved-output to write all reads to a single output file specified with --output1.
+If set, all reads are written to the same file(s), specified by --output1 and --output2. Each read is further marked by either a "PASSED" or a "FAILED" flag, and any read that has been FAILED (including the mate for collapsed reads) are replaced with a single 'N' with Phred score 0. This option can be combined with --interleaved / --interleaved-output to write all reads to a single output file specified with --output1.
 
 =item B<--basename> I<filename>
 
@@ -68,6 +68,18 @@ If a read has more than I<max> Ns after trimming, it is discarded (default is no
 
 Remove consecutive stretches of low quality bases (threshold set by I<minquality>) from both the 5' and 3' end of the reads. All bases with I<minquality> or lower are trimmed. If trimming of Ns is also enabled, stretches of mixed low-quality bases and/or Ns are trimmed.
 
+=item B<--trimwindows> I<length>
+
+Remove low quality bases using a sliding window bases approach inspired by B<sickle>:
+
+B<1.> The new 5' is determined by locating the first window where both the average quality and the quality of the first base in the window is greater than I<minquality>.
+
+B<2.> The new 3' is located by sliding the first window right, until the average quality becomes less than or equal to I<minquality>. The new 3' is placed at the last base in that window where the quality is greater than or equal to I<minquality>.
+
+B<3.> If no 5' position could be determined, the read is discarded.
+
+The value of I<length> may be a number greater than or equal to 1, in which case that number (rounded down to the nearest whole number) is used as the window length, or it may be a value greater than or equal to zero. In the latter case, that number is multipled by the lenght of each read, to determine the window length. For example, a I<trimwindow> value of 0.1 and a read length of 100 would result in 10 bp windows. If the resulting window length is zero or is greater than the current r [...]
+
 =item B<--minquality> I<minimum>
 
 Set the threshold for trimming low quality bases. Default is 2. The minimum can be set with or without the Phred quality base.
@@ -318,7 +330,7 @@ Note that in the case of paired-end adapters, AdapterRemoval considers only the
 
 If we did not know the adapter sequences for paired-end reads, AdapterRemoval may be used to generate a consensus adapter sequence based on fragments identified as belonging to the adapters through pairwise alignments of the reads, provided that the data set contains only a single adpater sequence (not counting differences in index sequences).
 
-In the following example, the identified adapters corresponds to the default adapter sequences with a poly-A tail resulting from sequencing past the end of the insert + templates. It is not nessesary to specify this tail when using the I<--adapter1> or I<--adapter2> command-line options. The characters shown under each of the consensus sequences represented the phred-encoded fraction of bases identical to the consensus base, with adapter 1 containing the index CACCTA:
+In the following example, the identified adapters corresponds to the default adapter sequences with a poly-A tail resulting from sequencing past the end of the insert + templates. It is not necessary to specify this tail when using the I<--adapter1> or I<--adapter2> command-line options. The characters shown under each of the consensus sequences represented the phred-encoded fraction of bases identical to the consensus base, with adapter 1 containing the index CACCTA:
 
     $ AdapterRemoval --identify-adapters --file1 reads_1.fq --file2 reads_2.fq
 
@@ -401,7 +413,7 @@ Trimming and filtering related options to not apply to this mode ("TRIMMING SETT
 
 =head1 REPORTING BUGS
 
-Report bugs to Mikkel Schubert <MSchubert at snm.ku.dk>.
+Report bugs to Mikkel Schubert <MikkelSch at gmail.com>.
 
 Your bugreport should always include:
 
@@ -426,14 +438,14 @@ Copyright (C) 2011 Stinus Lindgreen <stinus at binf.ku.dk>.
 
 Parts of the manual was written by Ole Tange <tange at binf.ku.dk>.
 
-Parts of the manual was written by Mikkel Schubert <MSchubert at snm.ku.dk>.
+Parts of the manual was written by Mikkel Schubert <MikkelSch at gmail.com>.
 
 
 =head1 LICENSE
 
 Copyright (C) 2011 Stinus Lindgreen <stinus at binf.ku.dk>.
 
-Copyright (C) 2014 Mikkel Schubert <MSchubert at snm.ku.dk>.
+Copyright (C) 2014 Mikkel Schubert <MikkelSch at gmail.com>.
 
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
diff --git a/CHANGES.md b/CHANGES.md
index b35c8b5..445777e 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,3 +1,18 @@
+### Version 2.2.1 - 2017-05-15
+
+  * Numerous spelling errors fixed courtesy of Andreas Tille.
+  * Added support for specifying multiple filenames after --file1 and --file2,
+    in which case the files are treated as if they were concatenated. This is
+    supported for all operations. Special thanks to Stephen Clayton.
+  * Added additional run-time checks to catch race-conditions.
+  * Progress messages written to STDERR no longer cause subsequent error
+    messages to be written to the same line.
+  * Implemented quality trimming using a sliding window approach inspired by
+    sickle (https://github.com/najoshi/sickle). Special thanks to Kevin Murray.
+  * Fixed miscounting of the total number of retained nucleotides, where mate 1
+    reads were being counted twice instead of counting both mate 1 and mate 2.
+
+
 ### Version 2.2.0 - 2016-10-27
 
   * AdapterRemoval now requires a C++11 compliant compiler; furthermore,
@@ -162,7 +177,7 @@ Major changes:
     specified format/offset, and more.
   * Limited support for Solexa quality scores; these are converted to and
     saved as Phred+33 or Phred+64 encoded scores.
-  * Improved handling of asymetric read-pairs, in which the length of the
+  * Improved handling of asymmetric read-pairs, in which the length of the
     mate 1 read differs from the length of the mate 2 read.
   * Significant improvements in performance, resulting in a ~5x increase in the
     rate of adapter trimming in basic version, and a ~20x increase in the rate
@@ -170,7 +185,7 @@ Major changes:
   * Support for multiple adapter sequences as well as multiple barcode
     sequences; AdapterRemoval will favor the highest scoring alignment,
     favoring longer alignments over shorter alignments with the same score,
-    and favoring alignments with the fewest ambigous bases (N) involved if
+    and favoring alignments with the fewest ambiguous bases (N) involved if
     the score and length is identical.
   * If --collapse is set in single-ended mode, "collapsed" reads will be
     identified using the same criteria as for paired-ended mode, i.e. requiring
diff --git a/Makefile b/Makefile
index 2418e3f..c2015fe 100644
--- a/Makefile
+++ b/Makefile
@@ -86,6 +86,7 @@ LIBOBJS  := $(BDIR)/adapterset.o \
             $(BDIR)/fastq_enc.o \
             $(BDIR)/fastq_io.o \
             $(BDIR)/linereader.o \
+            $(BDIR)/linereader_joined.o \
             $(BDIR)/main_adapter_id.o \
             $(BDIR)/main_adapter_rm.o \
             $(BDIR)/main_demultiplex.o \
@@ -109,6 +110,7 @@ everything: all static test validation
 clean: clean_tests
 	@echo $(COLOR_GREEN)"Cleaning ..."$(COLOR_END)
 	$(QUIET) rm -f build/$(PROG) build/$(PROG).1 build/$(LIBNAME).a
+	$(QUIET) rm -rvf build/validation
 	$(QUIET) rm -rvf $(BDIR)
 
 # Install
@@ -178,11 +180,11 @@ TEST_OBJS := $(TEST_DIR)/alignment.o \
              $(TEST_DIR)/strutils_test.o
 TEST_DEPS := $(TEST_OBJS:.o=.deps)
 
-GTEST_DIR := googletest-release-1.7.0
+GTEST_DIR := googletest-release-1.8.0/googletest
 GTEST_OBJS := $(TEST_DIR)/gtest-all.o $(TEST_DIR)/gtest_main.o
 GTEST_LIB := $(TEST_DIR)/libgtest.a
 
-TEST_CXXFLAGS := -isystem $(GTEST_DIR)/include -I$(GTEST_DIR) -Isrc -DAR_TEST_BUILD
+TEST_CXXFLAGS := -isystem $(GTEST_DIR)/include -I$(GTEST_DIR) -Isrc -DAR_TEST_BUILD -g
 GTEST_CXXFLAGS := $(TEST_CXXFLAGS)
 
 test: $(TEST_DIR)/main
@@ -219,24 +221,24 @@ $(TEST_DIR)/gtest%.o: $(GTEST_DIR)/src/gtest%.cc
 	$(QUIET) $(CXX) $(GTEST_CXXFLAGS) -c $< -o $@
 
 .PRECIOUS: $(GTEST_DIR)/src/gtest%.cc
-$(GTEST_DIR)/src/gtest%.cc: googletest-release-1.7.0.zip
+$(GTEST_DIR)/src/gtest%.cc: googletest-release-1.8.0.zip
 	$(QUIET) if ! test -e "$@"; \
 	then \
 		echo $(COLOR_CYAN)"Unpacking Google Test library"$(COLOR_END); \
-		unzip -qo googletest-release-1.7.0.zip; \
+		unzip -qo googletest-release-1.8.0.zip; \
 	fi
 
-googletest-release-1.7.0.zip:
+googletest-release-1.8.0.zip:
 ifneq ("$(shell which wget)", "")
 	@echo $(COLOR_CYAN)"Fetching Google Test library using wget"$(COLOR_END)
-	$(QUIET) wget -q https://github.com/google/googletest/archive/release-1.7.0.zip -O googletest-release-1.7.0.zip
+	$(QUIET) wget -q https://github.com/google/googletest/archive/release-1.8.0.zip -O googletest-release-1.8.0.zip
 else ifneq ("$(shell which curl)", "")
 	@echo $(COLOR_CYAN)"Fetching Google Test library using curl"$(COLOR_END)
-	$(QUIET) curl -L https://github.com/google/googletest/archive/release-1.7.0.zip -o googletest-release-1.7.0.zip
+	$(QUIET) curl -L https://github.com/google/googletest/archive/release-1.8.0.zip -o googletest-release-1.8.0.zip
 else
-	@echo $(COLOR_YELLOW)"To run tests, first download and unpack GoogleTest 1.7.0 in this folder:"$(COLOR_END)
-	@echo $(COLOR_YELLOW)"  $$ wget https://github.com/google/googletest/archive/release-1.7.0.zip -O googletest-release-1.7.0.zip"$(COLOR_END)
-	@echo $(COLOR_YELLOW)"  $$ unzip googletest-release-1.7.0.zip"$(COLOR_END)
+	@echo $(COLOR_YELLOW)"To run tests, first download and unpack GoogleTest 1.8.0 in this folder:"$(COLOR_END)
+	@echo $(COLOR_YELLOW)"  $$ wget https://github.com/google/googletest/archive/release-1.8.0.zip -O googletest-release-1.8.0.zip"$(COLOR_END)
+	@echo $(COLOR_YELLOW)"  $$ unzip googletest-release-1.8.0.zip"$(COLOR_END)
 	@exit 1
 endif
 
diff --git a/README.md b/README.md
index 76fc45d..3a71579 100644
--- a/README.md
+++ b/README.md
@@ -13,6 +13,20 @@ AdapterRemoval was originally published in Lindgreen 2012:
     http://www.biomedcentral.com/1756-0500/5/337/
 
 
+## Overview of major features
+
+ - Trimming of adapters sequences from single-end and paired-end FASTQ reads.
+ - Trimming of multiple, different adapters or adapter pairs.
+ - Demultiplexing of single or double indexed reads, with or without trimming
+   of adapter sequences.
+ - Reconstruction of adapter sequences from paired-end reads, by the pairwise
+   alignment of reads in the absence of a known adapter sequence.
+ - Merging of overlapping read-pairs into higher-quality consensus sequences.
+ - Multi-threading of all operations for increased throughput.
+ - Reading and writing of gzip and bzip2 compressed files.
+ - Reading and writing of interleaved FASTQ files.
+
+
 ## Installation
 
 To install, first download and unpack the newest release from GitHub:
@@ -76,12 +90,11 @@ The following command removes adapters from the file 'reads\_1.fq' trims both Ns
 
     $ AdapterRemoval --file1 reads_1.fq --basename output_single --trimns --trimqualities --gzip
 
-Since --gzip and --basename is specified, the trimmed FASTQ reads are written to 'output_single.truncated.gz', the dicarded FASTQ reads are written to 'output_single.discarded.gz', and settings and summary statistics are written to 'output_single.settings'.
+Since --gzip and --basename is specified, the trimmed FASTQ reads are written to 'output_single.truncated.gz', the discarded FASTQ reads are written to 'output_single.discarded.gz', and settings and summary statistics are written to 'output_single.settings'.
 
 Note that by default, AdapterRemoval does not require a minimum number of bases overlapping with the adapter sequence, before reads are trimmed. This may result in an excess of very short (1 - 3 bp) 3' fragments being falsely identified as adapter sequences, and trimmed. This behavior may be changed using the --minadapteroverlap option, which allows the specification of a minimum number of bases (excluding Ns) that must be aligned to carry trimming. For example, use --minadapteroverlap 3 [...]
 
 
-
 ### Trimming paired-end reads
 
 The following command removes adapters from a paired-end reads, where the mate 1 and mate 2 reads are kept in files 'reads\_1.fq' and 'reads\_2.fq', respectively. The reads are trimmed for both Ns and low quality bases, and overlapping reads (at least 11 nucleotides, per default) are merged (collapsed):
@@ -91,6 +104,21 @@ The following command removes adapters from a paired-end reads, where the mate 1
 This command generates the files 'output_paired.pair1.truncated' and 'output_paired.pair2.truncated', which contain trimmed pairs of reads which were not collapsed, 'output_paired.singleton.truncated' containing reads where one mate was discarded, 'output_paired.collapsed' containing merged reads, and 'output_paired.collapsed.truncated' containing merged reads that have been trimmed due to the --trimns or --trimqualities options. Finally, the 'output_paired.discarded' and 'output_paired. [...]
 
 
+### Multiple input FASTQ files
+
+More than one input file may be specified for mate 1 and mate 2 reads. This is accomplished simply by listing more than one file after the --file1 and the --file2 options.
+
+For single-end reads:
+
+    $ AdapterRemoval --file1 reads_1a.fq reads_1b.fq reads_1c.fq
+
+And for paired-end reads:
+
+    $ AdapterRemoval --file1 reads_1a.fq reads_1b.fq reads_1c.fq --file2 reads_2a.fq reads_2b.fq reads_2c.fq
+
+AdapterRemoval will process these files as if they had been concatenated into a single file or pair of files prior to invoking AdapterRemoval. For paired reads, the files must be specified in the same order for --file1 and --file2.
+
+
 ### Interleaved FASTQ reads
 
 AdapterRemoval is able to read and write paired-end reads stored in a single, so-called interleaved FASTQ file (one pair at a time, first mate 1, then mate 2). This is accomplished by specifying the location of the file using --file1 and *also* setting the --interleaved command-line option:
@@ -145,9 +173,9 @@ Note that in the case of paired-end adapters, AdapterRemoval considers only the
 
 ### Identifying adapter sequences from paired-ended reads
 
-If we did not know the adapter sequences for the 'reads\_*.fq' files, AdapterRemoval may be used to generate a consensus adapter sequence based on fragments identified as belonging to the adapters through pairwise alignments of the reads, provided that the data set contains only a single adpater sequence (not counting differences in index sequences).
+If we did not know the adapter sequences for the 'reads\_*.fq' files, AdapterRemoval may be used to generate a consensus adapter sequence based on fragments identified as belonging to the adapters through pairwise alignments of the reads, provided that the data set contains only a single adapter sequence (not counting differences in index sequences).
 
-In the following example, the identified adapters corresponds to the default adapter sequences with a poly-A tail resulting from sequencing past the end of the insert + templates. It is not nessesary to specify this tail when using the --adapter1 or --adapter2 command-line options. The characters shown under each of the consensus sequences represented the phred-encoded fraction of bases identical to the consensus base, with adapter 1 containing the index CACCTA:
+In the following example, the identified adapters corresponds to the default adapter sequences with a poly-A tail resulting from sequencing past the end of the insert + templates. It is not necessary to specify this tail when using the --adapter1 or --adapter2 command-line options. The characters shown under each of the consensus sequences represented the phred-encoded fraction of bases identical to the consensus base, with adapter 1 containing the index CACCTA:
 
     $ AdapterRemoval --identify-adapters --file1 reads_1.fq --file2 reads_2.fq
 
@@ -225,7 +253,7 @@ As of version 2.2, AdapterRemoval can furthermore be used to demultiplex reads,
 
 Options listed under "TRIMMING SETTINGS" (see 'AdapterRemoval --help') do not apply to this mode, but compression (--gzip, --bzip2), multi-threading (--threads), interleaving (--interleaved, etc.) and other such options may be used in conjunction with --demultiplex-only.
 
-AdapterRemoval will generate a '.settings' file for each sample listed in the --barcode-list file, along with the adapter-sequences that should be used when trimming reads for a given sample. Thse adapters correspond to the adapters that were specified when running AdapterRemoval in demultiplexing mode, with the barcode prefixed as appropriate. An underscore is used to demarcate the location at which the barcode ends and the adapter beings.
+AdapterRemoval will generate a '.settings' file for each sample listed in the --barcode-list file, along with the adapter-sequences that should be used when trimming reads for a given sample. These adapters correspond to the adapters that were specified when running AdapterRemoval in demultiplexing mode, with the barcode prefixed as appropriate. An underscore is used to demarcate the location at which the barcode ends and the adapter beings.
 
 It is important to use these, updated, adapter sequences when trimming the demultiplexed reads, to avoid the inclusion of barcode sequences in reads extending past the 3' termini of the DNA template sequence.
 
diff --git a/benchmark/benchmark.sh b/benchmark/benchmark.sh
index bad6fb2..1cfe68a 100644
--- a/benchmark/benchmark.sh
+++ b/benchmark/benchmark.sh
@@ -1,6 +1,6 @@
 #!/bin/bash
 #
-# Copyright (c) 2015 Mikkel Schubert <MSchubert at snm.ku.dk>
+# Copyright (c) 2015 Mikkel Schubert <MikkelSch at gmail.com>
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal
diff --git a/benchmark/scripts/evaluate.py b/benchmark/scripts/evaluate.py
index 9182c35..1d75848 100755
--- a/benchmark/scripts/evaluate.py
+++ b/benchmark/scripts/evaluate.py
@@ -1,6 +1,6 @@
 #!/usr/bin/python
 # -*- coding: utf-8 -*-
-# Copyright (c) 2014 Mikkel Schubert <MSchubert at snm.ku.dk>
+# Copyright (c) 2014 Mikkel Schubert <MikkelSch at gmail.com>
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal
diff --git a/benchmark/scripts/evaluate_dmux.py b/benchmark/scripts/evaluate_dmux.py
index f8c9eae..147d8d7 100755
--- a/benchmark/scripts/evaluate_dmux.py
+++ b/benchmark/scripts/evaluate_dmux.py
@@ -1,6 +1,6 @@
 #!/usr/bin/python
 # -*- coding: utf-8 -*-
-# Copyright (c) 2014 Mikkel Schubert <MSchubert at snm.ku.dk>
+# Copyright (c) 2014 Mikkel Schubert <MikkelSch at gmail.com>
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal
diff --git a/benchmark/scripts/evaluate_id.py b/benchmark/scripts/evaluate_id.py
index a6a1965..41169a8 100755
--- a/benchmark/scripts/evaluate_id.py
+++ b/benchmark/scripts/evaluate_id.py
@@ -1,6 +1,6 @@
 #!/usr/bin/python
 # -*- coding: utf-8 -*-
-# Copyright (c) 2014 Mikkel Schubert <MSchubert at snm.ku.dk>
+# Copyright (c) 2014 Mikkel Schubert <MikkelSch at gmail.com>
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal
diff --git a/benchmark/scripts/extend_profile.py b/benchmark/scripts/extend_profile.py
index f9483e1..f993534 100755
--- a/benchmark/scripts/extend_profile.py
+++ b/benchmark/scripts/extend_profile.py
@@ -1,6 +1,6 @@
 #!/usr/bin/python
 # -*- coding: utf-8 -*-
-# Copyright (c) 2014 Mikkel Schubert <MSchubert at snm.ku.dk>
+# Copyright (c) 2014 Mikkel Schubert <MikkelSch at gmail.com>
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal
diff --git a/benchmark/scripts/merge_tables.py b/benchmark/scripts/merge_tables.py
index a5d65d0..a78e416 100755
--- a/benchmark/scripts/merge_tables.py
+++ b/benchmark/scripts/merge_tables.py
@@ -1,6 +1,6 @@
 #!/usr/bin/python
 # -*- coding: utf-8 -*-
-# Copyright (c) 2014 Mikkel Schubert <MSchubert at snm.ku.dk>
+# Copyright (c) 2014 Mikkel Schubert <MikkelSch at gmail.com>
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal
diff --git a/benchmark/scripts/shuffle_fasta.py b/benchmark/scripts/shuffle_fasta.py
index f6962c1..bc0786b 100755
--- a/benchmark/scripts/shuffle_fasta.py
+++ b/benchmark/scripts/shuffle_fasta.py
@@ -1,6 +1,6 @@
 #!/usr/bin/python
 # -*- coding: utf-8 -*-
-# Copyright (c) 2014 Mikkel Schubert <MSchubert at snm.ku.dk>
+# Copyright (c) 2014 Mikkel Schubert <MikkelSch at gmail.com>
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal
diff --git a/benchmark/scripts/tabulate.py b/benchmark/scripts/tabulate.py
index 69ab818..a032e87 100755
--- a/benchmark/scripts/tabulate.py
+++ b/benchmark/scripts/tabulate.py
@@ -1,6 +1,6 @@
 #!/usr/bin/python
 # -*- coding: utf-8 -*-
-# Copyright (c) 2014 Mikkel Schubert <MSchubert at snm.ku.dk>
+# Copyright (c) 2014 Mikkel Schubert <MikkelSch at gmail.com>
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal
diff --git a/src/adapterset.cc b/src/adapterset.cc
index fdf5874..ff0080a 100644
--- a/src/adapterset.cc
+++ b/src/adapterset.cc
@@ -213,7 +213,7 @@ bool check_barcodes_sequences(const fastq_pair_vec& barcodes,
                 std::stringstream error;
                 error << "Duplicate mate 1 barcodes found in '"
                       << filename << "': "<< prev->first << ". Even if these "
-                         "are assosiated with different mate 2 barcodes, it "
+                         "are associated with different mate 2 barcodes, it "
                          "is not possible to distinguish between these in "
                          "single-end mode!";
 
diff --git a/src/adapterset.h b/src/adapterset.h
index d4e621b..e48f79c 100644
--- a/src/adapterset.h
+++ b/src/adapterset.h
@@ -74,7 +74,7 @@ public:
     size_t barcode_count() const;
 
     /**
-     * Returns the nth set of adapters; when barcodes are speceified, the
+     * Returns the nth set of adapters; when barcodes are specified, the
      * raw adapters are merged with the 'nth' barcodes. If no barcodes are
      * set, the get_adapters(0) == get_raw_adapters().
      */
@@ -89,11 +89,11 @@ public:
     /** Returns the (pairs of) barcodes. */
     const fastq_pair_vec& get_barcodes() const;
 
-    /** Returns the name assosiated with the nth set of barcodes. */
+    /** Returns the name associated with the nth set of barcodes. */
     const std::string& get_sample_name(size_t nth) const;
 
 private:
-    //! Names assosiated with barcodes
+    //! Names associated with barcodes
     string_vec m_samples;
     //! User-supplied barcodes
     fastq_pair_vec m_barcodes;
diff --git a/src/alignment.h b/src/alignment.h
index 57c8029..86a893f 100644
--- a/src/alignment.h
+++ b/src/alignment.h
@@ -54,7 +54,7 @@ namespace ar
  * Offset: 8
  *
  * The meaning of the offset is slightly different in SE and PE mode; in SE
- * mode seq2 is the adapter sequence, and the offset therefore unambigiously
+ * mode seq2 is the adapter sequence, and the offset therefore unambiguously
  * shows the starting position of the adapter, regardless of the size of the
  * adapter sequence.
  *
@@ -199,7 +199,7 @@ fastq collapse_paired_ended_sequences(const alignment_info& alignment,
 /**
  * Truncates reads such that only adapter sequence remains.
  *
- * @return True if either or both reads containted adapter sequence.
+ * @return True if either or both reads contained adapter sequence.
  *
  * Reads that do not contain any adapter sequence are completely truncated,
  * such no bases remain of the original sequence.
diff --git a/src/argparse.cc b/src/argparse.cc
index 3e835b1..532f2a5 100644
--- a/src/argparse.cc
+++ b/src/argparse.cc
@@ -22,11 +22,12 @@
  * You should have received a copy of the GNU General Public License     *
  * along with this program.  If not, see <http://www.gnu.org/licenses/>. *
 \*************************************************************************/
-#include <stdexcept>
 #include <algorithm>
+#include <cmath>
 #include <iostream>
 #include <limits>
 #include <set>
+#include <stdexcept>
 
 #include <sys/types.h>
 #include <sys/ioctl.h>
@@ -394,11 +395,7 @@ size_t any::consume(string_vec_citer start, const string_vec_citer& end)
 {
     if (start != end) {
         m_value_set = true;
-        if (m_ptr) {
-            *m_ptr = *start;
-        } else {
-            m_sink = *start;
-        }
+        (m_ptr ? *m_ptr : m_sink) = *start;
 
         return 1;
     }
@@ -420,6 +417,53 @@ std::string any::to_str() const
 
 ///////////////////////////////////////////////////////////////////////////////
 
+many::many(string_vec* value, const std::string& metavar, const std::string& help)
+    : consumer_base(metavar, help)
+    , m_ptr(value)
+    , m_sink()
+{
+}
+
+
+size_t many::consume(string_vec_citer start, const string_vec_citer& end)
+{
+    m_value_set = true;
+    string_vec_citer it = start;
+    for (; it != end; ++it) {
+        if (!it->empty() && it->front() == '-') {
+            break;
+        }
+    }
+
+    (m_ptr ? *m_ptr : m_sink).assign(start, it);
+
+    return static_cast<size_t>(it - start);
+}
+
+
+std::string many::to_str() const
+{
+    const string_vec& result = m_ptr ? *m_ptr : m_sink;
+    if (result.empty()) {
+        return "<not set>";
+    } else {
+        std::string output;
+
+        for (auto& s: result) {
+            if (!output.empty()) {
+                output.push_back(';');
+            }
+
+            output.append(s);
+        }
+
+        return output;
+    }
+}
+
+
+///////////////////////////////////////////////////////////////////////////////
+
 knob::knob(unsigned* value, const std::string& metavar, const std::string& help)
     : consumer_base(metavar, help)
     , m_ptr(value)
@@ -498,9 +542,13 @@ size_t floaty_knob::consume(string_vec_citer start, const string_vec_citer& end)
 
 std::string floaty_knob::to_str() const
 {
-    std::stringstream stream;
-    stream << *m_ptr;
-    return stream.str();
+    if (std::isnan(*m_ptr)) {
+        return "<not set>";
+    } else {
+        std::stringstream stream;
+        stream << *m_ptr;
+        return stream.str();
+    }
 }
 
 } // namespace argparse
diff --git a/src/argparse.h b/src/argparse.h
index 8ff1c9d..c2f6036 100644
--- a/src/argparse.h
+++ b/src/argparse.h
@@ -26,6 +26,7 @@
 #define ARGPARSE_H
 
 #include <sstream>
+#include <vector>
 #include <map>
 
 #include "commontypes.h"
@@ -44,7 +45,7 @@ typedef std::map<std::string, consumer_ptr> consumer_map;
 enum parse_result {
     //! Terminate now (e.g. --version or --help used)
     pr_exit,
-    //! Error occured parsing arguments / invalid combination of args
+    //! Error occurred parsing arguments / invalid combination of args
     pr_error,
     //! No errors parsing commandline arguments
     pr_ok
@@ -163,7 +164,7 @@ private:
     //! Vector of keys (command-line options), tracking the order of addition.
     key_pair_vec m_keys;
     //! Map of keys (command-line args) to parser pointers; multiple
-    //! keys may be assosiated with the same pointer.
+    //! keys may be associated with the same pointer.
     consumer_map m_parsers;
 
     //! Name of the program
@@ -190,7 +191,7 @@ public:
      * Base constructor; sets various values used when printing --help.
      *
      *  metavar - Used to represent the input value; if empty,
-     *            argparse::parser will use the current key assosiated with
+     *            argparse::parser will use the current key associated with
      *            the parser to generate a metavar.
      *  help    - Help string; the value %default is replaced with the default
      *            value.
@@ -215,13 +216,13 @@ public:
     /** Returns true if the consumer has consumed a value. **/
     virtual bool is_set() const;
 
-    /** Returns the metavariable assosiated with the consumer. **/
+    /** Returns the metavariable associated with the consumer. **/
     virtual const std::string& metavar() const;
 
-    /** Returns the help string assosiated with the consumer. **/
+    /** Returns the help string associated with the consumer. **/
     virtual const std::string& help() const;
 
-    /** Returns the value assosiated with the consumer as a string. **/
+    /** Returns the value associated with the consumer as a string. **/
     virtual std::string to_str() const = 0;
 
 protected:
@@ -234,7 +235,7 @@ private:
     //! Not implemented
     consumer_base& operator=(const consumer_base&);
 
-    //! Stores the metavar assosiated with the consumer
+    //! Stores the metavar associated with the consumer
     std::string m_metavar;
     //! Stores the optional description of default behavior.
     std::string m_help;
@@ -244,8 +245,8 @@ private:
 /**
  * Consumer for boolean values (i.e. flags).
  *
- * Unlike typical consumers, this consumer does not expected a value assosiated
- * with the command-line argument, but instead sets the assosiated value to
+ * Unlike typical consumers, this consumer does not expected a value associated
+ * with the command-line argument, but instead sets the associated value to
  * true if the command-line argument is specified one or more times.
  */
 class flag : public consumer_base
@@ -278,7 +279,7 @@ private:
 
 
 /**
- * Consumer for unsigned string values (filenames, etc.).
+ * Consumer for string values (filenames, etc.).
  */
 class any : public consumer_base
 {
@@ -308,6 +309,37 @@ private:
 
 
 /**
+ * Consumer for multiple string values; consumes values until another option
+ * (value starting with '-') is encountered.
+ */
+class many : public consumer_base
+{
+public:
+    /**
+     * See consumer_base::consumer_base
+     */
+    many(string_vec* sink = NULL, const std::string& metavar = "", const std::string& help = "");
+
+    /** See consumer_base::consume */
+    virtual size_t consume(string_vec_citer start, const string_vec_citer& end);
+
+    /** See consumer_base::to_str */
+    virtual std::string to_str() const;
+
+private:
+    //! Not implemented
+    many(const many&);
+    //! Not implemented
+    many& operator=(const many&);
+
+    //! Optional pointer to storage for string value; if NULL, m_value is used.
+    string_vec* m_ptr;
+    //! Value sink used if a pointer to a sink is not provided.
+    string_vec m_sink;
+};
+
+
+/**
  * Consumer for unsigned integer values.
  *
  * Signed values are rejected. On 32 bit systems, the range of values is
diff --git a/src/debug.h b/src/debug.h
index 4c38c78..79c0516 100644
--- a/src/debug.h
+++ b/src/debug.h
@@ -31,7 +31,7 @@ namespace ar
 {
 
 #ifdef AR_TEST_BUILD
-/** Exception replaining 'abort' calls when running unit-tests. */
+/** Exception explaining 'abort' calls when running unit-tests. */
 class assert_failed : public std::exception
 {
 public:
@@ -74,6 +74,15 @@ void debug_raise_assert(const char* filename, size_t lineno,
 #define AR_DEBUG_FAIL(msg) \
     debug_raise_assert(__FILE__, __LINE__, msg)
 
+
+/** Raise a failure if a scope is accessed more than once at the same time. */
+#define AR_DEBUG_LOCK(lock) \
+    std::unique_lock<std::mutex> locker(lock, std::defer_lock); \
+    if (!locker.try_lock()) { \
+        AR_DEBUG_FAIL("race condition detected"); \
+    };
+
+
 } // namespace ar
 
 #endif
diff --git a/src/demultiplex.cc b/src/demultiplex.cc
index 6b29898..d359207 100644
--- a/src/demultiplex.cc
+++ b/src/demultiplex.cc
@@ -45,7 +45,7 @@ typedef demux_node_vec::iterator node_vec_iter;
 /**
  * Struct representing node in quad-tree; children are referenced using the
  * corresponding indice in the vector representing the tree; -1 is used to
- * represent unasigned children.
+ * represent unassigned children.
  */
 struct demultiplexer_node
 {
@@ -79,7 +79,7 @@ public:
 ///////////////////////////////////////////////////////////////////////////////
 
 /**
- * Returns a lexographically sorted list of mate 1 barcodes, each paired with
+ * Returns a lexicographically sorted list of mate 1 barcodes, each paired with
  * the 0-based index of corresponding barcode in the source vector.
  */
 barcode_vec sort_barcodes(const fastq_pair_vec& barcodes)
@@ -102,7 +102,7 @@ barcode_vec sort_barcodes(const fastq_pair_vec& barcodes)
 }
 
 
-/** Adds a nucleotide sequence with a given ID to a quadtree. */
+/** Adds a nucleotide sequence with a given ID to a quad-tree. */
 void add_sequence_to_tree(demux_node_vec& tree,
                           const std::string& sequence,
                           const size_t barcode_id)
@@ -115,8 +115,8 @@ void add_sequence_to_tree(demux_node_vec& tree,
 
         if (child == -1) {
             // New nodes are added to the end of the list; as barcodes are
-            // added in lexographic order, this helps ensure that a set of
-            // dissimilar barcodes will be placed in mostly contigious runs
+            // added in lexicographic order, this helps ensure that a set of
+            // dissimilar barcodes will be placed in mostly contiguous runs
             // of the vector representation.
             child = node.children[nuc_idx] = tree.size();
             tree.push_back(demultiplexer_node());
@@ -228,6 +228,7 @@ demultiplex_reads::demultiplex_reads(const userconfig* config)
     , m_unidentified_1(new fastq_output_chunk())
     , m_unidentified_2()
     , m_statistics(m_barcodes.size())
+    , m_lock()
 {
     AR_DEBUG_ASSERT(!m_barcodes.empty());
 
@@ -275,7 +276,7 @@ size_t count_mismatches(const std::string& barcode,
  * Returns the best matching barcode (pair) for sequences read_r1 and read_r2
  *
  */
-int demultiplex_reads::select_barcode(const fastq& read_r1, const fastq& read_r2)
+int demultiplex_reads::select_barcode(const fastq& read_r1, const fastq& read_r2) const
 {
     candidate_vec candidates;
     if (m_max_mismatches_r1) {
@@ -371,6 +372,7 @@ demultiplex_se_reads::demultiplex_se_reads(const userconfig* config)
 
 chunk_vec demultiplex_se_reads::process(analytical_chunk* chunk)
 {
+    AR_DEBUG_LOCK(m_lock);
     read_chunk_ptr read_chunk(dynamic_cast<fastq_read_chunk*>(chunk));
 
     const fastq empty_read;
@@ -408,6 +410,7 @@ demultiplex_pe_reads::demultiplex_pe_reads(const userconfig* config)
 
 chunk_vec demultiplex_pe_reads::process(analytical_chunk* chunk)
 {
+    AR_DEBUG_LOCK(m_lock);
     read_chunk_ptr read_chunk(dynamic_cast<fastq_read_chunk*>(chunk));
     AR_DEBUG_ASSERT(read_chunk->reads_1.size() == read_chunk->reads_2.size());
 
diff --git a/src/demultiplex.h b/src/demultiplex.h
index 7d3419a..ebd4402 100644
--- a/src/demultiplex.h
+++ b/src/demultiplex.h
@@ -41,7 +41,7 @@ typedef std::vector<demultiplexer_node> demux_node_vec;
 
 
 /**
- * Baseclass for demultiplexing of reads; responsible for building the quadtree
+ * Baseclass for demultiplexing of reads; responsible for building the quad-tree
  * representing the set of adapter sequences, and for maintaining the cache of
  * demultiplexed reads.
  */
@@ -62,11 +62,11 @@ protected:
      * Returns the id of the best matching barcode(s), or -1 if no matches were
      * found or if no single best match was found.
      */
-    int select_barcode(const fastq& read_r1, const fastq& read_r2);
+    int select_barcode(const fastq& read_r1, const fastq& read_r2) const;
 
     //! List of barcode (pairs) supplied by caller
     const fastq_pair_vec& m_barcodes;
-    //! Quadtree representing all mate 1 adapters; for search with n mismatches
+    //! Quad-tree representing all mate 1 adapters; for search with n mismatches
     const demux_node_vec m_tree;
     //! Maximum number of mismatches allowed between the mate 1 and mate 2 read
     const size_t m_max_mismatches;
@@ -96,6 +96,9 @@ protected:
     //! Sink for demultiplexing statistics; used by subclasses.
     demux_statistics m_statistics;
 
+    //! Lock used to verify that the analytical_step is only run sequentially.
+    std::mutex m_lock;
+
 private:
     //! Not implemented
     demultiplex_reads(const demultiplex_reads&);
diff --git a/src/fastq.cc b/src/fastq.cc
index 167f561..0e5afb3 100644
--- a/src/fastq.cc
+++ b/src/fastq.cc
@@ -27,6 +27,7 @@
 #include <stdexcept>
 #include <sstream>
 
+#include "debug.h"
 #include "fastq.h"
 #include "linereader.h"
 
@@ -125,25 +126,23 @@ bool fastq::operator==(const fastq& other) const
 }
 
 
-size_t fastq::length() const
-{
-    return m_sequence.length();
-}
-
-
 size_t fastq::count_ns() const
 {
     return static_cast<size_t>(std::count(m_sequence.begin(), m_sequence.end(), 'N'));
 }
 
 
-fastq::ntrimmed fastq::trim_low_quality_bases(bool trim_ns, char low_quality)
+fastq::ntrimmed fastq::trim_trailing_bases(const bool trim_ns, char low_quality)
 {
     low_quality += PHRED_OFFSET_33;
+    auto is_quality_base = [&] (size_t i) {
+        return m_qualities.at(i) > low_quality
+            && (!trim_ns || m_sequence.at(i) != 'N');
+    };
 
     size_t right_exclusive = 0;
     for (size_t i = m_sequence.length(); i; --i) {
-        if ((!trim_ns || m_sequence.at(i - 1) != 'N') && (m_qualities.at(i - 1) > low_quality)) {
+        if (is_quality_base(i - 1)) {
             right_exclusive = i;
             break;
         }
@@ -151,21 +150,88 @@ fastq::ntrimmed fastq::trim_low_quality_bases(bool trim_ns, char low_quality)
 
     size_t left_inclusive = 0;
     for (size_t i = 0; i < right_exclusive; ++i) {
-        if ((!trim_ns || m_sequence.at(i) != 'N') && (m_qualities.at(i) > low_quality)) {
+        if (is_quality_base(i)) {
             left_inclusive = i;
             break;
         }
     }
 
-    const ntrimmed summary(left_inclusive, m_sequence.length() - right_exclusive);
+    return trim_sequence_and_qualities(left_inclusive, right_exclusive);
+}
 
-    if (summary.first || summary.second) {
-        const size_t retained = right_exclusive - left_inclusive;
-        m_sequence = m_sequence.substr(left_inclusive, retained);
-        m_qualities = m_qualities.substr(left_inclusive, retained);
+
+//! Calculates the size of the sliding window for quality trimming given a
+//! read length and a user-defined window-size (fraction or whole number).
+size_t calculate_winlen(const size_t read_length, const double window_size)
+{
+    size_t winlen;
+    if (window_size >= 1.0) {
+        winlen = static_cast<size_t>(window_size);
+    } else {
+        winlen = static_cast<size_t>(window_size * read_length);
     }
 
-    return summary;
+    if (winlen == 0 || winlen > read_length) {
+        winlen = read_length;
+    }
+
+    return winlen;
+}
+
+
+fastq::ntrimmed fastq::trim_windowed_bases(const bool trim_ns,
+                                           char low_quality,
+                                           const double window_size)
+{
+    AR_DEBUG_ASSERT(window_size >= 0.0);
+    if (m_sequence.empty()) {
+        return ntrimmed();
+    }
+
+    low_quality += PHRED_OFFSET_33;
+    auto is_quality_base = [&] (size_t i) {
+        return m_qualities.at(i) > low_quality
+            && (!trim_ns || m_sequence.at(i) != 'N');
+    };
+
+    const size_t winlen = calculate_winlen(length(), window_size);
+    long running_sum = std::accumulate(m_qualities.begin(),
+                                       m_qualities.begin() + winlen,
+                                       0);
+
+    size_t left_inclusive = std::string::npos;
+    size_t right_exclusive = std::string::npos;
+    for (size_t offset = 0; offset + winlen <= length(); ++offset) {
+        const long running_avg = running_sum / static_cast<long>(winlen);
+
+        // We trim away low quality bases and Ns from the start of reads,
+        // **before** we consider windows.
+        if (left_inclusive == std::string::npos && is_quality_base(offset) && running_avg > low_quality) {
+            left_inclusive = offset;
+        }
+
+        if (left_inclusive != std::string::npos && (running_avg <= low_quality || offset + winlen == length())) {
+            right_exclusive = offset;
+            while (right_exclusive < length() && is_quality_base(right_exclusive)) {
+                right_exclusive++;
+            }
+
+            break;
+        }
+
+        running_sum -= m_qualities.at(offset);
+        if (offset + winlen < length()) {
+            running_sum += m_qualities.at(offset + winlen);
+        }
+    }
+
+    if (left_inclusive == std::string::npos) {
+        // No starting window found. Trim all bases starting from start.
+        return trim_sequence_and_qualities(length(), length());
+    }
+
+    AR_DEBUG_ASSERT(right_exclusive != std::string::npos);
+    return trim_sequence_and_qualities(left_inclusive, right_exclusive);
 }
 
 
@@ -334,7 +400,7 @@ void fastq::validate_paired_reads(fastq& mate1, fastq& mate2,
         if (info1.mate == mate_info::unknown || info2.mate == mate_info::unknown) {
             error << "\n\nNote that AdapterRemoval by determines the mate "
                      "numbers as the digit found at the end of the read name, "
-                     "if this is preceeded by the character '"
+                     "if this is preceded by the character '"
                   << mate_separator
                   << "'; if these data makes use of a different character to "
                      "separate the mate number from the read name, then you "
@@ -371,4 +437,19 @@ void fastq::process_record(const fastq_encoding& encoding)
     encoding.decode_string(m_qualities.begin(), m_qualities.end());
 }
 
+
+fastq::ntrimmed fastq::trim_sequence_and_qualities(const size_t left_inclusive,
+                                                   const size_t right_exclusive)
+{
+    const ntrimmed summary(left_inclusive, length() - right_exclusive);
+
+    if (summary.first || summary.second) {
+        const size_t retained = right_exclusive - left_inclusive;
+        m_sequence = m_sequence.substr(left_inclusive, retained);
+        m_qualities = m_qualities.substr(left_inclusive, retained);
+    }
+
+    return summary;
+}
+
 } // namespace ar
diff --git a/src/fastq.h b/src/fastq.h
index 1689cdf..bccfd66 100644
--- a/src/fastq.h
+++ b/src/fastq.h
@@ -25,6 +25,8 @@
 #ifndef FASTQ_H
 #define FASTQ_H
 
+#include <iostream>
+
 #include <string>
 
 #include "commontypes.h"
@@ -104,14 +106,28 @@ public:
     /** The number of bases trimmmed from the 5p and 3p end respectively. **/
     typedef std::pair<size_t, size_t> ntrimmed;
 
+   /**
+     * Trims consecutive low-quality bases from the 5'/3' ends of the sequence.
+     *
+     * @param trim_ns If true, ambiguous bases ('N') are trimmed.
+     * @param low_quality Trim bases with a quality score at or below this value.
+     * @return A pair containing the number of 5' and 3' bases trimmed.
+     */
+    ntrimmed trim_trailing_bases(const bool trim_ns = true,
+                                    char low_quality = -1);
+
     /**
-     * Trims consequtive low-quality bases from the 5'/3' ends of the sequence.
+     * Trims low-quality bases using a sliding window approach.
      *
      * @param trim_ns If true, ambiguous bases ('N') are trimmed.
      * @param low_quality Trim bases with a quality score at or below this value.
-     * @return A pair containing hte number of bases trimmed from either end.
+     * @param winlen The length of the sliding window.
+     * @return A pair containing the number of 5' and 3' bases trimmed.
      */
-	ntrimmed trim_low_quality_bases(bool trim_ns = true, char low_quality = -1);
+    ntrimmed trim_windowed_bases(const bool trim_ns = true,
+                                 char low_quality = -1,
+                                 const double window_size = 0.1);
+
 
     /**
      * Truncates the record in place.
@@ -164,8 +180,8 @@ public:
      * Validate that two reads form a valid pair.
      *
      * The mate separator character is the character expected as the second-to-
-     * last charater, if the last character (either '1' or '2') specify the
-     * mate number. Non-standard mate-seprators (not '/') are changed to '/'.
+     * last character, if the last character (either '1' or '2') specify the
+     * mate number. Non-standard mate-separators (not '/') are changed to '/'.
      */
     static void validate_paired_reads(fastq& mate1, fastq& mate2,
                                       char mate_separator = MATE_SEPARATOR);
@@ -182,6 +198,13 @@ private:
     /** Initializes record; used by constructor and read function. **/
     void process_record(const fastq_encoding& encoding);
 
+    /**
+     * Trims the read to the specified bases, and returns a pair specifying the
+     * number of 5' and 3' bases removed.
+     */
+    ntrimmed trim_sequence_and_qualities(const size_t left_inclusive,
+                                         const size_t right_exclusive);
+
     /** Helper function to get mate numbering and fix the separator char. */
     friend mate_info get_and_fix_mate_info(fastq& read, char mate_separator);
 
@@ -244,6 +267,12 @@ inline const std::string& fastq::qualities() const
     return m_qualities;
 }
 
+
+inline size_t fastq::length() const
+{
+    return m_sequence.length();
+}
+
 } // namespace ar
 
 #endif
diff --git a/src/fastq_enc.h b/src/fastq_enc.h
index 59b0ecb..dba7025 100644
--- a/src/fastq_enc.h
+++ b/src/fastq_enc.h
@@ -50,7 +50,7 @@ const int MIN_SOLEXA_SCORE = -5;
 //! Maximum Solexa score allowed; encodes to 'h' with an offset of 64
 const int MAX_SOLEXA_SCORE = 40;
 
-//! Default character used to seperate mate number
+//! Default character used to separate mate number
 const char MATE_SEPARATOR = '/';
 
 
@@ -67,7 +67,7 @@ public:
     virtual const char* what() const noexcept;
 
 private:
-    //! Error message assosiated with exception.
+    //! Error message associated with exception.
     std::string m_message;
 };
 
diff --git a/src/fastq_io.cc b/src/fastq_io.cc
index 05c6316..589ddce 100644
--- a/src/fastq_io.cc
+++ b/src/fastq_io.cc
@@ -33,9 +33,8 @@
 namespace ar
 {
 
-
-size_t read_fastq_reads(fastq_vec& dst, line_reader& reader, size_t offset,
-                      const fastq_encoding& encoding)
+size_t read_fastq_reads(fastq_vec& dst, joined_line_readers& reader,
+                        size_t offset, const fastq_encoding& encoding)
 {
     dst.reserve(FASTQ_CHUNK_SIZE);
 
@@ -108,22 +107,25 @@ void fastq_output_chunk::add(const fastq_encoding& encoding,
 // Implementations for 'read_single_fastq'
 
 read_single_fastq::read_single_fastq(const fastq_encoding* encoding,
-                                     const std::string& filename,
+                                     const string_vec& filenames,
                                      size_t next_step)
   : analytical_step(analytical_step::ordered, true)
   , m_encoding(encoding)
   , m_line_offset(1)
-  , m_io_input(filename)
+  , m_io_input(filenames)
   , m_next_step(next_step)
   , m_eof(false)
+  , m_lock()
 {
+  AR_DEBUG_ASSERT(!filenames.empty());
 }
 
 
 chunk_vec read_single_fastq::process(analytical_chunk* chunk)
 {
+    AR_DEBUG_LOCK(m_lock);
     AR_DEBUG_ASSERT(chunk == NULL);
-    if (!m_io_input.is_open()) {
+    if (m_eof) {
         return chunk_vec();
     }
 
@@ -135,7 +137,6 @@ chunk_vec read_single_fastq::process(analytical_chunk* chunk)
     if (!n_read) {
         // EOF is detected by failure to read any lines, not line_reader::eof,
         // so that unbalanced files can be caught in all cases.
-        m_io_input.close();
         file_chunk->eof = true;
         m_eof = true;
     }
@@ -151,6 +152,7 @@ chunk_vec read_single_fastq::process(analytical_chunk* chunk)
 
 void read_single_fastq::finalize()
 {
+    AR_DEBUG_LOCK(m_lock);
     if (!m_eof) {
         throw thread_error("read_single_fastq::finalize: terminated before EOF");
     }
@@ -161,24 +163,27 @@ void read_single_fastq::finalize()
 // Implementations for 'read_paired_fastq'
 
 read_paired_fastq::read_paired_fastq(const fastq_encoding* encoding,
-                                     const std::string& filename_1,
-                                     const std::string& filename_2,
+                                     const string_vec& filenames_1,
+                                     const string_vec& filenames_2,
                                      size_t next_step)
   : analytical_step(analytical_step::ordered, true)
   , m_encoding(encoding)
   , m_line_offset(1)
-  , m_io_input_1(filename_1)
-  , m_io_input_2(filename_2)
+  , m_io_input_1(filenames_1)
+  , m_io_input_2(filenames_2)
   , m_next_step(next_step)
   , m_eof(false)
+  , m_lock()
 {
+  AR_DEBUG_ASSERT(filenames_1.size() == filenames_2.size());
 }
 
 
 chunk_vec read_paired_fastq::process(analytical_chunk* chunk)
 {
+    AR_DEBUG_LOCK(m_lock);
     AR_DEBUG_ASSERT(chunk == NULL);
-    if (!m_io_input_1.is_open()) {
+    if (m_eof) {
         return chunk_vec();
     }
 
@@ -200,8 +205,6 @@ chunk_vec read_paired_fastq::process(analytical_chunk* chunk)
     } else if (!n_read_1) {
         // EOF is detected by failure to read any lines, not line_reader::eof,
         // so that unbalanced files can be caught in all cases.
-        m_io_input_1.close();
-        m_io_input_2.close();
         file_chunk->eof = true;
         m_eof = true;
     }
@@ -217,6 +220,7 @@ chunk_vec read_paired_fastq::process(analytical_chunk* chunk)
 
 void read_paired_fastq::finalize()
 {
+    AR_DEBUG_LOCK(m_lock);
     if (!m_eof) {
         throw thread_error("read_paired_fastq::finalize: terminated before EOF");
     }
@@ -228,22 +232,25 @@ void read_paired_fastq::finalize()
 // Implementations for 'read_interleaved_fastq'
 
 read_interleaved_fastq::read_interleaved_fastq(const fastq_encoding* encoding,
-                                          const std::string& filename,
+                                          const string_vec& filenames,
                                           size_t next_step)
   : analytical_step(analytical_step::ordered, true)
   , m_encoding(encoding)
   , m_line_offset(1)
-  , m_io_input(filename)
+  , m_io_input(filenames)
   , m_next_step(next_step)
   , m_eof(false)
+  , m_lock()
 {
+  AR_DEBUG_ASSERT(!filenames.empty());
 }
 
 
 chunk_vec read_interleaved_fastq::process(analytical_chunk* chunk)
 {
+    AR_DEBUG_LOCK(m_lock);
     AR_DEBUG_ASSERT(chunk == NULL);
-    if (!m_io_input.is_open()) {
+    if (m_eof) {
         return chunk_vec();
     }
 
@@ -294,7 +301,6 @@ chunk_vec read_interleaved_fastq::process(analytical_chunk* chunk)
 
         throw thread_abort();
     } else if (!n_read_1) {
-        m_io_input.close();
         file_chunk->eof = true;
         m_eof = true;
     }
@@ -310,6 +316,7 @@ chunk_vec read_interleaved_fastq::process(analytical_chunk* chunk)
 
 void read_interleaved_fastq::finalize()
 {
+    AR_DEBUG_LOCK(m_lock);
     if (!m_eof) {
         throw thread_error("read_interleaved_fastq::finalize: terminated before EOF");
     }
@@ -352,6 +359,7 @@ bzip2_fastq::bzip2_fastq(const userconfig& config, size_t next_step)
   , m_next_step(next_step)
   , m_stream()
   , m_eof(false)
+  , m_lock()
 {
     m_stream.bzalloc = NULL;
     m_stream.bzfree = NULL;
@@ -383,6 +391,7 @@ bzip2_fastq::bzip2_fastq(const userconfig& config, size_t next_step)
 
 void bzip2_fastq::finalize()
 {
+    AR_DEBUG_LOCK(m_lock);
     if (!m_eof) {
         throw thread_error("bzip2_fastq::finalize: terminated before EOF");
     }
@@ -403,6 +412,7 @@ void bzip2_fastq::finalize()
 
 chunk_vec bzip2_fastq::process(analytical_chunk* chunk)
 {
+    AR_DEBUG_LOCK(m_lock);
     output_chunk_ptr file_chunk(dynamic_cast<fastq_output_chunk*>(chunk));
     buffer_vec& buffers = file_chunk->buffers;
 
@@ -497,6 +507,7 @@ gzip_fastq::gzip_fastq(const userconfig& config, size_t next_step)
   , m_next_step(next_step)
   , m_stream()
   , m_eof(false)
+  , m_lock()
 {
     m_stream.zalloc = Z_NULL;
     m_stream.zfree = Z_NULL;
@@ -530,6 +541,7 @@ gzip_fastq::gzip_fastq(const userconfig& config, size_t next_step)
 
 void gzip_fastq::finalize()
 {
+    AR_DEBUG_LOCK(m_lock);
     if (!m_eof) {
         throw thread_error("gzip_fastq::finalize: terminated before EOF");
     }
@@ -553,6 +565,7 @@ void gzip_fastq::finalize()
 
 chunk_vec gzip_fastq::process(analytical_chunk* chunk)
 {
+    AR_DEBUG_LOCK(m_lock);
     output_chunk_ptr file_chunk(dynamic_cast<fastq_output_chunk*>(chunk));
     buffer_vec& buffers = file_chunk->buffers;
 
@@ -647,6 +660,7 @@ write_fastq::write_fastq(const std::string& filename)
   : analytical_step(analytical_step::ordered, true)
   , m_output(filename.c_str(), std::ofstream::out | std::ofstream::binary)
   , m_eof(false)
+  , m_lock()
 {
     if (!m_output.is_open()) {
         std::string message = std::string("Failed to open file '") + filename + "': ";
@@ -659,6 +673,7 @@ write_fastq::write_fastq(const std::string& filename)
 
 chunk_vec write_fastq::process(analytical_chunk* chunk)
 {
+    AR_DEBUG_LOCK(m_lock);
     output_chunk_ptr file_chunk(dynamic_cast<fastq_output_chunk*>(chunk));
     const string_vec& lines = file_chunk->reads;
 
@@ -693,6 +708,7 @@ chunk_vec write_fastq::process(analytical_chunk* chunk)
 
 void write_fastq::finalize()
 {
+    AR_DEBUG_LOCK(m_lock);
     std::lock_guard<std::mutex> lock(s_timer_lock);
     if (!s_finalized) {
         s_timer.finalize();
diff --git a/src/fastq_io.h b/src/fastq_io.h
index 1046474..54d92c7 100644
--- a/src/fastq_io.h
+++ b/src/fastq_io.h
@@ -36,10 +36,10 @@
 
 #include "commontypes.h"
 #include "fastq.h"
+#include "linereader_joined.h"
 #include "scheduler.h"
-#include "timer.h"
-#include "linereader.h"
 #include "strutils.h"
+#include "timer.h"
 
 namespace ar
 {
@@ -139,7 +139,7 @@ public:
      * Opens the input file corresponding to the specified mate.
      */
     read_single_fastq(const fastq_encoding* encoding,
-                      const std::string& filename,
+                      const string_vec& filenames,
                       size_t next_step);
 
     /** Reads N lines from the input file and saves them in an fastq_read_chunk. */
@@ -159,11 +159,13 @@ private:
     //! Current line in the input file (1-based)
     size_t m_line_offset;
     //! Line reader used to read raw / gzip'd / bzip2'd FASTQ files.
-    line_reader m_io_input;
+    joined_line_readers m_io_input;
     //! The analytical step following this step
     const size_t m_next_step;
     //! Used to track whether an EOF block has been received.
     bool m_eof;
+    //! Lock used to verify that the analytical_step is only run sequentially.
+    std::mutex m_lock;
 };
 
 
@@ -181,8 +183,8 @@ public:
      * Constructor.
      */
     read_paired_fastq(const fastq_encoding* encoding,
-                      const std::string& filename_1,
-                      const std::string& filename_2,
+                      const string_vec& filenames_1,
+                      const string_vec& filenames_2,
                       size_t next_step);
 
     /** Reads N lines from the input file and saves them in an fastq_file_chunk. */
@@ -202,13 +204,15 @@ private:
     //! Current line in the input file (1-based)
     size_t m_line_offset;
     //! Line reader used to read raw / gzip'd / bzip2'd FASTQ files.
-    line_reader m_io_input_1;
+    joined_line_readers m_io_input_1;
     //! Line reader used to read raw / gzip'd / bzip2'd FASTQ files.
-    line_reader m_io_input_2;
+    joined_line_readers m_io_input_2;
     //! The analytical step following this step
     const size_t m_next_step;
     //! Used to track whether an EOF block has been received.
     bool m_eof;
+    //! Lock used to verify that the analytical_step is only run sequentially.
+    std::mutex m_lock;
 };
 
 
@@ -226,7 +230,7 @@ public:
      * Constructor.
      */
     read_interleaved_fastq(const fastq_encoding* encoding,
-                           const std::string& filename,
+                           const string_vec& filenames,
                            size_t next_step);
 
     /** Reads N lines from the input file and saves them in an fastq_file_chunk. */
@@ -246,11 +250,13 @@ private:
     //! Current line in the input file (1-based)
     size_t m_line_offset;
     //! Line reader used to read raw / gzip'd / bzip2'd FASTQ files.
-    line_reader m_io_input;
+    joined_line_readers m_io_input;
     //! The analytical step following this step
     const size_t m_next_step;
     //! Used to track whether an EOF block has been received.
     bool m_eof;
+    //! Lock used to verify that the analytical_step is only run sequentially.
+    std::mutex m_lock;
 };
 
 
@@ -285,6 +291,8 @@ private:
     bz_stream m_stream;
     //! Used to track whether an EOF block has been received.
     bool m_eof;
+    //! Lock used to verify that the analytical_step is only run sequentially.
+    std::mutex m_lock;
 };
 
 #endif
@@ -320,6 +328,8 @@ private:
     z_stream m_stream;
     //! Used to track whether an EOF block has been received.
     bool m_eof;
+    //! Lock used to verify that the analytical_step is only run sequentially.
+    std::mutex m_lock;
 };
 #endif
 
@@ -356,6 +366,8 @@ private:
 
     //! Used to track whether an EOF block has been received.
     bool m_eof;
+    //! Lock used to verify that the analytical_step is only run sequentially.
+    std::mutex m_lock;
 };
 
 } // namespace ar
diff --git a/src/linereader.cc b/src/linereader.cc
index 3724017..fb573e4 100644
--- a/src/linereader.cc
+++ b/src/linereader.cc
@@ -141,7 +141,7 @@ bool line_reader::getline(std::string& dst)
                 dst.append(start, end - start);
                 if (!dst.empty() && dst.back() == '\r') {
                     // Excluding terminal \r; dst is examined, since the \r may
-                    // have been added seperately, if the \r was the last
+                    // have been added separately, if the \r was the last
                     // character in the previous buffer fill (see below).
                     dst.pop_back();
                 }
@@ -317,7 +317,7 @@ void line_reader::refill_buffers_gzip()
             break;
 
         case Z_STREAM_END:
-            // Handle concatenated streams; causes unnessesary reset at EOF
+            // Handle concatenated streams; causes unnecessary reset at EOF
             if (inflateReset(m_gzip_stream) != Z_OK) {
                 throw gzip_error("line_reader::refill_buffers_gzip: failed to reset stream",
                              m_gzip_stream ? m_gzip_stream->msg : NULL);
diff --git a/src/linereader.h b/src/linereader.h
index f0e4596..4bd6e94 100644
--- a/src/linereader.h
+++ b/src/linereader.h
@@ -62,7 +62,7 @@ public:
 };
 
 
-/** Base-class for line reading; used by recievers. */
+/** Base-class for line reading; used by receivers. */
 class line_reader_base
 {
 public:
@@ -135,7 +135,7 @@ private:
     void initialize_buffers_gzip();
     /** Refills 'm_buffer' from compressed data; may refill raw buffers. */
     void refill_buffers_gzip();
-    /** Closes gzip buffers and frees assosiated memory. */
+    /** Closes gzip buffers and frees associated memory. */
     void close_buffers_gzip();
 
 
@@ -150,7 +150,7 @@ private:
     void initialize_buffers_bzip2();
     /** Refills 'm_buffer' from compressed data; may refill raw buffers. */
     void refill_buffers_bzip2();
-    /** Closes gzip2 buffers and frees assosiated memory. */
+    /** Closes gzip2 buffers and frees associated memory. */
     void close_buffers_bzip2();
 
 
diff --git a/src/threads.cc b/src/linereader_joined.cc
similarity index 66%
copy from src/threads.cc
copy to src/linereader_joined.cc
index 5782ee2..6010134 100644
--- a/src/threads.cc
+++ b/src/linereader_joined.cc
@@ -21,71 +21,67 @@
  * You should have received a copy of the GNU General Public License     *
  * along with this program.  If not, see <http://www.gnu.org/licenses/>. *
 \*************************************************************************/
-
+#include <algorithm>
 #include <cerrno>
+#include <cstdio>
+#include <cstring>
 #include <cstdlib>
 #include <iostream>
-#include <queue>
-#include <stdexcept>
-#include <unistd.h>
+#include <sstream>
 
+#include "debug.h"
+#include "linereader_joined.h"
 #include "threads.h"
 
-#include <ctime>
 
 namespace ar
 {
 
-///////////////////////////////////////////////////////////////////////////////
-// exceptions
-
-thread_error::thread_error(const std::string& message)
-    : std::exception()
-    , m_message(message)
+joined_line_readers::joined_line_readers(const string_vec& filenames)
+  : m_filenames(filenames.rbegin(), filenames.rend())
+  , m_reader()
 {
 }
 
 
-thread_error::thread_error(const thread_error& error)
-    : std::exception()
-    , m_message(error.m_message)
+joined_line_readers::~joined_line_readers()
 {
 }
 
 
-thread_error::~thread_error() noexcept
+bool joined_line_readers::getline(std::string& dst)
 {
-}
+    dst.clear();
 
+    while (dst.empty()) {
+        if (m_reader && m_reader->getline(dst)) {
+            break;
+        } else if (!open_next_file()) {
+            break;
+        }
+    }
 
-const char* thread_error::what() const noexcept
-{
-    return m_message.c_str();
+    return !dst.empty();
 }
 
 
-thread_abort::thread_abort()
-  : thread_error("abort thread")
+bool joined_line_readers::open_next_file()
 {
-}
-
+    if (m_filenames.empty()) {
+        return false;
+    }
 
-///////////////////////////////////////////////////////////////////////////////
-// print_locker
+    auto filename = m_filenames.back();
 
-//! Shared mutex for STDOUT / STDERR
-static std::mutex s_print_mutex;
+    {
+        print_locker lock;
+        std::cerr << "Opening FASTQ file '" << filename << "'" << std::endl;
+    }
 
+    m_reader.reset(new line_reader(filename));
+    m_filenames.pop_back();
 
-print_locker::print_locker()
-  : m_lock(s_print_mutex)
-{
+    return true;
 }
 
-
-print_locker::~print_locker()
-{
 }
-
-
-} // namespace ar
diff --git a/src/debug.h b/src/linereader_joined.h
similarity index 54%
copy from src/debug.h
copy to src/linereader_joined.h
index 4c38c78..81283f8 100644
--- a/src/debug.h
+++ b/src/linereader_joined.h
@@ -1,7 +1,7 @@
 /*************************************************************************\
  * AdapterRemoval - cleaning next-generation sequencing reads            *
  *                                                                       *
- * Copyright (C) 2015 by Mikkel Schubert - mikkelsch at gmail.com           *
+ * Copyright (C) 2017 by Mikkel Schubert - mikkelsch at gmail.com           *
  *                                                                       *
  * If you use the program, please cite the paper:                        *
  * S. Lindgreen (2012): AdapterRemoval: Easy Cleaning of Next Generation *
@@ -21,58 +21,60 @@
  * You should have received a copy of the GNU General Public License     *
  * along with this program.  If not, see <http://www.gnu.org/licenses/>. *
 \*************************************************************************/
-#ifndef AR_DEBUG_H
-#define AR_DEBUG_H
+#ifndef LINEREADER_JOINED_H
+#define LINEREADER_JOINED_H
+
+#include <memory>
+
+#include "commontypes.h"
+#include "linereader.h"
 
-#include <stdexcept>
-#include <string>
 
 namespace ar
 {
 
-#ifdef AR_TEST_BUILD
-/** Exception replaining 'abort' calls when running unit-tests. */
-class assert_failed : public std::exception
+
+/**
+ * Multi-file line-reader
+ *
+ * Wrapper around line_reader that automatically reads through one or more
+ * files, returning the content as a contiguous stream of lines. No assumptions
+ * are made about the format of the individual files.
+ */
+class joined_line_readers : public line_reader_base
 {
 public:
-    /** Copy constructor. */
-    assert_failed(const assert_failed& errror);
-    /** Creates exception with the specified error message. */
-    assert_failed(const std::string& what);
+    /** Creates line-reader over multiple files in the specified order. */
+    joined_line_readers(const string_vec& filenames);
 
-    /** Does nothing. */
-    virtual ~assert_failed() noexcept;
+    /** Closes any still open files. */
+    ~joined_line_readers();
 
-    /** Returns user supplied error message; owned by object. */
-    virtual const char* what() const noexcept;
+    /**
+     * Reads a line from the currently open file; if EOF is encountered, the
+     * currently open file is closed and the next file is opened. Returns true
+     * if a line was successfully read, or false if no files remain.
+     */
+    bool getline(std::string& dst);
 
 private:
-    //! User supplied error message
-    const std::string m_what;
-};
-#endif
+    /**
+     * Open the next file, removes it from the queue, and returns true; returns
+     * false if no files remain to be processed.
+     */
+    bool open_next_file();
 
+    //! Not implemented
+    joined_line_readers(const joined_line_readers&);
+    //! Not implemented
+    joined_line_readers& operator=(const joined_line_readers&);
 
-/**
- * Aborts after printing the filename, line-number, and message, plus
- * instructions for how to report the problem.
- */
-void debug_raise_assert(const char* filename, size_t lineno,
-                        const char* what) __attribute__ ((noreturn));
-
-
-/** Custom assert which prints various information on failure; always enabled. */
-#define AR_DEBUG_ASSERT(test) \
-    do { \
-        if (!(test)) { \
-            debug_raise_assert(__FILE__, __LINE__, #test); \
-        } \
-    } while (0)
-
+    //! Files left to read; stored in reverse order.
+    string_vec m_filenames;
+    //! Currently open file, if any.
+    std::unique_ptr<line_reader> m_reader;
+};
 
-/** Raise an assert failure with a user-specified message. */
-#define AR_DEBUG_FAIL(msg) \
-    debug_raise_assert(__FILE__, __LINE__, msg)
 
 } // namespace ar
 
diff --git a/src/main.h b/src/main.h
index 52acfc7..3b8e3af 100644
--- a/src/main.h
+++ b/src/main.h
@@ -31,7 +31,7 @@ namespace ar
 {
 
 const std::string NAME = "AdapterRemoval";
-const std::string VERSION = "ver. 2.2.0";
+const std::string VERSION = "ver. 2.2.1";
 const std::string HELPTEXT = \
     "This program searches for and removes remnant adapter sequences from\n"
     "your read data.  The program can analyze both single end and paired end\n"
diff --git a/src/main_adapter_id.cc b/src/main_adapter_id.cc
index c25bdc1..7cf07c4 100644
--- a/src/main_adapter_id.cc
+++ b/src/main_adapter_id.cc
@@ -54,7 +54,7 @@ const size_t TOP_N_KMERS = 5;
 
 
 /**
- * Hashing function for string consiting of the chars "ACGT" (uppercase only).
+ * Hashing function for string consisting of the chars "ACGT" (uppercase only).
  * Will return a unique number in the range 0 to 4^N - 1 for a given nucleotide
  * sequence. Passing characters other than "ACGT" (uppercase only) will result
  * in hash collisions.
@@ -174,7 +174,7 @@ void print_most_common_kmers(const kmer_map& kmers, size_t print_n = TOP_N_KMERS
 // Consensus adapter related functions and constants
 
 /**
- * Build represention of identity between an adapter and a consensus sequence.
+ * Build representation of identity between an adapter and a consensus sequence.
  *
  * The resulting string represents N with wildcards ('*'), matching bases with
  * pipes ('|') and mismatches with spaces (' '). Only overlapping bases are
@@ -360,7 +360,7 @@ public:
     chunk_vec process(analytical_chunk* chunk)
     {
         if (!chunk) {
-            throw std::invalid_argument("sink recieved NULL chunk");
+            throw std::invalid_argument("sink received NULL chunk");
         }
 
         const fastq empty_adapter("dummy", "", "");
@@ -467,20 +467,20 @@ private:
 
 int identify_adapter_sequences(const userconfig& config)
 {
-    std::cout << "Attemping to identify adapter sequences ..." << std::endl;
+    std::cout << "Attempting to identify adapter sequences ..." << std::endl;
 
     scheduler sch;
     try {
         if (config.interleaved_input) {
             sch.add_step(ai_read_fastq, "read_interleaved_fastq",
                          new read_interleaved_fastq(config.quality_input_fmt.get(),
-                                                    config.input_file_1,
+                                                    config.input_files_1,
                                                     ai_identify_adapters));
         } else {
             sch.add_step(ai_read_fastq, "read_paired_fastq",
                          new read_paired_fastq(config.quality_input_fmt.get(),
-                                               config.input_file_1,
-                                               config.input_file_2,
+                                               config.input_files_1,
+                                               config.input_files_2,
                                                ai_identify_adapters));
         }
     } catch (const std::ios_base::failure& error) {
diff --git a/src/main_adapter_rm.cc b/src/main_adapter_rm.cc
index f76e6c7..a544a64 100644
--- a/src/main_adapter_rm.cc
+++ b/src/main_adapter_rm.cc
@@ -135,11 +135,21 @@ void write_settings(const userconfig& config, std::ostream& output, int nth)
            << "\nQuality score max (input): " << config.quality_input_fmt->max_score()
            << "\nQuality format (output): " << config.quality_output_fmt->name()
            << "\nQuality score max (output): " << config.quality_output_fmt->max_score()
-           << "\nMate-number seperator (input): '" << config.mate_separator << "'"
+           << "\nMate-number separator (input): '" << config.mate_separator << "'"
            << "\nTrimming Ns: " << ((config.trim_ambiguous_bases) ? "Yes" : "No")
            << "\nTrimming Phred scores <= " << config.low_quality_score
            << ": " << (config.trim_by_quality ? "Yes" : "No")
-           << "\nMinimum genomic length: " << config.min_genomic_length
+           << "\nTrimming using sliding windows: ";
+
+    if (config.trim_window_length >= 1) {
+           output << static_cast<size_t>(config.trim_window_length);
+    } else if (config.trim_window_length >= 0) {
+           output << config.trim_window_length;
+    } else {
+           output << "No";
+    }
+
+    output << "\nMinimum genomic length: " << config.min_genomic_length
            << "\nMaximum genomic length: " << config.max_genomic_length
            << "\nCollapse overlapping reads: " << ((config.collapse) ? "Yes" : "No")
            << "\nMinimum overlap (in case of collapse): " << config.min_alignment_length;
@@ -509,7 +519,7 @@ public:
             const bool read_2_acceptable = m_config.is_acceptable_read(read_2);
 
             stats->total_number_of_nucleotides += read_1_acceptable ? read_1.length() : 0u;
-            stats->total_number_of_nucleotides += read_1_acceptable ? read_2.length() : 0u;
+            stats->total_number_of_nucleotides += read_2_acceptable ? read_2.length() : 0u;
             stats->total_number_of_good_reads += read_1_acceptable;
             stats->total_number_of_good_reads += read_2_acceptable;
 
@@ -612,7 +622,7 @@ int remove_adapter_sequences_se(const userconfig& config)
             // Step 1: Read input file
             sch.add_step(ai_read_fastq, "read_fastq",
                          new read_single_fastq(config.quality_input_fmt.get(),
-                                               config.input_file_1,
+                                               config.input_files_1,
                                                ai_demultiplex));
 
             // Step 2: Parse and demultiplex reads based on single or double indices
@@ -624,7 +634,7 @@ int remove_adapter_sequences_se(const userconfig& config)
         } else {
             sch.add_step(ai_read_fastq, "read_fastq",
                          new read_single_fastq(config.quality_input_fmt.get(),
-                                               config.input_file_1,
+                                               config.input_files_1,
                                                ai_analyses_offset));
         }
 
@@ -685,13 +695,13 @@ int remove_adapter_sequences_pe(const userconfig& config)
         if (config.interleaved_input) {
             sch.add_step(ai_read_fastq, "read_interleaved_fastq",
                          new read_interleaved_fastq(config.quality_input_fmt.get(),
-                                                    config.input_file_1,
+                                                    config.input_files_1,
                                                     next_step));
         } else {
             sch.add_step(ai_read_fastq, "read_paired_fastq",
                          new read_paired_fastq(config.quality_input_fmt.get(),
-                                               config.input_file_1,
-                                               config.input_file_2,
+                                               config.input_files_1,
+                                               config.input_files_2,
                                                next_step));
         }
 
diff --git a/src/main_demultiplex.cc b/src/main_demultiplex.cc
index a0e0684..6f209f6 100644
--- a/src/main_demultiplex.cc
+++ b/src/main_demultiplex.cc
@@ -275,7 +275,7 @@ int demultiplex_sequences_se(const userconfig& config)
         // Step 1: Read input file
         sch.add_step(ai_read_fastq, "read_fastq",
                      new read_single_fastq(config.quality_input_fmt.get(),
-                                           config.input_file_1,
+                                           config.input_files_1,
                                            ai_demultiplex));
 
         // Step 2: Parse and demultiplex reads based on single or double indices
@@ -330,13 +330,13 @@ int demultiplex_sequences_pe(const userconfig& config)
         if (config.interleaved_input) {
             sch.add_step(ai_read_fastq, "read_interleaved_fastq",
                          new read_interleaved_fastq(config.quality_input_fmt.get(),
-                                                    config.input_file_1,
+                                                    config.input_files_1,
                                                     ai_demultiplex));
         } else {
             sch.add_step(ai_read_fastq, "read_paired_fastq",
                          new read_paired_fastq(config.quality_input_fmt.get(),
-                                               config.input_file_1,
-                                               config.input_file_2,
+                                               config.input_files_1,
+                                               config.input_files_2,
                                                ai_demultiplex));
         }
 
diff --git a/src/scheduler.cc b/src/scheduler.cc
index b6a5ad8..f95f0d4 100644
--- a/src/scheduler.cc
+++ b/src/scheduler.cc
@@ -268,11 +268,15 @@ bool scheduler::run(int nthreads)
         try {
             thread.join();
         } catch (const std::system_error& error) {
-            std::cerr << "ERROR: Failed to joini thread: " << error.what() << std::endl;
+            std::cerr << "ERROR: Failed to join thread: " << error.what() << std::endl;
             set_errors_occured();
         }
     }
 
+    if (errors_occured()) {
+        return false;
+    }
+
     for (auto& step: m_steps) {
         if (step && !step->queue.empty()) {
             print_locker lock;
diff --git a/src/scheduler.h b/src/scheduler.h
index 8045a2f..c9d54ec 100644
--- a/src/scheduler.h
+++ b/src/scheduler.h
@@ -113,7 +113,7 @@ private:
  * Base class for analytical steps in a pipeline.
  *
  * Each step must implement the 'process' function as described below; note
- * that this function may be called simutanously by multiple threads, and that
+ * that this function may be called simultaneously by multiple threads, and that
  * thread-safe storage (e.g. statistics_sink) must be used for writable
  * resources used by the step.
  */
@@ -143,7 +143,7 @@ public:
     /**
      * Function called by pipeline to generate / process / consume data chunks.
      *
-     * Initially, the first step in the pipeline will recieve NULL; during
+     * Initially, the first step in the pipeline will receive NULL; during
      * subsequent cycles, the pipeline will return the value output from the
      * last step to the initial step, which may re-use it to avoid allocations;
      * if this is not done, the chunk must be freed by the first step.
@@ -235,9 +235,9 @@ private:
     /** Attempts to queue an analytical step given a current chunk. */
     void queue_analytical_step(const step_ptr& step, size_t current);
 
-    /** Returns true if an error has occured, and the run should terminate. */
+    /** Returns true if an error has occurred, and the run should terminate. */
     bool errors_occured();
-    /** Mark that an error has occured, and that the run should terminate. */
+    /** Mark that an error has occurred, and that the run should terminate. */
     void set_errors_occured();
 
     //! Analytical steps
@@ -260,7 +260,7 @@ private:
 
     //! Indicates if a thread is doing IO; access control through 'm_queue_lock'
     bool m_io_active;
-    //! Set to indicate if errors have occured
+    //! Set to indicate if errors have occurred
     std::atomic_bool m_errors;
 };
 
diff --git a/src/strutils.h b/src/strutils.h
index d54e164..714235f 100644
--- a/src/strutils.h
+++ b/src/strutils.h
@@ -39,7 +39,7 @@ const size_t DEFAULT_INDENTATION = 4;
 std::string toupper(const std::string& str);
 
 
-/** Split text by newlines and add fixed identation following newlines. */
+/** Split text by newlines and add fixed indentation following newlines. */
 std::string indent_lines(const std::string& lines, size_t identation = DEFAULT_INDENTATION);
 
 
@@ -48,7 +48,7 @@ std::string indent_lines(const std::string& lines, size_t identation = DEFAULT_I
  *
  * @param value Text representing a single paragraph to be formatted.
  * @param max_width Maximum width of output lines in characters.
- * @param ljust Ident lines after the first line by this amount of characters.
+ * @param ljust Indent lines after the first line by this amount of characters.
  *
  * Note that all whitespace in the input string is consumed; output words are
  * seperated by a single space, and the terminal line does not end with a
@@ -88,7 +88,7 @@ public:
 
     /**
      * Format string using default parameters, but include prefix on first line
-     * and ident subsequent lines usign the width of the prefix.
+     * and indent subsequent lines using the width of the prefix.
      */
     static std::string fmt(const std::string& prefix, const std::string& value);
 
diff --git a/src/threads.cc b/src/threads.cc
index 5782ee2..5533c85 100644
--- a/src/threads.cc
+++ b/src/threads.cc
@@ -76,10 +76,17 @@ thread_abort::thread_abort()
 //! Shared mutex for STDOUT / STDERR
 static std::mutex s_print_mutex;
 
+//! Shared bool indicating if STDERR contains a partial line.
+static bool s_stderr_is_incomplete = false;
 
-print_locker::print_locker()
+
+print_locker::print_locker(bool flush_stderr)
   : m_lock(s_print_mutex)
 {
+    if (flush_stderr && s_stderr_is_incomplete) {
+        s_stderr_is_incomplete = false;
+        std::cerr << std::endl;
+    }
 }
 
 
@@ -88,4 +95,9 @@ print_locker::~print_locker()
 }
 
 
+void print_locker::partial_stderr_output() {
+    s_stderr_is_incomplete = true;
+}
+
+
 } // namespace ar
diff --git a/src/threads.h b/src/threads.h
index 873eefd..67d92f0 100644
--- a/src/threads.h
+++ b/src/threads.h
@@ -57,7 +57,7 @@ private:
 
 /**
  * This exception may be thrown by a task to abort the thread; error-messages
- * are assumed to have already been printed by the thrower, and no furher
+ * are assumed to have already been printed by the thrower, and no further
  * messages are printed.
  */
 class thread_abort : public thread_error
@@ -70,19 +70,26 @@ public:
 /**
  * Locker for using stdout / stderr.
  *
- * Any useage of stdout and / or stderr should be preceeded by creating a
+ * Any useage of stdout and / or stderr should be preceded by creating a
  * print_locker object. This ensures that output from different threads is
  * not interleaved, regardless of the destination of these pipes.
  */
 class print_locker
 {
 public:
-    //! Locks the mutex (blocking)
-    print_locker();
+    /*
+     * Locks the mutex (blocking). If flush_stderr is true, and
+     * partial_stderr_output has been called, then a newline is first
+     * written to stderr.
+     */
+    print_locker(bool flush_stderr=true);
 
     //! Unlocks the mutex
     ~print_locker();
 
+    //! Call to indicate that a partial line has been written to STDERR.
+    void partial_stderr_output();
+
 private:
     //! Not implemented
     print_locker(const print_locker&);
diff --git a/src/timer.cc b/src/timer.cc
index b0760e0..0f07083 100644
--- a/src/timer.cc
+++ b/src/timer.cc
@@ -142,7 +142,7 @@ void timer::finalize() const
 
 void timer::do_print(size_t rate, double current_time, bool finalize) const
 {
-    print_locker lock;
+    print_locker lock(false);
 
     if (finalize) {
         std::cerr << "\rProcessed a total of ";
@@ -163,6 +163,7 @@ void timer::do_print(size_t rate, double current_time, bool finalize) const
     } else {
         std::cerr << "...";
         std::cerr.flush();
+        lock.partial_stderr_output();
     }
 }
 
diff --git a/src/userconfig.cc b/src/userconfig.cc
index 854421b..f4b7518 100644
--- a/src/userconfig.cc
+++ b/src/userconfig.cc
@@ -78,8 +78,8 @@ userconfig::userconfig(const std::string& name,
                        const std::string& help)
     : run_type(ar_trim_adapters)
     , basename("your_output")
-    , input_file_1()
-    , input_file_2()
+    , input_files_1()
+    , input_files_2()
     , paired_ended_mode(false)
     , interleaved_input(false)
     , interleaved_output(false)
@@ -93,6 +93,7 @@ userconfig::userconfig(const std::string& name,
     , quality_input_fmt()
     , quality_output_fmt()
     , trim_by_quality(false)
+    , trim_window_length(std::numeric_limits<double>::quiet_NaN())
     , low_quality_score(2)
     , trim_ambiguous_bases(false)
     , max_ambiguous_bases(1000)
@@ -122,12 +123,13 @@ userconfig::userconfig(const std::string& name,
     , demultiplex_sequences(false)
 {
     argparser["--file1"] =
-        new argparse::any(&input_file_1, "FILE",
-            "Input file containing mate 1 reads or single-ended reads "
-            "[REQUIRED].");
+        new argparse::many(&input_files_1, "FILE [FILE ...]",
+            "Input files containing mate 1 reads or single-ended reads; "
+            "one or more files may be listed [REQUIRED].");
     argparser["--file2"] =
-        new argparse::any(&input_file_2, "FILE",
-            "Input file containing mate 2 reads [OPTIONAL].");
+        new argparse::many(&input_files_2, "[FILE ...]",
+            "Input files containing mate 2 reads; if used, then the same "
+            "number of files as --file1 must be listed [OPTIONAL].");
 
     argparser.add_header("FASTQ OPTIONS:");
     argparser["--qualitybase"] =
@@ -171,7 +173,7 @@ userconfig::userconfig(const std::string& name,
         new argparse::flag(&combined_output,
             "If set, all reads are written to the same file(s), specified by "
             "--output1 and --output2 (--output1 only if --interleaved-output "
-            "is not set). Each read is futher marked by either a \"PASSED\" "
+            "is not set). Each read is further marked by either a \"PASSED\" "
             "or a \"FAILED\" flag, and any read that has been FAILED "
             "(including the mate for collapsed reads) are replaced with a "
             "single 'N' with Phred score 0 [current: %default].");
@@ -267,8 +269,8 @@ userconfig::userconfig(const std::string& name,
         = new argparse::floaty_knob(&mismatch_threshold, "MISMATCH_RATE",
             "Max error-rate when aligning reads and/or adapters. If > 1, the "
             "max error-rate is set to 1 / MISMATCH_RATE; if < 0, the defaults "
-            "are used, otherwise the user-supplied value is used directly. "
-            "[defaults: 1/3 for trimming; 1/10 when identifing adapters].");
+            "are used, otherwise the user-supplied value is used directly "
+            "[defaults: 1/3 for trimming; 1/10 when identifying adapters].");
     argparser["--maxns"] =
         new argparse::knob(&max_ambiguous_bases, "MAX",
             "Reads containing more ambiguous bases (N) than this number after "
@@ -287,10 +289,21 @@ userconfig::userconfig(const std::string& name,
         new argparse::flag(&trim_by_quality,
             "If set, trim bases at 5'/3' termini with quality scores <= to "
             "--minquality value [current: %default]");
+    argparser["--trimwindows"] =
+        new argparse::floaty_knob(&trim_window_length, "INT",
+            "If set, quality trimming will be carried out using window based "
+            "approach, where windows with an average quality less than "
+            "--minquality will be trimmed. If >= 1, this value will be used "
+            "as the window size. If the value is < 1, the value will be "
+            "multiplied with the read length to determine a window size per "
+            "read. If the resulting window size is 0 or larger than the read "
+            "length, the read length is used as the window size. This option "
+            "implies --trimqualities [current: %default].");
     argparser["--minquality"] =
         new argparse::knob(&low_quality_score, "PHRED",
             "Inclusive minimum; see --trimqualities for details "
             "[current: %default]");
+
     argparser["--minlength"] =
         new argparse::knob(&min_genomic_length, "LENGTH",
             "Reads shorter than this length are discarded "
@@ -320,7 +333,7 @@ userconfig::userconfig(const std::string& name,
         new argparse::knob(&min_adapter_overlap, "LENGTH",
             "In single-end mode, reads are only trimmed if the overlap "
             "between read and the adapter is at least X bases long, not "
-            "counting ambiguous nucleotides (N); this is independant of the "
+            "counting ambiguous nucleotides (N); this is independent of the "
             "--minalignmentlength when using --collapse, allowing a "
             "conservative selection of putative complete inserts while "
             "ensuring that all possible adapter contamination is trimmed "
@@ -438,30 +451,33 @@ argparse::parse_result userconfig::parse_args(int argc, char *argv[])
         run_type = ar_demultiplex_sequences;
     }
 
-
     if (low_quality_score > static_cast<unsigned>(MAX_PHRED_SCORE)) {
         std::cerr << "Error: Invalid value for --minquality: "
                   << low_quality_score << "\n"
                   << "   must be in the range 0 .. " << MAX_PHRED_SCORE
                   << std::endl;
         return argparse::pr_error;
+    } else if (trim_window_length >= 0) {
+        trim_by_quality = true;
+    } else if (trim_window_length < 0.0) {
+        std::cerr << "Error: Invalid value for --trimwindows ("
+                  << trim_window_length << "); value must be >= 0."
+                  << std::endl;
+        return argparse::pr_error;
     }
 
     // Check for invalid combinations of settings
-    const bool file_1_set = argparser.is_set("--file1");
-    const bool file_2_set = argparser.is_set("--file2");
-
-    if (!(file_1_set || file_2_set)) {
+    if (input_files_1.empty() && input_files_2.empty()) {
         std::cerr << "Error: No input files (--file1 / --file2) specified.\n"
                   << "Please specify at least one input file using --file1 FILENAME."
                   << std::endl;
 
         return argparse::pr_error;
-    } else if (file_2_set && !file_1_set) {
-        std::cerr << "Error: --file2 specified, but --file1 is not specified." << std::endl;
+    } else if (!input_files_2.empty() && (input_files_1.size() != input_files_2.size())) {
+        std::cerr << "Error: Different number of files specified for --file1 and --file2." << std::endl;
 
         return argparse::pr_error;
-    } else if (file_2_set) {
+    } else if (!input_files_2.empty()) {
         paired_ended_mode = true;
         min_adapter_overlap = 0;
     }
@@ -470,7 +486,7 @@ argparse::parse_result userconfig::parse_args(int argc, char *argv[])
     interleaved_output |= interleaved;
 
     if (interleaved_input) {
-        if (file_2_set) {
+        if (!input_files_2.empty()) {
             std::cerr << "Error: The options --interleaved and "
                       << "--interleaved-input cannot be used "
                       << "together with the --file2 option; only --file1 must "
@@ -696,14 +712,18 @@ std::string userconfig::get_output_filename(const std::string& key,
 
 fastq::ntrimmed userconfig::trim_sequence_by_quality_if_enabled(fastq& read) const
 {
-    fastq::ntrimmed trimmed;
-    if (trim_ambiguous_bases || trim_by_quality) {
-        char quality_score = trim_by_quality ? low_quality_score : -1;
-        trimmed = read.trim_low_quality_bases(trim_ambiguous_bases,
-                                              quality_score);
+    if (trim_window_length >= 0) {
+        return read.trim_windowed_bases(trim_ambiguous_bases,
+                                        low_quality_score,
+                                        trim_window_length);
+    } else if (trim_ambiguous_bases || trim_by_quality) {
+        const char quality_score = trim_by_quality ? low_quality_score : -1;
+
+        return read.trim_trailing_bases(trim_ambiguous_bases,
+                                        quality_score);
     }
 
-    return trimmed;
+    return fastq::ntrimmed();
 }
 
 
diff --git a/src/userconfig.h b/src/userconfig.h
index 17406dd..41de227 100644
--- a/src/userconfig.h
+++ b/src/userconfig.h
@@ -30,6 +30,7 @@
 
 #include "adapterset.h"
 #include "argparse.h"
+#include "commontypes.h"
 #include "fastq.h"
 #include "alignment.h"
 #include "statistics.h"
@@ -96,9 +97,9 @@ public:
     //! Prefix used for output files for which no filename was explicitly set
     std::string basename;
     //! Path to input file containing mate 1 reads (required)
-    std::string input_file_1;
+    string_vec input_files_1;
     //! Path to input file containing mate 2 reads (for PE reads)
-    std::string input_file_2;
+    string_vec input_files_2;
 
     //! Set to true if both --input1 and --input2 are set, or if either of
     //! --interleaved or --interleaved-input are set.
@@ -133,6 +134,8 @@ public:
 
     //! If true, read termini are trimmed for low-quality bases.
     bool trim_by_quality;
+    //! Window size for window trimming; a fraction, whole number, or negative.
+    double trim_window_length;
     //! The highest quality score which is considered low-quality
     unsigned low_quality_score;
 
diff --git a/tests/alignment_test.cc b/tests/alignment_test.cc
index 1868660..bed7ed1 100644
--- a/tests/alignment_test.cc
+++ b/tests/alignment_test.cc
@@ -27,6 +27,7 @@
 #include <vector>
 #include <gtest/gtest.h>
 
+#include "testing.h"
 #include "alignment.h"
 #include "fastq.h"
 
diff --git a/tests/argparse_test.cc b/tests/argparse_test.cc
index a3922e7..2e42f65 100644
--- a/tests/argparse_test.cc
+++ b/tests/argparse_test.cc
@@ -22,6 +22,7 @@
  * You should have received a copy of the GNU General Public License     *
  * along with this program.  If not, see <http://www.gnu.org/licenses/>. *
 \*************************************************************************/
+#include <limits>
 #include <memory>
 #include <stdexcept>
 #include <gtest/gtest.h>
@@ -179,6 +180,117 @@ TEST(any, consume__with_sink__preset)
 
 
 ///////////////////////////////////////////////////////////////////////////////
+// many -- strings
+
+TEST(many, defaults)
+{
+	consumer_autoptr ptr(new argparse::many());
+	ASSERT_FALSE(ptr->is_set());
+	ASSERT_EQ("", ptr->metavar());
+	ASSERT_EQ("", ptr->help());
+	ASSERT_EQ("<not set>", ptr->to_str());
+}
+
+
+TEST(many, args_set)
+{
+	string_vec sink;
+	sink.push_back("kitchensink");
+
+	consumer_autoptr ptr(new argparse::many(&sink, "a metavar", "help!"));
+	ASSERT_FALSE(ptr->is_set());
+	ASSERT_EQ("a metavar", ptr->metavar());
+	ASSERT_EQ("help!", ptr->help());
+	ASSERT_EQ("kitchensink", ptr->to_str());
+}
+
+
+TEST(many, consumes_one_argument)
+{
+	string_vec arguments;
+	arguments.push_back("foo");
+	consumer_autoptr ptr(new argparse::many());
+	ASSERT_FALSE(ptr->is_set());
+	ASSERT_EQ(1, ptr->consume(arguments.begin(), arguments.end()));
+	ASSERT_TRUE(ptr->is_set());
+	ASSERT_EQ("foo", ptr->to_str());
+}
+
+
+TEST(many, consumes_two_arguments)
+{
+	string_vec arguments;
+	arguments.push_back("foo");
+	arguments.push_back("bar");
+	consumer_autoptr ptr(new argparse::many());
+	ASSERT_FALSE(ptr->is_set());
+	ASSERT_EQ(2, ptr->consume(arguments.begin(), arguments.end()));
+	ASSERT_TRUE(ptr->is_set());
+	ASSERT_EQ("foo;bar", ptr->to_str());
+}
+
+
+TEST(many, consumes_until_next)
+{
+	string_vec arguments;
+	arguments.push_back("foo");
+	arguments.push_back("--zoo");
+	arguments.push_back("bar");
+	consumer_autoptr ptr(new argparse::many());
+	ASSERT_FALSE(ptr->is_set());
+	ASSERT_EQ(1, ptr->consume(arguments.begin(), arguments.end()));
+	ASSERT_TRUE(ptr->is_set());
+	ASSERT_EQ("foo", ptr->to_str());
+}
+
+
+TEST(many, consume_past_the_end)
+{
+	const string_vec arguments;
+	consumer_autoptr ptr(new argparse::many());
+	ASSERT_FALSE(ptr->is_set());
+	ASSERT_EQ(0, ptr->consume(arguments.begin(), arguments.end()));
+	ASSERT_TRUE(ptr->is_set());
+	ASSERT_EQ("<not set>", ptr->to_str());
+}
+
+
+TEST(many, consume__with_sink__empty)
+{
+	string_vec sink;
+	string_vec expected;
+	expected.push_back("foo");
+
+	consumer_autoptr ptr(new argparse::many(&sink));
+	ASSERT_EQ("<not set>", ptr->to_str());
+	string_vec arguments;
+	arguments.push_back("foo");
+	ASSERT_EQ(1, ptr->consume(arguments.begin(), arguments.end()));
+	ASSERT_TRUE(ptr->is_set());
+	ASSERT_EQ(expected, sink);
+	ASSERT_EQ("foo", ptr->to_str());
+}
+
+
+TEST(many, consume__with_sink__preset)
+{
+	string_vec sink;
+	sink.push_back("kitchensink");
+	string_vec expected;
+	expected.push_back("foo");
+
+	consumer_autoptr ptr(new argparse::many(&sink));
+	ASSERT_EQ("kitchensink", ptr->to_str());
+	string_vec arguments;
+	arguments.push_back("foo");
+	ASSERT_EQ(1, ptr->consume(arguments.begin(), arguments.end()));
+	ASSERT_TRUE(ptr->is_set());
+	ASSERT_EQ(expected, sink);
+	ASSERT_EQ("foo", ptr->to_str());
+}
+
+
+///////////////////////////////////////////////////////////////////////////////
 // knob -- unsigned
 
 TEST(knob, defaults)
@@ -320,6 +432,17 @@ TEST(floaty_knob, defaults)
 }
 
 
+TEST(floaty_knob, default_nan)
+{
+	double sink = std::numeric_limits<double>::quiet_NaN();
+	consumer_autoptr ptr(new argparse::floaty_knob(&sink));
+	ASSERT_FALSE(ptr->is_set());
+	ASSERT_EQ("", ptr->metavar());
+	ASSERT_EQ("", ptr->help());
+	ASSERT_EQ("<not set>", ptr->to_str());
+}
+
+
 TEST(floaty_knob, defaults__sink_required)
 {
 	try {
@@ -379,6 +502,7 @@ TEST(floaty_knob, trailing_garbage)
     ASSERT_FALSE(ptr->is_set());
 }
 
+
 ///////////////////////////////////////////////////////////////////////////////
 // parser
 
diff --git a/tests/fastq_test.cc b/tests/fastq_test.cc
index f1d4460..885c32c 100644
--- a/tests/fastq_test.cc
+++ b/tests/fastq_test.cc
@@ -26,22 +26,14 @@
 #include <stdexcept>
 #include <gtest/gtest.h>
 
+#include "testing.h"
+#include "debug.h"
 #include "fastq.h"
 #include "linereader.h"
 
 namespace ar
 {
 
-inline std::ostream& operator<<(std::ostream& stream, const fastq& record)
-{
-    stream << "'@" << record.header() << "\\n"
-           << record.sequence() << "\\n+\\n"
-           << record.qualities() << "\\n'";
-
-    return stream;
-}
-
-
 class vec_reader : public line_reader_base
 {
 public:
@@ -221,83 +213,268 @@ TEST(fastq, count_ns)
 
 
 ///////////////////////////////////////////////////////////////////////////////
-// trim_low_quality_bases
+// trim_trailing_bases
 
-TEST(fastq, trim_low_quality_bases__empty_record)
+TEST(fastq, trim_trailing_bases__empty_record)
 {
     fastq record("Empty", "", "");
     const fastq::ntrimmed expected(0, 0);
-    ASSERT_EQ(expected, record.trim_low_quality_bases(true, 10));
+    ASSERT_EQ(expected, record.trim_trailing_bases(true, 10));
     ASSERT_EQ(fastq("Empty", "", ""), record);
 }
 
 
-TEST(fastq, trim_low_quality_bases__trim_nothing)
+TEST(fastq, trim_trailing_bases__trim_nothing)
 {
     const fastq reference("Rec", "NNNNN", "!!!!!");
     const fastq::ntrimmed expected(0, 0);
     fastq record = reference;
 
     // Trim neither Ns nor low Phred score bases
-    ASSERT_EQ(expected, record.trim_low_quality_bases(false, -1));
+    ASSERT_EQ(expected, record.trim_trailing_bases(false, -1));
     ASSERT_EQ(reference, record);
 }
 
 
-TEST(fastq, trim_low_quality_bases__trim_ns)
+TEST(fastq, trim_trailing_bases__trim_ns)
 {
+    fastq record("Rec", "NNANT", "23456");
     const fastq expected_record("Rec", "ANT", "456");
     const fastq::ntrimmed expected_ntrim(2, 0);
-    fastq record("Rec", "NNANT", "23456");
 
-    ASSERT_EQ(expected_ntrim, record.trim_low_quality_bases(true, -1));
+    ASSERT_EQ(expected_ntrim, record.trim_trailing_bases(true, -1));
     ASSERT_EQ(expected_record, record);
 }
 
 
-TEST(fastq, trim_low_quality_bases__trim_low_quality_bases)
+TEST(fastq, trim_trailing_bases__trim_trailing_bases)
 {
     const fastq expected_record("Rec", "TN", "%$");
     const fastq::ntrimmed expected_ntrim(0, 3);
     fastq record("Rec", "TNANT", "%$#!\"");
 
-    ASSERT_EQ(expected_ntrim, record.trim_low_quality_bases(false, 2));
+    ASSERT_EQ(expected_ntrim, record.trim_trailing_bases(false, 2));
     ASSERT_EQ(expected_record, record);
 }
 
 
-TEST(fastq, trim_low_quality_bases__trim_mixed)
+TEST(fastq, trim_trailing_bases__trim_mixed)
 {
     const fastq expected_record("Rec", "TAG", "$12");
     const fastq::ntrimmed expected_ntrim(3, 2);
     fastq record("Rec", "NTNTAGNT", "1!#$12#\"");
 
-    ASSERT_EQ(expected_ntrim, record.trim_low_quality_bases(true, 2));
+    ASSERT_EQ(expected_ntrim, record.trim_trailing_bases(true, 2));
     ASSERT_EQ(expected_record, record);
 }
 
 
-TEST(fastq, trim_low_quality_bases__trim_mixed__no_low_quality_bases)
+TEST(fastq, trim_trailing_bases__trim_mixed__no_low_quality_bases)
 {
     const fastq expected_record("Rec", "ACTTAG", "12I$12");
     const fastq::ntrimmed expected_ntrim(0, 0);
     fastq record = expected_record;
 
-    ASSERT_EQ(expected_ntrim, record.trim_low_quality_bases(true, 2));
+    ASSERT_EQ(expected_ntrim, record.trim_trailing_bases(true, 2));
     ASSERT_EQ(expected_record, record);
 }
 
 
-TEST(fastq, trim_low_quality_bases__trim_everything)
+TEST(fastq, trim_trailing_bases__trim_everything)
 {
     fastq record("Rec", "TAG", "!!!");
     const fastq expected_record = fastq("Rec", "", "");
     const fastq::ntrimmed expected_ntrim(0, 3);
-    ASSERT_EQ(expected_ntrim, record.trim_low_quality_bases(true, 2));
+    ASSERT_EQ(expected_ntrim, record.trim_trailing_bases(true, 2));
     ASSERT_EQ(expected_record, record);
 }
 
 
+///////////////////////////////////////////////////////////////////////////////
+// trim_windowed_bases
+
+
+#define PARAMETERIZED_TEST(name, values) \
+    class name : public ::testing::TestWithParam<double> {}; \
+    INSTANTIATE_TEST_CASE_P(fastq_windowed_trimming, name, values); \
+    TEST_P(name, test)
+
+
+// Test for invalid parameters
+PARAMETERIZED_TEST(invalid_parameters, ::testing::Values(-1.0, std::numeric_limits<double>::quiet_NaN()))
+{
+    fastq record("Rec", "TAGTGACAT", "111111111");
+    ASSERT_THROW(record.trim_windowed_bases(false, -1, GetParam()), assert_failed);
+}
+
+
+// Test for trimming empty reads
+PARAMETERIZED_TEST(empty_reads, ::testing::Values(1, 0.1, 3))
+{
+    fastq record("Empty", "", "");
+    const fastq::ntrimmed expected(0, 0);
+    ASSERT_EQ(expected, record.trim_windowed_bases(true, 10, GetParam()));
+    ASSERT_EQ(fastq("Empty", "", ""), record);
+}
+
+
+// Test for when entire read is trimmed
+PARAMETERIZED_TEST(trim_everything, ::testing::Values(1, 0.2, 4, 10))
+{
+    fastq record("Rec", "TAGTGACAT", "111111111");
+    const fastq expected_record = fastq("Rec", "", "");
+    const fastq::ntrimmed expected_ntrim(9, 0);
+    ASSERT_EQ(expected_ntrim, record.trim_windowed_bases(false, '2' - '!',
+                                                         GetParam()));
+    ASSERT_EQ(expected_record, record);
+}
+
+
+// Test for when nothing is trimmed
+PARAMETERIZED_TEST(trim_nothing, ::testing::Values(0, 1, 0.2, 3, 4, 5, 6, 7, 8, 9, 10, 11))
+{
+    fastq record("Rec", "TAGTGACAT", "111111111");
+    const fastq expected_record = record;
+    const fastq::ntrimmed expected_ntrim(0, 0);
+    ASSERT_EQ(expected_ntrim, record.trim_windowed_bases(false, -1, GetParam()));
+    ASSERT_EQ(expected_record, record);
+}
+
+
+// Test for trimming of Ns
+PARAMETERIZED_TEST(trim_ns_1, ::testing::Values(1, 0.2))
+{
+    fastq record("Rec", "NNATNT", "234567");
+    const fastq expected_record("Rec", "ATNT", "4567");
+    const fastq::ntrimmed expected_ntrim(2, 0);
+
+    ASSERT_EQ(expected_ntrim, record.trim_windowed_bases(true, -1, GetParam()));
+    ASSERT_EQ(expected_record, record);
+}
+
+// - trimming of Ns - the final window contains Ns and is therefore truncated
+PARAMETERIZED_TEST(trim_ns_2, ::testing::Values(2, 3, 4))
+{
+    fastq record("Rec", "NNATNT", "234567");
+    const fastq expected_record("Rec", "AT", "45");
+    const fastq::ntrimmed expected_ntrim(2, 2);
+
+    ASSERT_EQ(expected_ntrim, record.trim_windowed_bases(true, -1, GetParam()));
+    ASSERT_EQ(expected_record, record);
+}
+
+// - trimming of Ns - No valid window is found
+TEST(fastq, trim_windowed_bases__trim_ns_5)
+{
+    fastq record("Rec", "NNATNT", "234567");
+    const fastq expected_record("Rec", "", "");
+    const fastq::ntrimmed expected_ntrim(6, 0);
+
+    ASSERT_EQ(expected_ntrim, record.trim_windowed_bases(true, -1, 5));
+    ASSERT_EQ(expected_record, record);
+}
+
+
+// Trimming of 5' only
+PARAMETERIZED_TEST(trim_5p_1bp, ::testing::Values(1, 0.1))
+{
+    fastq record("Rec", "TAACGATCCG", "0123456789");
+    const fastq expected_record("Rec", "CGATCCG", "3456789");
+    const fastq::ntrimmed expected_ntrim(3, 0);
+
+    ASSERT_EQ(expected_ntrim, record.trim_windowed_bases(false, '2' - '!',
+                                                         GetParam()));
+    ASSERT_EQ(expected_record, record);
+}
+
+
+// Trimming of 5' only
+PARAMETERIZED_TEST(trim_5p_2bp, ::testing::Values(2, 0.2))
+{
+    fastq record("Rec", "TAACGATCCG", "0123456789");
+    const fastq expected_record("Rec", "CGATCCG", "3456789");
+    const fastq::ntrimmed expected_ntrim(3, 0);
+
+    ASSERT_EQ(expected_ntrim, record.trim_windowed_bases(false, '2' - '!',
+                                                         GetParam()));
+    ASSERT_EQ(expected_record, record);
+}
+
+
+
+// Trimming of 5' only - lowquality is inclusive
+PARAMETERIZED_TEST(trim_5p_inclusive_low_quality, ::testing::Values(2, 3))
+{
+    fastq record("Rec", "TAACGATCCG", "0123126789");
+    const fastq expected_record("Rec", "TCCG", "6789");
+    const fastq::ntrimmed expected_ntrim(6, 0);
+
+    ASSERT_EQ(expected_ntrim, record.trim_windowed_bases(false, '2' - '!',
+                                                         GetParam()));
+    ASSERT_EQ(expected_record, record);
+}
+
+
+// Trimming of 3' only - lowquality is inclusive
+PARAMETERIZED_TEST(trim_3p_inclusive_low_quality, ::testing::Values(3))
+{
+    fastq record("Rec", "TAACGATCCG", "9876312333");
+    const fastq expected_record("Rec", "TAACG", "98763");
+    const fastq::ntrimmed expected_ntrim(0, 5);
+
+    ASSERT_EQ(expected_ntrim, record.trim_windowed_bases(false, '2' - '!',
+                                                         GetParam()));
+    ASSERT_EQ(expected_record, record);
+}
+
+
+PARAMETERIZED_TEST(tiny_and_huge_window_sizes_1, ::testing::Values(0, 0.01, 20))
+{
+    fastq record("Rec", "TAACGATC", "23456789");
+    const fastq expected_record("Rec", "", "");
+    const fastq::ntrimmed expected_ntrim(8, 0);
+
+    ASSERT_EQ(expected_ntrim, record.trim_windowed_bases(false, '2' - '!',
+                                                         GetParam()));
+    ASSERT_EQ(expected_record, record);
+}
+
+
+PARAMETERIZED_TEST(tiny_and_huge_window_sizes_2, ::testing::Values(0, 0.01, 20))
+{
+    fastq record("Rec", "TAACGATC", "23456780");
+    const fastq expected_record("Rec", "TAACGAT", "2345678");
+    const fastq::ntrimmed expected_ntrim(0, 1);
+
+    ASSERT_EQ(expected_ntrim, record.trim_windowed_bases(false, '1' - '!',
+                                                         GetParam()));
+    ASSERT_EQ(expected_record, record);
+}
+
+
+PARAMETERIZED_TEST(last_trailing_window, ::testing::Values(1, 2, 3, 4, 5, 6, 7, 8, 9))
+{
+    fastq record("Rec", "TAACGATCC", "234567811");
+    const fastq expected_record("Rec", "TAACGAT", "2345678");
+    const fastq::ntrimmed expected_ntrim(0, 2);
+
+    ASSERT_EQ(expected_ntrim, record.trim_windowed_bases(false, '1' - '!',
+                                                         GetParam()));
+    ASSERT_EQ(expected_record, record);
+}
+
+
+TEST(fastq, trim_windowed_bases__trim_window)
+{
+    // Should trim starting at the window of low quality bases in the middle
+    // even with high qual bases at the end.
+    fastq record("Rec", "NNAAAAAAAAATNNNNNNNA", "##EEEEEEEEEE#######E");
+    const fastq expected_record = fastq("Rec", "AAAAAAAAAT", "EEEEEEEEEE");
+    const fastq::ntrimmed expected_ntrim(2, 8);
+    ASSERT_EQ(expected_ntrim, record.trim_windowed_bases(true, 10, 5));
+    ASSERT_EQ(expected_record, record);
+}
+
 
 ///////////////////////////////////////////////////////////////////////////////
 // Truncate
diff --git a/src/main.h b/tests/testing.h
similarity index 65%
copy from src/main.h
copy to tests/testing.h
index 52acfc7..9abea6d 100644
--- a/src/main.h
+++ b/tests/testing.h
@@ -22,29 +22,21 @@
  * You should have received a copy of the GNU General Public License     *
  * along with this program.  If not, see <http://www.gnu.org/licenses/>. *
 \*************************************************************************/
-#ifndef MAIN_H
-#define MAIN_H
+#ifndef TESTING_H
+#define TESTING_H
 
-#include <string>
+#include <iostream>
 
-namespace ar
-{
+#include "fastq.h"
 
-const std::string NAME = "AdapterRemoval";
-const std::string VERSION = "ver. 2.2.0";
-const std::string HELPTEXT = \
-    "This program searches for and removes remnant adapter sequences from\n"
-    "your read data.  The program can analyze both single end and paired end\n"
-    "data.  For detailed explanation of the parameters, please refer to the\n"
-    "man page.  For comments, suggestions  and feedback please contact Stinus\n"
-    "Lindgreen (stinus at binf.ku.dk) and Mikkel Schubert (MikkelSch at gmail.com).\n"
-    "\n"
-    "If you use the program, please cite the paper:\n"
-    "    Schubert, Lindgreen, and Orlando (2016). AdapterRemoval v2: rapid\n"
-    "    adapter trimming, identification, and read merging.\n"
-    "    BMC Research Notes, 12;9(1):88.\n\n"
-    "    http://bmcresnotes.biomedcentral.com/articles/10.1186/s13104-016-1900-2\n";
 
-} // namespace ar
+namespace ar {
+    inline void PrintTo(const fastq& record, std::ostream* stream)
+    {
+        *stream << "'@" << record.header() << "\\n"
+                << record.sequence() << "\\n+\\n"
+                << record.qualities() << "\\n'";
+    }
+}
 
-#endif
+#endif
\ No newline at end of file
diff --git a/validation/demultiplexing/double_indexed/pe/collapse/your_output.sample_1.settings b/validation/demultiplexing/double_indexed/pe/collapse/your_output.sample_1.settings
index 4a106c5..5f7a5e1 100644
--- a/validation/demultiplexing/double_indexed/pe/collapse/your_output.sample_1.settings
+++ b/validation/demultiplexing/double_indexed/pe/collapse/your_output.sample_1.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: Yes
diff --git a/validation/demultiplexing/double_indexed/pe/collapse/your_output.sample_2.settings b/validation/demultiplexing/double_indexed/pe/collapse/your_output.sample_2.settings
index 881ee14..e691ce1 100644
--- a/validation/demultiplexing/double_indexed/pe/collapse/your_output.sample_2.settings
+++ b/validation/demultiplexing/double_indexed/pe/collapse/your_output.sample_2.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: Yes
diff --git a/validation/demultiplexing/double_indexed/pe/collapse/your_output.settings b/validation/demultiplexing/double_indexed/pe/collapse/your_output.settings
index b62aefa..39cb829 100644
--- a/validation/demultiplexing/double_indexed/pe/collapse/your_output.settings
+++ b/validation/demultiplexing/double_indexed/pe/collapse/your_output.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: Yes
diff --git a/validation/demultiplexing/double_indexed/pe/combined_output/your_output.sample_1.settings b/validation/demultiplexing/double_indexed/pe/combined_output/your_output.sample_1.settings
index 7aa5f53..e8de93d 100644
--- a/validation/demultiplexing/double_indexed/pe/combined_output/your_output.sample_1.settings
+++ b/validation/demultiplexing/double_indexed/pe/combined_output/your_output.sample_1.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/pe/combined_output/your_output.sample_2.settings b/validation/demultiplexing/double_indexed/pe/combined_output/your_output.sample_2.settings
index 241e35b..9544c77 100644
--- a/validation/demultiplexing/double_indexed/pe/combined_output/your_output.sample_2.settings
+++ b/validation/demultiplexing/double_indexed/pe/combined_output/your_output.sample_2.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/pe/combined_output/your_output.settings b/validation/demultiplexing/double_indexed/pe/combined_output/your_output.settings
index 2db8109..c97820a 100644
--- a/validation/demultiplexing/double_indexed/pe/combined_output/your_output.settings
+++ b/validation/demultiplexing/double_indexed/pe/combined_output/your_output.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/pe/defaults/your_output.sample_1.settings b/validation/demultiplexing/double_indexed/pe/defaults/your_output.sample_1.settings
index 7aa5f53..e8de93d 100644
--- a/validation/demultiplexing/double_indexed/pe/defaults/your_output.sample_1.settings
+++ b/validation/demultiplexing/double_indexed/pe/defaults/your_output.sample_1.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/pe/defaults/your_output.sample_2.settings b/validation/demultiplexing/double_indexed/pe/defaults/your_output.sample_2.settings
index 241e35b..9544c77 100644
--- a/validation/demultiplexing/double_indexed/pe/defaults/your_output.sample_2.settings
+++ b/validation/demultiplexing/double_indexed/pe/defaults/your_output.sample_2.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/pe/defaults/your_output.settings b/validation/demultiplexing/double_indexed/pe/defaults/your_output.settings
index 2db8109..c97820a 100644
--- a/validation/demultiplexing/double_indexed/pe/defaults/your_output.settings
+++ b/validation/demultiplexing/double_indexed/pe/defaults/your_output.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/pe/interleaved/both/your_output.sample_1.settings b/validation/demultiplexing/double_indexed/pe/interleaved/both/your_output.sample_1.settings
index 5612d6c..e930d07 100644
--- a/validation/demultiplexing/double_indexed/pe/interleaved/both/your_output.sample_1.settings
+++ b/validation/demultiplexing/double_indexed/pe/interleaved/both/your_output.sample_1.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/pe/interleaved/both/your_output.sample_2.settings b/validation/demultiplexing/double_indexed/pe/interleaved/both/your_output.sample_2.settings
index ac17bba..5ab5455 100644
--- a/validation/demultiplexing/double_indexed/pe/interleaved/both/your_output.sample_2.settings
+++ b/validation/demultiplexing/double_indexed/pe/interleaved/both/your_output.sample_2.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/pe/interleaved/both/your_output.settings b/validation/demultiplexing/double_indexed/pe/interleaved/both/your_output.settings
index b4cafbf..9b43a55 100644
--- a/validation/demultiplexing/double_indexed/pe/interleaved/both/your_output.settings
+++ b/validation/demultiplexing/double_indexed/pe/interleaved/both/your_output.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/pe/interleaved/output/your_output.sample_1.settings b/validation/demultiplexing/double_indexed/pe/interleaved/output/your_output.sample_1.settings
index 64ff71e..29e3370 100644
--- a/validation/demultiplexing/double_indexed/pe/interleaved/output/your_output.sample_1.settings
+++ b/validation/demultiplexing/double_indexed/pe/interleaved/output/your_output.sample_1.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/pe/interleaved/output/your_output.sample_2.settings b/validation/demultiplexing/double_indexed/pe/interleaved/output/your_output.sample_2.settings
index bce811f..0e83b13 100644
--- a/validation/demultiplexing/double_indexed/pe/interleaved/output/your_output.sample_2.settings
+++ b/validation/demultiplexing/double_indexed/pe/interleaved/output/your_output.sample_2.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/pe/interleaved/output/your_output.settings b/validation/demultiplexing/double_indexed/pe/interleaved/output/your_output.settings
index fcec964..4a6e509 100644
--- a/validation/demultiplexing/double_indexed/pe/interleaved/output/your_output.settings
+++ b/validation/demultiplexing/double_indexed/pe/interleaved/output/your_output.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/pe/multiple_input/barcodes.txt b/validation/demultiplexing/double_indexed/pe/multiple_input/barcodes.txt
new file mode 100644
index 0000000..c60a41b
--- /dev/null
+++ b/validation/demultiplexing/double_indexed/pe/multiple_input/barcodes.txt
@@ -0,0 +1,2 @@
+sample_1	CTTGCCCT	ACGTTATT
+sample_2	CGCCGATG	TGCACGGG
diff --git a/validation/demultiplexing/double_indexed/pe/multiple_input/info.json b/validation/demultiplexing/double_indexed/pe/multiple_input/info.json
new file mode 100644
index 0000000..b5e48cf
--- /dev/null
+++ b/validation/demultiplexing/double_indexed/pe/multiple_input/info.json
@@ -0,0 +1,6 @@
+{
+	"arguments": [],
+	"return_code": 0,
+	"stderr": [
+	]
+}
diff --git a/validation/demultiplexing/double_indexed/pe/multiple_input/input_1a.fastq b/validation/demultiplexing/double_indexed/pe/multiple_input/input_1a.fastq
new file mode 100644
index 0000000..a19ebd8
--- /dev/null
+++ b/validation/demultiplexing/double_indexed/pe/multiple_input/input_1a.fastq
@@ -0,0 +1,12 @@
+ at read_s2_000/1
+CGCCGATGCCCGTGCAAGATCGGAAGAGCACACGTCTGAACTCCAGTCACCAACCAATCTCGTATGCCGTCTTCTGCTTGAAAAAAAAAAAAAAAAAAAA
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s2_200/1
+CGCCGATGGCGTAAGTTGACGTCAGCCTGCGAGGTGCCACGCCAGTGGTTGCGCTCACCCGGGGCGTAGTTGCTCCGCGCAATTTCTTGGCAGTTCGATC
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s1_075/1
+CTTGCCCTGGTTCTACGTTCTCCATCAGGTGGACGAGGGGATCTTGGCCCCCGTTCCTGCATTGGTATAATTAGACAGGATGAAATAACGTAGATCGGAA
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
diff --git a/validation/demultiplexing/double_indexed/pe/multiple_input/input_1b.fastq b/validation/demultiplexing/double_indexed/pe/multiple_input/input_1b.fastq
new file mode 100644
index 0000000..384f161
--- /dev/null
+++ b/validation/demultiplexing/double_indexed/pe/multiple_input/input_1b.fastq
@@ -0,0 +1,12 @@
+ at read_s1_200/1
+CTTGCCCTGTAGTGCAATAAAAGGATCCTCTTGTGGCCGATTGCAGACCAGCCTCGGGGCTAAACTGATAATCGTATGCTATAGACCCTGGTCGACGCCG
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s1_150/1
+CTTGCCCTCAGATGTCAGCTCATGTGTTGATATACAGCTAACTAAGGCCCGGGGGTTTAGGCTCAACCCTCTACCTGGTATACCGGCCCAACGCACTCGC
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s2_075/1
+CGCCGATGTCTTGGGAACGAGAGTGCCACCAATTAAAGTGATGGATATCGAGACGTCCCAAACCACCGCAATAGGACGGGACACCCGTGCAAGATCGGAA
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
diff --git a/validation/demultiplexing/double_indexed/pe/multiple_input/input_1c.fastq b/validation/demultiplexing/double_indexed/pe/multiple_input/input_1c.fastq
new file mode 100644
index 0000000..43df60f
--- /dev/null
+++ b/validation/demultiplexing/double_indexed/pe/multiple_input/input_1c.fastq
@@ -0,0 +1,8 @@
+ at read_s2_150/1
+CGCCGATGAGCCCCGAGTGTCCATCACAAGCCACCTCCACTAACCATCTCGGTCCATTATTTGTCACTCGTGGCTAGAAGGGAATAAAGACAACTCTCTC
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s1_000/1
+CTTGCCCTAATAACGTAGATCGGAAGAGCACACGTCTGAACTCCAGTCACCAACCAATCTCGTATGCCGTCTTCTGCTTGAAAAAAAAAAAAAAAAAAAA
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
diff --git a/validation/demultiplexing/double_indexed/pe/multiple_input/input_2a.fastq b/validation/demultiplexing/double_indexed/pe/multiple_input/input_2a.fastq
new file mode 100644
index 0000000..dff0dd5
--- /dev/null
+++ b/validation/demultiplexing/double_indexed/pe/multiple_input/input_2a.fastq
@@ -0,0 +1,12 @@
+ at read_s2_000/2
+TGCACGGGCATCGGCGAGATCGGAAGAGCGTCGTGTAGGGAAAGAGTGTAGATCTCGGTGGTCGCCGTATCATTAAAAAAAAAAAAAAAAAAAAAAAAAA
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s2_200/2
+TGCACGGGTAAGGGACGAAGTCACCGGGGGCGTTTCACTTGCGCGATCCATTGTAGTACTGGTGTGTCAATCTTCATCGGCAAAAGGTGCCTATCAAAAT
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s1_075/2
+ACGTTATTTCATCCTGTCTAATTATACCAATGCAGGAACGGGGGCCAAGATCCCCTCGTCCACCTGATGGAGAACGTAGAACCAGGGCAAGAGATCGGAA
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
diff --git a/validation/demultiplexing/double_indexed/pe/multiple_input/input_2b.fastq b/validation/demultiplexing/double_indexed/pe/multiple_input/input_2b.fastq
new file mode 100644
index 0000000..5e18593
--- /dev/null
+++ b/validation/demultiplexing/double_indexed/pe/multiple_input/input_2b.fastq
@@ -0,0 +1,12 @@
+ at read_s1_200/2
+ACGTTATTAAGGCCCGCCCATCAGGTAAGAGCATGCTCGGGAGCCAACCCCGTGGGGTGGCAGCGATACTCTCCAATCTGTCATGCGTGTCAACGTGCGT
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s1_150/2
+ACGTTATTGTGCTGCGTGAGTTGGAAGGATTGGATCCGGAAAGGCTTGGCCTTTGTAAATTCGACTGCGAGTGCGTTGGGCCGGTATACCAGGTAGAGGG
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s2_075/2
+TGCACGGGTGTCCCGTCCTATTGCGGTGGTTTGGGACGTCTCGATATCCATCACTTTAATTGGTGGCACTCTCGTTCCCAAGACATCGGCGAGATCGGAA
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
diff --git a/validation/demultiplexing/double_indexed/pe/multiple_input/input_2c.fastq b/validation/demultiplexing/double_indexed/pe/multiple_input/input_2c.fastq
new file mode 100644
index 0000000..08bba4c
--- /dev/null
+++ b/validation/demultiplexing/double_indexed/pe/multiple_input/input_2c.fastq
@@ -0,0 +1,8 @@
+ at read_s2_150/2
+TGCACGGGAAGGCTGGGTATACGGGGTAAATGGTGCCGCCTTGTTACACGCGCCGAGGTTTCAGATGAGAGAGTTGTCTTTATTCCCTTCTAGCCACGAG
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s1_000/2
+ACGTTATTAGGGCAAGAGATCGGAAGAGCGTCGTGTAGGGAAAGAGTGTAGATCTCGGTGGTCGCCGTATCATTAAAAAAAAAAAAAAAAAAAAAAAAAA
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
diff --git a/validation/demultiplexing/double_indexed/pe/multiple_input/your_output.sample_1.discarded b/validation/demultiplexing/double_indexed/pe/multiple_input/your_output.sample_1.discarded
new file mode 100644
index 0000000..5785025
--- /dev/null
+++ b/validation/demultiplexing/double_indexed/pe/multiple_input/your_output.sample_1.discarded
@@ -0,0 +1,8 @@
+ at read_s1_000/1
+
++
+
+ at read_s1_000/2
+
++
+
diff --git a/validation/demultiplexing/double_indexed/pe/multiple_input/your_output.sample_1.pair1.truncated b/validation/demultiplexing/double_indexed/pe/multiple_input/your_output.sample_1.pair1.truncated
new file mode 100644
index 0000000..c66faaa
--- /dev/null
+++ b/validation/demultiplexing/double_indexed/pe/multiple_input/your_output.sample_1.pair1.truncated
@@ -0,0 +1,12 @@
+ at read_s1_075/1
+GGTTCTACGTTCTCCATCAGGTGGACGAGGGGATCTTGGCCCCCGTTCCTGCATTGGTATAATTAGACAGGATGA
++
+GGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;
+ at read_s1_200/1
+GTAGTGCAATAAAAGGATCCTCTTGTGGCCGATTGCAGACCAGCCTCGGGGCTAAACTGATAATCGTATGCTATAGACCCTGGTCGACGCCG
++
+GGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s1_150/1
+CAGATGTCAGCTCATGTGTTGATATACAGCTAACTAAGGCCCGGGGGTTTAGGCTCAACCCTCTACCTGGTATACCGGCCCAACGCACTCGC
++
+GGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
diff --git a/validation/demultiplexing/double_indexed/pe/multiple_input/your_output.sample_1.pair2.truncated b/validation/demultiplexing/double_indexed/pe/multiple_input/your_output.sample_1.pair2.truncated
new file mode 100644
index 0000000..dd78b14
--- /dev/null
+++ b/validation/demultiplexing/double_indexed/pe/multiple_input/your_output.sample_1.pair2.truncated
@@ -0,0 +1,12 @@
+ at read_s1_075/2
+TCATCCTGTCTAATTATACCAATGCAGGAACGGGGGCCAAGATCCCCTCGTCCACCTGATGGAGAACGTAGAACC
++
+GGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;
+ at read_s1_200/2
+AAGGCCCGCCCATCAGGTAAGAGCATGCTCGGGAGCCAACCCCGTGGGGTGGCAGCGATACTCTCCAATCTGTCATGCGTGTCAACGTGCGT
++
+GGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s1_150/2
+GTGCTGCGTGAGTTGGAAGGATTGGATCCGGAAAGGCTTGGCCTTTGTAAATTCGACTGCGAGTGCGTTGGGCCGGTATACCAGGTAGAGGG
++
+GGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
diff --git a/validation/demultiplexing/double_indexed/pe/threads/one/your_output.sample_1.settings b/validation/demultiplexing/double_indexed/pe/multiple_input/your_output.sample_1.settings
similarity index 97%
copy from validation/demultiplexing/double_indexed/pe/threads/one/your_output.sample_1.settings
copy to validation/demultiplexing/double_indexed/pe/multiple_input/your_output.sample_1.settings
index 7aa5f53..e8de93d 100644
--- a/validation/demultiplexing/double_indexed/pe/threads/one/your_output.sample_1.settings
+++ b/validation/demultiplexing/double_indexed/pe/multiple_input/your_output.sample_1.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/pe/multiple_input/your_output.sample_1.singleton.truncated b/validation/demultiplexing/double_indexed/pe/multiple_input/your_output.sample_1.singleton.truncated
new file mode 100644
index 0000000..e69de29
diff --git a/validation/demultiplexing/double_indexed/pe/multiple_input/your_output.sample_2.discarded b/validation/demultiplexing/double_indexed/pe/multiple_input/your_output.sample_2.discarded
new file mode 100644
index 0000000..5cdb5b3
--- /dev/null
+++ b/validation/demultiplexing/double_indexed/pe/multiple_input/your_output.sample_2.discarded
@@ -0,0 +1,8 @@
+ at read_s2_000/1
+
++
+
+ at read_s2_000/2
+
++
+
diff --git a/validation/demultiplexing/double_indexed/pe/multiple_input/your_output.sample_2.pair1.truncated b/validation/demultiplexing/double_indexed/pe/multiple_input/your_output.sample_2.pair1.truncated
new file mode 100644
index 0000000..8f52bfa
--- /dev/null
+++ b/validation/demultiplexing/double_indexed/pe/multiple_input/your_output.sample_2.pair1.truncated
@@ -0,0 +1,12 @@
+ at read_s2_200/1
+GCGTAAGTTGACGTCAGCCTGCGAGGTGCCACGCCAGTGGTTGCGCTCACCCGGGGCGTAGTTGCTCCGCGCAATTTCTTGGCAGTTCGATC
++
+GGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s2_075/1
+TCTTGGGAACGAGAGTGCCACCAATTAAAGTGATGGATATCGAGACGTCCCAAACCACCGCAATAGGACGGGACA
++
+GGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;
+ at read_s2_150/1
+AGCCCCGAGTGTCCATCACAAGCCACCTCCACTAACCATCTCGGTCCATTATTTGTCACTCGTGGCTAGAAGGGAATAAAGACAACTCTCTC
++
+GGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
diff --git a/validation/demultiplexing/double_indexed/pe/multiple_input/your_output.sample_2.pair2.truncated b/validation/demultiplexing/double_indexed/pe/multiple_input/your_output.sample_2.pair2.truncated
new file mode 100644
index 0000000..e362626
--- /dev/null
+++ b/validation/demultiplexing/double_indexed/pe/multiple_input/your_output.sample_2.pair2.truncated
@@ -0,0 +1,12 @@
+ at read_s2_200/2
+TAAGGGACGAAGTCACCGGGGGCGTTTCACTTGCGCGATCCATTGTAGTACTGGTGTGTCAATCTTCATCGGCAAAAGGTGCCTATCAAAAT
++
+GGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s2_075/2
+TGTCCCGTCCTATTGCGGTGGTTTGGGACGTCTCGATATCCATCACTTTAATTGGTGGCACTCTCGTTCCCAAGA
++
+GGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;
+ at read_s2_150/2
+AAGGCTGGGTATACGGGGTAAATGGTGCCGCCTTGTTACACGCGCCGAGGTTTCAGATGAGAGAGTTGTCTTTATTCCCTTCTAGCCACGAG
++
+GGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
diff --git a/validation/demultiplexing/double_indexed/pe/combined_output/your_output.sample_2.settings b/validation/demultiplexing/double_indexed/pe/multiple_input/your_output.sample_2.settings
similarity index 97%
copy from validation/demultiplexing/double_indexed/pe/combined_output/your_output.sample_2.settings
copy to validation/demultiplexing/double_indexed/pe/multiple_input/your_output.sample_2.settings
index 241e35b..9544c77 100644
--- a/validation/demultiplexing/double_indexed/pe/combined_output/your_output.sample_2.settings
+++ b/validation/demultiplexing/double_indexed/pe/multiple_input/your_output.sample_2.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/pe/multiple_input/your_output.sample_2.singleton.truncated b/validation/demultiplexing/double_indexed/pe/multiple_input/your_output.sample_2.singleton.truncated
new file mode 100644
index 0000000..e69de29
diff --git a/validation/demultiplexing/double_indexed/pe/threads/one/your_output.settings b/validation/demultiplexing/double_indexed/pe/multiple_input/your_output.settings
similarity index 93%
copy from validation/demultiplexing/double_indexed/pe/threads/one/your_output.settings
copy to validation/demultiplexing/double_indexed/pe/multiple_input/your_output.settings
index 2db8109..c97820a 100644
--- a/validation/demultiplexing/double_indexed/pe/threads/one/your_output.settings
+++ b/validation/demultiplexing/double_indexed/pe/multiple_input/your_output.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/pe/multiple_input/your_output.unidentified_1 b/validation/demultiplexing/double_indexed/pe/multiple_input/your_output.unidentified_1
new file mode 100644
index 0000000..e69de29
diff --git a/validation/demultiplexing/double_indexed/pe/multiple_input/your_output.unidentified_2 b/validation/demultiplexing/double_indexed/pe/multiple_input/your_output.unidentified_2
new file mode 100644
index 0000000..e69de29
diff --git a/validation/demultiplexing/double_indexed/pe/threads/one/your_output.sample_1.settings b/validation/demultiplexing/double_indexed/pe/threads/one/your_output.sample_1.settings
index 7aa5f53..e8de93d 100644
--- a/validation/demultiplexing/double_indexed/pe/threads/one/your_output.sample_1.settings
+++ b/validation/demultiplexing/double_indexed/pe/threads/one/your_output.sample_1.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/pe/threads/one/your_output.sample_2.settings b/validation/demultiplexing/double_indexed/pe/threads/one/your_output.sample_2.settings
index 241e35b..9544c77 100644
--- a/validation/demultiplexing/double_indexed/pe/threads/one/your_output.sample_2.settings
+++ b/validation/demultiplexing/double_indexed/pe/threads/one/your_output.sample_2.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/pe/threads/one/your_output.settings b/validation/demultiplexing/double_indexed/pe/threads/one/your_output.settings
index 2db8109..c97820a 100644
--- a/validation/demultiplexing/double_indexed/pe/threads/one/your_output.settings
+++ b/validation/demultiplexing/double_indexed/pe/threads/one/your_output.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/pe/threads/three/your_output.sample_1.settings b/validation/demultiplexing/double_indexed/pe/threads/three/your_output.sample_1.settings
index 7aa5f53..e8de93d 100644
--- a/validation/demultiplexing/double_indexed/pe/threads/three/your_output.sample_1.settings
+++ b/validation/demultiplexing/double_indexed/pe/threads/three/your_output.sample_1.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/pe/threads/three/your_output.sample_2.settings b/validation/demultiplexing/double_indexed/pe/threads/three/your_output.sample_2.settings
index 241e35b..9544c77 100644
--- a/validation/demultiplexing/double_indexed/pe/threads/three/your_output.sample_2.settings
+++ b/validation/demultiplexing/double_indexed/pe/threads/three/your_output.sample_2.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/pe/threads/three/your_output.settings b/validation/demultiplexing/double_indexed/pe/threads/three/your_output.settings
index 2db8109..c97820a 100644
--- a/validation/demultiplexing/double_indexed/pe/threads/three/your_output.settings
+++ b/validation/demultiplexing/double_indexed/pe/threads/three/your_output.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/pe/threads/two/your_output.sample_1.settings b/validation/demultiplexing/double_indexed/pe/threads/two/your_output.sample_1.settings
index 7aa5f53..e8de93d 100644
--- a/validation/demultiplexing/double_indexed/pe/threads/two/your_output.sample_1.settings
+++ b/validation/demultiplexing/double_indexed/pe/threads/two/your_output.sample_1.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/pe/threads/two/your_output.sample_2.settings b/validation/demultiplexing/double_indexed/pe/threads/two/your_output.sample_2.settings
index 241e35b..9544c77 100644
--- a/validation/demultiplexing/double_indexed/pe/threads/two/your_output.sample_2.settings
+++ b/validation/demultiplexing/double_indexed/pe/threads/two/your_output.sample_2.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/pe/threads/two/your_output.settings b/validation/demultiplexing/double_indexed/pe/threads/two/your_output.settings
index 2db8109..c97820a 100644
--- a/validation/demultiplexing/double_indexed/pe/threads/two/your_output.settings
+++ b/validation/demultiplexing/double_indexed/pe/threads/two/your_output.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/se/collapse/your_output.sample_1.settings b/validation/demultiplexing/double_indexed/se/collapse/your_output.sample_1.settings
index db5b514..f01f0c9 100644
--- a/validation/demultiplexing/double_indexed/se/collapse/your_output.sample_1.settings
+++ b/validation/demultiplexing/double_indexed/se/collapse/your_output.sample_1.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: Yes
diff --git a/validation/demultiplexing/double_indexed/se/collapse/your_output.sample_2.settings b/validation/demultiplexing/double_indexed/se/collapse/your_output.sample_2.settings
index b8997f3..2ed0813 100644
--- a/validation/demultiplexing/double_indexed/se/collapse/your_output.sample_2.settings
+++ b/validation/demultiplexing/double_indexed/se/collapse/your_output.sample_2.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: Yes
diff --git a/validation/demultiplexing/double_indexed/se/collapse/your_output.settings b/validation/demultiplexing/double_indexed/se/collapse/your_output.settings
index 3d4f599..c40f7bf 100644
--- a/validation/demultiplexing/double_indexed/se/collapse/your_output.settings
+++ b/validation/demultiplexing/double_indexed/se/collapse/your_output.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: Yes
diff --git a/validation/demultiplexing/double_indexed/se/combined_output/your_output.sample_1.settings b/validation/demultiplexing/double_indexed/se/combined_output/your_output.sample_1.settings
index af85246..bef5cb8 100644
--- a/validation/demultiplexing/double_indexed/se/combined_output/your_output.sample_1.settings
+++ b/validation/demultiplexing/double_indexed/se/combined_output/your_output.sample_1.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/se/combined_output/your_output.sample_2.settings b/validation/demultiplexing/double_indexed/se/combined_output/your_output.sample_2.settings
index 8e176a6..459402d 100644
--- a/validation/demultiplexing/double_indexed/se/combined_output/your_output.sample_2.settings
+++ b/validation/demultiplexing/double_indexed/se/combined_output/your_output.sample_2.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/se/combined_output/your_output.settings b/validation/demultiplexing/double_indexed/se/combined_output/your_output.settings
index 99b9002..7942a69 100644
--- a/validation/demultiplexing/double_indexed/se/combined_output/your_output.settings
+++ b/validation/demultiplexing/double_indexed/se/combined_output/your_output.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/se/defaults/your_output.sample_1.settings b/validation/demultiplexing/double_indexed/se/defaults/your_output.sample_1.settings
index af85246..bef5cb8 100644
--- a/validation/demultiplexing/double_indexed/se/defaults/your_output.sample_1.settings
+++ b/validation/demultiplexing/double_indexed/se/defaults/your_output.sample_1.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/se/defaults/your_output.sample_2.settings b/validation/demultiplexing/double_indexed/se/defaults/your_output.sample_2.settings
index 8e176a6..459402d 100644
--- a/validation/demultiplexing/double_indexed/se/defaults/your_output.sample_2.settings
+++ b/validation/demultiplexing/double_indexed/se/defaults/your_output.sample_2.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/se/defaults/your_output.settings b/validation/demultiplexing/double_indexed/se/defaults/your_output.settings
index 99b9002..7942a69 100644
--- a/validation/demultiplexing/double_indexed/se/defaults/your_output.settings
+++ b/validation/demultiplexing/double_indexed/se/defaults/your_output.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/se/multiple_input/barcodes.txt b/validation/demultiplexing/double_indexed/se/multiple_input/barcodes.txt
new file mode 100644
index 0000000..c60a41b
--- /dev/null
+++ b/validation/demultiplexing/double_indexed/se/multiple_input/barcodes.txt
@@ -0,0 +1,2 @@
+sample_1	CTTGCCCT	ACGTTATT
+sample_2	CGCCGATG	TGCACGGG
diff --git a/validation/demultiplexing/double_indexed/se/multiple_input/info.json b/validation/demultiplexing/double_indexed/se/multiple_input/info.json
new file mode 100644
index 0000000..b5e48cf
--- /dev/null
+++ b/validation/demultiplexing/double_indexed/se/multiple_input/info.json
@@ -0,0 +1,6 @@
+{
+	"arguments": [],
+	"return_code": 0,
+	"stderr": [
+	]
+}
diff --git a/validation/demultiplexing/double_indexed/se/multiple_input/input_1a.fastq b/validation/demultiplexing/double_indexed/se/multiple_input/input_1a.fastq
new file mode 100644
index 0000000..3fa08cf
--- /dev/null
+++ b/validation/demultiplexing/double_indexed/se/multiple_input/input_1a.fastq
@@ -0,0 +1,13 @@
+ at read_s2_000/1
+CGCCGATGCCCGTGCAAGATCGGAAGAGCACACGTCTGAACTCCAGTCACCAACCAATCTCGTATGCCGTCTTCTGCTTGAAAAAAAAAAAAAAAAAAAA
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s2_200/1
+CGCCGATGGCGTAAGTTGACGTCAGCCTGCGAGGTGCCACGCCAGTGGTTGCGCTCACCCGGGGCGTAGTTGCTCCGCGCAATTTCTTGGCAGTTCGATC
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s1_075/1
+CTTGCCCTGGTTCTACGTTCTCCATCAGGTGGACGAGGGGATCTTGGCCCCCGTTCCTGCATTGGTATAATTAGACAGGATGAAATAACGTAGATCGGAA
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+
diff --git a/validation/demultiplexing/double_indexed/se/multiple_input/input_1b.fastq b/validation/demultiplexing/double_indexed/se/multiple_input/input_1b.fastq
new file mode 100644
index 0000000..384f161
--- /dev/null
+++ b/validation/demultiplexing/double_indexed/se/multiple_input/input_1b.fastq
@@ -0,0 +1,12 @@
+ at read_s1_200/1
+CTTGCCCTGTAGTGCAATAAAAGGATCCTCTTGTGGCCGATTGCAGACCAGCCTCGGGGCTAAACTGATAATCGTATGCTATAGACCCTGGTCGACGCCG
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s1_150/1
+CTTGCCCTCAGATGTCAGCTCATGTGTTGATATACAGCTAACTAAGGCCCGGGGGTTTAGGCTCAACCCTCTACCTGGTATACCGGCCCAACGCACTCGC
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s2_075/1
+CGCCGATGTCTTGGGAACGAGAGTGCCACCAATTAAAGTGATGGATATCGAGACGTCCCAAACCACCGCAATAGGACGGGACACCCGTGCAAGATCGGAA
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
diff --git a/validation/demultiplexing/double_indexed/se/multiple_input/input_1c.fastq b/validation/demultiplexing/double_indexed/se/multiple_input/input_1c.fastq
new file mode 100644
index 0000000..43df60f
--- /dev/null
+++ b/validation/demultiplexing/double_indexed/se/multiple_input/input_1c.fastq
@@ -0,0 +1,8 @@
+ at read_s2_150/1
+CGCCGATGAGCCCCGAGTGTCCATCACAAGCCACCTCCACTAACCATCTCGGTCCATTATTTGTCACTCGTGGCTAGAAGGGAATAAAGACAACTCTCTC
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s1_000/1
+CTTGCCCTAATAACGTAGATCGGAAGAGCACACGTCTGAACTCCAGTCACCAACCAATCTCGTATGCCGTCTTCTGCTTGAAAAAAAAAAAAAAAAAAAA
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
diff --git a/validation/demultiplexing/double_indexed/se/multiple_input/your_output.sample_1.discarded b/validation/demultiplexing/double_indexed/se/multiple_input/your_output.sample_1.discarded
new file mode 100644
index 0000000..6369c26
--- /dev/null
+++ b/validation/demultiplexing/double_indexed/se/multiple_input/your_output.sample_1.discarded
@@ -0,0 +1,4 @@
+ at read_s1_000/1
+
++
+
diff --git a/validation/demultiplexing/double_indexed/se/threads/one/your_output.sample_1.settings b/validation/demultiplexing/double_indexed/se/multiple_input/your_output.sample_1.settings
similarity index 96%
copy from validation/demultiplexing/double_indexed/se/threads/one/your_output.sample_1.settings
copy to validation/demultiplexing/double_indexed/se/multiple_input/your_output.sample_1.settings
index af85246..bef5cb8 100644
--- a/validation/demultiplexing/double_indexed/se/threads/one/your_output.sample_1.settings
+++ b/validation/demultiplexing/double_indexed/se/multiple_input/your_output.sample_1.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/se/multiple_input/your_output.sample_1.truncated b/validation/demultiplexing/double_indexed/se/multiple_input/your_output.sample_1.truncated
new file mode 100644
index 0000000..c66faaa
--- /dev/null
+++ b/validation/demultiplexing/double_indexed/se/multiple_input/your_output.sample_1.truncated
@@ -0,0 +1,12 @@
+ at read_s1_075/1
+GGTTCTACGTTCTCCATCAGGTGGACGAGGGGATCTTGGCCCCCGTTCCTGCATTGGTATAATTAGACAGGATGA
++
+GGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;
+ at read_s1_200/1
+GTAGTGCAATAAAAGGATCCTCTTGTGGCCGATTGCAGACCAGCCTCGGGGCTAAACTGATAATCGTATGCTATAGACCCTGGTCGACGCCG
++
+GGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s1_150/1
+CAGATGTCAGCTCATGTGTTGATATACAGCTAACTAAGGCCCGGGGGTTTAGGCTCAACCCTCTACCTGGTATACCGGCCCAACGCACTCGC
++
+GGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
diff --git a/validation/demultiplexing/double_indexed/se/multiple_input/your_output.sample_2.discarded b/validation/demultiplexing/double_indexed/se/multiple_input/your_output.sample_2.discarded
new file mode 100644
index 0000000..d19ac1c
--- /dev/null
+++ b/validation/demultiplexing/double_indexed/se/multiple_input/your_output.sample_2.discarded
@@ -0,0 +1,4 @@
+ at read_s2_000/1
+
++
+
diff --git a/validation/demultiplexing/double_indexed/se/defaults/your_output.sample_2.settings b/validation/demultiplexing/double_indexed/se/multiple_input/your_output.sample_2.settings
similarity index 96%
copy from validation/demultiplexing/double_indexed/se/defaults/your_output.sample_2.settings
copy to validation/demultiplexing/double_indexed/se/multiple_input/your_output.sample_2.settings
index 8e176a6..459402d 100644
--- a/validation/demultiplexing/double_indexed/se/defaults/your_output.sample_2.settings
+++ b/validation/demultiplexing/double_indexed/se/multiple_input/your_output.sample_2.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/se/multiple_input/your_output.sample_2.truncated b/validation/demultiplexing/double_indexed/se/multiple_input/your_output.sample_2.truncated
new file mode 100644
index 0000000..7bfe216
--- /dev/null
+++ b/validation/demultiplexing/double_indexed/se/multiple_input/your_output.sample_2.truncated
@@ -0,0 +1,12 @@
+ at read_s2_200/1
+GCGTAAGTTGACGTCAGCCTGCGAGGTGCCACGCCAGTGGTTGCGCTCACCCGGGGCGTAGTTGCTCCGCGCAATTTCTTGGCAGTTCGAT
++
+GGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::998876654321
+ at read_s2_075/1
+TCTTGGGAACGAGAGTGCCACCAATTAAAGTGATGGATATCGAGACGTCCCAAACCACCGCAATAGGACGGGACA
++
+GGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;
+ at read_s2_150/1
+AGCCCCGAGTGTCCATCACAAGCCACCTCCACTAACCATCTCGGTCCATTATTTGTCACTCGTGGCTAGAAGGGAATAAAGACAACTCTCTC
++
+GGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
diff --git a/validation/demultiplexing/double_indexed/se/threads/three/your_output.settings b/validation/demultiplexing/double_indexed/se/multiple_input/your_output.settings
similarity index 93%
copy from validation/demultiplexing/double_indexed/se/threads/three/your_output.settings
copy to validation/demultiplexing/double_indexed/se/multiple_input/your_output.settings
index 99b9002..7942a69 100644
--- a/validation/demultiplexing/double_indexed/se/threads/three/your_output.settings
+++ b/validation/demultiplexing/double_indexed/se/multiple_input/your_output.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/se/multiple_input/your_output.unidentified b/validation/demultiplexing/double_indexed/se/multiple_input/your_output.unidentified
new file mode 100644
index 0000000..e69de29
diff --git a/validation/demultiplexing/double_indexed/se/threads/one/your_output.sample_1.settings b/validation/demultiplexing/double_indexed/se/threads/one/your_output.sample_1.settings
index af85246..bef5cb8 100644
--- a/validation/demultiplexing/double_indexed/se/threads/one/your_output.sample_1.settings
+++ b/validation/demultiplexing/double_indexed/se/threads/one/your_output.sample_1.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/se/threads/one/your_output.sample_2.settings b/validation/demultiplexing/double_indexed/se/threads/one/your_output.sample_2.settings
index 8e176a6..459402d 100644
--- a/validation/demultiplexing/double_indexed/se/threads/one/your_output.sample_2.settings
+++ b/validation/demultiplexing/double_indexed/se/threads/one/your_output.sample_2.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/se/threads/one/your_output.settings b/validation/demultiplexing/double_indexed/se/threads/one/your_output.settings
index 99b9002..7942a69 100644
--- a/validation/demultiplexing/double_indexed/se/threads/one/your_output.settings
+++ b/validation/demultiplexing/double_indexed/se/threads/one/your_output.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/se/threads/three/your_output.sample_1.settings b/validation/demultiplexing/double_indexed/se/threads/three/your_output.sample_1.settings
index af85246..bef5cb8 100644
--- a/validation/demultiplexing/double_indexed/se/threads/three/your_output.sample_1.settings
+++ b/validation/demultiplexing/double_indexed/se/threads/three/your_output.sample_1.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/se/threads/three/your_output.sample_2.settings b/validation/demultiplexing/double_indexed/se/threads/three/your_output.sample_2.settings
index 8e176a6..459402d 100644
--- a/validation/demultiplexing/double_indexed/se/threads/three/your_output.sample_2.settings
+++ b/validation/demultiplexing/double_indexed/se/threads/three/your_output.sample_2.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/se/threads/three/your_output.settings b/validation/demultiplexing/double_indexed/se/threads/three/your_output.settings
index 99b9002..7942a69 100644
--- a/validation/demultiplexing/double_indexed/se/threads/three/your_output.settings
+++ b/validation/demultiplexing/double_indexed/se/threads/three/your_output.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/se/threads/two/your_output.sample_1.settings b/validation/demultiplexing/double_indexed/se/threads/two/your_output.sample_1.settings
index af85246..bef5cb8 100644
--- a/validation/demultiplexing/double_indexed/se/threads/two/your_output.sample_1.settings
+++ b/validation/demultiplexing/double_indexed/se/threads/two/your_output.sample_1.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/se/threads/two/your_output.sample_2.settings b/validation/demultiplexing/double_indexed/se/threads/two/your_output.sample_2.settings
index 8e176a6..459402d 100644
--- a/validation/demultiplexing/double_indexed/se/threads/two/your_output.sample_2.settings
+++ b/validation/demultiplexing/double_indexed/se/threads/two/your_output.sample_2.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/double_indexed/se/threads/two/your_output.settings b/validation/demultiplexing/double_indexed/se/threads/two/your_output.settings
index 99b9002..7942a69 100644
--- a/validation/demultiplexing/double_indexed/se/threads/two/your_output.settings
+++ b/validation/demultiplexing/double_indexed/se/threads/two/your_output.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/pe/collapse/your_output.sample_1.settings b/validation/demultiplexing/single_indexed/pe/collapse/your_output.sample_1.settings
index 04aebde..b75bea4 100644
--- a/validation/demultiplexing/single_indexed/pe/collapse/your_output.sample_1.settings
+++ b/validation/demultiplexing/single_indexed/pe/collapse/your_output.sample_1.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: Yes
diff --git a/validation/demultiplexing/single_indexed/pe/collapse/your_output.sample_2.settings b/validation/demultiplexing/single_indexed/pe/collapse/your_output.sample_2.settings
index e829d00..d7ae855 100644
--- a/validation/demultiplexing/single_indexed/pe/collapse/your_output.sample_2.settings
+++ b/validation/demultiplexing/single_indexed/pe/collapse/your_output.sample_2.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: Yes
diff --git a/validation/demultiplexing/single_indexed/pe/collapse/your_output.settings b/validation/demultiplexing/single_indexed/pe/collapse/your_output.settings
index 0950a5a..f380382 100644
--- a/validation/demultiplexing/single_indexed/pe/collapse/your_output.settings
+++ b/validation/demultiplexing/single_indexed/pe/collapse/your_output.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: Yes
diff --git a/validation/demultiplexing/single_indexed/pe/combined_output/your_output.sample_1.settings b/validation/demultiplexing/single_indexed/pe/combined_output/your_output.sample_1.settings
index 0bf38ea..0c36a45 100644
--- a/validation/demultiplexing/single_indexed/pe/combined_output/your_output.sample_1.settings
+++ b/validation/demultiplexing/single_indexed/pe/combined_output/your_output.sample_1.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/pe/combined_output/your_output.sample_2.settings b/validation/demultiplexing/single_indexed/pe/combined_output/your_output.sample_2.settings
index 761dd4d..6488aa2 100644
--- a/validation/demultiplexing/single_indexed/pe/combined_output/your_output.sample_2.settings
+++ b/validation/demultiplexing/single_indexed/pe/combined_output/your_output.sample_2.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/pe/combined_output/your_output.settings b/validation/demultiplexing/single_indexed/pe/combined_output/your_output.settings
index ccbaf99..4af3f9b 100644
--- a/validation/demultiplexing/single_indexed/pe/combined_output/your_output.settings
+++ b/validation/demultiplexing/single_indexed/pe/combined_output/your_output.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/pe/defaults/your_output.sample_1.settings b/validation/demultiplexing/single_indexed/pe/defaults/your_output.sample_1.settings
index 0bf38ea..0c36a45 100644
--- a/validation/demultiplexing/single_indexed/pe/defaults/your_output.sample_1.settings
+++ b/validation/demultiplexing/single_indexed/pe/defaults/your_output.sample_1.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/pe/defaults/your_output.sample_2.settings b/validation/demultiplexing/single_indexed/pe/defaults/your_output.sample_2.settings
index 761dd4d..6488aa2 100644
--- a/validation/demultiplexing/single_indexed/pe/defaults/your_output.sample_2.settings
+++ b/validation/demultiplexing/single_indexed/pe/defaults/your_output.sample_2.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/pe/defaults/your_output.settings b/validation/demultiplexing/single_indexed/pe/defaults/your_output.settings
index ccbaf99..4af3f9b 100644
--- a/validation/demultiplexing/single_indexed/pe/defaults/your_output.settings
+++ b/validation/demultiplexing/single_indexed/pe/defaults/your_output.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/pe/interleaved/both/your_output.sample_1.settings b/validation/demultiplexing/single_indexed/pe/interleaved/both/your_output.sample_1.settings
index 0bf38ea..0c36a45 100644
--- a/validation/demultiplexing/single_indexed/pe/interleaved/both/your_output.sample_1.settings
+++ b/validation/demultiplexing/single_indexed/pe/interleaved/both/your_output.sample_1.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/pe/interleaved/both/your_output.sample_2.settings b/validation/demultiplexing/single_indexed/pe/interleaved/both/your_output.sample_2.settings
index 761dd4d..6488aa2 100644
--- a/validation/demultiplexing/single_indexed/pe/interleaved/both/your_output.sample_2.settings
+++ b/validation/demultiplexing/single_indexed/pe/interleaved/both/your_output.sample_2.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/pe/interleaved/both/your_output.settings b/validation/demultiplexing/single_indexed/pe/interleaved/both/your_output.settings
index ccbaf99..4af3f9b 100644
--- a/validation/demultiplexing/single_indexed/pe/interleaved/both/your_output.settings
+++ b/validation/demultiplexing/single_indexed/pe/interleaved/both/your_output.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/pe/interleaved/output/your_output.sample_1.settings b/validation/demultiplexing/single_indexed/pe/interleaved/output/your_output.sample_1.settings
index 0bf38ea..0c36a45 100644
--- a/validation/demultiplexing/single_indexed/pe/interleaved/output/your_output.sample_1.settings
+++ b/validation/demultiplexing/single_indexed/pe/interleaved/output/your_output.sample_1.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/pe/interleaved/output/your_output.sample_2.settings b/validation/demultiplexing/single_indexed/pe/interleaved/output/your_output.sample_2.settings
index 761dd4d..6488aa2 100644
--- a/validation/demultiplexing/single_indexed/pe/interleaved/output/your_output.sample_2.settings
+++ b/validation/demultiplexing/single_indexed/pe/interleaved/output/your_output.sample_2.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/pe/interleaved/output/your_output.settings b/validation/demultiplexing/single_indexed/pe/interleaved/output/your_output.settings
index ccbaf99..4af3f9b 100644
--- a/validation/demultiplexing/single_indexed/pe/interleaved/output/your_output.settings
+++ b/validation/demultiplexing/single_indexed/pe/interleaved/output/your_output.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/pe/multiple_input/barcodes.txt b/validation/demultiplexing/single_indexed/pe/multiple_input/barcodes.txt
new file mode 100644
index 0000000..0369895
--- /dev/null
+++ b/validation/demultiplexing/single_indexed/pe/multiple_input/barcodes.txt
@@ -0,0 +1,2 @@
+sample_1	GCGCCGGA	
+sample_2	CAGGACAT	
diff --git a/validation/demultiplexing/single_indexed/pe/multiple_input/info.json b/validation/demultiplexing/single_indexed/pe/multiple_input/info.json
new file mode 100644
index 0000000..b5e48cf
--- /dev/null
+++ b/validation/demultiplexing/single_indexed/pe/multiple_input/info.json
@@ -0,0 +1,6 @@
+{
+	"arguments": [],
+	"return_code": 0,
+	"stderr": [
+	]
+}
diff --git a/validation/demultiplexing/single_indexed/pe/multiple_input/input_1a.fastq b/validation/demultiplexing/single_indexed/pe/multiple_input/input_1a.fastq
new file mode 100644
index 0000000..4ab93c5
--- /dev/null
+++ b/validation/demultiplexing/single_indexed/pe/multiple_input/input_1a.fastq
@@ -0,0 +1,12 @@
+ at read_s1_000/1
+GCGCCGGAAGATCGGAAGAGCACACGTCTGAACTCCAGTCACCAACCAATCTCGTATGCCGTCTTCTGCTTGAAAAAAAAAAAAAAAAAAAAAAAAAAAA
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s2_000/1
+CAGGACATAGATCGGAAGAGCACACGTCTGAACTCCAGTCACCAACCAATCTCGTATGCCGTCTTCTGCTTGAAAAAAAAAAAAAAAAAAAAAAAAAAAA
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s1_075/1
+GCGCCGGAGACGGTCCCATTAATGCACTATCGGATTTACACATTTGCGTGAATAAATCGACAGATGAATCATTAAGCTCCTACAGATCGGAAGAGCACAC
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
diff --git a/validation/demultiplexing/single_indexed/pe/multiple_input/input_1b.fastq b/validation/demultiplexing/single_indexed/pe/multiple_input/input_1b.fastq
new file mode 100644
index 0000000..54ce52b
--- /dev/null
+++ b/validation/demultiplexing/single_indexed/pe/multiple_input/input_1b.fastq
@@ -0,0 +1,12 @@
+ at read_s2_150/1
+CAGGACATTGATCTCATACATTTAAACAAAGTATGCCTTACGCATGCCTTAATGATACGTAACCTAGGCAACAGAGTCTTTACTTGTACCTGCTACACAC
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s1_200/1
+GCGCCGGATCCATCAGGATCGTATTATACTAAGCTAGGACTGTGCAGTGCACAGAGAGGAGATGACCATGATCCTCGAGCAAGTTGCCGCAGGCTCGGGC
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s1_150/1
+GCGCCGGATGCACCGTAGCCATATGGGCTGTTGGGGACACAGGGCGTCGGCATTCCTTTATTACTGACGCCGCTAGAGTCTATGCAAGGTTATAACGTAT
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
diff --git a/validation/demultiplexing/single_indexed/pe/multiple_input/input_1c.fastq b/validation/demultiplexing/single_indexed/pe/multiple_input/input_1c.fastq
new file mode 100644
index 0000000..cabadf1
--- /dev/null
+++ b/validation/demultiplexing/single_indexed/pe/multiple_input/input_1c.fastq
@@ -0,0 +1,8 @@
+ at read_s2_075/1
+CAGGACATTCGCTAGCCCAAGATCACGCTTTCCGCGACGTTTTAGAGCGTGCATACCGGGGCGTTTCTCAGATAGGTATTTCAAGATCGGAAGAGCACAC
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s2_200/1
+CAGGACATACCCTCACGCTTGCACGACGACAGCGGTCCCCTATAAATGTATGTTGACGCAGCGAGAGGCCAGGACCCGGGCGTGTTACCACTAAGACCCT
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
diff --git a/validation/demultiplexing/single_indexed/pe/multiple_input/input_2a.fastq b/validation/demultiplexing/single_indexed/pe/multiple_input/input_2a.fastq
new file mode 100644
index 0000000..b2ff77d
--- /dev/null
+++ b/validation/demultiplexing/single_indexed/pe/multiple_input/input_2a.fastq
@@ -0,0 +1,12 @@
+ at read_s1_000/2
+TCCGGCGCAGATCGGAAGAGCGTCGTGTAGGGAAAGAGTGTAGATCTCGGTGGTCGCCGTATCATTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s2_000/2
+ATGTCCTGAGATCGGAAGAGCGTCGTGTAGGGAAAGAGTGTAGATCTCGGTGGTCGCCGTATCATTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s1_075/2
+GTAGGAGCTTAATGATTCATCTGTCGATTTATTCACGCAAATGTGTAAATCCGATAGTGCATTAATGGGACCGTCTCCGGCGCAGATCGGAAGAGCGTCG
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
diff --git a/validation/demultiplexing/single_indexed/pe/multiple_input/input_2b.fastq b/validation/demultiplexing/single_indexed/pe/multiple_input/input_2b.fastq
new file mode 100644
index 0000000..d874e1a
--- /dev/null
+++ b/validation/demultiplexing/single_indexed/pe/multiple_input/input_2b.fastq
@@ -0,0 +1,12 @@
+ at read_s2_150/2
+AGAACAGGATACAATGAAAATGCATCGCGTTGGCAACTCTCACCTTGCTCTTGGACCCGTGTGTAGCAGGTACAAGTAAAGACTCTGTTGCCTAGGTTAC
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s1_200/2
+CCTTCTTATGCTCGACTGGCTCTGTATAAGCCCAAGACATTATGAAAGGTCTCGCGTTTGTCTACCAGGCTCCGTTACGGATACAAGTGCCCTACTGTCA
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s1_150/2
+ATCAAGGGAGGTCACGTGAATTTTGCCTTCTAGACTAGCGTACATGACCGCGAATTAGATACGTTATAACCTTGCATAGACTCTAGCGGCGTCAGTAATA
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
diff --git a/validation/demultiplexing/single_indexed/pe/multiple_input/input_2c.fastq b/validation/demultiplexing/single_indexed/pe/multiple_input/input_2c.fastq
new file mode 100644
index 0000000..d679d32
--- /dev/null
+++ b/validation/demultiplexing/single_indexed/pe/multiple_input/input_2c.fastq
@@ -0,0 +1,8 @@
+ at read_s2_075/2
+TGAAATACCTATCTGAGAAACGCCCCGGTATGCACGCTCTAAAACGTCGCGGAAAGCGTGATCTTGGGCTAGCGAATGTCCTGAGATCGGAAGAGCGTCG
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s2_200/2
+ATGCTGATTAGATATGTCTTTCATCGGCTTGTGACCGAGGAGTGGTACGGCCGTTCCATATTGGGTGATTAGGAAGATGTCCCGGCTTGCTGCTTCTCGT
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
diff --git a/validation/demultiplexing/single_indexed/pe/multiple_input/your_output.sample_1.discarded b/validation/demultiplexing/single_indexed/pe/multiple_input/your_output.sample_1.discarded
new file mode 100644
index 0000000..5785025
--- /dev/null
+++ b/validation/demultiplexing/single_indexed/pe/multiple_input/your_output.sample_1.discarded
@@ -0,0 +1,8 @@
+ at read_s1_000/1
+
++
+
+ at read_s1_000/2
+
++
+
diff --git a/validation/demultiplexing/single_indexed/pe/multiple_input/your_output.sample_1.pair1.truncated b/validation/demultiplexing/single_indexed/pe/multiple_input/your_output.sample_1.pair1.truncated
new file mode 100644
index 0000000..d88dde7
--- /dev/null
+++ b/validation/demultiplexing/single_indexed/pe/multiple_input/your_output.sample_1.pair1.truncated
@@ -0,0 +1,12 @@
+ at read_s1_075/1
+GACGGTCCCATTAATGCACTATCGGATTTACACATTTGCGTGAATAAATCGACAGATGAATCATTAAGCTCCTAC
++
+GGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;
+ at read_s1_200/1
+TCCATCAGGATCGTATTATACTAAGCTAGGACTGTGCAGTGCACAGAGAGGAGATGACCATGATCCTCGAGCAAGTTGCCGCAGGCTCGGGC
++
+GGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s1_150/1
+TGCACCGTAGCCATATGGGCTGTTGGGGACACAGGGCGTCGGCATTCCTTTATTACTGACGCCGCTAGAGTCTATGCAAGGTTATAACGTAT
++
+GGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
diff --git a/validation/demultiplexing/single_indexed/pe/multiple_input/your_output.sample_1.pair2.truncated b/validation/demultiplexing/single_indexed/pe/multiple_input/your_output.sample_1.pair2.truncated
new file mode 100644
index 0000000..b4f3285
--- /dev/null
+++ b/validation/demultiplexing/single_indexed/pe/multiple_input/your_output.sample_1.pair2.truncated
@@ -0,0 +1,12 @@
+ at read_s1_075/2
+GTAGGAGCTTAATGATTCATCTGTCGATTTATTCACGCAAATGTGTAAATCCGATAGTGCATTAATGGGACCGTC
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>
+ at read_s1_200/2
+CCTTCTTATGCTCGACTGGCTCTGTATAAGCCCAAGACATTATGAAAGGTCTCGCGTTTGTCTACCAGGCTCCGTTACGGATACAAGTGCCCTACTGTCA
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s1_150/2
+ATCAAGGGAGGTCACGTGAATTTTGCCTTCTAGACTAGCGTACATGACCGCGAATTAGATACGTTATAACCTTGCATAGACTCTAGCGGCGTCAGTAATA
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
diff --git a/validation/demultiplexing/single_indexed/pe/combined_output/your_output.sample_1.settings b/validation/demultiplexing/single_indexed/pe/multiple_input/your_output.sample_1.settings
similarity index 97%
copy from validation/demultiplexing/single_indexed/pe/combined_output/your_output.sample_1.settings
copy to validation/demultiplexing/single_indexed/pe/multiple_input/your_output.sample_1.settings
index 0bf38ea..0c36a45 100644
--- a/validation/demultiplexing/single_indexed/pe/combined_output/your_output.sample_1.settings
+++ b/validation/demultiplexing/single_indexed/pe/multiple_input/your_output.sample_1.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/pe/multiple_input/your_output.sample_1.singleton.truncated b/validation/demultiplexing/single_indexed/pe/multiple_input/your_output.sample_1.singleton.truncated
new file mode 100644
index 0000000..e69de29
diff --git a/validation/demultiplexing/single_indexed/pe/multiple_input/your_output.sample_2.discarded b/validation/demultiplexing/single_indexed/pe/multiple_input/your_output.sample_2.discarded
new file mode 100644
index 0000000..5cdb5b3
--- /dev/null
+++ b/validation/demultiplexing/single_indexed/pe/multiple_input/your_output.sample_2.discarded
@@ -0,0 +1,8 @@
+ at read_s2_000/1
+
++
+
+ at read_s2_000/2
+
++
+
diff --git a/validation/demultiplexing/single_indexed/pe/multiple_input/your_output.sample_2.pair1.truncated b/validation/demultiplexing/single_indexed/pe/multiple_input/your_output.sample_2.pair1.truncated
new file mode 100644
index 0000000..95406f0
--- /dev/null
+++ b/validation/demultiplexing/single_indexed/pe/multiple_input/your_output.sample_2.pair1.truncated
@@ -0,0 +1,12 @@
+ at read_s2_150/1
+TGATCTCATACATTTAAACAAAGTATGCCTTACGCATGCCTTAATGATACGTAACCTAGGCAACAGAGTCTTTACTTGTACCTGCTACACAC
++
+GGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s2_075/1
+TCGCTAGCCCAAGATCACGCTTTCCGCGACGTTTTAGAGCGTGCATACCGGGGCGTTTCTCAGATAGGTATTTCA
++
+GGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;
+ at read_s2_200/1
+ACCCTCACGCTTGCACGACGACAGCGGTCCCCTATAAATGTATGTTGACGCAGCGAGAGGCCAGGACCCGGGCGTGTTACCACTAAGACCCT
++
+GGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
diff --git a/validation/demultiplexing/single_indexed/pe/multiple_input/your_output.sample_2.pair2.truncated b/validation/demultiplexing/single_indexed/pe/multiple_input/your_output.sample_2.pair2.truncated
new file mode 100644
index 0000000..8036904
--- /dev/null
+++ b/validation/demultiplexing/single_indexed/pe/multiple_input/your_output.sample_2.pair2.truncated
@@ -0,0 +1,12 @@
+ at read_s2_150/2
+AGAACAGGATACAATGAAAATGCATCGCGTTGGCAACTCTCACCTTGCTCTTGGACCCGTGTGTAGCAGGTACAAGTAAAGACTCTGTTGCCTAGGTTAC
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s2_075/2
+TGAAATACCTATCTGAGAAACGCCCCGGTATGCACGCTCTAAAACGTCGCGGAAAGCGTGATCTTGGGCTAGCGA
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>
+ at read_s2_200/2
+ATGCTGATTAGATATGTCTTTCATCGGCTTGTGACCGAGGAGTGGTACGGCCGTTCCATATTGGGTGATTAGGAAGATGTCCCGGCTTGCTGCTTCTCGT
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
diff --git a/validation/demultiplexing/single_indexed/pe/interleaved/both/your_output.sample_2.settings b/validation/demultiplexing/single_indexed/pe/multiple_input/your_output.sample_2.settings
similarity index 97%
copy from validation/demultiplexing/single_indexed/pe/interleaved/both/your_output.sample_2.settings
copy to validation/demultiplexing/single_indexed/pe/multiple_input/your_output.sample_2.settings
index 761dd4d..6488aa2 100644
--- a/validation/demultiplexing/single_indexed/pe/interleaved/both/your_output.sample_2.settings
+++ b/validation/demultiplexing/single_indexed/pe/multiple_input/your_output.sample_2.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/pe/multiple_input/your_output.sample_2.singleton.truncated b/validation/demultiplexing/single_indexed/pe/multiple_input/your_output.sample_2.singleton.truncated
new file mode 100644
index 0000000..e69de29
diff --git a/validation/demultiplexing/single_indexed/pe/interleaved/output/your_output.settings b/validation/demultiplexing/single_indexed/pe/multiple_input/your_output.settings
similarity index 93%
copy from validation/demultiplexing/single_indexed/pe/interleaved/output/your_output.settings
copy to validation/demultiplexing/single_indexed/pe/multiple_input/your_output.settings
index ccbaf99..4af3f9b 100644
--- a/validation/demultiplexing/single_indexed/pe/interleaved/output/your_output.settings
+++ b/validation/demultiplexing/single_indexed/pe/multiple_input/your_output.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/pe/multiple_input/your_output.unidentified_1 b/validation/demultiplexing/single_indexed/pe/multiple_input/your_output.unidentified_1
new file mode 100644
index 0000000..e69de29
diff --git a/validation/demultiplexing/single_indexed/pe/multiple_input/your_output.unidentified_2 b/validation/demultiplexing/single_indexed/pe/multiple_input/your_output.unidentified_2
new file mode 100644
index 0000000..e69de29
diff --git a/validation/demultiplexing/single_indexed/pe/threads/one/your_output.sample_1.settings b/validation/demultiplexing/single_indexed/pe/threads/one/your_output.sample_1.settings
index 0bf38ea..0c36a45 100644
--- a/validation/demultiplexing/single_indexed/pe/threads/one/your_output.sample_1.settings
+++ b/validation/demultiplexing/single_indexed/pe/threads/one/your_output.sample_1.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/pe/threads/one/your_output.sample_2.settings b/validation/demultiplexing/single_indexed/pe/threads/one/your_output.sample_2.settings
index 761dd4d..6488aa2 100644
--- a/validation/demultiplexing/single_indexed/pe/threads/one/your_output.sample_2.settings
+++ b/validation/demultiplexing/single_indexed/pe/threads/one/your_output.sample_2.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/pe/threads/one/your_output.settings b/validation/demultiplexing/single_indexed/pe/threads/one/your_output.settings
index ccbaf99..4af3f9b 100644
--- a/validation/demultiplexing/single_indexed/pe/threads/one/your_output.settings
+++ b/validation/demultiplexing/single_indexed/pe/threads/one/your_output.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/pe/threads/three/your_output.sample_1.settings b/validation/demultiplexing/single_indexed/pe/threads/three/your_output.sample_1.settings
index 0bf38ea..0c36a45 100644
--- a/validation/demultiplexing/single_indexed/pe/threads/three/your_output.sample_1.settings
+++ b/validation/demultiplexing/single_indexed/pe/threads/three/your_output.sample_1.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/pe/threads/three/your_output.sample_2.settings b/validation/demultiplexing/single_indexed/pe/threads/three/your_output.sample_2.settings
index 761dd4d..6488aa2 100644
--- a/validation/demultiplexing/single_indexed/pe/threads/three/your_output.sample_2.settings
+++ b/validation/demultiplexing/single_indexed/pe/threads/three/your_output.sample_2.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/pe/threads/three/your_output.settings b/validation/demultiplexing/single_indexed/pe/threads/three/your_output.settings
index ccbaf99..4af3f9b 100644
--- a/validation/demultiplexing/single_indexed/pe/threads/three/your_output.settings
+++ b/validation/demultiplexing/single_indexed/pe/threads/three/your_output.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/pe/threads/two/your_output.sample_1.settings b/validation/demultiplexing/single_indexed/pe/threads/two/your_output.sample_1.settings
index 0bf38ea..0c36a45 100644
--- a/validation/demultiplexing/single_indexed/pe/threads/two/your_output.sample_1.settings
+++ b/validation/demultiplexing/single_indexed/pe/threads/two/your_output.sample_1.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/pe/threads/two/your_output.sample_2.settings b/validation/demultiplexing/single_indexed/pe/threads/two/your_output.sample_2.settings
index 761dd4d..6488aa2 100644
--- a/validation/demultiplexing/single_indexed/pe/threads/two/your_output.sample_2.settings
+++ b/validation/demultiplexing/single_indexed/pe/threads/two/your_output.sample_2.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/pe/threads/two/your_output.settings b/validation/demultiplexing/single_indexed/pe/threads/two/your_output.settings
index ccbaf99..4af3f9b 100644
--- a/validation/demultiplexing/single_indexed/pe/threads/two/your_output.settings
+++ b/validation/demultiplexing/single_indexed/pe/threads/two/your_output.settings
@@ -27,9 +27,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/se/collapse/your_output.sample_1.settings b/validation/demultiplexing/single_indexed/se/collapse/your_output.sample_1.settings
index ad1d9d2..cd720c2 100644
--- a/validation/demultiplexing/single_indexed/se/collapse/your_output.sample_1.settings
+++ b/validation/demultiplexing/single_indexed/se/collapse/your_output.sample_1.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: Yes
diff --git a/validation/demultiplexing/single_indexed/se/collapse/your_output.sample_2.settings b/validation/demultiplexing/single_indexed/se/collapse/your_output.sample_2.settings
index 7db3146..cee9fd5 100644
--- a/validation/demultiplexing/single_indexed/se/collapse/your_output.sample_2.settings
+++ b/validation/demultiplexing/single_indexed/se/collapse/your_output.sample_2.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: Yes
diff --git a/validation/demultiplexing/single_indexed/se/collapse/your_output.settings b/validation/demultiplexing/single_indexed/se/collapse/your_output.settings
index e17a1a5..482f5db 100644
--- a/validation/demultiplexing/single_indexed/se/collapse/your_output.settings
+++ b/validation/demultiplexing/single_indexed/se/collapse/your_output.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: Yes
diff --git a/validation/demultiplexing/single_indexed/se/combined_output/your_output.sample_1.settings b/validation/demultiplexing/single_indexed/se/combined_output/your_output.sample_1.settings
index 230f576..c80c598 100644
--- a/validation/demultiplexing/single_indexed/se/combined_output/your_output.sample_1.settings
+++ b/validation/demultiplexing/single_indexed/se/combined_output/your_output.sample_1.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/se/combined_output/your_output.sample_2.settings b/validation/demultiplexing/single_indexed/se/combined_output/your_output.sample_2.settings
index 2c64c8d..1413075 100644
--- a/validation/demultiplexing/single_indexed/se/combined_output/your_output.sample_2.settings
+++ b/validation/demultiplexing/single_indexed/se/combined_output/your_output.sample_2.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/se/combined_output/your_output.settings b/validation/demultiplexing/single_indexed/se/combined_output/your_output.settings
index 1d110ac..5838d9d 100644
--- a/validation/demultiplexing/single_indexed/se/combined_output/your_output.settings
+++ b/validation/demultiplexing/single_indexed/se/combined_output/your_output.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/se/defaults/your_output.sample_1.settings b/validation/demultiplexing/single_indexed/se/defaults/your_output.sample_1.settings
index 230f576..c80c598 100644
--- a/validation/demultiplexing/single_indexed/se/defaults/your_output.sample_1.settings
+++ b/validation/demultiplexing/single_indexed/se/defaults/your_output.sample_1.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/se/defaults/your_output.sample_2.settings b/validation/demultiplexing/single_indexed/se/defaults/your_output.sample_2.settings
index 2c64c8d..1413075 100644
--- a/validation/demultiplexing/single_indexed/se/defaults/your_output.sample_2.settings
+++ b/validation/demultiplexing/single_indexed/se/defaults/your_output.sample_2.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/se/defaults/your_output.settings b/validation/demultiplexing/single_indexed/se/defaults/your_output.settings
index 1d110ac..5838d9d 100644
--- a/validation/demultiplexing/single_indexed/se/defaults/your_output.settings
+++ b/validation/demultiplexing/single_indexed/se/defaults/your_output.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/se/multiple_input/barcodes.txt b/validation/demultiplexing/single_indexed/se/multiple_input/barcodes.txt
new file mode 100644
index 0000000..0369895
--- /dev/null
+++ b/validation/demultiplexing/single_indexed/se/multiple_input/barcodes.txt
@@ -0,0 +1,2 @@
+sample_1	GCGCCGGA	
+sample_2	CAGGACAT	
diff --git a/validation/demultiplexing/single_indexed/se/multiple_input/info.json b/validation/demultiplexing/single_indexed/se/multiple_input/info.json
new file mode 100644
index 0000000..b5e48cf
--- /dev/null
+++ b/validation/demultiplexing/single_indexed/se/multiple_input/info.json
@@ -0,0 +1,6 @@
+{
+	"arguments": [],
+	"return_code": 0,
+	"stderr": [
+	]
+}
diff --git a/validation/demultiplexing/single_indexed/se/multiple_input/input_1a.fastq b/validation/demultiplexing/single_indexed/se/multiple_input/input_1a.fastq
new file mode 100644
index 0000000..6099697
--- /dev/null
+++ b/validation/demultiplexing/single_indexed/se/multiple_input/input_1a.fastq
@@ -0,0 +1,8 @@
+ at read_s1_000/1
+GCGCCGGAAGATCGGAAGAGCACACGTCTGAACTCCAGTCACCAACCAATCTCGTATGCCGTCTTCTGCTTGAAAAAAAAAAAAAAAAAAAAAAAAAAAA
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s2_000/1
+CAGGACATAGATCGGAAGAGCACACGTCTGAACTCCAGTCACCAACCAATCTCGTATGCCGTCTTCTGCTTGAAAAAAAAAAAAAAAAAAAAAAAAAAAA
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
diff --git a/validation/demultiplexing/single_indexed/se/multiple_input/input_1b.fastq b/validation/demultiplexing/single_indexed/se/multiple_input/input_1b.fastq
new file mode 100644
index 0000000..1cf45e9
--- /dev/null
+++ b/validation/demultiplexing/single_indexed/se/multiple_input/input_1b.fastq
@@ -0,0 +1,12 @@
+ at read_s1_075/1
+GCGCCGGAGACGGTCCCATTAATGCACTATCGGATTTACACATTTGCGTGAATAAATCGACAGATGAATCATTAAGCTCCTACAGATCGGAAGAGCACAC
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s2_150/1
+CAGGACATTGATCTCATACATTTAAACAAAGTATGCCTTACGCATGCCTTAATGATACGTAACCTAGGCAACAGAGTCTTTACTTGTACCTGCTACACAC
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s1_200/1
+GCGCCGGATCCATCAGGATCGTATTATACTAAGCTAGGACTGTGCAGTGCACAGAGAGGAGATGACCATGATCCTCGAGCAAGTTGCCGCAGGCTCGGGC
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
diff --git a/validation/demultiplexing/single_indexed/se/multiple_input/input_1c.fastq b/validation/demultiplexing/single_indexed/se/multiple_input/input_1c.fastq
new file mode 100644
index 0000000..dff49bc
--- /dev/null
+++ b/validation/demultiplexing/single_indexed/se/multiple_input/input_1c.fastq
@@ -0,0 +1,12 @@
+ at read_s1_150/1
+GCGCCGGATGCACCGTAGCCATATGGGCTGTTGGGGACACAGGGCGTCGGCATTCCTTTATTACTGACGCCGCTAGAGTCTATGCAAGGTTATAACGTAT
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s2_075/1
+CAGGACATTCGCTAGCCCAAGATCACGCTTTCCGCGACGTTTTAGAGCGTGCATACCGGGGCGTTTCTCAGATAGGTATTTCAAGATCGGAAGAGCACAC
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s2_200/1
+CAGGACATACCCTCACGCTTGCACGACGACAGCGGTCCCCTATAAATGTATGTTGACGCAGCGAGAGGCCAGGACCCGGGCGTGTTACCACTAAGACCCT
++
+HHHHHHHHGGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
diff --git a/validation/demultiplexing/single_indexed/se/multiple_input/your_output.sample_1.discarded b/validation/demultiplexing/single_indexed/se/multiple_input/your_output.sample_1.discarded
new file mode 100644
index 0000000..6369c26
--- /dev/null
+++ b/validation/demultiplexing/single_indexed/se/multiple_input/your_output.sample_1.discarded
@@ -0,0 +1,4 @@
+ at read_s1_000/1
+
++
+
diff --git a/validation/demultiplexing/single_indexed/se/combined_output/your_output.sample_1.settings b/validation/demultiplexing/single_indexed/se/multiple_input/your_output.sample_1.settings
similarity index 96%
copy from validation/demultiplexing/single_indexed/se/combined_output/your_output.sample_1.settings
copy to validation/demultiplexing/single_indexed/se/multiple_input/your_output.sample_1.settings
index 230f576..c80c598 100644
--- a/validation/demultiplexing/single_indexed/se/combined_output/your_output.sample_1.settings
+++ b/validation/demultiplexing/single_indexed/se/multiple_input/your_output.sample_1.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/se/multiple_input/your_output.sample_1.truncated b/validation/demultiplexing/single_indexed/se/multiple_input/your_output.sample_1.truncated
new file mode 100644
index 0000000..d88dde7
--- /dev/null
+++ b/validation/demultiplexing/single_indexed/se/multiple_input/your_output.sample_1.truncated
@@ -0,0 +1,12 @@
+ at read_s1_075/1
+GACGGTCCCATTAATGCACTATCGGATTTACACATTTGCGTGAATAAATCGACAGATGAATCATTAAGCTCCTAC
++
+GGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;
+ at read_s1_200/1
+TCCATCAGGATCGTATTATACTAAGCTAGGACTGTGCAGTGCACAGAGAGGAGATGACCATGATCCTCGAGCAAGTTGCCGCAGGCTCGGGC
++
+GGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s1_150/1
+TGCACCGTAGCCATATGGGCTGTTGGGGACACAGGGCGTCGGCATTCCTTTATTACTGACGCCGCTAGAGTCTATGCAAGGTTATAACGTAT
++
+GGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
diff --git a/validation/demultiplexing/single_indexed/se/multiple_input/your_output.sample_2.discarded b/validation/demultiplexing/single_indexed/se/multiple_input/your_output.sample_2.discarded
new file mode 100644
index 0000000..d19ac1c
--- /dev/null
+++ b/validation/demultiplexing/single_indexed/se/multiple_input/your_output.sample_2.discarded
@@ -0,0 +1,4 @@
+ at read_s2_000/1
+
++
+
diff --git a/validation/demultiplexing/single_indexed/se/threads/one/your_output.sample_2.settings b/validation/demultiplexing/single_indexed/se/multiple_input/your_output.sample_2.settings
similarity index 96%
copy from validation/demultiplexing/single_indexed/se/threads/one/your_output.sample_2.settings
copy to validation/demultiplexing/single_indexed/se/multiple_input/your_output.sample_2.settings
index 2c64c8d..1413075 100644
--- a/validation/demultiplexing/single_indexed/se/threads/one/your_output.sample_2.settings
+++ b/validation/demultiplexing/single_indexed/se/multiple_input/your_output.sample_2.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/se/multiple_input/your_output.sample_2.truncated b/validation/demultiplexing/single_indexed/se/multiple_input/your_output.sample_2.truncated
new file mode 100644
index 0000000..95406f0
--- /dev/null
+++ b/validation/demultiplexing/single_indexed/se/multiple_input/your_output.sample_2.truncated
@@ -0,0 +1,12 @@
+ at read_s2_150/1
+TGATCTCATACATTTAAACAAAGTATGCCTTACGCATGCCTTAATGATACGTAACCTAGGCAACAGAGTCTTTACTTGTACCTGCTACACAC
++
+GGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
+ at read_s2_075/1
+TCGCTAGCCCAAGATCACGCTTTCCGCGACGTTTTAGAGCGTGCATACCGGGGCGTTTCTCAGATAGGTATTTCA
++
+GGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;
+ at read_s2_200/1
+ACCCTCACGCTTGCACGACGACAGCGGTCCCCTATAAATGTATGTTGACGCAGCGAGAGGCCAGGACCCGGGCGTGTTACCACTAAGACCCT
++
+GGGGGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCBBBBBBAAAAAA@@@@?????>>>====<<<;;:::9988766543210
diff --git a/validation/demultiplexing/single_indexed/se/threads/three/your_output.settings b/validation/demultiplexing/single_indexed/se/multiple_input/your_output.settings
similarity index 93%
copy from validation/demultiplexing/single_indexed/se/threads/three/your_output.settings
copy to validation/demultiplexing/single_indexed/se/multiple_input/your_output.settings
index 1d110ac..5838d9d 100644
--- a/validation/demultiplexing/single_indexed/se/threads/three/your_output.settings
+++ b/validation/demultiplexing/single_indexed/se/multiple_input/your_output.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/se/multiple_input/your_output.unidentified b/validation/demultiplexing/single_indexed/se/multiple_input/your_output.unidentified
new file mode 100644
index 0000000..e69de29
diff --git a/validation/demultiplexing/single_indexed/se/threads/one/your_output.sample_1.settings b/validation/demultiplexing/single_indexed/se/threads/one/your_output.sample_1.settings
index 230f576..c80c598 100644
--- a/validation/demultiplexing/single_indexed/se/threads/one/your_output.sample_1.settings
+++ b/validation/demultiplexing/single_indexed/se/threads/one/your_output.sample_1.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/se/threads/one/your_output.sample_2.settings b/validation/demultiplexing/single_indexed/se/threads/one/your_output.sample_2.settings
index 2c64c8d..1413075 100644
--- a/validation/demultiplexing/single_indexed/se/threads/one/your_output.sample_2.settings
+++ b/validation/demultiplexing/single_indexed/se/threads/one/your_output.sample_2.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/se/threads/one/your_output.settings b/validation/demultiplexing/single_indexed/se/threads/one/your_output.settings
index 1d110ac..5838d9d 100644
--- a/validation/demultiplexing/single_indexed/se/threads/one/your_output.settings
+++ b/validation/demultiplexing/single_indexed/se/threads/one/your_output.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/se/threads/three/your_output.sample_1.settings b/validation/demultiplexing/single_indexed/se/threads/three/your_output.sample_1.settings
index 230f576..c80c598 100644
--- a/validation/demultiplexing/single_indexed/se/threads/three/your_output.sample_1.settings
+++ b/validation/demultiplexing/single_indexed/se/threads/three/your_output.sample_1.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/se/threads/three/your_output.sample_2.settings b/validation/demultiplexing/single_indexed/se/threads/three/your_output.sample_2.settings
index 2c64c8d..1413075 100644
--- a/validation/demultiplexing/single_indexed/se/threads/three/your_output.sample_2.settings
+++ b/validation/demultiplexing/single_indexed/se/threads/three/your_output.sample_2.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/se/threads/three/your_output.settings b/validation/demultiplexing/single_indexed/se/threads/three/your_output.settings
index 1d110ac..5838d9d 100644
--- a/validation/demultiplexing/single_indexed/se/threads/three/your_output.settings
+++ b/validation/demultiplexing/single_indexed/se/threads/three/your_output.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/se/threads/two/your_output.sample_1.settings b/validation/demultiplexing/single_indexed/se/threads/two/your_output.sample_1.settings
index 230f576..c80c598 100644
--- a/validation/demultiplexing/single_indexed/se/threads/two/your_output.sample_1.settings
+++ b/validation/demultiplexing/single_indexed/se/threads/two/your_output.sample_1.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/se/threads/two/your_output.sample_2.settings b/validation/demultiplexing/single_indexed/se/threads/two/your_output.sample_2.settings
index 2c64c8d..1413075 100644
--- a/validation/demultiplexing/single_indexed/se/threads/two/your_output.sample_2.settings
+++ b/validation/demultiplexing/single_indexed/se/threads/two/your_output.sample_2.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/demultiplexing/single_indexed/se/threads/two/your_output.settings b/validation/demultiplexing/single_indexed/se/threads/two/your_output.settings
index 1d110ac..5838d9d 100644
--- a/validation/demultiplexing/single_indexed/se/threads/two/your_output.settings
+++ b/validation/demultiplexing/single_indexed/se/threads/two/your_output.settings
@@ -25,9 +25,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/misc/bad_args/fewer_file1/info.json b/validation/misc/bad_args/fewer_file1/info.json
new file mode 100644
index 0000000..7bdb1b1
--- /dev/null
+++ b/validation/misc/bad_args/fewer_file1/info.json
@@ -0,0 +1,7 @@
+{
+	"arguments": [],
+	"return_code": 1,
+	"stderr": [
+		"Error: Different number of files specified for --file1 and --file2."
+	]
+}
diff --git a/validation/misc/bad_args/fewer_file1/input_1a.fastq b/validation/misc/bad_args/fewer_file1/input_1a.fastq
new file mode 100644
index 0000000..431ea28
--- /dev/null
+++ b/validation/misc/bad_args/fewer_file1/input_1a.fastq
@@ -0,0 +1,16 @@
+ at read_150_1/1
+CTTGGGTACTCAGCCTTAGGGTACCACATAGAGTTATCTTATATATTATAATTGCTCTTTTAACATAATTTTAAAAAATTTATATTAAACTTTCTCTGTT
++
+HHHFFFFBBDGGGGGHHHHHGGFCDHGEE<@;+ at C792A.CEEGGFFFFDEFGFHHHH@C2;@F;EDDHFDCCC at .DEEEG=BGEDC5>:=2 at GFHHHFF
+ at read_150_2/1
+GAGTGGGCTTCATCCCTGGGATGCAAGGCTGGTTCAATATATGCAAATCAATAAATGTAATCCAGCATATAAACAGAACCAAAGAAGATCGGAAGAGCAC
++
+HHHHHHHHHHHHHHHHHHHHHHHGC. at CFGHHHHHHHHFBFFHEHHHHFBGHFFFFFFHEDE@EBHHFHB<<>099BEB@=?*59/''.CCFHFHHHHHH
+ at read_150_3/1
+TATGTAATGACATAACTCTTATGGGCAACTTCACAAAAACACAGAAGAAAGCCCTCCTAAAGAATGAAATTCCAAAAAAAATCAGGTTACTGCTCACTGA
++
+HHE=EE at DBBBGHGBFGGDDDDFFFHHHHHGHHHHHHGHHHE7BFHHHHHHG@4FEHHFHHHHFHHHHHHFFFE?EGCDE>CD:9=>+*;=37::ADDHF
+ at read_150_4/1
+CTCCTATATAAAGATAGCTCTGTAAAACAGGCCAAAAAGCAGAGTGGGGTGTGGGAAGGCAGGGAAAACTGTCCAGGAATAAAGGCATGAAATGAAACAA
++
+HHHHHHHHHHHHHHHHEG@:<BBHHHHHHHHFFEE>EEB4DFHHEHFHHHHEGFFEEFCDHEFF:+1;?GFFCFHHHHHHHHHFHBB>>BEDGCDHHHHF
diff --git a/validation/misc/bad_args/fewer_file1/input_1b.fastq b/validation/misc/bad_args/fewer_file1/input_1b.fastq
new file mode 100644
index 0000000..3cc0bd2
--- /dev/null
+++ b/validation/misc/bad_args/fewer_file1/input_1b.fastq
@@ -0,0 +1,16 @@
+ at read_150_5/1
+TACTCACGGACAAAGAATAAATATAGCTCCTCCAGGAGCTTAATAACTCAGTGCTGTCTAAACTCCTTACACCTGATGTTGATGCCATGGTTAGATAGTT
++
+HHFFGGFDBHHEHHHHHHHHHHHHFHHHHFHHFEEDFD8=GHFFHHDHHHCHHFDHBHD<FHFB?A=FFGGHE.(.8D97GF at 8863BGG<DGFGBCFG=
+ at read_150_6/1
+CAGCTTCATGTAAAAACTGGACAGAAGCATTCTCAGAAAATACTTCGGGACGATTGAGTTCAAATCACAGAGCTGAACATTCCTTTGGGTGGAGCAGTTT
++
+HHHF@><CDHGGEFGFHHHHEDDE8HHHHHGGFGGHHHHHHHGHFFFFIGHHHH::<BEFA2*'/89<.1&8.)&0:<BGFFHHCGGGEEDC at FFD;>:>
+ at read_150_7/1
+TAAGTAAGGTAGACAGCTAAGTCTAGTTTGTTCCCAGTGTTGTACCAGTCTCATCAGTGCCGTGTCTGGGTCTCACAGCCTCTGGTGTTCTATGCTGGAT
++
+GFFEEDHHGHHHHHHHHB?GG77-/:>>@?6AC5GIB?BEBHHHHHHHHHHHHFGFHHHHHHEFEGF9?EHHHE at 8BB<D9=DDFEEDDEC=>12BEHHH
+ at read_150_8/1
+TAAAAACAAAAACCCTGATGAGAGTATTGATGTGTGCATAAACAAAGAAAAACATAATAGGAATAGAATGGTGAATTAAATTTTGTGAATTTTGGAAACC
++
+HGGGGGHHHHHFHHGHHHHHHHEHHHHHHFHHEEHHHHHFE:/CGBHHHHHGFFGHHHHCEHEFECEFHHFEEE<ADBFFFHFCCFDBDFE at AD@=EEEB
diff --git a/validation/misc/bad_args/fewer_file1/input_2a.fastq b/validation/misc/bad_args/fewer_file1/input_2a.fastq
new file mode 100644
index 0000000..a241f95
--- /dev/null
+++ b/validation/misc/bad_args/fewer_file1/input_2a.fastq
@@ -0,0 +1,16 @@
+ at read_150_1/2
+AGAAACCACAGTGACTTAAACAGAGAAAGTTTAATATAAATTTTTTAAAATTATGTTAAAAGAGCAATTATAATATATAAGTTAACTCTATGTGGTACCC
++
+HHHFFHHHHHHGFBGHHEFBDG?B=GHHFGFHFHHHHHHHFBFHHHHHGGEEG=DGGGGCHHHHHHHGEA%5ADHHHH=G&&*>><EHHFE@=:51'*5?
+ at read_150_2/2
+TCTTTGGTTCTGTTTATATGCTGGATCACATTTATTGATTTGCATATATTGAACCAGCCTTGCATCCCAGGGATGAAGCCCACTCAGATCGGAAGAGAGT
++
+HHHHHHHHHHGHHHHFGHGFGB<.36./AEFEEHGGBD9HHHHHGFE:A9:<.;<<HHHHHHHGHHHHFHHED@@EFECHHEEEFEFCFH>E6,735 at GG
+ at read_150_3/2
+GTCATTAACATTCACGAAGATAAATTTCTCCATTTTAAACAGAGACACTCAGTGAGCAGTAACCTGATTTTTTTTGGAATTTCATTCTTCAGGAGGGCTT
++
+HHHHHHHHHHHHHHHHHH?GF5:@AFHHHGHFDDGGFFFHHFGHHHGGHHHHHHHHFGHFGEGC.18984>1BC=GFFAC<>E?..59&&-81:<<5<DC
+ at read_150_4/2
+GAAGACTATCAGCCATTCTTTTCTGTTTAGAAGAATTCTTGCCTACTGGCAGGTTTTAAATTTGTTTCATTTCATGCCTTTATTCCTGGACAGTTTTTCC
++
+HHHHHHHHFHHDEECEHBHHHHHHHHHHHHHHHEA?936>. at ABCDBCE>:>@CDGHHHGEBFE/38 at EEFBFGHHHHHHEGH?DHHHH>'9DEC**'*6
diff --git a/validation/misc/bad_args/fewer_file1/input_2b.fastq b/validation/misc/bad_args/fewer_file1/input_2b.fastq
new file mode 100644
index 0000000..91b892a
--- /dev/null
+++ b/validation/misc/bad_args/fewer_file1/input_2b.fastq
@@ -0,0 +1,16 @@
+ at read_150_5/2
+TGGGGCCATCAGGAATTTTGCAGTGGTAATGGGGGACATTTTAGCTGAGACTTGGAAAAATGGTAGAATTTGCTCCAACATGAGGAAATATGAGCATTGA
++
+HHHHGEGHHHHGEG;/FHHHHHHHHE;@==G=DC>DGFHHHHHHHHHHHHHHFD;>A5<(<A)'%>@<4<CEDFGCEFDEGHHHHDEFFHEFHHHGGHHF
+ at read_150_6/2
+TCTGCGAAAGCTTCTGTTTAGTTAGGTGACGTTATCCCGTTTGCAACGAAATCCTCAGAGAGGTCCAAATATCCACCTGTGGAGTCGACATAAAGTGTGT
++
+HHHHHHHHHHHGEEHHHHEHHHHHHHHHHHHHGGBG=<,<DGHFEEEBFHHHHHHHHHHDCEGFHFHH86ECFGHHFHHGGEEA<3%::*(38+A?D<<>
+ at read_150_7/2
+ACTTGCACCTCTTCATCAGAGGAGCAGATCCAGGAACAGAAGTCCTGCATTTACAGGCTCTTCATATCTTGTGCCGGGTTTGGCTGCCAGGTGGCCAGCT
++
+HHHHG=BDEDFFGGHHHHHHHHHHHHFHHFHHHCGHHHHHEBHHHHHHHHHHHHHHGEEE??6BCFHE624 at 7=1AFGBDHHHFFE<<.>,1<EEEE<96
+ at read_150_8/2
+TTTGTAGAAATTATATCAATCTTTTAGTATTAGTAAGTTAAATTGAACTAAGTGATGTGATTTACACTGAATATCTCTATTTCTACTACAGCCAACTTAC
++
+HHHHHHFHHHHB:<95<9<CD:>349EEHHHHHHHGFHFHHHHHEHHD=:>-7 at BC2BHHHHHHHGBHEFFHHGGHFGFHHEEFHFBEBEFHHFFBCA?B
diff --git a/validation/misc/bad_args/fewer_file1/input_2c.fastq b/validation/misc/bad_args/fewer_file1/input_2c.fastq
new file mode 100644
index 0000000..3eaacc9
--- /dev/null
+++ b/validation/misc/bad_args/fewer_file1/input_2c.fastq
@@ -0,0 +1,8 @@
+ at read_150_9/2
+GCCTTCCCTCTTCACTCCCTCCCTTATCCCAAACCTGCCTAGGTGGGGCTGATACAGACAGCAGGCCTGGCTCTACTTGTTTTGACAAAATATATGCCCT
++
+GGGEBGHHHHHHHHHHHHHHHHHHHHFADHHHFHHHF?DEF at B>C;CDGEHGGHHHE@@DBFGHHHHGB>BBFEGEGHFHF8ADCFDEE4D?>H@:>DD=
+ at read_150_10/2
+TAGTCTTCTCTTTCCTGAGAATATTTTTATTGCAAATATGTAGTCATATATACGTAAGATAAGGATATTTTAAATACTACTTTAAAAGTTATTACTATAA
++
+HHHHHHHHHHHHHHHHHHHHHHHHHHHHHFFFGHHHHHHHHHHHHEBDG>CCBB?FHFHHDEFHGDDGHHHHHH at BECHHEHGDHHHHHFHHHGEHHHHH
diff --git a/validation/misc/bad_args/fewer_file2/info.json b/validation/misc/bad_args/fewer_file2/info.json
new file mode 100644
index 0000000..7bdb1b1
--- /dev/null
+++ b/validation/misc/bad_args/fewer_file2/info.json
@@ -0,0 +1,7 @@
+{
+	"arguments": [],
+	"return_code": 1,
+	"stderr": [
+		"Error: Different number of files specified for --file1 and --file2."
+	]
+}
diff --git a/validation/misc/bad_args/fewer_file2/input_1a.fastq b/validation/misc/bad_args/fewer_file2/input_1a.fastq
new file mode 100644
index 0000000..431ea28
--- /dev/null
+++ b/validation/misc/bad_args/fewer_file2/input_1a.fastq
@@ -0,0 +1,16 @@
+ at read_150_1/1
+CTTGGGTACTCAGCCTTAGGGTACCACATAGAGTTATCTTATATATTATAATTGCTCTTTTAACATAATTTTAAAAAATTTATATTAAACTTTCTCTGTT
++
+HHHFFFFBBDGGGGGHHHHHGGFCDHGEE<@;+ at C792A.CEEGGFFFFDEFGFHHHH@C2;@F;EDDHFDCCC at .DEEEG=BGEDC5>:=2 at GFHHHFF
+ at read_150_2/1
+GAGTGGGCTTCATCCCTGGGATGCAAGGCTGGTTCAATATATGCAAATCAATAAATGTAATCCAGCATATAAACAGAACCAAAGAAGATCGGAAGAGCAC
++
+HHHHHHHHHHHHHHHHHHHHHHHGC. at CFGHHHHHHHHFBFFHEHHHHFBGHFFFFFFHEDE@EBHHFHB<<>099BEB@=?*59/''.CCFHFHHHHHH
+ at read_150_3/1
+TATGTAATGACATAACTCTTATGGGCAACTTCACAAAAACACAGAAGAAAGCCCTCCTAAAGAATGAAATTCCAAAAAAAATCAGGTTACTGCTCACTGA
++
+HHE=EE at DBBBGHGBFGGDDDDFFFHHHHHGHHHHHHGHHHE7BFHHHHHHG@4FEHHFHHHHFHHHHHHFFFE?EGCDE>CD:9=>+*;=37::ADDHF
+ at read_150_4/1
+CTCCTATATAAAGATAGCTCTGTAAAACAGGCCAAAAAGCAGAGTGGGGTGTGGGAAGGCAGGGAAAACTGTCCAGGAATAAAGGCATGAAATGAAACAA
++
+HHHHHHHHHHHHHHHHEG@:<BBHHHHHHHHFFEE>EEB4DFHHEHFHHHHEGFFEEFCDHEFF:+1;?GFFCFHHHHHHHHHFHBB>>BEDGCDHHHHF
diff --git a/validation/misc/bad_args/fewer_file2/input_1b.fastq b/validation/misc/bad_args/fewer_file2/input_1b.fastq
new file mode 100644
index 0000000..3cc0bd2
--- /dev/null
+++ b/validation/misc/bad_args/fewer_file2/input_1b.fastq
@@ -0,0 +1,16 @@
+ at read_150_5/1
+TACTCACGGACAAAGAATAAATATAGCTCCTCCAGGAGCTTAATAACTCAGTGCTGTCTAAACTCCTTACACCTGATGTTGATGCCATGGTTAGATAGTT
++
+HHFFGGFDBHHEHHHHHHHHHHHHFHHHHFHHFEEDFD8=GHFFHHDHHHCHHFDHBHD<FHFB?A=FFGGHE.(.8D97GF at 8863BGG<DGFGBCFG=
+ at read_150_6/1
+CAGCTTCATGTAAAAACTGGACAGAAGCATTCTCAGAAAATACTTCGGGACGATTGAGTTCAAATCACAGAGCTGAACATTCCTTTGGGTGGAGCAGTTT
++
+HHHF@><CDHGGEFGFHHHHEDDE8HHHHHGGFGGHHHHHHHGHFFFFIGHHHH::<BEFA2*'/89<.1&8.)&0:<BGFFHHCGGGEEDC at FFD;>:>
+ at read_150_7/1
+TAAGTAAGGTAGACAGCTAAGTCTAGTTTGTTCCCAGTGTTGTACCAGTCTCATCAGTGCCGTGTCTGGGTCTCACAGCCTCTGGTGTTCTATGCTGGAT
++
+GFFEEDHHGHHHHHHHHB?GG77-/:>>@?6AC5GIB?BEBHHHHHHHHHHHHFGFHHHHHHEFEGF9?EHHHE at 8BB<D9=DDFEEDDEC=>12BEHHH
+ at read_150_8/1
+TAAAAACAAAAACCCTGATGAGAGTATTGATGTGTGCATAAACAAAGAAAAACATAATAGGAATAGAATGGTGAATTAAATTTTGTGAATTTTGGAAACC
++
+HGGGGGHHHHHFHHGHHHHHHHEHHHHHHFHHEEHHHHHFE:/CGBHHHHHGFFGHHHHCEHEFECEFHHFEEE<ADBFFFHFCCFDBDFE at AD@=EEEB
diff --git a/validation/misc/bad_args/fewer_file2/input_2a.fastq b/validation/misc/bad_args/fewer_file2/input_2a.fastq
new file mode 100644
index 0000000..a241f95
--- /dev/null
+++ b/validation/misc/bad_args/fewer_file2/input_2a.fastq
@@ -0,0 +1,16 @@
+ at read_150_1/2
+AGAAACCACAGTGACTTAAACAGAGAAAGTTTAATATAAATTTTTTAAAATTATGTTAAAAGAGCAATTATAATATATAAGTTAACTCTATGTGGTACCC
++
+HHHFFHHHHHHGFBGHHEFBDG?B=GHHFGFHFHHHHHHHFBFHHHHHGGEEG=DGGGGCHHHHHHHGEA%5ADHHHH=G&&*>><EHHFE@=:51'*5?
+ at read_150_2/2
+TCTTTGGTTCTGTTTATATGCTGGATCACATTTATTGATTTGCATATATTGAACCAGCCTTGCATCCCAGGGATGAAGCCCACTCAGATCGGAAGAGAGT
++
+HHHHHHHHHHGHHHHFGHGFGB<.36./AEFEEHGGBD9HHHHHGFE:A9:<.;<<HHHHHHHGHHHHFHHED@@EFECHHEEEFEFCFH>E6,735 at GG
+ at read_150_3/2
+GTCATTAACATTCACGAAGATAAATTTCTCCATTTTAAACAGAGACACTCAGTGAGCAGTAACCTGATTTTTTTTGGAATTTCATTCTTCAGGAGGGCTT
++
+HHHHHHHHHHHHHHHHHH?GF5:@AFHHHGHFDDGGFFFHHFGHHHGGHHHHHHHHFGHFGEGC.18984>1BC=GFFAC<>E?..59&&-81:<<5<DC
+ at read_150_4/2
+GAAGACTATCAGCCATTCTTTTCTGTTTAGAAGAATTCTTGCCTACTGGCAGGTTTTAAATTTGTTTCATTTCATGCCTTTATTCCTGGACAGTTTTTCC
++
+HHHHHHHHFHHDEECEHBHHHHHHHHHHHHHHHEA?936>. at ABCDBCE>:>@CDGHHHGEBFE/38 at EEFBFGHHHHHHEGH?DHHHH>'9DEC**'*6
diff --git a/validation/misc/bad_args/file2_only/info.json b/validation/misc/bad_args/file2_only/info.json
index a64126c..7bdb1b1 100644
--- a/validation/misc/bad_args/file2_only/info.json
+++ b/validation/misc/bad_args/file2_only/info.json
@@ -2,6 +2,6 @@
 	"arguments": [],
 	"return_code": 1,
 	"stderr": [
-		"Error: --file2 specified, but --file1 is not specified."
+		"Error: Different number of files specified for --file1 and --file2."
 	]
 }
diff --git a/validation/misc/bad_args/negative_window/info.json b/validation/misc/bad_args/negative_window/info.json
new file mode 100644
index 0000000..cfef0ea
--- /dev/null
+++ b/validation/misc/bad_args/negative_window/info.json
@@ -0,0 +1,7 @@
+{
+	"arguments": ["--trimwindows", "-1"],
+	"return_code": 1,
+	"stderr": [
+		"Error: Invalid value for --trimwindows"
+	]
+}
diff --git a/validation/misc/bad_args/negative_window/input_1.fastq b/validation/misc/bad_args/negative_window/input_1.fastq
new file mode 100644
index 0000000..70d1b9e
--- /dev/null
+++ b/validation/misc/bad_args/negative_window/input_1.fastq
@@ -0,0 +1,8 @@
+ at ATAGCCSeq_1_2959_500_1 meta data
+TCCATATCAACAATAGGGTTTACGACCTCGATGTTGGATCAGGACATCCCGATGGTGCAGCCGCTATTAAAGGTTCGTTTGTTCAACGATTAAAGTCCTG
++
+JJIJIIJIIIJJGJHGGHJJJFGHGIJHEGHFGGGFFFFFFEEEDDGDCDBECDCACBC@@CBAA at A@@@?>>@==<=<;;;;<:9777755321/,)'!
+ at ATAGCCSeq_1_2959_500_2 data meta
+GTCAGCGAAGGGTTGTAGTAGCCCGTAGGGGCCTACAACGTTGGGGCCTTTGCGTAGTTGTATATAGCCTAGAATTTTTCGTTCGGTAAGCATTAGGAAT
++
+JHJIIJHJHIJJJGIGJGHHIGIIIHFFFIFGDFEFFFFEEEDCEDECBECCEDCAABBBBA at AA@B@?@>>?@@=>><=;:9:9:9866852220.*&!
diff --git a/validation/misc/empty/pe/your_output.settings b/validation/misc/empty/pe/your_output.settings
index a94d677..9ea0579 100644
--- a/validation/misc/empty/pe/your_output.settings
+++ b/validation/misc/empty/pe/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/misc/empty/se/your_output.settings b/validation/misc/empty/se/your_output.settings
index 4c509a8..972a2f0 100644
--- a/validation/misc/empty/se/your_output.settings
+++ b/validation/misc/empty/se/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/excl_adapter/non_overlapping/collapse/your_output.settings b/validation/pe/excl_adapter/non_overlapping/collapse/your_output.settings
index cb21317..51e3be8 100644
--- a/validation/pe/excl_adapter/non_overlapping/collapse/your_output.settings
+++ b/validation/pe/excl_adapter/non_overlapping/collapse/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: Yes
diff --git a/validation/pe/excl_adapter/non_overlapping/combined_output/collapse/your_output.settings b/validation/pe/excl_adapter/non_overlapping/combined_output/collapse/your_output.settings
index c28efbc..1050b8c 100644
--- a/validation/pe/excl_adapter/non_overlapping/combined_output/collapse/your_output.settings
+++ b/validation/pe/excl_adapter/non_overlapping/combined_output/collapse/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: Yes
diff --git a/validation/pe/excl_adapter/non_overlapping/combined_output/interleaved/collapse/your_output.settings b/validation/pe/excl_adapter/non_overlapping/combined_output/interleaved/collapse/your_output.settings
index c28efbc..1050b8c 100644
--- a/validation/pe/excl_adapter/non_overlapping/combined_output/interleaved/collapse/your_output.settings
+++ b/validation/pe/excl_adapter/non_overlapping/combined_output/interleaved/collapse/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: Yes
diff --git a/validation/pe/excl_adapter/non_overlapping/combined_output/interleaved/keep_both/your_output.settings b/validation/pe/excl_adapter/non_overlapping/combined_output/interleaved/keep_both/your_output.settings
index d052a2f..64f7ce9 100644
--- a/validation/pe/excl_adapter/non_overlapping/combined_output/interleaved/keep_both/your_output.settings
+++ b/validation/pe/excl_adapter/non_overlapping/combined_output/interleaved/keep_both/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/excl_adapter/non_overlapping/combined_output/interleaved/keep_mate1/your_output.settings b/validation/pe/excl_adapter/non_overlapping/combined_output/interleaved/keep_mate1/your_output.settings
index 58afc9a..29c8df1 100644
--- a/validation/pe/excl_adapter/non_overlapping/combined_output/interleaved/keep_mate1/your_output.settings
+++ b/validation/pe/excl_adapter/non_overlapping/combined_output/interleaved/keep_mate1/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 100
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
@@ -34,8 +35,8 @@ Number of discarded mate 2 reads: 1
 Number of singleton mate 2 reads: 0
 Number of reads with adapters[1]: 0
 Number of retained reads: 1
-Number of retained nucleotides: 199
-Average length of retained reads: 199
+Number of retained nucleotides: 100
+Average length of retained reads: 100
 
 
 [Length distribution]
diff --git a/validation/pe/excl_adapter/non_overlapping/combined_output/interleaved/keep_mate2/your_output.settings b/validation/pe/excl_adapter/non_overlapping/combined_output/interleaved/keep_mate2/your_output.settings
index dd8ff18..30473df 100644
--- a/validation/pe/excl_adapter/non_overlapping/combined_output/interleaved/keep_mate2/your_output.settings
+++ b/validation/pe/excl_adapter/non_overlapping/combined_output/interleaved/keep_mate2/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 100
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
@@ -34,8 +35,8 @@ Number of discarded mate 2 reads: 0
 Number of singleton mate 2 reads: 1
 Number of reads with adapters[1]: 0
 Number of retained reads: 1
-Number of retained nucleotides: 0
-Average length of retained reads: 0
+Number of retained nucleotides: 100
+Average length of retained reads: 100
 
 
 [Length distribution]
diff --git a/validation/pe/excl_adapter/non_overlapping/combined_output/interleaved/keep_neither/your_output.settings b/validation/pe/excl_adapter/non_overlapping/combined_output/interleaved/keep_neither/your_output.settings
index 8b0386c..a3ae457 100644
--- a/validation/pe/excl_adapter/non_overlapping/combined_output/interleaved/keep_neither/your_output.settings
+++ b/validation/pe/excl_adapter/non_overlapping/combined_output/interleaved/keep_neither/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 100
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/excl_adapter/non_overlapping/combined_output/keep_both/your_output.settings b/validation/pe/excl_adapter/non_overlapping/combined_output/keep_both/your_output.settings
index d052a2f..64f7ce9 100644
--- a/validation/pe/excl_adapter/non_overlapping/combined_output/keep_both/your_output.settings
+++ b/validation/pe/excl_adapter/non_overlapping/combined_output/keep_both/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/excl_adapter/non_overlapping/combined_output/keep_mate1/your_output.settings b/validation/pe/excl_adapter/non_overlapping/combined_output/keep_mate1/your_output.settings
index 58afc9a..29c8df1 100644
--- a/validation/pe/excl_adapter/non_overlapping/combined_output/keep_mate1/your_output.settings
+++ b/validation/pe/excl_adapter/non_overlapping/combined_output/keep_mate1/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 100
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
@@ -34,8 +35,8 @@ Number of discarded mate 2 reads: 1
 Number of singleton mate 2 reads: 0
 Number of reads with adapters[1]: 0
 Number of retained reads: 1
-Number of retained nucleotides: 199
-Average length of retained reads: 199
+Number of retained nucleotides: 100
+Average length of retained reads: 100
 
 
 [Length distribution]
diff --git a/validation/pe/excl_adapter/non_overlapping/combined_output/keep_mate2/your_output.settings b/validation/pe/excl_adapter/non_overlapping/combined_output/keep_mate2/your_output.settings
index dd8ff18..30473df 100644
--- a/validation/pe/excl_adapter/non_overlapping/combined_output/keep_mate2/your_output.settings
+++ b/validation/pe/excl_adapter/non_overlapping/combined_output/keep_mate2/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 100
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
@@ -34,8 +35,8 @@ Number of discarded mate 2 reads: 0
 Number of singleton mate 2 reads: 1
 Number of reads with adapters[1]: 0
 Number of retained reads: 1
-Number of retained nucleotides: 0
-Average length of retained reads: 0
+Number of retained nucleotides: 100
+Average length of retained reads: 100
 
 
 [Length distribution]
diff --git a/validation/pe/excl_adapter/non_overlapping/combined_output/keep_neither/your_output.settings b/validation/pe/excl_adapter/non_overlapping/combined_output/keep_neither/your_output.settings
index 113b4cb..78e9bf5 100644
--- a/validation/pe/excl_adapter/non_overlapping/combined_output/keep_neither/your_output.settings
+++ b/validation/pe/excl_adapter/non_overlapping/combined_output/keep_neither/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 100
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/excl_adapter/non_overlapping/crlf_newlines/your_output.settings b/validation/pe/excl_adapter/non_overlapping/crlf_newlines/your_output.settings
index 755f40a..7f5f497 100644
--- a/validation/pe/excl_adapter/non_overlapping/crlf_newlines/your_output.settings
+++ b/validation/pe/excl_adapter/non_overlapping/crlf_newlines/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/excl_adapter/non_overlapping/defaults/your_output.settings b/validation/pe/excl_adapter/non_overlapping/defaults/your_output.settings
index 755f40a..7f5f497 100644
--- a/validation/pe/excl_adapter/non_overlapping/defaults/your_output.settings
+++ b/validation/pe/excl_adapter/non_overlapping/defaults/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/excl_adapter/non_overlapping/interleaved/both/your_output.settings b/validation/pe/excl_adapter/non_overlapping/interleaved/both/your_output.settings
index b56da8a..c95c51d 100644
--- a/validation/pe/excl_adapter/non_overlapping/interleaved/both/your_output.settings
+++ b/validation/pe/excl_adapter/non_overlapping/interleaved/both/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/excl_adapter/non_overlapping/interleaved/output/your_output.settings b/validation/pe/excl_adapter/non_overlapping/interleaved/output/your_output.settings
index b56da8a..c95c51d 100644
--- a/validation/pe/excl_adapter/non_overlapping/interleaved/output/your_output.settings
+++ b/validation/pe/excl_adapter/non_overlapping/interleaved/output/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/excl_adapter/non_overlapping/maxlength/both/your_output.settings b/validation/pe/excl_adapter/non_overlapping/maxlength/both/your_output.settings
index 63f8cd8..129ea2e 100644
--- a/validation/pe/excl_adapter/non_overlapping/maxlength/both/your_output.settings
+++ b/validation/pe/excl_adapter/non_overlapping/maxlength/both/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 99
 Collapse overlapping reads: No
diff --git a/validation/pe/excl_adapter/non_overlapping/maxlength/mate1/your_output.settings b/validation/pe/excl_adapter/non_overlapping/maxlength/mate1/your_output.settings
index ea4eb2c..929e7a4 100644
--- a/validation/pe/excl_adapter/non_overlapping/maxlength/mate1/your_output.settings
+++ b/validation/pe/excl_adapter/non_overlapping/maxlength/mate1/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 99
 Collapse overlapping reads: No
@@ -34,8 +35,8 @@ Number of discarded mate 2 reads: 0
 Number of singleton mate 2 reads: 1
 Number of reads with adapters[1]: 0
 Number of retained reads: 1
-Number of retained nucleotides: 0
-Average length of retained reads: 0
+Number of retained nucleotides: 99
+Average length of retained reads: 99
 
 
 [Length distribution]
diff --git a/validation/pe/excl_adapter/non_overlapping/maxlength/mate2/your_output.settings b/validation/pe/excl_adapter/non_overlapping/maxlength/mate2/your_output.settings
index 0ff1c5a..e6ce6cd 100644
--- a/validation/pe/excl_adapter/non_overlapping/maxlength/mate2/your_output.settings
+++ b/validation/pe/excl_adapter/non_overlapping/maxlength/mate2/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 99
 Collapse overlapping reads: No
@@ -34,8 +35,8 @@ Number of discarded mate 2 reads: 1
 Number of singleton mate 2 reads: 0
 Number of reads with adapters[1]: 0
 Number of retained reads: 1
-Number of retained nucleotides: 199
-Average length of retained reads: 199
+Number of retained nucleotides: 99
+Average length of retained reads: 99
 
 
 [Length distribution]
diff --git a/validation/pe/excl_adapter/non_overlapping/minlength/both/your_output.settings b/validation/pe/excl_adapter/non_overlapping/minlength/both/your_output.settings
index b915102..7091105 100644
--- a/validation/pe/excl_adapter/non_overlapping/minlength/both/your_output.settings
+++ b/validation/pe/excl_adapter/non_overlapping/minlength/both/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 50
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/excl_adapter/non_overlapping/minlength/mate1/your_output.settings b/validation/pe/excl_adapter/non_overlapping/minlength/mate1/your_output.settings
index 0710cde..c3a83bf 100644
--- a/validation/pe/excl_adapter/non_overlapping/minlength/mate1/your_output.settings
+++ b/validation/pe/excl_adapter/non_overlapping/minlength/mate1/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 50
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
@@ -34,8 +35,8 @@ Number of discarded mate 2 reads: 0
 Number of singleton mate 2 reads: 1
 Number of reads with adapters[1]: 0
 Number of retained reads: 1
-Number of retained nucleotides: 0
-Average length of retained reads: 0
+Number of retained nucleotides: 100
+Average length of retained reads: 100
 
 
 [Length distribution]
diff --git a/validation/pe/excl_adapter/non_overlapping/minlength/mate2/your_output.settings b/validation/pe/excl_adapter/non_overlapping/minlength/mate2/your_output.settings
index 00fad78..94275a1 100644
--- a/validation/pe/excl_adapter/non_overlapping/minlength/mate2/your_output.settings
+++ b/validation/pe/excl_adapter/non_overlapping/minlength/mate2/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 50
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
@@ -34,8 +35,8 @@ Number of discarded mate 2 reads: 1
 Number of singleton mate 2 reads: 0
 Number of reads with adapters[1]: 0
 Number of retained reads: 1
-Number of retained nucleotides: 136
-Average length of retained reads: 136
+Number of retained nucleotides: 100
+Average length of retained reads: 100
 
 
 [Length distribution]
diff --git a/validation/pe/excl_adapter/non_overlapping/trimns/excl_ns/your_output.settings b/validation/pe/excl_adapter/non_overlapping/trimns/excl_ns/your_output.settings
index f178715..27f8596 100644
--- a/validation/pe/excl_adapter/non_overlapping/trimns/excl_ns/your_output.settings
+++ b/validation/pe/excl_adapter/non_overlapping/trimns/excl_ns/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/excl_adapter/non_overlapping/trimns/incl_ns/your_output.settings b/validation/pe/excl_adapter/non_overlapping/trimns/incl_ns/your_output.settings
index 1ff9d66..9cd41f7 100644
--- a/validation/pe/excl_adapter/non_overlapping/trimns/incl_ns/your_output.settings
+++ b/validation/pe/excl_adapter/non_overlapping/trimns/incl_ns/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/excl_adapter/non_overlapping/trimqualities/default/your_output.settings b/validation/pe/excl_adapter/non_overlapping/trimqualities/default/your_output.settings
index bff7f13..39168c0 100644
--- a/validation/pe/excl_adapter/non_overlapping/trimqualities/default/your_output.settings
+++ b/validation/pe/excl_adapter/non_overlapping/trimqualities/default/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: Yes
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/excl_adapter/non_overlapping/trimqualities/minq31/your_output.settings b/validation/pe/excl_adapter/non_overlapping/trimqualities/minq31/your_output.settings
index cda6868..e4ff39a 100644
--- a/validation/pe/excl_adapter/non_overlapping/trimqualities/minq31/your_output.settings
+++ b/validation/pe/excl_adapter/non_overlapping/trimqualities/minq31/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 31: Yes
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/excl_adapter/overlapping/collapse/your_output.settings b/validation/pe/excl_adapter/overlapping/collapse/your_output.settings
index 17fda0f..a2aa367 100644
--- a/validation/pe/excl_adapter/overlapping/collapse/your_output.settings
+++ b/validation/pe/excl_adapter/overlapping/collapse/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: Yes
diff --git a/validation/pe/excl_adapter/overlapping/combined_output/collapse/your_output.settings b/validation/pe/excl_adapter/overlapping/combined_output/collapse/your_output.settings
index 8b38596..69503a1 100644
--- a/validation/pe/excl_adapter/overlapping/combined_output/collapse/your_output.settings
+++ b/validation/pe/excl_adapter/overlapping/combined_output/collapse/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: Yes
diff --git a/validation/pe/excl_adapter/overlapping/combined_output/interleaved/collapse/your_output.settings b/validation/pe/excl_adapter/overlapping/combined_output/interleaved/collapse/your_output.settings
index 8b38596..69503a1 100644
--- a/validation/pe/excl_adapter/overlapping/combined_output/interleaved/collapse/your_output.settings
+++ b/validation/pe/excl_adapter/overlapping/combined_output/interleaved/collapse/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: Yes
diff --git a/validation/pe/excl_adapter/overlapping/combined_output/interleaved/keep_both/your_output.settings b/validation/pe/excl_adapter/overlapping/combined_output/interleaved/keep_both/your_output.settings
index 07a597f..1339de8 100644
--- a/validation/pe/excl_adapter/overlapping/combined_output/interleaved/keep_both/your_output.settings
+++ b/validation/pe/excl_adapter/overlapping/combined_output/interleaved/keep_both/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/excl_adapter/overlapping/combined_output/interleaved/keep_mate1/your_output.settings b/validation/pe/excl_adapter/overlapping/combined_output/interleaved/keep_mate1/your_output.settings
index de8e8f5..ca3711a 100644
--- a/validation/pe/excl_adapter/overlapping/combined_output/interleaved/keep_mate1/your_output.settings
+++ b/validation/pe/excl_adapter/overlapping/combined_output/interleaved/keep_mate1/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 100
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
@@ -34,8 +35,8 @@ Number of discarded mate 2 reads: 1
 Number of singleton mate 2 reads: 0
 Number of reads with adapters[1]: 0
 Number of retained reads: 1
-Number of retained nucleotides: 199
-Average length of retained reads: 199
+Number of retained nucleotides: 100
+Average length of retained reads: 100
 
 
 [Length distribution]
diff --git a/validation/pe/excl_adapter/overlapping/combined_output/interleaved/keep_mate2/your_output.settings b/validation/pe/excl_adapter/overlapping/combined_output/interleaved/keep_mate2/your_output.settings
index 9dbb88e..3d00109 100644
--- a/validation/pe/excl_adapter/overlapping/combined_output/interleaved/keep_mate2/your_output.settings
+++ b/validation/pe/excl_adapter/overlapping/combined_output/interleaved/keep_mate2/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 100
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
@@ -34,8 +35,8 @@ Number of discarded mate 2 reads: 0
 Number of singleton mate 2 reads: 1
 Number of reads with adapters[1]: 0
 Number of retained reads: 1
-Number of retained nucleotides: 0
-Average length of retained reads: 0
+Number of retained nucleotides: 100
+Average length of retained reads: 100
 
 
 [Length distribution]
diff --git a/validation/pe/excl_adapter/overlapping/combined_output/interleaved/keep_neither/your_output.settings b/validation/pe/excl_adapter/overlapping/combined_output/interleaved/keep_neither/your_output.settings
index ee3bd3b..9706401 100644
--- a/validation/pe/excl_adapter/overlapping/combined_output/interleaved/keep_neither/your_output.settings
+++ b/validation/pe/excl_adapter/overlapping/combined_output/interleaved/keep_neither/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 100
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/excl_adapter/overlapping/combined_output/keep_both/your_output.settings b/validation/pe/excl_adapter/overlapping/combined_output/keep_both/your_output.settings
index 07a597f..1339de8 100644
--- a/validation/pe/excl_adapter/overlapping/combined_output/keep_both/your_output.settings
+++ b/validation/pe/excl_adapter/overlapping/combined_output/keep_both/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/excl_adapter/overlapping/combined_output/keep_mate1/your_output.settings b/validation/pe/excl_adapter/overlapping/combined_output/keep_mate1/your_output.settings
index de8e8f5..ca3711a 100644
--- a/validation/pe/excl_adapter/overlapping/combined_output/keep_mate1/your_output.settings
+++ b/validation/pe/excl_adapter/overlapping/combined_output/keep_mate1/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 100
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
@@ -34,8 +35,8 @@ Number of discarded mate 2 reads: 1
 Number of singleton mate 2 reads: 0
 Number of reads with adapters[1]: 0
 Number of retained reads: 1
-Number of retained nucleotides: 199
-Average length of retained reads: 199
+Number of retained nucleotides: 100
+Average length of retained reads: 100
 
 
 [Length distribution]
diff --git a/validation/pe/excl_adapter/overlapping/combined_output/keep_mate2/your_output.settings b/validation/pe/excl_adapter/overlapping/combined_output/keep_mate2/your_output.settings
index 9dbb88e..3d00109 100644
--- a/validation/pe/excl_adapter/overlapping/combined_output/keep_mate2/your_output.settings
+++ b/validation/pe/excl_adapter/overlapping/combined_output/keep_mate2/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 100
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
@@ -34,8 +35,8 @@ Number of discarded mate 2 reads: 0
 Number of singleton mate 2 reads: 1
 Number of reads with adapters[1]: 0
 Number of retained reads: 1
-Number of retained nucleotides: 0
-Average length of retained reads: 0
+Number of retained nucleotides: 100
+Average length of retained reads: 100
 
 
 [Length distribution]
diff --git a/validation/pe/excl_adapter/overlapping/combined_output/keep_neither/your_output.settings b/validation/pe/excl_adapter/overlapping/combined_output/keep_neither/your_output.settings
index ee3bd3b..9706401 100644
--- a/validation/pe/excl_adapter/overlapping/combined_output/keep_neither/your_output.settings
+++ b/validation/pe/excl_adapter/overlapping/combined_output/keep_neither/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 100
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/excl_adapter/overlapping/crlf_newlines/your_output.settings b/validation/pe/excl_adapter/overlapping/crlf_newlines/your_output.settings
index 3f5294d..5a71c45 100644
--- a/validation/pe/excl_adapter/overlapping/crlf_newlines/your_output.settings
+++ b/validation/pe/excl_adapter/overlapping/crlf_newlines/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/excl_adapter/overlapping/defaults/your_output.settings b/validation/pe/excl_adapter/overlapping/defaults/your_output.settings
index 3f5294d..5a71c45 100644
--- a/validation/pe/excl_adapter/overlapping/defaults/your_output.settings
+++ b/validation/pe/excl_adapter/overlapping/defaults/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/excl_adapter/overlapping/interleaved/both/your_output.settings b/validation/pe/excl_adapter/overlapping/interleaved/both/your_output.settings
index 33ec741..9d2af13 100644
--- a/validation/pe/excl_adapter/overlapping/interleaved/both/your_output.settings
+++ b/validation/pe/excl_adapter/overlapping/interleaved/both/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/excl_adapter/overlapping/interleaved/output/your_output.settings b/validation/pe/excl_adapter/overlapping/interleaved/output/your_output.settings
index 57a084c..322c6aa 100644
--- a/validation/pe/excl_adapter/overlapping/interleaved/output/your_output.settings
+++ b/validation/pe/excl_adapter/overlapping/interleaved/output/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/excl_adapter/overlapping/maxlength/both/your_output.settings b/validation/pe/excl_adapter/overlapping/maxlength/both/your_output.settings
index 0567f4c..d77b6e3 100644
--- a/validation/pe/excl_adapter/overlapping/maxlength/both/your_output.settings
+++ b/validation/pe/excl_adapter/overlapping/maxlength/both/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 99
 Collapse overlapping reads: No
diff --git a/validation/pe/excl_adapter/overlapping/maxlength/mate1/your_output.settings b/validation/pe/excl_adapter/overlapping/maxlength/mate1/your_output.settings
index f849abb..cdc262b 100644
--- a/validation/pe/excl_adapter/overlapping/maxlength/mate1/your_output.settings
+++ b/validation/pe/excl_adapter/overlapping/maxlength/mate1/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 99
 Collapse overlapping reads: No
@@ -34,8 +35,8 @@ Number of discarded mate 2 reads: 1
 Number of singleton mate 2 reads: 0
 Number of reads with adapters[1]: 0
 Number of retained reads: 1
-Number of retained nucleotides: 199
-Average length of retained reads: 199
+Number of retained nucleotides: 99
+Average length of retained reads: 99
 
 
 [Length distribution]
diff --git a/validation/pe/excl_adapter/overlapping/maxlength/mate2/your_output.settings b/validation/pe/excl_adapter/overlapping/maxlength/mate2/your_output.settings
index fac7a85..a3c7c07 100644
--- a/validation/pe/excl_adapter/overlapping/maxlength/mate2/your_output.settings
+++ b/validation/pe/excl_adapter/overlapping/maxlength/mate2/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 99
 Collapse overlapping reads: No
@@ -34,8 +35,8 @@ Number of discarded mate 2 reads: 0
 Number of singleton mate 2 reads: 1
 Number of reads with adapters[1]: 0
 Number of retained reads: 1
-Number of retained nucleotides: 0
-Average length of retained reads: 0
+Number of retained nucleotides: 99
+Average length of retained reads: 99
 
 
 [Length distribution]
diff --git a/validation/pe/excl_adapter/overlapping/minlength/both/your_output.settings b/validation/pe/excl_adapter/overlapping/minlength/both/your_output.settings
index 6696d13..8f4a05e 100644
--- a/validation/pe/excl_adapter/overlapping/minlength/both/your_output.settings
+++ b/validation/pe/excl_adapter/overlapping/minlength/both/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 90
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/excl_adapter/overlapping/minlength/mate1/your_output.settings b/validation/pe/excl_adapter/overlapping/minlength/mate1/your_output.settings
index 791ef83..5d416c6 100644
--- a/validation/pe/excl_adapter/overlapping/minlength/mate1/your_output.settings
+++ b/validation/pe/excl_adapter/overlapping/minlength/mate1/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 90
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
@@ -34,8 +35,8 @@ Number of discarded mate 2 reads: 0
 Number of singleton mate 2 reads: 1
 Number of reads with adapters[1]: 0
 Number of retained reads: 1
-Number of retained nucleotides: 0
-Average length of retained reads: 0
+Number of retained nucleotides: 100
+Average length of retained reads: 100
 
 
 [Length distribution]
diff --git a/validation/pe/excl_adapter/overlapping/minlength/mate2/your_output.settings b/validation/pe/excl_adapter/overlapping/minlength/mate2/your_output.settings
index c879185..393349a 100644
--- a/validation/pe/excl_adapter/overlapping/minlength/mate2/your_output.settings
+++ b/validation/pe/excl_adapter/overlapping/minlength/mate2/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 90
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
@@ -34,8 +35,8 @@ Number of discarded mate 2 reads: 1
 Number of singleton mate 2 reads: 0
 Number of reads with adapters[1]: 0
 Number of retained reads: 1
-Number of retained nucleotides: 188
-Average length of retained reads: 188
+Number of retained nucleotides: 100
+Average length of retained reads: 100
 
 
 [Length distribution]
diff --git a/validation/pe/excl_adapter/overlapping/trimns/excl_ns/your_output.settings b/validation/pe/excl_adapter/overlapping/trimns/excl_ns/your_output.settings
index 100a659..9c388a2 100644
--- a/validation/pe/excl_adapter/overlapping/trimns/excl_ns/your_output.settings
+++ b/validation/pe/excl_adapter/overlapping/trimns/excl_ns/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/excl_adapter/overlapping/trimns/incl_ns/your_output.settings b/validation/pe/excl_adapter/overlapping/trimns/incl_ns/your_output.settings
index 7a83e2d..3c07850 100644
--- a/validation/pe/excl_adapter/overlapping/trimns/incl_ns/your_output.settings
+++ b/validation/pe/excl_adapter/overlapping/trimns/incl_ns/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/excl_adapter/overlapping/trimqualities/default/your_output.settings b/validation/pe/excl_adapter/overlapping/trimqualities/default/your_output.settings
index 94a0c42..52eb84c 100644
--- a/validation/pe/excl_adapter/overlapping/trimqualities/default/your_output.settings
+++ b/validation/pe/excl_adapter/overlapping/trimqualities/default/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: Yes
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/excl_adapter/overlapping/trimqualities/minq31/your_output.settings b/validation/pe/excl_adapter/overlapping/trimqualities/minq31/your_output.settings
index 986913d..45d52d6 100644
--- a/validation/pe/excl_adapter/overlapping/trimqualities/minq31/your_output.settings
+++ b/validation/pe/excl_adapter/overlapping/trimqualities/minq31/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 31: Yes
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/incl_adapter/collapse/your_output.settings b/validation/pe/incl_adapter/collapse/your_output.settings
index 1ef4c19..d75a8e0 100644
--- a/validation/pe/incl_adapter/collapse/your_output.settings
+++ b/validation/pe/incl_adapter/collapse/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: Yes
diff --git a/validation/pe/incl_adapter/collapse_truncated/your_output.settings b/validation/pe/incl_adapter/collapse_truncated/your_output.settings
index c1c1e66..054e0ca 100644
--- a/validation/pe/incl_adapter/collapse_truncated/your_output.settings
+++ b/validation/pe/incl_adapter/collapse_truncated/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: Yes
diff --git a/validation/pe/incl_adapter/combined_output/collapse/your_output.settings b/validation/pe/incl_adapter/combined_output/collapse/your_output.settings
index 1ef4c19..d75a8e0 100644
--- a/validation/pe/incl_adapter/combined_output/collapse/your_output.settings
+++ b/validation/pe/incl_adapter/combined_output/collapse/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: Yes
diff --git a/validation/pe/incl_adapter/combined_output/collapse_truncated/your_output.settings b/validation/pe/incl_adapter/combined_output/collapse_truncated/your_output.settings
index c1c1e66..054e0ca 100644
--- a/validation/pe/incl_adapter/combined_output/collapse_truncated/your_output.settings
+++ b/validation/pe/incl_adapter/combined_output/collapse_truncated/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: Yes
diff --git a/validation/pe/incl_adapter/combined_output/interleaved/collapse/your_output.settings b/validation/pe/incl_adapter/combined_output/interleaved/collapse/your_output.settings
index 1ef4c19..d75a8e0 100644
--- a/validation/pe/incl_adapter/combined_output/interleaved/collapse/your_output.settings
+++ b/validation/pe/incl_adapter/combined_output/interleaved/collapse/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: Yes
diff --git a/validation/pe/incl_adapter/combined_output/interleaved/collapse_truncated/your_output.settings b/validation/pe/incl_adapter/combined_output/interleaved/collapse_truncated/your_output.settings
index c1c1e66..054e0ca 100644
--- a/validation/pe/incl_adapter/combined_output/interleaved/collapse_truncated/your_output.settings
+++ b/validation/pe/incl_adapter/combined_output/interleaved/collapse_truncated/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: Yes
diff --git a/validation/pe/incl_adapter/combined_output/interleaved/keep_both/your_output.settings b/validation/pe/incl_adapter/combined_output/interleaved/keep_both/your_output.settings
index 2fcdd43..770167f 100644
--- a/validation/pe/incl_adapter/combined_output/interleaved/keep_both/your_output.settings
+++ b/validation/pe/incl_adapter/combined_output/interleaved/keep_both/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/incl_adapter/combined_output/interleaved/keep_mate1/your_output.settings b/validation/pe/incl_adapter/combined_output/interleaved/keep_mate1/your_output.settings
index 6dfbdb5..7f3a802 100644
--- a/validation/pe/incl_adapter/combined_output/interleaved/keep_mate1/your_output.settings
+++ b/validation/pe/incl_adapter/combined_output/interleaved/keep_mate1/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 50
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
@@ -34,8 +35,8 @@ Number of discarded mate 2 reads: 1
 Number of singleton mate 2 reads: 0
 Number of reads with adapters[1]: 2
 Number of retained reads: 1
-Number of retained nucleotides: 99
-Average length of retained reads: 99
+Number of retained nucleotides: 50
+Average length of retained reads: 50
 
 
 [Length distribution]
diff --git a/validation/pe/incl_adapter/combined_output/interleaved/keep_mate2/your_output.settings b/validation/pe/incl_adapter/combined_output/interleaved/keep_mate2/your_output.settings
index c120058..429612d 100644
--- a/validation/pe/incl_adapter/combined_output/interleaved/keep_mate2/your_output.settings
+++ b/validation/pe/incl_adapter/combined_output/interleaved/keep_mate2/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 50
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
@@ -34,8 +35,8 @@ Number of discarded mate 2 reads: 0
 Number of singleton mate 2 reads: 1
 Number of reads with adapters[1]: 2
 Number of retained reads: 1
-Number of retained nucleotides: 0
-Average length of retained reads: 0
+Number of retained nucleotides: 50
+Average length of retained reads: 50
 
 
 [Length distribution]
diff --git a/validation/pe/incl_adapter/combined_output/interleaved/keep_neither/your_output.settings b/validation/pe/incl_adapter/combined_output/interleaved/keep_neither/your_output.settings
index 6c9aef3..b0019b3 100644
--- a/validation/pe/incl_adapter/combined_output/interleaved/keep_neither/your_output.settings
+++ b/validation/pe/incl_adapter/combined_output/interleaved/keep_neither/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 50
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/incl_adapter/combined_output/keep_both/your_output.settings b/validation/pe/incl_adapter/combined_output/keep_both/your_output.settings
index 2fcdd43..770167f 100644
--- a/validation/pe/incl_adapter/combined_output/keep_both/your_output.settings
+++ b/validation/pe/incl_adapter/combined_output/keep_both/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/incl_adapter/combined_output/keep_mate1/your_output.settings b/validation/pe/incl_adapter/combined_output/keep_mate1/your_output.settings
index 6dfbdb5..7f3a802 100644
--- a/validation/pe/incl_adapter/combined_output/keep_mate1/your_output.settings
+++ b/validation/pe/incl_adapter/combined_output/keep_mate1/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 50
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
@@ -34,8 +35,8 @@ Number of discarded mate 2 reads: 1
 Number of singleton mate 2 reads: 0
 Number of reads with adapters[1]: 2
 Number of retained reads: 1
-Number of retained nucleotides: 99
-Average length of retained reads: 99
+Number of retained nucleotides: 50
+Average length of retained reads: 50
 
 
 [Length distribution]
diff --git a/validation/pe/incl_adapter/combined_output/keep_mate2/your_output.settings b/validation/pe/incl_adapter/combined_output/keep_mate2/your_output.settings
index c120058..429612d 100644
--- a/validation/pe/incl_adapter/combined_output/keep_mate2/your_output.settings
+++ b/validation/pe/incl_adapter/combined_output/keep_mate2/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 50
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
@@ -34,8 +35,8 @@ Number of discarded mate 2 reads: 0
 Number of singleton mate 2 reads: 1
 Number of reads with adapters[1]: 2
 Number of retained reads: 1
-Number of retained nucleotides: 0
-Average length of retained reads: 0
+Number of retained nucleotides: 50
+Average length of retained reads: 50
 
 
 [Length distribution]
diff --git a/validation/pe/incl_adapter/combined_output/keep_neither/your_output.settings b/validation/pe/incl_adapter/combined_output/keep_neither/your_output.settings
index 6c9aef3..b0019b3 100644
--- a/validation/pe/incl_adapter/combined_output/keep_neither/your_output.settings
+++ b/validation/pe/incl_adapter/combined_output/keep_neither/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 50
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/incl_adapter/crlf_newlines/your_output.settings b/validation/pe/incl_adapter/crlf_newlines/your_output.settings
index 2fcdd43..770167f 100644
--- a/validation/pe/incl_adapter/crlf_newlines/your_output.settings
+++ b/validation/pe/incl_adapter/crlf_newlines/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/incl_adapter/defaults/your_output.settings b/validation/pe/incl_adapter/defaults/your_output.settings
index 2fcdd43..770167f 100644
--- a/validation/pe/incl_adapter/defaults/your_output.settings
+++ b/validation/pe/incl_adapter/defaults/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/incl_adapter/maxlength/both/your_output.settings b/validation/pe/incl_adapter/maxlength/both/your_output.settings
index 18647ce..2cef609 100644
--- a/validation/pe/incl_adapter/maxlength/both/your_output.settings
+++ b/validation/pe/incl_adapter/maxlength/both/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 49
 Collapse overlapping reads: No
diff --git a/validation/pe/incl_adapter/maxlength/mate1/your_output.settings b/validation/pe/incl_adapter/maxlength/mate1/your_output.settings
index 4569ea8..acafbb1 100644
--- a/validation/pe/incl_adapter/maxlength/mate1/your_output.settings
+++ b/validation/pe/incl_adapter/maxlength/mate1/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 49
 Collapse overlapping reads: No
@@ -34,8 +35,8 @@ Number of discarded mate 2 reads: 0
 Number of singleton mate 2 reads: 1
 Number of reads with adapters[1]: 2
 Number of retained reads: 1
-Number of retained nucleotides: 0
-Average length of retained reads: 0
+Number of retained nucleotides: 49
+Average length of retained reads: 49
 
 
 [Length distribution]
diff --git a/validation/pe/incl_adapter/maxlength/mate2/your_output.settings b/validation/pe/incl_adapter/maxlength/mate2/your_output.settings
index f7f912b..d08dc02 100644
--- a/validation/pe/incl_adapter/maxlength/mate2/your_output.settings
+++ b/validation/pe/incl_adapter/maxlength/mate2/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 49
 Collapse overlapping reads: No
@@ -34,8 +35,8 @@ Number of discarded mate 2 reads: 1
 Number of singleton mate 2 reads: 0
 Number of reads with adapters[1]: 2
 Number of retained reads: 1
-Number of retained nucleotides: 99
-Average length of retained reads: 99
+Number of retained nucleotides: 49
+Average length of retained reads: 49
 
 
 [Length distribution]
diff --git a/validation/pe/incl_adapter/minlength/both/your_output.settings b/validation/pe/incl_adapter/minlength/both/your_output.settings
index 278d662..81d5460 100644
--- a/validation/pe/incl_adapter/minlength/both/your_output.settings
+++ b/validation/pe/incl_adapter/minlength/both/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 50
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/incl_adapter/minlength/mate1/your_output.settings b/validation/pe/incl_adapter/minlength/mate1/your_output.settings
index 94b75a3..299c7e0 100644
--- a/validation/pe/incl_adapter/minlength/mate1/your_output.settings
+++ b/validation/pe/incl_adapter/minlength/mate1/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 50
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
@@ -34,8 +35,8 @@ Number of discarded mate 2 reads: 0
 Number of singleton mate 2 reads: 1
 Number of reads with adapters[1]: 2
 Number of retained reads: 1
-Number of retained nucleotides: 0
-Average length of retained reads: 0
+Number of retained nucleotides: 50
+Average length of retained reads: 50
 
 
 [Length distribution]
diff --git a/validation/pe/incl_adapter/minlength/mate2/your_output.settings b/validation/pe/incl_adapter/minlength/mate2/your_output.settings
index 42e0a14..76d96db 100644
--- a/validation/pe/incl_adapter/minlength/mate2/your_output.settings
+++ b/validation/pe/incl_adapter/minlength/mate2/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 50
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
@@ -34,8 +35,8 @@ Number of discarded mate 2 reads: 1
 Number of singleton mate 2 reads: 0
 Number of reads with adapters[1]: 2
 Number of retained reads: 1
-Number of retained nucleotides: 99
-Average length of retained reads: 99
+Number of retained nucleotides: 50
+Average length of retained reads: 50
 
 
 [Length distribution]
diff --git a/validation/pe/incl_adapter/multiple_input/info.json b/validation/pe/incl_adapter/multiple_input/info.json
new file mode 100644
index 0000000..b5e48cf
--- /dev/null
+++ b/validation/pe/incl_adapter/multiple_input/info.json
@@ -0,0 +1,6 @@
+{
+	"arguments": [],
+	"return_code": 0,
+	"stderr": [
+	]
+}
diff --git a/validation/pe/incl_adapter/multiple_input/input_1a.fastq b/validation/pe/incl_adapter/multiple_input/input_1a.fastq
new file mode 100644
index 0000000..431ea28
--- /dev/null
+++ b/validation/pe/incl_adapter/multiple_input/input_1a.fastq
@@ -0,0 +1,16 @@
+ at read_150_1/1
+CTTGGGTACTCAGCCTTAGGGTACCACATAGAGTTATCTTATATATTATAATTGCTCTTTTAACATAATTTTAAAAAATTTATATTAAACTTTCTCTGTT
++
+HHHFFFFBBDGGGGGHHHHHGGFCDHGEE<@;+ at C792A.CEEGGFFFFDEFGFHHHH@C2;@F;EDDHFDCCC at .DEEEG=BGEDC5>:=2 at GFHHHFF
+ at read_150_2/1
+GAGTGGGCTTCATCCCTGGGATGCAAGGCTGGTTCAATATATGCAAATCAATAAATGTAATCCAGCATATAAACAGAACCAAAGAAGATCGGAAGAGCAC
++
+HHHHHHHHHHHHHHHHHHHHHHHGC. at CFGHHHHHHHHFBFFHEHHHHFBGHFFFFFFHEDE@EBHHFHB<<>099BEB@=?*59/''.CCFHFHHHHHH
+ at read_150_3/1
+TATGTAATGACATAACTCTTATGGGCAACTTCACAAAAACACAGAAGAAAGCCCTCCTAAAGAATGAAATTCCAAAAAAAATCAGGTTACTGCTCACTGA
++
+HHE=EE at DBBBGHGBFGGDDDDFFFHHHHHGHHHHHHGHHHE7BFHHHHHHG@4FEHHFHHHHFHHHHHHFFFE?EGCDE>CD:9=>+*;=37::ADDHF
+ at read_150_4/1
+CTCCTATATAAAGATAGCTCTGTAAAACAGGCCAAAAAGCAGAGTGGGGTGTGGGAAGGCAGGGAAAACTGTCCAGGAATAAAGGCATGAAATGAAACAA
++
+HHHHHHHHHHHHHHHHEG@:<BBHHHHHHHHFFEE>EEB4DFHHEHFHHHHEGFFEEFCDHEFF:+1;?GFFCFHHHHHHHHHFHBB>>BEDGCDHHHHF
diff --git a/validation/pe/incl_adapter/multiple_input/input_1b.fastq b/validation/pe/incl_adapter/multiple_input/input_1b.fastq
new file mode 100644
index 0000000..3cc0bd2
--- /dev/null
+++ b/validation/pe/incl_adapter/multiple_input/input_1b.fastq
@@ -0,0 +1,16 @@
+ at read_150_5/1
+TACTCACGGACAAAGAATAAATATAGCTCCTCCAGGAGCTTAATAACTCAGTGCTGTCTAAACTCCTTACACCTGATGTTGATGCCATGGTTAGATAGTT
++
+HHFFGGFDBHHEHHHHHHHHHHHHFHHHHFHHFEEDFD8=GHFFHHDHHHCHHFDHBHD<FHFB?A=FFGGHE.(.8D97GF at 8863BGG<DGFGBCFG=
+ at read_150_6/1
+CAGCTTCATGTAAAAACTGGACAGAAGCATTCTCAGAAAATACTTCGGGACGATTGAGTTCAAATCACAGAGCTGAACATTCCTTTGGGTGGAGCAGTTT
++
+HHHF@><CDHGGEFGFHHHHEDDE8HHHHHGGFGGHHHHHHHGHFFFFIGHHHH::<BEFA2*'/89<.1&8.)&0:<BGFFHHCGGGEEDC at FFD;>:>
+ at read_150_7/1
+TAAGTAAGGTAGACAGCTAAGTCTAGTTTGTTCCCAGTGTTGTACCAGTCTCATCAGTGCCGTGTCTGGGTCTCACAGCCTCTGGTGTTCTATGCTGGAT
++
+GFFEEDHHGHHHHHHHHB?GG77-/:>>@?6AC5GIB?BEBHHHHHHHHHHHHFGFHHHHHHEFEGF9?EHHHE at 8BB<D9=DDFEEDDEC=>12BEHHH
+ at read_150_8/1
+TAAAAACAAAAACCCTGATGAGAGTATTGATGTGTGCATAAACAAAGAAAAACATAATAGGAATAGAATGGTGAATTAAATTTTGTGAATTTTGGAAACC
++
+HGGGGGHHHHHFHHGHHHHHHHEHHHHHHFHHEEHHHHHFE:/CGBHHHHHGFFGHHHHCEHEFECEFHHFEEE<ADBFFFHFCCFDBDFE at AD@=EEEB
diff --git a/validation/pe/incl_adapter/multiple_input/input_1c.fastq b/validation/pe/incl_adapter/multiple_input/input_1c.fastq
new file mode 100644
index 0000000..4ba8948
--- /dev/null
+++ b/validation/pe/incl_adapter/multiple_input/input_1c.fastq
@@ -0,0 +1,8 @@
+ at read_150_9/1
+AGGGCATATATTTTGTCAAAACAAGTAGAGCCAGGCCTGCTGTCTGTATCAGCCCCACCTAGGCAGGTTTGGGATAAGGGAGGGAGTGAAGAGGGAAGGC
++
+GFBDDGHHHHHHHHGGHHHGHHHCFFHHHHHHHHHFGGEA?FFFGEFBBA@;6BEA at EEEEEHHFEHFDDHHHHFEEGEB(:A:6C=>>CFFFCE?DEBD
+ at read_150_10/1
+TATAGATGAACTCTGATTTAGAATTTGTATAAGCTAAAGCATTATAGTAATAACTTTTAAAGTAGTATTTAAAATATCCTTATCTTACGTATATATGACT
++
+<506 at 6?GHHHHGFHGFCFHHHHHHHHHHFGFF<3 at C43F>AAEEFBFDFFHHHHHHHHED(0DAEBEFC?BFBEHHHHHC at 85@GBGGFDCHEHHFCFB
diff --git a/validation/pe/incl_adapter/multiple_input/input_2a.fastq b/validation/pe/incl_adapter/multiple_input/input_2a.fastq
new file mode 100644
index 0000000..a241f95
--- /dev/null
+++ b/validation/pe/incl_adapter/multiple_input/input_2a.fastq
@@ -0,0 +1,16 @@
+ at read_150_1/2
+AGAAACCACAGTGACTTAAACAGAGAAAGTTTAATATAAATTTTTTAAAATTATGTTAAAAGAGCAATTATAATATATAAGTTAACTCTATGTGGTACCC
++
+HHHFFHHHHHHGFBGHHEFBDG?B=GHHFGFHFHHHHHHHFBFHHHHHGGEEG=DGGGGCHHHHHHHGEA%5ADHHHH=G&&*>><EHHFE@=:51'*5?
+ at read_150_2/2
+TCTTTGGTTCTGTTTATATGCTGGATCACATTTATTGATTTGCATATATTGAACCAGCCTTGCATCCCAGGGATGAAGCCCACTCAGATCGGAAGAGAGT
++
+HHHHHHHHHHGHHHHFGHGFGB<.36./AEFEEHGGBD9HHHHHGFE:A9:<.;<<HHHHHHHGHHHHFHHED@@EFECHHEEEFEFCFH>E6,735 at GG
+ at read_150_3/2
+GTCATTAACATTCACGAAGATAAATTTCTCCATTTTAAACAGAGACACTCAGTGAGCAGTAACCTGATTTTTTTTGGAATTTCATTCTTCAGGAGGGCTT
++
+HHHHHHHHHHHHHHHHHH?GF5:@AFHHHGHFDDGGFFFHHFGHHHGGHHHHHHHHFGHFGEGC.18984>1BC=GFFAC<>E?..59&&-81:<<5<DC
+ at read_150_4/2
+GAAGACTATCAGCCATTCTTTTCTGTTTAGAAGAATTCTTGCCTACTGGCAGGTTTTAAATTTGTTTCATTTCATGCCTTTATTCCTGGACAGTTTTTCC
++
+HHHHHHHHFHHDEECEHBHHHHHHHHHHHHHHHEA?936>. at ABCDBCE>:>@CDGHHHGEBFE/38 at EEFBFGHHHHHHEGH?DHHHH>'9DEC**'*6
diff --git a/validation/pe/incl_adapter/multiple_input/input_2b.fastq b/validation/pe/incl_adapter/multiple_input/input_2b.fastq
new file mode 100644
index 0000000..91b892a
--- /dev/null
+++ b/validation/pe/incl_adapter/multiple_input/input_2b.fastq
@@ -0,0 +1,16 @@
+ at read_150_5/2
+TGGGGCCATCAGGAATTTTGCAGTGGTAATGGGGGACATTTTAGCTGAGACTTGGAAAAATGGTAGAATTTGCTCCAACATGAGGAAATATGAGCATTGA
++
+HHHHGEGHHHHGEG;/FHHHHHHHHE;@==G=DC>DGFHHHHHHHHHHHHHHFD;>A5<(<A)'%>@<4<CEDFGCEFDEGHHHHDEFFHEFHHHGGHHF
+ at read_150_6/2
+TCTGCGAAAGCTTCTGTTTAGTTAGGTGACGTTATCCCGTTTGCAACGAAATCCTCAGAGAGGTCCAAATATCCACCTGTGGAGTCGACATAAAGTGTGT
++
+HHHHHHHHHHHGEEHHHHEHHHHHHHHHHHHHGGBG=<,<DGHFEEEBFHHHHHHHHHHDCEGFHFHH86ECFGHHFHHGGEEA<3%::*(38+A?D<<>
+ at read_150_7/2
+ACTTGCACCTCTTCATCAGAGGAGCAGATCCAGGAACAGAAGTCCTGCATTTACAGGCTCTTCATATCTTGTGCCGGGTTTGGCTGCCAGGTGGCCAGCT
++
+HHHHG=BDEDFFGGHHHHHHHHHHHHFHHFHHHCGHHHHHEBHHHHHHHHHHHHHHGEEE??6BCFHE624 at 7=1AFGBDHHHFFE<<.>,1<EEEE<96
+ at read_150_8/2
+TTTGTAGAAATTATATCAATCTTTTAGTATTAGTAAGTTAAATTGAACTAAGTGATGTGATTTACACTGAATATCTCTATTTCTACTACAGCCAACTTAC
++
+HHHHHHFHHHHB:<95<9<CD:>349EEHHHHHHHGFHFHHHHHEHHD=:>-7 at BC2BHHHHHHHGBHEFFHHGGHFGFHHEEFHFBEBEFHHFFBCA?B
diff --git a/validation/pe/incl_adapter/multiple_input/input_2c.fastq b/validation/pe/incl_adapter/multiple_input/input_2c.fastq
new file mode 100644
index 0000000..3eaacc9
--- /dev/null
+++ b/validation/pe/incl_adapter/multiple_input/input_2c.fastq
@@ -0,0 +1,8 @@
+ at read_150_9/2
+GCCTTCCCTCTTCACTCCCTCCCTTATCCCAAACCTGCCTAGGTGGGGCTGATACAGACAGCAGGCCTGGCTCTACTTGTTTTGACAAAATATATGCCCT
++
+GGGEBGHHHHHHHHHHHHHHHHHHHHFADHHHFHHHF?DEF at B>C;CDGEHGGHHHE@@DBFGHHHHGB>BBFEGEGHFHF8ADCFDEE4D?>H@:>DD=
+ at read_150_10/2
+TAGTCTTCTCTTTCCTGAGAATATTTTTATTGCAAATATGTAGTCATATATACGTAAGATAAGGATATTTTAAATACTACTTTAAAAGTTATTACTATAA
++
+HHHHHHHHHHHHHHHHHHHHHHHHHHHHHFFFGHHHHHHHHHHHHEBDG>CCBB?FHFHHDEFHGDDGHHHHHH at BECHHEHGDHHHHHFHHHGEHHHHH
diff --git a/validation/pe/incl_adapter/multiple_input/your_output.discarded b/validation/pe/incl_adapter/multiple_input/your_output.discarded
new file mode 100644
index 0000000..e69de29
diff --git a/validation/pe/incl_adapter/multiple_input/your_output.pair1.truncated b/validation/pe/incl_adapter/multiple_input/your_output.pair1.truncated
new file mode 100644
index 0000000..2097c38
--- /dev/null
+++ b/validation/pe/incl_adapter/multiple_input/your_output.pair1.truncated
@@ -0,0 +1,40 @@
+ at read_150_1/1
+CTTGGGTACTCAGCCTTAGGGTACCACATAGAGTTATCTTATATATTATAATTGCTCTTTTAACATAATTTTAAAAAATTTATATTAAACTTTCTCTGTT
++
+HHHFFFFBBDGGGGGHHHHHGGFCDHGEE<@;+ at C792A.CEEGGFFFFDEFGFHHHH@C2;@F;EDDHFDCCC at .DEEEG=BGEDC5>:=2 at GFHHHFF
+ at read_150_2/1
+GAGTGGGCTTCATCCCTGGGATGCAAGGCTGGTTCAATATATGCAAATCAATAAATGTAATCCAGCATATAAACAGAACCAAAGA
++
+HHHHHHHHHHHHHHHHHHHHHHHGC. at CFGHHHHHHHHFBFFHEHHHHFBGHFFFFFFHEDE@EBHHFHB<<>099BEB@=?*59
+ at read_150_3/1
+TATGTAATGACATAACTCTTATGGGCAACTTCACAAAAACACAGAAGAAAGCCCTCCTAAAGAATGAAATTCCAAAAAAAATCAGGTTACTGCTCACTGA
++
+HHE=EE at DBBBGHGBFGGDDDDFFFHHHHHGHHHHHHGHHHE7BFHHHHHHG@4FEHHFHHHHFHHHHHHFFFE?EGCDE>CD:9=>+*;=37::ADDHF
+ at read_150_4/1
+CTCCTATATAAAGATAGCTCTGTAAAACAGGCCAAAAAGCAGAGTGGGGTGTGGGAAGGCAGGGAAAACTGTCCAGGAATAAAGGCATGAAATGAAACAA
++
+HHHHHHHHHHHHHHHHEG@:<BBHHHHHHHHFFEE>EEB4DFHHEHFHHHHEGFFEEFCDHEFF:+1;?GFFCFHHHHHHHHHFHBB>>BEDGCDHHHHF
+ at read_150_5/1
+TACTCACGGACAAAGAATAAATATAGCTCCTCCAGGAGCTTAATAACTCAGTGCTGTCTAAACTCCTTACACCTGATGTTGATGCCATGGTTAGATAGTT
++
+HHFFGGFDBHHEHHHHHHHHHHHHFHHHHFHHFEEDFD8=GHFFHHDHHHCHHFDHBHD<FHFB?A=FFGGHE.(.8D97GF at 8863BGG<DGFGBCFG=
+ at read_150_6/1
+CAGCTTCATGTAAAAACTGGACAGAAGCATTCTCAGAAAATACTTCGGGACGATTGAGTTCAAATCACAGAGCTGAACATTCCTTTGGGTGGAGCAGTTT
++
+HHHF@><CDHGGEFGFHHHHEDDE8HHHHHGGFGGHHHHHHHGHFFFFIGHHHH::<BEFA2*'/89<.1&8.)&0:<BGFFHHCGGGEEDC at FFD;>:>
+ at read_150_7/1
+TAAGTAAGGTAGACAGCTAAGTCTAGTTTGTTCCCAGTGTTGTACCAGTCTCATCAGTGCCGTGTCTGGGTCTCACAGCCTCTGGTGTTCTATGCTGGAT
++
+GFFEEDHHGHHHHHHHHB?GG77-/:>>@?6AC5GIB?BEBHHHHHHHHHHHHFGFHHHHHHEFEGF9?EHHHE at 8BB<D9=DDFEEDDEC=>12BEHHH
+ at read_150_8/1
+TAAAAACAAAAACCCTGATGAGAGTATTGATGTGTGCATAAACAAAGAAAAACATAATAGGAATAGAATGGTGAATTAAATTTTGTGAATTTTGGAAACC
++
+HGGGGGHHHHHFHHGHHHHHHHEHHHHHHFHHEEHHHHHFE:/CGBHHHHHGFFGHHHHCEHEFECEFHHFEEE<ADBFFFHFCCFDBDFE at AD@=EEEB
+ at read_150_9/1
+AGGGCATATATTTTGTCAAAACAAGTAGAGCCAGGCCTGCTGTCTGTATCAGCCCCACCTAGGCAGGTTTGGGATAAGGGAGGGAGTGAAGAGGGAAGGC
++
+GFBDDGHHHHHHHHGGHHHGHHHCFFHHHHHHHHHFGGEA?FFFGEFBBA@;6BEA at EEEEEHHFEHFDDHHHHFEEGEB(:A:6C=>>CFFFCE?DEBD
+ at read_150_10/1
+TATAGATGAACTCTGATTTAGAATTTGTATAAGCTAAAGCATTATAGTAATAACTTTTAAAGTAGTATTTAAAATATCCTTATCTTACGTATATATGACT
++
+<506 at 6?GHHHHGFHGFCFHHHHHHHHHHFGFF<3 at C43F>AAEEFBFDFFHHHHHHHHED(0DAEBEFC?BFBEHHHHHC at 85@GBGGFDCHEHHFCFB
diff --git a/validation/pe/incl_adapter/multiple_input/your_output.pair2.truncated b/validation/pe/incl_adapter/multiple_input/your_output.pair2.truncated
new file mode 100644
index 0000000..e278acc
--- /dev/null
+++ b/validation/pe/incl_adapter/multiple_input/your_output.pair2.truncated
@@ -0,0 +1,40 @@
+ at read_150_1/2
+AGAAACCACAGTGACTTAAACAGAGAAAGTTTAATATAAATTTTTTAAAATTATGTTAAAAGAGCAATTATAATATATAAGTTAACTCTATGTGGTACCC
++
+HHHFFHHHHHHGFBGHHEFBDG?B=GHHFGFHFHHHHHHHFBFHHHHHGGEEG=DGGGGCHHHHHHHGEA%5ADHHHH=G&&*>><EHHFE@=:51'*5?
+ at read_150_2/2
+TCTTTGGTTCTGTTTATATGCTGGATCACATTTATTGATTTGCATATATTGAACCAGCCTTGCATCCCAGGGATGAAGCCCACTC
++
+HHHHHHHHHHGHHHHFGHGFGB<.36./AEFEEHGGBD9HHHHHGFE:A9:<.;<<HHHHHHHGHHHHFHHED@@EFECHHEEEF
+ at read_150_3/2
+GTCATTAACATTCACGAAGATAAATTTCTCCATTTTAAACAGAGACACTCAGTGAGCAGTAACCTGATTTTTTTTGGAATTTCATTCTTCAGGAGGGCTT
++
+HHHHHHHHHHHHHHHHHH?GF5:@AFHHHGHFDDGGFFFHHFGHHHGGHHHHHHHHFGHFGEGC.18984>1BC=GFFAC<>E?..59&&-81:<<5<DC
+ at read_150_4/2
+GAAGACTATCAGCCATTCTTTTCTGTTTAGAAGAATTCTTGCCTACTGGCAGGTTTTAAATTTGTTTCATTTCATGCCTTTATTCCTGGACAGTTTTTCC
++
+HHHHHHHHFHHDEECEHBHHHHHHHHHHHHHHHEA?936>. at ABCDBCE>:>@CDGHHHGEBFE/38 at EEFBFGHHHHHHEGH?DHHHH>'9DEC**'*6
+ at read_150_5/2
+TGGGGCCATCAGGAATTTTGCAGTGGTAATGGGGGACATTTTAGCTGAGACTTGGAAAAATGGTAGAATTTGCTCCAACATGAGGAAATATGAGCATTGA
++
+HHHHGEGHHHHGEG;/FHHHHHHHHE;@==G=DC>DGFHHHHHHHHHHHHHHFD;>A5<(<A)'%>@<4<CEDFGCEFDEGHHHHDEFFHEFHHHGGHHF
+ at read_150_6/2
+TCTGCGAAAGCTTCTGTTTAGTTAGGTGACGTTATCCCGTTTGCAACGAAATCCTCAGAGAGGTCCAAATATCCACCTGTGGAGTCGACATAAAGTGTGT
++
+HHHHHHHHHHHGEEHHHHEHHHHHHHHHHHHHGGBG=<,<DGHFEEEBFHHHHHHHHHHDCEGFHFHH86ECFGHHFHHGGEEA<3%::*(38+A?D<<>
+ at read_150_7/2
+ACTTGCACCTCTTCATCAGAGGAGCAGATCCAGGAACAGAAGTCCTGCATTTACAGGCTCTTCATATCTTGTGCCGGGTTTGGCTGCCAGGTGGCCAGCT
++
+HHHHG=BDEDFFGGHHHHHHHHHHHHFHHFHHHCGHHHHHEBHHHHHHHHHHHHHHGEEE??6BCFHE624 at 7=1AFGBDHHHFFE<<.>,1<EEEE<96
+ at read_150_8/2
+TTTGTAGAAATTATATCAATCTTTTAGTATTAGTAAGTTAAATTGAACTAAGTGATGTGATTTACACTGAATATCTCTATTTCTACTACAGCCAACTTAC
++
+HHHHHHFHHHHB:<95<9<CD:>349EEHHHHHHHGFHFHHHHHEHHD=:>-7 at BC2BHHHHHHHGBHEFFHHGGHFGFHHEEFHFBEBEFHHFFBCA?B
+ at read_150_9/2
+GCCTTCCCTCTTCACTCCCTCCCTTATCCCAAACCTGCCTAGGTGGGGCTGATACAGACAGCAGGCCTGGCTCTACTTGTTTTGACAAAATATATGCCCT
++
+GGGEBGHHHHHHHHHHHHHHHHHHHHFADHHHFHHHF?DEF at B>C;CDGEHGGHHHE@@DBFGHHHHGB>BBFEGEGHFHF8ADCFDEE4D?>H@:>DD=
+ at read_150_10/2
+TAGTCTTCTCTTTCCTGAGAATATTTTTATTGCAAATATGTAGTCATATATACGTAAGATAAGGATATTTTAAATACTACTTTAAAAGTTATTACTATAA
++
+HHHHHHHHHHHHHHHHHHHHHHHHHHHHHFFFGHHHHHHHHHHHHEBDG>CCBB?FHFHHDEFHGDDGHHHHHH at BECHHEHGDHHHHHFHHHGEHHHHH
diff --git a/validation/pe/excl_adapter/non_overlapping/combined_output/interleaved/keep_both/your_output.settings b/validation/pe/incl_adapter/multiple_input/your_output.settings
similarity index 84%
copy from validation/pe/excl_adapter/non_overlapping/combined_output/interleaved/keep_both/your_output.settings
copy to validation/pe/incl_adapter/multiple_input/your_output.settings
index d052a2f..43782f1 100644
--- a/validation/pe/excl_adapter/non_overlapping/combined_output/interleaved/keep_both/your_output.settings
+++ b/validation/pe/incl_adapter/multiple_input/your_output.settings
@@ -1,4 +1,4 @@
-AdapterRemoval ver. 2.1.7
+AdapterRemoval ver. 2.2.0
 Trimming of paired-end reads
 
 
@@ -8,16 +8,17 @@ Adapter2[1]: AGATCGGAAGAGCGTCGTGTAGGGAAAGAGTGTAGATCTCGGTGGTCGCCGTATCATT
 
 
 [Adapter trimming]
-RNG seed: 2644350168
+RNG seed: 4274826581
 Alignment shift value: 2
 Global mismatch threshold: 0.333333
 Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
@@ -25,17 +26,17 @@ Minimum overlap (in case of collapse): 11
 
 
 [Trimming statistics]
-Total number of read pairs: 1
-Number of unaligned read pairs: 1
-Number of well aligned read pairs: 0
+Total number of read pairs: 10
+Number of unaligned read pairs: 4
+Number of well aligned read pairs: 6
 Number of discarded mate 1 reads: 0
 Number of singleton mate 1 reads: 0
 Number of discarded mate 2 reads: 0
 Number of singleton mate 2 reads: 0
-Number of reads with adapters[1]: 0
-Number of retained reads: 2
-Number of retained nucleotides: 200
-Average length of retained reads: 100
+Number of reads with adapters[1]: 2
+Number of retained reads: 20
+Number of retained nucleotides: 1970
+Average length of retained reads: 98.5
 
 
 [Length distribution]
@@ -125,7 +126,7 @@ Length	Mate1	Mate2	Singleton	Discarded	All
 82	0	0	0	0	0
 83	0	0	0	0	0
 84	0	0	0	0	0
-85	0	0	0	0	0
+85	1	1	0	0	2
 86	0	0	0	0	0
 87	0	0	0	0	0
 88	0	0	0	0	0
@@ -140,4 +141,4 @@ Length	Mate1	Mate2	Singleton	Discarded	All
 97	0	0	0	0	0
 98	0	0	0	0	0
 99	0	0	0	0	0
-100	1	1	0	0	2
+100	9	9	0	0	18
diff --git a/validation/pe/incl_adapter/multiple_input/your_output.singleton.truncated b/validation/pe/incl_adapter/multiple_input/your_output.singleton.truncated
new file mode 100644
index 0000000..e69de29
diff --git a/validation/pe/incl_adapter/threads/one/your_output.settings b/validation/pe/incl_adapter/threads/one/your_output.settings
index 2fcdd43..770167f 100644
--- a/validation/pe/incl_adapter/threads/one/your_output.settings
+++ b/validation/pe/incl_adapter/threads/one/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/incl_adapter/threads/three/your_output.settings b/validation/pe/incl_adapter/threads/three/your_output.settings
index 2fcdd43..770167f 100644
--- a/validation/pe/incl_adapter/threads/three/your_output.settings
+++ b/validation/pe/incl_adapter/threads/three/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/incl_adapter/threads/two/your_output.settings b/validation/pe/incl_adapter/threads/two/your_output.settings
index 2fcdd43..770167f 100644
--- a/validation/pe/incl_adapter/threads/two/your_output.settings
+++ b/validation/pe/incl_adapter/threads/two/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/incl_adapter/trimns/excl_ns/your_output.settings b/validation/pe/incl_adapter/trimns/excl_ns/your_output.settings
index 09e6e5a..f0f5aa5 100644
--- a/validation/pe/incl_adapter/trimns/excl_ns/your_output.settings
+++ b/validation/pe/incl_adapter/trimns/excl_ns/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/incl_adapter/trimns/incl_ns/your_output.settings b/validation/pe/incl_adapter/trimns/incl_ns/your_output.settings
index 35a47d1..cf27b45 100644
--- a/validation/pe/incl_adapter/trimns/incl_ns/your_output.settings
+++ b/validation/pe/incl_adapter/trimns/incl_ns/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/incl_adapter/trimqualities/default/your_output.settings b/validation/pe/incl_adapter/trimqualities/default/your_output.settings
index c8e3460..87c5471 100644
--- a/validation/pe/incl_adapter/trimqualities/default/your_output.settings
+++ b/validation/pe/incl_adapter/trimqualities/default/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: Yes
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/incl_adapter/trimqualities/minq35/your_output.settings b/validation/pe/incl_adapter/trimqualities/minq35/your_output.settings
index 66b19ba..e7de086 100644
--- a/validation/pe/incl_adapter/trimqualities/minq35/your_output.settings
+++ b/validation/pe/incl_adapter/trimqualities/minq35/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 35: Yes
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/only_adapter/collapse/your_output.settings b/validation/pe/only_adapter/collapse/your_output.settings
index be798ca..c73ca6f 100644
--- a/validation/pe/only_adapter/collapse/your_output.settings
+++ b/validation/pe/only_adapter/collapse/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: Yes
diff --git a/validation/pe/only_adapter/combined_output/collapse/your_output.settings b/validation/pe/only_adapter/combined_output/collapse/your_output.settings
index be798ca..c73ca6f 100644
--- a/validation/pe/only_adapter/combined_output/collapse/your_output.settings
+++ b/validation/pe/only_adapter/combined_output/collapse/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: Yes
diff --git a/validation/pe/only_adapter/combined_output/defaults/your_output.settings b/validation/pe/only_adapter/combined_output/defaults/your_output.settings
index b77fe5e..3aa8ff7 100644
--- a/validation/pe/only_adapter/combined_output/defaults/your_output.settings
+++ b/validation/pe/only_adapter/combined_output/defaults/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/only_adapter/crlf_newlines/your_output.settings b/validation/pe/only_adapter/crlf_newlines/your_output.settings
index 8b80d86..3a2b98c 100644
--- a/validation/pe/only_adapter/crlf_newlines/your_output.settings
+++ b/validation/pe/only_adapter/crlf_newlines/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/only_adapter/defaults/your_output.settings b/validation/pe/only_adapter/defaults/your_output.settings
index 8b80d86..3a2b98c 100644
--- a/validation/pe/only_adapter/defaults/your_output.settings
+++ b/validation/pe/only_adapter/defaults/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/pe/only_adapter/minlength/your_output.settings b/validation/pe/only_adapter/minlength/your_output.settings
index eec7bf5..9db0b76 100644
--- a/validation/pe/only_adapter/minlength/your_output.settings
+++ b/validation/pe/only_adapter/minlength/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 0
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/run b/validation/run
index ad83a9f..e98e1a0 100755
--- a/validation/run
+++ b/validation/run
@@ -1,6 +1,6 @@
 #!/usr/bin/python
 # -*- coding: utf-8 -*-
-# Copyright (c) 2016 Mikkel Schubert <MSchubert at snm.ku.dk>
+# Copyright (c) 2016 Mikkel Schubert <MikkelSch at gmail.com>
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal
@@ -137,23 +137,28 @@ def pretty_output(s, padding=0, max_lines=float("inf")):
     return "\n".join(result)
 
 
-def interleave(text_1, text_2):
-    lines_1 = text_1.split("\n")
-    lines_2 = text_2.split("\n")
-    iters = (iter(lines_1).next, iter(lines_2).next)
+def interleave(texts_1, texts_2):
+    files = []
 
-    assert len(lines_1) == len(lines_2)
+    for text_1, text_2 in zip(texts_1, texts_2):
+        lines_1 = text_1.split("\n")
+        lines_2 = text_2.split("\n")
+        iters = (iter(lines_1).next, iter(lines_2).next)
 
-    result = []
-    while True:
-        try:
-            for it in iters:
-                for _ in xrange(4):
-                    result.append(it())
-        except StopIteration:
-            break
+        assert len(lines_1) == len(lines_2)
 
-    return "\n".join(result)
+        result = []
+        while True:
+            try:
+                for it in iters:
+                    for _ in xrange(4):
+                        result.append(it())
+            except StopIteration:
+                break
+
+        files.append("\n".join(result))
+
+    return files
 
 
 class TestError(StandardError):
@@ -178,7 +183,7 @@ class TestCase(object):
         root = os.path.join(root, *self.path)
 
         interleaved_tests = [False]
-        if self._is_paired():
+        if self._is_properly_paired():
             interleaved_tests.append(True)
 
         for in_compression in (UNCOMPRESSED, GZIP, BZIP2):
@@ -210,30 +215,35 @@ class TestCase(object):
     def _setup_input(self, root, compression, interleaved):
         input_files = {}
         for key in ("input_1", "input_2"):
-            if self._files[key] is not None:
-                input_files[key] = open(self._files[key]).read()
+            input_files[key] = [open(filename).read()
+                                for filename in self._files[key]]
 
         if interleaved:
             input_files = {"input_1": interleave(input_files["input_1"],
-                                                 input_files["input_2"])}
+                                                 input_files["input_2"]),
+                           "input_2": []}
 
         final_files = {}
-        for key, value in input_files.iteritems():
-            filename = key + ".fastq"
-            if compression != UNCOMPRESSED:
-                filename += "." + compression
-                value = compress(value, compression)
+        for key, values in input_files.iteritems():
+            filenames = []
+            for idx, value in enumerate(values):
+                filename = '%s%s.fastq' % (key, chr(ord('a') + idx))
+                if compression != UNCOMPRESSED:
+                    filename += "." + compression
+                    value = compress(value, compression)
+
+                with open(os.path.join(root, filename), "w") as handle:
+                    handle.write(value)
 
-            with open(os.path.join(root, filename), "w") as handle:
-                handle.write(value)
+                filenames.append(filename)
 
-            final_files[key] = filename
+            final_files[key] = filenames
 
         if 'barcodes' in self._files:
             with open(os.path.join(root, 'barcodes.txt'), 'w') as handle:
                 handle.writelines(self._files['barcodes'])
 
-        return final_files.get("input_1"), final_files.get("input_2")
+        return final_files["input_1"], final_files["input_2"]
 
     def _do_call(self, root, input_1, input_2, compression, interleaved):
         command = self._build_command(root, input_1, input_2, compression, interleaved)
@@ -278,8 +288,8 @@ class TestCase(object):
                     expected_files_.add(value)
             expected_files = expected_files_
 
-        observed_files = frozenset(os.listdir(root)) - frozenset((input_1,
-                                                                  input_2))
+        observed_files = frozenset(os.listdir(root)) \
+            - frozenset(input_1) - frozenset(input_2)
 
         if expected_files - observed_files:
             raise TestError("ERROR: Expected output file(s) not created:\n"
@@ -325,24 +335,28 @@ class TestCase(object):
         if 'barcodes' in self._files:
             command.extend(('--barcode-list', 'barcodes.txt'))
 
-        if input_1 is not None or input_2 is not None:
+        if input_1 or input_2:
             if compression == BZIP2:
                 command.append("--bzip2")
             elif compression == GZIP:
                 command.append("--gzip")
 
-        if input_1 is not None:
-            command.extend(('--file1', input_1))
-        if input_2 is not None:
-            command.extend(('--file2', input_2))
+        if input_1:
+            command.append('--file1')
+            command.extend(input_1)
+        if input_2:
+            command.append('--file2')
+            command.extend(input_2)
 
         command.extend(self._info['arguments'])
 
         return [field % {"ROOT": root} for field in command]
 
-    def _is_paired(self):
-        return (self._files["input_1"] is not None) \
-            and (self._files["input_2"] is not None)
+    def _is_properly_paired(self):
+        input_1 = self._files["input_1"]
+        input_2 = self._files["input_2"]
+
+        return input_1 and len(input_1) == len(input_2)
 
     @classmethod
     def _mangle_settings(cls, handle):
@@ -363,27 +377,20 @@ class TestCase(object):
     @classmethod
     def _collect_files(cls, root):
         result = {
-            "input_1": None,
-            "input_2": None,
+            "input_1": [],
+            "input_2": [],
             "output": {},
         }
 
         def read_lines(root, filename):
             return open(os.path.join(root, filename)).readlines()
 
-        for filename in os.listdir(root):
-            if filename.startswith("input_1.fastq"):
-                if result["input_1"] is not None:
-                    raise TestError('Duplicate input_1.fastq* files in %r'
-                                    % (root,))
-                result["input_1"] = os.path.abspath(os.path.join(root,
-                                                                 filename))
-            elif filename.startswith("input_2.fastq"):
-                if result["input_2"] is not None:
-                    raise TestError('Duplicate input_2.fastq* files in %r'
-                                    % (root,))
-                result["input_2"] = os.path.abspath(os.path.join(root,
-                                                                 filename))
+        abs_root = os.path.abspath(root)
+        for filename in sorted(os.listdir(root)):
+            if filename.startswith("input_1"):
+                result["input_1"].append(os.path.join(abs_root, filename))
+            elif filename.startswith("input_2"):
+                result["input_2"].append(os.path.join(abs_root, filename))
             elif filename not in ('info.json', 'README', 'barcodes.txt'):
                 result["output"][filename] = read_lines(root, filename)
             elif filename == 'barcodes.txt':
@@ -465,6 +472,9 @@ def main(argv):
     print('Reading test-cases from %r' % (args.source_dir,))
     tests = TestCase.collect(args.source_dir)
 
+    if not os.path.exists(args.work_dir):
+        os.makedirs(args.work_dir)
+
     args.work_dir = tempfile.mkdtemp(dir=args.work_dir)
     print('Writing test-cases results to %r' % (args.work_dir,))
 
diff --git a/validation/se/excl_adapter/collapse/your_output.settings b/validation/se/excl_adapter/collapse/your_output.settings
index c556d03..8b5433f 100644
--- a/validation/se/excl_adapter/collapse/your_output.settings
+++ b/validation/se/excl_adapter/collapse/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: Yes
diff --git a/validation/se/excl_adapter/combined_output/collapse/your_output.settings b/validation/se/excl_adapter/combined_output/collapse/your_output.settings
index c556d03..8b5433f 100644
--- a/validation/se/excl_adapter/combined_output/collapse/your_output.settings
+++ b/validation/se/excl_adapter/combined_output/collapse/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: Yes
diff --git a/validation/se/excl_adapter/combined_output/discarded/your_output.settings b/validation/se/excl_adapter/combined_output/discarded/your_output.settings
index 60c3819..6cf0018 100644
--- a/validation/se/excl_adapter/combined_output/discarded/your_output.settings
+++ b/validation/se/excl_adapter/combined_output/discarded/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 999
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/se/excl_adapter/combined_output/retained/your_output.settings b/validation/se/excl_adapter/combined_output/retained/your_output.settings
index b2f68fa..cb0a5e6 100644
--- a/validation/se/excl_adapter/combined_output/retained/your_output.settings
+++ b/validation/se/excl_adapter/combined_output/retained/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/se/excl_adapter/crlf_newlines/your_output.settings b/validation/se/excl_adapter/crlf_newlines/your_output.settings
index b2f68fa..cb0a5e6 100644
--- a/validation/se/excl_adapter/crlf_newlines/your_output.settings
+++ b/validation/se/excl_adapter/crlf_newlines/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/se/excl_adapter/defaults/your_output.settings b/validation/se/excl_adapter/defaults/your_output.settings
index b2f68fa..cb0a5e6 100644
--- a/validation/se/excl_adapter/defaults/your_output.settings
+++ b/validation/se/excl_adapter/defaults/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/se/excl_adapter/maxlength/your_output.settings b/validation/se/excl_adapter/maxlength/your_output.settings
index 03d913a..80b91b2 100644
--- a/validation/se/excl_adapter/maxlength/your_output.settings
+++ b/validation/se/excl_adapter/maxlength/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 13
 Collapse overlapping reads: No
diff --git a/validation/se/excl_adapter/minlength/your_output.settings b/validation/se/excl_adapter/minlength/your_output.settings
index d437f85..88ab76a 100644
--- a/validation/se/excl_adapter/minlength/your_output.settings
+++ b/validation/se/excl_adapter/minlength/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 999
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/se/excl_adapter/trimns/excl_ns/your_output.settings b/validation/se/excl_adapter/trimns/excl_ns/your_output.settings
index 53552ec..a1f6f74 100644
--- a/validation/se/excl_adapter/trimns/excl_ns/your_output.settings
+++ b/validation/se/excl_adapter/trimns/excl_ns/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/se/excl_adapter/trimns/incl_ns/your_output.settings b/validation/se/excl_adapter/trimns/incl_ns/your_output.settings
index bf63202..2d83675 100644
--- a/validation/se/excl_adapter/trimns/incl_ns/your_output.settings
+++ b/validation/se/excl_adapter/trimns/incl_ns/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/se/excl_adapter/trimqualities/default/your_output.settings b/validation/se/excl_adapter/trimqualities/default/your_output.settings
index 680c46a..126438f 100644
--- a/validation/se/excl_adapter/trimqualities/default/your_output.settings
+++ b/validation/se/excl_adapter/trimqualities/default/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: Yes
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/se/excl_adapter/trimqualities/minq31/your_output.settings b/validation/se/excl_adapter/trimqualities/minq31/your_output.settings
index b1ad7ab..b76cb52 100644
--- a/validation/se/excl_adapter/trimqualities/minq31/your_output.settings
+++ b/validation/se/excl_adapter/trimqualities/minq31/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 31: Yes
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/se/incl_adapter/collapse/your_output.settings b/validation/se/incl_adapter/collapse/your_output.settings
index 670547e..5c6cb51 100644
--- a/validation/se/incl_adapter/collapse/your_output.settings
+++ b/validation/se/incl_adapter/collapse/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: Yes
diff --git a/validation/se/incl_adapter/collapse_truncated/your_output.settings b/validation/se/incl_adapter/collapse_truncated/your_output.settings
index 980a692..214a7ff 100644
--- a/validation/se/incl_adapter/collapse_truncated/your_output.settings
+++ b/validation/se/incl_adapter/collapse_truncated/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: Yes
diff --git a/validation/se/incl_adapter/combined_output/collapse/your_output.settings b/validation/se/incl_adapter/combined_output/collapse/your_output.settings
index aeb79a9..854fb19 100644
--- a/validation/se/incl_adapter/combined_output/collapse/your_output.settings
+++ b/validation/se/incl_adapter/combined_output/collapse/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: Yes
diff --git a/validation/se/incl_adapter/combined_output/collapse_truncated/your_output.settings b/validation/se/incl_adapter/combined_output/collapse_truncated/your_output.settings
index 4f9c164..1672b30 100644
--- a/validation/se/incl_adapter/combined_output/collapse_truncated/your_output.settings
+++ b/validation/se/incl_adapter/combined_output/collapse_truncated/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: Yes
diff --git a/validation/se/incl_adapter/combined_output/discarded/your_output.settings b/validation/se/incl_adapter/combined_output/discarded/your_output.settings
index 04d1d45..4b2504e 100644
--- a/validation/se/incl_adapter/combined_output/discarded/your_output.settings
+++ b/validation/se/incl_adapter/combined_output/discarded/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 999
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/se/incl_adapter/combined_output/retained/your_output.settings b/validation/se/incl_adapter/combined_output/retained/your_output.settings
index 0907f0f..035060f 100644
--- a/validation/se/incl_adapter/combined_output/retained/your_output.settings
+++ b/validation/se/incl_adapter/combined_output/retained/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/se/incl_adapter/crlf_newlines/your_output.settings b/validation/se/incl_adapter/crlf_newlines/your_output.settings
index 4e9e9bb..7ad0afc 100644
--- a/validation/se/incl_adapter/crlf_newlines/your_output.settings
+++ b/validation/se/incl_adapter/crlf_newlines/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/se/incl_adapter/defaults/your_output.settings b/validation/se/incl_adapter/defaults/your_output.settings
index 4e9e9bb..7ad0afc 100644
--- a/validation/se/incl_adapter/defaults/your_output.settings
+++ b/validation/se/incl_adapter/defaults/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/se/incl_adapter/maxlength/your_output.settings b/validation/se/incl_adapter/maxlength/your_output.settings
index 24ee450..a91d0b8 100644
--- a/validation/se/incl_adapter/maxlength/your_output.settings
+++ b/validation/se/incl_adapter/maxlength/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 13
 Collapse overlapping reads: No
diff --git a/validation/se/incl_adapter/minlength/your_output.settings b/validation/se/incl_adapter/minlength/your_output.settings
index 3a0f30f..329c92b 100644
--- a/validation/se/incl_adapter/minlength/your_output.settings
+++ b/validation/se/incl_adapter/minlength/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 999
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/se/incl_adapter/multiple_input/info.json b/validation/se/incl_adapter/multiple_input/info.json
new file mode 100644
index 0000000..b5e48cf
--- /dev/null
+++ b/validation/se/incl_adapter/multiple_input/info.json
@@ -0,0 +1,6 @@
+{
+	"arguments": [],
+	"return_code": 0,
+	"stderr": [
+	]
+}
diff --git a/validation/se/incl_adapter/multiple_input/input_1a.fastq b/validation/se/incl_adapter/multiple_input/input_1a.fastq
new file mode 100644
index 0000000..431ea28
--- /dev/null
+++ b/validation/se/incl_adapter/multiple_input/input_1a.fastq
@@ -0,0 +1,16 @@
+ at read_150_1/1
+CTTGGGTACTCAGCCTTAGGGTACCACATAGAGTTATCTTATATATTATAATTGCTCTTTTAACATAATTTTAAAAAATTTATATTAAACTTTCTCTGTT
++
+HHHFFFFBBDGGGGGHHHHHGGFCDHGEE<@;+ at C792A.CEEGGFFFFDEFGFHHHH@C2;@F;EDDHFDCCC at .DEEEG=BGEDC5>:=2 at GFHHHFF
+ at read_150_2/1
+GAGTGGGCTTCATCCCTGGGATGCAAGGCTGGTTCAATATATGCAAATCAATAAATGTAATCCAGCATATAAACAGAACCAAAGAAGATCGGAAGAGCAC
++
+HHHHHHHHHHHHHHHHHHHHHHHGC. at CFGHHHHHHHHFBFFHEHHHHFBGHFFFFFFHEDE@EBHHFHB<<>099BEB@=?*59/''.CCFHFHHHHHH
+ at read_150_3/1
+TATGTAATGACATAACTCTTATGGGCAACTTCACAAAAACACAGAAGAAAGCCCTCCTAAAGAATGAAATTCCAAAAAAAATCAGGTTACTGCTCACTGA
++
+HHE=EE at DBBBGHGBFGGDDDDFFFHHHHHGHHHHHHGHHHE7BFHHHHHHG@4FEHHFHHHHFHHHHHHFFFE?EGCDE>CD:9=>+*;=37::ADDHF
+ at read_150_4/1
+CTCCTATATAAAGATAGCTCTGTAAAACAGGCCAAAAAGCAGAGTGGGGTGTGGGAAGGCAGGGAAAACTGTCCAGGAATAAAGGCATGAAATGAAACAA
++
+HHHHHHHHHHHHHHHHEG@:<BBHHHHHHHHFFEE>EEB4DFHHEHFHHHHEGFFEEFCDHEFF:+1;?GFFCFHHHHHHHHHFHBB>>BEDGCDHHHHF
diff --git a/validation/se/incl_adapter/multiple_input/input_1b.fastq b/validation/se/incl_adapter/multiple_input/input_1b.fastq
new file mode 100644
index 0000000..3cc0bd2
--- /dev/null
+++ b/validation/se/incl_adapter/multiple_input/input_1b.fastq
@@ -0,0 +1,16 @@
+ at read_150_5/1
+TACTCACGGACAAAGAATAAATATAGCTCCTCCAGGAGCTTAATAACTCAGTGCTGTCTAAACTCCTTACACCTGATGTTGATGCCATGGTTAGATAGTT
++
+HHFFGGFDBHHEHHHHHHHHHHHHFHHHHFHHFEEDFD8=GHFFHHDHHHCHHFDHBHD<FHFB?A=FFGGHE.(.8D97GF at 8863BGG<DGFGBCFG=
+ at read_150_6/1
+CAGCTTCATGTAAAAACTGGACAGAAGCATTCTCAGAAAATACTTCGGGACGATTGAGTTCAAATCACAGAGCTGAACATTCCTTTGGGTGGAGCAGTTT
++
+HHHF@><CDHGGEFGFHHHHEDDE8HHHHHGGFGGHHHHHHHGHFFFFIGHHHH::<BEFA2*'/89<.1&8.)&0:<BGFFHHCGGGEEDC at FFD;>:>
+ at read_150_7/1
+TAAGTAAGGTAGACAGCTAAGTCTAGTTTGTTCCCAGTGTTGTACCAGTCTCATCAGTGCCGTGTCTGGGTCTCACAGCCTCTGGTGTTCTATGCTGGAT
++
+GFFEEDHHGHHHHHHHHB?GG77-/:>>@?6AC5GIB?BEBHHHHHHHHHHHHFGFHHHHHHEFEGF9?EHHHE at 8BB<D9=DDFEEDDEC=>12BEHHH
+ at read_150_8/1
+TAAAAACAAAAACCCTGATGAGAGTATTGATGTGTGCATAAACAAAGAAAAACATAATAGGAATAGAATGGTGAATTAAATTTTGTGAATTTTGGAAACC
++
+HGGGGGHHHHHFHHGHHHHHHHEHHHHHHFHHEEHHHHHFE:/CGBHHHHHGFFGHHHHCEHEFECEFHHFEEE<ADBFFFHFCCFDBDFE at AD@=EEEB
diff --git a/validation/se/incl_adapter/multiple_input/input_1c.fastq b/validation/se/incl_adapter/multiple_input/input_1c.fastq
new file mode 100644
index 0000000..4ba8948
--- /dev/null
+++ b/validation/se/incl_adapter/multiple_input/input_1c.fastq
@@ -0,0 +1,8 @@
+ at read_150_9/1
+AGGGCATATATTTTGTCAAAACAAGTAGAGCCAGGCCTGCTGTCTGTATCAGCCCCACCTAGGCAGGTTTGGGATAAGGGAGGGAGTGAAGAGGGAAGGC
++
+GFBDDGHHHHHHHHGGHHHGHHHCFFHHHHHHHHHFGGEA?FFFGEFBBA@;6BEA at EEEEEHHFEHFDDHHHHFEEGEB(:A:6C=>>CFFFCE?DEBD
+ at read_150_10/1
+TATAGATGAACTCTGATTTAGAATTTGTATAAGCTAAAGCATTATAGTAATAACTTTTAAAGTAGTATTTAAAATATCCTTATCTTACGTATATATGACT
++
+<506 at 6?GHHHHGFHGFCFHHHHHHHHHHFGFF<3 at C43F>AAEEFBFDFFHHHHHHHHED(0DAEBEFC?BFBEHHHHHC at 85@GBGGFDCHEHHFCFB
diff --git a/validation/se/incl_adapter/multiple_input/your_output.discarded b/validation/se/incl_adapter/multiple_input/your_output.discarded
new file mode 100644
index 0000000..e69de29
diff --git a/validation/se/excl_adapter/combined_output/retained/your_output.settings b/validation/se/incl_adapter/multiple_input/your_output.settings
similarity index 79%
copy from validation/se/excl_adapter/combined_output/retained/your_output.settings
copy to validation/se/incl_adapter/multiple_input/your_output.settings
index b2f68fa..2b1c028 100644
--- a/validation/se/excl_adapter/combined_output/retained/your_output.settings
+++ b/validation/se/incl_adapter/multiple_input/your_output.settings
@@ -1,4 +1,4 @@
-AdapterRemoval ver. 2.1.7
+AdapterRemoval ver. 2.2.0
 Trimming of single-end reads
 
 
@@ -8,16 +8,17 @@ Adapter2[1]: AGATCGGAAGAGCGTCGTGTAGGGAAAGAGTGTAGATCTCGGTGGTCGCCGTATCATT
 
 
 [Adapter trimming]
-RNG seed: 3702281079
+RNG seed: 35713051
 Alignment shift value: 2
 Global mismatch threshold: 0.333333
 Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
@@ -26,15 +27,15 @@ Minimum adapter overlap: 0
 
 
 [Trimming statistics]
-Total number of reads: 1
-Number of unaligned reads: 1
-Number of well aligned reads: 0
+Total number of reads: 10
+Number of unaligned reads: 8
+Number of well aligned reads: 2
 Number of discarded mate 1 reads: 0
-Number of singleton mate 1 reads: 1
-Number of reads with adapters[1]: 0
-Number of retained reads: 1
-Number of retained nucleotides: 100
-Average length of retained reads: 100
+Number of singleton mate 1 reads: 10
+Number of reads with adapters[1]: 2
+Number of retained reads: 10
+Number of retained nucleotides: 984
+Average length of retained reads: 98.4
 
 
 [Length distribution]
@@ -124,7 +125,7 @@ Length	Mate1	Discarded	All
 82	0	0	0
 83	0	0	0
 84	0	0	0
-85	0	0	0
+85	1	0	1
 86	0	0	0
 87	0	0	0
 88	0	0	0
@@ -138,5 +139,5 @@ Length	Mate1	Discarded	All
 96	0	0	0
 97	0	0	0
 98	0	0	0
-99	0	0	0
-100	1	0	1
+99	1	0	1
+100	8	0	8
diff --git a/validation/se/incl_adapter/multiple_input/your_output.truncated b/validation/se/incl_adapter/multiple_input/your_output.truncated
new file mode 100644
index 0000000..9212607
--- /dev/null
+++ b/validation/se/incl_adapter/multiple_input/your_output.truncated
@@ -0,0 +1,40 @@
+ at read_150_1/1
+CTTGGGTACTCAGCCTTAGGGTACCACATAGAGTTATCTTATATATTATAATTGCTCTTTTAACATAATTTTAAAAAATTTATATTAAACTTTCTCTGTT
++
+HHHFFFFBBDGGGGGHHHHHGGFCDHGEE<@;+ at C792A.CEEGGFFFFDEFGFHHHH@C2;@F;EDDHFDCCC at .DEEEG=BGEDC5>:=2 at GFHHHFF
+ at read_150_2/1
+GAGTGGGCTTCATCCCTGGGATGCAAGGCTGGTTCAATATATGCAAATCAATAAATGTAATCCAGCATATAAACAGAACCAAAGA
++
+HHHHHHHHHHHHHHHHHHHHHHHGC. at CFGHHHHHHHHFBFFHEHHHHFBGHFFFFFFHEDE@EBHHFHB<<>099BEB@=?*59
+ at read_150_3/1
+TATGTAATGACATAACTCTTATGGGCAACTTCACAAAAACACAGAAGAAAGCCCTCCTAAAGAATGAAATTCCAAAAAAAATCAGGTTACTGCTCACTGA
++
+HHE=EE at DBBBGHGBFGGDDDDFFFHHHHHGHHHHHHGHHHE7BFHHHHHHG@4FEHHFHHHHFHHHHHHFFFE?EGCDE>CD:9=>+*;=37::ADDHF
+ at read_150_4/1
+CTCCTATATAAAGATAGCTCTGTAAAACAGGCCAAAAAGCAGAGTGGGGTGTGGGAAGGCAGGGAAAACTGTCCAGGAATAAAGGCATGAAATGAAACA
++
+HHHHHHHHHHHHHHHHEG@:<BBHHHHHHHHFFEE>EEB4DFHHEHFHHHHEGFFEEFCDHEFF:+1;?GFFCFHHHHHHHHHFHBB>>BEDGCDHHHH
+ at read_150_5/1
+TACTCACGGACAAAGAATAAATATAGCTCCTCCAGGAGCTTAATAACTCAGTGCTGTCTAAACTCCTTACACCTGATGTTGATGCCATGGTTAGATAGTT
++
+HHFFGGFDBHHEHHHHHHHHHHHHFHHHHFHHFEEDFD8=GHFFHHDHHHCHHFDHBHD<FHFB?A=FFGGHE.(.8D97GF at 8863BGG<DGFGBCFG=
+ at read_150_6/1
+CAGCTTCATGTAAAAACTGGACAGAAGCATTCTCAGAAAATACTTCGGGACGATTGAGTTCAAATCACAGAGCTGAACATTCCTTTGGGTGGAGCAGTTT
++
+HHHF@><CDHGGEFGFHHHHEDDE8HHHHHGGFGGHHHHHHHGHFFFFIGHHHH::<BEFA2*'/89<.1&8.)&0:<BGFFHHCGGGEEDC at FFD;>:>
+ at read_150_7/1
+TAAGTAAGGTAGACAGCTAAGTCTAGTTTGTTCCCAGTGTTGTACCAGTCTCATCAGTGCCGTGTCTGGGTCTCACAGCCTCTGGTGTTCTATGCTGGAT
++
+GFFEEDHHGHHHHHHHHB?GG77-/:>>@?6AC5GIB?BEBHHHHHHHHHHHHFGFHHHHHHEFEGF9?EHHHE at 8BB<D9=DDFEEDDEC=>12BEHHH
+ at read_150_8/1
+TAAAAACAAAAACCCTGATGAGAGTATTGATGTGTGCATAAACAAAGAAAAACATAATAGGAATAGAATGGTGAATTAAATTTTGTGAATTTTGGAAACC
++
+HGGGGGHHHHHFHHGHHHHHHHEHHHHHHFHHEEHHHHHFE:/CGBHHHHHGFFGHHHHCEHEFECEFHHFEEE<ADBFFFHFCCFDBDFE at AD@=EEEB
+ at read_150_9/1
+AGGGCATATATTTTGTCAAAACAAGTAGAGCCAGGCCTGCTGTCTGTATCAGCCCCACCTAGGCAGGTTTGGGATAAGGGAGGGAGTGAAGAGGGAAGGC
++
+GFBDDGHHHHHHHHGGHHHGHHHCFFHHHHHHHHHFGGEA?FFFGEFBBA@;6BEA at EEEEEHHFEHFDDHHHHFEEGEB(:A:6C=>>CFFFCE?DEBD
+ at read_150_10/1
+TATAGATGAACTCTGATTTAGAATTTGTATAAGCTAAAGCATTATAGTAATAACTTTTAAAGTAGTATTTAAAATATCCTTATCTTACGTATATATGACT
++
+<506 at 6?GHHHHGFHGFCFHHHHHHHHHHFGFF<3 at C43F>AAEEFBFDFFHHHHHHHHED(0DAEBEFC?BFBEHHHHHC at 85@GBGGFDCHEHHFCFB
diff --git a/validation/se/incl_adapter/threads/one/your_output.settings b/validation/se/incl_adapter/threads/one/your_output.settings
index 4e9e9bb..7ad0afc 100644
--- a/validation/se/incl_adapter/threads/one/your_output.settings
+++ b/validation/se/incl_adapter/threads/one/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/se/incl_adapter/threads/three/your_output.settings b/validation/se/incl_adapter/threads/three/your_output.settings
index 4e9e9bb..7ad0afc 100644
--- a/validation/se/incl_adapter/threads/three/your_output.settings
+++ b/validation/se/incl_adapter/threads/three/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/se/incl_adapter/threads/two/your_output.settings b/validation/se/incl_adapter/threads/two/your_output.settings
index 4e9e9bb..7ad0afc 100644
--- a/validation/se/incl_adapter/threads/two/your_output.settings
+++ b/validation/se/incl_adapter/threads/two/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/se/incl_adapter/trimns/excl_ns/your_output.settings b/validation/se/incl_adapter/trimns/excl_ns/your_output.settings
index 2fef2ce..b248df8 100644
--- a/validation/se/incl_adapter/trimns/excl_ns/your_output.settings
+++ b/validation/se/incl_adapter/trimns/excl_ns/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/se/incl_adapter/trimns/incl_ns/your_output.settings b/validation/se/incl_adapter/trimns/incl_ns/your_output.settings
index 362362a..ba7e5f0 100644
--- a/validation/se/incl_adapter/trimns/incl_ns/your_output.settings
+++ b/validation/se/incl_adapter/trimns/incl_ns/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/se/incl_adapter/trimqualities/default/your_output.settings b/validation/se/incl_adapter/trimqualities/default/your_output.settings
index 9a1995c..1610894 100644
--- a/validation/se/incl_adapter/trimqualities/default/your_output.settings
+++ b/validation/se/incl_adapter/trimqualities/default/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: Yes
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/se/incl_adapter/trimqualities/minq36/your_output.settings b/validation/se/incl_adapter/trimqualities/minq36/your_output.settings
index bca4f41..cef7b81 100644
--- a/validation/se/incl_adapter/trimqualities/minq36/your_output.settings
+++ b/validation/se/incl_adapter/trimqualities/minq36/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 36: Yes
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/se/only_adapter/collapse/your_output.settings b/validation/se/only_adapter/collapse/your_output.settings
index b798ef7..7b1db8d 100644
--- a/validation/se/only_adapter/collapse/your_output.settings
+++ b/validation/se/only_adapter/collapse/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: Yes
diff --git a/validation/se/only_adapter/combined_output/discarded/your_output.settings b/validation/se/only_adapter/combined_output/discarded/your_output.settings
index de5135c..b112615 100644
--- a/validation/se/only_adapter/combined_output/discarded/your_output.settings
+++ b/validation/se/only_adapter/combined_output/discarded/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/se/only_adapter/combined_output/retained/your_output.settings b/validation/se/only_adapter/combined_output/retained/your_output.settings
index 1f993f8..82b0d3d 100644
--- a/validation/se/only_adapter/combined_output/retained/your_output.settings
+++ b/validation/se/only_adapter/combined_output/retained/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 0
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/se/only_adapter/crlf_newlines/your_output.settings b/validation/se/only_adapter/crlf_newlines/your_output.settings
index a3d0412..79b936a 100644
--- a/validation/se/only_adapter/crlf_newlines/your_output.settings
+++ b/validation/se/only_adapter/crlf_newlines/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/se/only_adapter/defaults/your_output.settings b/validation/se/only_adapter/defaults/your_output.settings
index a3d0412..79b936a 100644
--- a/validation/se/only_adapter/defaults/your_output.settings
+++ b/validation/se/only_adapter/defaults/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/se/only_adapter/minlength/your_output.settings b/validation/se/only_adapter/minlength/your_output.settings
index 94e7787..4df0843 100644
--- a/validation/se/only_adapter/minlength/your_output.settings
+++ b/validation/se/only_adapter/minlength/your_output.settings
@@ -15,9 +15,10 @@ Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
 Trimming Phred scores <= 2: No
+Trimming using sliding windows: No
 Minimum genomic length: 0
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
diff --git a/validation/trimwindows/pe/excl_n/info.json b/validation/trimwindows/pe/excl_n/info.json
new file mode 100644
index 0000000..924dcf2
--- /dev/null
+++ b/validation/trimwindows/pe/excl_n/info.json
@@ -0,0 +1,6 @@
+{
+	"arguments": ["--trimwindows", "4", "--minquality", "20"],
+	"return_code": 0,
+	"stderr": [
+	]
+}
diff --git a/validation/trimwindows/pe/excl_n/input_1.fastq b/validation/trimwindows/pe/excl_n/input_1.fastq
new file mode 100644
index 0000000..a434f5d
--- /dev/null
+++ b/validation/trimwindows/pe/excl_n/input_1.fastq
@@ -0,0 +1,4 @@
+ at ATAGCCSeq_1_2959_500/1 meta data
+TCCANNTCAACAATAGGGTTTACGACCTCGATGNTGGAT
++
+7555IIIIIJJGJHGJJJGHJJJFGIIIGFC?:75565+
diff --git a/validation/trimwindows/pe/excl_n/input_2.fastq b/validation/trimwindows/pe/excl_n/input_2.fastq
new file mode 100644
index 0000000..41cafec
--- /dev/null
+++ b/validation/trimwindows/pe/excl_n/input_2.fastq
@@ -0,0 +1,4 @@
+ at ATAGCCSeq_1_2959_500/2 data meta
+GTCAGCGAAGGGTTGTAGTA
++
+IGHHFEIIIGFC5675565+
diff --git a/validation/trimwindows/pe/excl_n/your_output.discarded b/validation/trimwindows/pe/excl_n/your_output.discarded
new file mode 100644
index 0000000..76c2d7f
--- /dev/null
+++ b/validation/trimwindows/pe/excl_n/your_output.discarded
@@ -0,0 +1,4 @@
+ at ATAGCCSeq_1_2959_500/2 data meta
+GTCAGCGAAGGG
++
+IGHHFEIIIGFC
diff --git a/validation/trimwindows/pe/excl_n/your_output.pair1.truncated b/validation/trimwindows/pe/excl_n/your_output.pair1.truncated
new file mode 100644
index 0000000..e69de29
diff --git a/validation/trimwindows/pe/excl_n/your_output.pair2.truncated b/validation/trimwindows/pe/excl_n/your_output.pair2.truncated
new file mode 100644
index 0000000..e69de29
diff --git a/validation/pe/incl_adapter/combined_output/interleaved/keep_mate1/your_output.settings b/validation/trimwindows/pe/excl_n/your_output.settings
similarity index 70%
copy from validation/pe/incl_adapter/combined_output/interleaved/keep_mate1/your_output.settings
copy to validation/trimwindows/pe/excl_n/your_output.settings
index 6dfbdb5..93e561b 100644
--- a/validation/pe/incl_adapter/combined_output/interleaved/keep_mate1/your_output.settings
+++ b/validation/trimwindows/pe/excl_n/your_output.settings
@@ -8,17 +8,18 @@ Adapter2[1]: AGATCGGAAGAGCGTCGTGTAGGGAAAGAGTGTAGATCTCGGTGGTCGCCGTATCATT
 
 
 [Adapter trimming]
-RNG seed: 3738807510
+RNG seed: 981230521
 Alignment shift value: 2
 Global mismatch threshold: 0.333333
 Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
-Trimming Ns: Yes
-Trimming Phred scores <= 2: No
-Minimum genomic length: 50
+Mate-number separator (input): '/'
+Trimming Ns: No
+Trimming Phred scores <= 20: Yes
+Trimming using sliding windows: 4
+Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
 Minimum overlap (in case of collapse): 11
@@ -32,10 +33,10 @@ Number of discarded mate 1 reads: 0
 Number of singleton mate 1 reads: 1
 Number of discarded mate 2 reads: 1
 Number of singleton mate 2 reads: 0
-Number of reads with adapters[1]: 2
+Number of reads with adapters[1]: 0
 Number of retained reads: 1
-Number of retained nucleotides: 99
-Average length of retained reads: 99
+Number of retained nucleotides: 30
+Average length of retained reads: 30
 
 
 [Length distribution]
@@ -52,7 +53,7 @@ Length	Mate1	Mate2	Singleton	Discarded	All
 9	0	0	0	0	0
 10	0	0	0	0	0
 11	0	0	0	0	0
-12	0	0	0	0	0
+12	0	0	0	1	1
 13	0	0	0	0	0
 14	0	0	0	0	0
 15	0	0	0	0	0
@@ -70,24 +71,4 @@ Length	Mate1	Mate2	Singleton	Discarded	All
 27	0	0	0	0	0
 28	0	0	0	0	0
 29	0	0	0	0	0
-30	0	0	0	0	0
-31	0	0	0	0	0
-32	0	0	0	0	0
-33	0	0	0	0	0
-34	0	0	0	0	0
-35	0	0	0	0	0
-36	0	0	0	0	0
-37	0	0	0	0	0
-38	0	0	0	0	0
-39	0	0	0	0	0
-40	0	0	0	0	0
-41	0	0	0	0	0
-42	0	0	0	0	0
-43	0	0	0	0	0
-44	0	0	0	0	0
-45	0	0	0	0	0
-46	0	0	0	0	0
-47	0	0	0	0	0
-48	0	0	0	0	0
-49	0	0	0	1	1
-50	0	0	1	0	1
+30	0	0	1	0	1
diff --git a/validation/trimwindows/pe/excl_n/your_output.singleton.truncated b/validation/trimwindows/pe/excl_n/your_output.singleton.truncated
new file mode 100644
index 0000000..6810ef4
--- /dev/null
+++ b/validation/trimwindows/pe/excl_n/your_output.singleton.truncated
@@ -0,0 +1,4 @@
+ at ATAGCCSeq_1_2959_500/1 meta data
+NNTCAACAATAGGGTTTACGACCTCGATGN
++
+IIIIIJJGJHGJJJGHJJJFGIIIGFC?:7
diff --git a/validation/trimwindows/pe/incl_n/info.json b/validation/trimwindows/pe/incl_n/info.json
new file mode 100644
index 0000000..ea7081f
--- /dev/null
+++ b/validation/trimwindows/pe/incl_n/info.json
@@ -0,0 +1,6 @@
+{
+	"arguments": ["--trimwindows", "4", "--minquality", "20", "--trimns"],
+	"return_code": 0,
+	"stderr": [
+	]
+}
diff --git a/validation/trimwindows/pe/incl_n/input_1.fastq b/validation/trimwindows/pe/incl_n/input_1.fastq
new file mode 100644
index 0000000..a434f5d
--- /dev/null
+++ b/validation/trimwindows/pe/incl_n/input_1.fastq
@@ -0,0 +1,4 @@
+ at ATAGCCSeq_1_2959_500/1 meta data
+TCCANNTCAACAATAGGGTTTACGACCTCGATGNTGGAT
++
+7555IIIIIJJGJHGJJJGHJJJFGIIIGFC?:75565+
diff --git a/validation/trimwindows/pe/incl_n/input_2.fastq b/validation/trimwindows/pe/incl_n/input_2.fastq
new file mode 100644
index 0000000..41cafec
--- /dev/null
+++ b/validation/trimwindows/pe/incl_n/input_2.fastq
@@ -0,0 +1,4 @@
+ at ATAGCCSeq_1_2959_500/2 data meta
+GTCAGCGAAGGGTTGTAGTA
++
+IGHHFEIIIGFC5675565+
diff --git a/validation/trimwindows/pe/incl_n/your_output.discarded b/validation/trimwindows/pe/incl_n/your_output.discarded
new file mode 100644
index 0000000..76c2d7f
--- /dev/null
+++ b/validation/trimwindows/pe/incl_n/your_output.discarded
@@ -0,0 +1,4 @@
+ at ATAGCCSeq_1_2959_500/2 data meta
+GTCAGCGAAGGG
++
+IGHHFEIIIGFC
diff --git a/validation/trimwindows/pe/incl_n/your_output.pair1.truncated b/validation/trimwindows/pe/incl_n/your_output.pair1.truncated
new file mode 100644
index 0000000..e69de29
diff --git a/validation/trimwindows/pe/incl_n/your_output.pair2.truncated b/validation/trimwindows/pe/incl_n/your_output.pair2.truncated
new file mode 100644
index 0000000..e69de29
diff --git a/validation/pe/incl_adapter/combined_output/interleaved/keep_mate1/your_output.settings b/validation/trimwindows/pe/incl_n/your_output.settings
similarity index 69%
copy from validation/pe/incl_adapter/combined_output/interleaved/keep_mate1/your_output.settings
copy to validation/trimwindows/pe/incl_n/your_output.settings
index 6dfbdb5..0e8e214 100644
--- a/validation/pe/incl_adapter/combined_output/interleaved/keep_mate1/your_output.settings
+++ b/validation/trimwindows/pe/incl_n/your_output.settings
@@ -8,17 +8,18 @@ Adapter2[1]: AGATCGGAAGAGCGTCGTGTAGGGAAAGAGTGTAGATCTCGGTGGTCGCCGTATCATT
 
 
 [Adapter trimming]
-RNG seed: 3738807510
+RNG seed: 981230521
 Alignment shift value: 2
 Global mismatch threshold: 0.333333
 Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
-Trimming Phred scores <= 2: No
-Minimum genomic length: 50
+Trimming Phred scores <= 20: Yes
+Trimming using sliding windows: 4
+Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
 Minimum overlap (in case of collapse): 11
@@ -32,10 +33,10 @@ Number of discarded mate 1 reads: 0
 Number of singleton mate 1 reads: 1
 Number of discarded mate 2 reads: 1
 Number of singleton mate 2 reads: 0
-Number of reads with adapters[1]: 2
+Number of reads with adapters[1]: 0
 Number of retained reads: 1
-Number of retained nucleotides: 99
-Average length of retained reads: 99
+Number of retained nucleotides: 27
+Average length of retained reads: 27
 
 
 [Length distribution]
@@ -52,7 +53,7 @@ Length	Mate1	Mate2	Singleton	Discarded	All
 9	0	0	0	0	0
 10	0	0	0	0	0
 11	0	0	0	0	0
-12	0	0	0	0	0
+12	0	0	0	1	1
 13	0	0	0	0	0
 14	0	0	0	0	0
 15	0	0	0	0	0
@@ -67,27 +68,4 @@ Length	Mate1	Mate2	Singleton	Discarded	All
 24	0	0	0	0	0
 25	0	0	0	0	0
 26	0	0	0	0	0
-27	0	0	0	0	0
-28	0	0	0	0	0
-29	0	0	0	0	0
-30	0	0	0	0	0
-31	0	0	0	0	0
-32	0	0	0	0	0
-33	0	0	0	0	0
-34	0	0	0	0	0
-35	0	0	0	0	0
-36	0	0	0	0	0
-37	0	0	0	0	0
-38	0	0	0	0	0
-39	0	0	0	0	0
-40	0	0	0	0	0
-41	0	0	0	0	0
-42	0	0	0	0	0
-43	0	0	0	0	0
-44	0	0	0	0	0
-45	0	0	0	0	0
-46	0	0	0	0	0
-47	0	0	0	0	0
-48	0	0	0	0	0
-49	0	0	0	1	1
-50	0	0	1	0	1
+27	0	0	1	0	1
diff --git a/validation/trimwindows/pe/incl_n/your_output.singleton.truncated b/validation/trimwindows/pe/incl_n/your_output.singleton.truncated
new file mode 100644
index 0000000..6fe9de6
--- /dev/null
+++ b/validation/trimwindows/pe/incl_n/your_output.singleton.truncated
@@ -0,0 +1,4 @@
+ at ATAGCCSeq_1_2959_500/1 meta data
+TCAACAATAGGGTTTACGACCTCGATG
++
+IIIJJGJHGJJJGHJJJFGIIIGFC?:
diff --git a/validation/trimwindows/se/excl_n/info.json b/validation/trimwindows/se/excl_n/info.json
new file mode 100644
index 0000000..924dcf2
--- /dev/null
+++ b/validation/trimwindows/se/excl_n/info.json
@@ -0,0 +1,6 @@
+{
+	"arguments": ["--trimwindows", "4", "--minquality", "20"],
+	"return_code": 0,
+	"stderr": [
+	]
+}
diff --git a/validation/trimwindows/se/excl_n/input_1.fastq b/validation/trimwindows/se/excl_n/input_1.fastq
new file mode 100644
index 0000000..a434f5d
--- /dev/null
+++ b/validation/trimwindows/se/excl_n/input_1.fastq
@@ -0,0 +1,4 @@
+ at ATAGCCSeq_1_2959_500/1 meta data
+TCCANNTCAACAATAGGGTTTACGACCTCGATGNTGGAT
++
+7555IIIIIJJGJHGJJJGHJJJFGIIIGFC?:75565+
diff --git a/validation/trimwindows/se/excl_n/your_output.discarded b/validation/trimwindows/se/excl_n/your_output.discarded
new file mode 100644
index 0000000..e69de29
diff --git a/validation/se/incl_adapter/trimqualities/minq36/your_output.settings b/validation/trimwindows/se/excl_n/your_output.settings
similarity index 72%
copy from validation/se/incl_adapter/trimqualities/minq36/your_output.settings
copy to validation/trimwindows/se/excl_n/your_output.settings
index bca4f41..c704081 100644
--- a/validation/se/incl_adapter/trimqualities/minq36/your_output.settings
+++ b/validation/trimwindows/se/excl_n/your_output.settings
@@ -8,16 +8,17 @@ Adapter2[1]: AGATCGGAAGAGCGTCGTGTAGGGAAAGAGTGTAGATCTCGGTGGTCGCCGTATCATT
 
 
 [Adapter trimming]
-RNG seed: 2816594278
+RNG seed: 3702281079
 Alignment shift value: 2
 Global mismatch threshold: 0.333333
 Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: No
-Trimming Phred scores <= 36: Yes
+Trimming Phred scores <= 20: Yes
+Trimming using sliding windows: 4
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
@@ -27,14 +28,14 @@ Minimum adapter overlap: 0
 
 [Trimming statistics]
 Total number of reads: 1
-Number of unaligned reads: 0
-Number of well aligned reads: 1
+Number of unaligned reads: 1
+Number of well aligned reads: 0
 Number of discarded mate 1 reads: 0
 Number of singleton mate 1 reads: 1
-Number of reads with adapters[1]: 1
+Number of reads with adapters[1]: 0
 Number of retained reads: 1
-Number of retained nucleotides: 45
-Average length of retained reads: 45
+Number of retained nucleotides: 30
+Average length of retained reads: 30
 
 
 [Length distribution]
@@ -69,19 +70,4 @@ Length	Mate1	Discarded	All
 27	0	0	0
 28	0	0	0
 29	0	0	0
-30	0	0	0
-31	0	0	0
-32	0	0	0
-33	0	0	0
-34	0	0	0
-35	0	0	0
-36	0	0	0
-37	0	0	0
-38	0	0	0
-39	0	0	0
-40	0	0	0
-41	0	0	0
-42	0	0	0
-43	0	0	0
-44	0	0	0
-45	1	0	1
+30	1	0	1
diff --git a/validation/trimwindows/se/excl_n/your_output.truncated b/validation/trimwindows/se/excl_n/your_output.truncated
new file mode 100644
index 0000000..6810ef4
--- /dev/null
+++ b/validation/trimwindows/se/excl_n/your_output.truncated
@@ -0,0 +1,4 @@
+ at ATAGCCSeq_1_2959_500/1 meta data
+NNTCAACAATAGGGTTTACGACCTCGATGN
++
+IIIIIJJGJHGJJJGHJJJFGIIIGFC?:7
diff --git a/validation/trimwindows/se/incl_n/info.json b/validation/trimwindows/se/incl_n/info.json
new file mode 100644
index 0000000..ea7081f
--- /dev/null
+++ b/validation/trimwindows/se/incl_n/info.json
@@ -0,0 +1,6 @@
+{
+	"arguments": ["--trimwindows", "4", "--minquality", "20", "--trimns"],
+	"return_code": 0,
+	"stderr": [
+	]
+}
diff --git a/validation/trimwindows/se/incl_n/input_1.fastq b/validation/trimwindows/se/incl_n/input_1.fastq
new file mode 100644
index 0000000..a434f5d
--- /dev/null
+++ b/validation/trimwindows/se/incl_n/input_1.fastq
@@ -0,0 +1,4 @@
+ at ATAGCCSeq_1_2959_500/1 meta data
+TCCANNTCAACAATAGGGTTTACGACCTCGATGNTGGAT
++
+7555IIIIIJJGJHGJJJGHJJJFGIIIGFC?:75565+
diff --git a/validation/trimwindows/se/incl_n/your_output.discarded b/validation/trimwindows/se/incl_n/your_output.discarded
new file mode 100644
index 0000000..e69de29
diff --git a/validation/se/incl_adapter/trimns/incl_ns/your_output.settings b/validation/trimwindows/se/incl_n/your_output.settings
similarity index 71%
copy from validation/se/incl_adapter/trimns/incl_ns/your_output.settings
copy to validation/trimwindows/se/incl_n/your_output.settings
index 362362a..6123e8e 100644
--- a/validation/se/incl_adapter/trimns/incl_ns/your_output.settings
+++ b/validation/trimwindows/se/incl_n/your_output.settings
@@ -8,16 +8,17 @@ Adapter2[1]: AGATCGGAAGAGCGTCGTGTAGGGAAAGAGTGTAGATCTCGGTGGTCGCCGTATCATT
 
 
 [Adapter trimming]
-RNG seed: 2566824554
+RNG seed: 3702281079
 Alignment shift value: 2
 Global mismatch threshold: 0.333333
 Quality format (input): Phred+33
 Quality score max (input): 41
 Quality format (output): Phred+33
 Quality score max (output): 41
-Mate-number seperator (input): '/'
+Mate-number separator (input): '/'
 Trimming Ns: Yes
-Trimming Phred scores <= 2: No
+Trimming Phred scores <= 20: Yes
+Trimming using sliding windows: 4
 Minimum genomic length: 15
 Maximum genomic length: 4294967295
 Collapse overlapping reads: No
@@ -27,14 +28,14 @@ Minimum adapter overlap: 0
 
 [Trimming statistics]
 Total number of reads: 1
-Number of unaligned reads: 0
-Number of well aligned reads: 1
+Number of unaligned reads: 1
+Number of well aligned reads: 0
 Number of discarded mate 1 reads: 0
 Number of singleton mate 1 reads: 1
-Number of reads with adapters[1]: 1
+Number of reads with adapters[1]: 0
 Number of retained reads: 1
-Number of retained nucleotides: 44
-Average length of retained reads: 44
+Number of retained nucleotides: 27
+Average length of retained reads: 27
 
 
 [Length distribution]
@@ -66,21 +67,4 @@ Length	Mate1	Discarded	All
 24	0	0	0
 25	0	0	0
 26	0	0	0
-27	0	0	0
-28	0	0	0
-29	0	0	0
-30	0	0	0
-31	0	0	0
-32	0	0	0
-33	0	0	0
-34	0	0	0
-35	0	0	0
-36	0	0	0
-37	0	0	0
-38	0	0	0
-39	0	0	0
-40	0	0	0
-41	0	0	0
-42	0	0	0
-43	0	0	0
-44	1	0	1
+27	1	0	1
diff --git a/validation/trimwindows/se/incl_n/your_output.truncated b/validation/trimwindows/se/incl_n/your_output.truncated
new file mode 100644
index 0000000..6fe9de6
--- /dev/null
+++ b/validation/trimwindows/se/incl_n/your_output.truncated
@@ -0,0 +1,4 @@
+ at ATAGCCSeq_1_2959_500/1 meta data
+TCAACAATAGGGTTTACGACCTCGATG
++
+IIIJJGJHGJJJGHJJJFGIIIGFC?:

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/adapterremoval.git



More information about the debian-med-commit mailing list