[med-svn] [genometools] 01/03: Imported Upstream version 1.5.9+ds

Sascha Steinbiss satta at debian.org
Fri Jul 22 11:13:20 UTC 2016


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

satta pushed a commit to branch master
in repository genometools.

commit a84e526c9344384e59878f3d37c7cb4205fc5eef
Author: Sascha Steinbiss <satta at debian.org>
Date:   Fri Jul 22 10:49:42 2016 +0000

    Imported Upstream version 1.5.9+ds
---
 .github/ISSUE_TEMPLATE.md                          |   19 +
 .github/PULL_REQUEST_TEMPLATE.md                   |   12 +
 .gitignore                                         |    1 +
 CHANGELOG                                          |   16 +
 INSTALL                                            |   25 +-
 LICENSE                                            |   33 +-
 Makefile                                           |  425 ++--
 VERSION                                            |    2 +-
 doc/devguide/devguide.tex                          |   27 +-
 doc/manuals/annotationsketch.tex                   |    6 +
 doc/manuals/genomediff.tex                         |    1 +
 doc/manuals/hop.tex                                |    1 +
 doc/manuals/ltrdigest.tex                          |    1 +
 doc/manuals/ltrharvest.tex                         |    1 +
 doc/manuals/mgth.tex                               |    1 +
 doc/manuals/packedindex.tex                        |    1 +
 doc/manuals/readjoiner.tex                         |    1 +
 doc/manuals/repfind.tex                            |    1 +
 doc/manuals/tagerator.tex                          |    1 +
 doc/manuals/tallymer.tex                           |    1 +
 doc/manuals/uniquesub.tex                          |    1 +
 gtdata/doc/extractseq.lua                          |    2 +-
 gtdata/doc/fingerprint.lua                         |    2 +-
 gtdata/modules/external/des56.lua                  |    1 +
 gtdata/modules/external/md5.lua                    |   21 +-
 gtdata/modules/gtdoclib/class_latex.lp             |    4 +-
 gtdata/modules/gtdoclib/classes_latex.lp           |    3 +-
 gtdata/modules/gtdoclib/docvisitorlatex.lua        |   31 +-
 gtdata/modules/gtdoclib/footer.lp                  |    2 +-
 .../gtdoclib/libgenometools_header_latex.lp        |    3 +-
 gtdata/modules/gtdoclib/method_latex.lp            |    5 +-
 gtdata/modules/gtdoclib/module_latex.lp            |    2 +-
 gtdata/modules/gtdoclib/modules_latex.lp           |    1 +
 gtdata/modules/gtdoclib/sole_function_latex.lp     |    3 +-
 gtdata/spec/output_drivers/tabular                 |   72 +
 gtdata/spec/speclib.lua                            |   14 +
 gtpython/tests/test_version.py                     |    4 +-
 gtscripts/gtdoc.lua                                |   16 +-
 scripts/collect-mappings.rb                        |   26 +
 scripts/coverage-MEM.rb                            |   97 +
 scripts/esq-in-bytes.sh                            |    5 +-
 scripts/gen-intsets.rb                             |   28 +-
 scripts/gen-randseq.rb                             |   42 +-
 scripts/sim-read-mapping.sh                        |   87 +
 src/core/compact_ulong_store.h                     |    2 +-
 src/core/encseq.c                                  |   13 +-
 src/core/encseq_col.c                              |   26 +-
 src/core/error_api.h                               |    2 +-
 src/core/fa.h                                      |    2 +-
 src/core/grep.c                                    |    2 +-
 src/core/hashtable.h                               |    4 +-
 src/core/intbits.h                                 |    2 +-
 src/core/option_api.h                              |    4 +-
 src/core/seq_iterator_api.h                        |    2 +-
 src/extended/affinealign.c                         |  147 +-
 src/extended/affinealign.h                         |   81 +-
 src/extended/alignment.c                           |   63 +-
 src/extended/cds_check_visitor.c                   |   29 +-
 src/extended/compressed_bitsequence.c              |    6 +-
 src/extended/compressed_bitsequence.h              |    6 +-
 src/extended/condenseq.c                           |   26 +-
 src/extended/condenseq.h                           |   15 +-
 src/extended/condenseq_creator.c                   |    6 +-
 src/extended/condenseq_rep.h                       |   34 +-
 src/extended/diagonalbandalign.c                   |  237 +--
 src/extended/diagonalbandalign.h                   |   85 +-
 src/extended/diagonalbandalign_affinegapcost.c     |  416 ++--
 src/extended/diagonalbandalign_affinegapcost.h     |   94 +-
 src/extended/editscript.c                          |  150 +-
 src/extended/elias_gamma.h                         |    2 +-
 src/extended/encdesc.c                             |   14 +-
 src/extended/encdesc.h                             |   17 +-
 src/extended/golomb.c                              |    4 +-
 src/extended/golomb.h                              |   12 +-
 src/extended/hcr.c                                 |   15 +-
 src/extended/hcr.h                                 |   17 +-
 src/extended/huffcode.h                            |   73 +-
 src/extended/intset_16.c                           |   28 +-
 src/extended/intset_16.h                           |    4 +-
 src/extended/intset_32.c                           |   28 +-
 src/extended/intset_32.h                           |    4 +-
 src/extended/intset_8.c                            |   28 +-
 src/extended/intset_8.h                            |    4 +-
 src/extended/linearalign.c                         |  266 +--
 src/extended/linearalign.h                         |  101 +-
 src/extended/linearalign_affinegapcost.c           |  341 ++--
 src/extended/linearalign_affinegapcost.h           |  123 +-
 src/extended/linspace_management.c                 |  101 +-
 src/extended/linspace_management.h                 |   83 +-
 src/extended/maxcoordvalue.c                       |   73 +-
 src/extended/maxcoordvalue.h                       |   42 +-
 src/extended/node_stream_api.h                     |    2 +-
 src/extended/popcount_tab.h                        |   14 +-
 src/extended/rcr.c                                 |   33 +-
 src/extended/rcr.h                                 |    2 +-
 src/extended/reconstructalignment.c                |   93 +-
 src/extended/reconstructalignment.h                |   87 +-
 src/extended/sam_alignment.c                       |    2 +-
 src/extended/sam_alignment_rep.h                   |    2 +-
 src/extended/samfile_iterator.c                    |    2 +-
 src/extended/scorehandler.c                        |    2 +-
 src/extended/scorehandler.h                        |   31 +-
 src/extended/spec_results.c                        |   21 +-
 src/extended/spec_results.h                        |    3 +
 src/extended/squarealign.c                         |  183 +-
 src/extended/squarealign.h                         |   83 +-
 src/extended/type_node.c                           |    2 +-
 src/gth/align_protein.c                            |    2 +-
 src/gth/intermediate.c                             |    4 +-
 src/gth/parse_options.c                            |    2 +-
 src/gtlua/region_mapping_lua.c                     |  117 +-
 src/gtlua/region_mapping_lua.h                     |   18 +
 src/gtr.c                                          |    8 +-
 src/interactive.c                                  |    3 +-
 src/ltr/ltrdigest_file_out_stream.c                |    6 +-
 src/match/declare-readfunc.h                       |   61 +
 src/match/diagbandseed.c                           | 2052 +++++++++++++-------
 src/match/diagbandseed.h                           |   84 +-
 src/match/eis-encidxseq-construct.h                |    2 +-
 src/match/eis-encidxseq.c                          |    2 +-
 src/match/eis-encidxseq.h                          |    4 +-
 src/match/esa-mmsearch.c                           |   10 +-
 src/match/querymatch-align.c                       |   26 +-
 src/match/querymatch-align.h                       |    7 +-
 src/match/querymatch.c                             |  228 ++-
 src/match/querymatch.h                             |   21 +-
 src/match/rdj-filesuf-def.h                        |    1 +
 src/match/rdj-strgraph.c                           |  290 ++-
 src/match/rdj-strgraph.h                           |   13 +
 src/match/sarr-def.h                               |   37 +-
 src/match/seed-extend-iter.c                       |   25 +-
 src/match/seed-extend-iter.h                       |   12 +-
 src/match/seed-extend.c                            |   35 +-
 src/match/seed-extend.h                            |   15 +-
 src/match/seqabstract.c                            |   11 +
 src/match/seqabstract.h                            |    3 +
 src/match/sfx-suffixer.c                           |  232 ++-
 src/match/sfx-suffixer.h                           |   17 +
 src/tools/gt_compreads_decompress.c                |    2 +-
 src/tools/gt_condenseq_compress.c                  |    2 +-
 src/tools/gt_encseq_sample.c                       |    2 +-
 src/tools/gt_encseq_sample.h                       |    2 +-
 src/tools/gt_fastq_sample.c                        |    2 +-
 src/tools/gt_fastq_sample.h                        |    2 +-
 src/tools/gt_kmer_database.c                       |    2 +-
 src/tools/gt_linspace_align.c                      |   22 +-
 src/tools/gt_paircmp.c                             |   20 +-
 src/tools/gt_readjoiner_assembly.c                 |    2 +-
 src/tools/gt_readjoiner_graph.c                    |   95 +-
 src/tools/gt_repfind.c                             |   49 +-
 src/tools/gt_seed_extend.c                         |  607 +++---
 src/tools/gt_seed_extend.h                         |    4 +-
 src/tools/gt_seq.c                                 |  183 +-
 src/tools/gt_seqorder.c                            |  113 +-
 src/tools/gt_show_seedext.c                        |   56 +-
 src/tools/gt_show_seedext.h                        |    2 +-
 src/tools/gt_speck.c                               |   12 +-
 testdata/gt_encseq_col_test1.fasta                 |  428 ++++
 testdata/gt_gff3_phases1.gff3                      |    8 +
 testdata/gt_gff3_phases1.out                       |    9 +
 testdata/gt_gff3_phases2.gff3                      |    8 +
 testdata/gt_gff3_phases3.gff3                      |   24 +
 testdata/gt_gff3_phases3.out                       |   26 +
 testdata/gt_gff3_phases4.gff3                      |   10 +
 testdata/gt_gff3_phases5.gff3                      |   10 +
 testdata/gt_gff3_phases6.gff3                      |   10 +
 testdata/gt_gff3_phases7.gff3                      |   10 +
 testdata/gt_seqorder_test_sorthdr.fas              |   34 +
 testdata/seedextend2.out.gz                        |  Bin 233341 -> 233171 bytes
 testsuite/gt_chain2dim_include.rb                  |    4 +-
 testsuite/gt_extractseq_include.rb                 |    6 +-
 testsuite/gt_gff3_include.rb                       |   30 +
 testsuite/gt_ltrdigest_include.rb                  |   12 +
 testsuite/gt_mergeesa_include.rb                   |    6 +-
 testsuite/gt_repfind_include.rb                    |   68 +-
 testsuite/gt_scripts_include.rb                    |    2 +-
 testsuite/gt_seed_extend_include.rb                |  248 ++-
 testsuite/gt_seqorder_include.rb                   |   20 +
 testsuite/gt_suffixerator_include.rb               |    2 +-
 testsuite/gt_tallymer_include.rb                   |    4 +-
 testsuite/testsuite.rb                             |    6 +-
 www/genometools.org/htdocs/docs.html               |   13 +-
 www/genometools.org/htdocs/libgenometools.html     |   10 +-
 www/genometools.org/htdocs/license.html            |    6 +-
 www/genometools.org/htdocs/tool.conf               |    2 +-
 www/genometools.org/htdocs/tool_list.conf          |    2 +-
 www/genometools.org/htdocs/tools.html              |    2 +-
 www/genometools.org/htdocs/tools/gt.html           |    2 +-
 .../htdocs/tools/gt_bed_to_gff3.html               |    2 +-
 www/genometools.org/htdocs/tools/gt_cds.html       |    2 +-
 www/genometools.org/htdocs/tools/gt_chain2dim.html |    2 +-
 www/genometools.org/htdocs/tools/gt_chseqids.html  |    2 +-
 www/genometools.org/htdocs/tools/gt_clean.html     |    2 +-
 www/genometools.org/htdocs/tools/gt_compreads.html |    2 +-
 .../htdocs/tools/gt_compreads_compress.html        |    2 +-
 .../htdocs/tools/gt_compreads_decompress.html      |    4 +-
 .../htdocs/tools/gt_compreads_refcompress.html     |    2 +-
 .../htdocs/tools/gt_compreads_refdecompress.html   |    2 +-
 www/genometools.org/htdocs/tools/gt_condenseq.html |    2 +-
 .../htdocs/tools/gt_congruence.html                |    2 +-
 .../htdocs/tools/gt_congruence_spacedseed.html     |    2 +-
 .../htdocs/tools/gt_convertseq.html                |    2 +-
 www/genometools.org/htdocs/tools/gt_csa.html       |    2 +-
 www/genometools.org/htdocs/tools/gt_dot.html       |    2 +-
 www/genometools.org/htdocs/tools/gt_dupfeat.html   |    2 +-
 www/genometools.org/htdocs/tools/gt_encseq.html    |    2 +-
 .../htdocs/tools/gt_encseq2spm.html                |    2 +-
 .../htdocs/tools/gt_encseq_bench.html              |    2 +-
 .../htdocs/tools/gt_encseq_bitextract.html         |    2 +-
 .../htdocs/tools/gt_encseq_check.html              |    2 +-
 .../htdocs/tools/gt_encseq_decode.html             |    2 +-
 .../htdocs/tools/gt_encseq_encode.html             |    2 +-
 .../htdocs/tools/gt_encseq_info.html               |    2 +-
 .../htdocs/tools/gt_encseq_md5.html                |    2 +-
 .../htdocs/tools/gt_encseq_sample.html             |    2 +-
 www/genometools.org/htdocs/tools/gt_eval.html      |    2 +-
 .../htdocs/tools/gt_extractfeat.html               |    2 +-
 .../htdocs/tools/gt_extractseq.html                |    4 +-
 .../htdocs/tools/gt_fastq_sample.html              |    2 +-
 .../htdocs/tools/gt_featureindex.html              |    2 +-
 .../htdocs/tools/gt_fingerprint.html               |    4 +-
 .../htdocs/tools/gt_genomediff.html                |    2 +-
 www/genometools.org/htdocs/tools/gt_gff3.html      |    2 +-
 .../htdocs/tools/gt_gff3_to_gtf.html               |    2 +-
 .../htdocs/tools/gt_gff3validator.html             |    2 +-
 .../htdocs/tools/gt_gtf_to_gff3.html               |    2 +-
 www/genometools.org/htdocs/tools/gt_hop.html       |    2 +-
 www/genometools.org/htdocs/tools/gt_id_to_md5.html |    2 +-
 .../htdocs/tools/gt_inlineseq_add.html             |    2 +-
 .../htdocs/tools/gt_inlineseq_split.html           |    2 +-
 www/genometools.org/htdocs/tools/gt_interfeat.html |    2 +-
 www/genometools.org/htdocs/tools/gt_loccheck.html  |    2 +-
 .../htdocs/tools/gt_ltrclustering.html             |    2 +-
 www/genometools.org/htdocs/tools/gt_ltrdigest.html |    2 +-
 .../htdocs/tools/gt_ltrharvest.html                |    2 +-
 www/genometools.org/htdocs/tools/gt_matchtool.html |    2 +-
 www/genometools.org/htdocs/tools/gt_matstat.html   |    2 +-
 www/genometools.org/htdocs/tools/gt_md5_to_id.html |    2 +-
 www/genometools.org/htdocs/tools/gt_merge.html     |    2 +-
 www/genometools.org/htdocs/tools/gt_mergefeat.html |    2 +-
 .../htdocs/tools/gt_mkfeatureindex.html            |    2 +-
 .../htdocs/tools/gt_mmapandread.html               |    2 +-
 www/genometools.org/htdocs/tools/gt_orffinder.html |    2 +-
 .../htdocs/tools/gt_packedindex.html               |    2 +-
 www/genometools.org/htdocs/tools/gt_prebwt.html    |    2 +-
 .../htdocs/tools/gt_readjoiner.html                |    2 +-
 .../htdocs/tools/gt_readjoiner_assembly.html       |    2 +-
 .../htdocs/tools/gt_readjoiner_overlap.html        |    2 +-
 .../htdocs/tools/gt_readjoiner_prefilter.html      |    2 +-
 www/genometools.org/htdocs/tools/gt_repfind.html   |    2 +-
 .../htdocs/tools/gt_scriptfilter.html              |    2 +-
 .../tools/{gt_repfind.html => gt_seed_extend.html} |   86 +-
 www/genometools.org/htdocs/tools/gt_select.html    |    2 +-
 www/genometools.org/htdocs/tools/gt_seq.html       |   28 +-
 www/genometools.org/htdocs/tools/gt_seqfilter.html |    2 +-
 www/genometools.org/htdocs/tools/gt_seqids.html    |    2 +-
 www/genometools.org/htdocs/tools/gt_seqmutate.html |    2 +-
 www/genometools.org/htdocs/tools/gt_seqorder.html  |   20 +-
 www/genometools.org/htdocs/tools/gt_seqstat.html   |    2 +-
 .../htdocs/tools/gt_seqtransform.html              |    2 +-
 .../htdocs/tools/gt_seqtranslate.html              |    2 +-
 www/genometools.org/htdocs/tools/gt_sequniq.html   |    2 +-
 www/genometools.org/htdocs/tools/gt_shredder.html  |    2 +-
 .../htdocs/tools/gt_shulengthdist.html             |    2 +-
 www/genometools.org/htdocs/tools/gt_simreads.html  |    2 +-
 www/genometools.org/htdocs/tools/gt_sketch.html    |    2 +-
 .../htdocs/tools/gt_sketch_page.html               |    2 +-
 www/genometools.org/htdocs/tools/gt_snpper.html    |    2 +-
 www/genometools.org/htdocs/tools/gt_speck.html     |    4 +-
 .../htdocs/tools/gt_splicesiteinfo.html            |    2 +-
 .../htdocs/tools/gt_splitfasta.html                |    2 +-
 www/genometools.org/htdocs/tools/gt_stat.html      |    2 +-
 www/genometools.org/htdocs/tools/gt_tagerator.html |    2 +-
 www/genometools.org/htdocs/tools/gt_tallymer.html  |    2 +-
 .../htdocs/tools/gt_tallymer_mkindex.html          |    2 +-
 .../htdocs/tools/gt_tallymer_occratio.html         |    2 +-
 .../htdocs/tools/gt_tallymer_search.html           |    2 +-
 www/genometools.org/htdocs/tools/gt_tirvish.html   |    2 +-
 www/genometools.org/htdocs/tools/gt_uniq.html      |    2 +-
 www/genometools.org/htdocs/tools/gt_uniquesub.html |    2 +-
 www/genometools.org/htdocs/tools/gt_wtree.html     |    2 +-
 281 files changed, 6847 insertions(+), 3468 deletions(-)

diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 0000000..0872faf
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,19 @@
+## Problem description
+
+
+## Exact command line call triggering the problem
+
+```
+gt ...
+```
+
+## Example minimal input triggering the problem
+
+
+## What GenomeTools version are you reporting an issue for (as output by `gt -version`)?
+
+
+## Did you compile GenomeTools from source? If so, please state the `make` parameters used.
+
+
+## What operating system (e.g. Ubuntu, Mac OS X), OS version (e.g. 15.10, 10.11) and platform (e.g. x86_64) are you using?
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 0000000..6325954
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,12 @@
+## Brief summary
+
+This PR introduces the following changes:
+
+  - ...
+  - ...
+  - ...
+
+## Related issues
+
+Fixes #...
+Adresses #... by ...
diff --git a/.gitignore b/.gitignore
index 20bea79..37e6489 100644
--- a/.gitignore
+++ b/.gitignore
@@ -85,3 +85,4 @@ src/external/hmmer-2.3.2/src/config.h
 tags
 testdata/genomediff
 gtpython/build
+*.kmer
diff --git a/CHANGELOG b/CHANGELOG
index 1dd94f7..7d7edb9 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,19 @@
+changes in version 1.5.9 (2016-07-XX)
+
+- bugfixes and cleanups
+- update MD5 module to upstream version 1.2
+- set verbatim dates in documentation files
+- add support for GCC 6
+- gtlua: complete GtRegionMapping bindings
+- extend wording options for speck matchers
+- add tabular output format for speck
+- make unit tests compatible with Python 2.6
+- improvements on `gt seed_extend'
+- improve compatibility with Ruby <1.9.2
+- several changes to build system (verbosity etc.)
+- allow to sort sequences by header (`gt seqorder')
+
+
 changes in version 1.5.8 (2016-01-06)
 
 - bugfixes and cleanups
diff --git a/INSTALL b/INSTALL
index ab03546..d877b5e 100644
--- a/INSTALL
+++ b/INSTALL
@@ -22,6 +22,9 @@ Possible arguments:
 - cairo=no         to disable AnnotationSketch, dropping Cairo/Pango deps
 - errorcheck=no    to disable the handling of compiler warnings as errors
 - universal=yes    to build a universal binary
+- useshared=yes    to use the system's shared libraries
+- verbose=yes      to make the build more verbose
+
 
 Example call to build GenomeTools without assertions on a system where GNU make
 is called ``gmake'':
@@ -65,8 +68,8 @@ $ brew install pango
 To start the build process, invoke make as stated above.
 
 
-Building GenomeTools as a Universal Binary (on Mac OS X < v10.6):
------------------------------------------------------------------
+Building GenomeTools as a Universal Binary (on PPC systems with Mac OS X < v10.6):
+----------------------------------------------------------------------------------
 
 Invoke make as above with the argument universal=yes.
 Note that on later Mac OS X systems (those with an Intel CPU) the universal=yes
@@ -84,6 +87,24 @@ this warning, please append the errorcheck=no option to your make call. All
 other options given in this file can still be used.
 
 
+Building GenomeTools using external shared libraries:
+-----------------------------------------------------
+
+The GenomeTools source distribution comes with the source code for some of the
+external software it uses internally. This makes it easier to build a stand-alone
+version of GenomeTools on a system that does not have these installed system-wide.
+Another approach is to use the system provided copies of these libraries. This
+makes any updates to these libraries, e.g. fixing bugs and security issues,
+immediately available to GenomeTools without the need to recompile. For packaging
+GenomeTools into distributions and pipeline containers, this should be the
+preferred option.
+Use the 'useshared=yes' make option to ignore the embedded code copies in the
+GenomeTools source distribution and to use the system-wide versions. The following
+libraries (and their development headers) are required to be present:
+zlib, bzlib2, liblua5.1, lua-filesystem, lua-lpeg, lua-md5, libexpat, libtre,
+libcairo + libpango (only unless 'cairo=no' is used), libsqlite3 and libbam.
+
+
 Testing GenomeTools (optional)
 ------------------------------
 
diff --git a/LICENSE b/LICENSE
index a656f53..6b5794f 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,5 +1,5 @@
 All code of GenomeTools except src/core/msort.[ch], src/core/yarandom.[ch],
-and src/external/* is released under the following ICS license.
+and src/external/* is released under the following ISC license.
 It is functionally equivalent to a two-term BSD copyright with
 language removed that is made unnecessary by the Berne convention.
 See http://openbsd.org/policy.html for more information on copyrights.
@@ -103,9 +103,8 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 --------------------------------------------------------------------------------
 
 The source in src/external/lua-5.1.4/*, src/external/cgilua-5.1.3/*,
-src/external/luafilesystem-1.5.0/*, src/external/lpeg-0.10.2/*, and
-src/external/md5-1.1.2/src/* (except des56.[ch]) is covered by the following
-license:
+src/external/luafilesystem-1.5.0/* and src/external/lpeg-0.10.2/* is covered by
+the following license:
 
 Copyright (C) 1994-2008 Lua.org, PUC-Rio.
 
@@ -129,7 +128,31 @@ THE SOFTWARE.
 
 --------------------------------------------------------------------------------
 
-The source src/external/md5-1.1.2/src/des56.[ch] is covered by the following
+The source in src/external/md5-1.2/src/* (except des56.[ch]) is covered by the
+following license:
+
+Copyright © 2003-2013 PUC-Rio. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+--------------------------------------------------------------------------------
+The source in src/external/md5-1.2/src/des56.[ch] is covered by the following
 license:
 
 Copyright (C) 1988 Stuart Levy
diff --git a/Makefile b/Makefile
index c3879f8..cebc9e1 100644
--- a/Makefile
+++ b/Makefile
@@ -16,17 +16,7 @@
 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #
 
-INCLUDEOPT:=-I$(CURDIR)/src -I$(CURDIR)/obj \
-            -I$(CURDIR)/src/external/zlib-1.2.8 \
-            -I$(CURDIR)/src/external/md5-1.1.2/src \
-            -I$(CURDIR)/src/external/lua-5.1.5/src \
-            -I$(CURDIR)/src/external/luafilesystem-1.5.0/src \
-            -I$(CURDIR)/src/external/lpeg-0.10.2 \
-            -I$(CURDIR)/src/external/expat-2.0.1/lib \
-            -I$(CURDIR)/src/external/bzip2-1.0.6 \
-            -I$(CURDIR)/src/external/samtools-0.1.18 \
-            -I$(CURDIR)/src/external/sqlite-3.8.7.1 \
-            -I$(CURDIR)/src/external/tre/include/tre
+INCLUDEOPT:=-I$(CURDIR)/src -I$(CURDIR)/obj
 
 ifeq ($(shell pkg-config --version > /dev/null 2> /dev/null; echo $$?),0)
   HAS_PKGCONFIG:=yes
@@ -37,6 +27,48 @@ else
   HAS_PKGCONFIG:=no
 endif
 
+# add necessary shared lib dependencies instead of building them ourselves
+ifeq ($(useshared),yes)
+  ifeq ($(HAS_PKGCONFIG),yes)
+    DEPLIBS:=-lbz2 \
+             $(shell $(OVERRIDE_PC_PATH) pkg-config --libs zlib) \
+             $(shell $(OVERRIDE_PC_PATH) pkg-config --libs expat) \
+             $(shell $(OVERRIDE_PC_PATH) pkg-config --libs lua-5.1) \
+             $(shell $(OVERRIDE_PC_PATH) pkg-config --libs lua5.1-lpeg) \
+             $(shell $(OVERRIDE_PC_PATH) pkg-config --libs lua5.1-md5) \
+             $(shell $(OVERRIDE_PC_PATH) pkg-config --libs lua5.1-filesystem) \
+             $(shell $(OVERRIDE_PC_PATH) pkg-config --libs lua5.1-des56) \
+             -lbam \
+             $(shell $(OVERRIDE_PC_PATH) pkg-config --libs tre) \
+             -lm -lpthread
+    INCLUDEOPT+=$(shell $(OVERRIDE_PC_PATH) pkg-config --cflags zlib) \
+                $(shell $(OVERRIDE_PC_PATH) pkg-config --cflags expat) \
+                $(shell $(OVERRIDE_PC_PATH) pkg-config --cflags lua-5.1) \
+                $(shell $(OVERRIDE_PC_PATH) pkg-config --cflags lua5.1-lpeg) \
+                $(shell $(OVERRIDE_PC_PATH) pkg-config --cflags lua5.1-md5) \
+                $(shell $(OVERRIDE_PC_PATH) pkg-config --cflags lua5.1-filesystem) \
+                $(shell $(OVERRIDE_PC_PATH) pkg-config --cflags lua5.1-des56) \
+                $(shell $(OVERRIDE_PC_PATH) pkg-config --cflags tre)
+  else
+    # Requested the use of shared libraries without having pkg-config.
+    # You are on your own.  Good luck.
+    DEPLIBS:=-lbz2 -lz -lexpat -llua5.1-lpeg -llua5.1 -llua5.1-md5 \
+             -llua5.1-filesystem -llua5.1-des56 -lbam -ltre -lm -lpthread
+  endif
+else
+  DEPLIBS:=
+  INCLUDEOPT+=-I$(CURDIR)/src/external/zlib-1.2.8 \
+              -I$(CURDIR)/src/external/md5-1.2/src \
+              -I$(CURDIR)/src/external/lua-5.1.5/src \
+              -I$(CURDIR)/src/external/luafilesystem-1.5.0/src \
+              -I$(CURDIR)/src/external/lpeg-0.10.2 \
+              -I$(CURDIR)/src/external/expat-2.0.1/lib \
+              -I$(CURDIR)/src/external/bzip2-1.0.6 \
+              -I$(CURDIR)/src/external/samtools-0.1.18 \
+              -I$(CURDIR)/src/external/sqlite-3.8.7.1 \
+              -I$(CURDIR)/src/external/tre/include
+endif
+
 ifneq ($(cairo),no)
   # XXX: check for existence of packages, and emit warning and disable cairo
   # if packages are not available
@@ -65,7 +97,7 @@ EXP_CXXFLAGS:=$(CXXFLAGS)
 EXP_CPPFLAGS:=$(CPPFLAGS)
 EXP_LDLIBS:=$(LIBS) -lm
 # ...while those starting with GT_ are for internal purposes only
-GT_CFLAGS:=-g -Wall -Wunused-parameter -pipe $(FPIC) -Wpointer-arith
+GT_CFLAGS:=-g -Wall -Wunused-parameter -pipe $(FPIC) -Wpointer-arith -Wno-unknown-pragmas
 # expat needs -DHAVE_MEMMOVE
 # zlib needs -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN
 EXT_FLAGS:= -DHAVE_MEMMOVE -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN
@@ -125,6 +157,7 @@ LIBEXPAT_OBJ:=$(LIBEXPAT_SRC:%.c=obj/%.o)
 LIBEXPAT_DEP:=$(LIBEXPAT_SRC:%.c=obj/%.d)
 
 TRE_DIR:=src/external/tre/lib
+TRE_CPPFLAGS=-I$(CURDIR)/src/external/tre/include/tre
 LIBTRE_SRC:=$(TRE_DIR)/regcomp.c $(TRE_DIR)/regerror.c $(TRE_DIR)/regexec.c \
             $(TRE_DIR)/tre-ast.c $(TRE_DIR)/tre-compile.c \
             $(TRE_DIR)/tre-filter.c $(TRE_DIR)/tre-match-backtrack.c \
@@ -134,10 +167,11 @@ LIBTRE_OBJ:=$(LIBTRE_SRC:%.c=obj/%.o)
 LIBTRE_DEP:=$(LIBTRE_SRC:%.c=obj/%.d)
 
 LIBLUA_SRC=src/lualib.c\
-           src/external/md5-1.1.2/src/md5.c\
-           src/external/md5-1.1.2/src/md5lib.c\
-           src/external/md5-1.1.2/src/des56.c\
-           src/external/md5-1.1.2/src/ldes56.c\
+           src/external/md5-1.2/src/md5.c\
+           src/external/md5-1.2/src/md5lib.c\
+           src/external/md5-1.2/src/des56.c\
+           src/external/md5-1.2/src/ldes56.c\
+					 src/external/md5-1.2/src/compat-5.2.c\
            src/external/luafilesystem-1.5.0/src/lfs.c\
            src/external/lpeg-0.10.2/lpeg.c
 LIBLUA_OBJ:=$(LIBLUA_SRC:%.c=obj/%.o)
@@ -191,13 +225,6 @@ SAMTOOLS_SRC:=$(SAMTOOLS_DIR)/bgzf.c \
 SAMTOOLS_OBJ:=$(SAMTOOLS_SRC:%.c=obj/%.o)
 SAMTOOLS_DEP:=$(SAMTOOLS_SRC:%.c=obj/%.d)
 
-# add necessary shared lib dependencies then not building them ourselves
-ifeq ($(useshared),yes)
-  DEPLIBS:=-lbz2 -lz -lexpat -llua5.1-lpeg -llua5.1 -llua5.1-md5 \
-           -llua5.1-filesystem -llua5.1-des56 -lbam -ltre -lm -lpthread
-else
-  DEPLIBS:=
-endif
 EXP_LDLIBS += $(DEPLIBS)
 GTSHAREDLIB_LIBDEP += $(DEPLIBS)
 
@@ -517,6 +544,15 @@ else
   ADDITIONAL_BINARIES:=
 endif
 
+verbose ?= no
+ifeq ($(verbose),no)
+  V_ECHO=@echo
+  V_DO=@
+else
+  V_ECHO=@true
+  V_DO=
+endif
+
 all: lib/libgenometools.a $(SHARED_LIBGENOMETOOLS) \
      bin/gt bin/examples/custom_stream \
      bin/examples/gff3sort bin/examples/gff3validator bin/examples/noop \
@@ -524,51 +560,51 @@ all: lib/libgenometools.a $(SHARED_LIBGENOMETOOLS) \
      $(ADDITIONAL_BINARIES)
 
 lib/libexpat.a: $(LIBEXPAT_OBJ)
-	@echo "[link $(@F)]"
-	@test -d $(@D) || mkdir -p $(@D)
-	@$(AR) ru $@ $(LIBEXPAT_OBJ)
+	$(V_ECHO) "[link $(@F)]"
+	$(V_DO)test -d $(@D) || mkdir -p $(@D)
+	$(V_DO)$(AR) ru $@ $(LIBEXPAT_OBJ)
 ifdef RANLIB
-	@$(RANLIB) $@
+	$(V_DO)$(RANLIB) $@
 endif
 
 lib/libtre.a: $(LIBTRE_OBJ)
-	@echo "[link $(@F)]"
-	@test -d $(@D) || mkdir -p $(@D)
-	@$(AR) ru $@ $(LIBTRE_OBJ)
+	$(V_ECHO) "[link $(@F)]"
+	$(V_DO)test -d $(@D) || mkdir -p $(@D)
+	$(V_DO)$(AR) ru $@ $(LIBTRE_OBJ)
 ifdef RANLIB
-	@$(RANLIB) $@
+	$(V_DO)$(RANLIB) $@
 endif
 
 lib/libsqlite.a: $(SQLITE3_OBJ)
-	@echo "[link $(@F)]"
-	@test -d $(@D) || mkdir -p $(@D)
-	@$(AR) ru $@ $(SQLITE3_OBJ)
+	$(V_ECHO) "[link $(@F)]"
+	$(V_DO)test -d $(@D) || mkdir -p $(@D)
+	$(V_DO)$(AR) ru $@ $(SQLITE3_OBJ)
 ifdef RANLIB
-	@$(RANLIB) $@
+	$(V_DO)$(RANLIB) $@
 endif
 
 lib/libbz2.a: $(LIBBZ2_OBJ)
-	@echo "[link $(@F)]"
-	@test -d $(@D) || mkdir -p $(@D)
-	@$(AR) ru $@ $(LIBBZ2_OBJ)
+	$(V_ECHO) "[link $(@F)]"
+	$(V_DO)test -d $(@D) || mkdir -p $(@D)
+	$(V_DO)$(AR) ru $@ $(LIBBZ2_OBJ)
 ifdef RANLIB
-	@$(RANLIB) $@
+	$(V_DO)$(RANLIB) $@
 endif
 
 lib/libz.a: $(ZLIB_OBJ)
-	@echo "[link $(@F)]"
-	@test -d $(@D) || mkdir -p $(@D)
-	@$(AR) ru $@ $(ZLIB_OBJ)
+	$(V_ECHO) "[link $(@F)]"
+	$(V_DO)test -d $(@D) || mkdir -p $(@D)
+	$(V_DO)$(AR) ru $@ $(ZLIB_OBJ)
 ifdef RANLIB
-	@$(RANLIB) $@
+	$(V_DO)$(RANLIB) $@
 endif
 
 lib/libgenometools.a: obj/gt_config.h  $(LIBGENOMETOOLS_OBJ)
-	@echo "[link $(@F)]"
-	@test -d $(@D) || mkdir -p $(@D)
-	@$(AR) r $@ $(LIBGENOMETOOLS_OBJ)
+	$(V_ECHO) "[link $(@F)]"
+	$(V_DO)test -d $(@D) || mkdir -p $(@D)
+	$(V_DO)$(AR) r $@ $(LIBGENOMETOOLS_OBJ)
 ifdef RANLIB
-	@$(RANLIB) $@
+	$(V_DO)$(RANLIB) $@
 endif
 
 ifneq ($(useshared),yes)
@@ -582,17 +618,17 @@ lib/libgenometools$(SHARED_OBJ_NAME_EXT): obj/gt_config.h \
                                           $(ADDITIONAL_SO_DEPS) \
                                           $(ADDITIONAL_ZLIBS) \
                                           $(VERSION_SCRIPT)
-	@echo "[link $(@F)]"
-	@test -d $(@D) || mkdir -p $(@D)
-	@$(CC) $(EXP_LDFLAGS) $(VERSION_SCRIPT_PARAM) \
+	$(V_ECHO) "[link $(@F)]"
+	$(V_DO)test -d $(@D) || mkdir -p $(@D)
+	$(V_DO)$(CC) $(EXP_LDFLAGS) $(VERSION_SCRIPT_PARAM) \
 	  $(GT_LDFLAGS) $(ADDITIONAL_SO_DEPS) $(SHARED) $(LIBGENOMETOOLS_OBJ) \
 	  -o $@ $(GTSHAREDLIB_LIBDEP)
 
 define PROGRAM_template
 $(1): $(2)
-	@echo "[link $$(@F)]"
-	@test -d $$(@D) || mkdir -p $$(@D)
-	@$$(CC) $$(EXP_LDFLAGS) $$(GT_LDFLAGS) $$(filter-out $$(OVERRIDELIBS),$$^) \
+	$(V_ECHO) "[link $$(@F)]"
+	$(V_DO)test -d $$(@D) || mkdir -p $$(@D)
+	$(V_DO)$$(CC) $$(EXP_LDFLAGS) $$(GT_LDFLAGS) $$(filter-out $$(OVERRIDELIBS),$$^) \
 	  $$(filter-out $$(patsubst lib%.a,-l%,$$(notdir $$(OVERRIDELIBS))),\
 	  $$(EXP_LDLIBS)) $$(OVERRIDELIBS) $$(EXP_LDLIBS) -o $$@
 endef
@@ -642,32 +678,32 @@ $(eval $(call PROGRAM_template, bin/examples/sketch_parsed_with_ordering, \
                                 $(ADDITIONAL_ZLIBS)))
 
 bin/lua: $(LUAMAIN_OBJ)
-	@echo "[link $(@F)]"
-	@test -d $(@D) || mkdir -p $(@D)
-	@$(CC) $(EXP_LDFLAGS) $(GT_LDFLAGS) $^ -lm $(LUA_LDLIB) -o $@
+	$(V_ECHO) "[link $(@F)]"
+	$(V_DO)test -d $(@D) || mkdir -p $(@D)
+	$(V_DO)$(CC) $(EXP_LDFLAGS) $(GT_LDFLAGS) $^ -lm $(LUA_LDLIB) -o $@
 
 API_HEADERS=$(foreach DIR,$(LIBGENOMETOOLS_DIRS),$(sort $(wildcard $(DIR)/*_api.h)))
 
 obj/public_symbols.lst: $(API_HEADERS) $(LIBGENOMETOOLS_SRC)
-	@echo '[gathering public API symbols to $@]'
-	@printf "VERSION {\n\tglobal:\n" > $@
-	@cat $(API_HEADERS) | tr ' ' '\n' \
+	$(V_DO)echo '[gathering public API symbols to $@]'
+	$(V_DO)printf "VERSION {\n\tglobal:\n" > $@
+	$(V_DO)cat $(API_HEADERS) | tr ' ' '\n' \
 	 | grep -E '^(gt_[0-9a-zA-Z_]+)(\[|\()' \
 	 | cut -d'[' -f1 | cut -d'(' -f1 | sort | uniq > $@.src
-	@cat $(LIBGENOMETOOLS_PRESRC) | tr ' ' '\n' \
+	$(V_DO)cat $(LIBGENOMETOOLS_PRESRC) | tr ' ' '\n' \
 	 | grep -E '(gt_[0-9a-zA-Z_]+_p)(\[|\()' \
 	 | cut -d'(' -f1 >> $@.src
-	@for L in `cat $@.src`; do \
+	$(V_DO)for L in `cat $@.src`; do \
 	  printf "\t\t$$L;\n" >> $@; \
 	done;
-	@printf "\t\tgt_array_add_ptr;\n" >> $@
-	@printf "\t\tgt_str_get_mem;\n" >> $@
-	@printf '\tlocal: *;\n\t};\n' >> $@
+	$(V_DO)printf "\t\tgt_array_add_ptr;\n" >> $@
+	$(V_DO)printf "\t\tgt_str_get_mem;\n" >> $@
+	$(V_DO)printf '\tlocal: *;\n\t};\n' >> $@
 
 obj/gt_config.h: VERSION
-	@echo '[create $@]'
-	@test -d $(@D) || mkdir -p $(@D)
-	@(echo '#ifndef GT_CONFIG_H' ;\
+	$(V_DO)echo '[create $@]'
+	$(V_DO)test -d $(@D) || mkdir -p $(@D)
+	$(V_DO)(echo '#ifndef GT_CONFIG_H' ;\
 	echo '#define GT_CONFIG_H' ;\
 	echo '#define GT_CC "'`$(CC) --version | head -n 1`\" ;\
 	echo '#define GT_CFLAGS "$(EXP_CFLAGS) $(GT_CFLAGS)"' ;\
@@ -675,18 +711,18 @@ obj/gt_config.h: VERSION
 	sed -e 's/\([^\]\)"/\1\\"/g' -e 's/^"/\\"/g' -e 's/$$/"/' \
 	    -e 's/^/#define GT_CPPFLAGS "/'; \
 	  echo '#define GT_VERSION "'`cat VERSION`\" ) > $@
-	@cat VERSION | \
+	$(V_DO)cat VERSION | \
           sed 's/\([0-9]*\)\.[0-9]*\.[0-9]*/#define GT_MAJOR_VERSION \1/' >> $@
-	@cat VERSION | \
+	$(V_DO)cat VERSION | \
           sed 's/[0-9]*\.\([0-9]*\)\.[0-9]*/#define GT_MINOR_VERSION \1/' >> $@
-	@cat VERSION | \
+	$(V_DO)cat VERSION | \
           sed 's/[0-9]*\.[0-9]*\.\([0-9]*\)/#define GT_MICRO_VERSION \1/' >> $@
-	@echo '#endif' >> $@
+	$(V_DO)echo '#endif' >> $@
 
 obj/amalgamation.c: $(LIBGENOMETOOLS_PRESRC)
-	@echo '[create $@]'
-	@test -d $(@D) || mkdir -p $(@D)
-	@scripts/create_amalgamation $(LIBGENOMETOOLS_PRESRC) > $@
+	$(V_ECHO) '[create $@]'
+	$(V_DO)test -d $(@D) || mkdir -p $(@D)
+	$(V_DO)scripts/create_amalgamation $(LIBGENOMETOOLS_PRESRC) > $@
 
 bitpackstringop_Dependencies=src/core/bitpackstringop.template \
 	 src/core/bitpackstringvectorreadop.gen \
@@ -694,89 +730,98 @@ bitpackstringop_Dependencies=src/core/bitpackstringop.template \
 	 scripts/template2c.pl
 
 src/core/bitpackstringop8.c: $(bitpackstringop_Dependencies)
-	@echo '[rebuild $@]'
-	@scripts/template2c.pl 8 $<
+	$(V_ECHO) '[rebuild $@]'
+	$(V_DO)scripts/template2c.pl 8 $<
 
 src/core/checkbitpackstring8.c: \
  src/core/checkbitpackstring.template scripts/template2c.pl
-	@echo '[rebuild $@]'
-	@scripts/template2c.pl 8 $<
+	$(V_ECHO) '[rebuild $@]'
+	$(V_DO)scripts/template2c.pl 8 $<
 
 src/core/bitpackstringop16.c: $(bitpackstringop_Dependencies)
-	@echo '[rebuild $@]'
-	@scripts/template2c.pl 16 $<
+	$(V_ECHO) '[rebuild $@]'
+	$(V_DO)scripts/template2c.pl 16 $<
 
 src/core/checkbitpackstring16.c: \
  src/core/checkbitpackstring.template scripts/template2c.pl
-	@echo '[rebuild $@]'
-	@scripts/template2c.pl 16 $<
+	$(V_ECHO) '[rebuild $@]'
+	$(V_DO)scripts/template2c.pl 16 $<
 
 src/core/bitpackstringop32.c: $(bitpackstringop_Dependencies)
-	@echo '[rebuild $@]'
-	@scripts/template2c.pl 32 $<
+	$(V_ECHO) '[rebuild $@]'
+	$(V_DO)scripts/template2c.pl 32 $<
 
 src/core/checkbitpackstring32.c: \
  src/core/checkbitpackstring.template scripts/template2c.pl
-	@echo '[rebuild $@]'
-	@scripts/template2c.pl 32 $<
+	$(V_ECHO) '[rebuild $@]'
+	$(V_DO)scripts/template2c.pl 32 $<
 
 src/core/bitpackstringop64.c: $(bitpackstringop_Dependencies)
-	@echo '[rebuild $@]'
-	@scripts/template2c.pl 64 $<
+	$(V_ECHO) '[rebuild $@]'
+	$(V_DO)scripts/template2c.pl 64 $<
 
 src/core/checkbitpackstring64.c: \
  src/core/checkbitpackstring.template scripts/template2c.pl
-	@echo '[rebuild $@]'
-	@scripts/template2c.pl 64 $<
+	$(V_ECHO) '[rebuild $@]'
+	$(V_DO)scripts/template2c.pl 64 $<
 
 src/core/checkbitpackstring-int.c: \
  src/core/checkbitpackstring.template scripts/template2c.pl
-	@echo '[rebuild $@]'
-	@scripts/template2c.pl '-int' $<
+	$(V_ECHO) '[rebuild $@]'
+	$(V_DO)scripts/template2c.pl '-int' $<
 
 # SQLite needs special attention
 obj/$(SQLITE3_DIR)/%.o: $(SQLITE3_DIR)/%.c
-	@echo "[compile $(@F)]"
-	@test -d $(@D) || mkdir -p $(@D)
-	@$(CC) -c $< -o $@ -DHAVE_MALLOC_USABLE_SIZE $(EXP_CPPFLAGS) \
-	  $(GT_CPPFLAGS) $(EXP_CFLAGS) $(SQLITE_CFLAGS) -DSQLITE_ENABLE_UNLOCK_NOTIFY  $(3) $(FPIC)
-	@$(CC) -c $< -o $(@:.o=.d) -DHAVE_MALLOC_USABLE_SIZE $(EXP_CPPFLAGS) \
-	  $(GT_CPPFLAGS) $(3) -MM -MP -MT $@ $(FPIC)
+	$(V_ECHO) "[compile $(@F)]"
+	$(V_DO)test -d $(@D) || mkdir -p $(@D)
+	$(V_DO)$(CC) -c $< -o $@ -DHAVE_MALLOC_USABLE_SIZE $(EXP_CPPFLAGS) \
+	  $(GT_CPPFLAGS) $(EXP_CFLAGS) $(SQLITE_CFLAGS) -DSQLITE_ENABLE_UNLOCK_NOTIFY $(FPIC)
+	$(V_DO)$(CC) -c $< -o $(@:.o=.d) -DHAVE_MALLOC_USABLE_SIZE $(EXP_CPPFLAGS) \
+	  $(GT_CPPFLAGS) -MM -MP -MT $@ $(FPIC)
+
+# TRE needs special attention
+obj/$(TRE_DIR)/%.o: $(TRE_DIR)/%.c
+	$(V_ECHO) "[compile $(@F)]"
+	$(V_DO)test -d $(@D) || mkdir -p $(@D)
+	$(V_DO)$(CC) -c $< -o $@ $(EXP_CPPFLAGS) \
+	  $(GT_CPPFLAGS) $(EXP_CFLAGS) $(TRE_CPPFLAGS) $(GT_CFLAGS) $(FPIC)
+	$(V_DO)$(CC) -c $< -o $(@:.o=.d) $(EXP_CPPFLAGS) \
+	  $(GT_CPPFLAGS)  $(TRE_CPPFLAGS) -MM -MP -MT $@ $(FPIC)
 
 define COMPILE_template
 $(1): $(2)
-	@echo "[compile $$(@F)]"
-	@test -d $$(@D) || mkdir -p $$(@D)
-	@$$(CC) -c $$< -o $$@ $$(EXP_CPPFLAGS) $$(GT_CPPFLAGS) $$(EXP_CFLAGS) \
+	$(V_ECHO) "[compile $$(@F)]"
+	$(V_DO)test -d $$(@D) || mkdir -p $$(@D)
+	$(V_DO)$$(CC) -c $$< -o $$@ $$(EXP_CPPFLAGS) $$(GT_CPPFLAGS) $$(EXP_CFLAGS) \
 	  $$(GT_CFLAGS) $(3)
-	@$$(CC) -c $$< -o $$(@:.o=.d) $$(EXP_CPPFLAGS) $$(GT_CPPFLAGS) $$(EXP_CFLAGS) \
+	$(V_DO)$$(CC) -c $$< -o $$(@:.o=.d) $$(EXP_CPPFLAGS) $$(GT_CPPFLAGS) $$(EXP_CFLAGS) \
         $(3) -MM -MP -MT $$@
 endef
 
 obj/$(SAMTOOLS_DIR)/%.o: $(SAMTOOLS_DIR)/%.c
-	@echo "[compile $(notdir $@)]"
-	@test -d $(@D) || mkdir -p $(@D)
-	@$(CC) -c $< -o $@ $(EXP_CPPFLAGS) $(GT_CPPFLAGS) \
+	$(V_ECHO) "[compile $(notdir $@)]"
+	$(V_DO)test -d $(@D) || mkdir -p $(@D)
+	$(V_DO)$(CC) -c $< -o $@ $(EXP_CPPFLAGS) $(GT_CPPFLAGS) \
 	  $(EXP_CFLAGS) $(GT_CFLAGS_NO_WERROR)
-	@$(CC) -c $< -o $(@:.o=.d) $(EXP_CPPFLAGS) $(GT_CPPFLAGS) -MM -MP \
+	$(V_DO)$(CC) -c $< -o $(@:.o=.d) $(EXP_CPPFLAGS) $(GT_CPPFLAGS) -MM -MP \
 	  -MT $@
 
 $(eval $(call COMPILE_template, obj/%.o, %.c))
 
 obj/%.o: %.cxx
-	@echo "[compile $@]"
-	@test -d $(@D) || mkdir -p $(@D)
-	@$(CXX) -c $< -o $@ $(EXP_CPPFLAGS) $(GT_CPPFLAGS) \
+	$(V_ECHO) "[compile $@]"
+	$(V_DO)test -d $(@D) || mkdir -p $(@D)
+	$(V_DO)$(CXX) -c $< -o $@ $(EXP_CPPFLAGS) $(GT_CPPFLAGS) \
 	  $(EXP_CXXFLAGS) $(GT_CXXFLAGS)
-	@$(CXX) -c $< -o $(@:.o=.d) $(EXP_CPPFLAGS) $(GT_CPPFLAGS) -MM -MP \
+	$(V_DO)$(CXX) -c $< -o $(@:.o=.d) $(EXP_CPPFLAGS) $(GT_CPPFLAGS) -MM -MP \
 	  -MT $@
 
 obj/%.o: %.cpp
-	@echo "[compile $@]"
-	@test -d $(@D) || mkdir -p $(@D)
-	@$(CXX) -c $< -o $@ $(EXP_CPPFLAGS) $(GT_CPPFLAGS) \
+	$(V_ECHO) "[compile $@]"
+	$(V_DO)test -d $(@D) || mkdir -p $(@D)
+	$(V_DO)$(CXX) -c $< -o $@ $(EXP_CPPFLAGS) $(GT_CPPFLAGS) \
 	  $(EXP_CXXFLAGS) $(GT_CXXFLAGS)
-	@$(CXX) -c $< -o $(@:.o=.d) $(EXP_CPPFLAGS) $(GT_CPPFLAGS) -MM -MP \
+	$(V_DO)$(CXX) -c $< -o $(@:.o=.d) $(EXP_CPPFLAGS) $(GT_CPPFLAGS) -MM -MP \
 	  -MT $@
 
 obj/src/core/versionfunc.o: obj/gt_config.h
@@ -811,30 +856,30 @@ GTDISTDIR:="$(DISTDIR)/$(GTDISTBASENAME)"
 STRIP:=strip
 
 dist: all
-	@echo "[build distribution]"
-	@rm -rf $(GTDISTDIR)
+	$(V_ECHO) "[build distribution]"
+	$(V_DO)rm -rf $(GTDISTDIR)
 ifeq ($(SYSTEM),Windows)
-	@rm -f $(DISTDIR)/$(GTDISTBASENAME).zip
+	$(V_DO)rm -f $(DISTDIR)/$(GTDISTBASENAME).zip
 else
-	@rm -f $(DISTDIR)/$(GTDISTBASENAME).tar.gz
+	$(V_DO)rm -f $(DISTDIR)/$(GTDISTBASENAME).tar.gz
 endif
-	@mkdir -p $(GTDISTDIR)/bin $(GTDISTDIR)/doc
-	@cp $(CURDIR)/doc/dist_readme.txt $(GTDISTDIR)/README
-	@cp $(CURDIR)/LICENSE $(GTDISTDIR)
-	@cp $(CURDIR)/CONTRIBUTORS $(GTDISTDIR)
-	@cp $(CURDIR)/CHANGELOG $(GTDISTDIR)
-	@cp $(CURDIR)/doc/manuals/*.pdf $(GTDISTDIR)/doc
-	@cp -r $(CURDIR)/gtdata $(GTDISTDIR)
-	@cp -r $(CURDIR)/gtpython $(GTDISTDIR)
-	@cp -r $(CURDIR)/gtruby $(GTDISTDIR)
-	@$(MAKE) prefix=$(GTDISTDIR) install
+	$(V_DO)mkdir -p $(GTDISTDIR)/bin $(GTDISTDIR)/doc
+	$(V_DO)cp $(CURDIR)/doc/dist_readme.txt $(GTDISTDIR)/README
+	$(V_DO)cp $(CURDIR)/LICENSE $(GTDISTDIR)
+	$(V_DO)cp $(CURDIR)/CONTRIBUTORS $(GTDISTDIR)
+	$(V_DO)cp $(CURDIR)/CHANGELOG $(GTDISTDIR)
+	$(V_DO)cp $(CURDIR)/doc/manuals/*.pdf $(GTDISTDIR)/doc
+	$(V_DO)cp -r $(CURDIR)/gtdata $(GTDISTDIR)
+	$(V_DO)cp -r $(CURDIR)/gtpython $(GTDISTDIR)
+	$(V_DO)cp -r $(CURDIR)/gtruby $(GTDISTDIR)
+	$(V_DO)$(MAKE) prefix=$(GTDISTDIR) install
 ifeq ($(SYSTEM),Windows)
-	@cd $(DISTDIR) && 7z a -tzip $(GTDISTBASENAME).zip $(GTDISTBASENAME)
-	@echo "$(DISTDIR)/$(GTDISTBASENAME).zip"
+	$(V_DO)cd $(DISTDIR) && 7z a -tzip $(GTDISTBASENAME).zip $(GTDISTBASENAME)
+	$(V_ECHO) "$(DISTDIR)/$(GTDISTBASENAME).zip"
 else
-	@cd $(DISTDIR) && $(SCRIPTSDIR)/tar_root.sh $(GTDISTBASENAME)
-	@cd $(DISTDIR) && gzip -f -9 $(GTDISTBASENAME).tar
-	@echo "$(DISTDIR)/$(GTDISTBASENAME).tar.gz"
+	$(V_DO)cd $(DISTDIR) && $(SCRIPTSDIR)/tar_root.sh $(GTDISTBASENAME)
+	$(V_DO)cd $(DISTDIR) && gzip -f -9 $(GTDISTBASENAME).tar
+	$(V_ECHO) "$(DISTDIR)/$(GTDISTBASENAME).tar.gz"
 endif
 
 srcdist:
@@ -942,7 +987,7 @@ endif
 ifneq ($(sharedlib),no)
 	cp lib/libgenometools$(SHARED_OBJ_NAME_EXT) $(prefix)/lib
 endif
-	@echo '[build config script $(@F)]'
+	$(V_ECHO) '[build config script $(@F)]'
 	sed -e 's!@CC@!$(CC)!' -e 's!@CFLAGS@!$(EXP_CFLAGS)!' \
 	  -e 's!@CPPFLAGS@!$(subst ",\\",-I"$(prefix)/include" $(EXP_CPPFLAGS))!' \
 	  -e 's!@CXX@!$(CXX)!' -e 's!@CXXFLAGS@!$(EXP_CXXFLAGS)!' \
@@ -959,7 +1004,7 @@ installmanpages: manpages
 	    && cp $(CURDIR)/doc/manpages/* $(prefix)/share/man/man1)
 
 cflags:
-	@echo ${GT_CFLAGS}
+	$(V_DO)echo ${GT_CFLAGS}
 
 EISFILES=${shell ls ${CURDIR}/src/match/*.c | grep eis-}
 
@@ -997,65 +1042,65 @@ scgt:
 	src_check src/ltr/*
 
 splintclean:
-	find obj -name '*.splint' | xargs rm -f
+	find obj -name '*.splint' -delete
 
 sbclean:
-	find obj -name '*.sb' | xargs rm -f
+	find obj -name '*.sb' -delete
 
 obj/%.sb: src/match/%.c
-	@echo "scan-build $<"
-	@scan-build -analyze-headers --status-bugs --use-cc $(CC) $(CC) -c $< $(EXP_CPPFLAGS) $(GT_CPPFLAGS) $(EXP_CFLAGS) \
+	$(V_ECHO) "scan-build $<"
+	$(V_DO)scan-build -analyze-headers --status-bugs --use-cc $(CC) $(CC) -c $< $(EXP_CPPFLAGS) $(GT_CPPFLAGS) $(EXP_CFLAGS) \
 	  $(GT_CFLAGS) -o obj/${subst .c,.o,$<} > /dev/null
-	@touch $@
+	$(V_DO)touch $@
 
 obj/%.sb: src/ltr/%.c
-	@echo "scan-build $<"
-	@scan-build -analyze-headers --status-bugs --use-cc $(CC) $(CC) -c $< $(EXP_CPPFLAGS) $(GT_CPPFLAGS) $(EXP_CFLAGS) \
+	$(V_ECHO) "scan-build $<"
+	$(V_DO)scan-build -analyze-headers --status-bugs --use-cc $(CC) $(CC) -c $< $(EXP_CPPFLAGS) $(GT_CPPFLAGS) $(EXP_CFLAGS) \
 	  $(GT_CFLAGS) -o obj/${subst .c,.o,$<} > /dev/null
-	@touch $@
+	$(V_DO)touch $@
 
 obj/%.sb: src/tools/%.c
-	@echo "scan-build $<"
-	@scan-build -analyze-headers --status-bugs --use-cc $(CC) $(CC) -c $< $(EXP_CPPFLAGS) $(GT_CPPFLAGS) $(EXP_CFLAGS) \
+	$(V_ECHO) "scan-build $<"
+	$(V_DO)scan-build -analyze-headers --status-bugs --use-cc $(CC) $(CC) -c $< $(EXP_CPPFLAGS) $(GT_CPPFLAGS) $(EXP_CFLAGS) \
 	  $(GT_CFLAGS) -o obj/${subst .c,.o,$<} > /dev/null
-	@touch $@
+	$(V_DO)touch $@
 
 obj/%.sb: src/core/%.c
-	@echo "scan-build $<"
-	@scan-build -analyze-headers --status-bugs --use-cc $(CC) $(CC) -c $< $(EXP_CPPFLAGS) $(GT_CPPFLAGS) $(EXP_CFLAGS) \
+	$(V_ECHO) "scan-build $<"
+	$(V_DO)scan-build -analyze-headers --status-bugs --use-cc $(CC) $(CC) -c $< $(EXP_CPPFLAGS) $(GT_CPPFLAGS) $(EXP_CFLAGS) \
 	  $(GT_CFLAGS) -o obj/${subst .c,.o,$<} > /dev/null
-	@touch $@
+	$(V_DO)touch $@
 
 obj/%.sb: src/extended/%.c
-	@echo "scan-build $<"
-	@scan-build -analyze-headers --status-bugs --use-cc $(CC) $(CC) -c $< $(EXP_CPPFLAGS) $(GT_CPPFLAGS) $(EXP_CFLAGS) \
+	$(V_ECHO) "scan-build $<"
+	$(V_DO)scan-build -analyze-headers --status-bugs --use-cc $(CC) $(CC) -c $< $(EXP_CPPFLAGS) $(GT_CPPFLAGS) $(EXP_CFLAGS) \
 	  $(GT_CFLAGS) -o obj/${subst .c,.o,$<} > /dev/null
-	@touch $@
+	$(V_DO)touch $@
 
 obj/%.splint: ${CURDIR}/src/match/%.c
-	@echo "splint $<"
-	@splint $(SPLINTD) $(EXP_CPPFLAGS) $(INCLUDEOPT) -f $(CURDIR)/testdata/Splintoptions $<
-	@touch $@
+	$(V_ECHO) "splint $<"
+	$(V_DO)splint $(SPLINTD) $(EXP_CPPFLAGS) $(INCLUDEOPT) -f $(CURDIR)/testdata/Splintoptions $<
+	$(V_DO)touch $@
 
 obj/%.splint: ${CURDIR}/src/tools/%.c
-	@echo "splint $<"
-	@splint $(SPLINTD) $(EXP_CPPFLAGS) $(INCLUDEOPT) -f $(CURDIR)/testdata/Splintoptions $<
-	@touch $@
+	$(V_ECHO) "splint $<"
+	$(V_DO)splint $(SPLINTD) $(EXP_CPPFLAGS) $(INCLUDEOPT) -f $(CURDIR)/testdata/Splintoptions $<
+	$(V_DO)touch $@
 
 obj/%.splint: ${CURDIR}/src/ltr/%.c
-	@echo "splint $<"
-	@splint $(SPLINTD) $(EXP_CPPFLAGS) $(INCLUDEOPT) -f $(CURDIR)/testdata/Splintoptions $<
-	@touch $@
+	$(V_ECHO) "splint $<"
+	$(V_DO)splint $(SPLINTD) $(EXP_CPPFLAGS) $(INCLUDEOPT) -f $(CURDIR)/testdata/Splintoptions $<
+	$(V_DO)touch $@
 
 obj/%.splint: ${CURDIR}/src/core/%.c
-	@echo "splint $<"
-	@splint $(SPLINTD) $(EXP_CPPFLAGS) $(INCLUDEOPT) -f $(CURDIR)/testdata/Splintoptions $<
-	@touch $@
+	$(V_ECHO) "splint $<"
+	$(V_DO)splint $(SPLINTD) $(EXP_CPPFLAGS) $(INCLUDEOPT) -f $(CURDIR)/testdata/Splintoptions $<
+	$(V_DO)touch $@
 
 obj/%.splint: ${CURDIR}/src/extended/%.c
-	@echo "splint $<"
-	@splint $(SPLINTD) $(EXP_CPPFLAGS) $(INCLUDEOPT) -f $(CURDIR)/testdata/Splintoptions $<
-	@touch $@
+	$(V_ECHO) "splint $<"
+	$(V_DO)splint $(SPLINTD) $(EXP_CPPFLAGS) $(INCLUDEOPT) -f $(CURDIR)/testdata/Splintoptions $<
+	$(V_DO)touch $@
 
 
 DWHEADER=${filter-out %impl.h, ${shell find ${CURDIR} -name '*.h' | \
@@ -1066,53 +1111,53 @@ ALLHEADER=${addprefix obj/,${notdir ${subst .h,.check,\
 headercheck:${ALLHEADER}
 
 headerclean:
-	find obj -name '*.check' | xargs rm -f
+	find obj -name '*.check' -delete
 
 obj/%.check: ${CURDIR}/src/match/%.h
-	@echo "check include $<"
-	@src_check_header.rb $<
-	@touch $@
+	$(V_ECHO) "check include $<"
+	$(V_DO)src_check_header.rb $<
+	$(V_DO)touch $@
 
 obj/%.check: ${CURDIR}/src/tools/%.h
-	@echo "check include $<"
-	@src_check_header.rb $<
-	@touch $@
+	$(V_ECHO) "check include $<"
+	$(V_DO)src_check_header.rb $<
+	$(V_DO)touch $@
 
 obj/%.check: ${CURDIR}/src/ltr/%.h
-	@echo "check include $<"
-	@src_check_header.rb $<
-	@touch $@
+	$(V_ECHO) "check include $<"
+	$(V_DO)src_check_header.rb $<
+	$(V_DO)touch $@
 
 obj/%.check: ${CURDIR}/src/core/%.h
-	@echo "check include $<"
-	@src_check_header.rb $<
-	@touch $@
+	$(V_ECHO) "check include $<"
+	$(V_DO)src_check_header.rb $<
+	$(V_DO)touch $@
 
 obj/%.check: ${CURDIR}/src/extended/%.h
-	@echo "check include $<"
-	@src_check_header.rb $<
-	@touch $@
+	$(V_ECHO) "check include $<"
+	$(V_DO)src_check_header.rb $<
+	$(V_DO)touch $@
 
 obj/%.prepro: ${CURDIR}/src/match/%.c
-	@echo "[generate $@]"
+	$(V_ECHO) "[generate $@]"
 	$(CC) -c $< -o $@ $(EXP_CPPFLAGS) $(GT_CPPFLAGS) \
 	  $(EXP_CFLAGS) $(GT_CFLAGS) -E -g3
 	indent $@
 
 obj/%.prepro: ${CURDIR}/src/tools/%.c
-	@echo "[generate $@]"
+	$(V_ECHO) "[generate $@]"
 	$(CC) -c $< -o $@ $(EXP_CPPFLAGS) $(GT_CPPFLAGS) \
 	  $(EXP_CFLAGS) $(GT_CFLAGS) -E -g3
 	indent $@
 
 obj/%.prepro: ${CURDIR}/src/core/%.c
-	@echo "[generate $@]"
+	$(V_ECHO) "[generate $@]"
 	$(CC) -c $< -o $@ $(EXP_CPPFLAGS) $(GT_CPPFLAGS) \
 	  $(EXP_CFLAGS) $(GT_CFLAGS) -E -g3
 	indent $@
 
 obj/%.prepro: ${CURDIR}/src/extended/%.c
-	@echo "[generate $@]"
+	$(V_ECHO) "[generate $@]"
 	$(CC) -c $< -o $@ $(EXP_CPPFLAGS) $(GT_CPPFLAGS) \
 	  $(EXP_CFLAGS) $(GT_CFLAGS) -E -g3
 	indent $@
@@ -1135,7 +1180,7 @@ test: all
 
 clean:
 	rm -rf lib
-	find obj -name '*.o' |xargs rm -f
+	find obj -name '*.o' -delete
 	rm -f obj/amalgamation.c
 	rm -rf testsuite/stest_testsuite testsuite/stest_stest_tests
 	$(MAKE) -s -C $(CURDIR)/doc/devguide clean
@@ -1158,8 +1203,8 @@ cleanindexes:
 	   -a ! \( -name 'foo.[36][24].*' \) -delete
 
 gtkviewer:
-	@echo "[compile $(notdir $@)]"
-	@$(CC) -o bin/examples/gtkviewer $(GT_CPPFLAGS) $(GT_LDFLAGS) \
+	$(V_ECHO) "[compile $(notdir $@)]"
+	$(V_DO)$(CC) -o bin/examples/gtkviewer $(GT_CPPFLAGS) $(GT_LDFLAGS) \
   src/examples/gtkviewer.c \
   -lcairo `$(OVERRIDE_PC_PATH) pkg-config --silence-errors --cflags --libs gtk+-2.0` \
   -lgenometools
diff --git a/VERSION b/VERSION
index 1cc9c18..2b26b8d 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.5.8
+1.5.9
diff --git a/doc/devguide/devguide.tex b/doc/devguide/devguide.tex
index feda160..1da5b5c 100644
--- a/doc/devguide/devguide.tex
+++ b/doc/devguide/devguide.tex
@@ -35,7 +35,8 @@
 \title{The \Gt Developer's Guide}
 \author{Sascha Steinbiss, Gordon Gremme and Stefan
         Kurtz\thanks{please send comments to:
-        \texttt{steinbiss at zbh.uni-hamburg.de}}}
+        \texttt{sascha at steinbiss.name}}}
+\date{18/02/2016}
 
 
 \begin{document}
@@ -1781,9 +1782,9 @@ $ gt -debug mytool
 
 \subsection{Additional targets}
 Simply running \emph{make} builds both the \keyword{gt} executable and the
-\Gt shared library. However, there are also other targets (besides the ones
-mentioned in the respective sections above) which can be built using the \Gt
-Makefile:
+\Gt shared library as 64 bit binaries. However, there are also other targets
+(besides the ones mentioned in the respective sections above) which can be
+built using the \Gt Makefile:
 \begin{itemize}
 \item
 \keyword{docs}, which builds API documentation as web pages in \keyword{www} and
@@ -1841,6 +1842,17 @@ This option is enabled by default.
 \item
 The option \keyword{static=yes} tries to link all dependencies of \Gt
 statically. This option is disabled by default.
+\item
+The option \keyword{useshared=yes} ensures the \Gt build process does not use
+the copies of the external \Gt dependencies included with the \Gt distribution
+but rather relies on them being available system-wide on the build system.
+This is a recommended option for building on a system where the building user
+controls package management and can install/update system-wide libraries at will.
+This option is disabled by default.
+\item
+The option \keyword{32bit=yes} (or likewise \keyword{64bit=no}) makes the build
+system create a 32-bit version of the \Gt binaries. This option is disabled by
+default.
 \end{itemize}
 
 \section{Contributing code}
@@ -1871,6 +1883,7 @@ To get started with \Gt development, we recommend the following:
   \item Familiarize yourself with the \Gt development process at \url{http://genometools.org/contract.html}.
   \item Install the Git version control system.
   \item Read the Git documentation.
+  \item Register a user account on GitHub (\url{https://github.com}).
   \item Fork the \Gt Git repository on GitHub at \url{https://github.com/genometools/genometools}.
   \item Clone a local version of your forked repo:
     \begin{lstlisting}[language=sh]
@@ -1954,7 +1967,11 @@ To get your source code (which we assume to reside in your personal forked
 GitHub repository) to be considered for inclusion into the \Gt official source
 tree, file an issue in the \Gt issue
 tracker\footnote{\url{https://github.com/genometools/genometools/issues}}
-describing your proposed changes. Then issue a pull request from your repository against the official \Gt repository. A maintainer will review your contribution and merge it. After providing a working patch or feature, you will eventually obtain maintainer status yourself and will be able (but not required to) to review and merge pull requests from other contributors.
+describing your proposed changes. Then issue a pull request from your
+repository against the official \Gt repository. A maintainer will review your
+contribution and merge it. After providing a working patch or feature, you will
+eventually obtain maintainer status yourself and will be able (but not required
+to) to review and merge pull requests from other contributors.
 
 \textbf{Important:} Always rebase your code against the current
 official \Gt master before requesting a pull (see above). Also, please check
diff --git a/doc/manuals/annotationsketch.tex b/doc/manuals/annotationsketch.tex
index a917d78..95e0b16 100644
--- a/doc/manuals/annotationsketch.tex
+++ b/doc/manuals/annotationsketch.tex
@@ -50,6 +50,7 @@
 \subject{Supplementary Information}
 \author{Sascha Steinbiss, Gordon Gremme, Christin Sch\"arfer, Malte Mader\\ and Stefan Kurtz}
 
+\date{11/07/2012}
 \begin{document}
 
 \maketitle
@@ -470,6 +471,11 @@ The following C code example illustrates how to produce an image from annotation
 (See \texttt{gtpython/sketch\_constructed.py} in the source distribution.)
 \lstinputlisting[language=Python, breaklines=true, numbers=left, frame=single,]{../../gtpython/sketch_constructed.py}
 
+\lstset{%
+  language=c,
+  basicstyle=\footnotesize\ttfamily,
+  numbers=none,
+}
 \input{api_reference}
 %\input{gtscript_reference}
 
diff --git a/doc/manuals/genomediff.tex b/doc/manuals/genomediff.tex
index b167e2d..f24f079 100644
--- a/doc/manuals/genomediff.tex
+++ b/doc/manuals/genomediff.tex
@@ -59,6 +59,7 @@ comment=[l]{--}%
   \url{willrodt at zbh.uni-hamburg.de}\\
 \end{tabular}}
 
+\date{02/10/2012}
 \begin{document}
 %\tsuhhfamily
 \maketitle
diff --git a/doc/manuals/hop.tex b/doc/manuals/hop.tex
index 90b2904..30c130a 100644
--- a/doc/manuals/hop.tex
+++ b/doc/manuals/hop.tex
@@ -32,6 +32,7 @@
          \url{kurtz at zbh.uni-hamburg.de}\\[1cm]
         \end{tabular}}
 
+\date{15/05/2014}
 \begin{document}
 \maketitle
 
diff --git a/doc/manuals/ltrdigest.tex b/doc/manuals/ltrdigest.tex
index 8e730b5..8c93a94 100644
--- a/doc/manuals/ltrdigest.tex
+++ b/doc/manuals/ltrdigest.tex
@@ -41,6 +41,7 @@
         \end{tabular}
         \end{tabular}}
 
+\date{26/08/2013}
 \begin{document}
 \maketitle
 
diff --git a/doc/manuals/ltrharvest.tex b/doc/manuals/ltrharvest.tex
index 2e8ce17..010307b 100644
--- a/doc/manuals/ltrharvest.tex
+++ b/doc/manuals/ltrharvest.tex
@@ -41,6 +41,7 @@ a manual}
         \url{http://www.biomedcentral.com/1471-2105/9/18}
         \end{tabular}
         \end{tabular}}
+\date{26/08/2013}
 \begin{document}
 \maketitle
 
diff --git a/doc/manuals/mgth.tex b/doc/manuals/mgth.tex
index fa26ee0..4d2b9ea 100644
--- a/doc/manuals/mgth.tex
+++ b/doc/manuals/mgth.tex
@@ -37,6 +37,7 @@ a manual}
          20146 Hamburg\\
          Germany\\[1cm]
         \end{tabular}}
+\date{26/08/2013}
 \begin{document}
 \maketitle
 
diff --git a/doc/manuals/packedindex.tex b/doc/manuals/packedindex.tex
index 9100920..1ba6640 100644
--- a/doc/manuals/packedindex.tex
+++ b/doc/manuals/packedindex.tex
@@ -38,6 +38,7 @@
 %        BMC Bioinformatics 2008, 9:18
         \end{tabular}
         \end{tabular}}
+\date{26/08/2013}
 \begin{document}
 \maketitle
 
diff --git a/doc/manuals/readjoiner.tex b/doc/manuals/readjoiner.tex
index 6cd47a0..375f1ed 100644
--- a/doc/manuals/readjoiner.tex
+++ b/doc/manuals/readjoiner.tex
@@ -45,6 +45,7 @@
          \url{kurtz at zbh.uni-hamburg.de}\\[1cm]
         \end{tabular}}
 
+\date{18/02/2014}
 \begin{document}
 \maketitle
 
diff --git a/doc/manuals/repfind.tex b/doc/manuals/repfind.tex
index 4f3a9f2..03de5e3 100644
--- a/doc/manuals/repfind.tex
+++ b/doc/manuals/repfind.tex
@@ -28,6 +28,7 @@
          University of Hamburg
         \end{tabular}}
 
+\date{26/08/2013}
 \begin{document}
 \maketitle
 This manual describes the options of the program \Repfind. It also gives
diff --git a/doc/manuals/tagerator.tex b/doc/manuals/tagerator.tex
index 9977949..fe34ffb 100644
--- a/doc/manuals/tagerator.tex
+++ b/doc/manuals/tagerator.tex
@@ -22,6 +22,7 @@
          University of Hamburg
         \end{tabular}}
 
+\date{26/08/2013}
 \begin{document}
 \maketitle
 
diff --git a/doc/manuals/tallymer.tex b/doc/manuals/tallymer.tex
index aeb611a..0b95864 100644
--- a/doc/manuals/tallymer.tex
+++ b/doc/manuals/tallymer.tex
@@ -95,6 +95,7 @@ a manual}
          University of Hamburg
         \end{tabular}}
 
+\date{26/08/2013}
 \begin{document}
 \maketitle
 This manual describes the \textit{Tallymer}-software, a collection of programs
diff --git a/doc/manuals/uniquesub.tex b/doc/manuals/uniquesub.tex
index 27ec5db..07e556a 100644
--- a/doc/manuals/uniquesub.tex
+++ b/doc/manuals/uniquesub.tex
@@ -47,6 +47,7 @@
          University of Hamburg
         \end{tabular}}
 
+\date{26/08/2013}
 \begin{document}
 \maketitle
 
diff --git a/gtdata/doc/extractseq.lua b/gtdata/doc/extractseq.lua
index 0c9d96a..e3f3879 100644
--- a/gtdata/doc/extractseq.lua
+++ b/gtdata/doc/extractseq.lua
@@ -46,7 +46,7 @@ If the sequence input comes from a fasta index (see below), the following holds:
 
 If the end of the argument list only contains one filename, say fastaindex, then
 it is checked if there is a file `fastaindex.kys`. This makes up part of the
-fasta index, which is contructed by calling the suffixerator tool as follows:
+fasta index, which is constructed by calling the suffixerator tool as follows:
 
   gt suffixerator -protein -ssp -tis -des -sds -kys -indexname fastaindex \
     -db inputfile1 [inputfile2 ..]
diff --git a/gtdata/doc/fingerprint.lua b/gtdata/doc/fingerprint.lua
index 22ddfc6..67c785d 100644
--- a/gtdata/doc/fingerprint.lua
+++ b/gtdata/doc/fingerprint.lua
@@ -36,5 +36,5 @@ Return values
 
 - 0  everything went fine ('-check': the comparison was successful;
                            '-duplicates': no duplicates found)
-- 1  an error occured     ('-check': the comparison was not successful;
+- 1  an error occurred     ('-check': the comparison was not successful;
                            '-duplicates': duplicates found)]])
diff --git a/gtdata/modules/external/des56.lua b/gtdata/modules/external/des56.lua
new file mode 100644
index 0000000..21d09ac
--- /dev/null
+++ b/gtdata/modules/external/des56.lua
@@ -0,0 +1 @@
+return _G.des56
diff --git a/gtdata/modules/external/md5.lua b/gtdata/modules/external/md5.lua
index eb1ecd7..af5f259 100644
--- a/gtdata/modules/external/md5.lua
+++ b/gtdata/modules/external/md5.lua
@@ -2,29 +2,18 @@
 -- $Id: md5.lua,v 1.4 2006/08/21 19:24:21 carregal Exp $
 ----------------------------------------------------------------------------
 
-local core = require"md5.core"
-local string = require"string"
-local pairs  = _G.pairs
-local assert = _G.assert
+local string = string or require"string"
 local md5 = _G.md5
 
-module ("md5")
-
--- export md5.core to md5
-for k, v in pairs(core) do
-  if k ~= "_M" and k ~= "_NAME" and k~= "_PACKAGE" then
-    assert(not md5[k]) -- symbol is undefined
-    md5[k] = v -- export symbol
-  end
-end
-
 ----------------------------------------------------------------------------
 -- @param k String with original message.
 -- @return String with the md5 hash value converted to hexadecimal digits
 
-function sumhexa (k)
-  k = core.sum(k)
+function md5.sumhexa(k)
+  k = md5.sum(k)
   return (string.gsub(k, ".", function (c)
            return string.format("%02x", string.byte(c))
          end))
 end
+
+return md5
diff --git a/gtdata/modules/gtdoclib/class_latex.lp b/gtdata/modules/gtdoclib/class_latex.lp
index 3d48eed..d7c1ce6 100644
--- a/gtdata/modules/gtdoclib/class_latex.lp
+++ b/gtdata/modules/gtdoclib/class_latex.lp
@@ -1,2 +1,2 @@
-\section{Class <%=classname%>}
-\label{<%=classname%>}
+\section*{Class <%=classname%>}
+\label{sec:class_<%=classname%>}
diff --git a/gtdata/modules/gtdoclib/classes_latex.lp b/gtdata/modules/gtdoclib/classes_latex.lp
index 4031372..72da054 100644
--- a/gtdata/modules/gtdoclib/classes_latex.lp
+++ b/gtdata/modules/gtdoclib/classes_latex.lp
@@ -1,6 +1,7 @@
 \section*{Table of Classes}
+\label{sec:table_of_classes}
 \begin{itemize}
 <%for _, class in ipairs(classes) do%>
-  \item Class \texttt{<%=class%>}\dotfill page \pageref{<%=class%>}
+  \item Class \texttt{<%=class%>}\dotfill page \pageref{sec:class_<%=class%>}
 <%end%>
 \end{itemize}
diff --git a/gtdata/modules/gtdoclib/docvisitorlatex.lua b/gtdata/modules/gtdoclib/docvisitorlatex.lua
index 8106cab..190d188 100644
--- a/gtdata/modules/gtdoclib/docvisitorlatex.lua
+++ b/gtdata/modules/gtdoclib/docvisitorlatex.lua
@@ -44,9 +44,15 @@ local function include(template, env)
 end
 
 local function trim(s)
+  assert(s)
   return (string.gsub(s, "^%s*(.-)%s*$", "%1"))
 end
 
+local function align(s,count)
+  local replace = string.rep(" ", count)
+  return (replace .. string.gsub(s, ",%s+", ",\n" .. replace))
+end
+
 local function codify(str)
   if (str == nil) then
     str = ""
@@ -64,6 +70,7 @@ local function codify(str)
   res = string.gsub(res, "__(.-)__", "\\emph{%1}")
   res = string.gsub(res, "_", "\\_")
   res = string.gsub(res, "#", "\\#")
+  res = string.gsub(res, "(%w+%^)%s*([%w\\{}]+)", "$%1{%2}$")
   return res
 end
 
@@ -118,15 +125,24 @@ end
 function DocVisitorLaTeX:visit_method(desc)
   assert(desc)
   local name
-  local prototype = desc.name
+  local args
   if desc.rval then
-    name = desc.rval .. " " .. desc.name
+    name = trim(desc.rval) .. " " .. trim(desc.name)
+  else
+    name = trim(desc.name)
+  end
+  local aligncol = string.len(name) + 1
+  if string.find(name, '_') then
+    aligncol = string.find(name, '_') - 1
+  end
+  if desc.args then
+    args = align(trim(desc.args),aligncol)
   else
-    name = desc.rval
+    args=""
   end
-  include("method_latex.lp", { name = codify(name), args = codify(desc.args),
-                         comment = paragraphify(codify(desc.comment)),
-                         prototype = codify(prototype) })
+  include("method_latex.lp",
+          { name = name, args = args,
+          comment = paragraphify(codify(desc.comment)) })
 end
 
 function DocVisitorLaTeX:visit_variable(desc)
@@ -139,8 +155,7 @@ function DocVisitorLaTeX:visit_variable(desc)
     name = desc.name
   end
   include("variable_latex.lp", { name = codify(name),
-                         comment = paragraphify(codify(desc.comment)),
-                         prototype = codify(prototype) })
+                         comment = paragraphify(codify(desc.comment)) })
 end
 
 function DocVisitorLaTeX:visit_funcdef(desc)
diff --git a/gtdata/modules/gtdoclib/footer.lp b/gtdata/modules/gtdoclib/footer.lp
index 4e84944..b022ec0 100644
--- a/gtdata/modules/gtdoclib/footer.lp
+++ b/gtdata/modules/gtdoclib/footer.lp
@@ -1,5 +1,5 @@
 <div id="footer">
-Copyright © 2008-2013
+Copyright © 2008-2016
 The <i>GenomeTools</i> authors.
 Last update: <%=os.date("%Y-%m-%d")%>
 </div>
diff --git a/gtdata/modules/gtdoclib/libgenometools_header_latex.lp b/gtdata/modules/gtdoclib/libgenometools_header_latex.lp
index 2c3abfe..fbdc3a1 100644
--- a/gtdata/modules/gtdoclib/libgenometools_header_latex.lp
+++ b/gtdata/modules/gtdoclib/libgenometools_header_latex.lp
@@ -1 +1,2 @@
-\chapter{API Reference}
+\chapter*{API Reference}
+\label{ch:api_reference}
diff --git a/gtdata/modules/gtdoclib/method_latex.lp b/gtdata/modules/gtdoclib/method_latex.lp
index 4463762..2b0d727 100644
--- a/gtdata/modules/gtdoclib/method_latex.lp
+++ b/gtdata/modules/gtdoclib/method_latex.lp
@@ -1,6 +1,9 @@
 \begin{minipage}{\textwidth}
 \vspace{3mm}
-\texttt{<%=name%><%if args ~= "" then %>(\textcolor{arggrey}{<%=args%>})<%end%>}\\[-.4cm]
+\begin{lstlisting}
+<%=name%><%if args ~= "" then %>(
+<%=args%>)<%end%>
+\end{lstlisting}
 
 \hangindent3em
 \hangafter=0
diff --git a/gtdata/modules/gtdoclib/module_latex.lp b/gtdata/modules/gtdoclib/module_latex.lp
index a8b25d9..9493221 100644
--- a/gtdata/modules/gtdoclib/module_latex.lp
+++ b/gtdata/modules/gtdoclib/module_latex.lp
@@ -1,2 +1,2 @@
-\section{Module <%=modulename%>}
+\section*{Module <%=modulename%>}
 \label{<%=modulename%>}
diff --git a/gtdata/modules/gtdoclib/modules_latex.lp b/gtdata/modules/gtdoclib/modules_latex.lp
index 3804e04..27371bd 100644
--- a/gtdata/modules/gtdoclib/modules_latex.lp
+++ b/gtdata/modules/gtdoclib/modules_latex.lp
@@ -1,4 +1,5 @@
 \section*{Table of Modules}
+\label{sec:table_of_modules}
 \begin{itemize}
 <%for _, module in ipairs(modules) do%>
   \item Module \texttt{<%=module%>}\dotfill page \pageref{<%=module%>}
diff --git a/gtdata/modules/gtdoclib/sole_function_latex.lp b/gtdata/modules/gtdoclib/sole_function_latex.lp
index fe7bc4d..d5534d2 100644
--- a/gtdata/modules/gtdoclib/sole_function_latex.lp
+++ b/gtdata/modules/gtdoclib/sole_function_latex.lp
@@ -1 +1,2 @@
-\section{Sole functions}
+\section*{Sole functions}
+\label{sec:sole_functions}
diff --git a/gtdata/spec/output_drivers/tabular b/gtdata/spec/output_drivers/tabular
new file mode 100644
index 0000000..0261330
--- /dev/null
+++ b/gtdata/spec/output_drivers/tabular
@@ -0,0 +1,72 @@
+--[[
+  This is an output template for tabular text output format.
+]]
+
+function tablelength(T)
+  local count = 0
+  for _ in pairs(T) do count = count + 1 end
+  return count
+end
+
+function print_aspects(aspects, feature)
+  for aspect, aspect_details in pairs(aspects) do
+    for n, node in ipairs(aspect_details.nodes) do
+      local id = ""
+      local seqid = ''
+      local rng_start = ''
+      local rng_end = ''
+      if node.ID then
+        id = node.ID
+      end
+      -- meta and comment nodes don't have seqids
+      if feature ~= 'meta' and feature ~= 'comment' then
+        seqid = node.node:get_seqid()
+      end
+      -- sequence and comment nodes don't have ranges
+      if feature ~= 'sequence' and feature ~= 'comment' then
+        rng_start = node.node:get_range():get_start()
+        rng_end = node.node:get_range():get_end()
+      end
+      for _, msg in ipairs(node.failure_messages) do
+        template_print(feature .. "\t"
+                         .. aspect .. "\t"
+                         .. id .. "\t"
+                         .. seqid .. "\t"
+                         .. rng_start .. "\t"
+                         .. rng_end .. "\t"
+                         .. "'" .. msg .. "'\n")
+      end
+      for _, msg in ipairs(node.runtime_error_messages) do
+        template_print(feature .. "\t"
+                         .. aspect .. "\t"
+                         .. id .. "\t"
+                         .. seqid .. "\t"
+                         .. rng_start .. "\t"
+                         .. rng_end .. "\t"
+                         .. "'" .. msg .. "'\n")
+      end
+    end
+  end
+end
+
+if tablelength(features) > 0 then
+  for feature, aspects in pairs(features) do
+    print_aspects(aspects, feature)
+  end
+end
+
+if tablelength(metas) > 0 then
+  print_aspects(metas, "meta")
+end
+
+if tablelength(regions) > 0 then
+  print_aspects(regions, "region")
+end
+
+if tablelength(comments) > 0 then
+  print_aspects(comments, "comment")
+end
+
+if tablelength(sequences) > 0 then
+  print_aspects(sequences, "sequence")
+end
\ No newline at end of file
diff --git a/gtdata/spec/speclib.lua b/gtdata/spec/speclib.lua
index c07f7ad..aa4a645 100644
--- a/gtdata/spec/speclib.lua
+++ b/gtdata/spec/speclib.lua
@@ -211,3 +211,17 @@ matchers = {
   end;
 }
 matchers.should_equal = matchers.should_be
+
+-- also make matchers available as expect(foo).to_X() instead of
+-- expect(foo).should_X() to make them more similar to natural language
+_matchers = {}
+for m, f in pairs(matchers) do
+  if m:match('^should_') then
+    if m:match('^should_not_') then
+      _matchers[m:gsub('should_not_', 'not_to_')] = f
+    end
+    _matchers[m:gsub('should_', 'to_')] = f
+  end
+  _matchers[m] = f
+end
+matchers = _matchers
\ No newline at end of file
diff --git a/gtpython/tests/test_version.py b/gtpython/tests/test_version.py
index e62382e..2f87234 100644
--- a/gtpython/tests/test_version.py
+++ b/gtpython/tests/test_version.py
@@ -22,7 +22,7 @@ import unittest
 class VersionTest(unittest.TestCase):
 
     def test_has_version(self):
-        self.assertIsNotNone(gt.__version__)
+        self.assertNotEqual(gt.__version__, None)
 
 if __name__ == "__main__":
-    unittest.main()
\ No newline at end of file
+    unittest.main()
diff --git a/gtscripts/gtdoc.lua b/gtscripts/gtdoc.lua
index 03669e8..2d76c5c 100644
--- a/gtscripts/gtdoc.lua
+++ b/gtscripts/gtdoc.lua
@@ -104,6 +104,20 @@ local function process_file(filename, be_verbose, is_lua)
   end
 end
 
+local function process_single_file(filename, be_verbose, is_lua)
+  assert(filename)
+  if (is_header(filename) or is_lua_file(filename)) then
+    local ast = doc_parser:parse(filename, be_verbose, is_lua)
+    if ast and be_verbose then
+      print("showing ast:")
+      show_rec_array(ast, 0)
+    end
+    if ast then
+      doc_base:process_ast(ast, be_verbose)
+    end
+  end
+end
+
 local export = nil
 local is_lua = nil
 
@@ -121,7 +135,7 @@ assert(export)
 if file_mode then
   for _, f in ipairs(file_list) do
     local filename = gt_home .. "/" .. f
-    process_file(filename, be_verbose, is_lua)
+    process_single_file(filename, be_verbose, is_lua)
   end
 else
   for _, v in ipairs(export) do
diff --git a/scripts/collect-mappings.rb b/scripts/collect-mappings.rb
new file mode 100755
index 0000000..108af5a
--- /dev/null
+++ b/scripts/collect-mappings.rb
@@ -0,0 +1,26 @@
+#!/usr/bin/env ruby
+
+# Print the sensitivity of given matchfile(s).
+# This script is used by sim-read-mapping.sh. 
+
+require "set"
+
+if ARGV.length == 0
+  STDERR.puts "Usage: #{$0} <numreads> <matchfile>"
+  exit 1
+end
+
+numreads=ARGV[0].to_i
+queryseqnums = Set.new()
+
+ARGV.shift
+ARGV.each do |filename|
+  File.open(filename).each_line do |line|
+    if not line.match(/^#/)
+      m = line.split(/\s/)
+      queryseqnum = m[5].to_i
+      queryseqnums.add(queryseqnum)
+    end
+  end
+end
+printf("%.2f\n",100.0 * queryseqnums.length.to_f/numreads.to_f)
diff --git a/scripts/coverage-MEM.rb b/scripts/coverage-MEM.rb
new file mode 100755
index 0000000..7c2d9f9
--- /dev/null
+++ b/scripts/coverage-MEM.rb
@@ -0,0 +1,97 @@
+#!/usr/bin/env ruby
+
+# Determine how many MEMs computed by repfind are contained in local alignments
+# computed by seed_extend.
+
+require "scripts/evalseedhash.rb"
+
+def makesystemcall(argstring, proceed=false)
+  if not system(argstring)
+    STDERR.puts "system \"#{argstring}\" failed: errorcode #{$?}"
+    exit 1 unless proceed
+  end
+end
+
+# binary search and sort decisions
+def comparefunc(mem, ali, sorting=false)
+  if mem[:seq1] != ali[:seq1] then return mem[:seq1] <=> ali[:seq1] end
+  if mem[:seq2] != ali[:seq2] then return mem[:seq2] <=> ali[:seq2] end
+  if sorting then
+    return mem[:start1] <=> ali[:start1]
+  elsif mem[:start1] < ali[:start1] then  # alignment starts behind MEM
+    return -1
+  else
+    return 0
+  end
+end
+
+def calculateratio(repfindmatches, seedextmatches)
+  miss = 0
+  succ = 0
+  alignments = seedextmatches.values.sort{|a,b|comparefunc(a,b,true)}
+  repfindmatches.each_value{|mem|
+    found = false
+    idx = (0...alignments.size).bsearch{|ali| comparefunc(mem, alignments[ali])}
+    if not idx.nil? then
+      while idx >= 0 and comparefunc(mem, alignments[idx]) == 0
+        idx -= 1
+      end
+      idx += 1
+      while not found and comparefunc(mem, alignments[idx]) == 0
+        found = (alignments[idx][:start1] + alignments[idx][:len1] >=
+                 mem[:start1] + mem[:len1] and
+                 alignments[idx][:start2] <= mem[:start2] and
+                 alignments[idx][:start2] + alignments[idx][:len2] >=
+                 mem[:start2] + mem[:len2])
+        idx += 1
+      end
+    end
+    if found then
+      succ += 1
+    else
+      miss += 1
+      puts "MEM not found (#{mem[:seq1]}, #{mem[:seq2]}, " +
+           "#{mem[:start1]}+#{mem[:len1]}, #{mem[:start2]}+#{mem[:len2]})"
+    end
+  }
+  puts "success=#{succ}  miss=#{miss}  total=#{repfindmatches.size}  " +
+       "ratio=#{succ*100/repfindmatches.size}%"
+end
+
+if __FILE__ == $0
+  use_apos = ""
+  if ARGV.size == 4 and ARGV[3] == "a" then
+    use_apos = "-use-apos "
+  elsif ARGV.size != 3 then
+    puts "Usage: #{$0} <referencefile> <queryfile> <leastlen> [a]"
+    exit 1
+  end
+  referencefile = ARGV[0]
+  queryfile = ARGV[1]
+  leastlen = ARGV[2].to_i
+  filedir="coverage-MEM"
+  makesystemcall("rm -rf #{filedir}")
+  makesystemcall("mkdir -p #{filedir}")
+  
+  # create index files
+  makesystemcall("bin/gt suffixerator -tis -sds no -des no -md5 -suf -lcp " +
+                 "-indexname #{filedir}/reference -db #{referencefile}")
+  makesystemcall("bin/gt encseq encode -des no -sds no -md5 -indexname " +
+                 "#{filedir}/query #{queryfile}")
+  # run repfind and seed_extend
+  makesystemcall("bin/gt repfind -ii #{filedir}/reference -q #{queryfile} " +
+                 "-l #{leastlen} -p -f > #{filedir}/repfind.out")
+  makesystemcall("bin/gt seed_extend -ii #{filedir}/reference " +
+                 "-qii #{filedir}/query -l #{leastlen} -mincoverage 1 " +
+                 "-seedlength #{[leastlen, 32].min} -minidentity 99 " +
+                 "#{use_apos} > #{filedir}/seedext.out")
+  # compare results
+  repfindmatches = readmatchesfromfile("#{filedir}/repfind.out")
+  if repfindmatches.size > 0 then
+    seedextmatches = readmatchesfromfile("#{filedir}/seedext.out")
+    calculateratio(repfindmatches, seedextmatches)
+  else
+    puts "no results"
+  end
+end
+
diff --git a/scripts/esq-in-bytes.sh b/scripts/esq-in-bytes.sh
index a454bd0..47d25fd 100755
--- a/scripts/esq-in-bytes.sh
+++ b/scripts/esq-in-bytes.sh
@@ -9,7 +9,8 @@ do
   # Now do something with the sequence
   for mode in greedy xdrop
   do
-    ${GTDIR}/bin/gt seed_extend -seedlength 14 -extend${mode} -ii sfx -v -maxfreq 20 -seed-display > sfx.matches
-    ${GTDIR}/bin/gt dev show_seedext -f sfx.matches -a
+    echo $filename
+    ${GTDIR}/bin/gt -j 4 seed_extend -seqlength-display -parts 2 -extend${mode} -ii sfx -v -maxfreq 20 -seed-display -kmerfile no > sfx.matches
+    ${GTDIR}/bin/gt dev show_seedext -seqlength-display -f sfx.matches -a -sort
   done
 done
diff --git a/scripts/gen-intsets.rb b/scripts/gen-intsets.rb
index 5cf792b..32b5272 100755
--- a/scripts/gen-intsets.rb
+++ b/scripts/gen-intsets.rb
@@ -1,6 +1,6 @@
 #!/usr/bin/env ruby
-# Copyright (c) 2014 Dirk Willrodt <willrodt at zbh.uni-hamburg.de>
-# Copyright (c) 2014 Center for Bioinformatics, University of Hamburg
+# Copyright (c) 2014-2016 Dirk Willrodt <willrodt at zbh.uni-hamburg.de>
+# Copyright (c) 2014-2016 Center for Bioinformatics, University of Hamburg
 
 # Permission to use, copy, modify, and distribute this software for any
 # purpose with or without fee is hereby granted, provided that the above
@@ -260,7 +260,7 @@ void gt_intset_<%=bits%>_add(GtIntset *intset, GtUword elem)
   members->previouselem = elem;
 }
 
-static GtUword gt_intset_<%=bits%>_sec_idx_largest_seq(GtUword *sectionstart,
+static GtUword gt_intset_<%=bits%>_sec_idx_largest_leq(GtUword *sectionstart,
                                                \
 <% if bits != 8 %> <% end %>GtUword idx)
 {
@@ -271,27 +271,27 @@ static GtUword gt_intset_<%=bits%>_sec_idx_largest_seq(GtUword *sectionstart,
 }
 
 static GtUword
-gt_intset_<%=bits%>_binarysearch_sec_idx_largest_seq(GtUword *sectionstart,
+gt_intset_<%=bits%>_binarysearch_sec_idx_largest_leq(GtUword *secstart_begin,
                                              \
-<% if bits != 8 %> <% end %>GtUword *secend,
+<% if bits != 8 %> <% end %>GtUword *secstart_end,
                                              \
 <% if bits != 8 %> <% end %>GtUword idx)
 {
   GtUword *midptr = NULL, *found = NULL,
-          *startorig = sectionstart;
-  if (*sectionstart <= idx)
-    found = sectionstart;
-  while (sectionstart < secend) {
-    midptr = sectionstart + (GtUword) GT_DIV2(secend - sectionstart);
+          *startorig = secstart_begin;
+  if (*secstart_begin <= idx)
+    found = secstart_begin;
+  while (secstart_begin < secstart_end) {
+    midptr = secstart_begin + (GtUword) GT_DIV2(secstart_end - secstart_begin);
     if (*midptr < idx) {
       found = midptr;
       if (*midptr == idx) {
         break;
       }
-      sectionstart = midptr + 1;
+      secstart_begin = midptr + 1;
     }
     else {
-      secend = midptr - 1;
+      secstart_end = midptr - 1;
     }
   }
   gt_assert(found != NULL);
@@ -307,7 +307,7 @@ static GtUword gt_intset_<%=bits%>_get_test(GtIntset *intset, GtUword idx)
   GtUword *sectionstart = members->sectionstart;
   gt_assert(idx < members->nextfree);
 
-  return (gt_intset_<%=bits%>_sec_idx_largest_seq(sectionstart, idx) <<
+  return (gt_intset_<%=bits%>_sec_idx_largest_leq(sectionstart, idx) <<
          members->logsectionsize) + intset_<%=bits%>->elements[idx];
 }
 
@@ -319,7 +319,7 @@ GtUword gt_intset_<%=bits%>_get(GtIntset *intset, GtUword idx)
   GtUword *sectionstart = members->sectionstart;
   gt_assert(idx < members->nextfree);
 
-  quotient = gt_intset_<%=bits%>_binarysearch_sec_idx_largest_seq(
+  quotient = gt_intset_<%=bits%>_binarysearch_sec_idx_largest_leq(
                                       sectionstart,
                                       sectionstart + members->numofsections - 1,
                                       idx);
diff --git a/scripts/gen-randseq.rb b/scripts/gen-randseq.rb
index 6088f6d..f988ccc 100755
--- a/scripts/gen-randseq.rb
+++ b/scripts/gen-randseq.rb
@@ -3,6 +3,40 @@
 require 'optparse'
 require 'ostruct'
 
+# Add code to check whether a class is already defined
+def class_exists?(class_name)
+  klass = Module.const_get(class_name)
+  return klass.is_a?(Class)
+rescue NameError
+  return false
+end
+
+# Ruby < 1.9.2 does not have the Random class.
+# Add a small substitute that does something similar.
+if !(class_exists?('Random')) then
+  class Random
+    def initialize(seed = nil)
+      if seed.nil? then
+        seed = self.new_seed
+      end
+      @seed = seed
+      Kernel.srand(seed)
+    end
+
+    def self.new_seed
+      return Kernel.srand()
+    end
+
+    def rand(vmax = nil)
+      if vmax.nil? then
+        return Kernel.rand()
+      else
+        return (vmax * Kernel.rand()).to_i
+      end
+    end
+  end
+end
+
 class String
   def reverse_complement
     return self.reverse.tr("ACGTacgt","TGCAtgca")
@@ -24,7 +58,7 @@ class Randomsequence
   def sequence(len)
     s = Array.new()
     0.upto(len-1).each do
-      s.push(@alphabet[@rgen.rand * @asize])
+      s.push(@alphabet[@rgen.rand * @asize, 1])
     end
     return s.join
   end
@@ -39,15 +73,15 @@ class Randomsequence
       if r <= err_prob
         r = @rgen.rand
         if r <= 0.8
-          s.push(alphabet[@rgen.rand * asize])
+          s.push(alphabet[@rgen.rand * asize, 1])
           i += 1
         elsif r <= 0.9
-          s.push(alphabet[@rgen.rand * asize])
+          s.push(alphabet[@rgen.rand * asize, 1])
         else
           i += 1
         end
       else
-        s.push(sequence[i])
+        s.push(sequence[i, 1])
         i += 1
       end
       if i >= len
diff --git a/scripts/sim-read-mapping.sh b/scripts/sim-read-mapping.sh
new file mode 100755
index 0000000..f807d3e
--- /dev/null
+++ b/scripts/sim-read-mapping.sh
@@ -0,0 +1,87 @@
+#!/bin/sh
+
+# Take <numreads> samples from <inputfile> and map the samples to the reference. 
+# Use collect-mappings.rb for determining sensitivity and save it to a table.
+
+set -e
+
+if test $# -ne 2
+then
+  echo "Usage: $0 <numreads> <inputfile>"
+  exit 1
+fi
+numreads=$1
+inputfile=$2
+readlength=150
+readset=reads.fa
+outfile1=greedy-noweak-mye.tsv
+outfile2=greedy-weak-mye.tsv
+outfile3=greedy-noweak-nomye.tsv
+outfile4=greedy-weak-nomye.tsv
+mason_bin="../mason2/bin"
+gt_bin="./bin"
+#da_bin="../myers/"
+
+minlength=`expr ${readlength} \* 80`
+minlength=`expr ${minlength} \/ 100`
+$gt_bin/gt encseq encode -indexname reference -sds no -md5 no -des no ${inputfile}
+#$gt_bin/../scripts/convert2myersformat.rb $inputfile > reference.fasta
+#$da_bin/DAZZ_DB/fasta2DB reference.db reference.fasta
+#inputfile=reference.fasta
+
+for minid in {70..99}; do printf "\t%d" $minid; done > $outfile1
+for minid in {70..99}; do printf "\t%d" $minid; done > $outfile2
+for minid in {70..99}; do printf "\t%d" $minid; done > $outfile3
+for minid in {70..99}; do printf "\t%d" $minid; done > $outfile4
+
+for err in {0..30}
+do
+  printf "\n%d" $err >> $outfile1
+  printf "\n%d" $err >> $outfile2
+  printf "\n%d" $err >> $outfile3
+  printf "\n%d" $err >> $outfile4
+
+  indel=$(echo "scale=6; ${err}/3000"|bc)
+  misma=$(echo "scale=6; ${err}/100-2*${indel}"|bc)
+  $mason_bin/mason_simulator -ir $inputfile -n $numreads -o ${readset} \
+                --illumina-read-length ${readlength} --embed-read-info \
+                --illumina-prob-mismatch $misma \
+                --illumina-prob-deletion $indel \
+                --illumina-prob-insert $indel
+  $gt_bin/gt encseq encode -indexname query -sds no -md5 no -des no ${readset}
+  #$gt_bin/../scripts/convert2myersformat.rb $readset > query.fasta
+  #$da_bin/DAZZ_DB/fasta2DB query.db query.fasta
+
+  for minid in {70..99}
+  do
+    $gt_bin/gt seed_extend -l ${minlength} -v -seedlength 14 -maxfreq 20 -bias-parameters \
+         -ii reference -qii query -minidentity $minid > tmp.matches
+    #$da_bin/DALIGNER/daligner -l${minlength} -I -A -Y -k14 -t21 -e0.${minid} \
+    #                          query.db reference.db > tmp.matches
+    #grep '^#' tmp.matches
+    sensitivity=`./collect-mappings.rb ${numreads} tmp.matches`
+    printf "\t${sensitivity}" >> $outfile1
+    rm -f tmp.matches *.las
+
+    $gt_bin/gt seed_extend -l ${minlength} -v -seedlength 14 -maxfreq 20 -bias-parameters \
+         -ii reference -qii query -minidentity $minid -weakends > tmp.matches
+    sensitivity=`./collect-mappings.rb ${numreads} tmp.matches`
+    printf "\t${sensitivity}" >> $outfile2
+    rm -f tmp.matches *.las
+
+    $gt_bin/gt seed_extend -l ${minlength} -v -seedlength 14 -maxfreq 20 \
+         -ii reference -qii query -minidentity $minid > tmp.matches
+    sensitivity=`./collect-mappings.rb ${numreads} tmp.matches`
+    printf "\t${sensitivity}" >> $outfile3
+    rm -f tmp.matches *.las
+
+    $gt_bin/gt seed_extend -l ${minlength} -v -seedlength 14 -maxfreq 20 \
+         -ii reference -qii query -minidentity $minid -weakends > tmp.matches
+    sensitivity=`./collect-mappings.rb ${numreads} tmp.matches`
+    printf "\t${sensitivity}" >> $outfile4
+    rm -f tmp.matches *.las
+  done
+  rm -f ${readset} query.*
+done
+rm -f reference.*
+
diff --git a/src/core/compact_ulong_store.h b/src/core/compact_ulong_store.h
index b21b2ed..a2004ca 100644
--- a/src/core/compact_ulong_store.h
+++ b/src/core/compact_ulong_store.h
@@ -40,7 +40,7 @@ size_t               gt_compact_ulong_store_size(GtUword numofentries,
                                                  unsigned int bitsperentry);
 
 /* Return element stored in <cus> at position <idx> cast to GtUword */
-GtUword        gt_compact_ulong_store_get(const GtCompactUlongStore *cus,
+GtUword              gt_compact_ulong_store_get(const GtCompactUlongStore *cus,
                                                 GtUword idx);
 
 /* Set element at position <idx> in <cus> to <value> */
diff --git a/src/core/encseq.c b/src/core/encseq.c
index 9056591..514d5a8 100644
--- a/src/core/encseq.c
+++ b/src/core/encseq.c
@@ -693,7 +693,16 @@ bool gt_encseq_contains_special(const GtEncseq *encseq,
                                 GtUword len)
 {
   gt_assert(len >= 1UL && encseq != NULL &&
-            startpos + len <= encseq->totallength);
+            startpos + len <= encseq->logicaltotallength);
+  if (encseq->hasmirror) {
+    if (startpos > encseq->totallength) {
+      gt_readmode_invert(readmode);
+      startpos = GT_REVERSEPOS(encseq->totallength,
+                               startpos - encseq->totallength - 1);
+    } else if (startpos == encseq->totallength) {
+        return true;
+    }
+  }
   return encseq->delivercontainsspecial(encseq, readmode, esr, startpos, len);
 }
 
@@ -3289,7 +3298,7 @@ void gt_specialrangeiterator_reinit_with_startpos(GtSpecialrangeiterator *sri,
   sri->lengthofspecialrange = 0;
   if (sri->esr != NULL)
     gt_encseq_reader_delete(sri->esr);
-    sri->esr = gt_encseq_create_reader_with_readmode(encseq,
+  sri->esr = gt_encseq_create_reader_with_readmode(encseq,
                                                    moveforward
                                                      ? GT_READMODE_FORWARD
                                                      : GT_READMODE_REVERSE,
diff --git a/src/core/encseq_col.c b/src/core/encseq_col.c
index dfed01c..be790c0 100644
--- a/src/core/encseq_col.c
+++ b/src/core/encseq_col.c
@@ -25,6 +25,7 @@
 #include "core/md5_seqid.h"
 #include "core/seq_col_rep.h"
 #include "core/seq_info_cache.h"
+#include "core/str.h"
 #include "core/undef_api.h"
 
 struct GtEncseqCol {
@@ -126,11 +127,9 @@ static void gt_encseq_col_enable_match_desc_start(GtSeqCol *sc)
   GtEncseqCol *esc;
   GtUword j;
   GtSeqInfo seq_info;
-  char buf[BUFSIZ], fmt[32];
-  gt_assert(sc);
+  GtStr *descbuf = gt_str_new();
   esc = gt_encseq_col_cast(sc);
   esc->matchstart = true;
-  (void) sprintf(fmt, "%%%ds", BUFSIZ-1);
   /* pre-cache seqids for faster search */
   if (!esc->grep_cache)
     esc->grep_cache = gt_seq_info_cache_new();
@@ -139,21 +138,21 @@ static void gt_encseq_col_enable_match_desc_start(GtSeqCol *sc)
     GtUword desc_len;
     desc = gt_encseq_description(esc->encseq, &desc_len, j);
     gt_assert(desc);
-    strncpy(buf, desc, desc_len * sizeof (char));
-    buf[desc_len] = '\0';
-    (void) sscanf(desc, fmt, buf);
+    gt_str_reset(descbuf);
+    gt_str_append_cstr_nt(descbuf, desc, desc_len);
     seq_info.filenum = gt_encseq_filenum(esc->encseq,
                                          gt_encseq_seqstartpos(esc->encseq, j));
     seq_info.seqnum = j - gt_encseq_filenum_first_seqnum(esc->encseq,
                                                          seq_info.filenum);
-    if (!gt_seq_info_cache_get(esc->grep_cache, buf))
-      gt_seq_info_cache_add(esc->grep_cache, buf, &seq_info);
+    if (!gt_seq_info_cache_get(esc->grep_cache, gt_str_get(descbuf)))
+      gt_seq_info_cache_add(esc->grep_cache, gt_str_get(descbuf), &seq_info);
     else {
       if (!esc->duplicates)
         esc->duplicates = gt_hashmap_new(GT_HASH_STRING, NULL, NULL);
-      gt_hashmap_add(esc->duplicates, buf, (void*) 1);
+      gt_hashmap_add(esc->duplicates, gt_str_get(descbuf), (void*) 1);
     }
   }
+  gt_str_delete(descbuf);
 }
 
 static GtUword gt_encseq_col_get_sequence_length(const GtSeqCol *sc,
@@ -199,7 +198,7 @@ static int gt_encseq_col_grep_desc_md5(GtSeqCol *sc, const char **md5,
   gt_assert(esc && md5 && seqid);
   had_err = gt_encseq_col_do_grep_desc(esc, &filenum, &seqnum, seqid, err);
   if (!had_err)
-    *md5 = gt_seq_col_get_md5_fingerprint(sc, seqnum, filenum);
+    *md5 = gt_seq_col_get_md5_fingerprint(sc, filenum, seqnum);
   return had_err;
 }
 
@@ -214,9 +213,10 @@ static int gt_encseq_col_grep_desc_desc(GtSeqCol *sc, GtStr *desc,
   gt_assert(esc && desc && seqid);
   had_err = gt_encseq_col_do_grep_desc(esc, &filenum, &seqnum, seqid, err);
   if (!had_err) {
-    const char *mydesc = gt_seq_col_get_description(sc, seqnum, filenum);
+    char *mydesc = gt_seq_col_get_description(sc, filenum, seqnum);
     if (mydesc)
       gt_str_append_cstr(desc, mydesc);
+    gt_free(mydesc);
   }
   return had_err;
 }
@@ -234,7 +234,7 @@ static int gt_encseq_col_grep_desc_sequence_length(GtSeqCol *sc,
   gt_assert(esc && length && seqid);
   had_err = gt_encseq_col_do_grep_desc(esc, &filenum, &seqnum, seqid, err);
   if (!had_err)
-    *length = gt_seq_col_get_sequence_length(sc, seqnum, filenum);
+    *length = gt_seq_col_get_sequence_length(sc, filenum, seqnum);
   return had_err;
 }
 
@@ -412,7 +412,7 @@ static char* gt_encseq_col_get_description(const GtSeqCol *sc,
   gt_assert(encseq_seqnum < gt_encseq_num_of_sequences(esc->encseq));
   desc = gt_encseq_description(esc->encseq, &desclen, encseq_seqnum);
   gt_assert(desc && desclen > 0);
-  return gt_cstr_dup_nt(desc, desclen);;
+  return gt_cstr_dup_nt(desc, desclen);
 }
 
 static GtUword gt_encseq_col_get_sequence_length(const GtSeqCol *sc,
diff --git a/src/core/error_api.h b/src/core/error_api.h
index b1896da..019c627 100644
--- a/src/core/error_api.h
+++ b/src/core/error_api.h
@@ -26,7 +26,7 @@
    This class is used for the handling of ___user errors___ in __GenomeTools__.
    Thereby, the actual <GtError> object is used to store the __error message__
    while it is signaled by the return value of the called function, if an error
-   occured.
+   occurred.
 
    By convention in __GenomeTools__, the <GtError> object is always passed into
    a function as the last parameter and -1 (or <NULL> for constructors) is used
diff --git a/src/core/fa.h b/src/core/fa.h
index bbb014e..8c25dd0 100644
--- a/src/core/fa.h
+++ b/src/core/fa.h
@@ -89,7 +89,7 @@ enum tmpfp_flags
   TMPFP_DEFAULT_FLAGS = 0,
 };
 #define gt_xtmpfp_generic(template_code, flags) \
-        gt_xtmpfp_generic_func(template_code, TMPFP_DEFAULT_FLAGS, \
+        gt_xtmpfp_generic_func(template_code, flags, \
                                __FILE__, __LINE__)
 FILE*   gt_xtmpfp_generic_func(GtStr *template_code, enum tmpfp_flags flags,
                                const char*, int);
diff --git a/src/core/grep.c b/src/core/grep.c
index c37f9fd..1ddc2cf 100644
--- a/src/core/grep.c
+++ b/src/core/grep.c
@@ -23,7 +23,7 @@
 #include "core/ma.h"
 #include "core/str.h"
 #include "core/unused_api.h"
-#include "tre.h"
+#include <tre/tre.h>
 
 static void grep_error(int errcode, regex_t *matcher, GtError *err)
 {
diff --git a/src/core/hashtable.h b/src/core/hashtable.h
index 80b1ec2..6207c0e 100644
--- a/src/core/hashtable.h
+++ b/src/core/hashtable.h
@@ -81,14 +81,14 @@ int          gt_hashtable_remove(GtHashtable*, const void *elem);
 /**
  * @brief iterate over the hashtable in key order given by compare
  * function <cmp>
- * @return 0 => no error, -1 => error occured
+ * @return 0 => no error, -1 => error occurred
  */
 int          gt_hashtable_foreach_ordered(GtHashtable *ht, Elemvisitfunc iter,
                                           void *data, GtCompare cmp,
                                           GtError *err);
 /**
  * @brief iterate over the hashtable in implementation-defined order
- * @return 0 => no error, -1 => error occured
+ * @return 0 => no error, -1 => error occurred
  */
 int          gt_hashtable_foreach(GtHashtable *ht, Elemvisitfunc iter,
                                   void *data, GtError *err);
diff --git a/src/core/intbits.h b/src/core/intbits.h
index 76c5179..37836c3 100644
--- a/src/core/intbits.h
+++ b/src/core/intbits.h
@@ -192,7 +192,7 @@ static inline void gt_bitsequence_tostring_units(char *buffer,
 }
 
 /*@unused@*/ static inline GtUword gt_unitsoftwobitencoding(GtUword
-                                                                  totallength)
+                                                            totallength)
 {
   uint64_t unitsoftwobitencoding;
 
diff --git a/src/core/option_api.h b/src/core/option_api.h
index d3935a1..cbbc7ec 100644
--- a/src/core/option_api.h
+++ b/src/core/option_api.h
@@ -34,14 +34,14 @@ typedef struct GtOption GtOption;
 
 enum GtOPrval {
   GT_OPTION_PARSER_OK,           /* Everything went fine. */
-  GT_OPTION_PARSER_ERROR,        /* An error occured during option parsing. */
+  GT_OPTION_PARSER_ERROR,        /* An error occurred during option parsing. */
   GT_OPTION_PARSER_REQUESTS_EXIT /* The option parser requests an exit, because
                                     option -help, -help+, -helpdev, or -version
                                     was used. */
 };
 
 /* Possible option parser return values. <GT_OPTION_PARSER_OK> denotes that
-   everything went fine, <GT_OPTION_PARSER_ERROR> that an error occured during
+   everything went fine, <GT_OPTION_PARSER_ERROR> that an error occurred during
    option parsing, and <GT_OPTION_PARSER_REQUESTS_EXIT> that the option parser
    requests an exit, because option <-help>, <-help+>, <-helpdev> or <-version>
    was used. */
diff --git a/src/core/seq_iterator_api.h b/src/core/seq_iterator_api.h
index 36145c5..4f4fb04 100644
--- a/src/core/seq_iterator_api.h
+++ b/src/core/seq_iterator_api.h
@@ -40,7 +40,7 @@ void            gt_seq_iterator_set_sequence_output(GtSeqIterator*, bool);
 /* Get next <sequence> (of length <len>) and <description> from <seqit>.
    Note that <seqit> retains ownership of the <sequence> and <description>.
    Returns 1 if another sequence could be parsed, 0 if all given sequence
-   files are exhausted, And -1 if an error occured (<err> is set
+   files are exhausted, And -1 if an error occurred (<err> is set
    accordingly). */
 int             gt_seq_iterator_next(GtSeqIterator *seqit,
                                      const GtUchar **sequence,
diff --git a/src/extended/affinealign.c b/src/extended/affinealign.c
index c8b16bb..93a6454 100644
--- a/src/extended/affinealign.c
+++ b/src/extended/affinealign.c
@@ -26,12 +26,12 @@
 
 #include "extended/affinealign.h"
 
-static void affinealign_fill_table(AffinealignDPentry **dptable,
+static void affinealign_fill_table(GtAffinealignDPentry **dptable,
                                    const GtUchar *u, GtUword ulen,
                                    const GtUchar *v, GtUword vlen,
                                    GtUword matchcost, GtUword mismatchcost,
                                    GtUword gap_opening, GtUword gap_extension,
-                                   AffineAlignEdge edge,
+                                   GtAffineAlignEdge edge,
                                    const GtScoreHandler *scorehandler)
 {
   GtUword i, j, Rvalue, Dvalue, Ivalue, minvalue,rcost;
@@ -138,12 +138,12 @@ static void affinealign_fill_table(AffinealignDPentry **dptable,
   }
 }
 
-GtWord affinealign_traceback(GtAlignment *align,
-                            AffinealignDPentry * const *dptable,
-                            GtUword i, GtUword j)
+GtWord gt_affinealign_traceback(GtAlignment *align,
+                                GtAffinealignDPentry * const *dptable,
+                                GtUword i, GtUword j)
 {
   GtWord minvalue;
-  AffineAlignEdge edge;
+  GtAffineAlignEdge edge;
   gt_assert(align && dptable);
   /* determine min{A_affine(m,n,x) | x in {R,D,I}} */
   minvalue = MIN3(dptable[i][j].Rvalue, dptable[i][j].Dvalue,
@@ -190,7 +190,7 @@ GtAlignment* gt_affinealign(const GtUchar *u, GtUword ulen,
                             GtUword gap_opening,
                             GtUword gap_extension)
 {
-  AffinealignDPentry **dptable;
+  GtAffinealignDPentry **dptable;
   GtAlignment *align;
 
   gt_assert(u && v);
@@ -198,7 +198,7 @@ GtAlignment* gt_affinealign(const GtUchar *u, GtUword ulen,
   affinealign_fill_table(dptable, u, ulen, v, vlen, matchcost, mismatchcost,
                          gap_opening, gap_extension, Affine_X, NULL);
   align = gt_alignment_new_with_seqs(u, ulen,  v, vlen);
-  affinealign_traceback(align, dptable, ulen, vlen);
+  gt_affinealign_traceback(align, dptable, ulen, vlen);
   gt_array2dim_delete(dptable);
   return align;
 }
@@ -209,30 +209,30 @@ GtWord gt_affinealign_with_Management(GtLinspaceManagement *spacemanager,
                                      const GtUchar *u, GtUword ulen,
                                      const GtUchar *v, GtUword vlen)
 {
-  AffinealignDPentry **dptable;
+  GtAffinealignDPentry **dptable;
   GtUword idx;
   gt_assert(u && v && spacemanager && scorehandler);
 
   gt_assert((ulen+1)*(vlen+1)*sizeof(**dptable) <=
-             gt_linspaceManagement_get_valueTabsize(spacemanager));
+             gt_linspace_management_get_valueTabsize(spacemanager));
 
-  dptable = gt_linspaceManagement_get_rTabspace(spacemanager);
-  *dptable = gt_linspaceManagement_get_valueTabspace(spacemanager);
+  dptable = gt_linspace_management_get_rTabspace(spacemanager);
+  *dptable = gt_linspace_management_get_valueTabspace(spacemanager);
 
   for (idx = 1; idx < ulen + 1; idx++)
     dptable[idx] = dptable[idx-1] + vlen + 1;
 
   affinealign_fill_table(dptable, u, ulen, v, vlen, GT_WORD_MAX, GT_WORD_MAX,
                          GT_WORD_MAX, GT_WORD_MAX, Affine_X, scorehandler);
-  return affinealign_traceback(align, dptable, ulen, vlen);
+  return gt_affinealign_traceback(align, dptable, ulen, vlen);
 }
 
 static void evaluate_affinecrosspoints_from_2dimtab(GtUword *Ctab,
-                                            AffinealignDPentry **Atabcolumn,
+                                            GtAffinealignDPentry **Atabcolumn,
                                             const GtScoreHandler *scorehandler,
                                             GtUword ulen, GtUword vlen,
                                             GtUword rowoffset,
-                                            AffineAlignEdge edge)
+                                            GtAffineAlignEdge edge)
 {
   GtUword i, j, gap_opening;
   gt_assert(Atabcolumn != NULL);
@@ -240,7 +240,8 @@ static void evaluate_affinecrosspoints_from_2dimtab(GtUword *Ctab,
 
   i = ulen;
   j = vlen;
-  edge = minAdditionalCosts(&Atabcolumn[i][j], edge, gap_opening);
+  edge = gt_linearalign_affinegapcost_minAdditionalCosts(&Atabcolumn[i][j],
+                                                         edge, gap_opening);
 
   while (i > 0 || j > 1) {
     switch (edge) {
@@ -269,27 +270,27 @@ static void evaluate_affinecrosspoints_from_2dimtab(GtUword *Ctab,
   }
 }
 
-void affine_ctab_in_square_space(GtLinspaceManagement *spacemanager,
-                                 const GtScoreHandler *scorehandler,
-                                 GtUword *Ctab,
-                                 const GtUchar *useq,
-                                 GtUword ustart,
-                                 GtUword ulen,
-                                 const GtUchar *vseq,
-                                 GtUword vstart,
-                                 GtUword vlen,
-                                 GtUword rowoffset,
-                                 AffineAlignEdge from_edge,
-                                 AffineAlignEdge to_edge)
+void gt_affinealign_ctab(GtLinspaceManagement *spacemanager,
+                         const GtScoreHandler *scorehandler,
+                         GtUword *Ctab,
+                         const GtUchar *useq,
+                         GtUword ustart,
+                         GtUword ulen,
+                         const GtUchar *vseq,
+                         GtUword vstart,
+                         GtUword vlen,
+                         GtUword rowoffset,
+                         GtAffineAlignEdge from_edge,
+                         GtAffineAlignEdge to_edge)
 {
-  AffinealignDPentry **dptable;
+  GtAffinealignDPentry **dptable;
   GtUword idx;
   gt_assert(Ctab && spacemanager && scorehandler);
   gt_assert((ulen+1)*(vlen+1)*sizeof(**dptable) <=
-             gt_linspaceManagement_get_valueTabsize(spacemanager));
+             gt_linspace_management_get_valueTabsize(spacemanager));
 
-  dptable = gt_linspaceManagement_get_rTabspace(spacemanager);
-  *dptable = gt_linspaceManagement_get_valueTabspace(spacemanager);
+  dptable = gt_linspace_management_get_rTabspace(spacemanager);
+  *dptable = gt_linspace_management_get_valueTabspace(spacemanager);
 
   for (idx = 1; idx < ulen+1; idx++)
     dptable[idx] = dptable[idx-1] + vlen + 1;
@@ -304,7 +305,7 @@ void affine_ctab_in_square_space(GtLinspaceManagement *spacemanager,
 }
 
 /* local */
-static GtWord affinealign_fill_table_local(AffinealignDPentry **Atabcolumn,
+static GtWord affinealign_fill_table_local(GtAffinealignDPentry **Atabcolumn,
                                            const GtScoreHandler *scorehandler,
                                            GtMaxcoordvalue *max,
                                            const GtUchar *useq, GtUword ustart,
@@ -359,9 +360,11 @@ static GtWord affinealign_fill_table_local(AffinealignDPentry **Atabcolumn,
     Atabcolumn[0][j].Dedge = Affine_X;
     Atabcolumn[0][j].Iedge = Affine_I;
 
-    if (Atabcolumn[0][j].totalvalue > gt_max_get_value(max))
+    if (Atabcolumn[0][j].totalvalue > gt_maxcoordvalue_get_value(max))
     {
-      gt_max_coord_update_without_start(max, Atabcolumn[0][j].totalvalue, 0, j);
+      gt_maxcoordvalue_coord_update_without_start(max,
+                                                  Atabcolumn[0][j].totalvalue,
+                                                  0, j);
     }
     for (i = 1; i <= ulen; i++)
     {
@@ -438,33 +441,35 @@ static GtWord affinealign_fill_table_local(AffinealignDPentry **Atabcolumn,
       Atabcolumn[i][j].totalvalue = temp > 0 ? temp : 0;
 
       /*set new max*/
-      if (Atabcolumn[i][j].totalvalue > gt_max_get_value(max))
+      if (Atabcolumn[i][j].totalvalue > gt_maxcoordvalue_get_value(max))
       {
-        gt_max_coord_update_without_start(max,Atabcolumn[i][j].totalvalue,i,j);
+        gt_maxcoordvalue_coord_update_without_start(max,
+                                                    Atabcolumn[i][j].totalvalue,
+                                                    i,j);
       }
     }
   }
 
-  return gt_max_get_value(max);
+  return gt_maxcoordvalue_get_value(max);
 }
 
 static void affinealign_traceback_local(GtAlignment *align,
-                                        AffinealignDPentry **dptable,
+                                        GtAffinealignDPentry **dptable,
                                         GtMaxcoordvalue *max)
 {
   GtWord maxvalue;
   GtUword i,j;
   GtUwordPair max_end;
-  AffineAlignEdge edge;
+  GtAffineAlignEdge edge;
   gt_assert(align && dptable);
 
-  max_end = gt_max_get_end(max);
+  max_end = gt_maxcoordvalue_get_end(max);
   i = max_end.a;
   j = max_end.b;
 
   maxvalue = MAX(MAX(dptable[i][j].Rvalue, dptable[i][j].Dvalue),
                   MAX(dptable[i][j].Ivalue,dptable[i][j].totalvalue));
-  gt_assert(gt_max_get_value(max) == maxvalue);
+  gt_assert(gt_maxcoordvalue_get_value(max) == maxvalue);
 
   if (dptable[i][j].Rvalue == maxvalue)
     edge = Affine_R;
@@ -500,10 +505,10 @@ static void affinealign_traceback_local(GtAlignment *align,
         gt_assert(false);
     }
   }
-  gt_max_set_start(max,i,j);
+  gt_maxcoordvalue_set_start(max,i,j);
 }
 
-GtWord affinealign_in_square_space_local_generic(GtLinspaceManagement
+GtWord gt_affinealign_calculate_local_generic(GtLinspaceManagement
                                              *spacemanager,
                                              const GtScoreHandler *scorehandler,
                                              GtAlignment *align,
@@ -515,7 +520,7 @@ GtWord affinealign_in_square_space_local_generic(GtLinspaceManagement
                                              GtUword vlen)
 {
   GtWord score = 0;
-  AffinealignDPentry **Atabcolumn;
+  GtAffinealignDPentry **Atabcolumn;
   GtMaxcoordvalue *max;
 
   gt_assert(align != NULL);
@@ -523,21 +528,21 @@ GtWord affinealign_in_square_space_local_generic(GtLinspaceManagement
   {
     /*use it in normally case*/
     gt_array2dim_malloc(Atabcolumn,(ulen+1),(vlen+1));
-    max = gt_max_new();
+    max = gt_maxcoordvalue_new();
   }
   else
   {
     /*use it in lineraspace context*/
     gt_assert((ulen+1)*(vlen+1)*sizeof(**Atabcolumn) <=
-               gt_linspaceManagement_get_valueTabsize(spacemanager));
+               gt_linspace_management_get_valueTabsize(spacemanager));
 
-    Atabcolumn = gt_linspaceManagement_get_rTabspace(spacemanager);
-    *Atabcolumn = gt_linspaceManagement_get_valueTabspace(spacemanager);
+    Atabcolumn = gt_linspace_management_get_rTabspace(spacemanager);
+    *Atabcolumn = gt_linspace_management_get_valueTabspace(spacemanager);
 
     GtUword idx;
     for (idx = 1;idx < ulen+1;idx++)
       Atabcolumn[idx] = Atabcolumn[idx-1] + vlen + 1;
-    max = gt_linspaceManagement_get_maxspace(spacemanager);
+    max = gt_linspace_management_get_maxspace(spacemanager);
   }
 
   score = affinealign_fill_table_local(Atabcolumn, scorehandler, max,
@@ -549,12 +554,12 @@ GtWord affinealign_in_square_space_local_generic(GtLinspaceManagement
   /* reconstruct local alignment from 2dimarray Atabcolumn */
   affinealign_traceback_local(align, Atabcolumn, max);
 
-  if (gt_max_get_length_safe(max))
+  if (gt_maxcoordvalue_get_length_safe(max))
   {
-    ustart = ustart+(gt_max_get_start(max)).a;
-    vstart = vstart+(gt_max_get_start(max)).b;
-    ulen = gt_max_get_row_length(max);
-    vlen = gt_max_get_col_length(max);
+    ustart = ustart + (gt_maxcoordvalue_get_start(max)).a;
+    vstart = vstart + (gt_maxcoordvalue_get_start(max)).b;
+    ulen = gt_maxcoordvalue_get_row_length(max);
+    vlen = gt_maxcoordvalue_get_col_length(max);
 
     gt_alignment_set_seqs(align, &useq[ustart], ulen,
                                  &vseq[vstart], vlen);
@@ -563,23 +568,23 @@ GtWord affinealign_in_square_space_local_generic(GtLinspaceManagement
   if (spacemanager == NULL)
   {
     gt_array2dim_delete(Atabcolumn);
-    gt_max_delete(max);
+    gt_maxcoordvalue_delete(max);
   }
   return score;
 }
 
-GtWord affinealign_in_square_space_local(GtLinspaceManagement *spacemanager,
-                                         GtAlignment *align,
-                                         const GtUchar *useq,
-                                         GtUword ustart,
-                                         GtUword ulen,
-                                         const GtUchar *vseq,
-                                         GtUword vstart,
-                                         GtUword vlen,
-                                         GtWord matchscore,
-                                         GtWord mismatchscore,
-                                         GtWord gap_opening,
-                                         GtWord gap_extension)
+GtWord gt_affinealign_calculate_local(GtLinspaceManagement *spacemanager,
+                                      GtAlignment *align,
+                                      const GtUchar *useq,
+                                      GtUword ustart,
+                                      GtUword ulen,
+                                      const GtUchar *vseq,
+                                      GtUword vstart,
+                                      GtUword vlen,
+                                      GtWord matchscore,
+                                      GtWord mismatchscore,
+                                      GtWord gap_opening,
+                                      GtWord gap_extension)
 {
   GtWord score;
 
@@ -587,9 +592,9 @@ GtWord affinealign_in_square_space_local(GtLinspaceManagement *spacemanager,
                                                      mismatchscore,
                                                      gap_opening,
                                                      gap_extension);
-  score = affinealign_in_square_space_local_generic(spacemanager, scorehandler,
-                                                    align, useq, ustart, ulen,
-                                                    vseq, vstart, vlen);
+  score = gt_affinealign_calculate_local_generic(spacemanager, scorehandler,
+                                                 align, useq, ustart, ulen,
+                                                 vseq, vstart, vlen);
   gt_scorehandler_delete(scorehandler);
   return score;
 }
diff --git a/src/extended/affinealign.h b/src/extended/affinealign.h
index df850ea..e0c775d 100644
--- a/src/extended/affinealign.h
+++ b/src/extended/affinealign.h
@@ -28,16 +28,16 @@ typedef enum {
   Affine_D,
   Affine_I,
   Affine_X /* unknown */
-} AffineAlignEdge;
+} GtAffineAlignEdge;
 
 /* <AffinealignDPentry> objects describe the information of distance values and
    backtracing edges relating on last edit operation R,D,I. */
 typedef struct {
   GtWord Rvalue, Dvalue, Ivalue, totalvalue;
-  AffineAlignEdge Redge,
-                  Dedge,
-                  Iedge;
-} AffinealignDPentry;
+  GtAffineAlignEdge Redge,
+                    Dedge,
+                    Iedge;
+} GtAffinealignDPentry;
 
 /* Computes a global alignment with affine gapcosts in square space
    and constant cost values. Use of this function requires input sequences
@@ -52,18 +52,18 @@ GtAlignment* gt_affinealign(const GtUchar *u, GtUword ulen,
 
 /* Computes a global alignment with affine gapcosts in square space. Use of this
    function requires an initialised <scorehandler> with cost values an
-   initalised <spacemanager>, the target alignment <align> and input sequences
+   initialised <spacemanager>, the target alignment <align> and input sequences
    <useq> and <vseq> and lengths <ulen> and <vlen>. Returns affine cost
    value of global alignment. */
-GtWord gt_affinealign_with_Management(GtLinspaceManagement *spacemanager,
-                                      const GtScoreHandler *scorehandler,
-                                      GtAlignment *align,
-                                      const GtUchar *u, GtUword ulen,
-                                      const GtUchar *v, GtUword vlen);
+GtWord       gt_affinealign_with_Management(GtLinspaceManagement *spacemanager,
+                                            const GtScoreHandler *scorehandler,
+                                            GtAlignment *align,
+                                            const GtUchar *u, GtUword ulen,
+                                            const GtUchar *v, GtUword vlen);
 
-GtWord affinealign_traceback(GtAlignment *a,
-                             AffinealignDPentry * const *dptable,
-                             GtUword i, GtUword j);
+GtWord       gt_affinealign_traceback(GtAlignment *align,
+                                      GtAffinealignDPentry * const *dptable,
+                                      GtUword i, GtUword j);
 
 /* Computes crosspoints for a global alignment with affine gapcosts in square
    space. Use of this function requires an initialised <spacemanager> an
@@ -74,7 +74,7 @@ GtWord affinealign_traceback(GtAlignment *a,
    of the subproblem and <from_edge> and <to_edge> are the in- and outcoming
    edge of this subproblem. Otherwise set default values 0 and Affine_X. Returns
    affine distance value of global alignment. */
-void affine_ctab_in_square_space(GtLinspaceManagement *spacemanager,
+void         gt_affinealign_ctab(GtLinspaceManagement *spacemanager,
                                  const GtScoreHandler *scorehandler,
                                  GtUword *Ctab,
                                  const GtUchar *useq,
@@ -84,8 +84,8 @@ void affine_ctab_in_square_space(GtLinspaceManagement *spacemanager,
                                  GtUword vstart,
                                  GtUword vlen,
                                  GtUword rowoffset,
-                                 AffineAlignEdge from_edge,
-                                 AffineAlignEdge to_edge);
+                                 GtAffineAlignEdge from_edge,
+                                 GtAffineAlignEdge to_edge);
 
 /* Computes a local alignment with linear gapcosts in square space. Use of this
    function requires an initialised <scorehandler> with score values, the target
@@ -94,17 +94,17 @@ void affine_ctab_in_square_space(GtLinspaceManagement *spacemanager,
    and <vlen>. An initialised <spacemanager> is required to use this function in
    linear space context, in any other case it can be NULL. Returns score
    value of local alignment. */
-GtWord affinealign_in_square_space_local_generic(GtLinspaceManagement
-                                                 *spacemanager,
-                                                 const GtScoreHandler
-                                                 *scorehandler,
-                                                 GtAlignment *align,
-                                                 const GtUchar *useq,
-                                                 GtUword ustart,
-                                                 GtUword ulen,
-                                                 const GtUchar *vseq,
-                                                 GtUword vstart,
-                                                 GtUword vlen);
+GtWord       gt_affinealign_calculate_local_generic(GtLinspaceManagement
+                                                    *spacemanager,
+                                                    const GtScoreHandler
+                                                    *scorehandler,
+                                                    GtAlignment *align,
+                                                    const GtUchar *useq,
+                                                    GtUword ustart,
+                                                    GtUword ulen,
+                                                    const GtUchar *vseq,
+                                                    GtUword vstart,
+                                                    GtUword vlen);
 
 /* Computes a local alignment with affine gapcosts in square space
    and constant score values. Use of this function requires the target alignment
@@ -114,17 +114,18 @@ GtWord affinealign_in_square_space_local_generic(GtLinspaceManagement
    <gap_opening> and <gap_extension>. An initialised <spacemanager> is required
    to use this function in linear space context, in any other case it can be
    NULL. Returns affine score value of local alignment. */
-GtWord affinealign_in_square_space_local(GtLinspaceManagement *spacemanager,
-                                         GtAlignment *align,
-                                         const GtUchar *useq,
-                                         GtUword ustart,
-                                         GtUword ulen,
-                                         const GtUchar *vseq,
-                                         GtUword vstart,
-                                         GtUword vlen,
-                                         GtWord matchscore,
-                                         GtWord mismatchscore,
-                                         GtWord gap_opening,
-                                         GtWord gap_extension);
+GtWord       gt_affinealign_calculate_local(GtLinspaceManagement
+                                            *spacemanager,
+                                            GtAlignment *align,
+                                            const GtUchar *useq,
+                                            GtUword ustart,
+                                            GtUword ulen,
+                                            const GtUchar *vseq,
+                                            GtUword vstart,
+                                            GtUword vlen,
+                                            GtWord matchscore,
+                                            GtWord mismatchscore,
+                                            GtWord gap_opening,
+                                            GtWord gap_extension);
 
 #endif
diff --git a/src/extended/alignment.c b/src/extended/alignment.c
index 6083c21..4fea675 100644
--- a/src/extended/alignment.c
+++ b/src/extended/alignment.c
@@ -36,16 +36,17 @@
 #include "alignment.h"
 
 struct GtAlignment {
-  GtRange         aligned_range_u,
-                  aligned_range_v;
+  GtRange aligned_range_u,
+          aligned_range_v;
   const GtUchar  *u,
                  *v;
   GtMultieoplist *eops;
-  GtUword         ulen,
-                  vlen,
-                  alilen;
   const Polishing_info *pol_info;
-  GtUword useedoffset, seedlen;
+  GtUword ulen,
+          vlen,
+          alilen,
+          useedoffset,
+          seedlen;
   bool seed_display, withpolcheck;
 };
 
@@ -57,12 +58,16 @@ GtAlignment* gt_alignment_new(void)
 {
   GtAlignment *alignment;
   alignment = gt_calloc((size_t) 1, sizeof (GtAlignment));
+  alignment->aligned_range_u.start = 0;
+  alignment->aligned_range_u.end = 0;
+  alignment->aligned_range_v.start = 0;
+  alignment->aligned_range_v.end = 0;
   alignment->eops = gt_multieoplist_new();
-  alignment->alilen = 0;
+  alignment->u = alignment->v = NULL;
   alignment->pol_info = NULL;
-  alignment->useedoffset = 0;
-  alignment->seedlen = 0;
-  alignment->seed_display = 0;
+  alignment->alilen = alignment->ulen = alignment->vlen = 0;
+  alignment->useedoffset = alignment->seedlen = 0;
+  alignment->seed_display = alignment->withpolcheck = false;
   return alignment;
 }
 
@@ -121,8 +126,7 @@ GtUword gt_alignment_get_length(const GtAlignment *alignment)
 void gt_alignment_set_urange(GtAlignment *alignment, GtRange range)
 {
   gt_assert(alignment != NULL && range.start <= range.end);
-  alignment->aligned_range_u.start = range.start;
-  alignment->aligned_range_u.end = range.end;
+  alignment->aligned_range_u = range;
 }
 
 GtRange gt_alignment_get_vrange(const GtAlignment *alignment)
@@ -134,8 +138,7 @@ GtRange gt_alignment_get_vrange(const GtAlignment *alignment)
 void gt_alignment_set_vrange(GtAlignment *alignment, GtRange range)
 {
   gt_assert(alignment != NULL && range.start <= range.end);
-  alignment->aligned_range_v.start = range.start;
-  alignment->aligned_range_v.end = range.end;
+  alignment->aligned_range_v = range;
 }
 
 void gt_alignment_add_replacement_multi(GtAlignment *alignment,GtUword num)
@@ -740,36 +743,36 @@ void gt_alignment_show_generic(GtUchar *buffer,
     {
       endpolished = true;
     }
-    printf("# polishing(m=" GT_WD ",d=" GT_WD ",p=" GT_WU
-           "): " GT_WU "/" GT_WU,
-           alignment->pol_info->match_score,
-           -alignment->pol_info->difference_score,
-           pol_size,
-           prefix_positive,
-           suffix_positive);
+    fprintf(fp, "# polishing(m=" GT_WD ",d=" GT_WD ",p=" GT_WU
+            "): " GT_WU "/" GT_WU,
+            alignment->pol_info->match_score,
+            -alignment->pol_info->difference_score,
+            pol_size,
+            prefix_positive,
+            suffix_positive);
     if (firstseedcolumn < pol_size)
     {
-      printf(", seed_on_start");
+      fprintf(fp, ", seed_on_start");
     }
     if (lastseedcolumn + pol_size > alignmentlength)
     {
-      printf(", seed_on_end");
+      fprintf(fp, ", seed_on_end");
     }
     if (alignment->withpolcheck)
     {
-      printf("\n");
+      fprintf(fp, "\n");
       gt_assert(startpolished && endpolished);
     } else
     {
       if (!startpolished)
       {
-        printf(", start not polished");
+        fprintf(fp, ", start not polished");
       }
       if (!endpolished)
       {
-        printf(", end not polished");
+        fprintf(fp, ", end not polished");
       }
-      printf("\n");
+      fprintf(fp, "\n");
     }
   }
 }
@@ -959,10 +962,8 @@ void gt_alignment_clone(const GtAlignment *alignment_from,
   alignment_to->v = alignment_from->v;
   alignment_to->ulen = alignment_from->ulen;
   alignment_to->vlen = alignment_from->vlen;
-  alignment_to->aligned_range_u.start = alignment_from->aligned_range_u.start;
-  alignment_to->aligned_range_v.start = alignment_from->aligned_range_v.start;
-  alignment_to->aligned_range_u.end = alignment_from->aligned_range_u.end;
-  alignment_to->aligned_range_v.end = alignment_from->aligned_range_v.end;
+  alignment_to->aligned_range_u = alignment_from->aligned_range_u;
+  alignment_to->aligned_range_v = alignment_from->aligned_range_v;
   gt_multieoplist_clone(alignment_to->eops,alignment_from->eops);
   alignment_to->alilen = alignment_from->alilen;
 }
diff --git a/src/extended/cds_check_visitor.c b/src/extended/cds_check_visitor.c
index c75a810..ca75358 100644
--- a/src/extended/cds_check_visitor.c
+++ b/src/extended/cds_check_visitor.c
@@ -39,10 +39,12 @@ struct GtCDSCheckVisitor {
 static int check_cds_phases(GtArray *cds_features, GtCDSCheckVisitor *v,
                             bool is_multi, bool second_pass, GtError *err)
 {
-  GtPhase current_phase, correct_phase = GT_PHASE_ZERO;
+  GtPhase correct_phase = GT_PHASE_ZERO;
   GtFeatureNode *fn;
   GtStrand strand;
-  GtUword i, current_length;
+  bool first = true;
+  GtUword i,
+          total_length = 0;
   int had_err = 0;
   gt_error_check(err);
   gt_assert(cds_features);
@@ -105,9 +107,26 @@ static int check_cds_phases(GtArray *cds_features, GtCDSCheckVisitor *v,
       }
     }
     if (!had_err) {
-      current_phase = gt_feature_node_get_phase(fn);
-      current_length = gt_genome_node_get_length((GtGenomeNode*) fn);
-      correct_phase = (3 - (current_length - current_phase) % 3) % 3;
+      GtUword current_length = gt_genome_node_get_length((GtGenomeNode*) fn);
+      if (first) {
+        /* this handles the case of 5' partial genes, where CDS might not start
+           on codon boundaries */
+        GtUword current_phase = (GtUword) gt_feature_node_get_phase(fn);
+        if (current_length >= current_phase) {
+          /* we simply skip the amount of bases defined by phase */
+          current_length -= current_phase;
+          first = false;
+          total_length = current_length;
+          correct_phase = (3 - (total_length) % 3) % 3;
+        } else {
+          /* corner case: first CDS is single base */
+          gt_assert(current_length == 1 && current_phase == 2);
+          correct_phase = 1;
+        }
+      } else {
+        total_length += current_length;
+        correct_phase = (3 - (total_length) % 3) % 3;
+      }
       gt_hashmap_add(v->cds_features, fn, fn); /* record CDS feature */
     }
   }
diff --git a/src/extended/compressed_bitsequence.c b/src/extended/compressed_bitsequence.c
index d884f34..ae64138 100644
--- a/src/extended/compressed_bitsequence.c
+++ b/src/extended/compressed_bitsequence.c
@@ -889,7 +889,7 @@ GtUword gt_compressed_bitsequence_select_0(GtCompressedBitsequence *cbs,
 }
 
 static size_t
-gt_compressed_bitsequence_header_size(GtCompressedBitsequence *cbs)
+gt_compressed_bitsequence_header_size(const GtCompressedBitsequence *cbs)
 {
   size_t size = 0;
   gt_assert(cbs != NULL);
@@ -911,7 +911,7 @@ gt_compressed_bitsequence_header_size(GtCompressedBitsequence *cbs)
   return size;
 }
 
-size_t gt_compressed_bitsequence_file_size(GtCompressedBitsequence *cbs)
+size_t gt_compressed_bitsequence_file_size(const GtCompressedBitsequence *cbs)
 {
   size_t size = gt_compressed_bitsequence_header_size(cbs);
 
@@ -923,7 +923,7 @@ size_t gt_compressed_bitsequence_file_size(GtCompressedBitsequence *cbs)
   return size;
 }
 
-size_t gt_compressed_bitsequence_size(GtCompressedBitsequence *cbs)
+size_t gt_compressed_bitsequence_size(const GtCompressedBitsequence *cbs)
 {
   size_t size =  sizeof (cbs) +
     gt_popcount_tab_calculate_size(cbs->blocksize) +
diff --git a/src/extended/compressed_bitsequence.h b/src/extended/compressed_bitsequence.h
index c644cde..619d198 100644
--- a/src/extended/compressed_bitsequence.h
+++ b/src/extended/compressed_bitsequence.h
@@ -70,10 +70,10 @@ GtUword                  gt_compressed_bitsequence_select_0(
                                                    GtUword num);
 
 size_t                   gt_compressed_bitsequence_file_size(
-                                                  GtCompressedBitsequence *cbs);
+                                            const GtCompressedBitsequence *cbs);
 
 size_t                   gt_compressed_bitsequence_size(
-                                                  GtCompressedBitsequence *cbs);
+                                            const GtCompressedBitsequence *cbs);
 /* Write <cbs> to file with name <filename>. */
 int                      gt_compressed_bitsequence_write(
                                                    GtCompressedBitsequence *cbs,
@@ -89,5 +89,5 @@ GtCompressedBitsequence* gt_compressed_bitsequence_new_from_file(
 void                     gt_compressed_bitsequence_delete(
                                                   GtCompressedBitsequence *cbs);
 
-int                      gt_compressed_bitsequence_unit_test(GtError *err);
+int gt_compressed_bitsequence_unit_test(GtError *err);
 #endif
diff --git a/src/extended/condenseq.c b/src/extended/condenseq.c
index e428abd..6cabac3 100644
--- a/src/extended/condenseq.c
+++ b/src/extended/condenseq.c
@@ -55,7 +55,7 @@ static inline GtUword condenseq_seqlength_help(const GtCondenseq *condenseq,
                                                GtUword seqnum,
                                                GtUword seqstart)
 {
-  GtUword end = condenseq->orig_length;
+  GtUword end = condenseq->orig_len;
   if (seqnum < condenseq->orig_num_seq - 1)
     end = gt_intset_get(condenseq->ssptab, seqnum);
   return end - seqstart;
@@ -226,7 +226,7 @@ static GtCondenseq *condenseq_new_empty(const GtAlphabet *alph)
   condenseq->buffsize =
     condenseq->ldb_allocated =
     condenseq->ldb_nelems =
-    condenseq->orig_length =
+    condenseq->orig_len =
     condenseq->orig_num_seq =
     condenseq->ubuffsize =
     condenseq->udb_allocated =
@@ -255,7 +255,7 @@ GtCondenseq *gt_condenseq_new(const GtEncseq *orig_es, GtLogger *logger)
   condenseq->orig_num_seq = gt_encseq_num_of_sequences(orig_es);
 
   condenseq->ssptab = condenseq_fill_tab(condenseq, orig_es);
-  condenseq->orig_length = gt_encseq_total_length(orig_es);
+  condenseq->orig_len = gt_encseq_total_length(orig_es);
 
   condenseq_process_descriptions(condenseq, orig_es, logger);
   return condenseq;
@@ -288,11 +288,11 @@ GtUword gt_condenseq_total_unique_len(const GtCondenseq *condenseq)
   return gt_encseq_total_length(condenseq->unique_es);
 }
 
-GtUword gt_condenseq_total_length(GtCondenseq *condenseq) {
-  return condenseq->orig_length;
+GtUword gt_condenseq_total_length(const GtCondenseq *condenseq) {
+  return condenseq->orig_len;
 }
 
-GtUword gt_condenseq_num_of_sequences(GtCondenseq *condenseq)
+GtUword gt_condenseq_num_of_sequences(const GtCondenseq *condenseq)
 {
   return condenseq->orig_num_seq;
 }
@@ -449,7 +449,7 @@ static int condenseq_io(GtCondenseq *condenseq,
   int had_err = 0;
   int file_format = GT_CONDENSEQ_VERSION;
   GtUword idx;
-  had_err = gt_condenseq_io_one(condenseq->orig_length);
+  had_err = gt_condenseq_io_one(condenseq->orig_len);
   if (!had_err)
     had_err = gt_condenseq_io_one(file_format);
   if (!had_err && file_format != GT_CONDENSEQ_VERSION) {
@@ -741,7 +741,7 @@ const GtUchar *gt_condenseq_extract_encoded_range(GtCondenseq *condenseq,
   gt_assert(condenseq && condenseq->udb_nelems != 0);
   gt_assert(condenseq->uniques[0].orig_startpos == 0);
   gt_assert(range.start <= range.end);
-  gt_assert(range.end < condenseq->orig_length);
+  gt_assert(range.end < condenseq->orig_len);
 
   nextsep = condenseq_next_sep(condenseq, range.start);
   uniqueid = gt_condenseq_uniques_position_binsearch(condenseq,
@@ -749,6 +749,8 @@ const GtUchar *gt_condenseq_extract_encoded_range(GtCondenseq *condenseq,
 
   length = range.end - range.start + 1;
 
+  /* TODO DW check if there is another way than using this buffer, so we could
+     use const for condenseq here. */
   if (condenseq->ubuffer == NULL || condenseq->ubuffsize < length) {
     condenseq->ubuffer = gt_realloc(condenseq->ubuffer,
                                     sizeof (*condenseq->ubuffer) * length);
@@ -835,7 +837,7 @@ const GtUchar *gt_condenseq_extract_encoded(GtCondenseq *condenseq,
     /* -2 because of seperator */
     range.end = gt_condenseq_seqstartpos(condenseq, id + 1) - 2;
   else
-    range.end = condenseq->orig_length - 1;
+    range.end = condenseq->orig_len - 1;
   *length = range.end - range.start + 1;
   return gt_condenseq_extract_encoded_range(condenseq, range);
 }
@@ -877,7 +879,7 @@ const char *gt_condenseq_extract_decoded(GtCondenseq *condenseq,
     /* -2 because of seperator */
     range.end = gt_condenseq_seqstartpos(condenseq, id + 1) - 2;
   else
-    range.end = condenseq->orig_length - 1;
+    range.end = condenseq->orig_len - 1;
   *length = range.end - range.start + 1;
   return gt_condenseq_extract_decoded_range(condenseq, range, '\0');
 }
@@ -928,7 +930,7 @@ GtUword gt_condenseq_each_redundant_seq(
 }
 
 GtUword gt_condenseq_each_redundant_range(
-                                      GtCondenseq *condenseq,
+                                      const GtCondenseq *condenseq,
                                       GtUword uid,
                                       GtRange urange,
                                       GtUword left_extend,
@@ -1176,7 +1178,7 @@ GtDiscDistri *gt_condenseq_link_comp_dist(const GtCondenseq *condenseq)
   return res;
 }
 
-GtUword gt_condenseq_unique_range_to_seqrange(GtCondenseq *condenseq,
+GtUword gt_condenseq_unique_range_to_seqrange(const GtCondenseq *condenseq,
                                               GtUword uid,
                                               GtRange *urange)
 {
diff --git a/src/extended/condenseq.h b/src/extended/condenseq.h
index eafe74f..5805041 100644
--- a/src/extended/condenseq.h
+++ b/src/extended/condenseq.h
@@ -46,11 +46,11 @@ int                gt_condenseq_write(GtCondenseq *condenseq, FILE* fp,
                                       GtError *err);
 /* Return the number of sequences contained in the original sequence collection.
  */
-GtUword            gt_condenseq_num_of_sequences(GtCondenseq *condenseq);
+GtUword            gt_condenseq_num_of_sequences(const GtCondenseq *condenseq);
 
 /* Return the total length of the original sequence collection, including
    separators (like <GtEncseq>). */
-GtUword            gt_condenseq_total_length(GtCondenseq *condenseq);
+GtUword            gt_condenseq_total_length(const GtCondenseq *condenseq);
 
 /* Return the number of links of <condenseq> */
 GtUword            gt_condenseq_num_links(const GtCondenseq *condenseq);
@@ -135,7 +135,7 @@ typedef int        (GtCondenseqProcessExtractedRange)(void *data,
    Returns 0 on error as there is at least one similar range, the input range
    itself. */
 GtUword             gt_condenseq_each_redundant_range(
-                                      GtCondenseq *condenseq,
+                                      const GtCondenseq *condenseq,
                                       GtUword uid,
                                       GtRange urange,
                                       GtUword left_extend,
@@ -154,12 +154,10 @@ char*               gt_condenseq_basefilename(const GtCondenseq *condenseq);
    Returns NULL if no such file exists. */
 GtStr*              gt_condenseq_unique_fasta_file(
                                                   const GtCondenseq *condenseq);
-
 /* Returns the number of uniques with length at least <min_align_len> */
 GtUword             gt_condenseq_count_relevant_uniques(
                                                    const GtCondenseq *condenseq,
                                                    unsigned int min_align_len);
-
 /* return size in bytes of the <condenseq>, other parameters will be set to the
    sise in bytes of the various elements. where <links> does not contain the
    size of the included editscript, but only the pointer to it. */
@@ -169,7 +167,6 @@ GtUword             gt_condenseq_size(const GtCondenseq *condenseq,
                                       GtUword *editscripts,
                                       GtUword *descriptions,
                                       GtUword *separators);
-
 /* Creates an gff3-File with the basename of the index containing the unique and
    link ranges as experimental_features */
 int                 gt_condenseq_output_to_gff3(const GtCondenseq *condenseq,
@@ -187,9 +184,9 @@ GtDiscDistri*       gt_condenseq_link_comp_dist(const GtCondenseq *condenseq);
    urange (which has coordinate relative to that unique) so it represents the
    same range but relative to the sequence collection. */
 GtUword             gt_condenseq_unique_range_to_seqrange(
-                                                         GtCondenseq *condenseq,
-                                                         GtUword uid,
-                                                         GtRange *urange);
+                                                   const GtCondenseq *condenseq,
+                                                   GtUword uid,
+                                                   GtRange *urange);
 /* Returns a pointer to the editscript corresponding to <lid> in <condenseq>,
    <condenseq> retains ownership of that editscript. */
 const GtEditscript* gt_condenseq_link_editscript(const GtCondenseq *condenseq,
diff --git a/src/extended/condenseq_creator.c b/src/extended/condenseq_creator.c
index 371af7b..152e08d 100644
--- a/src/extended/condenseq_creator.c
+++ b/src/extended/condenseq_creator.c
@@ -444,7 +444,7 @@ static void ces_c_xdrop_init(GtXdropArbitraryscores *scores,
       gt_error_set(err, "length of element (" GT_WU ") exceedes range for " \
                    "lengths stored in GtCondenseq (" GT_WU "), maybe "      \
                    "recompile with GT_CONDENSEQ_64_BIT enabled",            \
-                   (GtUword) (TO_STORE), (GtUword) CES_UNSIGNED_MAX);      \
+                   (GtUword) (TO_STORE), (GtUword) CES_UNSIGNED_MAX);       \
       had_err = -1;                                                         \
     }                                                                       \
   }                                                                         \
@@ -1165,7 +1165,7 @@ static CesCState ces_c_reset_pos_and_iter(GtCondenseqCreator *ces_c,
                                           GtUword pos)
 {
   unsigned int idx;
-  if (pos >= ces_c->ces->orig_length) {
+  if (pos >= ces_c->ces->orig_len) {
     return GT_CONDENSEQ_CREATOR_EOD;
   }
   ces_c->current_orig_start =
@@ -1538,7 +1538,7 @@ static int ces_c_analyse(GtCondenseqCreator *ces_c, GtTimer *timer,
   if (!had_err &&
       !gt_kmercodeiterator_inputexhausted(ces_c->main_kmer_iter)) {
     GtUword percentile;
-    const GtUword percent = ces_c->ces->orig_length / 100;
+    const GtUword percent = ces_c->ces->orig_len / 100;
     gt_log_log(GT_WU " initial kmer positions in kmer_db",
                gt_kmer_database_get_kmer_count(ces_c->kmer_db));
     gt_log_log(GT_WU " initial bytes for kmer_db",
diff --git a/src/extended/condenseq_rep.h b/src/extended/condenseq_rep.h
index 9acccba..4d0a291 100644
--- a/src/extended/condenseq_rep.h
+++ b/src/extended/condenseq_rep.h
@@ -27,19 +27,21 @@
 
 #include "extended/condenseq.h"
 
+/* this switch is meant to test performance differences and memory consumption
+   issues */
 #ifdef GT_CONDENSEQ_64_BIT
-typedef GtUword ces_unsigned;
-#define CES_UNSIGNED_MAX ((ces_unsigned) GT_UWORD_MAX)
+typedef uint64_t ces_unsigned;
+#define CES_UNSIGNED_MAX ((ces_unsigned) UINT64_MAX)
 #else
-typedef unsigned int ces_unsigned;
-#define CES_UNSIGNED_MAX ((ces_unsigned) UINT_MAX)
+typedef uint32_t ces_unsigned;
+#define CES_UNSIGNED_MAX ((ces_unsigned) UINT32_MAX)
 #endif
 
 /*
   The contents of this file is to be considered private implementation detail.
 */
 
-/* TODO DW: maybe unsigned int for len, unique_id and offset would be all right?
+/* TODO DW: maybe uint32_t for len, unique_id and offset would be all right?
    */
 typedef struct {
   GtEditscript *editscript;
@@ -60,8 +62,8 @@ struct GtCondenseq {
   GtCondenseqLink   *links;
   GtCondenseqUnique *uniques;
   GtEncseq          *unique_es;
-  GtIntset          *sdstab;
-  GtIntset          *ssptab;
+  GtIntset          *sdstab,
+                    *ssptab;
   GtUchar           *ubuffer;
   char              *buffer,
                     *filename,
@@ -71,7 +73,7 @@ struct GtCondenseq {
           ids_total_len,
           ldb_allocated,
           ldb_nelems,
-          orig_length,
+          orig_len,
           orig_num_seq,
           ubuffsize,
           udb_allocated,
@@ -80,19 +82,21 @@ struct GtCondenseq {
 
 /* Returns a new GtCondenseq object, which is empty and can be filled by
    GtCondenseqCreator */
-GtCondenseq *gt_condenseq_new(const GtEncseq *orig_es, GtLogger *logger);
+GtCondenseq* gt_condenseq_new(const GtEncseq *orig_es, GtLogger *logger);
 
 /* Returns index of the unique element with the biggest orig_startpos smaller
    than <position>. if smallest is larger: return first. */
-GtUword gt_condenseq_uniques_position_binsearch(const GtCondenseq *condenseq,
-                                                GtUword position);
+GtUword      gt_condenseq_uniques_position_binsearch(
+                                                   const GtCondenseq *condenseq,
+                                                   GtUword position);
 
 /* Add <link> to <condenseq>, fails if links are not added in a sorted (by
    position) manner. */
-void gt_condenseq_add_link_to_db(GtCondenseq *condenseq, GtCondenseqLink link);
+void         gt_condenseq_add_link_to_db(GtCondenseq *condenseq,
+                                         GtCondenseqLink link);
 
 /* Add unique substring to <condenseq>. */
-void gt_condenseq_add_unique_to_db(GtCondenseq *condenseq,
-                                   GtUword orig_startpos,
-                                   ces_unsigned len);
+void         gt_condenseq_add_unique_to_db(GtCondenseq *condenseq,
+                                           GtUword orig_startpos,
+                                           ces_unsigned len);
 #endif
diff --git a/src/extended/diagonalbandalign.c b/src/extended/diagonalbandalign.c
index 4330cb8..b546fc3 100644
--- a/src/extended/diagonalbandalign.c
+++ b/src/extended/diagonalbandalign.c
@@ -142,19 +142,19 @@ static GtUword diagonalband_squarespace_distance_only(const GtUchar *useq,
 }
 
 /* creating alignment with diagonalband in square space */
-GtUword diagonalbandalignment_in_square_space_generic(GtLinspaceManagement
-                                                                   *space,
-                                                      GtAlignment *align,
-                                                      const GtUchar *useq,
-                                                      GtUword ustart,
-                                                      GtUword ulen,
-                                                      const GtUchar *vseq,
-                                                      GtUword vstart,
-                                                      GtUword vlen,
-                                                      GtWord left_dist,
-                                                      GtWord right_dist,
-                                                      const GtScoreHandler
-                                                      *scorehandler)
+GtUword gt_diagonalbandalignment_in_square_space_generic(GtLinspaceManagement
+                                                         *space,
+                                                         GtAlignment *align,
+                                                         const GtUchar *useq,
+                                                         GtUword ustart,
+                                                         GtUword ulen,
+                                                         const GtUchar *vseq,
+                                                         GtUword vstart,
+                                                         GtUword vlen,
+                                                         GtWord left_dist,
+                                                         GtWord right_dist,
+                                                         const GtScoreHandler
+                                                         *scorehandler)
 {
   GtUword **EDtabcolumn, distance;
 
@@ -174,7 +174,7 @@ GtUword diagonalbandalignment_in_square_space_generic(GtLinspaceManagement
   else
   {
     /*use it in lineraspace context*/
-    EDtabcolumn = gt_linspaceManagement_change_to_square(space, ulen, vlen);
+    EDtabcolumn = gt_linspace_management_change_to_square(space, ulen, vlen);
   }
 
   diagonalband_fillDPtab_in_square_space(EDtabcolumn, useq, ustart, ulen,
@@ -183,8 +183,8 @@ GtUword diagonalbandalignment_in_square_space_generic(GtLinspaceManagement
 
   distance = EDtabcolumn[ulen][vlen];
   /* reconstruct alignment from 2dimarray EDtabcolumn */
-  reconstructalignment_from_EDtab(align, EDtabcolumn, useq, ustart, ulen,
-                                  vseq, vstart, vlen, scorehandler);
+  gt_reconstructalignment_from_EDtab(align, EDtabcolumn, useq, ustart, ulen,
+                                     vseq, vstart, vlen, scorehandler);
 
   if (space == NULL)
   {
@@ -195,26 +195,26 @@ GtUword diagonalbandalignment_in_square_space_generic(GtLinspaceManagement
 
 /* creating alignment with diagonalband in square space
    with constant cost values */
-GtUword diagonalbandalignment_in_square_space(GtLinspaceManagement
-                                              *spacemanager,
-                                              GtAlignment *alignment,
-                                              const GtUchar *useq,
-                                              GtUword ustart,
-                                              GtUword ulen,
-                                              const GtUchar *vseq,
-                                              GtUword vstart,
-                                              GtUword vlen,
-                                              GtWord left_dist,
-                                              GtWord right_dist,
-                                              GtUword matchcost,
-                                              GtUword mismatchcost,
-                                              GtUword gapcost)
+GtUword gt_diagonalbandalignment_in_square_space(GtLinspaceManagement
+                                                 *spacemanager,
+                                                 GtAlignment *alignment,
+                                                 const GtUchar *useq,
+                                                 GtUword ustart,
+                                                 GtUword ulen,
+                                                 const GtUchar *vseq,
+                                                 GtUword vstart,
+                                                 GtUword vlen,
+                                                 GtWord left_dist,
+                                                 GtWord right_dist,
+                                                 GtUword matchcost,
+                                                 GtUword mismatchcost,
+                                                 GtUword gapcost)
 {
   GtUword distance;
   GtScoreHandler *scorehandler;
 
   scorehandler = gt_scorehandler_new(matchcost, mismatchcost, 0, gapcost);
-  distance = diagonalbandalignment_in_square_space_generic(spacemanager,
+  distance = gt_diagonalbandalignment_in_square_space_generic(spacemanager,
                                                            alignment,
                                                            useq, ustart, ulen,
                                                            vseq, vstart, vlen,
@@ -226,15 +226,16 @@ GtUword diagonalbandalignment_in_square_space(GtLinspaceManagement
 }
 
 static void evaluate_DBcrosspoints_from_2dimtab(GtUword **E,
-                                            Diagentry *Dtab,
-                                            const GtUchar *useq,
-                                            GtUword ustart,
-                                            GtUword ulen,
-                                            const GtUchar *vseq,
-                                            GtUword vstart,
-                                            GtUword vlen,
-                                            GtUword rowoffset,
-                                            const GtScoreHandler *scorehandler)
+                                                GtDiagAlignentry *Dtab,
+                                                const GtUchar *useq,
+                                                GtUword ustart,
+                                                GtUword ulen,
+                                                const GtUchar *vseq,
+                                                GtUword vstart,
+                                                GtUword vlen,
+                                                GtUword rowoffset,
+                                                const GtScoreHandler
+                                                *scorehandler)
 {
   GtUword idx, jdx, gapcost;
 
@@ -284,18 +285,18 @@ static void evaluate_DBcrosspoints_from_2dimtab(GtUword **E,
 
 /*create DBcrosspointtab to combine square calculating with linear calculating*/
 GT_UNUSED  static void dtab_in_square_space(GtLinspaceManagement *spacemanager,
-                                 Diagentry *Dtab,
-                                 const GtUchar *useq,
-                                 GtUword ustart,
-                                 GtUword ulen,
-                                 const GtUchar *vseq,
-                                 GtUword vstart,
-                                 GtUword vlen,
-                                 GtWord left_dist,
-                                 GtWord right_dist,
-                                 GtUword rowoffset,
-                                 LinearAlignEdge edge,
-                                 const GtScoreHandler *scorehandler)
+                                            GtDiagAlignentry *Dtab,
+                                            const GtUchar *useq,
+                                            GtUword ustart,
+                                            GtUword ulen,
+                                            const GtUchar *vseq,
+                                            GtUword vstart,
+                                            GtUword vlen,
+                                            GtWord left_dist,
+                                            GtWord right_dist,
+                                            GtUword rowoffset,
+                                            LinearAlignEdge edge,
+                                            const GtScoreHandler *scorehandler)
 {
   GtUword **EDtabcolumn;
   gt_assert(Dtab && scorehandler && spacemanager);
@@ -306,7 +307,7 @@ GT_UNUSED  static void dtab_in_square_space(GtLinspaceManagement *spacemanager,
     gt_assert(false);
   }
 
-  EDtabcolumn = gt_linspaceManagement_change_to_square(spacemanager,ulen,vlen);
+  EDtabcolumn = gt_linspace_management_change_to_square(spacemanager,ulen,vlen);
   diagonalband_fillDPtab_in_square_space(EDtabcolumn, useq, ustart, ulen,
                                          vseq, vstart, vlen, left_dist,
                                          right_dist, scorehandler);
@@ -419,7 +420,7 @@ static GtUword diagonalband_linear_distance_only(const GtUchar *useq,
 
 static void firstDBtabcolumn(GtUword *EDtabcolumn,
                              GtUword *Rtabcolumn,
-                             Diagentry *Diagcolumn,
+                             GtDiagAlignentry *Diagcolumn,
                              LinearAlignEdge edge,
                              const GtWord offset,
                              GtWord left_dist,
@@ -465,12 +466,12 @@ static void firstDBtabcolumn(GtUword *EDtabcolumn,
 }
 
 static inline void set_linear_DiagentryRtabentry(LinearAlignEdge edge,
-                                                 GtWord diag, GtUword colindex,
-                                                 GtUword rowindex,
-                                                 GtUword offset,
-                                                 Diagentry *Diagcolumnentry,
-                                                 GtUword *Rtabcolumnentry,
-                                                 GtUword Rtabentry_from)
+                                              GtWord diag, GtUword colindex,
+                                              GtUword rowindex,
+                                              GtUword offset,
+                                              GtDiagAlignentry *Diagcolumnentry,
+                                              GtUword *Rtabcolumnentry,
+                                              GtUword Rtabentry_from)
 {
     if (diag == (GtWord)colindex - (GtWord)rowindex)
     {
@@ -488,7 +489,7 @@ static inline void set_linear_DiagentryRtabentry(LinearAlignEdge edge,
 /* calculate all E- and Rtabcolumns, store crosspoints in  Diagcolumn,
    return lastcrosspoint from optimal path */
 static GtUword evaluateallDBtabcolumns(GtLinspaceManagement *spacemanager,
-                                       Diagentry *Diagcolumn,
+                                       GtDiagAlignentry *Diagcolumn,
                                        const GtScoreHandler *scorehandler,
                                        LinearAlignEdge edge,
                                        GtWord offset,
@@ -514,8 +515,8 @@ static GtUword evaluateallDBtabcolumns(GtLinspaceManagement *spacemanager,
     gt_assert(false);
   }
 
-  EDtabcolumn = gt_linspaceManagement_get_valueTabspace(spacemanager);
-  Rtabcolumn = gt_linspaceManagement_get_rTabspace(spacemanager);
+  EDtabcolumn = gt_linspace_management_get_valueTabspace(spacemanager);
+  Rtabcolumn = gt_linspace_management_get_rTabspace(spacemanager);
 
   gapcost = gt_scorehandler_get_gapscore(scorehandler);
   diag = GT_DIV2(left_dist + right_dist);
@@ -654,7 +655,7 @@ static GtUword evaluateallDBtabcolumns(GtLinspaceManagement *spacemanager,
 
 /* calculate crosspoint realting to diagonal in recursive way */
 static void evaluateDBcrosspoints(GtLinspaceManagement *spacemanager,
-                                  Diagentry *Diagcolumn,
+                                  GtDiagAlignentry *Diagcolumn,
                                   const GtScoreHandler *scorehandler,
                                   LinearAlignEdge edge,
                                   GtUword rowoffset,
@@ -670,7 +671,7 @@ static void evaluateDBcrosspoints(GtLinspaceManagement *spacemanager,
 {
   GtUword idx, prevcpoint, cpoint, ctemp, new_ulen;
   GtWord new_left, new_right, diag = GT_DIV2(left_dist+right_dist);
-  Diagentry dtemp;
+  GtDiagAlignentry dtemp;
 
   if (ulen == 0)
   {
@@ -686,12 +687,12 @@ static void evaluateDBcrosspoints(GtLinspaceManagement *spacemanager,
 
   if (vlen == 0)
   {
-    Diagcolumn[0] = (Diagentry) {ulen, edge};
+    Diagcolumn[0] = (GtDiagAlignentry) {ulen, edge};
     return;
   }
 
-  if (gt_linspaceManagement_checksquare(spacemanager,ulen,vlen,
-                                        sizeof (GtUword),sizeof(GtUword)))
+  if (gt_linspace_management_checksquare(spacemanager,ulen,vlen,
+                                         sizeof (GtUword),sizeof(GtUword)))
   {
     dtab_in_square_space(spacemanager, Diagcolumn,
                          useq, ustart, ulen,
@@ -864,7 +865,7 @@ static void gt_calc_diagonalbandalign(GtLinspaceManagement *spacemanager,
                                       GtWord left_dist,
                                       GtWord right_dist)
 {
-  Diagentry *Diagcolumn;
+  GtDiagAlignentry *Diagcolumn;
   GtUword idx, gapcost, *EDtabcolumn, *Rtabcolumn;
 
   gt_assert(align && spacemanager && scorehandler);
@@ -875,36 +876,38 @@ static void gt_calc_diagonalbandalign(GtLinspaceManagement *spacemanager,
     gt_assert(false); /* no global alignment */
   }
 
-  gt_linspaceManagement_set_ulen(spacemanager,ulen);
+  gt_linspace_management_set_ulen(spacemanager,ulen);
   gapcost = gt_scorehandler_get_gapscore(scorehandler);
   if (ulen == 0UL)
   {
-    (void) construct_trivial_insertion_alignment(align,vlen,gapcost);
+    (void) gt_reconstructalignment_trivial_insertion(align, vlen, gapcost);
     return;
   }
   else if (vlen == 0UL)
   {
-    (void) construct_trivial_deletion_alignment(align,ulen,gapcost);
+    (void) gt_reconstructalignment_trivial_deletion(align, ulen, gapcost);
     return;
   }
-  else if (gt_linspaceManagement_checksquare(spacemanager, ulen, vlen,
-                                             sizeof (*EDtabcolumn),
-                                             sizeof (*Rtabcolumn)))
+  else if (gt_linspace_management_checksquare(spacemanager, ulen, vlen,
+                                              sizeof (*EDtabcolumn),
+                                              sizeof (*Rtabcolumn)))
   {
-    (void) diagonalbandalignment_in_square_space_generic(spacemanager,align,
-                                                         useq, ustart, ulen,
-                                                         vseq, vstart, vlen,
-                                                         left_dist, right_dist,
-                                                         scorehandler);
+    (void) gt_diagonalbandalignment_in_square_space_generic(spacemanager,align,
+                                                            useq, ustart, ulen,
+                                                            vseq, vstart, vlen,
+                                                            left_dist,
+                                                            right_dist,
+                                                            scorehandler);
     return;
   }
 
-  gt_linspaceManagement_check(spacemanager, MIN(right_dist-left_dist,ulen),vlen,
-                              sizeof (*EDtabcolumn),
-                              sizeof (*Rtabcolumn),
-                              sizeof (*Diagcolumn));
+  gt_linspace_management_check(spacemanager, MIN(right_dist-left_dist,ulen),
+                               vlen,
+                               sizeof (*EDtabcolumn),
+                               sizeof (*Rtabcolumn),
+                               sizeof (*Diagcolumn));
 
-  Diagcolumn = gt_linspaceManagement_get_crosspointTabspace(spacemanager);
+  Diagcolumn = gt_linspace_management_get_crosspointTabspace(spacemanager);
   /* initialize Diagcolumn */
   for (idx = 0; idx <= vlen; idx++)
   {
@@ -916,19 +919,19 @@ static void gt_calc_diagonalbandalign(GtLinspaceManagement *spacemanager,
                         Linear_X, 0, 0,  useq, ustart, ulen,
                         vseq, vstart, vlen, left_dist, right_dist);
 
-  reconstructalignment_from_Dtab(align,Diagcolumn,ulen, vlen);
+  gt_reconstructalignment_from_Dtab(align, Diagcolumn, ulen, vlen);
 }
 
 /* compute alignment within a diagonal band */
-void gt_computediagonalbandalign_generic(GtLinspaceManagement *spacemanager,
-                                         const GtScoreHandler *scorehandler,
-                                         GtAlignment *align,
-                                         const GtUchar *useq,
-                                         GtUword ustart, GtUword ulen,
-                                         const GtUchar *vseq,
-                                         GtUword vstart, GtUword vlen,
-                                         GtWord left_dist,
-                                         GtWord right_dist)
+void gt_diagonalbandalign_compute_generic(GtLinspaceManagement *spacemanager,
+                                          const GtScoreHandler *scorehandler,
+                                          GtAlignment *align,
+                                          const GtUchar *useq,
+                                          GtUword ustart, GtUword ulen,
+                                          const GtUchar *vseq,
+                                          GtUword vstart, GtUword vlen,
+                                          GtWord left_dist,
+                                          GtWord right_dist)
 {
 
   gt_assert(useq && vseq && align && spacemanager && scorehandler);
@@ -943,35 +946,35 @@ void gt_computediagonalbandalign_generic(GtLinspaceManagement *spacemanager,
                             left_dist, right_dist);
 }
 
-void gt_computediagonalbandalign(GtLinspaceManagement *spacemanager,
-                                 GtAlignment *align,
-                                 const GtUchar *useq,
-                                 GtUword ustart, GtUword ulen,
-                                 const GtUchar *vseq,
-                                 GtUword vstart, GtUword vlen,
-                                 GtWord left_dist,
-                                 GtWord right_dist,
-                                 GtUword matchcost,
-                                 GtUword mismatchcost,
-                                 GtUword gapcost)
+void gt_diagonalbandalign_compute(GtLinspaceManagement *spacemanager,
+                                  GtAlignment *align,
+                                  const GtUchar *useq,
+                                  GtUword ustart, GtUword ulen,
+                                  const GtUchar *vseq,
+                                  GtUword vstart, GtUword vlen,
+                                  GtWord left_dist,
+                                  GtWord right_dist,
+                                  GtUword matchcost,
+                                  GtUword mismatchcost,
+                                  GtUword gapcost)
 {
   GtScoreHandler *scorehandler;
   gt_assert(spacemanager && align);
 
   scorehandler = gt_scorehandler_new(matchcost, mismatchcost, 0, gapcost);
 
-  gt_computediagonalbandalign_generic(spacemanager, scorehandler, align,
-                                      useq, ustart, ulen,
-                                      vseq, vstart, vlen,
-                                      left_dist, right_dist);
+  gt_diagonalbandalign_compute_generic(spacemanager, scorehandler, align,
+                                       useq, ustart, ulen,
+                                       vseq, vstart, vlen,
+                                       left_dist, right_dist);
   gt_scorehandler_delete(scorehandler);
 }
 
-void gt_checkdiagonalbandalign(GT_UNUSED bool forward,
-                               const GtUchar *useq,
-                               GtUword ulen,
-                               const GtUchar *vseq,
-                               GtUword vlen)
+void gt_diagonalbandalign_check(GT_UNUSED bool forward,
+                                const GtUchar *useq,
+                                GtUword ulen,
+                                const GtUchar *vseq,
+                                GtUword vlen)
 {
   GtUword edist1, edist2, edist3, matchcost = 0, mismatchcost = 1, gapcost = 1;
   GtWord left_dist, right_dist;
@@ -1019,7 +1022,7 @@ void gt_checkdiagonalbandalign(GT_UNUSED bool forward,
     exit(GT_EXIT_PROGRAMMING_ERROR);
   }
 
-  spacemanager = gt_linspaceManagement_new();
+  spacemanager = gt_linspace_management_new();
   align = gt_alignment_new_with_seqs(useq, ulen, vseq, vlen);
 
   gt_calc_diagonalbandalign(spacemanager, scorehandler, align,
@@ -1035,6 +1038,6 @@ void gt_checkdiagonalbandalign(GT_UNUSED bool forward,
     exit(GT_EXIT_PROGRAMMING_ERROR);
   }
   gt_alignment_delete(align);
-  gt_linspaceManagement_delete(spacemanager);
+  gt_linspace_management_delete(spacemanager);
   gt_scorehandler_delete(scorehandler);
 }
diff --git a/src/extended/diagonalbandalign.h b/src/extended/diagonalbandalign.h
index b7ff9ba..1cee3aa 100644
--- a/src/extended/diagonalbandalign.h
+++ b/src/extended/diagonalbandalign.h
@@ -36,13 +36,7 @@ typedef enum {
 typedef struct {
   GtUword lastcpoint, currentrowindex;
   int last_type;
-} Diagentry;
-
-void gt_checkdiagonalbandalign(GT_UNUSED bool forward,
-                               const GtUchar *useq,
-                               GtUword ulen,
-                               const GtUchar *vseq,
-                               GtUword vlen);
+} GtDiagAlignentry;
 
 /* Computes a global alignment within a diagonal band with linear gapcosts in
    linear space. Use of this function requires an initialised <spacemanager>,
@@ -52,15 +46,15 @@ void gt_checkdiagonalbandalign(GT_UNUSED bool forward,
    <scorehandler>. <left_dist> and <right_dist> give lower and upper bound of
    a diagonal band in which DP-matrix is valid. Returns distance value
    of calculated global alignment. */
-void gt_computediagonalbandalign_generic(GtLinspaceManagement *spacemanager,
-                                         const GtScoreHandler *scorehandler,
-                                         GtAlignment *align,
-                                         const GtUchar *useq,
-                                         GtUword ustart, GtUword ulen,
-                                         const GtUchar *vseq,
-                                         GtUword vstart, GtUword vlen,
-                                         GtWord left_dist,
-                                         GtWord right_dist);
+void    gt_diagonalbandalign_compute_generic(GtLinspaceManagement *spacemanager,
+                                             const GtScoreHandler *scorehandler,
+                                             GtAlignment *align,
+                                             const GtUchar *useq,
+                                             GtUword ustart, GtUword ulen,
+                                             const GtUchar *vseq,
+                                             GtUword vstart, GtUword vlen,
+                                             GtWord left_dist,
+                                             GtWord right_dist);
 
 /* Computes a global alignment within a diaognal band with linear gapcosts in
    linear space and constant cost values. Use of this function requires an
@@ -70,17 +64,17 @@ void gt_computediagonalbandalign_generic(GtLinspaceManagement *spacemanager,
    specified by <matchcost>, <mismatchcost> and <gapcost>. <left_dist> and
    <right_dist> give lower and upper bound of a diagonal band in which DP-matrix
    is valid. Returns distance value of calculated global alignment. */
-void gt_computediagonalbandalign(GtLinspaceManagement *spacemanager,
-                                 GtAlignment *align,
-                                 const GtUchar *useq,
-                                 GtUword ustart, GtUword ulen,
-                                 const GtUchar *vseq,
-                                 GtUword vstart, GtUword vlen,
-                                 GtWord left_dist,
-                                 GtWord right_dist,
-                                 GtUword matchcost,
-                                 GtUword mismatchcost,
-                                 GtUword gapcost);
+void    gt_diagonalbandalign_compute(GtLinspaceManagement *spacemanager,
+                                     GtAlignment *align,
+                                     const GtUchar *useq,
+                                     GtUword ustart, GtUword ulen,
+                                     const GtUchar *vseq,
+                                     GtUword vstart, GtUword vlen,
+                                     GtWord left_dist,
+                                     GtWord right_dist,
+                                     GtUword matchcost,
+                                     GtUword mismatchcost,
+                                     GtUword gapcost);
 
 /* Computes a global alignment within a diagonal band with linear gapcosts in
    square space. Use of this function requires an initialised <scorehandler>
@@ -91,8 +85,8 @@ void gt_computediagonalbandalign(GtLinspaceManagement *spacemanager,
    <spacemanager> is required to use this function in linear space context, in
    any other case it can be NULL. <scorehandler> manages linear gap costs.
    Returns cost value of global alignment. */
-GtUword diagonalbandalignment_in_square_space_generic(
-                                            GtLinspaceManagement *space,
+GtUword gt_diagonalbandalignment_in_square_space_generic(
+                                            GtLinspaceManagement *spacemanager,
                                             GtAlignment *align,
                                             const GtUchar *useq,
                                             GtUword ustart,
@@ -114,19 +108,24 @@ GtUword diagonalbandalignment_in_square_space_generic(
    <spacemanager> is required to use this function in linear space context, in
    any other case it can be NULL. <scorehandler> manages linear gap costs.
    Returns cost value of global alignment. */
-GtUword diagonalbandalignment_in_square_space(GtLinspaceManagement
-                                              *spacemanager,
-                                              GtAlignment *align,
-                                              const GtUchar *useq,
-                                              GtUword ustart,
-                                              GtUword ulen,
-                                              const GtUchar *vseq,
-                                              GtUword vstart,
-                                              GtUword vlen,
-                                              GtWord left_dist,
-                                              GtWord right_dist,
-                                              GtUword matchcost,
-                                              GtUword mismatchcost,
-                                              GtUword gapcost);
+GtUword gt_diagonalbandalignment_in_square_space(GtLinspaceManagement
+                                                 *spacemanager,
+                                                 GtAlignment *align,
+                                                 const GtUchar *useq,
+                                                 GtUword ustart,
+                                                 GtUword ulen,
+                                                 const GtUchar *vseq,
+                                                 GtUword vstart,
+                                                 GtUword vlen,
+                                                 GtWord left_dist,
+                                                 GtWord right_dist,
+                                                 GtUword matchcost,
+                                                 GtUword mismatchcost,
+                                                 GtUword gapcost);
 
+void    gt_diagonalbandalign_check(GT_UNUSED bool forward,
+                                   const GtUchar *useq,
+                                   GtUword ulen,
+                                   const GtUchar *vseq,
+                                   GtUword vlen);
 #endif
diff --git a/src/extended/diagonalbandalign_affinegapcost.c b/src/extended/diagonalbandalign_affinegapcost.c
index af349cf..36bfae3 100644
--- a/src/extended/diagonalbandalign_affinegapcost.c
+++ b/src/extended/diagonalbandalign_affinegapcost.c
@@ -31,7 +31,7 @@
 
 #define LINEAR_EDIST_GAP          ((GtUchar) UCHAR_MAX)
 
-static void diagonalband_fillDPtab_affine(AffinealignDPentry **Atabcolumn,
+static void diagonalband_fillDPtab_affine(GtAffinealignDPentry **Atabcolumn,
                                           const GtUchar *useq,
                                           GtUword ustart,
                                           GtUword ulen,
@@ -40,8 +40,8 @@ static void diagonalband_fillDPtab_affine(AffinealignDPentry **Atabcolumn,
                                           GtUword vlen,
                                           GtWord left_dist,
                                           GtWord right_dist,
-                                          AffineAlignEdge from_edge,
-                                          AffineAlignEdge edge,
+                                          GtAffineAlignEdge from_edge,
+                                          GtAffineAlignEdge edge,
                                           const GtScoreHandler *scorehandler)
 {
   GtUword i,j, low_row, high_row, gap_opening, gap_extension;
@@ -97,7 +97,9 @@ static void diagonalband_fillDPtab_affine(AffinealignDPentry **Atabcolumn,
     Atabcolumn[i][0].Ivalue = GT_WORD_MAX;
 
     Atabcolumn[i][0].Redge = Affine_X;
-    Atabcolumn[i][0].Dedge = set_edge(r_dist, d_dist, i_dist);
+    Atabcolumn[i][0].Dedge = gt_linearalign_affinegapcost_set_edge(r_dist,
+                                                                   d_dist,
+                                                                   i_dist);
     Atabcolumn[i][0].Iedge = Affine_X;
   }
   for (; i <= ulen; i++)
@@ -129,7 +131,9 @@ static void diagonalband_fillDPtab_affine(AffinealignDPentry **Atabcolumn,
         Atabcolumn[i][j].Rvalue = GT_WORD_MAX;
         Atabcolumn[i][j].Dvalue = GT_WORD_MAX;
 
-        Atabcolumn[i][j].Iedge = set_edge(r_dist, d_dist, i_dist);
+        Atabcolumn[i][j].Iedge = gt_linearalign_affinegapcost_set_edge(r_dist,
+                                                         d_dist,
+                                                         i_dist);
       }
       else{
         Atabcolumn[i][j].Rvalue = GT_WORD_MAX;
@@ -152,7 +156,8 @@ static void diagonalband_fillDPtab_affine(AffinealignDPentry **Atabcolumn,
       i_dist=add_safe_max(Atabcolumn[i][j-1].Ivalue,gap_extension);
       minvalue = MIN3(r_dist, d_dist, i_dist);
       Atabcolumn[i][j].Ivalue = minvalue;
-      Atabcolumn[i][j].Iedge = set_edge(r_dist, d_dist, i_dist);
+      Atabcolumn[i][j].Iedge = gt_linearalign_affinegapcost_set_edge(
+                                                        r_dist, d_dist, i_dist);
 
       /* compute A_affine(i,j,R) */
       rcost = gt_scorehandler_get_replacement(scorehandler,
@@ -162,7 +167,8 @@ static void diagonalband_fillDPtab_affine(AffinealignDPentry **Atabcolumn,
       i_dist = add_safe_max(Atabcolumn[i-1][j-1].Ivalue, rcost);
       minvalue = MIN3(r_dist, d_dist, i_dist);
       Atabcolumn[i][j].Rvalue = minvalue;
-      Atabcolumn[i][j].Redge = set_edge(r_dist, d_dist, i_dist);
+      Atabcolumn[i][j].Redge = gt_linearalign_affinegapcost_set_edge(
+                                                        r_dist, d_dist, i_dist);
 
       /* compute A_affine(i,j,D) */
       r_dist = add_safe_max(Atabcolumn[i-1][j].Rvalue,
@@ -172,7 +178,8 @@ static void diagonalband_fillDPtab_affine(AffinealignDPentry **Atabcolumn,
                           gap_extension+gap_opening);
       minvalue = MIN3(r_dist, d_dist, i_dist);
       Atabcolumn[i][j].Dvalue = minvalue;
-      Atabcolumn[i][j].Dedge = set_edge(r_dist, d_dist, i_dist);
+      Atabcolumn[i][j].Dedge = gt_linearalign_affinegapcost_set_edge(
+                                                        r_dist, d_dist, i_dist);
 
     }
     /* above diagonal band */
@@ -187,22 +194,22 @@ static void diagonalband_fillDPtab_affine(AffinealignDPentry **Atabcolumn,
 
 /* calculate alignment with diagonalband in square space with
  * affine gapcosts */
-GtWord diagonalbandalignment_in_square_space_affine_generic(
-                                            GtLinspaceManagement *space,
-                                            const GtScoreHandler *scorehandler,
-                                            GtAlignment *align,
-                                            const GtUchar *useq,
-                                            GtUword ustart,
-                                            GtUword ulen,
-                                            const GtUchar *vseq,
-                                            GtUword vstart,
-                                            GtUword vlen,
-                                            GtWord left_dist,
-                                            GtWord right_dist)
+GtWord gt_diagonalbandalign_affinegapcost_in_square_space_generic(
+                                             GtLinspaceManagement *space,
+                                             const GtScoreHandler *scorehandler,
+                                             GtAlignment *align,
+                                             const GtUchar *useq,
+                                             GtUword ustart,
+                                             GtUword ulen,
+                                             const GtUchar *vseq,
+                                             GtUword vstart,
+                                             GtUword vlen,
+                                             GtWord left_dist,
+                                             GtWord right_dist)
 {
   GtWord distance;
   GtUword idx;
-  AffinealignDPentry **Atabcolumn;
+  GtAffinealignDPentry **Atabcolumn;
 
   gt_assert(align && scorehandler);
   if (space == NULL)
@@ -212,10 +219,10 @@ GtWord diagonalbandalignment_in_square_space_affine_generic(
   else
   {
     gt_assert((ulen+1)*(vlen+1)*sizeof(**Atabcolumn) <=
-               gt_linspaceManagement_get_valueTabsize(space));
+               gt_linspace_management_get_valueTabsize(space));
 
-    Atabcolumn = gt_linspaceManagement_get_rTabspace(space);
-    *Atabcolumn = gt_linspaceManagement_get_valueTabspace(space);
+    Atabcolumn = gt_linspace_management_get_rTabspace(space);
+    *Atabcolumn = gt_linspace_management_get_valueTabspace(space);
 
     for (idx=1; idx<ulen+1; idx++)
       Atabcolumn[idx]=Atabcolumn[idx-1]+vlen+1;
@@ -230,7 +237,7 @@ GtWord diagonalbandalignment_in_square_space_affine_generic(
                   Atabcolumn[ulen][vlen].Ivalue);
 
   /* reconstruct alignment from 2dimarray Atabcolumn */
-  affinealign_traceback(align, Atabcolumn, ulen, vlen);
+  gt_affinealign_traceback(align, Atabcolumn, ulen, vlen);
 
   if (space == NULL)
   {
@@ -241,7 +248,8 @@ GtWord diagonalbandalignment_in_square_space_affine_generic(
 
 /* calculate alignment with diagonalband in square space with
  * affine gapcosts */
-GtWord diagonalbandalignment_in_square_space_affine(GtLinspaceManagement *space,
+GtWord gt_diagonalbandalign_affinegapcost_in_square_space(
+                                                    GtLinspaceManagement *space,
                                                     GtAlignment *align,
                                                     const GtUchar *useq,
                                                     GtUword ustart,
@@ -260,7 +268,7 @@ GtWord diagonalbandalignment_in_square_space_affine(GtLinspaceManagement *space,
   GtScoreHandler *scorehandler = gt_scorehandler_new(matchcost,mismatchcost,
                                                     gap_opening, gap_extension);
 
-  distance = diagonalbandalignment_in_square_space_affine_generic(space,
+  distance = gt_diagonalbandalign_affinegapcost_in_square_space_generic(space,
                                      scorehandler, align, useq, ustart, ulen,
                                      vseq, vstart, vlen, left_dist, right_dist);
   gt_scorehandler_delete(scorehandler);
@@ -270,18 +278,20 @@ GtWord diagonalbandalignment_in_square_space_affine(GtLinspaceManagement *space,
 
 /* calculate only distance with diagonalband in square space  with
  * affine gapcosts */
-GtWord diagonalband_square_space_affine(const GtUchar *useq,
-                                       GtUword ustart,
-                                       GtUword ulen,
-                                       const GtUchar *vseq,
-                                       GtUword vstart,
-                                       GtUword vlen,
-                                       GtWord left_dist,
-                                       GtWord right_dist,
-                                       const GtScoreHandler *scorehandler)
+GtWord gt_diagonalbandalign_affinegapcost_square_space_distance_only(
+                                                           const GtUchar *useq,
+                                                           GtUword ustart,
+                                                           GtUword ulen,
+                                                           const GtUchar *vseq,
+                                                           GtUword vstart,
+                                                           GtUword vlen,
+                                                           GtWord left_dist,
+                                                           GtWord right_dist,
+                                                           const GtScoreHandler
+                                                           *scorehandler)
 {
   GtUword  distance;
-  AffinealignDPentry **Atabcolumn;
+  GtAffinealignDPentry **Atabcolumn;
   gt_assert(scorehandler);
 
    if ((left_dist > MIN(0, (GtWord)vlen-(GtWord)ulen))||
@@ -303,37 +313,39 @@ GtWord diagonalband_square_space_affine(const GtUchar *useq,
   return distance;
 }
 
-static Rnode evaluate_affineDBcrosspoints_from_2dimtab(AffineDiagentry *Dtab,
-                                                AffinealignDPentry **Atabcolumn,
-                                                GtUword ulen, GtUword vlen,
-                                                GtUword gap_opening,
-                                                GtUword rowoffset,
-                                                AffineAlignEdge from_edge,
-                                                AffineAlignEdge edge)
+static GtAffineAlignRnode evaluate_affineDBcrosspoints_from_2dimtab(
+                                              GtAffineDiagAlignentry *Dtab,
+                                              GtAffinealignDPentry **Atabcolumn,
+                                              GtUword ulen, GtUword vlen,
+                                              GtUword gap_opening,
+                                              GtUword rowoffset,
+                                              GtAffineAlignEdge from_edge,
+                                              GtAffineAlignEdge edge)
 {
   GtUword i, j;
-  Rnode rnode;
-  Diagentry *tempnode;
+  GtAffineAlignRnode rnode;
+  GtDiagAlignentry *tempnode;
   gt_assert(Atabcolumn != NULL);
 
   i = ulen;
   j = vlen;
 
-  edge = minAdditionalCosts(&Atabcolumn[i][j], edge, gap_opening);
+  edge = gt_linearalign_affinegapcost_minAdditionalCosts(&Atabcolumn[i][j],
+                                                         edge, gap_opening);
 
   switch (edge)
   {
     case Affine_I:
       tempnode = &Dtab[vlen].val_I;
-      rnode = (Rnode) {vlen, Affine_I};
+      rnode = (GtAffineAlignRnode) {vlen, Affine_I};
       break;
     case Affine_D:
       tempnode = &Dtab[vlen].val_D;
-      rnode = (Rnode) {vlen, Affine_D};
+      rnode = (GtAffineAlignRnode) {vlen, Affine_D};
       break;
     default:
       tempnode = &Dtab[vlen].val_R;
-      rnode = (Rnode) {vlen, Affine_R};
+      rnode = (GtAffineAlignRnode) {vlen, Affine_R};
   }
 
   while (i > 0 || j > 0) {
@@ -369,9 +381,9 @@ static Rnode evaluate_affineDBcrosspoints_from_2dimtab(AffineDiagentry *Dtab,
   }
   tempnode->last_type = edge;
   /* special case for first crosspoint */
-  Dtab[0].val_R = (Diagentry) {GT_UWORD_MAX, rowoffset, from_edge};
-  Dtab[0].val_D = (Diagentry) {GT_UWORD_MAX, rowoffset, from_edge};
-  Dtab[0].val_I = (Diagentry) {GT_UWORD_MAX, rowoffset, from_edge};
+  Dtab[0].val_R = (GtDiagAlignentry) {GT_UWORD_MAX, rowoffset, from_edge};
+  Dtab[0].val_D = (GtDiagAlignentry) {GT_UWORD_MAX, rowoffset, from_edge};
+  Dtab[0].val_I = (GtDiagAlignentry) {GT_UWORD_MAX, rowoffset, from_edge};
 
   return rnode;
 }
@@ -382,32 +394,34 @@ static Rnode evaluate_affineDBcrosspoints_from_2dimtab(AffineDiagentry *Dtab,
  * previous crosspoint.
  * Returns edge and index of lastcrosspoint in matrix.
  */
-static Rnode affineDtab_in_square_space(GtLinspaceManagement *space,
-                                         AffineDiagentry *Dtab,
-                                         const GtUchar *useq,
-                                         GtUword ustart,
-                                         GtUword ulen,
-                                         const GtUchar *vseq,
-                                         GtUword vstart,
-                                         GtUword vlen,
-                                         GtWord left_dist,
-                                         GtWord right_dist,
-                                         GtUword rowoffset,
-                                         AffineAlignEdge from_edge,
-                                         AffineAlignEdge edge,
-                                         AffineAlignEdge to_edge,
-                                         const GtScoreHandler *scorehandler)
+static GtAffineAlignRnode affineDtab_in_square_space(
+                                                   GtLinspaceManagement *space,
+                                                   GtAffineDiagAlignentry *Dtab,
+                                                   const GtUchar *useq,
+                                                   GtUword ustart,
+                                                   GtUword ulen,
+                                                   const GtUchar *vseq,
+                                                   GtUword vstart,
+                                                   GtUword vlen,
+                                                   GtWord left_dist,
+                                                   GtWord right_dist,
+                                                   GtUword rowoffset,
+                                                   GtAffineAlignEdge from_edge,
+                                                   GtAffineAlignEdge edge,
+                                                   GtAffineAlignEdge to_edge,
+                                                   const GtScoreHandler
+                                                   *scorehandler)
 {
-  AffinealignDPentry **Atabcolumn;
+  GtAffinealignDPentry **Atabcolumn;
   GtUword idx, gap_opening;
 
   gt_assert(Dtab && space && scorehandler);
 
   gt_assert((ulen+1)*(vlen+1)*sizeof(**Atabcolumn) <=
-               gt_linspaceManagement_get_valueTabsize(space));
+               gt_linspace_management_get_valueTabsize(space));
 
-  Atabcolumn=gt_linspaceManagement_get_rTabspace(space);
-  *Atabcolumn=gt_linspaceManagement_get_valueTabspace(space);
+  Atabcolumn = gt_linspace_management_get_rTabspace(space);
+  *Atabcolumn = gt_linspace_management_get_valueTabspace(space);
 
   for (idx=1;idx<ulen+1;idx++)
     Atabcolumn[idx]=Atabcolumn[idx-1]+vlen+1;
@@ -416,9 +430,9 @@ static Rnode affineDtab_in_square_space(GtLinspaceManagement *space,
                                 from_edge, edge, scorehandler);
 
   gap_opening = gt_scorehandler_get_gap_opening(scorehandler);
-  Rnode rnode = evaluate_affineDBcrosspoints_from_2dimtab(Dtab, Atabcolumn,
-                                                 ulen, vlen, gap_opening,
-                                                 rowoffset, from_edge, to_edge);
+  GtAffineAlignRnode rnode = evaluate_affineDBcrosspoints_from_2dimtab(Dtab,
+                                            Atabcolumn, ulen, vlen, gap_opening,
+                                            rowoffset, from_edge, to_edge);
 
   return rnode;
 }
@@ -438,8 +452,8 @@ static GtWord diagonalband_linear_affine(const GtUchar *useq,
   GtUword colindex, rowindex, low_row, high_row, width,
           gap_opening, gap_extension;
   GtWord distance, rcost, r_dist, d_dist, i_dist, minvalue;
-  AffinealignDPentry *Atabcolumn, northwestAffinealignDPentry,
-                      westAffinealignDPentry;
+  GtAffinealignDPentry *Atabcolumn, northwestAffinealignDPentry,
+                       westAffinealignDPentry;
   bool last_row = false;
   distance = GT_WORD_MAX;
 
@@ -570,7 +584,7 @@ static GtWord diagonalband_linear_affine(const GtUchar *useq,
 }
 
 /* helpfunctions */
-static void inline  set_invalid_Diagentry(Diagentry *node)
+static void inline  set_invalid_Diagentry(GtDiagAlignentry *node)
 {
   gt_assert(node != NULL);
   node->currentrowindex = GT_UWORD_MAX;
@@ -578,8 +592,8 @@ static void inline  set_invalid_Diagentry(Diagentry *node)
   node->lastcpoint = GT_UWORD_MAX;
 }
 
-static void inline set_valid_Diagentry(Diagentry *node_to,
-                                       const Rtabentry *entry_from,
+static void inline set_valid_Diagentry(GtDiagAlignentry *node_to,
+                                       const GtAffineAlignRtabentry *entry_from,
                                        GtWord minvalue, GtWord r_dist,
                                        GtWord i_dist, GtWord d_dist)
 {
@@ -602,14 +616,15 @@ static void inline set_valid_Diagentry(Diagentry *node_to,
 
 }
 
-static void inline set_invalid_Rnode(Rnode *node)
+static void inline set_invalid_Rnode(GtAffineAlignRnode *node)
 {
   gt_assert(node != NULL);
   node->idx = GT_UWORD_MAX;
   node->edge = Affine_X;
 }
 
-static void inline set_valid_Rnode(Rnode *node_to, Rtabentry *entry_from,
+static void inline set_valid_Rnode(GtAffineAlignRnode *node_to,
+                                   GtAffineAlignRtabentry *entry_from,
                                    GtWord minvalue, GtWord r_dist,
                                    GtWord i_dist, GtWord d_dist)
 {
@@ -623,11 +638,11 @@ static void inline set_valid_Rnode(Rnode *node_to, Rtabentry *entry_from,
 }
 
 /* calculate first column */
-static void firstaffineDBtabcolumn(AffinealignDPentry *Atabcolumn,
-                                   Rtabentry *Rtabcolumn,
-                                   AffineDiagentry *Diagcolumn,
-                                   AffineAlignEdge edge,
-                                   AffineAlignEdge from_edge,
+static void firstaffineDBtabcolumn(GtAffinealignDPentry *Atabcolumn,
+                                   GtAffineAlignRtabentry *Rtabcolumn,
+                                   GtAffineDiagAlignentry *Diagcolumn,
+                                   GtAffineAlignEdge edge,
+                                   GtAffineAlignEdge from_edge,
                                    GtUword offset,
                                    GtWord left_dist,
                                    GtWord right_dist,
@@ -736,29 +751,30 @@ static void firstaffineDBtabcolumn(AffinealignDPentry *Atabcolumn,
 }
 
 /* calculate all columns */
-static Rnode evaluateallaffineDBcolumns(GtLinspaceManagement *spacemanager,
-                                        AffineDiagentry *Diagcolumn,
-                                        const GtScoreHandler *scorehandler,
-                                        AffineAlignEdge edge,
-                                        AffineAlignEdge from_edge,
-                                        AffineAlignEdge to_edge,
-                                        GtUword offset,
-                                        const GtUchar *useq,
-                                        GtUword ustart, GtUword ulen,
-                                        const GtUchar *vseq,
-                                        GtUword vstart, GtUword vlen,
-                                        GtWord left_dist, GtWord right_dist)
+static GtAffineAlignRnode evaluateallaffineDBcolumns(
+                                            GtLinspaceManagement *spacemanager,
+                                            GtAffineDiagAlignentry *Diagcolumn,
+                                            const GtScoreHandler *scorehandler,
+                                            GtAffineAlignEdge edge,
+                                            GtAffineAlignEdge from_edge,
+                                            GtAffineAlignEdge to_edge,
+                                            GtUword offset,
+                                            const GtUchar *useq,
+                                            GtUword ustart, GtUword ulen,
+                                            const GtUchar *vseq,
+                                            GtUword vstart, GtUword vlen,
+                                            GtWord left_dist, GtWord right_dist)
 {
   GtUword gap_extension, gap_opening, colindex, rowindex, low_row, high_row;
   /*lowest and highest row between a diagonal band*/
   GtWord diag, r_dist, d_dist, i_dist, minvalue, rcost;
 
   bool last_row = false;
-  AffinealignDPentry *Atabcolumn, northwestAffinealignDPentry,
-  westAffinealignDPentry = (AffinealignDPentry)
+  GtAffinealignDPentry *Atabcolumn, northwestAffinealignDPentry,
+  westAffinealignDPentry = (GtAffinealignDPentry)
                            {GT_WORD_MAX, GT_WORD_MAX, GT_WORD_MAX};;
-  Rtabentry *Rtabcolumn, northwestRtabentry, westRtabentry = {{0}} ;
-  Rnode lastcpoint = {GT_UWORD_MAX, Affine_X};
+  GtAffineAlignRtabentry *Rtabcolumn, northwestRtabentry, westRtabentry = {{0}};
+  GtAffineAlignRnode lastcpoint = {GT_UWORD_MAX, Affine_X};
 
   if ((left_dist > MIN(0, (GtWord)vlen-(GtWord)ulen))||
       (right_dist < MAX(0, (GtWord)vlen-(GtWord)ulen)))
@@ -766,8 +782,8 @@ static Rnode evaluateallaffineDBcolumns(GtLinspaceManagement *spacemanager,
     gt_assert(false);
   }
 
-  Atabcolumn = gt_linspaceManagement_get_valueTabspace(spacemanager);
-  Rtabcolumn = gt_linspaceManagement_get_rTabspace(spacemanager);
+  Atabcolumn = gt_linspace_management_get_valueTabspace(spacemanager);
+  Rtabcolumn = gt_linspace_management_get_rTabspace(spacemanager);
 
   diag = GT_DIV2(left_dist + right_dist);
   low_row = 0;
@@ -804,11 +820,11 @@ static Rnode evaluateallaffineDBcolumns(GtLinspaceManagement *spacemanager,
       high_row ++;
     if (!last_row && low_row == high_row)
     {/* prev is outside of diagonalband*/
-      westAffinealignDPentry = (AffinealignDPentry)
+      westAffinealignDPentry = (GtAffinealignDPentry)
                                {GT_WORD_MAX, GT_WORD_MAX, GT_WORD_MAX};
-      westRtabentry.val_R = (Rnode) {GT_UWORD_MAX, Affine_X};
-      westRtabentry.val_D = (Rnode) {GT_UWORD_MAX, Affine_X};
-      westRtabentry.val_I = (Rnode) {GT_UWORD_MAX, Affine_X};
+      westRtabentry.val_R = (GtAffineAlignRnode) {GT_UWORD_MAX, Affine_X};
+      westRtabentry.val_D = (GtAffineAlignRnode) {GT_UWORD_MAX, Affine_X};
+      westRtabentry.val_I = (GtAffineAlignRnode) {GT_UWORD_MAX, Affine_X};
     }
 
     /* insertion */
@@ -839,8 +855,8 @@ static Rnode evaluateallaffineDBcolumns(GtLinspaceManagement *spacemanager,
     {
       set_valid_Rnode(&Rtabcolumn[0].val_I, &westRtabentry, minvalue,
                        r_dist, i_dist, d_dist);
-      Rtabcolumn[0].val_D = (Rnode) {GT_UWORD_MAX, Affine_X};
-      Rtabcolumn[0].val_R = (Rnode) {GT_UWORD_MAX, Affine_X};
+      Rtabcolumn[0].val_D = (GtAffineAlignRnode) {GT_UWORD_MAX, Affine_X};
+      Rtabcolumn[0].val_R = (GtAffineAlignRnode) {GT_UWORD_MAX, Affine_X};
     }
 
     /* replacement possible for 0-entry */
@@ -877,11 +893,11 @@ static Rnode evaluateallaffineDBcolumns(GtLinspaceManagement *spacemanager,
 
       if (!last_row && rowindex == high_row)
       {/* prev is outside of diagonalband*/
-        westAffinealignDPentry = (AffinealignDPentry)
+        westAffinealignDPentry = (GtAffinealignDPentry)
                                  {GT_WORD_MAX, GT_WORD_MAX, GT_WORD_MAX};
-        westRtabentry.val_R = (Rnode) {GT_UWORD_MAX, Affine_X};
-        westRtabentry.val_D = (Rnode) {GT_UWORD_MAX, Affine_X};
-        westRtabentry.val_I = (Rnode) {GT_UWORD_MAX, Affine_X};
+        westRtabentry.val_R = (GtAffineAlignRnode) {GT_UWORD_MAX, Affine_X};
+        westRtabentry.val_D = (GtAffineAlignRnode) {GT_UWORD_MAX, Affine_X};
+        westRtabentry.val_I = (GtAffineAlignRnode) {GT_UWORD_MAX, Affine_X};
       }
       else if (low_row > 0)
       {/* shifted diagonalband*/
@@ -1003,30 +1019,31 @@ static Rnode evaluateallaffineDBcolumns(GtLinspaceManagement *spacemanager,
 }
 
 /* calculate affine crosspoint realting to diagonal in recursive way */
-static Rnode evaluateaffineDBcrosspoints(GtLinspaceManagement *spacemanager,
-                                         AffineDiagentry *Diagcolumn,
-                                         const GtScoreHandler *scorehandler,
-                                         AffineAlignEdge edge,
-                                         AffineAlignEdge from_edge,
-                                         AffineAlignEdge to_edge,
-                                         GtUword rowoffset,
-                                         GtUword coloffset,
-                                         const GtUchar *useq,
-                                         GtUword ustart,
-                                         GtUword ulen,
-                                         const GtUchar *vseq,
-                                         GtUword vstart,
-                                         GtUword vlen,
-                                         GtWord left_dist,
-                                         GtWord right_dist)
+static GtAffineAlignRnode evaluateaffineDBcrosspoints(
+                                             GtLinspaceManagement *spacemanager,
+                                             GtAffineDiagAlignentry *Diagcolumn,
+                                             const GtScoreHandler *scorehandler,
+                                             GtAffineAlignEdge edge,
+                                             GtAffineAlignEdge from_edge,
+                                             GtAffineAlignEdge to_edge,
+                                             GtUword rowoffset,
+                                             GtUword coloffset,
+                                             const GtUchar *useq,
+                                             GtUword ustart,
+                                             GtUword ulen,
+                                             const GtUchar *vseq,
+                                             GtUword vstart,
+                                             GtUword vlen,
+                                             GtWord left_dist,
+                                             GtWord right_dist)
 {
   GtUword i,new_ulen, new_vlen, col_start, col_end,
           row_start = 0, row_end;
   GtWord new_left, new_right, diag;
-  Diagentry cpoint = {0,0,0}, prevcpoint;
-  AffineDiagentry temp_entry;
-  Rnode rpoint, temprpoint, lastrpoint;
-  AffineAlignEdge prevcp_type,cp_type;
+  GtDiagAlignentry cpoint = {0,0,0}, prevcpoint;
+  GtAffineDiagAlignentry temp_entry;
+  GtAffineAlignRnode rpoint, temprpoint, lastrpoint;
+  GtAffineAlignEdge prevcp_type,cp_type;
 
   diag = GT_DIV2(left_dist+right_dist);
   gt_assert(vstart == coloffset);
@@ -1069,7 +1086,7 @@ static Rnode evaluateaffineDBcrosspoints(GtLinspaceManagement *spacemanager,
       Diagcolumn[i].val_I.last_type = prevcp_type;
       prevcp_type = Affine_I;
     }
-    return (Rnode) {vlen, prevcp_type};
+    return (GtAffineAlignRnode) {vlen, prevcp_type};
 
   }
 
@@ -1100,12 +1117,12 @@ static Rnode evaluateaffineDBcrosspoints(GtLinspaceManagement *spacemanager,
         Diagcolumn[0].val_D.last_type = from_edge;
       }
     }
-    return (Rnode) {0, edge};
+    return (GtAffineAlignRnode) {0, edge};
   }
 
-  if (gt_linspaceManagement_checksquare(spacemanager, ulen, vlen,
-                                        sizeof (AffinealignDPentry),
-                                        sizeof (Rtabentry)))
+  if (gt_linspace_management_checksquare(spacemanager, ulen, vlen,
+                                         sizeof (GtAffinealignDPentry),
+                                         sizeof (GtAffineAlignRtabentry)))
   { /* call square function */
     return affineDtab_in_square_space(spacemanager, Diagcolumn,
                                       useq, ustart, ulen, vseq, vstart, vlen,
@@ -1357,10 +1374,10 @@ static void gt_calc_diagonalbandaffinealign(GtLinspaceManagement *spacemanager,
                                             GtWord left_dist,
                                             GtWord right_dist)
 {
-  AffinealignDPentry *Atabcolumn;
-  Rtabentry *Rtabcolumn;
-  AffineDiagentry *Diagcolumn;
-  Rnode lastnode;
+  GtAffinealignDPentry *Atabcolumn;
+  GtAffineAlignRtabentry *Rtabcolumn;
+  GtAffineDiagAlignentry *Diagcolumn;
+  GtAffineAlignRnode lastnode;
   GtUword idx, gap_extension;
   gt_assert(align && scorehandler);
 
@@ -1370,42 +1387,48 @@ static void gt_calc_diagonalbandaffinealign(GtLinspaceManagement *spacemanager,
     gt_assert(false); /* no global alignment */
   }
 
-  gt_linspaceManagement_set_ulen(spacemanager, ulen);
+  gt_linspace_management_set_ulen(spacemanager, ulen);
   gap_extension = gt_scorehandler_get_gapscore(scorehandler);
 
   if (ulen == 0UL)
   {
-    (void) construct_trivial_insertion_alignment(align,vlen,gap_extension);
+    (void) gt_reconstructalignment_trivial_insertion(align, vlen,
+                                                     gap_extension);
     return;
 
   }
   else if (vlen == 0UL)
   {
-    (void) construct_trivial_deletion_alignment(align,ulen, gap_extension);
+    (void) gt_reconstructalignment_trivial_deletion(align, ulen,
+                                                    gap_extension);
      return;
   }
-  if (gt_linspaceManagement_checksquare(spacemanager, ulen, vlen,
-                                             sizeof (*Atabcolumn),
-                                             sizeof (*Rtabcolumn)))
+  if (gt_linspace_management_checksquare(spacemanager, ulen, vlen,
+                                         sizeof (*Atabcolumn),
+                                         sizeof (*Rtabcolumn)))
   {
-    (void) diagonalbandalignment_in_square_space_affine_generic(spacemanager,
+    (void) gt_diagonalbandalign_affinegapcost_in_square_space_generic(
+                                                         spacemanager,
                                                          scorehandler, align,
                                                          useq, ustart, ulen,
                                                          vseq, vstart, vlen,
                                                          left_dist, right_dist);
     return;
   }
-  gt_linspaceManagement_check(spacemanager, MIN(right_dist-left_dist,ulen),vlen,
-                              sizeof (*Atabcolumn), sizeof (*Rtabcolumn),
-                              sizeof (*Diagcolumn));
-  Diagcolumn = gt_linspaceManagement_get_crosspointTabspace(spacemanager);
+  gt_linspace_management_check(spacemanager, MIN(right_dist-left_dist,ulen),
+                               vlen, sizeof (*Atabcolumn), sizeof (*Rtabcolumn),
+                               sizeof (*Diagcolumn));
+  Diagcolumn = gt_linspace_management_get_crosspointTabspace(spacemanager);
 
   /* initialize Diagcolumn */
   for (idx = 0; idx <= vlen; idx++)
   {
-    Diagcolumn[idx].val_R = (Diagentry) {GT_UWORD_MAX, GT_UWORD_MAX, Affine_X};
-    Diagcolumn[idx].val_D = (Diagentry) {GT_UWORD_MAX, GT_UWORD_MAX, Affine_X};
-    Diagcolumn[idx].val_I = (Diagentry) {GT_UWORD_MAX, GT_UWORD_MAX, Affine_X};
+    Diagcolumn[idx].val_R =
+                      (GtDiagAlignentry) {GT_UWORD_MAX, GT_UWORD_MAX, Affine_X};
+    Diagcolumn[idx].val_D =
+                      (GtDiagAlignentry) {GT_UWORD_MAX, GT_UWORD_MAX, Affine_X};
+    Diagcolumn[idx].val_I =
+                      (GtDiagAlignentry) {GT_UWORD_MAX, GT_UWORD_MAX, Affine_X};
   }
 
   lastnode = evaluateaffineDBcrosspoints(spacemanager, Diagcolumn, scorehandler,
@@ -1413,22 +1436,24 @@ static void gt_calc_diagonalbandaffinealign(GtLinspaceManagement *spacemanager,
                                          useq, ustart, ulen, vseq, vstart, vlen,
                                          left_dist, right_dist);
   /* reconstruct alignment */
-  reconstructalignment_from_affineDtab(align, Diagcolumn, lastnode.edge,
-                                       useq, ulen, vseq, vlen);
+  gt_reconstructalignment_from_affineDtab(align, Diagcolumn, lastnode.edge,
+                                          useq, ulen, vseq, vlen);
 }
 
 /* compute alignment with affine gapcosts within a diagonal band */
-void gt_computediagonalbandaffinealign_generic(GtLinspaceManagement
-                                                 *spacemanager,
-                                               const GtScoreHandler
-                                                 *scorehandler,
-                                               GtAlignment *align,
-                                               const GtUchar *useq,
-                                               GtUword ustart, GtUword ulen,
-                                               const GtUchar *vseq,
-                                               GtUword vstart, GtUword vlen,
-                                               GtWord left_dist,
-                                               GtWord right_dist)
+void gt_diagonalbandalign_affinegapcost_compute_generic(GtLinspaceManagement
+                                                        *spacemanager,
+                                                        const GtScoreHandler
+                                                        *scorehandler,
+                                                        GtAlignment *align,
+                                                        const GtUchar *useq,
+                                                        GtUword ustart,
+                                                        GtUword ulen,
+                                                        const GtUchar *vseq,
+                                                        GtUword vstart,
+                                                        GtUword vlen,
+                                                        GtWord left_dist,
+                                                        GtWord right_dist)
 {
   gt_assert(useq  && vseq && spacemanager && scorehandler && align);
 
@@ -1443,34 +1468,36 @@ void gt_computediagonalbandaffinealign_generic(GtLinspaceManagement
 }
 
 /* compute alignment with affine gapcosts within a diagonal band */
-void gt_computediagonalbandaffinealign(GtLinspaceManagement *spacemanager,
-                                       GtAlignment *align,
-                                       const GtUchar *useq,
-                                       GtUword ustart, GtUword ulen,
-                                       const GtUchar *vseq,
-                                       GtUword vstart, GtUword vlen,
-                                       GtWord left_dist,
-                                       GtWord right_dist,
-                                       GtUword matchcost,
-                                       GtUword mismatchcost,
-                                       GtUword gap_opening,
-                                       GtUword gap_extension)
+void gt_diagonalbandalign_affinegapcost_compute(GtLinspaceManagement
+                                                *spacemanager,
+                                                GtAlignment *align,
+                                                const GtUchar *useq,
+                                                GtUword ustart, GtUword ulen,
+                                                const GtUchar *vseq,
+                                                GtUword vstart, GtUword vlen,
+                                                GtWord left_dist,
+                                                GtWord right_dist,
+                                                GtUword matchcost,
+                                                GtUword mismatchcost,
+                                                GtUword gap_opening,
+                                                GtUword gap_extension)
 {
   GtScoreHandler *scorehandler = gt_scorehandler_new(matchcost,
                                                      mismatchcost,
                                                      gap_opening,
                                                      gap_extension);
 
-  gt_computediagonalbandaffinealign_generic(spacemanager, scorehandler, align,
-                                            useq, ustart, ulen, vseq, vstart,
-                                            vlen, left_dist, right_dist);
+  gt_diagonalbandalign_affinegapcost_compute_generic(spacemanager, scorehandler,
+                                                     align, useq, ustart, ulen,
+                                                     vseq, vstart, vlen,
+                                                     left_dist, right_dist);
 
   gt_scorehandler_delete(scorehandler);
 }
 
-void gt_checkdiagonalbandaffinealign(GT_UNUSED bool forward,
-                                     const GtUchar *useq, GtUword ulen,
-                                     const GtUchar *vseq, GtUword vlen)
+void gt_diagonalbandalign_affinegapcost_check(GT_UNUSED bool forward,
+                                              const GtUchar *useq, GtUword ulen,
+                                              const GtUchar *vseq, GtUword vlen)
 {
   GtUword affine_cost1, affine_cost2, affine_cost3,
           matchcost = 0, mismatchcost = 1,
@@ -1498,25 +1525,26 @@ void gt_checkdiagonalbandaffinealign(GT_UNUSED bool forward,
                                      gap_opening, gap_extension);
   gt_scorehandler_plain(scorehandler);
   gt_scorehandler_downcase(scorehandler);
-  affine_cost1 = diagonalband_square_space_affine(useq, 0, ulen, vseq, 0, vlen,
+  affine_cost1 = gt_diagonalbandalign_affinegapcost_square_space_distance_only(
+                                           useq, 0, ulen, vseq, 0, vlen,
                                            left_dist, right_dist, scorehandler);
 
   align = gt_alignment_new_with_seqs(useq, ulen, vseq, vlen);
-  spacemanager = gt_linspaceManagement_new();
+  spacemanager = gt_linspace_management_new();
 
   gt_calc_diagonalbandaffinealign(spacemanager, scorehandler, align,
                                   useq, 0, ulen, vseq, 0, vlen,
                                   left_dist, right_dist);
 
-  gt_linspaceManagement_delete(spacemanager);
+  gt_linspace_management_delete(spacemanager);
   affine_cost2 = gt_alignment_eval_with_affine_score(align, true, matchcost,
                                                      mismatchcost,
                                                      gap_opening,
                                                      gap_extension);
   if (affine_cost1 != affine_cost2)
   {
-    fprintf(stderr,"diagonalband_squarespace_affine = "GT_WU
-            " != "GT_WU" = gt_alignment_eval_generic_with_affine_score\n",
+    fprintf(stderr,"gt_diagonalband_affinegapcost_square_space_distance_only = "
+            GT_WU" != "GT_WU" = gt_alignment_eval_generic_with_affine_score\n",
             affine_cost1, affine_cost2);
 
     exit(GT_EXIT_PROGRAMMING_ERROR);
diff --git a/src/extended/diagonalbandalign_affinegapcost.h b/src/extended/diagonalbandalign_affinegapcost.h
index 80cfb18..25ac7b6 100644
--- a/src/extended/diagonalbandalign_affinegapcost.h
+++ b/src/extended/diagonalbandalign_affinegapcost.h
@@ -27,14 +27,8 @@
 /* <AffineDiagentry> objects are entries of DP-matrix with a diagonal band in
    context of affine gap costs. */
 typedef struct {
-  Diagentry val_R, val_D, val_I;
-} AffineDiagentry;
-
-void gt_checkdiagonalbandaffinealign(GT_UNUSED bool forward,
-                                     const GtUchar *useq,
-                                     GtUword ulen,
-                                     const GtUchar *vseq,
-                                     GtUword vlen);
+  GtDiagAlignentry val_R, val_D, val_I;
+} GtAffineDiagAlignentry;
 
 /* Computes a global alignment within a diagonal band with affine gapcosts in
    linear space. Use of this function requires an initialised <spacemanager>,
@@ -44,7 +38,7 @@ void gt_checkdiagonalbandaffinealign(GT_UNUSED bool forward,
    <scorehandler>. <left_dist> and <right_dist> give lower and upper bound of
    a diagonal band in which DP-matrix is valid. Returns affine cost
    value of calculated global alignment. */
-void gt_computediagonalbandaffinealign_generic(
+void   gt_diagonalbandalign_affinegapcost_compute_generic(
                                             GtLinspaceManagement *spacemanager,
                                             const GtScoreHandler *scorehandler,
                                             GtAlignment *align,
@@ -63,18 +57,19 @@ void gt_computediagonalbandaffinealign_generic(
    specified by <matchcost>, <mismatchcost> and <gapcost>. <left_dist> and
    <right_dist> give lower and upper bound of a diagonal band in which DP-matrix
    is valid. Returns affine cost value of calculated global alignment. */
-void gt_computediagonalbandaffinealign(GtLinspaceManagement *spacemanager,
-                                          GtAlignment *align,
-                                          const GtUchar *useq,
-                                          GtUword ustart, GtUword ulen,
-                                          const GtUchar *vseq,
-                                          GtUword vstart, GtUword vlen,
-                                          GtWord left_dist,
-                                          GtWord right_dist,
-                                          GtUword matchcost,
-                                          GtUword mismatchcost,
-                                          GtUword gap_opening,
-                                          GtUword gap_extension);
+void   gt_diagonalbandalign_affinegapcost_compute(
+                                            GtLinspaceManagement *spacemanager,
+                                            GtAlignment *align,
+                                            const GtUchar *useq,
+                                            GtUword ustart, GtUword ulen,
+                                            const GtUchar *vseq,
+                                            GtUword vstart, GtUword vlen,
+                                            GtWord left_dist,
+                                            GtWord right_dist,
+                                            GtUword matchcost,
+                                            GtUword mismatchcost,
+                                            GtUword gap_opening,
+                                            GtUword gap_extension);
 
 /* Computes only the distance of a global alignment within a diagonal band with
    affine gapcosts in square space. Use of this function requires the input
@@ -83,15 +78,17 @@ void gt_computediagonalbandaffinealign(GtLinspaceManagement *spacemanager,
    and <right_dist> give lower and upper bound of a diagonal band in which
    DP-matrix is valid. The cost values are specified by <scorehandler>. Returns
    cost value of global alignment. */
-GtWord diagonalband_square_space_affine(const GtUchar *useq,
-                                         GtUword ustart,
-                                         GtUword ulen,
-                                         const GtUchar *vseq,
-                                         GtUword vstart,
-                                         GtUword vlen,
-                                         GtWord left_dist,
-                                         GtWord right_dist,
-                                         const GtScoreHandler *scorehandler);
+GtWord gt_diagonalbandalign_affinegapcost_square_space_distance_only(
+                                                           const GtUchar *useq,
+                                                           GtUword ustart,
+                                                           GtUword ulen,
+                                                           const GtUchar *vseq,
+                                                           GtUword vstart,
+                                                           GtUword vlen,
+                                                           GtWord left_dist,
+                                                           GtWord right_dist,
+                                                           const GtScoreHandler
+                                                           *scorehandler);
 
 /* Computes a global alignment within a diagonal band with linear gapcosts in
    square space. Use of this function requires an initialised <scorehandler>
@@ -102,7 +99,7 @@ GtWord diagonalband_square_space_affine(const GtUchar *useq,
    <spacemanager> is required to use this function in linear space context, in
    any other case it can be NULL. <scorehandler> manages linear gap costs.
    Returns cost value of global alignment. */
-GtWord diagonalbandalignment_in_square_space_affine_generic(
+GtWord gt_diagonalbandalign_affinegapcost_in_square_space_generic(
                                              GtLinspaceManagement *space,
                                              const GtScoreHandler *scorehandler,
                                              GtAlignment *align,
@@ -125,18 +122,25 @@ GtWord diagonalbandalignment_in_square_space_affine_generic(
    <spacemanager> is required to use this function in linear space context, in
    any other case it can be NULL. <scorehandler> manages linear gap costs.
    Returns cost value of global alignment. */
-GtWord diagonalbandalignment_in_square_space_affine(GtLinspaceManagement *space,
-                                                    GtAlignment *align,
-                                                    const GtUchar *useq,
-                                                    GtUword ustart,
-                                                    GtUword ulen,
-                                                    const GtUchar *vseq,
-                                                    GtUword vstart,
-                                                    GtUword vlen,
-                                                    GtWord left_dist,
-                                                    GtWord right_dist,
-                                                    GtUword matchcost,
-                                                    GtUword mismatchcost,
-                                                    GtUword gap_opening,
-                                                    GtUword gap_extension);
+GtWord gt_diagonalbandalign_affinegapcost_in_square_space(GtLinspaceManagement
+                                                        *space,
+                                                        GtAlignment *align,
+                                                        const GtUchar *useq,
+                                                        GtUword ustart,
+                                                        GtUword ulen,
+                                                        const GtUchar *vseq,
+                                                        GtUword vstart,
+                                                        GtUword vlen,
+                                                        GtWord left_dist,
+                                                        GtWord right_dist,
+                                                        GtUword matchcost,
+                                                        GtUword mismatchcost,
+                                                        GtUword gap_opening,
+                                                        GtUword gap_extension);
+
+void   gt_diagonalbandalign_affinegapcost_check(GT_UNUSED bool forward,
+                                                const GtUchar *useq,
+                                                GtUword ulen,
+                                                const GtUchar *vseq,
+                                                GtUword vlen);
 #endif
diff --git a/src/extended/editscript.c b/src/extended/editscript.c
index 5948e23..904607e 100644
--- a/src/extended/editscript.c
+++ b/src/extended/editscript.c
@@ -1,6 +1,6 @@
 /*
   Copyright (c) 2013 Ole Eigenbrod <ole.eigenbrod at gmx.de>
-  Copyright (c) 2013 Dirk Willrodt <willrodt at zbh.uni-hamburg.de>
+  Copyright (c) 2013-2016 Dirk Willrodt <willrodt at zbh.uni-hamburg.de>
   Copyright (c) 2013 Center for Bioinformatics, University of Hamburg
 
   Permission to use, copy, modify, and distribute this software for any
@@ -43,52 +43,50 @@ do {                                                \
 } while (false)
 
 typedef struct GtEditscriptPos {
-  unsigned int cur_word,
-               bitsleft;
+  uint32_t cur_word,
+           bitsleft;
 } GtEditscriptPos;
 
 struct GtEditscript {
-  GtBitsequence      *space;
-  unsigned int        size,
-                      num_elems,
-                      trailing_matches;
-  unsigned char       del,
-                      entry_size;
+  GtBitsequence *space;
+  uint32_t       size,
+                 num_elems,
+                 trailing_matches;
+  uint8_t        del,
+                 entry_size;
 };
 
 struct GtEditscriptBuilder {
   GtEditscript    *es;
   GtEditscriptPos  fillpos;
-  unsigned char    last_op;
+  uint8_t          last_op;
 };
 
 static inline void editscript_pos_reset(GtEditscriptPos *pos)
 {
   pos->cur_word = 0;
-  pos->bitsleft = (unsigned int) GT_INTWORDSIZE;
+  pos->bitsleft = (uint32_t) GT_INTWORDSIZE;
 }
 
 #define GT_EDITSCRIPT_FULLMASK(es) ((GtBitsequence) \
-                                ((GtUword) 1 << es->entry_size) - (GtUword) 1)
+                                  ((GtUword) 1 << es->entry_size) - (GtUword) 1)
 #define GT_EDITSCRIPT_FIRSTMASK(es) ((GtBitsequence) \
-                                 ((GtUword) 1 << (es->entry_size - \
-                                                  (GtUword) 1)))
+                                ((GtUword) 1 << (es->entry_size - (GtUword) 1)))
 #define GT_EDITSCRIPT_MISDEL_SYM(es) ((GtBitsequence) es->del + 1)
 #define GT_EDITSCRIPT_INS_SYM(es) ((GtBitsequence) es->del + 2)
 
 GtEditscript *gt_editscript_new(GtAlphabet *alphabet)
 {
-  unsigned int alphabet_size;
+  uint32_t alphabet_size;
   GtEditscript *es;
   es = gt_calloc((size_t) 1, sizeof (*es));
   alphabet_size = gt_alphabet_size(alphabet);
   es->entry_size =
     gt_determinebitspervalue((GtUword) alphabet_size + 3);
-  gt_assert(es->entry_size <=
-            (unsigned char) (sizeof (unsigned char) * CHAR_BIT));
+  gt_assert(es->entry_size <= (uint8_t) (sizeof (uint8_t) * CHAR_BIT));
   es->size = 0U;
   es->space = NULL;
-  es->del = (unsigned char) alphabet_size;
+  es->del = (uint8_t) alphabet_size;
   es->num_elems = 0;
   return es;
 }
@@ -105,11 +103,11 @@ static inline void editscript_space_add_next(GtEditscript *es,
                                              GtEditscriptPos *fillpos,
                                              GtBitsequence elem)
 {
-  unsigned int cur_word = fillpos->cur_word,
-               remaining = fillpos->bitsleft,
-               bits2store = (unsigned int) es->entry_size;
+  uint32_t cur_word = fillpos->cur_word,
+           remaining = fillpos->bitsleft,
+           bits2store = (uint32_t) es->entry_size;
   if (es->size == 0) {
-    es->size = (unsigned int) (GT_INTWORDSIZE / es->entry_size) + 1U;
+    es->size = (uint32_t) (GT_INTWORDSIZE / es->entry_size) + 1U;
     es->space = gt_malloc(es->size * sizeof (*es->space));
     es->space[0] = 0;
   }
@@ -128,7 +126,7 @@ static inline void editscript_space_add_next(GtEditscript *es,
     cur_word++;
     es->space[cur_word] = 0;
     bits2store -= remaining;
-    remaining = (unsigned int) GT_INTWORDSIZE;
+    remaining = (uint32_t) GT_INTWORDSIZE;
     /* this has to be checked because (uint64_t << 64) is not defined */
     if (bits2store != 0) {
       es->space[cur_word] |= elem << (remaining - bits2store);
@@ -143,11 +141,11 @@ static inline GtBitsequence editscript_space_get_next(const GtEditscript *es,
                                                       GtEditscriptPos *pos)
 {
   GtBitsequence elem = 0;
-  unsigned int shift;
+  uint32_t shift;
 
   if (pos->bitsleft == 0) {
     pos->cur_word++;
-    pos->bitsleft = (unsigned int) GT_INTWORDSIZE;
+    pos->bitsleft = (uint32_t) GT_INTWORDSIZE;
   }
   shift = pos->bitsleft;
 
@@ -155,7 +153,7 @@ static inline GtBitsequence editscript_space_get_next(const GtEditscript *es,
   if (shift < es->entry_size) {
     pos->cur_word++;
     elem |= es->space[pos->cur_word] >> (GtBitsequence) shift;
-    pos->bitsleft = (unsigned int) (GT_INTWORDSIZE - (es->entry_size - shift));
+    pos->bitsleft = (uint32_t) (GT_INTWORDSIZE - (es->entry_size - shift));
   }
   else {
     pos->bitsleft -= es->entry_size;
@@ -171,8 +169,8 @@ static inline void editscript_space_add_length(GtEditscript *es,
   /* scheme: [1111][x][x][x][x] first store consecutive ones for each element
      needed, (like elias gamma) then store the value split up to chunks of
      element size */
-  unsigned int num_elems = 0,
-               shift;
+  uint32_t num_elems = 0,
+           shift;
   GtBitsequence tmp = value;
 
   /* needs just one element not starting with 1, store it */
@@ -214,7 +212,7 @@ static inline void editscript_space_add_length(GtEditscript *es,
 static inline GtBitsequence
 editscript_space_get_length(const GtEditscript *es,
                             GtEditscriptPos *pos,
-                            unsigned int *elems_used)
+                            uint32_t *elems_used)
 {
   GtBitsequence ret = 0,
                 elem = 0,
@@ -322,7 +320,7 @@ void gt_editscript_get_stats(const GtEditscript *editscript,
                              GtUword *insertion,
                              GtUword *deletion)
 {
-  unsigned int elems_served = 0;
+  uint32_t elems_served = 0;
   bool misdel = true; /* shut up scan-build */
   GtBitsequence elem;
   GtEditscriptPos getpos;
@@ -333,7 +331,7 @@ void gt_editscript_get_stats(const GtEditscript *editscript,
   *match = *mismatch = *insertion = *deletion = 0;
   if (editscript->num_elems != 0) {
     elem = editscript_space_get_next(editscript, &getpos);
-    gt_assert(editscript->del < (unsigned char) elem);
+    gt_assert(editscript->del < (uint8_t) elem);
     elems_served++;
     if (elem == GT_EDITSCRIPT_MISDEL_SYM(editscript)) {
       misdel = true;
@@ -376,7 +374,7 @@ GtUword gt_editscript_get_source_len(const GtEditscript *editscript)
   GtEditscriptPos pos;
   GtBitsequence elem;
   GtUword length = 0;
-  unsigned int served = 0;
+  uint32_t served = 0;
   bool skip = false;
 
   gt_assert(editscript != NULL);
@@ -409,7 +407,7 @@ GtUword gt_editscript_get_target_len(const GtEditscript *editscript)
   GtEditscriptPos pos;
   GtBitsequence elem;
   GtUword length = 0;
-  unsigned int served = 0;
+  uint32_t served = 0;
 
   gt_assert(editscript != NULL);
   editscript_pos_reset(&pos);
@@ -440,7 +438,7 @@ GtUword gt_editscript_get_target_subseq_len(const GtEditscript *editscript,
   GtBitsequence elem;
   GtUword upos = 0,
           vlength = 0;
-  unsigned int served = 0;
+  uint32_t served = 0;
 
   gt_assert(editscript != NULL);
   editscript_pos_reset(&pos);
@@ -519,8 +517,9 @@ GtUword gt_editscript_get_sub_sequence_u(const GtEditscript *editscript,
   GtUword vidx = 0,
           uidx,
           bufidx = 0;
-  unsigned int j,elems_served = 0,
-               matchcount;
+  uint32_t j,
+           elems_served = 0,
+           matchcount;
 
   gt_assert(encseq != NULL && editscript != NULL);
 
@@ -544,8 +543,8 @@ GtUword gt_editscript_get_sub_sequence_u(const GtEditscript *editscript,
     elems_served++;
     while (elems_served < editscript->num_elems && uidx <= start + utopos) {
       gt_assert(elem <= GT_EDITSCRIPT_INS_SYM(editscript));
-      matchcount = (unsigned int) editscript_space_get_length(editscript, &pos,
-                                                              &elems_served);
+      matchcount = (uint32_t) editscript_space_get_length(editscript, &pos,
+                                                          &elems_served);
       for (j = 0;
            uidx <= start + utopos &&
            j < matchcount;
@@ -588,7 +587,7 @@ GtUword gt_editscript_get_sub_sequence_u(const GtEditscript *editscript,
   }
   for (j = 0;
        uidx <= start + utopos &&
-         j < (unsigned int) editscript->trailing_matches;
+         j < (uint32_t) editscript->trailing_matches;
        ++j) {
     (*buffer)[bufidx++] = gt_encseq_get_encoded_char(encseq, uidx, dir);
     vidx++;
@@ -611,8 +610,8 @@ GtUword gt_editscript_get_sub_sequence_v(const GtEditscript *editscript,
   GtUword vidx = 0,
           uidx,
           bufidx = 0;
-  unsigned int j,elems_served = 0,
-               matchcount;
+  uint32_t j, elems_served = 0,
+           matchcount;
 
   editscript_pos_reset(&pos);
 
@@ -626,8 +625,8 @@ GtUword gt_editscript_get_sub_sequence_v(const GtEditscript *editscript,
     elems_served++;
     while (elems_served < editscript->num_elems && vidx <= vtopos) {
       gt_assert(elem <= GT_EDITSCRIPT_INS_SYM(editscript));
-      matchcount = (unsigned int) editscript_space_get_length(editscript, &pos,
-                                                              &elems_served);
+      matchcount = (uint32_t) editscript_space_get_length(editscript, &pos,
+                                                          &elems_served);
       for (j = 0; vidx <= vtopos && j < matchcount; ++j) {
         if (vidx >= vfrompos) {
           buffer[bufidx++] =
@@ -657,7 +656,7 @@ GtUword gt_editscript_get_sub_sequence_v(const GtEditscript *editscript,
     }
   }
   for (j = 0;
-       vidx <= vtopos && j < (unsigned int) editscript->trailing_matches;
+       vidx <= vtopos && j < (uint32_t) editscript->trailing_matches;
        ++j) {
     if (vidx >= vfrompos) {
       buffer[bufidx++] = gt_encseq_get_encoded_char(encseq, uidx, dir);
@@ -717,7 +716,7 @@ static GtEditscript *editscript_io_fp(GtEditscript *editscript, FILE *fp,
     had_err = EDITSCRIPT_IO_ONE(&editscript->num_elems);
   if (!had_err && editscript->num_elems != 0) {
     bits = (GtUword) editscript->num_elems * (GtUword) editscript->entry_size;
-    editscript->size = (unsigned int) (bits / (GT_INTWORDSIZE));
+    editscript->size = (uint32_t) (bits / (GT_INTWORDSIZE));
     if (bits % GT_INTWORDSIZE) {
       editscript->size++;
     }
@@ -754,8 +753,8 @@ void gt_editscript_show(const GtEditscript *editscript, GtAlphabet *alphabet)
 {
   GtEditscriptPos pos;
   GtBitsequence elem;
-  unsigned int matchcount,
-               elems_served = 0;
+  uint32_t matchcount,
+           elems_served = 0;
 
   editscript_pos_reset(&pos);
 
@@ -765,8 +764,8 @@ void gt_editscript_show(const GtEditscript *editscript, GtAlphabet *alphabet)
     elems_served++;
     while (elems_served < editscript->num_elems) {
       gt_assert(elem <= GT_EDITSCRIPT_INS_SYM(editscript));
-      matchcount = (unsigned int) editscript_space_get_length(editscript, &pos,
-                                                              &elems_served);
+      matchcount = (uint32_t) editscript_space_get_length(editscript, &pos,
+                                                          &elems_served);
       if (elem == GT_EDITSCRIPT_INS_SYM(editscript)) {
         if (matchcount != 0) {
           printf("M(%u)|Ins:|", matchcount);
@@ -785,7 +784,7 @@ void gt_editscript_show(const GtEditscript *editscript, GtAlphabet *alphabet)
             (GtBitsequence) WILDCARD :
             elem;
           printf("%c|", (int) gt_alphabet_pretty_symbol(alphabet,
-                                                        (unsigned int) elem));
+                                                        (uint32_t) elem));
         }
       }
       else {
@@ -807,7 +806,7 @@ void gt_editscript_show(const GtEditscript *editscript, GtAlphabet *alphabet)
               (GtBitsequence) WILDCARD :
               elem;
             printf("%c|", (int) gt_alphabet_pretty_symbol(alphabet,
-                                                          (unsigned int) elem));
+                                                          (uint32_t) elem));
           }
           else
             printf("-|");
@@ -851,42 +850,37 @@ void gt_editscript_builder_add_match(GtEditscriptBuilder *es_builder)
             "trailing matches overflow");
 }
 
+static inline void gt_editscript_builder_start_group(GtEditscriptBuilder *es_b,
+                                                     uint8_t type)
+{
+  GtEditscript *es = es_b->es;
+  es_b->last_op = type;
+  editscript_space_add_next(es, &es_b->fillpos, type);
+  editscript_space_add_length(es, &es_b->fillpos,
+                              (GtBitsequence) es->trailing_matches);
+  es->trailing_matches = 0;
+}
+
 void gt_editscript_builder_add_mismatch(GtEditscriptBuilder *es_builder,
                                         GtUchar c)
 {
   GtEditscript *es;
   gt_assert(es_builder != NULL);
   es = es_builder->es;
-  gt_assert(c < (GtUchar) es->del || c == (GtUchar) WILDCARD);
+  gt_assert(c <= (GtUchar) es->del || c == (GtUchar) WILDCARD);
   if (c == (GtUchar) WILDCARD) {
     c = (GtUchar) es->del - 1;
   }
-  if (es_builder->last_op != (unsigned char) GT_EDITSCRIPT_MISDEL_SYM(es)) {
-    es_builder->last_op = (unsigned char) GT_EDITSCRIPT_MISDEL_SYM(es);
-    editscript_space_add_next(es, &es_builder->fillpos,
-                              GT_EDITSCRIPT_MISDEL_SYM(es));
-    editscript_space_add_length(es, &es_builder->fillpos,
-                                (GtBitsequence) es->trailing_matches);
-    es->trailing_matches = 0;
+  if (es_builder->last_op != (uint8_t) GT_EDITSCRIPT_MISDEL_SYM(es)) {
+    gt_editscript_builder_start_group(es_builder,
+                                      (uint8_t) GT_EDITSCRIPT_MISDEL_SYM(es));
   }
   editscript_space_add_next(es, &es_builder->fillpos, (GtBitsequence) c);
 }
 
 void gt_editscript_builder_add_deletion(GtEditscriptBuilder *es_builder)
 {
-  GtEditscript *es;
-  gt_assert(es_builder);
-  es = es_builder->es;
-
-  if (es_builder->last_op != (unsigned char) GT_EDITSCRIPT_MISDEL_SYM(es)) {
-    es_builder->last_op = (unsigned char) GT_EDITSCRIPT_MISDEL_SYM(es);
-    editscript_space_add_next(es, &es_builder->fillpos,
-                              GT_EDITSCRIPT_MISDEL_SYM(es));
-    editscript_space_add_length(es, &es_builder->fillpos,
-                                (GtBitsequence) es->trailing_matches);
-    es->trailing_matches = 0;
-  }
-  editscript_space_add_next(es, &es_builder->fillpos, (GtBitsequence) es->del);
+  gt_editscript_builder_add_mismatch(es_builder, es_builder->es->del);
 }
 
 void gt_editscript_builder_add_insertion(GtEditscriptBuilder *es_builder,
@@ -900,13 +894,9 @@ void gt_editscript_builder_add_insertion(GtEditscriptBuilder *es_builder,
   if (c == (GtUchar) WILDCARD) {
     c = (GtUchar) es->del - 1;
   }
-  if (es_builder->last_op != (unsigned char) GT_EDITSCRIPT_INS_SYM(es)) {
-    es_builder->last_op = (unsigned char) GT_EDITSCRIPT_INS_SYM(es);
-    editscript_space_add_next(es, &es_builder->fillpos,
-                              GT_EDITSCRIPT_INS_SYM(es));
-    editscript_space_add_length(es, &es_builder->fillpos,
-                                (GtBitsequence) es->trailing_matches);
-    es->trailing_matches = 0;
+  if (es_builder->last_op != (uint8_t) GT_EDITSCRIPT_INS_SYM(es)) {
+    gt_editscript_builder_start_group(es_builder,
+                                      (uint8_t) GT_EDITSCRIPT_INS_SYM(es));
   }
   editscript_space_add_next(es, &es_builder->fillpos, (GtBitsequence) c);
 }
@@ -964,7 +954,7 @@ meops(reverse) MIMDMmMmmMDDMIIMmMMMIMMDMmMM
     gt_ensure(i == (GtUword) ist);
   }
   if (!had_err) {
-    unsigned int served = 0;
+    uint32_t served = 0;
     editscript_pos_reset(&get_pos);
     editscript_pos_reset(&fill_pos);
     gt_editscript_reset(es);
diff --git a/src/extended/elias_gamma.h b/src/extended/elias_gamma.h
index 5123edd..0acce69 100644
--- a/src/extended/elias_gamma.h
+++ b/src/extended/elias_gamma.h
@@ -49,6 +49,6 @@ int                         gt_elias_gamma_bitwise_decoder_next(
 void                        gt_elias_gamma_bitwise_decoder_delete(
                                               GtEliasGammaBitwiseDecoder *egbd);
 
-int                         gt_elias_gamma_unit_test(GtError *err);
+int gt_elias_gamma_unit_test(GtError *err);
 
 #endif
diff --git a/src/extended/encdesc.c b/src/extended/encdesc.c
index 91d12c4..b223799 100644
--- a/src/extended/encdesc.c
+++ b/src/extended/encdesc.c
@@ -1,6 +1,6 @@
 /*
   Copyright (c) 2012 Joachim Bonnet <joachim.bonnet at studium.uni-hamburg.de>
-  Copyright (c) 2012 Dirk Willrodt <willrodt at zbh.uni-hamburg.de>
+  Copyright (c) 2012-2016 Dirk Willrodt <willrodt at zbh.uni-hamburg.de>
 
   Permission to use, copy, modify, and distribute this software for any
   purpose with or without fee is hereby granted, provided that the above
@@ -851,12 +851,6 @@ void gt_encdesc_encoder_set_timer(GtEncdescEncoder *ee, GtTimer *timer)
   ee->timer = timer;
 }
 
-GtTimer* gt_encdesc_encoder_get_timer(GtEncdescEncoder *ee)
-{
-  gt_assert(ee);
-  return ee->timer;
-}
-
 void gt_encdesc_encoder_set_sampling_none(GtEncdescEncoder *ee)
 {
   gt_assert(ee);
@@ -896,7 +890,7 @@ void gt_encdesc_encoder_set_sampling_rate(GtEncdescEncoder *ee,
   ee->sampling_rate = sampling_rate;
 }
 
-GtUword gt_encdesc_encoder_get_sampling_rate(GtEncdescEncoder *ee)
+GtUword gt_encdesc_encoder_get_sampling_rate(const GtEncdescEncoder *ee)
 {
   gt_assert(ee);
   return ee->sampling_rate;
@@ -1341,7 +1335,7 @@ static int encdesc_next_desc(GtEncdesc *encdesc, GtStr *desc, GtError *err)
           tmp += cur_field->min_value;
       }
       if (!had_err) {
-        if (!encdesc->cur_desc == 0 && !sampled) {
+        if (!(encdesc->cur_desc == 0) && !sampled) {
           if (cur_field->is_delta_negative)
             gt_assert(tmp < cur_field->prev_value);
           if (cur_field->is_delta_positive)
@@ -1420,7 +1414,7 @@ static int encdesc_next_desc(GtEncdesc *encdesc, GtStr *desc, GtError *err)
   return had_err;
 }
 
-GtUword gt_encdesc_num_of_descriptions(GtEncdesc *encdesc)
+GtUword gt_encdesc_num_of_descriptions(const GtEncdesc *encdesc)
 {
   gt_assert(encdesc);
   return encdesc->num_of_descs;
diff --git a/src/extended/encdesc.h b/src/extended/encdesc.h
index c7d0ae5..3d206ec 100644
--- a/src/extended/encdesc.h
+++ b/src/extended/encdesc.h
@@ -1,7 +1,7 @@
 /*
   Copyright (c) 2012 Joachim Bonnet <joachim.bonnet at studium.uni-hamburg.de>
-  Copyright (c) 2012 Dirk Willrodt <willrodt at zbh.uni-hamburg.de>
-  Copyright (c) 2012 Center for Bioinformatics, University of Hamburg
+  Copyright (c) 2012-2016 Dirk Willrodt <willrodt at zbh.uni-hamburg.de>
+  Copyright (c) 2012-2016 Center for Bioinformatics, University of Hamburg
 
   Permission to use, copy, modify, and distribute this software for any
   purpose with or without fee is hereby granted, provided that the above
@@ -40,9 +40,6 @@ GtEncdescEncoder* gt_encdesc_encoder_new(void);
 void              gt_encdesc_encoder_set_timer(GtEncdescEncoder *ee,
                                                GtTimer *timer);
 
-/* Returns the <GtTimer> set in <ee>, might be NULL. */
-GtTimer*          gt_encdesc_encoder_get_timer(GtEncdescEncoder *ee);
-
 /* Set the sampling method of <ee> to __none__. Sampling increases encoded size
    and decreases time for random access. */
 void              gt_encdesc_encoder_set_sampling_none(GtEncdescEncoder *ee);
@@ -53,18 +50,14 @@ void              gt_encdesc_encoder_set_sampling_page(GtEncdescEncoder *ee);
    increases encoded size and decreases time for random access. */
 void              gt_encdesc_encoder_set_sampling_regular(GtEncdescEncoder *ee);
 
-/* Returns true if __page__wise sampling is set in <ee>. */
-bool              gt_encdesc_encoder_sampling_is_page(GtEncdescEncoder *ee);
-/* Returns true if __regular__ sampling is set in <ee>. */
-bool              gt_encdesc_encoder_sampling_is_regular(GtEncdescEncoder *ee);
-
 /* Sets the sampling rate */
 void              gt_encdesc_encoder_set_sampling_rate(GtEncdescEncoder *ee,
                                                        GtUword sampling_rate);
 
 /* Returns the samplingrate set in <ee>. Returns GT_UNDEF_UWORD if sampling is
    disabled. */
-GtUword           gt_encdesc_encoder_get_sampling_rate(GtEncdescEncoder *ee);
+GtUword           gt_encdesc_encoder_get_sampling_rate(
+                                                    const GtEncdescEncoder *ee);
 
 /* Uses the settings in <ee> to encode the strings provided by <cstr_iterator>
    and writes them to a file with prefix <name>. Returns 0 on success, otherwise
@@ -78,7 +71,7 @@ int               gt_encdesc_encoder_encode(GtEncdescEncoder *ee,
 GtEncdesc*        gt_encdesc_load(const char *name, GtError *err);
 
 /* Returns the number of encoded headers in <encdesc> */
-GtUword           gt_encdesc_num_of_descriptions(GtEncdesc *encdesc);
+GtUword           gt_encdesc_num_of_descriptions(const GtEncdesc *encdesc);
 
 /* Decodes description with number <num> and writes it to <desc>, which will be
    reset before writing to it. Returns 1 on success, 0 on EOF and -1 on
diff --git a/src/extended/golomb.c b/src/extended/golomb.c
index 56d09cd..b4cdcc8 100644
--- a/src/extended/golomb.c
+++ b/src/extended/golomb.c
@@ -55,13 +55,13 @@ GtGolomb* gt_golomb_new(GtUword median)
   return golomb;
 }
 
-GtUword gt_golomb_get_m(GtGolomb *golomb)
+GtUword gt_golomb_get_m(const GtGolomb *golomb)
 {
   gt_assert(golomb);
   return golomb->median;
 }
 
-GtBittab* gt_golomb_encode(GtGolomb *golomb, GtUword x)
+GtBittab* gt_golomb_encode(const GtGolomb *golomb, GtUword x)
 {
   GtUword quotient,
                 remain,
diff --git a/src/extended/golomb.h b/src/extended/golomb.h
index 04e4123..2cc0b1a 100644
--- a/src/extended/golomb.h
+++ b/src/extended/golomb.h
@@ -33,14 +33,17 @@ typedef struct GtGolombBitwiseDecoder GtGolombBitwiseDecoder;
 /* Returns a new <GtGolomb> object. The parameter <median> influences the length
    of generated code words. Identical values are needed for correct encoding and
    decoding. */
-GtGolomb*               gt_golomb_new(GtUword median);
+GtGolomb* gt_golomb_new(GtUword median);
 
 /* Encodes the non negative integer <x> for the given <golomb>, writes it to a
    new <GtBittab> object and returns it. */
-GtBittab*               gt_golomb_encode(GtGolomb *golomb, GtUword x);
+GtBittab* gt_golomb_encode(const GtGolomb *golomb, GtUword x);
 
 /* Returns the parameter <median>, <golomb> was initialized with. */
-GtUword           gt_golomb_get_m(GtGolomb *golomb);
+GtUword   gt_golomb_get_m(const GtGolomb *golomb);
+
+/* Deletes <golomb>. */
+void      gt_golomb_delete(GtGolomb *golomb);
 
 /* Returns a new <GtGolombBitwiseDecoder> object. This decoder is meant to
    decode a code word bit by bit.*/
@@ -54,9 +57,6 @@ int                     gt_golomb_bitwise_decoder_next(
                                                    GtGolombBitwiseDecoder *gbwd,
                                                    bool bit, GtUword *x);
 
-/* Deletes <golomb>. */
-void                    gt_golomb_delete(GtGolomb *golomb);
-
 /* Deletes <gcbd>. */
 void                    gt_golomb_bitwise_decoder_delete(
                                                   GtGolombBitwiseDecoder *gbwd);
diff --git a/src/extended/hcr.c b/src/extended/hcr.c
index 6671793..40aea47 100644
--- a/src/extended/hcr.c
+++ b/src/extended/hcr.c
@@ -1,6 +1,7 @@
 /*
   Copyright (c) 2011-2012 Joachim Bonnet <joachim.bonnet at studium.uni-hamburg.de>
-  Copyright (c) 2012 Dirk Willrodt <willrodt at zbh.uni-hamburg.de>
+  Copyright (c) 2012-2015 Dirk Willrodt <willrodt at zbh.uni-hamburg.de>
+  Copyright (c) 2011-2015 Center for Bioinformatics, University of Hamburg
 
   Permission to use, copy, modify, and distribute this software for any
   purpose with or without fee is hereby granted, provided that the above
@@ -851,7 +852,7 @@ GtHcrDecoder *gt_hcr_decoder_new(const char *name, GtAlphabet *alpha,
   return NULL;
 }
 
-bool gt_hcr_decoder_has_descs_support(GtHcrDecoder *hcr_dec)
+bool gt_hcr_decoder_has_descs_support(const GtHcrDecoder *hcr_dec)
 {
   gt_assert(hcr_dec);
   if (!hcr_dec->encdesc)
@@ -1083,14 +1084,14 @@ int gt_hcr_decoder_decode_range(GtHcrDecoder *hcr_dec, const char *name,
   return had_err;
 }
 
-GtUword gt_hcr_decoder_num_of_reads(GtHcrDecoder *hcr_dec)
+GtUword gt_hcr_decoder_num_of_reads(const GtHcrDecoder *hcr_dec)
 {
   gt_assert(hcr_dec);
   return hcr_dec->seq_dec->num_of_reads;
 }
 
-GtUword gt_hcr_decoder_readlength(GtHcrDecoder *hcr_dec,
-                                        GtUword filenum)
+GtUword gt_hcr_decoder_readlength(const GtHcrDecoder *hcr_dec,
+                                  GtUword filenum)
 {
   gt_assert(hcr_dec);
   gt_assert(hcr_dec->seq_dec->num_of_files > filenum);
@@ -1221,7 +1222,7 @@ GtHcrEncoder *gt_hcr_encoder_new(GtStrArray *files, GtAlphabet *alpha,
   return NULL;
 }
 
-bool gt_hcr_encoder_has_descs_support(GtHcrEncoder *hcr_enc)
+bool gt_hcr_encoder_has_descs_support(const GtHcrEncoder *hcr_enc)
 {
   gt_assert(hcr_enc);
   if (!hcr_enc->encdesc_encoder)
@@ -1266,7 +1267,7 @@ void gt_hcr_encoder_set_sampling_rate(GtHcrEncoder *hcr_enc,
     gt_encdesc_encoder_set_sampling_rate(hcr_enc->encdesc_encoder, srate);
 }
 
-GtUword gt_hcr_encoder_get_sampling_rate(GtHcrEncoder *hcr_enc)
+GtUword gt_hcr_encoder_get_sampling_rate(const GtHcrEncoder *hcr_enc)
 {
   gt_assert(hcr_enc);
   return hcr_enc->sampling_rate;
diff --git a/src/extended/hcr.h b/src/extended/hcr.h
index 97e217d..3413c77 100644
--- a/src/extended/hcr.h
+++ b/src/extended/hcr.h
@@ -1,7 +1,7 @@
 /*
   Copyright (c) 2011 Joachim Bonnet <joachim.bonnet at studium.uni-hamburg.de>
-  Copyright (c) 2012 Dirk Willrodt <willrodt at zbh.uni-hamburg.de>
-  Copyright (c) 2010-2012 Center for Bioinformatics, University of Hamburg
+  Copyright (c) 2012-2015 Dirk Willrodt <willrodt at zbh.uni-hamburg.de>
+  Copyright (c) 2011-2015 Center for Bioinformatics, University of Hamburg
 
   Permission to use, copy, modify, and distribute this software for any
   purpose with or without fee is hereby granted, provided that the above
@@ -55,7 +55,7 @@ GtHcrEncoder* gt_hcr_encoder_new(GtStrArray *files, GtAlphabet *alpha,
                                  GtTimer *timer, GtError *err);
 
 /* Returns true if <hcr_enc> was initialized with <descs> = true. */
-bool          gt_hcr_encoder_has_descs_support(GtHcrEncoder *hcr_enc);
+bool          gt_hcr_encoder_has_descs_support(const GtHcrEncoder *hcr_enc);
 
 /* Sets the applied sampling method to <method> for <hcr_enc>. Default is
    pagewise. */
@@ -63,15 +63,12 @@ void          gt_hcr_encoder_set_sampling_none(GtHcrEncoder *hcr_enc);
 void          gt_hcr_encoder_set_sampling_regular(GtHcrEncoder *hcr_enc);
 void          gt_hcr_encoder_set_sampling_page(GtHcrEncoder *hcr_enc);
 
-bool          gt_hcr_encoder_sampling_is_regular(GtHcrEncoder *hcr_enc);
-bool          gt_hcr_encoder_sampling_is_page(GtHcrEncoder *hcr_enc);
-
 /* Sets sampling rate to <srate> for the object <hcr_enc>. */
 void          gt_hcr_encoder_set_sampling_rate(GtHcrEncoder *hcr_enc,
                                                GtUword srate);
 
 /* Returns the sampling rate of the object <hcr_enc>. */
-GtUword gt_hcr_encoder_get_sampling_rate(GtHcrEncoder *hcr_enc);
+GtUword       gt_hcr_encoder_get_sampling_rate(const GtHcrEncoder *hcr_enc);
 
 /* Encodes <hcr_enc> and writes the encoding to a file with base name <name>. */
 int           gt_hcr_encoder_encode(GtHcrEncoder *hcr_enc, const char *name,
@@ -84,7 +81,7 @@ GtHcrDecoder* gt_hcr_decoder_new(const char *name, GtAlphabet *alpha,
                                  bool descs, GtTimer *timer, GtError *err);
 
 /* Returns true if <hcr_dec> was initialized with <descs> = true. */
-bool          gt_hcr_decoder_has_descs_support(GtHcrDecoder *hcr_dec);
+bool          gt_hcr_decoder_has_descs_support(const GtHcrDecoder *hcr_dec);
 
 /* Decodes read with number <readnum> and writes decoding to the three char
    pointers. The addresses of the pointer must be allocated with sufficient
@@ -103,10 +100,10 @@ int           gt_hcr_decoder_decode_range(GtHcrDecoder *hcr_dec,
                                           GtTimer *timer, GtError *err);
 
 /* Returns the total number of reads in <hcr_dec>. */
-GtUword gt_hcr_decoder_num_of_reads(GtHcrDecoder *hcr_dec);
+GtUword       gt_hcr_decoder_num_of_reads(const GtHcrDecoder *hcr_dec);
 
 /* Returns the read length of the reads in file with filenumber <filenum>. */
-GtUword gt_hcr_decoder_readlength(GtHcrDecoder *hcr_dec,
+GtUword       gt_hcr_decoder_readlength(const GtHcrDecoder *hcr_dec,
                                         GtUword filenum);
 
 void          gt_hcr_encoder_delete(GtHcrEncoder *hcr_enc);
diff --git a/src/extended/huffcode.h b/src/extended/huffcode.h
index 59920f1..f90ce0f 100644
--- a/src/extended/huffcode.h
+++ b/src/extended/huffcode.h
@@ -38,7 +38,7 @@ typedef struct GtHuffmanBitwiseDecoder GtHuffmanBitwiseDecoder;
 /* Function type, used to get the count of a specific symbol represented by
    <symbol_number> in <distribution>. Needed by <GtHuffman>. */
 typedef GtUint64 (*GtDistrFunc) (const void *distribution,
-                                           GtUword symbol_number);
+                                 GtUword symbol_number);
 
 /* Function type, used when iterating over all encoded symbols in a <GtHuffman>
    object. <symbol> is the number of the current symbol, <freq> its frequency in
@@ -57,51 +57,54 @@ typedef int (*GtHuffmanActFunc) (GtUword symbol,
    structure containing the distribution of a set of symbols. <distr_func> is a
    function returning the number of occurrences for a given symbol. Symbols are
    represented by numbers in range [0,num_of_symbols - 1]. */
-GtHuffman*               gt_huffman_new(const void *distribution,
-                                        GtDistrFunc distr_func,
-                                        GtUword num_of_symbols);
+GtHuffman* gt_huffman_new(const void *distribution,
+                          GtDistrFunc distr_func,
+                          GtUword num_of_symbols);
 
 /* Traverses the Huffman tree and calculates total number of symbols in text and
    total number of bits needed to represent the text. */
-void                     gt_huffman_size(const GtHuffman *huffman,
-                                         uint64_t *bits,
-                                         uint64_t *chars);
+void       gt_huffman_size(const GtHuffman *huffman,
+                           uint64_t *bits,
+                           uint64_t *chars);
 
 /* Prints the code for each symbol to stdout. One symbol per line. */
-void                     gt_huffman_print_codes(const GtHuffman *huffman);
+void       gt_huffman_print_codes(const GtHuffman *huffman);
 
 /* Iterate over all encoded symbols and perform <action_func> with its
    statistics. <action_info> can be null or any struct to hold information for
    the action_func*/
-int                      gt_huffman_iterate(const GtHuffman *huffman,
-                                            GtHuffmanActFunc action_func,
-                                            void *action_info);
+int        gt_huffman_iterate(const GtHuffman *huffman,
+                              GtHuffmanActFunc action_func,
+                              void *action_info);
 
 /* Encodes a single symbol and writes its code to <code> and the number of bits
    for its code to <codelength>. The symbol has to be in the range of the
    symbols with which the Huffman-object was initiated. If the symbol was not
    present in the distribution its code will be 0. */
-void                     gt_huffman_encode(const GtHuffman *huffman,
-                                           GtUword symbol,
-                                           GtBitsequence *code,
-                                           unsigned int *codelength);
+void       gt_huffman_encode(const GtHuffman *huffman,
+                             GtUword symbol,
+                             GtBitsequence *code,
+                             unsigned int *codelength);
 
 /* Returns the number of symbols with frequency > 0. */
-GtUword            gt_huffman_numofsymbols(const GtHuffman *huffman);
+GtUword    gt_huffman_numofsymbols(const GtHuffman *huffman);
 
 /* Returns the number of symbols with frequency >= 0. */
-GtUword            gt_huffman_totalnumofsymbols(const GtHuffman *huffman);
+GtUword    gt_huffman_totalnumofsymbols(const GtHuffman *huffman);
+
+/* Deletes <huffman>. */
+void       gt_huffman_delete(GtHuffman *huffman);
 
 /* Returns a new <GtHuffmanDecoder> object. This decoder is meant to decode a
    Huffman encoded bitstring. <length> is the number of elements in
    <bitsequence>. The <bit_offset> tells the decoder at which bit of the first
    <GtBitsequence> to start, <pad_length> is the number of bits in the last
    element of <bitsequence> that are not part of the encoded data. */
-GtHuffmanDecoder*        gt_huffman_decoder_new(GtHuffman *huffman,
-                                                GtBitsequence *bitsequence,
-                                                GtUword length,
-                                                GtUword bit_offset,
-                                                GtUword pad_length);
+GtHuffmanDecoder* gt_huffman_decoder_new(GtHuffman *huffman,
+                                         GtBitsequence *bitsequence,
+                                         GtUword length,
+                                         GtUword bit_offset,
+                                         GtUword pad_length);
 
 /* Function type, used by <GtHuffmanDecoder> to ask for a pointer to
    <GtBitsequence> to read. Sets <bitsequence> to the new memory, <length> to
@@ -122,7 +125,7 @@ typedef int (*GtHuffmanDecoderGetMemFunc) (GtBitsequence **bitsequence,
    chunk of data.
    This type of encoder is helpful if the encoded data is sampled or read in
    chunks from mmapped files. */
-GtHuffmanDecoder*        gt_huffman_decoder_new_from_memory(
+GtHuffmanDecoder* gt_huffman_decoder_new_from_memory(
                                             GtHuffman *huffman,
                                             GtHuffmanDecoderGetMemFunc mem_func,
                                             void *info,
@@ -130,7 +133,7 @@ GtHuffmanDecoder*        gt_huffman_decoder_new_from_memory(
 
 /* Make the decoder <huff_decoder> call the <mem_func> to get new memory.
    Returns -1 on error. This can be used to reset the decoder. */
-int                      gt_huffman_decoder_get_new_mem_chunk(
+int               gt_huffman_decoder_get_new_mem_chunk(
                                                  GtHuffmanDecoder *huff_decoder,
                                                  GtError *err);
 
@@ -138,10 +141,13 @@ int                      gt_huffman_decoder_get_new_mem_chunk(
    <symbols> and returns the decoder's status. Returns 0 if EOF was reached, 1
    if there are more symbols to read and -1 if an error occurred. <symbols> must
    be an array with type GtUword. */
-int                      gt_huffman_decoder_next(GtHuffmanDecoder *huff_decoder,
-                                                 GtArray *symbols,
-                                                 GtUword symbols_to_read,
-                                                 GtError *err);
+int               gt_huffman_decoder_next(GtHuffmanDecoder *huff_decoder,
+                                          GtArray *symbols,
+                                          GtUword symbols_to_read,
+                                          GtError *err);
+
+/* Deletes <huff_decoder>. */
+void              gt_huffman_decoder_delete(GtHuffmanDecoder *huff_decoder);
 
 /* Returns a new GtHuffmanBitwiseDecoder object. This decoder that is
    meant to decode a code bit by bit.*/
@@ -158,17 +164,10 @@ int                      gt_huffman_bitwise_decoder_next(
                                                   GtUword *symbol,
                                                   GtError *err);
 
-/* Deletes <huff_decoder>. */
-void                     gt_huffman_decoder_delete(
-                                                GtHuffmanDecoder *huff_decoder);
-
-/* Deletes <huffman>. */
-void                     gt_huffman_delete(GtHuffman *huffman);
-
 /* Deletes <hbwd>. */
 void                     gt_huffman_bitwise_decoder_delete(
-                                                GtHuffmanBitwiseDecoder *hbwd);
+                                                 GtHuffmanBitwiseDecoder *hbwd);
 
-int                      gt_huffman_unit_test(GtError *err);
+int gt_huffman_unit_test(GtError *err);
 
 #endif
diff --git a/src/extended/intset_16.c b/src/extended/intset_16.c
index 859cd40..7e5a446 100644
--- a/src/extended/intset_16.c
+++ b/src/extended/intset_16.c
@@ -1,6 +1,6 @@
 /*
   Copyright (c) 2014 Dirk Willrodt <willrodt at zbh.uni-hamburg.de>
-  Copyright (c) 2014-2015 Center for Bioinformatics, University of Hamburg
+  Copyright (c) 2014-2016 Center for Bioinformatics, University of Hamburg
 
   Permission to use, copy, modify, and distribute this software for any
   purpose with or without fee is hereby granted, provided that the above
@@ -17,7 +17,7 @@
 
 /*
   THIS FILE IS GENERATED by
-  scripts/gen-intsets.rb.
+  ./scripts/gen-intsets.rb.
   DO NOT EDIT.
 */
 
@@ -228,7 +228,7 @@ void gt_intset_16_add(GtIntset *intset, GtUword elem)
   members->previouselem = elem;
 }
 
-static GtUword gt_intset_16_sec_idx_largest_seq(GtUword *sectionstart,
+static GtUword gt_intset_16_sec_idx_largest_leq(GtUword *sectionstart,
                                                 GtUword idx)
 {
   GtUword result = 0;
@@ -238,25 +238,25 @@ static GtUword gt_intset_16_sec_idx_largest_seq(GtUword *sectionstart,
 }
 
 static GtUword
-gt_intset_16_binarysearch_sec_idx_largest_seq(GtUword *sectionstart,
-                                              GtUword *secend,
+gt_intset_16_binarysearch_sec_idx_largest_leq(GtUword *secstart_begin,
+                                              GtUword *secstart_end,
                                               GtUword idx)
 {
   GtUword *midptr = NULL, *found = NULL,
-          *startorig = sectionstart;
-  if (*sectionstart <= idx)
-    found = sectionstart;
-  while (sectionstart < secend) {
-    midptr = sectionstart + (GtUword) GT_DIV2(secend - sectionstart);
+          *startorig = secstart_begin;
+  if (*secstart_begin <= idx)
+    found = secstart_begin;
+  while (secstart_begin < secstart_end) {
+    midptr = secstart_begin + (GtUword) GT_DIV2(secstart_end - secstart_begin);
     if (*midptr < idx) {
       found = midptr;
       if (*midptr == idx) {
         break;
       }
-      sectionstart = midptr + 1;
+      secstart_begin = midptr + 1;
     }
     else {
-      secend = midptr - 1;
+      secstart_end = midptr - 1;
     }
   }
   gt_assert(found != NULL);
@@ -272,7 +272,7 @@ static GtUword gt_intset_16_get_test(GtIntset *intset, GtUword idx)
   GtUword *sectionstart = members->sectionstart;
   gt_assert(idx < members->nextfree);
 
-  return (gt_intset_16_sec_idx_largest_seq(sectionstart, idx) <<
+  return (gt_intset_16_sec_idx_largest_leq(sectionstart, idx) <<
          members->logsectionsize) + intset_16->elements[idx];
 }
 
@@ -284,7 +284,7 @@ GtUword gt_intset_16_get(GtIntset *intset, GtUword idx)
   GtUword *sectionstart = members->sectionstart;
   gt_assert(idx < members->nextfree);
 
-  quotient = gt_intset_16_binarysearch_sec_idx_largest_seq(
+  quotient = gt_intset_16_binarysearch_sec_idx_largest_leq(
                                       sectionstart,
                                       sectionstart + members->numofsections - 1,
                                       idx);
diff --git a/src/extended/intset_16.h b/src/extended/intset_16.h
index ad27bcb..95b16f1 100644
--- a/src/extended/intset_16.h
+++ b/src/extended/intset_16.h
@@ -1,6 +1,6 @@
 /*
   Copyright (c) 2014 Dirk Willrodt <willrodt at zbh.uni-hamburg.de>
-  Copyright (c) 2014-2015 Center for Bioinformatics, University of Hamburg
+  Copyright (c) 2014-2016 Center for Bioinformatics, University of Hamburg
 
   Permission to use, copy, modify, and distribute this software for any
   purpose with or without fee is hereby granted, provided that the above
@@ -17,7 +17,7 @@
 
 /*
   THIS FILE IS GENERATED by
-  scripts/gen-intsets.rb.
+  ./scripts/gen-intsets.rb.
   DO NOT EDIT.
 */
 
diff --git a/src/extended/intset_32.c b/src/extended/intset_32.c
index c72f0ea..b14bbf3 100644
--- a/src/extended/intset_32.c
+++ b/src/extended/intset_32.c
@@ -1,6 +1,6 @@
 /*
   Copyright (c) 2014 Dirk Willrodt <willrodt at zbh.uni-hamburg.de>
-  Copyright (c) 2014-2015 Center for Bioinformatics, University of Hamburg
+  Copyright (c) 2014-2016 Center for Bioinformatics, University of Hamburg
 
   Permission to use, copy, modify, and distribute this software for any
   purpose with or without fee is hereby granted, provided that the above
@@ -17,7 +17,7 @@
 
 /*
   THIS FILE IS GENERATED by
-  scripts/gen-intsets.rb.
+  ./scripts/gen-intsets.rb.
   DO NOT EDIT.
 */
 
@@ -228,7 +228,7 @@ void gt_intset_32_add(GtIntset *intset, GtUword elem)
   members->previouselem = elem;
 }
 
-static GtUword gt_intset_32_sec_idx_largest_seq(GtUword *sectionstart,
+static GtUword gt_intset_32_sec_idx_largest_leq(GtUword *sectionstart,
                                                 GtUword idx)
 {
   GtUword result = 0;
@@ -238,25 +238,25 @@ static GtUword gt_intset_32_sec_idx_largest_seq(GtUword *sectionstart,
 }
 
 static GtUword
-gt_intset_32_binarysearch_sec_idx_largest_seq(GtUword *sectionstart,
-                                              GtUword *secend,
+gt_intset_32_binarysearch_sec_idx_largest_leq(GtUword *secstart_begin,
+                                              GtUword *secstart_end,
                                               GtUword idx)
 {
   GtUword *midptr = NULL, *found = NULL,
-          *startorig = sectionstart;
-  if (*sectionstart <= idx)
-    found = sectionstart;
-  while (sectionstart < secend) {
-    midptr = sectionstart + (GtUword) GT_DIV2(secend - sectionstart);
+          *startorig = secstart_begin;
+  if (*secstart_begin <= idx)
+    found = secstart_begin;
+  while (secstart_begin < secstart_end) {
+    midptr = secstart_begin + (GtUword) GT_DIV2(secstart_end - secstart_begin);
     if (*midptr < idx) {
       found = midptr;
       if (*midptr == idx) {
         break;
       }
-      sectionstart = midptr + 1;
+      secstart_begin = midptr + 1;
     }
     else {
-      secend = midptr - 1;
+      secstart_end = midptr - 1;
     }
   }
   gt_assert(found != NULL);
@@ -272,7 +272,7 @@ static GtUword gt_intset_32_get_test(GtIntset *intset, GtUword idx)
   GtUword *sectionstart = members->sectionstart;
   gt_assert(idx < members->nextfree);
 
-  return (gt_intset_32_sec_idx_largest_seq(sectionstart, idx) <<
+  return (gt_intset_32_sec_idx_largest_leq(sectionstart, idx) <<
          members->logsectionsize) + intset_32->elements[idx];
 }
 
@@ -284,7 +284,7 @@ GtUword gt_intset_32_get(GtIntset *intset, GtUword idx)
   GtUword *sectionstart = members->sectionstart;
   gt_assert(idx < members->nextfree);
 
-  quotient = gt_intset_32_binarysearch_sec_idx_largest_seq(
+  quotient = gt_intset_32_binarysearch_sec_idx_largest_leq(
                                       sectionstart,
                                       sectionstart + members->numofsections - 1,
                                       idx);
diff --git a/src/extended/intset_32.h b/src/extended/intset_32.h
index 6859f98..a0a77bb 100644
--- a/src/extended/intset_32.h
+++ b/src/extended/intset_32.h
@@ -1,6 +1,6 @@
 /*
   Copyright (c) 2014 Dirk Willrodt <willrodt at zbh.uni-hamburg.de>
-  Copyright (c) 2014-2015 Center for Bioinformatics, University of Hamburg
+  Copyright (c) 2014-2016 Center for Bioinformatics, University of Hamburg
 
   Permission to use, copy, modify, and distribute this software for any
   purpose with or without fee is hereby granted, provided that the above
@@ -17,7 +17,7 @@
 
 /*
   THIS FILE IS GENERATED by
-  scripts/gen-intsets.rb.
+  ./scripts/gen-intsets.rb.
   DO NOT EDIT.
 */
 
diff --git a/src/extended/intset_8.c b/src/extended/intset_8.c
index 08f46e0..c441c1c 100644
--- a/src/extended/intset_8.c
+++ b/src/extended/intset_8.c
@@ -1,6 +1,6 @@
 /*
   Copyright (c) 2014 Dirk Willrodt <willrodt at zbh.uni-hamburg.de>
-  Copyright (c) 2014-2015 Center for Bioinformatics, University of Hamburg
+  Copyright (c) 2014-2016 Center for Bioinformatics, University of Hamburg
 
   Permission to use, copy, modify, and distribute this software for any
   purpose with or without fee is hereby granted, provided that the above
@@ -17,7 +17,7 @@
 
 /*
   THIS FILE IS GENERATED by
-  scripts/gen-intsets.rb.
+  ./scripts/gen-intsets.rb.
   DO NOT EDIT.
 */
 
@@ -228,7 +228,7 @@ void gt_intset_8_add(GtIntset *intset, GtUword elem)
   members->previouselem = elem;
 }
 
-static GtUword gt_intset_8_sec_idx_largest_seq(GtUword *sectionstart,
+static GtUword gt_intset_8_sec_idx_largest_leq(GtUword *sectionstart,
                                                GtUword idx)
 {
   GtUword result = 0;
@@ -238,25 +238,25 @@ static GtUword gt_intset_8_sec_idx_largest_seq(GtUword *sectionstart,
 }
 
 static GtUword
-gt_intset_8_binarysearch_sec_idx_largest_seq(GtUword *sectionstart,
-                                             GtUword *secend,
+gt_intset_8_binarysearch_sec_idx_largest_leq(GtUword *secstart_begin,
+                                             GtUword *secstart_end,
                                              GtUword idx)
 {
   GtUword *midptr = NULL, *found = NULL,
-          *startorig = sectionstart;
-  if (*sectionstart <= idx)
-    found = sectionstart;
-  while (sectionstart < secend) {
-    midptr = sectionstart + (GtUword) GT_DIV2(secend - sectionstart);
+          *startorig = secstart_begin;
+  if (*secstart_begin <= idx)
+    found = secstart_begin;
+  while (secstart_begin < secstart_end) {
+    midptr = secstart_begin + (GtUword) GT_DIV2(secstart_end - secstart_begin);
     if (*midptr < idx) {
       found = midptr;
       if (*midptr == idx) {
         break;
       }
-      sectionstart = midptr + 1;
+      secstart_begin = midptr + 1;
     }
     else {
-      secend = midptr - 1;
+      secstart_end = midptr - 1;
     }
   }
   gt_assert(found != NULL);
@@ -272,7 +272,7 @@ static GtUword gt_intset_8_get_test(GtIntset *intset, GtUword idx)
   GtUword *sectionstart = members->sectionstart;
   gt_assert(idx < members->nextfree);
 
-  return (gt_intset_8_sec_idx_largest_seq(sectionstart, idx) <<
+  return (gt_intset_8_sec_idx_largest_leq(sectionstart, idx) <<
          members->logsectionsize) + intset_8->elements[idx];
 }
 
@@ -284,7 +284,7 @@ GtUword gt_intset_8_get(GtIntset *intset, GtUword idx)
   GtUword *sectionstart = members->sectionstart;
   gt_assert(idx < members->nextfree);
 
-  quotient = gt_intset_8_binarysearch_sec_idx_largest_seq(
+  quotient = gt_intset_8_binarysearch_sec_idx_largest_leq(
                                       sectionstart,
                                       sectionstart + members->numofsections - 1,
                                       idx);
diff --git a/src/extended/intset_8.h b/src/extended/intset_8.h
index 4560fa3..1650794 100644
--- a/src/extended/intset_8.h
+++ b/src/extended/intset_8.h
@@ -1,6 +1,6 @@
 /*
   Copyright (c) 2014 Dirk Willrodt <willrodt at zbh.uni-hamburg.de>
-  Copyright (c) 2014-2015 Center for Bioinformatics, University of Hamburg
+  Copyright (c) 2014-2016 Center for Bioinformatics, University of Hamburg
 
   Permission to use, copy, modify, and distribute this software for any
   purpose with or without fee is hereby granted, provided that the above
@@ -17,7 +17,7 @@
 
 /*
   THIS FILE IS GENERATED by
-  scripts/gen-intsets.rb.
+  ./scripts/gen-intsets.rb.
   DO NOT EDIT.
 */
 
diff --git a/src/extended/linearalign.c b/src/extended/linearalign.c
index 8801819..a4f437c 100644
--- a/src/extended/linearalign.c
+++ b/src/extended/linearalign.c
@@ -1,7 +1,7 @@
 /*
   Copyright (C) 2015 Annika Seidel, <annika.seidel at studium.uni-hamburg.de>
   Copyright (C) 2015 Stefan Kurtz, <kurtz at zbh.uni-hamburg.de>
-  Copyright (C) 2015 Joerg Winkler, <joerg.winkler at studium.uni-hamburg.de>
+  Copyright (C) 2015 Joerg Winkler, <j.winkler at posteo.de>
   Copyright (C) 2014 Dirk Willrodt, <willrodt at zbh.uni-hamburg.de>
   Copyright (C) 2010 Sascha Steinbiss, <steinbiss at zbh.uni-hamburg.de>
   Copyright (c) 2006-2009 Gordon Gremme <gordon at gremme.org>
@@ -279,12 +279,12 @@ static GtUword evaluatelinearcrosspoints(GtLinspaceManagement *spacemanager,
     if (gt_jobs == 1)
     {
 #endif
-      if (gt_linspaceManagement_checksquare(spacemanager, ulen,vlen,
-                                                 sizeof (GtUword),
-                                                 sizeof (Rtabcolumn)))
+      if (gt_linspace_management_checksquare(spacemanager, ulen,vlen,
+                                             sizeof (GtUword),
+                                             sizeof (Rtabcolumn)))
       { /* product of subsquences is lower than space allocated already or
          * lower than timesquarfactor * ulen*/
-        return ctab_in_square_space(spacemanager, scorehandler, Ctab, useq,
+        return gt_squarealign_ctab(spacemanager, scorehandler, Ctab, useq,
                                    ustart, ulen, vseq, vstart, vlen, rowoffset);
       }
 #ifdef GT_THREADS_ENABLED
@@ -292,8 +292,8 @@ static GtUword evaluatelinearcrosspoints(GtLinspaceManagement *spacemanager,
 #endif
 
     midcol = GT_DIV2(vlen);
-    Rtabcolumn = gt_linspaceManagement_get_rTabspace(spacemanager);
-    EDtabcolumn = gt_linspaceManagement_get_valueTabspace(spacemanager);
+    Rtabcolumn = gt_linspace_management_get_rTabspace(spacemanager);
+    EDtabcolumn = gt_linspace_management_get_valueTabspace(spacemanager);
     Rtabcolumn = Rtabcolumn + rowoffset + threadidx;
     EDtabcolumn = EDtabcolumn + rowoffset + threadidx;
 
@@ -377,43 +377,43 @@ GtUword gt_calc_linearalign(GtLinspaceManagement *spacemanager,
   GtUword distance, gapcost, *Ctab, *EDtabcolumn, *Rtabcolumn, threadcount = 1;
 
   gt_assert(scorehandler);
-  gt_linspaceManagement_set_ulen(spacemanager,ulen);
+  gt_linspace_management_set_ulen(spacemanager,ulen);
   gapcost = gt_scorehandler_get_gapscore(scorehandler);
 
   if (ulen == 0UL)
   {
-    return construct_trivial_insertion_alignment(align,vlen,gapcost);
+    return gt_reconstructalignment_trivial_insertion(align, vlen, gapcost);
   }
   else if (vlen == 0UL)
   {
-    return construct_trivial_deletion_alignment(align,ulen,gapcost);
+    return gt_reconstructalignment_trivial_deletion(align, ulen, gapcost);
   }
   else if (vlen == 1UL)
   {
-    gt_linspaceManagement_check(spacemanager,(ulen+1)*(vlen+1)-1,ulen,
+    gt_linspace_management_check(spacemanager, (ulen+1)*(vlen+1)-1, ulen,
                                 sizeof (*EDtabcolumn), sizeof (EDtabcolumn), 0);
-    return alignment_in_square_space_generic(spacemanager, align,
-                                             useq, ustart, ulen,
-                                             vseq, vstart, vlen, scorehandler);
+    return gt_squarealign_calculate_generic(spacemanager, align,
+                                            useq, ustart, ulen,
+                                            vseq, vstart, vlen, scorehandler);
   }
-  else if (gt_linspaceManagement_checksquare(spacemanager, ulen, vlen,
-                                             sizeof (*EDtabcolumn),
-                                             sizeof (*Rtabcolumn)))
+  else if (gt_linspace_management_checksquare(spacemanager, ulen, vlen,
+                                              sizeof (*EDtabcolumn),
+                                              sizeof (*Rtabcolumn)))
   { /* call 2dim */
-    return alignment_in_square_space_generic(spacemanager, align,
-                                             useq, ustart, ulen,
-                                             vseq, vstart, vlen, scorehandler);
+    return gt_squarealign_calculate_generic(spacemanager, align,
+                                            useq, ustart, ulen,
+                                            vseq, vstart, vlen, scorehandler);
   }
 
 #ifdef GT_THREADS_ENABLED
-  gt_linspaceManagement_check(spacemanager, ulen + GT_DIV2(vlen), vlen,
-                              sizeof (*EDtabcolumn), sizeof (*Rtabcolumn),
-                              sizeof (*Ctab));
+  gt_linspace_management_check(spacemanager, ulen + GT_DIV2(vlen), vlen,
+                               sizeof (*EDtabcolumn), sizeof (*Rtabcolumn),
+                               sizeof (*Ctab));
 #else
-  gt_linspaceManagement_check(spacemanager, ulen, vlen, sizeof (*EDtabcolumn),
-                              sizeof (*Rtabcolumn), sizeof (*Ctab));
+  gt_linspace_management_check(spacemanager, ulen, vlen, sizeof (*EDtabcolumn),
+                               sizeof (*Rtabcolumn), sizeof (*Ctab));
 #endif
-  Ctab = gt_linspaceManagement_get_crosspointTabspace(spacemanager);
+  Ctab = gt_linspace_management_get_crosspointTabspace(spacemanager);
 
   Ctab[vlen] = ulen;
   distance = evaluatelinearcrosspoints(spacemanager, scorehandler,
@@ -422,22 +422,22 @@ GtUword gt_calc_linearalign(GtLinspaceManagement *spacemanager,
                                        Ctab, 0, 0, &threadcount);
 
   determineCtab0(Ctab, scorehandler, vseq[vstart], useq, ustart);
-  reconstructalignment_from_Ctab(align, Ctab, useq, ustart, vseq, vstart,
-                                 vlen, scorehandler);
+  gt_reconstructalignment_from_Ctab(align, Ctab, useq, ustart, vseq, vstart,
+                                    vlen, scorehandler);
 
   return distance;
 }
 
 /* global alignment with linear gapcosts in linear space */
-GtUword gt_computelinearspace_generic(GtLinspaceManagement *spacemanager,
-                                      const GtScoreHandler *scorehandler,
-                                      GtAlignment *align,
-                                      const GtUchar *useq,
-                                      GtUword ustart,
-                                      GtUword ulen,
-                                      const GtUchar *vseq,
-                                      GtUword vstart,
-                                      GtUword vlen)
+GtUword gt_linearalign_compute_generic(GtLinspaceManagement *spacemanager,
+                                       const GtScoreHandler *scorehandler,
+                                       GtAlignment *align,
+                                       const GtUchar *useq,
+                                       GtUword ustart,
+                                       GtUword ulen,
+                                       const GtUchar *vseq,
+                                       GtUword vstart,
+                                       GtUword vlen)
 {
   GtUword distance;
   gt_assert(spacemanager && scorehandler && align);
@@ -452,17 +452,17 @@ GtUword gt_computelinearspace_generic(GtLinspaceManagement *spacemanager,
 
 /* global alignment with linear gapcosts in linear space
    with constant cost values */
-GtUword gt_computelinearspace(GtLinspaceManagement *spacemanager,
-                              GtAlignment *align,
-                              const GtUchar *useq,
-                              GtUword ustart,
-                              GtUword ulen,
-                              const GtUchar *vseq,
-                              GtUword vstart,
-                              GtUword vlen,
-                              GtUword matchcost,
-                              GtUword mismatchcost,
-                              GtUword gapcost)
+GtUword gt_linearalign_compute(GtLinspaceManagement *spacemanager,
+                               GtAlignment *align,
+                               const GtUchar *useq,
+                               GtUword ustart,
+                               GtUword ulen,
+                               const GtUchar *vseq,
+                               GtUword vstart,
+                               GtUword vlen,
+                               GtUword matchcost,
+                               GtUword mismatchcost,
+                               GtUword gapcost)
 {
   GtUword distance;
   GtScoreHandler *scorehandler;
@@ -470,9 +470,9 @@ GtUword gt_computelinearspace(GtLinspaceManagement *spacemanager,
 
   scorehandler = gt_scorehandler_new(matchcost, mismatchcost, 0, gapcost);
 
-  distance =  gt_computelinearspace_generic(spacemanager, scorehandler, align,
-                                            useq, ustart, ulen,
-                                            vseq, vstart, vlen);
+  distance =  gt_linearalign_compute_generic(spacemanager, scorehandler, align,
+                                             useq, ustart, ulen,
+                                             vseq, vstart, vlen);
   gt_scorehandler_delete(scorehandler);
   return distance;
 }
@@ -594,11 +594,11 @@ static void nextLStabcolumn(GtWord *Ltabcolumn,
       Starttabcolumn[rowindex].a = rowindex;
       Starttabcolumn[rowindex].b = colindex;
     }
-    if (Ltabcolumn[rowindex] > gt_max_get_value(max))
+    if (Ltabcolumn[rowindex] > gt_maxcoordvalue_get_value(max))
     {
-      gt_max_coord_update(max, Ltabcolumn[rowindex],
-                               Starttabcolumn[rowindex],
-                               rowindex, colindex);
+      gt_maxcoordvalue_coord_update(max, Ltabcolumn[rowindex],
+                                    Starttabcolumn[rowindex],
+                                    rowindex, colindex);
     }
   }
 }
@@ -617,12 +617,12 @@ static GtMaxcoordvalue *evaluateallLScolumns(GtLinspaceManagement *spacemanager,
   GtUwordPair *Starttabcolumn;
   GtMaxcoordvalue *max;
 
-  Ltabcolumn = gt_linspaceManagement_get_valueTabspace(spacemanager);
-  Starttabcolumn = gt_linspaceManagement_get_rTabspace(spacemanager);
+  Ltabcolumn = gt_linspace_management_get_valueTabspace(spacemanager);
+  Starttabcolumn = gt_linspace_management_get_rTabspace(spacemanager);
 
   firstLStabcolumn(Ltabcolumn, Starttabcolumn, ulen);
 
-  max = gt_linspaceManagement_get_maxspace(spacemanager);
+  max = gt_linspace_management_get_maxspace(spacemanager);
   for (colindex = 1UL; colindex <= vlen; colindex++)
   {
     nextLStabcolumn(Ltabcolumn, Starttabcolumn, scorehandler,
@@ -632,15 +632,15 @@ static GtMaxcoordvalue *evaluateallLScolumns(GtLinspaceManagement *spacemanager,
 }
 
 /* determining start and end of local alignment and call global function */
-GtWord gt_computelinearspace_local_generic(GtLinspaceManagement *spacemanager,
-                                           const GtScoreHandler *scorehandler,
-                                           GtAlignment *align,
-                                           const GtUchar *useq,
-                                           GtUword ustart,
-                                           GtUword ulen,
-                                           const GtUchar *vseq,
-                                           GtUword vstart,
-                                           GtUword vlen)
+GtWord gt_linearalign_compute_local_generic(GtLinspaceManagement *spacemanager,
+                                            const GtScoreHandler *scorehandler,
+                                            GtAlignment *align,
+                                            const GtUchar *useq,
+                                            GtUword ustart,
+                                            GtUword ulen,
+                                            const GtUchar *vseq,
+                                            GtUword vstart,
+                                            GtUword vlen)
 {
   GtWord *Ltabcolumn,
          score = GT_WORD_MAX;
@@ -649,7 +649,7 @@ GtWord gt_computelinearspace_local_generic(GtLinspaceManagement *spacemanager,
   GtMaxcoordvalue *max;
 
   gt_assert(spacemanager && scorehandler && align);
-  gt_linspaceManagement_set_ulen(spacemanager,ulen);
+  gt_linspace_management_set_ulen(spacemanager,ulen);
 
   if (ulen == 0UL || vlen == 0UL)
   {
@@ -658,44 +658,44 @@ GtWord gt_computelinearspace_local_generic(GtLinspaceManagement *spacemanager,
   }
   else if (vlen == 1UL)
   {
-    gt_linspaceManagement_check_local(spacemanager,
-                                      (ulen+1)*(vlen+1)-1, ulen,
-                                      sizeof (GtWord),
-                                      sizeof (GtWord *));
-    return alignment_in_square_space_local_generic(spacemanager, align,
-                                                   useq, ustart, ulen,
-                                                   vseq, vstart, vlen,
-                                                   scorehandler);
+    gt_linspace_management_check_local(spacemanager,
+                                       (ulen+1)*(vlen+1)-1, ulen,
+                                       sizeof (GtWord),
+                                       sizeof (GtWord *));
+    return gt_squarealign_calculate_local_generic(spacemanager, align,
+                                                  useq, ustart, ulen,
+                                                  vseq, vstart, vlen,
+                                                  scorehandler);
   }
-  else if (gt_linspaceManagement_checksquare_local(spacemanager, ulen, vlen,
-                                                   sizeof (*Ltabcolumn),
-                                                   sizeof (*Starttabcolumn)))
+  else if (gt_linspace_management_checksquare_local(spacemanager, ulen, vlen,
+                                                    sizeof (*Ltabcolumn),
+                                                    sizeof (*Starttabcolumn)))
   {
     /* call 2dim */
-    return alignment_in_square_space_local_generic(spacemanager, align,
-                                                   useq, ustart, ulen,
-                                                   vseq, vstart, vlen,
-                                                   scorehandler);
+    return gt_squarealign_calculate_local_generic(spacemanager, align,
+                                                  useq, ustart, ulen,
+                                                  vseq, vstart, vlen,
+                                                  scorehandler);
   }
 
-  gt_linspaceManagement_check_local(spacemanager,
-                                    ulen, vlen,
-                                    sizeof (*Ltabcolumn),
-                                    sizeof (*Starttabcolumn));
+  gt_linspace_management_check_local(spacemanager,
+                                     ulen, vlen,
+                                     sizeof (*Ltabcolumn),
+                                     sizeof (*Starttabcolumn));
 
   max = evaluateallLScolumns(spacemanager, scorehandler,
                              useq, ustart, ulen,
                              vseq, vstart, vlen);
 
-  if (gt_max_get_length_safe(max))
+  if (gt_maxcoordvalue_get_length_safe(max))
   {
     GtScoreHandler *costhandler;
 
-    ustart_part = ustart+(gt_max_get_start(max)).a;
-    vstart_part = vstart+(gt_max_get_start(max)).b;
-    ulen_part = gt_max_get_row_length(max);
-    vlen_part = gt_max_get_col_length(max);
-    score = gt_max_get_value(max);
+    ustart_part = ustart+(gt_maxcoordvalue_get_start(max)).a;
+    vstart_part = vstart+(gt_maxcoordvalue_get_start(max)).b;
+    ulen_part = gt_maxcoordvalue_get_row_length(max);
+    vlen_part = gt_maxcoordvalue_get_col_length(max);
+    score = gt_maxcoordvalue_get_value(max);
 
     gt_alignment_set_seqs(align, useq + ustart_part, ulen_part,
                                  vseq + vstart_part, vlen_part);
@@ -714,17 +714,17 @@ GtWord gt_computelinearspace_local_generic(GtLinspaceManagement *spacemanager,
   return score;
 }
 
-GtWord gt_computelinearspace_local(GtLinspaceManagement *spacemanager,
-                                   GtAlignment *align,
-                                   const GtUchar *useq,
-                                   GtUword ustart,
-                                   GtUword ulen,
-                                   const GtUchar *vseq,
-                                   GtUword vstart,
-                                   GtUword vlen,
-                                   GtWord matchscore,
-                                   GtWord mismatchscore,
-                                   GtWord gapscore)
+GtWord gt_linearalign_compute_local(GtLinspaceManagement *spacemanager,
+                                    GtAlignment *align,
+                                    const GtUchar *useq,
+                                    GtUword ustart,
+                                    GtUword ulen,
+                                    const GtUchar *vseq,
+                                    GtUword vstart,
+                                    GtUword vlen,
+                                    GtWord matchscore,
+                                    GtWord mismatchscore,
+                                    GtWord gapscore)
 {
   GtWord score;
   gt_assert(align && spacemanager);
@@ -732,20 +732,20 @@ GtWord gt_computelinearspace_local(GtLinspaceManagement *spacemanager,
                                                      mismatchscore,
                                                      0, gapscore);
 
-  score = gt_computelinearspace_local_generic(spacemanager, scorehandler, align,
-                                              useq, ustart, ulen,
-                                              vseq, vstart, vlen);
+  score = gt_linearalign_compute_local_generic(spacemanager, scorehandler,
+                                               align, useq, ustart, ulen,
+                                               vseq, vstart, vlen);
   gt_scorehandler_delete(scorehandler);
   return score;
 }
 
 /*-----------------------------checkfunctions--------------------------------*/
 
-void gt_checklinearspace(GT_UNUSED bool forward,
-                         const GtUchar *useq,
-                         GtUword ulen,
-                         const GtUchar *vseq,
-                         GtUword vlen)
+void gt_linearalign_check(GT_UNUSED bool forward,
+                          const GtUchar *useq,
+                          GtUword ulen,
+                          const GtUchar *vseq,
+                          GtUword vlen)
 {
   GtAlignment *align;
   GtUword edist1, edist2, edist3, edist4,
@@ -768,18 +768,18 @@ void gt_checklinearspace(GT_UNUSED bool forward,
   scorehandler = gt_scorehandler_new(matchcost,  mismatchcost, 0, gapcost);
   gt_scorehandler_plain(scorehandler);
   gt_scorehandler_downcase(scorehandler);
-  spacemanager = gt_linspaceManagement_new();
+  spacemanager = gt_linspace_management_new();
   align = gt_alignment_new_with_seqs(useq, ulen, vseq, vlen);
   edist1 = gt_calc_linearalign(spacemanager, scorehandler, align,
                                useq, 0, ulen,
                                vseq, 0, vlen);
-  edist2 = distance_only_global_alignment(useq, 0, ulen, vseq, 0, vlen,
-                                          scorehandler);
+  edist2 = gt_squarealign_global_distance_only(useq, 0, ulen, vseq, 0, vlen,
+                                               scorehandler);
 
   if (edist1 != edist2)
   {
     fprintf(stderr,"gt_calc_linearalign = "GT_WU" != "GT_WU
-            " = distance_only_global_alignment\n", edist1,edist2);
+            " = gt_squarealign_global_distance_only\n", edist1,edist2);
     exit(GT_EXIT_PROGRAMMING_ERROR);
   }
 
@@ -788,7 +788,7 @@ void gt_checklinearspace(GT_UNUSED bool forward,
 
   if (edist2 != edist3)
   {
-    fprintf(stderr,"distance_only_global_alignment = "GT_WU" != "GT_WU
+    fprintf(stderr,"gt_squarealign_global_distance_only = "GT_WU" != "GT_WU
             " = gt_alignment_eval_with_score\n", edist2,edist3);
     exit(GT_EXIT_PROGRAMMING_ERROR);
   }
@@ -800,14 +800,14 @@ void gt_checklinearspace(GT_UNUSED bool forward,
             " = gt_calc_linearedist\n", edist3, edist4);
     exit(GT_EXIT_PROGRAMMING_ERROR);
   }
-  gt_linspaceManagement_delete(spacemanager);
+  gt_linspace_management_delete(spacemanager);
   gt_scorehandler_delete(scorehandler);
   gt_alignment_delete(align);
 }
 
-void gt_checklinearspace_local(GT_UNUSED bool forward,
-                               const GtUchar *useq, GtUword ulen,
-                               const GtUchar *vseq, GtUword vlen)
+void gt_linearalign_check_local(GT_UNUSED bool forward,
+                                const GtUchar *useq, GtUword ulen,
+                                const GtUchar *vseq, GtUword vlen)
 {
   GtAlignment *align;
   GtWord score1, score2, score3, score4,
@@ -827,32 +827,32 @@ void gt_checklinearspace_local(GT_UNUSED bool forward,
   }
   scorehandler = gt_scorehandler_new(matchscore, mismatchscore, 0, gapscore);
   gt_scorehandler_plain(scorehandler);
-  spacemanager = gt_linspaceManagement_new();
+  spacemanager = gt_linspace_management_new();
   align = gt_alignment_new();
-  score1 = gt_computelinearspace_local_generic(spacemanager, scorehandler,
-                                               align, useq, 0, ulen,
-                                               vseq, 0, vlen);
+  score1 = gt_linearalign_compute_local_generic(spacemanager, scorehandler,
+                                                align, useq, 0, ulen,
+                                                vseq, 0, vlen);
 
   score2 = gt_alignment_eval_with_score(align, true, matchscore,
                                         mismatchscore, gapscore);
-  gt_linspaceManagement_delete(spacemanager);
+  gt_linspace_management_delete(spacemanager);
   gt_scorehandler_delete(scorehandler);
   if (score1 != score2)
   {
-    fprintf(stderr,"gt_computelinearspace_local = "GT_WD" != "GT_WD
+    fprintf(stderr,"gt_linearalign_compute_local_generic = "GT_WD" != "GT_WD
             " = gt_alignment_eval_generic_with_score\n", score1, score2);
     exit(GT_EXIT_PROGRAMMING_ERROR);
   }
 
   gt_alignment_reset(align);
-  score3 = alignment_in_square_space_local(NULL, align, useq, 0, ulen,
-                                           vseq, 0, vlen, matchscore,
-                                           mismatchscore, gapscore);
+  score3 = gt_squarealign_calculate_local(NULL, align, useq, 0, ulen,
+                                          vseq, 0, vlen, matchscore,
+                                          mismatchscore, gapscore);
 
   if (score1 != score3)
   {
-    fprintf(stderr,"gt_computelinearspace_local = "GT_WD" != "GT_WD
-            " = alignment_in_square_space_local\n", score1, score3);
+    fprintf(stderr,"gt_linearalign_compute_local_generic = "GT_WD" != "GT_WD
+            " = gt_squarealign_calculate_local\n", score1, score3);
     exit(GT_EXIT_PROGRAMMING_ERROR);
   }
 
@@ -860,7 +860,7 @@ void gt_checklinearspace_local(GT_UNUSED bool forward,
                                         mismatchscore, gapscore);
   if (score3 != score4)
   {
-    fprintf(stderr,"alignment_in_square_space_local = "GT_WD" != "GT_WD
+    fprintf(stderr,"gt_squarealign_calculate_local = "GT_WD" != "GT_WD
             " = gt_alignment_eval_generic_with_score\n", score3, score4);
     exit(GT_EXIT_PROGRAMMING_ERROR);
   }
diff --git a/src/extended/linearalign.h b/src/extended/linearalign.h
index 0493dec..85efd4a 100644
--- a/src/extended/linearalign.h
+++ b/src/extended/linearalign.h
@@ -1,6 +1,6 @@
 /*
   Copyright (c) 2015 Annika Seidel <annika.seidel at studium.uni-hamburg.de>
-  Copyright (C) 2015 Joerg Winkler <joerg.winkler at studium.uni-hamburg.de>
+  Copyright (C) 2015 Joerg Winkler <j.winkler at posteo.de>
   Copyright (c) 2006-2007 Gordon Gremme <gordon at gremme.org>
   Copyright (c) 2006-2015 Center for Bioinformatics, University of Hamburg
 
@@ -25,33 +25,21 @@
 #include "extended/linspace_management.h"
 #include "extended/scorehandler.h"
 
-void gt_checklinearspace(GT_UNUSED bool forward,
-                         const GtUchar *useq,
-                         GtUword ulen,
-                         const GtUchar *vseq,
-                         GtUword vlen);
-
-void gt_checklinearspace_local(GT_UNUSED bool forward,
-                               const GtUchar *useq,
-                               GtUword ulen,
-                               const GtUchar *vseq,
-                               GtUword vlen);
-
 /* Computes a global alignment with linear gapcosts in linear space. Use of this
    function requires an initialised <spacemanager>, the target alignment <align>
    and input sequences <useq> and <vseq>, with the regions to align given by
    their start positions <ustart> and <vstart> and lengths <ulen> and <vlen>.
    The cost values are specified by an initialised <scorehandler>. Returns
    distance value of calculated global alignment. */
-GtUword gt_computelinearspace_generic(GtLinspaceManagement *spacemanager,
-                                      const GtScoreHandler *scorehandler,
-                                      GtAlignment *align,
-                                      const GtUchar *useq,
-                                      GtUword ustart,
-                                      GtUword ulen,
-                                      const GtUchar *vseq,
-                                      GtUword vstart,
-                                      GtUword vlen);
+GtUword gt_linearalign_compute_generic(GtLinspaceManagement *spacemanager,
+                                       const GtScoreHandler *scorehandler,
+                                       GtAlignment *align,
+                                       const GtUchar *useq,
+                                       GtUword ustart,
+                                       GtUword ulen,
+                                       const GtUchar *vseq,
+                                       GtUword vstart,
+                                       GtUword vlen);
 
 /* Computes a global alignment with linear gapcosts in linear space
    and constant cost values. Use of this function requires an initialised
@@ -60,17 +48,17 @@ GtUword gt_computelinearspace_generic(GtLinspaceManagement *spacemanager,
    <vstart> and lengths <ulen> and <vlen>. The cost values are specified by
    <matchcost>, <mismatchcost> and <gapcost>. Returns distance value of
    calculated global alignment. */
-GtUword gt_computelinearspace(GtLinspaceManagement *spacemanager,
-                              GtAlignment *align,
-                              const GtUchar *useq,
-                              GtUword ustart,
-                              GtUword ulen,
-                              const GtUchar *vseq,
-                              GtUword vstart,
-                              GtUword vlen,
-                              GtUword matchcost,
-                              GtUword mismatchcost,
-                              GtUword gapcost);
+GtUword gt_linearalign_compute(GtLinspaceManagement *spacemanager,
+                               GtAlignment *align,
+                               const GtUchar *useq,
+                               GtUword ustart,
+                               GtUword ulen,
+                               const GtUchar *vseq,
+                               GtUword vstart,
+                               GtUword vlen,
+                               GtUword matchcost,
+                               GtUword mismatchcost,
+                               GtUword gapcost);
 
 /* Computes a local alignment with linear gapcosts in linear space. Use of this
    function requires an initialised <spacemanager>, the target alignment <align>
@@ -78,15 +66,15 @@ GtUword gt_computelinearspace(GtLinspaceManagement *spacemanager,
    their start positions <ustart> and <vstart> and lengths <ulen> and <vlen>.
    The score values are specified by an initialised <scorehandler>. Returns
    score value of calculated local alignment. */
-GtWord gt_computelinearspace_local_generic(GtLinspaceManagement *spacemanager,
-                                           const GtScoreHandler *scorehandler,
-                                           GtAlignment *align,
-                                           const GtUchar *useq,
-                                           GtUword ustart,
-                                           GtUword ulen,
-                                           const GtUchar *vseq,
-                                           GtUword vstart,
-                                           GtUword vlen);
+GtWord  gt_linearalign_compute_local_generic(GtLinspaceManagement *spacemanager,
+                                             const GtScoreHandler *scorehandler,
+                                             GtAlignment *align,
+                                             const GtUchar *useq,
+                                             GtUword ustart,
+                                             GtUword ulen,
+                                             const GtUchar *vseq,
+                                             GtUword vstart,
+                                             GtUword vlen);
 
 /* Computes a local alignment with linear gapcosts in linear space
    and constant score values. Use of this function requires an initialised
@@ -95,16 +83,27 @@ GtWord gt_computelinearspace_local_generic(GtLinspaceManagement *spacemanager,
    <vstart> and lengths <ulen> and <vlen>. The score values are specified by
    <matchscore>, <mismatchscore> and <gapscore>. Returns score value of
    calculated local alignment. */
-GtWord gt_computelinearspace_local(GtLinspaceManagement *spacemanager,
-                                   GtAlignment *align,
+GtWord  gt_linearalign_compute_local(GtLinspaceManagement *spacemanager,
+                                     GtAlignment *align,
+                                     const GtUchar *useq,
+                                     GtUword ustart,
+                                     GtUword ulen,
+                                     const GtUchar *vseq,
+                                     GtUword vstart,
+                                     GtUword vlen,
+                                     GtWord matchscore,
+                                     GtWord mismatchscore,
+                                     GtWord gapscore);
+
+void    gt_linearalign_check(GT_UNUSED bool forward,
+                             const GtUchar *useq,
+                             GtUword ulen,
+                             const GtUchar *vseq,
+                             GtUword vlen);
+
+void    gt_linearalign_check_local(GT_UNUSED bool forward,
                                    const GtUchar *useq,
-                                   GtUword ustart,
                                    GtUword ulen,
                                    const GtUchar *vseq,
-                                   GtUword vstart,
-                                   GtUword vlen,
-                                   GtWord matchscore,
-                                   GtWord mismatchscore,
-                                   GtWord gapscore);
-
+                                   GtUword vlen);
 #endif
diff --git a/src/extended/linearalign_affinegapcost.c b/src/extended/linearalign_affinegapcost.c
index 8bef04d..ed4e04f 100644
--- a/src/extended/linearalign_affinegapcost.c
+++ b/src/extended/linearalign_affinegapcost.c
@@ -38,7 +38,9 @@ typedef struct {
 } Starttabentry;
 
 /*-------------------------------global affine--------------------------------*/
-AffineAlignEdge set_edge(GtWord Rdist, GtWord Ddist, GtWord Idist)
+GtAffineAlignEdge gt_linearalign_affinegapcost_set_edge(GtWord Rdist,
+                                                        GtWord Ddist,
+                                                        GtWord Idist)
 {
   GtUword minvalue = MIN3(Rdist, Ddist, Idist);
 
@@ -52,8 +54,8 @@ AffineAlignEdge set_edge(GtWord Rdist, GtWord Ddist, GtWord Idist)
   return Affine_X;
 }
 
-static inline Rnode get_Rtabentry(const Rtabentry *rtab,
-                                  AffineAlignEdge edge)
+static inline GtAffineAlignRnode get_Rtabentry(const GtAffineAlignRtabentry
+                                                *rtab, GtAffineAlignEdge edge)
 {
   if (edge == Affine_R)
   {
@@ -67,9 +69,9 @@ static inline Rnode get_Rtabentry(const Rtabentry *rtab,
   return rtab->val_I;
 }
 
-static inline void firstAtabRtabentry(AffinealignDPentry *Atabcolumn,
+static inline void firstAtabRtabentry(GtAffinealignDPentry *Atabcolumn,
                                       GtUword gap_opening,
-                                      AffineAlignEdge edge)
+                                      GtAffineAlignEdge edge)
 {
   Atabcolumn[0].Redge = Affine_X;
   Atabcolumn[0].Dedge = Affine_X;
@@ -98,12 +100,12 @@ static inline void firstAtabRtabentry(AffinealignDPentry *Atabcolumn,
   }
 }
 
-static void firstAtabRtabcolumn(AffinealignDPentry *Atabcolumn,
-                                Rtabentry *Rtabcolumn,
+static void firstAtabRtabcolumn(GtAffinealignDPentry *Atabcolumn,
+                                GtAffineAlignRtabentry *Rtabcolumn,
                                 GtUword ulen,
                                 GtUword gap_opening,
                                 GtUword gap_extension,
-                                AffineAlignEdge edge)
+                                GtAffineAlignEdge edge)
 {
   GtUword rowindex;
   GtWord rdist, ddist,idist;
@@ -129,7 +131,9 @@ static void firstAtabRtabcolumn(AffinealignDPentry *Atabcolumn,
     Atabcolumn[rowindex].Ivalue = GT_WORD_MAX;
 
     Atabcolumn[rowindex].Redge = Affine_X;
-    Atabcolumn[rowindex].Dedge = set_edge(rdist, ddist, idist);
+    Atabcolumn[rowindex].Dedge = gt_linearalign_affinegapcost_set_edge(rdist,
+                                                                       ddist,
+                                                                       idist);
     Atabcolumn[rowindex].Iedge = Affine_X;
 
     Rtabcolumn[rowindex].val_R.idx = rowindex;
@@ -142,8 +146,8 @@ static void firstAtabRtabcolumn(AffinealignDPentry *Atabcolumn,
   }
 }
 
-static void nextAtabRtabcolumn(AffinealignDPentry *Atabcolumn,
-                               Rtabentry *Rtabcolumn,
+static void nextAtabRtabcolumn(GtAffinealignDPentry *Atabcolumn,
+                               GtAffineAlignRtabentry *Rtabcolumn,
                                const GtScoreHandler *scorehandler,
                                const GtUchar *useq,
                                GtUword ustart,
@@ -152,8 +156,8 @@ static void nextAtabRtabcolumn(AffinealignDPentry *Atabcolumn,
                                GtUword midcolumn,
                                GtUword colindex)
 {
-  AffinealignDPentry northwestAffinealignDPentry, westAffinealignDPentry;
-  Rtabentry northwestRtabentry, westRtabentry;
+  GtAffinealignDPentry northwestAffinealignDPentry, westAffinealignDPentry;
+  GtAffineAlignRtabentry northwestRtabentry, westRtabentry;
   GtWord rowindex, rcost, rdist, ddist, idist, minvalue;
   GtUword gap_opening, gap_extension;
 
@@ -174,7 +178,8 @@ static void nextAtabRtabcolumn(AffinealignDPentry *Atabcolumn,
 
   Atabcolumn[0].Redge = Affine_X;
   Atabcolumn[0].Dedge = Affine_X;
-  Atabcolumn[0].Iedge = set_edge(rdist, ddist, idist);
+  Atabcolumn[0].Iedge = gt_linearalign_affinegapcost_set_edge(
+                                                           rdist, ddist, idist);
 
   if (colindex > midcolumn)
   {
@@ -201,7 +206,9 @@ static void nextAtabRtabcolumn(AffinealignDPentry *Atabcolumn,
 
     minvalue = MIN3(rdist, ddist, idist);
     Atabcolumn[rowindex].Rvalue = minvalue;
-    Atabcolumn[rowindex].Redge = set_edge(rdist, ddist, idist);
+    Atabcolumn[rowindex].Redge = gt_linearalign_affinegapcost_set_edge(rdist,
+                                                                       ddist,
+                                                                       idist);
 
     rdist = add_safe_max(Atabcolumn[rowindex-1].Rvalue,
                          gap_extension + gap_opening);
@@ -211,7 +218,9 @@ static void nextAtabRtabcolumn(AffinealignDPentry *Atabcolumn,
 
     minvalue = MIN3(rdist, ddist, idist);
     Atabcolumn[rowindex].Dvalue = minvalue;
-    Atabcolumn[rowindex].Dedge = set_edge(rdist, ddist, idist);
+    Atabcolumn[rowindex].Dedge = gt_linearalign_affinegapcost_set_edge(rdist,
+                                                                       ddist,
+                                                                       idist);
 
     rdist = add_safe_max(westAffinealignDPentry.Rvalue,
                          gap_extension + gap_opening);
@@ -221,7 +230,9 @@ static void nextAtabRtabcolumn(AffinealignDPentry *Atabcolumn,
 
     minvalue = MIN3(rdist, ddist, idist);
     Atabcolumn[rowindex].Ivalue = minvalue;
-    Atabcolumn[rowindex].Iedge = set_edge(rdist, ddist, idist);
+    Atabcolumn[rowindex].Iedge = gt_linearalign_affinegapcost_set_edge(rdist,
+                                                                       ddist,
+                                                                       idist);
 
     if (colindex > midcolumn)
     {
@@ -237,8 +248,8 @@ static void nextAtabRtabcolumn(AffinealignDPentry *Atabcolumn,
   }
 }
 
-static GtUword evaluateallAtabRtabcolumns(AffinealignDPentry *Atabcolumn,
-                                          Rtabentry *Rtabcolumn,
+static GtUword evaluateallAtabRtabcolumns(GtAffinealignDPentry *Atabcolumn,
+                                          GtAffineAlignRtabentry *Rtabcolumn,
                                           const GtScoreHandler *scorehandler,
                                           const GtUchar *useq,
                                           GtUword ustart,
@@ -247,7 +258,7 @@ static GtUword evaluateallAtabRtabcolumns(AffinealignDPentry *Atabcolumn,
                                           GtUword vstart,
                                           GtUword vlen,
                                           GtUword midcolumn,
-                                          AffineAlignEdge edge)
+                                          GtAffineAlignEdge edge)
 {
   GtUword colindex, gap_opening, gap_extension;
 
@@ -273,9 +284,10 @@ static GtUword evaluateallAtabRtabcolumns(AffinealignDPentry *Atabcolumn,
               Atabcolumn[ulen].Ivalue);
 }
 
-AffineAlignEdge minAdditionalCosts(const AffinealignDPentry *entry,
-                                   const AffineAlignEdge edge,
-                                   GtUword gap_opening)
+GtAffineAlignEdge gt_linearalign_affinegapcost_minAdditionalCosts(
+                                              const GtAffinealignDPentry *entry,
+                                              const GtAffineAlignEdge edge,
+                                              GtUword gap_opening)
 {
   GtUword rdist, ddist, idist;
 
@@ -296,7 +308,7 @@ AffineAlignEdge minAdditionalCosts(const AffinealignDPentry *entry,
       idist = entry->Ivalue;
   }
 
-  return set_edge(rdist, ddist, idist);
+  return gt_linearalign_affinegapcost_set_edge(rdist, ddist, idist);
 }
 
 #ifdef GT_THREADS_ENABLED
@@ -306,7 +318,7 @@ typedef struct{
   const GtUchar *useq, * vseq;
   GtUword ustart, ulen, vstart, vlen,
           *Ctab, rowoffset, *threadcount;
-  AffineAlignEdge from_edge, to_edge;
+  GtAffineAlignEdge from_edge, to_edge;
 }GtAffineCrosspointthreadinfo;
 
 static GtAffineCrosspointthreadinfo
@@ -320,8 +332,8 @@ static GtAffineCrosspointthreadinfo
                                              GtUword vlen,
                                              GtUword *Ctab,
                                              GtUword rowoffset,
-                                             AffineAlignEdge from_edge,
-                                             AffineAlignEdge to_edge,
+                                             GtAffineAlignEdge from_edge,
+                                             GtAffineAlignEdge to_edge,
                                              GtUword *threadcount)
 {
   GtAffineCrosspointthreadinfo threadinfo;
@@ -351,8 +363,8 @@ static GtUword evaluateaffinecrosspoints(GtLinspaceManagement *spacemanager,
                                          GtUword vlen,
                                          GtUword *Ctab,
                                          GtUword rowoffset,
-                                         AffineAlignEdge from_edge,
-                                         AffineAlignEdge to_edge,
+                                         GtAffineAlignEdge from_edge,
+                                         GtAffineAlignEdge to_edge,
                                          GtUword *threadcount);
 
 static void *evaluateaffinecrosspoints_thread_caller(void *data)
@@ -387,14 +399,14 @@ static GtUword evaluateaffinecrosspoints(GtLinspaceManagement *spacemanager,
                                          GtUword vlen,
                                          GtUword *Ctab,
                                          GtUword rowoffset,
-                                         AffineAlignEdge from_edge,
-                                         AffineAlignEdge to_edge,
+                                         GtAffineAlignEdge from_edge,
+                                         GtAffineAlignEdge to_edge,
                                          GT_UNUSED GtUword *threadcount)
 {
   GtUword  midrow = 0, midcol = GT_DIV2(vlen), distance, colindex;
-  AffineAlignEdge bottomtype, midtype = Affine_X;
-  AffinealignDPentry *Atabcolumn = NULL;
-  Rtabentry *Rtabcolumn = NULL;
+  GtAffineAlignEdge bottomtype, midtype = Affine_X;
+  GtAffinealignDPentry *Atabcolumn = NULL;
+  GtAffineAlignRtabentry *Rtabcolumn = NULL;
 
 #ifdef GT_THREADS_ENABLED
   GtThread *t1 = NULL, *t2 = NULL;
@@ -407,20 +419,20 @@ static GtUword evaluateaffinecrosspoints(GtLinspaceManagement *spacemanager,
     if (gt_jobs == 1)
     {
 #endif
-      if (gt_linspaceManagement_checksquare(spacemanager, ulen, vlen,
-                                            sizeof (*Atabcolumn),
-                                            sizeof (*Rtabcolumn)))
+      if (gt_linspace_management_checksquare(spacemanager, ulen, vlen,
+                                             sizeof (*Atabcolumn),
+                                             sizeof (*Rtabcolumn)))
       {
-        affine_ctab_in_square_space(spacemanager, scorehandler, Ctab,
-                                    useq, ustart, ulen, vseq, vstart, vlen,
-                                    rowoffset, from_edge, to_edge);
+        gt_affinealign_ctab(spacemanager, scorehandler, Ctab,
+                            useq, ustart, ulen, vseq, vstart, vlen,
+                            rowoffset, from_edge, to_edge);
         return 0;
       }
 #ifdef GT_THREADS_ENABLED
    }
 #endif
-    Rtabcolumn = gt_linspaceManagement_get_rTabspace(spacemanager);
-    Atabcolumn = gt_linspaceManagement_get_valueTabspace(spacemanager);
+    Rtabcolumn = gt_linspace_management_get_rTabspace(spacemanager);
+    Atabcolumn = gt_linspace_management_get_valueTabspace(spacemanager);
     Rtabcolumn = Rtabcolumn + rowoffset;
     Atabcolumn = Atabcolumn + rowoffset;
 
@@ -430,7 +442,8 @@ static GtUword evaluateaffinecrosspoints(GtLinspaceManagement *spacemanager,
                                           vseq, vstart, vlen,
                                           midcol, from_edge);
 
-    bottomtype = minAdditionalCosts(&Atabcolumn[ulen], to_edge,
+    bottomtype = gt_linearalign_affinegapcost_minAdditionalCosts(
+                                 &Atabcolumn[ulen], to_edge,
                                  gt_scorehandler_get_gap_opening(scorehandler));
     switch (bottomtype) {
       case Affine_R:
@@ -585,23 +598,23 @@ static void affine_determineCtab0(GtUword *Ctab,
                                   const GtUchar *vseq,
                                   GtUword vstart)
 {
-  AffinealignDPentry *Atabcolumn;
+  GtAffinealignDPentry *Atabcolumn;
 
     if (Ctab[1]== 1 || Ctab[1] == 0)
       Ctab[0] = 0;
     else
     {
-      gt_linspaceManagement_check(spacemanager,2*(Ctab[1]+1),Ctab[1],
-                                  sizeof (*Atabcolumn),sizeof (Atabcolumn),0);
+      gt_linspace_management_check(spacemanager,2*(Ctab[1]+1),Ctab[1],
+                                   sizeof (*Atabcolumn),sizeof (Atabcolumn),0);
       /*gt_assert(vlen > 1);*/
-      AffineAlignEdge to_edge_test = Affine_X;
+      GtAffineAlignEdge to_edge_test = Affine_X;
       if (Ctab[1] == Ctab[2])
         to_edge_test = Affine_I;
       else
         to_edge_test = Affine_R;
-      affine_ctab_in_square_space(spacemanager, scorehandler, Ctab,
-                                  useq, ustart, Ctab[1], vseq, vstart,
-                                  1, 0, Affine_X, to_edge_test);
+      gt_affinealign_ctab(spacemanager, scorehandler, Ctab,
+                          useq, ustart, Ctab[1], vseq, vstart,
+                          1, 0, Affine_X, to_edge_test);
     }
 }
 
@@ -618,44 +631,45 @@ GtUword gt_calc_affinealign_linear(GtLinspaceManagement *spacemanager,
 {
   GtUword distance, *Ctab, threadcount = 1;
   GtWord gap_extension, gap_opening;
-  AffinealignDPentry *Atabcolumn;
-  Rtabentry *Rtabcolumn;
+  GtAffinealignDPentry *Atabcolumn;
+  GtAffineAlignRtabentry *Rtabcolumn;
 
-  gt_linspaceManagement_set_ulen(spacemanager, ulen);
+  gt_linspace_management_set_ulen(spacemanager, ulen);
   gap_extension = gt_scorehandler_get_gapscore(scorehandler);
   gap_opening = gt_scorehandler_get_gap_opening(scorehandler);
   if (ulen == 0UL)
   {
-      distance = construct_trivial_insertion_alignment(align, vlen,
-                                                      gap_extension);
+      distance = gt_reconstructalignment_trivial_insertion(align, vlen,
+                                                           gap_extension);
       distance += gap_opening;
       return distance;
   }
   else if (vlen == 0UL)
   {
-      distance = construct_trivial_deletion_alignment(align, ulen,
-                                                      gap_extension);
+      distance = gt_reconstructalignment_trivial_deletion(align, ulen,
+                                                          gap_extension);
       distance += gap_opening;
       return distance;
   }
   else if (vlen == 1UL)
   {
-     gt_linspaceManagement_check(spacemanager, (ulen+1)*(vlen+1)-1, ulen,
-                                 sizeof (*Atabcolumn), sizeof (Atabcolumn), 0);
+     gt_linspace_management_check(spacemanager, (ulen+1)*(vlen+1)-1, ulen,
+                                  sizeof (*Atabcolumn), sizeof (Atabcolumn), 0);
     return gt_affinealign_with_Management(spacemanager, scorehandler, align,
                                    useq+ustart, ulen, vseq+vstart, vlen);
   }
-  if (gt_linspaceManagement_checksquare(spacemanager, ulen, vlen,
-                                     sizeof (*Atabcolumn),sizeof (*Rtabcolumn)))
+  if (gt_linspace_management_checksquare(spacemanager, ulen, vlen,
+                                         sizeof (*Atabcolumn),
+                                         sizeof (*Rtabcolumn)))
   {
     return gt_affinealign_with_Management(spacemanager, scorehandler, align,
                                    useq+ustart, ulen, vseq+vstart, vlen);
   }
   else
   {
-    gt_linspaceManagement_check(spacemanager, ulen, vlen, sizeof (*Atabcolumn),
-                                sizeof (*Rtabcolumn), sizeof (*Ctab));
-    Ctab = gt_linspaceManagement_get_crosspointTabspace(spacemanager);
+    gt_linspace_management_check(spacemanager, ulen, vlen, sizeof (*Atabcolumn),
+                                 sizeof (*Rtabcolumn), sizeof (*Ctab));
+    Ctab = gt_linspace_management_get_crosspointTabspace(spacemanager);
     Ctab[vlen] = ulen;
     distance = evaluateaffinecrosspoints(spacemanager, scorehandler,
                                          useq, ustart, ulen,
@@ -666,15 +680,16 @@ GtUword gt_calc_affinealign_linear(GtLinspaceManagement *spacemanager,
     affine_determineCtab0(Ctab, spacemanager, scorehandler,
                           useq, ustart, vseq, vstart);
 
-    reconstructalignment_from_Ctab(align,Ctab,useq,ustart,vseq,
-                                   vstart,vlen,scorehandler);
+    gt_reconstructalignment_from_Ctab(align, Ctab, useq, ustart, vseq,
+                                      vstart, vlen, scorehandler);
 
   }
   return distance;
 }
 
 /* global alignment with affine gapcosts in linear space */
-GtUword gt_computeaffinelinearspace_generic(GtLinspaceManagement *spacemanager,
+GtUword gt_linearalign_affinegapcost_compute_generic(
+                                            GtLinspaceManagement *spacemanager,
                                             const GtScoreHandler *scorehandler,
                                             GtAlignment *align,
                                             const GtUchar *useq,
@@ -696,18 +711,18 @@ GtUword gt_computeaffinelinearspace_generic(GtLinspaceManagement *spacemanager,
 
 /* global alignment with affine gapcosts in linear space
    with constant cost values*/
-GtUword gt_computeaffinelinearspace(GtLinspaceManagement *spacemanager,
-                                    GtAlignment *align,
-                                    const GtUchar *useq,
-                                    GtUword ustart,
-                                    GtUword ulen,
-                                    const GtUchar *vseq,
-                                    GtUword vstart,
-                                    GtUword vlen,
-                                    GtUword matchcost,
-                                    GtUword mismatchcost,
-                                    GtUword gap_opening,
-                                    GtUword gap_extension)
+GtUword gt_linearalign_affinegapcost_compute(GtLinspaceManagement *spacemanager,
+                                             GtAlignment *align,
+                                             const GtUchar *useq,
+                                             GtUword ustart,
+                                             GtUword ulen,
+                                             const GtUchar *vseq,
+                                             GtUword vstart,
+                                             GtUword vlen,
+                                             GtUword matchcost,
+                                             GtUword mismatchcost,
+                                             GtUword gap_opening,
+                                             GtUword gap_extension)
 {
   GtUword distance;
   GtScoreHandler *scorehandler = gt_scorehandler_new(matchcost,
@@ -716,16 +731,16 @@ GtUword gt_computeaffinelinearspace(GtLinspaceManagement *spacemanager,
                                                      gap_extension);
 
   gt_alignment_set_seqs(align,useq+ustart, ulen, vseq+vstart, vlen);
-  distance = gt_computeaffinelinearspace_generic(spacemanager,
-                                                 scorehandler, align,
-                                                 useq, ustart, ulen,
-                                                 vseq, vstart, vlen);
+  distance = gt_linearalign_affinegapcost_compute_generic(spacemanager,
+                                                          scorehandler, align,
+                                                          useq, ustart, ulen,
+                                                          vseq, vstart, vlen);
   gt_scorehandler_delete(scorehandler);
   return distance;
 }
 
 /*------------------------------local affine--------------------------------*/
-static void firstAStabcolumn(AffinealignDPentry *Atabcolumn,
+static void firstAStabcolumn(GtAffinealignDPentry *Atabcolumn,
                              Starttabentry *Starttabcolumn,
                              const GtScoreHandler *scorehandler,
                              GtUword ulen)
@@ -764,12 +779,12 @@ static void firstAStabcolumn(AffinealignDPentry *Atabcolumn,
   }
 }
 
-static GtUwordPair setStarttabentry(GtWord entry, AffinealignDPentry *Atab,
+static GtUwordPair setStarttabentry(GtWord entry, GtAffinealignDPentry *Atab,
                                     Starttabentry *Stab,
                                     GtWord replacement,
                                     GtWord gap_opening,
                                     GtWord gap_extension,
-                                    const AffineAlignEdge edge)
+                                    const GtAffineAlignEdge edge)
 {
   GtUwordPair start;
   switch (edge) {
@@ -810,7 +825,7 @@ static GtUwordPair setStarttabentry(GtWord entry, AffinealignDPentry *Atab,
   return start;
 }
 
-static void nextAStabcolumn(AffinealignDPentry *Atabcolumn,
+static void nextAStabcolumn(GtAffinealignDPentry *Atabcolumn,
                             Starttabentry *Starttabcolumn,
                             const GtScoreHandler *scorehandler,
                             const GtUchar *useq, GtUword ustart,
@@ -819,7 +834,7 @@ static void nextAStabcolumn(AffinealignDPentry *Atabcolumn,
                             GtUword colindex,
                             GtMaxcoordvalue *max)
 {
-  AffinealignDPentry northwestAffinealignDPentry, westAffinealignDPentry;
+  GtAffinealignDPentry northwestAffinealignDPentry, westAffinealignDPentry;
   Starttabentry Snw, Swe;
   GtUword rowindex;
   GtWord gap_extension, gap_opening, replacement, temp, val1, val2;
@@ -847,7 +862,7 @@ static void nextAStabcolumn(AffinealignDPentry *Atabcolumn,
     Starttabcolumn[0].Istart.b = colindex;
   }
 
-  if (Atabcolumn[0].totalvalue > gt_max_get_value(max))
+  if (Atabcolumn[0].totalvalue > gt_maxcoordvalue_get_value(max))
     {
       if (Atabcolumn[0].totalvalue == Atabcolumn[0].Rvalue)
          start = Starttabcolumn[0].Rstart;
@@ -856,8 +871,8 @@ static void nextAStabcolumn(AffinealignDPentry *Atabcolumn,
       else if (Atabcolumn[0].totalvalue == Atabcolumn[0].Ivalue)
          start = Starttabcolumn[0].Istart;
 
-      gt_max_coord_update(max, Atabcolumn[0].totalvalue,
-                          start, 0, colindex);
+      gt_maxcoordvalue_coord_update(max, Atabcolumn[0].totalvalue,
+                                    start, 0, colindex);
     }
   for (rowindex = 1; rowindex <= ulen; rowindex++)
   {
@@ -911,7 +926,7 @@ static void nextAStabcolumn(AffinealignDPentry *Atabcolumn,
     }
 
     /*set new max*/
-    if (Atabcolumn[rowindex].totalvalue > gt_max_get_value(max))
+    if (Atabcolumn[rowindex].totalvalue > gt_maxcoordvalue_get_value(max))
     {
       if (Atabcolumn[rowindex].totalvalue == Atabcolumn[rowindex].Rvalue)
          start = Starttabcolumn[rowindex].Rstart;
@@ -920,10 +935,10 @@ static void nextAStabcolumn(AffinealignDPentry *Atabcolumn,
       else if (Atabcolumn[rowindex].totalvalue == Atabcolumn[rowindex].Ivalue)
          start = Starttabcolumn[rowindex].Istart;
 
-      gt_max_coord_update(max, Atabcolumn[rowindex].totalvalue,
-                          start, rowindex, colindex);
+      gt_maxcoordvalue_coord_update(max, Atabcolumn[rowindex].totalvalue,
+                                    start, rowindex, colindex);
     }
-    northwestAffinealignDPentry=westAffinealignDPentry;
+    northwestAffinealignDPentry = westAffinealignDPentry;
     Snw=Swe;
   }
 }
@@ -939,15 +954,15 @@ static GtMaxcoordvalue *evaluateallAStabcolumns(GtLinspaceManagement *space,
 {
   GtUword colindex;
   GtMaxcoordvalue *max;
-  AffinealignDPentry *Atabcolumn;
+  GtAffinealignDPentry *Atabcolumn;
   Starttabentry *Starttabcolumn;
 
-  Atabcolumn = gt_linspaceManagement_get_valueTabspace(space);
-  Starttabcolumn = gt_linspaceManagement_get_rTabspace(space);
+  Atabcolumn = gt_linspace_management_get_valueTabspace(space);
+  Starttabcolumn = gt_linspace_management_get_rTabspace(space);
 
   firstAStabcolumn(Atabcolumn, Starttabcolumn, scorehandler, ulen);
 
-  max = gt_linspaceManagement_get_maxspace(space);
+  max = gt_linspace_management_get_maxspace(space);
   for (colindex = 1UL; colindex <= vlen; colindex++)
   {
     nextAStabcolumn(Atabcolumn, Starttabcolumn, scorehandler, useq, ustart,
@@ -957,7 +972,7 @@ static GtMaxcoordvalue *evaluateallAStabcolumns(GtLinspaceManagement *space,
 }
 
 /* determining start and end of local alignment and call global function */
-GtWord gt_computeaffinelinearspace_local_generic(
+GtWord gt_linearalign_affinegapcost_compute_local_generic(
                                             GtLinspaceManagement *spacemanager,
                                             const GtScoreHandler *scorehandler,
                                             GtAlignment *align,
@@ -970,11 +985,11 @@ GtWord gt_computeaffinelinearspace_local_generic(
 {
   GtUword ulen_part, ustart_part, vlen_part, vstart_part;
   GtWord score;
-  AffinealignDPentry *Atabcolumn;
+  GtAffinealignDPentry *Atabcolumn;
   Starttabentry *Starttabcolumn;
   GtMaxcoordvalue *max;
 
-  gt_linspaceManagement_set_ulen(spacemanager, ulen);
+  gt_linspace_management_set_ulen(spacemanager, ulen);
   if (ulen == 0UL || vlen == 0UL)
   {
      /* empty alignment */
@@ -982,44 +997,43 @@ GtWord gt_computeaffinelinearspace_local_generic(
   }
   else if (vlen == 1UL)
   {
-    gt_linspaceManagement_check_local(spacemanager,
-                                    (ulen+1)*(vlen+1)-1, ulen,
-                                    sizeof (*Atabcolumn),
-                                    sizeof (Atabcolumn));
-    return affinealign_in_square_space_local_generic(spacemanager,scorehandler,
-                                                   align,
-                                                   useq, ustart, ulen,
-                                                   vseq, vstart, vlen
-                                                   );
+    gt_linspace_management_check_local(spacemanager,
+                                       (ulen+1)*(vlen+1)-1, ulen,
+                                       sizeof (*Atabcolumn),
+                                       sizeof (Atabcolumn));
+    return gt_affinealign_calculate_local_generic(spacemanager,scorehandler,
+                                                  align,
+                                                  useq, ustart, ulen,
+                                                  vseq, vstart, vlen);
   }
-  else if (gt_linspaceManagement_checksquare_local(spacemanager, ulen, vlen,
-                                                   sizeof (*Atabcolumn),
-                                                   sizeof (*Starttabcolumn)))
+  else if (gt_linspace_management_checksquare_local(spacemanager, ulen, vlen,
+                                                    sizeof (*Atabcolumn),
+                                                    sizeof (*Starttabcolumn)))
   {
     /* call alignment function for square space */
-    return affinealign_in_square_space_local_generic(spacemanager, scorehandler,
-                                                     align, useq, ustart, ulen,
-                                                     vseq, vstart, vlen);
+    return gt_affinealign_calculate_local_generic(spacemanager, scorehandler,
+                                                  align, useq, ustart, ulen,
+                                                  vseq, vstart, vlen);
   }
 
-  gt_linspaceManagement_check_local(spacemanager, ulen, vlen,
-                                    sizeof (*Atabcolumn),
-                                    sizeof (*Starttabcolumn));
+  gt_linspace_management_check_local(spacemanager, ulen, vlen,
+                                     sizeof (*Atabcolumn),
+                                     sizeof (*Starttabcolumn));
 
   max = evaluateallAStabcolumns(spacemanager, scorehandler,
                                 useq, ustart, ulen,
                                 vseq, vstart, vlen);
 
-  score = gt_max_get_value(max);
+  score = gt_maxcoordvalue_get_value(max);
 
-  if (gt_max_get_length_safe(max))
+  if (gt_maxcoordvalue_get_length_safe(max))
   {
     GtScoreHandler *costhandler = gt_scorehandler2costhandler(scorehandler);
 
-    ustart_part = ustart+(gt_max_get_start(max)).a;
-    vstart_part = vstart+(gt_max_get_start(max)).b;
-    ulen_part = gt_max_get_row_length(max);
-    vlen_part = gt_max_get_col_length(max);
+    ustart_part = ustart+(gt_maxcoordvalue_get_start(max)).a;
+    vstart_part = vstart+(gt_maxcoordvalue_get_start(max)).b;
+    ulen_part = gt_maxcoordvalue_get_row_length(max);
+    vlen_part = gt_maxcoordvalue_get_col_length(max);
 
     gt_alignment_set_seqs(align,useq + ustart_part,ulen_part,
                                 vseq + vstart_part,vlen_part);
@@ -1041,18 +1055,19 @@ GtWord gt_computeaffinelinearspace_local_generic(
 }
 
 /* local alignment with linear gapcosts in linear space with constant costs*/
-GtWord gt_computeaffinelinearspace_local(GtLinspaceManagement *spacemanager,
-                                         GtAlignment *align,
-                                         const GtUchar *useq,
-                                         GtUword ustart,
-                                         GtUword ulen,
-                                         const GtUchar *vseq,
-                                         GtUword vstart,
-                                         GtUword vlen,
-                                         GtWord matchscore,
-                                         GtWord mismatchscore,
-                                         GtWord gap_opening,
-                                         GtWord gap_extension)
+GtWord gt_linearalign_affinegapcost_compute_local(
+                                             GtLinspaceManagement *spacemanager,
+                                             GtAlignment *align,
+                                             const GtUchar *useq,
+                                             GtUword ustart,
+                                             GtUword ulen,
+                                             const GtUchar *vseq,
+                                             GtUword vstart,
+                                             GtUword vlen,
+                                             GtWord matchscore,
+                                             GtWord mismatchscore,
+                                             GtWord gap_opening,
+                                             GtWord gap_extension)
 {
   GtWord score;
 
@@ -1061,20 +1076,20 @@ GtWord gt_computeaffinelinearspace_local(GtLinspaceManagement *spacemanager,
                                                      gap_opening,
                                                      gap_extension);
 
-  score = gt_computeaffinelinearspace_local_generic(spacemanager, scorehandler,
-                                                    align,
-                                                    useq, ustart, ulen,
-                                                    vseq, vstart, vlen);
+  score = gt_linearalign_affinegapcost_compute_local_generic(spacemanager,
+                                                            scorehandler, align,
+                                                            useq, ustart, ulen,
+                                                            vseq, vstart, vlen);
   gt_scorehandler_delete(scorehandler);
   return score;
 }
 
 /*----------------------------checkfunctions--------------------------*/
-void gt_checkaffinelinearspace(GT_UNUSED bool forward,
-                               const GtUchar *useq,
-                               GtUword ulen,
-                               const GtUchar *vseq,
-                               GtUword vlen)
+void gt_linearalign_affinegapcost_check(GT_UNUSED bool forward,
+                                        const GtUchar *useq,
+                                        GtUword ulen,
+                                        const GtUchar *vseq,
+                                        GtUword vlen)
 {
   GtAlignment *align;
   GtUword affine_score1, affine_score2, affine_score3,
@@ -1099,12 +1114,12 @@ void gt_checkaffinelinearspace(GT_UNUSED bool forward,
                                      gap_opening, gap_extension);
   gt_scorehandler_plain(scorehandler);
   align = gt_alignment_new_with_seqs(useq, ulen, vseq, vlen);
-  spacemanager = gt_linspaceManagement_new();
+  spacemanager = gt_linspace_management_new();
 
   affine_score1 = gt_calc_affinealign_linear(spacemanager, scorehandler, align,
                                              useq, 0, ulen,
                                              vseq, 0, vlen);
-  gt_linspaceManagement_delete(spacemanager);
+  gt_linspace_management_delete(spacemanager);
   affine_score2 = gt_alignment_eval_with_affine_score(align,  true,matchcost,
                                                       mismatchcost, gap_opening,
                                                       gap_extension);
@@ -1134,11 +1149,11 @@ void gt_checkaffinelinearspace(GT_UNUSED bool forward,
   gt_alignment_delete(align);
 }
 
-void gt_checkaffinelinearspace_local(GT_UNUSED bool forward,
-                                     const GtUchar *useq,
-                                     GtUword ulen,
-                                     const GtUchar *vseq,
-                                     GtUword vlen)
+void gt_linearalign_affinegapcost_check_local(GT_UNUSED bool forward,
+                                              const GtUchar *useq,
+                                              GtUword ulen,
+                                              const GtUchar *vseq,
+                                              GtUword vlen)
 {
   GtAlignment *align;
   GtWord affine_score1, affine_score2, affine_score3, affine_score4,
@@ -1162,12 +1177,13 @@ void gt_checkaffinelinearspace_local(GT_UNUSED bool forward,
   scorehandler = gt_scorehandler_new(matchscore, mismatchscore,
                                      gap_opening, gap_extension);
   align = gt_alignment_new();
-  spacemanager = gt_linspaceManagement_new();
-  affine_score1 = gt_computeaffinelinearspace_local_generic(spacemanager,
+  spacemanager = gt_linspace_management_new();
+  affine_score1 = gt_linearalign_affinegapcost_compute_local_generic(
+                                                            spacemanager,
                                                             scorehandler, align,
                                                             useq, 0, ulen,
                                                             vseq,  0, vlen);
-  gt_linspaceManagement_delete(spacemanager);
+  gt_linspace_management_delete(spacemanager);
   gt_scorehandler_delete(scorehandler);
 
   affine_score2 = gt_alignment_eval_with_affine_score(align, true, matchscore,
@@ -1175,16 +1191,17 @@ void gt_checkaffinelinearspace_local(GT_UNUSED bool forward,
 
   if (affine_score1 != affine_score2)
   {
-    fprintf(stderr,"gt_calc_affinealign_linear_local = "GT_WD" != "GT_WD
+    fprintf(stderr,"gt_linearalign_affinegapcost_compute_local_generic ="
+            " "GT_WD"!= "GT_WD
             " = gt_alignment_eval_with_affine_score\n", affine_score1,
                                                         affine_score2);
     exit(GT_EXIT_PROGRAMMING_ERROR);
   }
   gt_alignment_reset(align);
-  affine_score3 = affinealign_in_square_space_local(NULL, align, useq, 0,
-                                                    ulen, vseq, 0, vlen,
-                                                    matchscore, mismatchscore,
-                                                    gap_opening, gap_extension);
+  affine_score3 = gt_affinealign_calculate_local(NULL, align, useq, 0,
+                                                 ulen, vseq, 0, vlen,
+                                                 matchscore, mismatchscore,
+                                                 gap_opening, gap_extension);
 
   if (affine_score1 != affine_score3)
   {
diff --git a/src/extended/linearalign_affinegapcost.h b/src/extended/linearalign_affinegapcost.h
index e8355ec..1ecc340 100644
--- a/src/extended/linearalign_affinegapcost.h
+++ b/src/extended/linearalign_affinegapcost.h
@@ -27,24 +27,12 @@
 
 typedef struct {
   GtUword idx;
-  AffineAlignEdge edge;
-} Rnode;
+  GtAffineAlignEdge edge;
+} GtAffineAlignRnode;
 
 typedef struct {
-  Rnode val_R, val_D, val_I;
-} Rtabentry;
-
-void gt_checkaffinelinearspace(GT_UNUSED bool forward,
-                               const GtUchar *useq,
-                               GtUword ulen,
-                               const GtUchar *vseq,
-                               GtUword vlen);
-
-void gt_checkaffinelinearspace_local(GT_UNUSED bool forward,
-                                     const GtUchar *useq,
-                                     GtUword ulen,
-                                     const GtUchar *vseq,
-                                     GtUword vlen);
+  GtAffineAlignRnode val_R, val_D, val_I;
+} GtAffineAlignRtabentry;
 
 /* Computes a global alignment with affine gapcosts in linear space. Use of this
    function requires an initialised <spacemanager>, the target alignment <align>
@@ -52,8 +40,10 @@ void gt_checkaffinelinearspace_local(GT_UNUSED bool forward,
    their start positions <ustart> and <vstart> and lengths <ulen> and <vlen>.
    The cost values are specified by an initialised <scorehandler>. Returns
    affine cost value of calculated global alignment. */
-GtUword gt_computeaffinelinearspace_generic(GtLinspaceManagement *spacemanager,
-                                            const GtScoreHandler *scorehandler,
+GtUword         gt_linearalign_affinegapcost_compute_generic(
+                                            GtLinspaceManagement *spacemanager,
+                                            const GtScoreHandler
+                                            *scorehandler,
                                             GtAlignment *align,
                                             const GtUchar *useq,
                                             GtUword ustart,
@@ -69,18 +59,19 @@ GtUword gt_computeaffinelinearspace_generic(GtLinspaceManagement *spacemanager,
    <vstart> and lengths <ulen> and <vlen>. The cost values are specified by
    <matchcost>, <mismatchcost>,<gap_opening> and <gap_extension>. Returns
    affine cost value of calculated global alignment. */
-GtUword gt_computeaffinelinearspace(GtLinspaceManagement *spacemanager,
-                                    GtAlignment *align,
-                                    const GtUchar *useq,
-                                    GtUword ustart,
-                                    GtUword ulen,
-                                    const GtUchar *vseq,
-                                    GtUword vstart,
-                                    GtUword vlen,
-                                    GtUword matchcost,
-                                    GtUword mismatchcost,
-                                    GtUword gap_opening,
-                                    GtUword gap_extension);
+GtUword         gt_linearalign_affinegapcost_compute(
+                                            GtLinspaceManagement *spacemanager,
+                                            GtAlignment *align,
+                                            const GtUchar *useq,
+                                            GtUword ustart,
+                                            GtUword ulen,
+                                            const GtUchar *vseq,
+                                            GtUword vstart,
+                                            GtUword vlen,
+                                            GtUword matchcost,
+                                            GtUword mismatchcost,
+                                            GtUword gap_opening,
+                                            GtUword gap_extension);
 
 /* Computes a local alignment with affine gapcosts in linear space. Use of this
    function requires an initialised <spacemanager>, the target alignment <align>
@@ -88,17 +79,17 @@ GtUword gt_computeaffinelinearspace(GtLinspaceManagement *spacemanager,
    their start positions <ustart> and <vstart> and lengths <ulen> and <vlen>.
    The score values are specified by an initialised <scorehandler>. Returns
    affine score value of calculated local alignment. */
-GtWord gt_computeaffinelinearspace_local_generic(GtLinspaceManagement
-                                                 *spacemanager,
-                                                 const GtScoreHandler
-                                                 *scorehandler,
-                                                 GtAlignment *align,
-                                                 const GtUchar *useq,
-                                                 GtUword ustart,
-                                                 GtUword ulen,
-                                                 const GtUchar *vseq,
-                                                 GtUword vstart,
-                                                 GtUword vlen);
+GtWord          gt_linearalign_affinegapcost_compute_local_generic(
+                                            GtLinspaceManagement *spacemanager,
+                                            const GtScoreHandler
+                                            *scorehandler,
+                                            GtAlignment *align,
+                                            const GtUchar *useq,
+                                            GtUword ustart,
+                                            GtUword ulen,
+                                            const GtUchar *vseq,
+                                            GtUword vstart,
+                                            GtUword vlen);
 
 /* Computes a local alignment with affine gapcosts in linear space
    and constant score values. Use of this function requires an initialised
@@ -107,25 +98,41 @@ GtWord gt_computeaffinelinearspace_local_generic(GtLinspaceManagement
    <vstart> and lengths <ulen> and <vlen>. The score values are specified by
    <matchscore>, <mismatchscore>, <gap_opening> and <gap_extension>. Returns
    affine score value of calculated local alignment. */
-GtWord gt_computeaffinelinearspace_local(GtLinspaceManagement *spacemanager,
-                                         GtAlignment *align,
-                                         const GtUchar *useq,
-                                         GtUword ustart,
-                                         GtUword ulen,
-                                         const GtUchar *vseq,
-                                         GtUword vstart,
-                                         GtUword vlen,
-                                         GtWord matchscore,
-                                         GtWord mismatchscore,
-                                         GtWord gap_opening,
-                                         GtWord gap_extension);
+GtWord          gt_linearalign_affinegapcost_compute_local(
+                                            GtLinspaceManagement *spacemanager,
+                                            GtAlignment *align,
+                                            const GtUchar *useq,
+                                            GtUword ustart,
+                                            GtUword ulen,
+                                            const GtUchar *vseq,
+                                            GtUword vstart,
+                                            GtUword vlen,
+                                            GtWord matchscore,
+                                            GtWord mismatchscore,
+                                            GtWord gap_opening,
+                                            GtWord gap_extension);
 
-/* Returns an object of class <AffineAlignEdge>, whichs specify the R,D,I type
+/* Returns an object of class <GtAffineAlignEdge>, whichs specify the R,D,I type
    for the minimal value in <entry> dependent on next <edge> and <gap_opening>
    cost */
-AffineAlignEdge minAdditionalCosts(const AffinealignDPentry *entry,
-                                   const AffineAlignEdge edge,
-                                   GtUword gap_opening);
+GtAffineAlignEdge gt_linearalign_affinegapcost_minAdditionalCosts(
+                                              const GtAffinealignDPentry *entry,
+                                              const GtAffineAlignEdge edge,
+                                              GtUword gap_opening);
+
+GtAffineAlignEdge gt_linearalign_affinegapcost_set_edge(GtWord Rdist,
+                                                        GtWord Ddist,
+                                                        GtWord Idist);
+
+void            gt_linearalign_affinegapcost_check(GT_UNUSED bool forward,
+                                                   const GtUchar *useq,
+                                                   GtUword ulen,
+                                                   const GtUchar *vseq,
+                                                   GtUword vlen);
 
-AffineAlignEdge set_edge(GtWord Rdist, GtWord Ddist, GtWord Idist);
+void            gt_linearalign_affinegapcost_check_local(GT_UNUSED bool forward,
+                                                         const GtUchar *useq,
+                                                         GtUword ulen,
+                                                         const GtUchar *vseq,
+                                                         GtUword vlen);
 #endif
diff --git a/src/extended/linspace_management.c b/src/extended/linspace_management.c
index 1bd52cf..6929542 100644
--- a/src/extended/linspace_management.c
+++ b/src/extended/linspace_management.c
@@ -34,7 +34,7 @@ struct GtLinspaceManagement{
   GtMaxcoordvalue *maxscoordvaluespace;
 };
 
-GtLinspaceManagement* gt_linspaceManagement_new()
+GtLinspaceManagement* gt_linspace_management_new()
 {
   GtLinspaceManagement *spacemanager;
   spacemanager = gt_malloc(sizeof(*spacemanager));
@@ -51,7 +51,7 @@ GtLinspaceManagement* gt_linspaceManagement_new()
   return spacemanager;
 }
 
-void gt_linspaceManagement_delete(GtLinspaceManagement *spacemanager)
+void gt_linspace_management_delete(GtLinspaceManagement *spacemanager)
 {
   if (spacemanager != NULL)
   {
@@ -59,13 +59,13 @@ void gt_linspaceManagement_delete(GtLinspaceManagement *spacemanager)
     gt_free(spacemanager->rTabspace);
     if (spacemanager->crosspointTabspace != NULL)
       gt_free(spacemanager->crosspointTabspace);
-    gt_max_delete(spacemanager->maxscoordvaluespace);
+    gt_maxcoordvalue_delete(spacemanager->maxscoordvaluespace);
     gt_free(spacemanager);
   }
 }
 
 /* space in bytes */
-size_t gt_linspaceManagement_get_spacepeak(const GtLinspaceManagement
+size_t gt_linspace_management_get_spacepeak(const GtLinspaceManagement
                                                                   *spacemanager)
 {
   gt_assert(spacemanager != NULL);
@@ -73,17 +73,17 @@ size_t gt_linspaceManagement_get_spacepeak(const GtLinspaceManagement
 }
 
 /* resize space */
-static void gt_linspaceManagement_check_generic(GtLinspaceManagement
-                                                *spacemanager,
-                                                GtUword ulen, GtUword vlen,
-                                                size_t valuesize,
-                                                size_t rtabsize,
-                                                size_t crosspointsize,
-                                                bool local)
+static void gt_linspace_management_check_generic(GtLinspaceManagement
+                                                 *spacemanager,
+                                                 GtUword ulen, GtUword vlen,
+                                                 size_t valuesize,
+                                                 size_t rtabsize,
+                                                 size_t crosspointsize,
+                                                 bool local)
 {
   size_t space = 0, localspace = 0; /* space in bytes */
   /*if (spacemanager == NULL)
-    spacemanager = gt_new_linspaceManagement();*/
+    spacemanager = gt_new_linspace_management();*/
 
   gt_assert(spacemanager != NULL);
 
@@ -109,9 +109,9 @@ static void gt_linspaceManagement_check_generic(GtLinspaceManagement
   if (local)
   {
     if (spacemanager->maxscoordvaluespace == NULL)
-      spacemanager->maxscoordvaluespace = gt_max_new();
+      spacemanager->maxscoordvaluespace = gt_maxcoordvalue_new();
     else
-      gt_max_reset(spacemanager->maxscoordvaluespace);
+      gt_maxcoordvalue_reset(spacemanager->maxscoordvaluespace);
   }
   if (spacemanager->maxscoordvaluespace != NULL)
     localspace = 2 * sizeof (GtUwordPair) + sizeof (GtWord);
@@ -125,13 +125,13 @@ static void gt_linspaceManagement_check_generic(GtLinspaceManagement
     spacemanager->spacepeak = space;
 }
 
-void gt_linspaceManagement_check(GtLinspaceManagement *spacemanager,
-                                 GtUword ulen, GtUword vlen,
-                                 size_t valuesize,
-                                 size_t rtabsize,
-                                 size_t crosspointsize)
+void gt_linspace_management_check(GtLinspaceManagement *spacemanager,
+                                  GtUword ulen, GtUword vlen,
+                                  size_t valuesize,
+                                  size_t rtabsize,
+                                  size_t crosspointsize)
 {
-  gt_linspaceManagement_check_generic(spacemanager,
+  gt_linspace_management_check_generic(spacemanager,
                               ulen, vlen,
                               valuesize,
                               rtabsize,
@@ -140,15 +140,15 @@ void gt_linspaceManagement_check(GtLinspaceManagement *spacemanager,
   spacemanager->ulen = ulen;
 }
 
-void  gt_linspaceManagement_check_local(GtLinspaceManagement *spacemanager,
-                                        GtUword ulen, GtUword vlen,
-                                        size_t valuesize, size_t rstabsize)
+void  gt_linspace_management_check_local(GtLinspaceManagement *spacemanager,
+                                         GtUword ulen, GtUword vlen,
+                                         size_t valuesize, size_t rstabsize)
 {
-  gt_linspaceManagement_check_generic(spacemanager,
-                              ulen, vlen,
-                              valuesize,
-                              rstabsize,
-                              0, true);
+  gt_linspace_management_check_generic(spacemanager,
+                                       ulen, vlen,
+                                       valuesize,
+                                       rstabsize,
+                                       0, true);
   spacemanager->ulen = ulen;
 }
 
@@ -164,36 +164,37 @@ static bool checksquare(GtLinspaceManagement *spacemanager,
   if ((ulen+1)*(vlen+1)*valuesize <= spacemanager->valueTabsize)
   {
     if (local)
-      gt_max_reset(spacemanager->maxscoordvaluespace);
+      gt_maxcoordvalue_reset(spacemanager->maxscoordvaluespace);
     return true;
   }
   else if ((ulen+1)*(vlen+1) <= (spacemanager->ulen+1)*TSfactor)
   {
     if (!local)
     {
-      gt_linspaceManagement_check_generic(spacemanager,(ulen+1)*(vlen+1)-1,
-                                          vlen,valuesize,rsize,0,false);
+      gt_linspace_management_check_generic(spacemanager,(ulen+1)*(vlen+1)-1,
+                                           vlen,valuesize,rsize,0,false);
     }
     else
     {
-       gt_linspaceManagement_check_generic(spacemanager,(ulen+1)*(vlen+1)-1,
-                                           vlen,valuesize,rsize,0,true);
+       gt_linspace_management_check_generic(spacemanager,(ulen+1)*(vlen+1)-1,
+                                            vlen,valuesize,rsize,0,true);
     }
     return true;
   }
   return false;
 }
 
-bool gt_linspaceManagement_checksquare(GtLinspaceManagement *spacemanager,
-                                       GtUword ulen,
-                                       GtUword vlen,
-                                       size_t valuesize,
-                                       size_t rsize)
+bool gt_linspace_management_checksquare(GtLinspaceManagement *spacemanager,
+                                        GtUword ulen,
+                                        GtUword vlen,
+                                        size_t valuesize,
+                                        size_t rsize)
 {
   return checksquare(spacemanager, ulen, vlen, valuesize, rsize,false);
 }
 
-bool gt_linspaceManagement_checksquare_local(GtLinspaceManagement *spacemanager,
+bool gt_linspace_management_checksquare_local(
+                                             GtLinspaceManagement *spacemanager,
                                              GtUword ulen,
                                              GtUword vlen,
                                              size_t valuesize,
@@ -202,14 +203,14 @@ bool gt_linspaceManagement_checksquare_local(GtLinspaceManagement *spacemanager,
   return checksquare(spacemanager, ulen, vlen, valuesize, rsize,true);
 }
 
-void gt_linspaceManagement_set_ulen(GtLinspaceManagement *spacemanager,
-                                    GtUword ulen)
+void gt_linspace_management_set_ulen(GtLinspaceManagement *spacemanager,
+                                     GtUword ulen)
 {
   gt_assert(spacemanager != NULL);
   spacemanager->ulen = ulen;
 }
 
-void *gt_linspaceManagement_get_valueTabspace(const GtLinspaceManagement
+void *gt_linspace_management_get_valueTabspace(const GtLinspaceManagement
                                                                   *spacemanager)
 {
   if (spacemanager != NULL)
@@ -217,7 +218,7 @@ void *gt_linspaceManagement_get_valueTabspace(const GtLinspaceManagement
   return NULL;
 }
 
-void *gt_linspaceManagement_get_rTabspace(const GtLinspaceManagement
+void *gt_linspace_management_get_rTabspace(const GtLinspaceManagement
                                                                   *spacemanager)
 {
   if (spacemanager != NULL)
@@ -225,7 +226,7 @@ void *gt_linspaceManagement_get_rTabspace(const GtLinspaceManagement
   return NULL;
 }
 
-void *gt_linspaceManagement_get_crosspointTabspace(const GtLinspaceManagement
+void *gt_linspace_management_get_crosspointTabspace(const GtLinspaceManagement
                                                                   *spacemanager)
 {
   if (spacemanager != NULL)
@@ -233,7 +234,7 @@ void *gt_linspaceManagement_get_crosspointTabspace(const GtLinspaceManagement
   return NULL;
 }
 
-size_t gt_linspaceManagement_get_valueTabsize(const GtLinspaceManagement
+size_t gt_linspace_management_get_valueTabsize(const GtLinspaceManagement
                                                                   *spacemanager)
 {
   gt_assert(spacemanager != NULL);
@@ -241,7 +242,7 @@ size_t gt_linspaceManagement_get_valueTabsize(const GtLinspaceManagement
 }
 
 /* space for GtMaxcoordvalue struct */
-void *gt_linspaceManagement_get_maxspace(const GtLinspaceManagement
+void *gt_linspace_management_get_maxspace(const GtLinspaceManagement
                                                                  *spacemanager)
 {
   if (spacemanager != NULL)
@@ -255,7 +256,7 @@ static inline bool check(const GtLinspaceManagement *spacemanager,
   return ((ulen+1)*(vlen+1)*sizeof(GtUword) <= spacemanager->valueTabsize);
 }
 
-GtUword **gt_linspaceManagement_change_to_square(GtLinspaceManagement
+GtUword **gt_linspace_management_change_to_square(GtLinspaceManagement
                                                  *spacemanager,
                                                  GtUword ulen, GtUword vlen)
 {
@@ -263,8 +264,8 @@ GtUword **gt_linspaceManagement_change_to_square(GtLinspaceManagement
   GtUword idx;
   gt_assert(check(spacemanager, ulen, vlen));
 
-  E = gt_linspaceManagement_get_rTabspace(spacemanager);
-  *E = gt_linspaceManagement_get_valueTabspace(spacemanager);
+  E = gt_linspace_management_get_rTabspace(spacemanager);
+  *E = gt_linspace_management_get_valueTabspace(spacemanager);
 
   for (idx=1;idx<ulen+1;idx++)
     E[idx]=E[idx-1]+vlen+1;
@@ -272,7 +273,7 @@ GtUword **gt_linspaceManagement_change_to_square(GtLinspaceManagement
   return E;
 }
 
-void gt_linspaceManagement_set_TSfactor(GtLinspaceManagement *spacemanager,
+void gt_linspace_management_set_TSfactor(GtLinspaceManagement *spacemanager,
                                         GtUword timesquarefactor)
 {
   gt_assert(spacemanager != NULL);
diff --git a/src/extended/linspace_management.h b/src/extended/linspace_management.h
index 865bc1e..9926f66 100644
--- a/src/extended/linspace_management.h
+++ b/src/extended/linspace_management.h
@@ -27,33 +27,34 @@
 typedef struct GtLinspaceManagement GtLinspaceManagement;
 
 /* Return a <GtLinspaceManagement> object. */
-GtLinspaceManagement* gt_linspaceManagement_new();
+GtLinspaceManagement* gt_linspace_management_new();
 
 /* Delete the given <spacemenager>. */
-void gt_linspaceManagement_delete(GtLinspaceManagement *spacemanager);
+void          gt_linspace_management_delete(GtLinspaceManagement *spacemanager);
 /* Return bytes of allocated space for linear space algorithms of the given
    <spacemanager>*/
-size_t gt_linspaceManagement_get_spacepeak(const GtLinspaceManagement
+size_t        gt_linspace_management_get_spacepeak(const GtLinspaceManagement
                                                                  *spacemanager);
 /* Check if enough space is allocated for the three tabs, whichs are stored in
    the given <spacemanager> for global alignments and resize if necessary. The
    required space depends on the size of one entry, given by <valuesize>,
    <rtabsize>, <crosspointsize> and the count of values given by sequence
    lengths <ulen> and <vlen>. */
-void gt_linspaceManagement_check(GtLinspaceManagement *spacemanager,
-                                 GtUword ulen, GtUword vlen,
-                                 size_t valuesize,
-                                 size_t rtabsize,
-                                 size_t crosspointsize);
+void          gt_linspace_management_check(GtLinspaceManagement *spacemanager,
+                                           GtUword ulen, GtUword vlen,
+                                           size_t valuesize,
+                                           size_t rtabsize,
+                                           size_t crosspointsize);
 /* Check if enough space is allocated for the two tabs, which are stored in
    the given <spacemanager> for local alignments and resize if necessary. The
    required space depends on of the size of one entry, given by <valuesize>,
    <rtabsize> and the count of values given by sequence lengths <ulen>
    and <vlen>. */
-void  gt_linspaceManagement_check_local(GtLinspaceManagement *spacemanager,
-                                        GtUword ulen, GtUword vlen,
-                                        size_t valuesize,
-                                        size_t rstabsize);
+void          gt_linspace_management_check_local(GtLinspaceManagement
+                                                 *spacemanager,
+                                                 GtUword ulen, GtUword vlen,
+                                                 size_t valuesize,
+                                                 size_t rstabsize);
 
 /* Check if enough space to use square space functions in global case is
    allocated in the given <spacemanager>. To use this function <valuesize>,
@@ -61,47 +62,55 @@ void  gt_linspaceManagement_check_local(GtLinspaceManagement *spacemanager,
    timesquarefactor is set, the function checks also the relation with this
    factor and resize the space of <spacemanager> if is it necessary.
    */
-bool gt_linspaceManagement_checksquare(GtLinspaceManagement *spacemanager,
-                                       GtUword ulen, GtUword vlen,
-                                       size_t valuesize,
-                                       size_t rsize);
+bool          gt_linspace_management_checksquare(GtLinspaceManagement
+                                                 *spacemanager,
+                                                 GtUword ulen, GtUword vlen,
+                                                 size_t valuesize,
+                                                 size_t rsize);
 
 /* Check if enough space to use square space functions in local case is
    allocated in the given <spacemanager>. To use this function <valuesize>,
    <rsize> and the sequence lengths <ulen> and <vlen> are required. If a
    timesquarefactor is set, the function checks also the relation with this
    factor and resize the space of <spacemanager> if is it necessary. */
-bool gt_linspaceManagement_checksquare_local(GtLinspaceManagement *spacemanager,
-                                             GtUword ulen, GtUword vlen,
-                                             size_t valuesize,
-                                             size_t rsize);
+bool          gt_linspace_management_checksquare_local(GtLinspaceManagement
+                                                       *spacemanager,
+                                                       GtUword ulen,
+                                                       GtUword vlen,
+                                                       size_t valuesize,
+                                                       size_t rsize);
 /* Set sequence length <ulen> for the given <spacemanager>. */
-void gt_linspaceManagement_set_ulen(GtLinspaceManagement *spacemanager,
-                                    GtUword ulen);
+void          gt_linspace_management_set_ulen(GtLinspaceManagement
+                                              *spacemanager,
+                                              GtUword ulen);
 /* Return pointer to valueTab space of the given <spacemanager>. */
-void* gt_linspaceManagement_get_valueTabspace(const GtLinspaceManagement
-                                                                 *spacemanager);
+void*         gt_linspace_management_get_valueTabspace(
+                                                      const GtLinspaceManagement
+                                                      *spacemanager);
 /* Return pointer to rTab space of the given <spacemanager>. */
-void* gt_linspaceManagement_get_rTabspace(const GtLinspaceManagement
-                                                                 *spacemanager);
+void*         gt_linspace_management_get_rTabspace(const GtLinspaceManagement
+                                                   *spacemanager);
 /* Return pointer to crosspointTab space of the given <spacemanager>. */
-void* gt_linspaceManagement_get_crosspointTabspace(const GtLinspaceManagement
-                                                                 *spacemanager);
+void*         gt_linspace_management_get_crosspointTabspace(
+                                                      const GtLinspaceManagement
+                                                      *spacemanager);
 /* Return pointer to Gtmaxcoordvalue space of the given <spacemanager>. */
-void* gt_linspaceManagement_get_maxspace(const GtLinspaceManagement
-                                                                 *spacemanager);
+void*         gt_linspace_management_get_maxspace(const GtLinspaceManagement
+                                                  *spacemanager);
 
 /* Change allocated linear space of the of given <spacemanager> in 2dim matrix
    of size (<ulen>+1)*(<vlen>+1) and return pointer to these space. */
-GtUword** gt_linspaceManagement_change_to_square(GtLinspaceManagement
-                                                 *spacemanager,
-                                                 GtUword ulen, GtUword vlen);
+GtUword**     gt_linspace_management_change_to_square(GtLinspaceManagement
+                                                      *spacemanager,
+                                                      GtUword ulen,
+                                                      GtUword vlen);
 /* Return size of valueTab space of the given <spacemanager>. */
-size_t gt_linspaceManagement_get_valueTabsize(const GtLinspaceManagement
-                                                                 *spacemanager);
+size_t        gt_linspace_management_get_valueTabsize(const GtLinspaceManagement
+                                                      *spacemanager);
 /* Set <timesquarefactor> for the given <spacemanager>. */
-void gt_linspaceManagement_set_TSfactor(GtLinspaceManagement *spacemanager,
-                                        GtUword timesquarefactor);
+void          gt_linspace_management_set_TSfactor(GtLinspaceManagement
+                                                  *spacemanager,
+                                                  GtUword timesquarefactor);
 
 #define add_safe(val1, val2, exception) (((val1) != (exception))\
                                            ? (val1) + (val2)\
diff --git a/src/extended/maxcoordvalue.c b/src/extended/maxcoordvalue.c
index beccd3c..8af6f3d 100644
--- a/src/extended/maxcoordvalue.c
+++ b/src/extended/maxcoordvalue.c
@@ -1,5 +1,5 @@
 /*
-  Copyright (c) 2015 Annika <annika.seidel at studium.uni-hamburg.de>
+  Copyright (c) 2015 Annika Seidel <annika.seidel at studium.uni-hamburg.de>
   Copyright (c) 2015 Center for Bioinformatics, University of Hamburg
 
   Permission to use, copy, modify, and distribute this software for any
@@ -26,7 +26,7 @@ struct GtMaxcoordvalue{
     GtUwordPair end;
 };
 
-GtMaxcoordvalue* gt_max_new(void)
+GtMaxcoordvalue* gt_maxcoordvalue_new(void)
 {
   GtMaxcoordvalue *max;
   max = gt_calloc((size_t) 1, sizeof (GtMaxcoordvalue));
@@ -40,119 +40,122 @@ GtMaxcoordvalue* gt_max_new(void)
   return max;
 }
 
-void gt_max_delete(GtMaxcoordvalue *max)
+void gt_maxcoordvalue_delete(GtMaxcoordvalue *max)
 {
   if (max != NULL)
     gt_free(max);
 }
 
-static void gt_max_set_value(GtMaxcoordvalue *max, const GtWord value)
+static void gt_maxcoordvalue_set_value(GtMaxcoordvalue *max, const GtWord value)
 {
   gt_assert(max != NULL);
   max->value=value;
 }
 
-GtWord gt_max_get_value(const GtMaxcoordvalue *max)
+GtWord gt_maxcoordvalue_get_value(const GtMaxcoordvalue *max)
 {
   gt_assert(max != NULL);
   return(max->value);
 }
 
-void gt_max_set_start(GtMaxcoordvalue *max,
-                      GtUword a, GtUword b)
+void gt_maxcoordvalue_set_start(GtMaxcoordvalue *max,
+                                GtUword a, GtUword b)
 {
   gt_assert(max != NULL);
   max->start.a = a;
   max->start.b = b ;
 }
 
-static void gt_max_set_start_with_pair(GtMaxcoordvalue *max,
-                                       const GtUwordPair start )
+static void gt_maxcoordvalue_set_start_with_pair(GtMaxcoordvalue *max,
+                                                 const GtUwordPair start )
 {
   gt_assert(max != NULL);
   max->start=start;
 }
 
-GtUwordPair gt_max_get_start(const GtMaxcoordvalue *max)
+GtUwordPair gt_maxcoordvalue_get_start(const GtMaxcoordvalue *max)
 {
   gt_assert(max != NULL);
   return(max->start);
 }
 
-void gt_max_set_end_with_pair(GtMaxcoordvalue *max, const  GtUwordPair end)
+void gt_maxcoordvalue_set_end_with_pair(GtMaxcoordvalue *max,
+                                        const GtUwordPair end)
 {
   gt_assert(max != NULL);
   max->end = end;
 }
 
-static void gt_max_set_end(GtMaxcoordvalue *max,
-                           GtUword a, GtUword b)
+static void gt_maxcoordvalue_set_end(GtMaxcoordvalue *max,
+                                     GtUword a, GtUword b)
 {
   gt_assert(max != NULL);
   max->end.a = a;
   max->end.b = b ;
 }
 
-GtUwordPair gt_max_get_end(const GtMaxcoordvalue *max)
+GtUwordPair gt_maxcoordvalue_get_end(const GtMaxcoordvalue *max)
 {
   gt_assert(max != NULL);
   return(max->end);
 }
 
 /*use this in linear space cases*/
-void gt_max_coord_update(GtMaxcoordvalue *max,
-                         GtWord value,
-                         GtUwordPair start,
-                         GtUword enda, GtUword endb)
+void gt_maxcoordvalue_coord_update(GtMaxcoordvalue *max,
+                                   GtWord value,
+                                   GtUwordPair start,
+                                   GtUword enda, GtUword endb)
 {
   gt_assert(max != NULL);
 
-  gt_max_set_value(max, value);
-  gt_max_set_start_with_pair(max, start);
-  gt_max_set_end(max, enda, endb);
+  gt_maxcoordvalue_set_value(max, value);
+  gt_maxcoordvalue_set_start_with_pair(max, start);
+  gt_maxcoordvalue_set_end(max, enda, endb);
 }
 
 /*use this in square space cases*/
-void gt_max_coord_update_without_start (GtMaxcoordvalue *max, GtWord value,
-                                        GtUword enda, GtUword endb)
+void gt_maxcoordvalue_coord_update_without_start (GtMaxcoordvalue *max,
+                                                  GtWord value,
+                                                  GtUword enda,
+                                                  GtUword endb)
 {
   gt_assert(max != NULL);
 
-  gt_max_set_value(max, value);
-  gt_max_set_end(max, enda, endb);
+  gt_maxcoordvalue_set_value(max, value);
+  gt_maxcoordvalue_set_end(max, enda, endb);
 }
 
-GtUword gt_max_get_row_length(const GtMaxcoordvalue *max)
+GtUword gt_maxcoordvalue_get_row_length(const GtMaxcoordvalue *max)
 {
   gt_assert(max != NULL);
 
-  GtUword end = (gt_max_get_end(max)).a;
-  GtUword start = (gt_max_get_start(max)).a;
+  GtUword end = (gt_maxcoordvalue_get_end(max)).a;
+  GtUword start = (gt_maxcoordvalue_get_start(max)).a;
 
   gt_assert(end >= start);
   return end-start;
 }
 
-GtUword gt_max_get_col_length(const GtMaxcoordvalue *max)
+GtUword gt_maxcoordvalue_get_col_length(const GtMaxcoordvalue *max)
 {
   gt_assert(max != NULL);
 
-  GtUword end = (gt_max_get_end(max)).b;
-  GtUword start = (gt_max_get_start(max)).b;
+  GtUword end = (gt_maxcoordvalue_get_end(max)).b;
+  GtUword start = (gt_maxcoordvalue_get_start(max)).b;
 
   gt_assert(end >= start);
   return end-start;
 }
 
-bool gt_max_get_length_safe(const GtMaxcoordvalue *max)
+bool gt_maxcoordvalue_get_length_safe(const GtMaxcoordvalue *max)
 {
-  if (gt_max_get_end(max).a == gt_max_get_start(max).a &&
-      gt_max_get_end(max).b == gt_max_get_start(max).b  )
+  if (gt_maxcoordvalue_get_end(max).a == gt_maxcoordvalue_get_start(max).a &&
+      gt_maxcoordvalue_get_end(max).b == gt_maxcoordvalue_get_start(max).b  )
     return false;
   return true;
 }
 
-void gt_max_reset(GtMaxcoordvalue *max)
+void gt_maxcoordvalue_reset(GtMaxcoordvalue *max)
 {
   gt_assert(max != NULL);
 
diff --git a/src/extended/maxcoordvalue.h b/src/extended/maxcoordvalue.h
index a35a8d0..5a89077 100644
--- a/src/extended/maxcoordvalue.h
+++ b/src/extended/maxcoordvalue.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (c) 2015 Annika <annika.seidel at studium.uni-hamburg.de>
+  Copyright (c) 2015 Annika Seidel <annika.seidel at studium.uni-hamburg.de>
   Copyright (c) 2015 Center for Bioinformatics, University of Hamburg
 
   Permission to use, copy, modify, and distribute this software for any
@@ -24,38 +24,46 @@
    of this value in DP-matrix. */
 typedef struct GtMaxcoordvalue GtMaxcoordvalue;
 /* Return a <GtMaxcoordvalue> object. */
-GtMaxcoordvalue* gt_max_new(void);
+GtMaxcoordvalue* gt_maxcoordvalue_new(void);
 /* Delete the given <max> object. */
-void gt_max_delete(GtMaxcoordvalue *max);
+void             gt_maxcoordvalue_delete(GtMaxcoordvalue *max);
 /* Return the stored maximal value of the given <max>. */
-GtWord gt_max_get_value(const GtMaxcoordvalue *max);
+GtWord           gt_maxcoordvalue_get_value(const GtMaxcoordvalue *max);
 /* Set start coordinates <starta> and <startb> for the given <max>. */
-void gt_max_set_start(GtMaxcoordvalue *max, GtUword starta, GtUword startb);
+void             gt_maxcoordvalue_set_start(GtMaxcoordvalue *max,
+                                            GtUword starta,
+                                            GtUword startb);
 /* Return the start coordinates for the given <max>. */
-GtUwordPair gt_max_get_start(const GtMaxcoordvalue *max);
+GtUwordPair      gt_maxcoordvalue_get_start(const GtMaxcoordvalue *max);
 /* Set end coordinates <end> for the given <max>. */
-void gt_max_set_end_with_pair(GtMaxcoordvalue *max, GtUwordPair end);
+void             gt_maxcoordvalue_set_end_with_pair(GtMaxcoordvalue *max,
+                                                    GtUwordPair end);
 /* Return the end coordinates for the given <max>. */
-GtUwordPair gt_max_get_end(const GtMaxcoordvalue *max);
+GtUwordPair      gt_maxcoordvalue_get_end(const GtMaxcoordvalue *max);
 /* Set a new maximum <value> and update coordinates for the given <max> by
    calling set-functions for start coordinates <start> and end coordinates
    <enda> and <endb>. */
-void gt_max_coord_update(GtMaxcoordvalue *max, GtWord value,
-                         GtUwordPair start,
-                         GtUword enda, GtUword endb);
+void             gt_maxcoordvalue_coord_update(GtMaxcoordvalue *max,
+                                               GtWord value,
+                                               GtUwordPair start,
+                                               GtUword enda,
+                                               GtUword endb);
 /* Set a new maximum <value> and update coordinates for the given <max> by
    calling set-functions for end coordinates <enda> and <endb>. */
-void gt_max_coord_update_without_start (GtMaxcoordvalue *max, GtWord value,
-                                        GtUword enda, GtUword endb);
+void             gt_maxcoordvalue_coord_update_without_start(
+                                                           GtMaxcoordvalue *max,
+                                                           GtWord value,
+                                                           GtUword enda,
+                                                           GtUword endb);
 /* Return the difference between row indices of start and end coordinates of the
    given <max>. */
-GtUword gt_max_get_row_length(const GtMaxcoordvalue *max);
+GtUword          gt_maxcoordvalue_get_row_length(const GtMaxcoordvalue *max);
 /* Return the difference between column indices of start and end coordinates of
    the given <max>. */
-GtUword gt_max_get_col_length(const GtMaxcoordvalue *max);
+GtUword          gt_maxcoordvalue_get_col_length(const GtMaxcoordvalue *max);
 /* Check coordinate values of the given <max>. Return false if start coordinates
  * are equal to end coordinates, otherwise false.*/
-bool gt_max_get_length_safe(const GtMaxcoordvalue *max);
+bool             gt_maxcoordvalue_get_length_safe(const GtMaxcoordvalue *max);
 /* Reset the given <max>. */
-void gt_max_reset(GtMaxcoordvalue *max);
+void             gt_maxcoordvalue_reset(GtMaxcoordvalue *max);
 #endif
diff --git a/src/extended/node_stream_api.h b/src/extended/node_stream_api.h
index ed600cc..4304794 100644
--- a/src/extended/node_stream_api.h
+++ b/src/extended/node_stream_api.h
@@ -35,7 +35,7 @@ GtNodeStream* gt_node_stream_ref(GtNodeStream *node_stream);
    If no error occurs, 0 is returned and <genome_node> contains either the next
    <GtGenomeNode> or <NULL>, if the <node_stream> is exhausted.
    If an error occurs, -1 is returned and <err> is set accordingly (the status
-   of <genome_node> is undefined, but no ownership transfer occured). */
+   of <genome_node> is undefined, but no ownership transfer occurred). */
 int           gt_node_stream_next(GtNodeStream *node_stream,
                                   GtGenomeNode **genome_node,
                                   GtError *err);
diff --git a/src/extended/popcount_tab.h b/src/extended/popcount_tab.h
index 86551f6..169b191 100644
--- a/src/extended/popcount_tab.h
+++ b/src/extended/popcount_tab.h
@@ -44,14 +44,14 @@ unsigned int   gt_popcount_tab_offset_bits(GtPopcountTab *popcount_tab,
                                            unsigned int class);
 
 /* Return the <i>-th value from <popcount_tab> with <popcount_c> bits set, <i>
-   has to be in range 0..(blocksize choose popcount). */
-GtUword  gt_popcount_tab_get(GtPopcountTab *popcount_tab,
+   has to be in range 0...(<blocksize> choose popcount). */
+GtUword        gt_popcount_tab_get(GtPopcountTab *popcount_tab,
                                    unsigned int popcount_c,
                                    GtUword i);
 
 /* Return rank of 1s in <i>-th block given for <popcount_c> bits set
    up to and including <pos>, which is a relative bit position within that
-   block. Note that <pos> <= blocksize of <popcount_tab>. */
+   block. Note that <pos> <= <blocksize> of <popcount_tab>. */
 unsigned int   gt_popcount_tab_rank_1(GtPopcountTab *popcount_tab,
                                       unsigned int popcount_c,
                                       GtUword i,
@@ -59,21 +59,21 @@ unsigned int   gt_popcount_tab_rank_1(GtPopcountTab *popcount_tab,
 
 /* Return rank of 0s in <i>-th block given for <popcount_c> bits set
    up to and including <pos>, which is a relative bit position within that
-   block.  Note that <pos> <= blocksize of <popcount_tab>. */
+   block.  Note that <pos> <= <blocksize> of <popcount_tab>. */
 unsigned int   gt_popcount_tab_rank_0(GtPopcountTab *popcount_tab,
                                       unsigned int popcount_c,
                                       GtUword i,
                                       unsigned int pos);
 
 /* Return the offset of a <block> within its class. Note that
-   <block> < 2^blocksize of <popcount_tab> */
-GtUword  gt_popcount_tab_get_offset_for_block(GtPopcountTab *popcount_tab,
+   <block> < 2^<blocksize> of <popcount_tab> */
+GtUword        gt_popcount_tab_get_offset_for_block(GtPopcountTab *popcount_tab,
                                                     GtUword block);
 
 /* Return size of a <GtPopcountTab> with <blocksize> in bytes. */
 size_t         gt_popcount_tab_calculate_size(unsigned int blocksize);
 
-/* writes a bitstring to buffer, has to be of length blocksize + 1, will be
+/* writes a bitstring to buffer, has to be of length <blocksize> + 1, will be
    \0-terminated */
 void           gt_popcount_tab_block_to_str(GtPopcountTab *popcount_tab,
                                             GtUword block,
diff --git a/src/extended/rcr.c b/src/extended/rcr.c
index 10ce4b4..a6d1050 100644
--- a/src/extended/rcr.c
+++ b/src/extended/rcr.c
@@ -1,6 +1,7 @@
 /*
   Copyright (c) 2011 Joachim Bonnet <joachim.bonnet at studium.uni-hamburg.de>
-  Copyright (c) 2012 Dirk Willrodt <willrodt at zbh.uni-hamburg.de>
+  Copyright (c) 2012-2015 Dirk Willrodt <willrodt at zbh.uni-hamburg.de>
+  Copyright (c) 2011-2015 Center for Bioinformatics, University of Hamburg
 
   Permission to use, copy, modify, and distribute this software for any
   purpose with or without fee is hereby granted, provided that the above
@@ -48,7 +49,7 @@
 #include "extended/sam_alignment.h"
 #include "extended/sam_query_name_iterator.h"
 #include "extended/samfile_iterator.h"
-#include "sam.h"
+#include <samtools/sam.h>
 
 #define BAMBASEA 1
 #define BAMBASEC 2
@@ -528,8 +529,7 @@ static int rcr_write_read_encoding(const bam1_t *alignment,
 
   /* exact match? */
   if (gt_queue_size(rcr_enc->not_exact_matches) > 0 &&
-      (void*) rcr_enc->cur_read ==
-      gt_queue_head(rcr_enc->not_exact_matches)) {
+      (void*) rcr_enc->cur_read == gt_queue_head(rcr_enc->not_exact_matches)) {
     (void) gt_queue_get(rcr_enc->not_exact_matches);
     gt_bitoutstream_append(rcr_enc->bitstream, zero, one_bit);
     rcr_enc->all_bits++;
@@ -635,7 +635,7 @@ static int rcr_write_read_encoding(const bam1_t *alignment,
           break;
         default:
           /* TODO DW gt_error nutzen */
-          gt_log_log("encountered funny cigar_op: "GT_WU"", cigar_op);
+          gt_log_log("encountered funny cigar_op: " GT_WU, cigar_op);
           return -1;
           ;
       }
@@ -644,7 +644,7 @@ static int rcr_write_read_encoding(const bam1_t *alignment,
     rcr_encode_write_var_type(rcr_enc, (GtUword) ENDOFRECORD);
     if (readlength != read_i) {
       /* TODO DW gt_error nutzen */
-      gt_log_log("readlength: "GT_WU", read_i: "GT_WU"", readlength, read_i);
+      gt_log_log("readlength: " GT_WU ", read_i: " GT_WU, readlength, read_i);
       return -1;
     }
   }
@@ -1267,7 +1267,7 @@ static int rcr_write_encoding_to_file(GtRcrEncoder *rcr_enc, GtError *err)
       rcr_enc->cur_seq_startpos =
         gt_encseq_seqstartpos(rcr_enc->encseq, (GtUword) tid);
       gt_bitoutstream_append(rcr_enc->bitstream, new_ref, one_bit);
-      gt_log_log("reset pos for new ref "GT_WU"", rcr_enc->cur_seq_startpos);
+      gt_log_log("reset pos for new ref " GT_WU, rcr_enc->cur_seq_startpos);
     }
     else
       gt_bitoutstream_append(rcr_enc->bitstream, old_ref, one_bit);
@@ -1282,10 +1282,10 @@ static int rcr_write_encoding_to_file(GtRcrEncoder *rcr_enc, GtError *err)
 
 #ifndef S_SPLINT_S
   if (rcr_enc->is_verbose) {
-    printf("encoded "GT_WU" BAM records, "GT_WU" reads(s) unmapped\n",
+    printf("encoded " GT_WU " BAM records, " GT_WU " reads(s) unmapped\n",
            rcr_enc->numofreads, rcr_enc->numofunmappedreads);
-    printf("encoded "GT_LLU" bases\n",rcr_enc->encodedbases);
-    printf("total number of bits used for encoding: "GT_LLU"\n",
+    printf("encoded " GT_LLU" bases\n",rcr_enc->encodedbases);
+    printf("total number of bits used for encoding: " GT_LLU"\n",
            rcr_enc->all_bits);
     printf("%% bits used for quality values: %.3f\n",
            rcr_enc->qual_bits * 100.0 / rcr_enc->all_bits);
@@ -1951,10 +1951,11 @@ static int rcr_write_decoding_to_file(GtRcrDecoder *rcr_dec, GtError *err)
     for (i = 0; i < gt_encseq_num_of_sequences(rcr_dec->encseq); i++) {
       const char *seqname = gt_encseq_description(rcr_dec->encseq, &l, i);
       GtUword len = gt_encseq_seqlength(rcr_dec->encseq, i);
-      fprintf(rcr_dec->fp, "@SQ\tSN:%.*s\tLN:"GT_WU"\n", (int) l, seqname, len);
+      fprintf(rcr_dec->fp, "@SQ\tSN:%.*s\tLN:" GT_WU "\n", (int) l, seqname,
+              len);
     }
 
-    gt_log_log("start to decode "GT_WU" reads", rcr_dec->numofreads);
+    gt_log_log("start to decode " GT_WU " reads", rcr_dec->numofreads);
   }
 
   while (!had_err &&
@@ -1964,7 +1965,7 @@ static int rcr_write_decoding_to_file(GtRcrDecoder *rcr_dec, GtError *err)
     if (RCR_NEXT_BIT(bit)) {
       if (bit) {
         seqstart = gt_encseq_seqstartpos(rcr_dec->encseq, refnum);
-        gt_log_log("get start for new ref "GT_WU": "GT_WU"", refnum, seqstart);
+        gt_log_log("get start for new ref " GT_WU ": " GT_WU, refnum, seqstart);
         refnum++;
         prev_readpos = 0;
       }
@@ -2035,14 +2036,14 @@ static int rcr_write_decoding_to_file(GtRcrDecoder *rcr_dec, GtError *err)
 
         /* write read to file */
         if (readlength != gt_str_length(info->base_string)) {
-          gt_log_log("readlen: "GT_WU", stringlen: "GT_WU", read: "GT_WU"",
+          gt_log_log("readlen: " GT_WU ", stringlen: " GT_WU ", read: " GT_WU,
                      readlength, gt_str_length(info->base_string), cur_read);
         }
         gt_assert(readlength == gt_str_length(info->base_string));
         gt_assert(readlength == gt_str_length(info->qual_string));
         fprintf(rcr_dec->fp, "%s", gt_str_get(qname));
         fprintf(rcr_dec->fp, "\t%c", strand?'-':'+');
-        fprintf(rcr_dec->fp, "\t"GT_WU"", readpos + 1);
+        fprintf(rcr_dec->fp, "\t" GT_WU, readpos + 1);
         if (rcr_dec->store_mapping_qual)
           fprintf(rcr_dec->fp, "\t%u", (unsigned) mapping_qual);
         else
@@ -2065,7 +2066,7 @@ static int rcr_write_decoding_to_file(GtRcrDecoder *rcr_dec, GtError *err)
   gt_golomb_bitwise_decoder_delete(readpos_gbwd);
   gt_bitinstream_delete(bitstream);
   rcr_delete_decode_info(info);
-  gt_log_log("decoded "GT_WU" reads", cur_read);
+  gt_log_log("decoded " GT_WU " reads", cur_read);
   return had_err;
 }
 
diff --git a/src/extended/rcr.h b/src/extended/rcr.h
index 5f4cec3..e66cea6 100644
--- a/src/extended/rcr.h
+++ b/src/extended/rcr.h
@@ -1,7 +1,7 @@
 /*
   Copyright (c) 2011 Joachim Bonnet <joachim.bonnet at studium.uni-hamburg.de>
   Copyright (c) 2012 Dirk Willrodt <willrodt at zbh.uni-hamburg.de>
-  Copyright (c) 2010-2012 Center for Bioinformatics, University of Hamburg
+  Copyright (c) 2011-2012 Center for Bioinformatics, University of Hamburg
 
   Permission to use, copy, modify, and distribute this software for any
   purpose with or without fee is hereby granted, provided that the above
diff --git a/src/extended/reconstructalignment.c b/src/extended/reconstructalignment.c
index 420be70..ed7cb39 100644
--- a/src/extended/reconstructalignment.c
+++ b/src/extended/reconstructalignment.c
@@ -20,9 +20,9 @@
 #include "extended/linspace_management.h"
 #include "extended/reconstructalignment.h"
 
-GtUword construct_trivial_deletion_alignment(GtAlignment *align,
-                                             GtUword len,
-                                             GtUword gapcost)
+GtUword gt_reconstructalignment_trivial_deletion(GtAlignment *align,
+                                                 GtUword len,
+                                                 GtUword gapcost)
 {
   GtUword idx;
 
@@ -33,9 +33,9 @@ GtUword construct_trivial_deletion_alignment(GtAlignment *align,
   return len * gapcost;
 }
 
-GtUword construct_trivial_insertion_alignment(GtAlignment *align,
-                                              GtUword len,
-                                              GtUword gapcost)
+GtUword gt_reconstructalignment_trivial_insertion(GtAlignment *align,
+                                                  GtUword len,
+                                                  GtUword gapcost)
 {
   GtUword idx;
 
@@ -48,15 +48,15 @@ GtUword construct_trivial_insertion_alignment(GtAlignment *align,
 }
 
 /* reconstruct global alignment from square space table E */
-void reconstructalignment_from_EDtab(GtAlignment *align,
-                                     GtUword * const *E,
-                                     const GtUchar *useq,
-                                     GtUword ustart,
-                                     GtUword ulen,
-                                     const GtUchar *vseq,
-                                     GtUword vstart,
-                                     GtUword vlen,
-                                     const GtScoreHandler *scorehandler)
+void gt_reconstructalignment_from_EDtab(GtAlignment *align,
+                                        GtUword * const *E,
+                                        const GtUchar *useq,
+                                        GtUword ustart,
+                                        GtUword ulen,
+                                        const GtUchar *vseq,
+                                        GtUword vstart,
+                                        GtUword vlen,
+                                        const GtScoreHandler *scorehandler)
 {
   GtUword i = ulen, j = vlen, gapcost;
   const GtUchar *uptr = useq + ustart - 1, *vptr = vseq + vstart - 1;
@@ -92,23 +92,23 @@ void reconstructalignment_from_EDtab(GtAlignment *align,
 }
 
 /* reconstruct local alignment from square space table Ltab */
-void reconstructalignment_from_Ltab(GtAlignment *align,
-                                    GtWord **Ltabcolumn,
-                                    GtMaxcoordvalue *max,
-                                    const GtUchar *useq,
-                                    GtUword ustart,
-                                    GT_UNUSED GtUword ulen,
-                                    const GtUchar *vseq,
-                                    GtUword vstart,
-                                    GT_UNUSED GtUword vlen,
-                                    const GtScoreHandler *scorehandler)
+void gt_reconstructalignment_from_Ltab(GtAlignment *align,
+                                       GtWord **Ltabcolumn,
+                                       GtMaxcoordvalue *max,
+                                       const GtUchar *useq,
+                                       GtUword ustart,
+                                       GT_UNUSED GtUword ulen,
+                                       const GtUchar *vseq,
+                                       GtUword vstart,
+                                       GT_UNUSED GtUword vlen,
+                                       const GtScoreHandler *scorehandler)
 {
   GtUword i, j;
   GtWord gapscore;
   GtUwordPair max_end;
 
   gt_assert(align && Ltabcolumn && scorehandler);
-  max_end = gt_max_get_end(max);
+  max_end = gt_maxcoordvalue_get_end(max);
   i = max_end.a;
   j = max_end.b;
   gt_assert(i <= ulen && j <= vlen);
@@ -140,19 +140,19 @@ void reconstructalignment_from_Ltab(GtAlignment *align,
     }
     gt_assert(false);
   }
-  gt_max_set_start(max,i,j);
+  gt_maxcoordvalue_set_start(max,i,j);
 }
 
 /* reconstruct alignment from crosspoint table
    crosspoints relating to midolumn */
-void reconstructalignment_from_Ctab(GtAlignment *align,
-                                    const GtUword *Ctab,
-                                    const GtUchar *useq,
-                                    GtUword ustart,
-                                    const GtUchar *vseq,
-                                    GtUword vstart,
-                                    GtUword vlen,
-                                    const GtScoreHandler *scorehandler)
+void gt_reconstructalignment_from_Ctab(GtAlignment *align,
+                                       const GtUword *Ctab,
+                                       const GtUchar *useq,
+                                       GtUword ustart,
+                                       const GtUchar *vseq,
+                                       GtUword vstart,
+                                       GtUword vlen,
+                                       const GtScoreHandler *scorehandler)
 {
   GtUword i,j, repl, indel, gap_opening, gap_extension;
   gt_assert(align && Ctab && scorehandler);
@@ -209,8 +209,9 @@ void reconstructalignment_from_Ctab(GtAlignment *align,
 }
 
 /*reconstruct alignment from crosspoints, crosspoints relating to diagonalband*/
-void reconstructalignment_from_Dtab(GtAlignment *align, const Diagentry *Dtab,
-                                    GtUword ulen, GtUword vlen)
+void gt_reconstructalignment_from_Dtab(GtAlignment *align,
+                                       const GtDiagAlignentry *Dtab,
+                                       GtUword ulen, GtUword vlen)
 {
   GtUword i,j;
 
@@ -282,17 +283,17 @@ void reconstructalignment_from_Dtab(GtAlignment *align, const Diagentry *Dtab,
 
 /* reconstruct alignment from crosspoints (affine gapcosts),
  * crosspoints relating to diagonalband */
-void reconstructalignment_from_affineDtab(GtAlignment *align,
-                                          const AffineDiagentry *Dtab,
-                                          AffineAlignEdge edge,
-                                          GT_UNUSED const GtUchar *useq,
-                                          GtUword ulen,
-                                          GT_UNUSED const GtUchar *vseq,
-                                          GtUword vlen)
+void gt_reconstructalignment_from_affineDtab(GtAlignment *align,
+                                             const GtAffineDiagAlignentry *Dtab,
+                                             GtAffineAlignEdge edge,
+                                             GT_UNUSED const GtUchar *useq,
+                                             GtUword ulen,
+                                             GT_UNUSED const GtUchar *vseq,
+                                             GtUword vlen)
 {
   GtUword i,j;
-  Diagentry node, prevnode;
-  AffineAlignEdge prevedge;
+  GtDiagAlignentry node, prevnode;
+  GtAffineAlignEdge prevedge;
   gt_assert(align != NULL && Dtab != NULL);
 
   switch (edge) {
diff --git a/src/extended/reconstructalignment.h b/src/extended/reconstructalignment.h
index dd9ac22..7b1ec45 100644
--- a/src/extended/reconstructalignment.h
+++ b/src/extended/reconstructalignment.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (c) 2015 Annika <annika.seidel at studium.uni-hamburg.de>
+  Copyright (c) 2015 Annika Seidel <annika.seidel at studium.uni-hamburg.de>
   Copyright (c) 2015 Center for Bioinformatics, University of Hamburg
 
   Permission to use, copy, modify, and distribute this software for any
@@ -28,79 +28,82 @@
 /* Add an alignment of length <len> to <align> containing only deletion
    operations. Returns linear cost value of constructed alignment using
    specified <gapcost>. */
-GtUword construct_trivial_deletion_alignment(GtAlignment *align,
-                                             GtUword len,
-                                             GtUword gapcost);
+GtUword gt_reconstructalignment_trivial_deletion(GtAlignment *align,
+                                                 GtUword len,
+                                                 GtUword gapcost);
 
 /* Add an alignment of length <len> to <align> containing only insertion
    operations. Returns linear cost value of constructed alignment using
    specified <gapcost>. */
-GtUword construct_trivial_insertion_alignment(GtAlignment *align,
-                                              GtUword len,
-                                              GtUword gapcost);
+GtUword gt_reconstructalignment_trivial_insertion(GtAlignment *align,
+                                                  GtUword len,
+                                                  GtUword gapcost);
 
 /* Reconstruct an object <align> from square space table <E>, which describes
    a global alignment between two sequences  <useq> and <vseq>, with the
    regions to align given by their start positions <ustart> and <vstart> and
    lengths <ulen> and <vlen>. <scorehandler> specifies the cost values with
    which the <E>-matrix was created. */
-void reconstructalignment_from_EDtab(GtAlignment *align,
-                                     GtUword * const *E,
-                                     const GtUchar *useq,
-                                     GtUword ustart,
-                                     GtUword ulen,
-                                     const GtUchar *vseq,
-                                     GtUword vstart,
-                                     GtUword vlen,
-                                     const GtScoreHandler *scorehandler);
+void    gt_reconstructalignment_from_EDtab(GtAlignment *align,
+                                           GtUword * const *E,
+                                           const GtUchar *useq,
+                                           GtUword ustart,
+                                           GtUword ulen,
+                                           const GtUchar *vseq,
+                                           GtUword vstart,
+                                           GtUword vlen,
+                                           const GtScoreHandler *scorehandler);
 
 /* Reconstruct an object <align> from square space table <Ltabcolumn>, which
    describes a local alignment between two sequences  <useq> and <vseq>, with
    the regions to align given by their start positions <ustart> and <vstart> and
    lengths <ulen> and <vlen>. <scorehandler> specifies the score values with
    which the <Ltabcolumn>-matrix was created. */
-void reconstructalignment_from_Ltab(GtAlignment *align,
-                                    GtWord **Ltabcolumn,
-                                    GtMaxcoordvalue *max,
-                                    const GtUchar *useq,
-                                    GtUword ustart,
-                                    GtUword ulen,
-                                    const GtUchar *vseq,
-                                    GtUword vstart,
-                                    GtUword vlen,
-                                    const GtScoreHandler *scorehandler);
+void    gt_reconstructalignment_from_Ltab(GtAlignment *align,
+                                          GtWord **Ltabcolumn,
+                                          GtMaxcoordvalue *max,
+                                          const GtUchar *useq,
+                                          GtUword ustart,
+                                          GtUword ulen,
+                                          const GtUchar *vseq,
+                                          GtUword vstart,
+                                          GtUword vlen,
+                                          const GtScoreHandler *scorehandler);
 
 /* Reconstruct an object <align> from crosspoints in <Ctab> between two
    sequences  <useq> and <vseq>, with the regions to align given by their start
    positions <ustart> and <vstart> and lengths <ulen> and <vlen>. The
    crosspoints are located on midcolumns. <scorehandler> specifies the cost
    values with which the <Ctab> was created. */
-void reconstructalignment_from_Ctab(GtAlignment *align,
-                                    const GtUword *Ctab,
-                                    const GtUchar *useq,
-                                    GtUword ustart,
-                                    const GtUchar *vseq,
-                                    GtUword vstart,
-                                    GtUword vlen,
-                                    const GtScoreHandler *scorehandler);
+void    gt_reconstructalignment_from_Ctab(GtAlignment *align,
+                                          const GtUword *Ctab,
+                                          const GtUchar *useq,
+                                          GtUword ustart,
+                                          const GtUchar *vseq,
+                                          GtUword vstart,
+                                          GtUword vlen,
+                                          const GtScoreHandler *scorehandler);
 
 /* Reconstruct an object <align> from crosspoints in <Dtab> between two
    sequences  <useq> and <vseq>, with the regions to align given by their start
    positions <ustart> and <vstart> and lengths <ulen> and <vlen>. The
    crosspoints are located on diagonals and the evaluation is based on
    linear gap costs. */
-void reconstructalignment_from_Dtab(GtAlignment *align,
-                                    const Diagentry *Dtab, GtUword ulen,
-                                    GtUword vlen);
+void    gt_reconstructalignment_from_Dtab(GtAlignment *align,
+                                          const GtDiagAlignentry *Dtab,
+                                          GtUword ulen,
+                                          GtUword vlen);
 
 /* Reconstruct an object <align> from crosspoints in <Dtab> between two
    sequences  <useq> and <vseq>, with the regions to align given by their start
    positions <ustart> and <vstart> and lengths <ulen> and <vlen>. The
    crosspoints are located on diagonals and the and the evaluation is based on
    affine gap costs. */
-void reconstructalignment_from_affineDtab(GtAlignment *align,
-                                          const AffineDiagentry *Dtab,
-                                          AffineAlignEdge edge,
-                                          const GtUchar *useq, GtUword ulen,
-                                          const GtUchar *vseq, GtUword vlen);
+void     gt_reconstructalignment_from_affineDtab(GtAlignment *align,
+                                             const GtAffineDiagAlignentry *Dtab,
+                                             GtAffineAlignEdge edge,
+                                             const GtUchar *useq,
+                                             GtUword ulen,
+                                             const GtUchar *vseq,
+                                             GtUword vlen);
 #endif
diff --git a/src/extended/sam_alignment.c b/src/extended/sam_alignment.c
index af8e21d..d1afdcc 100644
--- a/src/extended/sam_alignment.c
+++ b/src/extended/sam_alignment.c
@@ -16,7 +16,7 @@
   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */
 
-#include <sam.h>
+#include <samtools/sam.h>
 #include "core/alphabet_api.h"
 #include "core/ensure.h"
 #include "core/ma_api.h"
diff --git a/src/extended/sam_alignment_rep.h b/src/extended/sam_alignment_rep.h
index a56ef14..4269ce0 100644
--- a/src/extended/sam_alignment_rep.h
+++ b/src/extended/sam_alignment_rep.h
@@ -23,7 +23,7 @@
 /* The contents of this file is to be considered private implementation detail.
 */
 
-#include <sam.h>
+#include <samtools/sam.h>
 #include "core/alphabet_api.h"
 
 struct GtSamAlignment{
diff --git a/src/extended/samfile_iterator.c b/src/extended/samfile_iterator.c
index ee371ab..118fc7a 100644
--- a/src/extended/samfile_iterator.c
+++ b/src/extended/samfile_iterator.c
@@ -15,7 +15,7 @@
   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */
 
-#include <sam.h>
+#include <samtools/sam.h>
 #include "core/cstr_api.h"
 #include "core/ensure.h"
 #include "core/error_api.h"
diff --git a/src/extended/scorehandler.c b/src/extended/scorehandler.c
index e7e7114..1e128be 100644
--- a/src/extended/scorehandler.c
+++ b/src/extended/scorehandler.c
@@ -1,5 +1,5 @@
 /*
-  Copyright (c) 2015 Annika <annika.seidel at studium.uni-hamburg.de>
+  Copyright (c) 2015 Annika Seidel <annika.seidel at studium.uni-hamburg.de>
   Copyright (c) 2015 Center for Bioinformatics, University of Hamburg
 
   Permission to use, copy, modify, and distribute this software for any
diff --git a/src/extended/scorehandler.h b/src/extended/scorehandler.h
index ddcbc34..18d2e54 100644
--- a/src/extended/scorehandler.h
+++ b/src/extended/scorehandler.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (c) 2015 Annika <annika.seidel at studium.uni-hamburg.de>
+  Copyright (c) 2015 Annika Seidel <annika.seidel at studium.uni-hamburg.de>
   Copyright (c) 2015 Center for Bioinformatics, University of Hamburg
 
   Permission to use, copy, modify, and distribute this software for any
@@ -34,29 +34,34 @@ GtScoreHandler* gt_scorehandler_new(GtWord matchscore,
                                     GtWord gap_extension);
 
 /* Add a <scorematrix> to the given <scorehandler>. */
-void gt_scorehandler_add_scorematrix(GtScoreHandler *scorehandler,
-                                     GtScoreMatrix *scorematrix);
+void            gt_scorehandler_add_scorematrix(GtScoreHandler *scorehandler,
+                                                GtScoreMatrix *scorematrix);
 /* Set false for mappedsequence value of the given <scorehandler>. */
-void gt_scorehandler_plain(GtScoreHandler *scorehandler);
+void            gt_scorehandler_plain(GtScoreHandler *scorehandler);
 /* Set true for downcase value of the given <scorehandler>. */
-void gt_scorehandler_downcase(GtScoreHandler *scorehandler);
+void            gt_scorehandler_downcase(GtScoreHandler *scorehandler);
 /* Delete the given <scorehandler>. */
-void gt_scorehandler_delete(GtScoreHandler *scorehandler);
+void            gt_scorehandler_delete(GtScoreHandler *scorehandler);
 /* Return gap_opening score value for the given <scorehandler>. */
-GtWord gt_scorehandler_get_gap_opening(const GtScoreHandler *scorehandler);
+GtWord          gt_scorehandler_get_gap_opening(const GtScoreHandler
+                                                *scorehandler);
 /* Return gapscore value for the given <scorehandler>. */
-GtWord gt_scorehandler_get_gapscore(const GtScoreHandler *scorehandler);
+GtWord          gt_scorehandler_get_gapscore(const GtScoreHandler
+                                             *scorehandler);
 /* Return replacement score value for the given characters <a> and <b>. */
-GtWord gt_scorehandler_get_replacement(const GtScoreHandler *scorehandler,
-                                       GtUchar a, GtUchar b);
+GtWord          gt_scorehandler_get_replacement(const GtScoreHandler
+                                                *scorehandler,
+                                                GtUchar a,
+                                                GtUchar b);
 /* Return a <GtScoreHandler> object, which is generated by transforming score
    values of the given <scorehandler> to cost values. */
 GtScoreHandler *gt_scorehandler2costhandler(const GtScoreHandler *scorehandler);
 /* Return score for the given <alignment>. The score value is calculated with
    the stored score values of the given <scorehandler>. <characters> gives
    a map for the aligned sequences. */
-GtWord gt_scorehandler_eval_alignmentscore(const GtScoreHandler *scorehandler,
-                                           const GtAlignment *alignment,
-                                           const GtUchar *characters);
+GtWord          gt_scorehandler_eval_alignmentscore(const GtScoreHandler
+                                                   *scorehandler,
+                                                   const GtAlignment *alignment,
+                                                   const GtUchar *characters);
 
 #endif
diff --git a/src/extended/spec_results.c b/src/extended/spec_results.c
index 33466a9..fa840d4 100644
--- a/src/extended/spec_results.c
+++ b/src/extended/spec_results.c
@@ -74,7 +74,9 @@ struct GtSpecResults {
        seen_meta,
        seen_region,
        seen_comment,
-       seen_sequence;
+       seen_sequence,
+       has_failures,
+       has_runtime_errors;
   GtUword checked_types,
           checked_aspects,
           checked_ccs,
@@ -159,6 +161,7 @@ GtSpecResults *gt_spec_results_new(void)
   spec_results->comment_aspects = gt_hashmap_new(GT_HASH_STRING, NULL,
                                                (GtFree) gt_spec_aspect_delete);
   spec_results->warnings = gt_str_array_new();
+  spec_results->has_runtime_errors = spec_results->has_failures = false;
   return spec_results;
 }
 
@@ -246,6 +249,8 @@ void gt_spec_results_add_result(GtSpecResults *sr,
       }
       gt_assert(sanr);
       gt_str_array_add_cstr(sanr->failure_messages, error_string);
+      if (!sr->has_failures)
+        sr->has_failures = true;
       break;
     case GT_SPEC_RUNTIME_ERROR:
       if (!(sanr = gt_hashmap_get(sa->aspect_node_results, node))) {
@@ -255,6 +260,8 @@ void gt_spec_results_add_result(GtSpecResults *sr,
       }
       gt_assert(sanr);
       gt_str_array_add_cstr(sanr->runtime_error_messages, error_string);
+      if (!sr->has_runtime_errors)
+        sr->has_runtime_errors = true;
       break;
   }
   sa->last_node = node;
@@ -415,6 +422,18 @@ static int gt_spec_results_lua_print(lua_State* L) {
     return 0;
 }
 
+bool gt_spec_results_has_runtime_errors(GtSpecResults *sr)
+{
+  gt_assert(sr);
+  return sr->has_runtime_errors;
+}
+
+bool gt_spec_results_has_failures(GtSpecResults *sr)
+{
+  gt_assert(sr);
+  return sr->has_failures;
+}
+
 int gt_spec_results_render_template(GtSpecResults *sr, const char *template,
                                     GtFile *outfile, const char *specfile,
                                     bool details, bool colored,
diff --git a/src/extended/spec_results.h b/src/extended/spec_results.h
index f86e397..1bb2715 100644
--- a/src/extended/spec_results.h
+++ b/src/extended/spec_results.h
@@ -18,6 +18,7 @@
 #ifndef SPEC_RESULTS_H
 #define SPEC_RESULTS_H
 
+#include <stdbool.h>
 #include "core/error_api.h"
 #include "core/file_api.h"
 #include "extended/genome_node_api.h"
@@ -39,6 +40,8 @@ void           gt_spec_results_add_result(GtSpecResults *sr,
 void           gt_spec_results_add_cc(GtSpecResults *sr);
 void           gt_spec_results_record_warning(GtSpecResults *sr, const char *w);
 void           gt_spec_results_record_per_node(GtSpecResults *sr);
+bool           gt_spec_results_has_failures(GtSpecResults *sr);
+bool           gt_spec_results_has_runtime_errors(GtSpecResults *sr);
 
 void           gt_spec_results_report(GtSpecResults *sr, GtFile *outfile,
                                       const char *specfile, bool details,
diff --git a/src/extended/squarealign.c b/src/extended/squarealign.c
index 7e292e4..c952fb0 100644
--- a/src/extended/squarealign.c
+++ b/src/extended/squarealign.c
@@ -1,5 +1,5 @@
 /*
-  Copyright (c) 2015 Annika <annika.seidel at studium.uni-hamburg.de>
+  Copyright (c) 2015 Annika Seidel <annika.seidel at studium.uni-hamburg.de>
   Copyright (c) 2015 Center for Bioinformatics, University of Hamburg
 
   Permission to use, copy, modify, and distribute this software for any
@@ -65,15 +65,15 @@ static void fillDPtab_in_square_space(GtUword **E,
 
 /* create an global alignment in square space, to use it in linear context you
  * have to generate an spacemanager before, in any other case it can be NULL */
-GtUword alignment_in_square_space_generic (GtLinspaceManagement *spacemanager,
-                                           GtAlignment *align,
-                                           const GtUchar *useq,
-                                           GtUword ustart,
-                                           GtUword ulen,
-                                           const GtUchar *vseq,
-                                           GtUword vstart,
-                                           GtUword vlen,
-                                           const GtScoreHandler *scorehandler)
+GtUword gt_squarealign_calculate_generic (GtLinspaceManagement *spacemanager,
+                                          GtAlignment *align,
+                                          const GtUchar *useq,
+                                          GtUword ustart,
+                                          GtUword ulen,
+                                          const GtUchar *vseq,
+                                          GtUword vstart,
+                                          GtUword vlen,
+                                          const GtScoreHandler *scorehandler)
 {
   GtUword **E, distance;
   gt_assert(align && scorehandler);
@@ -86,15 +86,15 @@ GtUword alignment_in_square_space_generic (GtLinspaceManagement *spacemanager,
   else
   {
     /*use it in lineraspace context*/
-    E = gt_linspaceManagement_change_to_square(spacemanager,ulen,vlen);
+    E = gt_linspace_management_change_to_square(spacemanager,ulen,vlen);
   }
   fillDPtab_in_square_space(E, useq, ustart, ulen,
                             vseq, vstart, vlen, scorehandler);
 
   distance = E[ulen][vlen];
   /* reconstruct alignment from 2dimarray E */
-  reconstructalignment_from_EDtab(align, E, useq, ustart, ulen, vseq, vstart,
-                                  vlen, scorehandler);
+  gt_reconstructalignment_from_EDtab(align, E, useq, ustart, ulen, vseq, vstart,
+                                     vlen, scorehandler);
   if (spacemanager == NULL)
   {
     gt_array2dim_delete(E);
@@ -102,13 +102,13 @@ GtUword alignment_in_square_space_generic (GtLinspaceManagement *spacemanager,
   return distance;
 }
 
-GtUword distance_only_global_alignment(const GtUchar *useq,
-                                       GtUword ustart,
-                                       GtUword ulen,
-                                       const GtUchar *vseq,
-                                       GtUword vstart,
-                                       GtUword vlen,
-                                       const GtScoreHandler *scorehandler)
+GtUword gt_squarealign_global_distance_only(const GtUchar *useq,
+                                            GtUword ustart,
+                                            GtUword ulen,
+                                            const GtUchar *vseq,
+                                            GtUword vstart,
+                                            GtUword vlen,
+                                            const GtScoreHandler *scorehandler)
 {
   GtUword **E, distance;
 
@@ -125,39 +125,40 @@ GtUword distance_only_global_alignment(const GtUchar *useq,
 /* create a global alignment in square space with constant cost values,
  * to use it in linear context you have to generate an spacemanager before,
  * in any other case it can be NULL */
-GtUword alignment_in_square_space(GtLinspaceManagement *spacemanager,
-                                  GtAlignment *align,
-                                  const GtUchar *useq,
-                                  GtUword ustart,
-                                  GtUword ulen,
-                                  const GtUchar *vseq,
-                                  GtUword vstart,
-                                  GtUword vlen,
-                                  GtUword matchcost,
-                                  GtUword mismatchcost,
-                                  GtUword gapcost)
+GtUword gt_squarealign_calculate(GtLinspaceManagement *spacemanager,
+                                 GtAlignment *align,
+                                 const GtUchar *useq,
+                                 GtUword ustart,
+                                 GtUword ulen,
+                                 const GtUchar *vseq,
+                                 GtUword vstart,
+                                 GtUword vlen,
+                                 GtUword matchcost,
+                                 GtUword mismatchcost,
+                                 GtUword gapcost)
 {
   GtUword distance;
   GtScoreHandler *scorehandler;
 
   gt_assert(align);
   scorehandler = gt_scorehandler_new(matchcost, mismatchcost, 0, gapcost);
-  distance = alignment_in_square_space_generic (spacemanager, align,
-                                                useq, ustart,  ulen,
-                                                vseq,  vstart, vlen,
-                                                scorehandler);
+  distance = gt_squarealign_calculate_generic (spacemanager, align,
+                                               useq, ustart,  ulen,
+                                               vseq,  vstart, vlen,
+                                               scorehandler);
   gt_scorehandler_delete(scorehandler);
   return distance;
 }
 
-void gt_print_edist_alignment(const GtUchar *useq, GtUword ustart, GtUword ulen,
-                              const GtUchar *vseq, GtUword vstart, GtUword vlen)
+void gt_squarealign_print_edit_alignment(const GtUchar *useq, GtUword ustart,
+                                         GtUword ulen, const GtUchar *vseq,
+                                         GtUword vstart, GtUword vlen)
 {
   GtAlignment *align;
   align = gt_alignment_new_with_seqs(useq+ustart, ulen, vseq+vstart, vlen);
 
-  alignment_in_square_space(NULL, align, useq, ustart, ulen,
-                            vseq, vstart, vlen, 0, 1, 1);
+  gt_squarealign_calculate(NULL, align, useq, ustart, ulen,
+                           vseq, vstart, vlen, 0, 1, 1);
   gt_alignment_show(align, true, stdout, 80);
   gt_alignment_delete(align);
 }
@@ -209,23 +210,23 @@ static void evaluate_crosspoints_from_2dimtab(
 
 /* fill crosspointtable ctab for part of sequences useq and vseq in square
  * space, use it to combine square calculating with linear calculating */
-GtUword ctab_in_square_space(GtLinspaceManagement *spacemanager,
-                             const GtScoreHandler *scorehandler,
-                             GtUword *Ctab,
-                             const GtUchar *useq,
-                             GtUword ustart,
-                             GtUword ulen,
-                             const GtUchar *vseq,
-                             GtUword vstart,
-                             GtUword vlen,
-                             GtUword rowoffset)
+GtUword gt_squarealign_ctab(GtLinspaceManagement *spacemanager,
+                            const GtScoreHandler *scorehandler,
+                            GtUword *Ctab,
+                            const GtUchar *useq,
+                            GtUword ustart,
+                            GtUword ulen,
+                            const GtUchar *vseq,
+                            GtUword vstart,
+                            GtUword vlen,
+                            GtUword rowoffset)
 {
   GtUword **E, distance;
 
   gt_assert(Ctab && spacemanager && scorehandler);
 
-  E = gt_linspaceManagement_change_to_square(spacemanager,ulen,vlen);
-  E = gt_linspaceManagement_change_to_square(spacemanager,ulen, vlen);
+  E = gt_linspace_management_change_to_square(spacemanager,ulen,vlen);
+  E = gt_linspace_management_change_to_square(spacemanager,ulen, vlen);
 
   fillDPtab_in_square_space(E, useq, ustart, ulen,
                             vseq, vstart, vlen, scorehandler);
@@ -283,7 +284,7 @@ static GtWord fillDPtab_in_square_space_local(GtWord **Ltabcolumn,
         if (maxscore > (GtWord) overall_maxscore)
         {
           overall_maxscore = maxscore;
-          gt_max_coord_update_without_start (max, maxscore,i,j);
+          gt_maxcoordvalue_coord_update_without_start (max, maxscore, i, j);
         }
      }
   }
@@ -293,17 +294,17 @@ static GtWord fillDPtab_in_square_space_local(GtWord **Ltabcolumn,
 
 /* create an local alignment in square space, to use it in linear context you
  * have to generate an spacemanager before, in any other case it can be NULL */
-GtWord alignment_in_square_space_local_generic(GtLinspaceManagement
-                                               *spacemanager,
-                                               GtAlignment *align,
-                                               const GtUchar *useq,
-                                               GtUword ustart,
-                                               GtUword ulen,
-                                               const GtUchar *vseq,
-                                               GtUword vstart,
-                                               GtUword vlen,
-                                               const GtScoreHandler
-                                               *scorehandler)
+GtWord gt_squarealign_calculate_local_generic(GtLinspaceManagement
+                                              *spacemanager,
+                                              GtAlignment *align,
+                                              const GtUchar *useq,
+                                              GtUword ustart,
+                                              GtUword ulen,
+                                              const GtUchar *vseq,
+                                              GtUword vstart,
+                                              GtUword vlen,
+                                              const GtScoreHandler
+                                              *scorehandler)
 {
   GtWord score = 0, **Ltabcolumn;
   GtMaxcoordvalue *max;
@@ -313,30 +314,32 @@ GtWord alignment_in_square_space_local_generic(GtLinspaceManagement
   {
     /*use it in normally case*/
     gt_array2dim_malloc(Ltabcolumn, (ulen+1), (vlen+1));
-    max = gt_max_new();
+    max = gt_maxcoordvalue_new();
   }
   else
   {
     /*use it in lineraspace context*/
     Ltabcolumn = (GtWord **)
-                 gt_linspaceManagement_change_to_square(spacemanager,ulen,vlen);
-    max = gt_linspaceManagement_get_maxspace(spacemanager);
+                 gt_linspace_management_change_to_square(spacemanager,
+                                                         ulen, vlen);
+    max = gt_linspace_management_get_maxspace(spacemanager);
   }
 
   score = fillDPtab_in_square_space_local(Ltabcolumn, max, useq, ustart, ulen,
                                           vseq, vstart, vlen, scorehandler);
 
   /* reconstruct local alignment from 2dimarray Ltabcolumn */
-  reconstructalignment_from_Ltab(align, Ltabcolumn, max,
-                                 useq, ustart, ulen,
-                                 vseq,vstart,vlen,scorehandler);
+  gt_reconstructalignment_from_Ltab(align, Ltabcolumn, max,
+                                    useq, ustart, ulen,
+                                    vseq, vstart, vlen,
+                                    scorehandler);
 
-  if (gt_max_get_length_safe(max))
+  if (gt_maxcoordvalue_get_length_safe(max))
   {
-    ustart = ustart+(gt_max_get_start(max)).a;
-    vstart = vstart+(gt_max_get_start(max)).b;
-    ulen = gt_max_get_row_length(max);
-    vlen = gt_max_get_col_length(max);
+    ustart = ustart + (gt_maxcoordvalue_get_start(max)).a;
+    vstart = vstart + (gt_maxcoordvalue_get_start(max)).b;
+    ulen = gt_maxcoordvalue_get_row_length(max);
+    vlen = gt_maxcoordvalue_get_col_length(max);
 
     gt_alignment_set_seqs(align, &useq[ustart], ulen,
                                  &vseq[vstart], vlen);
@@ -345,7 +348,7 @@ GtWord alignment_in_square_space_local_generic(GtLinspaceManagement
   if (spacemanager == NULL)
   {
     gt_array2dim_delete(Ltabcolumn);
-    gt_max_delete(max);
+    gt_maxcoordvalue_delete(max);
   }
   return score;
 }
@@ -353,27 +356,27 @@ GtWord alignment_in_square_space_local_generic(GtLinspaceManagement
 /* create an local alignment in square space with constant score values,
  * to use it in linear context you have to generate an spacemanager before,
  * in any other case it can be NULL */
-GtWord alignment_in_square_space_local(GtLinspaceManagement *spacemanager,
-                                       GtAlignment *align,
-                                       const GtUchar *useq,
-                                       GtUword ustart,
-                                       GtUword ulen,
-                                       const GtUchar *vseq,
-                                       GtUword vstart,
-                                       GtUword vlen,
-                                       GtWord matchscore,
-                                       GtWord mismatchscore,
-                                       GtWord gapscore)
+GtWord gt_squarealign_calculate_local(GtLinspaceManagement *spacemanager,
+                                      GtAlignment *align,
+                                      const GtUchar *useq,
+                                      GtUword ustart,
+                                      GtUword ulen,
+                                      const GtUchar *vseq,
+                                      GtUword vstart,
+                                      GtUword vlen,
+                                      GtWord matchscore,
+                                      GtWord mismatchscore,
+                                      GtWord gapscore)
 {
   GtWord score;
   gt_assert(align);
   GtScoreHandler *scorehandler = gt_scorehandler_new(matchscore,
                                                      mismatchscore, 0,
                                                      gapscore);
-  score = alignment_in_square_space_local_generic(spacemanager, align,
-                                                  useq, ustart, ulen,
-                                                  vseq, vstart, vlen,
-                                                  scorehandler);
+  score = gt_squarealign_calculate_local_generic(spacemanager, align,
+                                                 useq, ustart, ulen,
+                                                 vseq, vstart, vlen,
+                                                 scorehandler);
   gt_scorehandler_delete(scorehandler);
   return score;
 }
diff --git a/src/extended/squarealign.h b/src/extended/squarealign.h
index 4513260..258d876 100644
--- a/src/extended/squarealign.h
+++ b/src/extended/squarealign.h
@@ -30,15 +30,15 @@
    and <vlen>. An initialised <spacemanager> is required to use this function in
    linear space context, in any other case it can be NULL. Returns distance
    value of global alignment. */
-GtUword alignment_in_square_space_generic (GtLinspaceManagement *spacemanager,
-                                           GtAlignment *align,
-                                           const GtUchar *useq,
-                                           GtUword ustart,
-                                           GtUword ulen,
-                                           const GtUchar *vseq,
-                                           GtUword vstart,
-                                           GtUword vlen,
-                                           const GtScoreHandler *scorehandler);
+GtUword gt_squarealign_calculate_generic(GtLinspaceManagement *spacemanager,
+                                         GtAlignment *align,
+                                         const GtUchar *useq,
+                                         GtUword ustart,
+                                         GtUword ulen,
+                                         const GtUchar *vseq,
+                                         GtUword vstart,
+                                         GtUword vlen,
+                                         const GtScoreHandler *scorehandler);
 
 /* Computes a global alignment with linear gapcosts in square space
    and constant cost values. Use of this function requires the target alignment
@@ -48,37 +48,38 @@ GtUword alignment_in_square_space_generic (GtLinspaceManagement *spacemanager,
    <gapcost>. An initialised <spacemanager> is required to use this function in
    linear space context, in any other case it can be NULL. Returns distance
    value of global alignment. */
-GtUword alignment_in_square_space(GtLinspaceManagement *spacemanager,
-                                  GtAlignment *align,
-                                  const GtUchar *useq,
-                                  GtUword ustart,
-                                  GtUword ulen,
-                                  const GtUchar *vseq,
-                                  GtUword vstart,
-                                  GtUword vlen,
-                                  GtUword matchcost,
-                                  GtUword mismatchcost,
-                                  GtUword gapcost);
+GtUword gt_squarealign_calculate(GtLinspaceManagement *spacemanager,
+                                 GtAlignment *align,
+                                 const GtUchar *useq,
+                                 GtUword ustart,
+                                 GtUword ulen,
+                                 const GtUchar *vseq,
+                                 GtUword vstart,
+                                 GtUword vlen,
+                                 GtUword matchcost,
+                                 GtUword mismatchcost,
+                                 GtUword gapcost);
 
 /* Computes only the distance of a global alignment with linear gapcosts in
    square space. Use of this function requires an initialised <scorehandler>
    with cost values and input sequences <useq> and <vseq>, with the regions to
    align given by their start positions <ustart> and <vstart> and lengths <ulen>
    and <vlen>. */
-GtUword distance_only_global_alignment(const GtUchar *useq,
-                                       GtUword ustart,
-                                       GtUword ulen,
-                                       const GtUchar *vseq,
-                                       GtUword vstart,
-                                       GtUword vlen,
-                                       const GtScoreHandler *scorehandler);
+GtUword gt_squarealign_global_distance_only(const GtUchar *useq,
+                                            GtUword ustart,
+                                            GtUword ulen,
+                                            const GtUchar *vseq,
+                                            GtUword vstart,
+                                            GtUword vlen,
+                                            const GtScoreHandler *scorehandler);
 
 /* Shows a global alignment, which is computed with linear gapcosts in
    square space. Use of this function requires input sequences <useq> and
    <vseq>, with the regions to align given by their start positions <ustart> and
    <vstart> and lengths <ulen> and <vlen>. */
-void gt_print_edist_alignment(const GtUchar *useq, GtUword ustart, GtUword ulen,
-                             const GtUchar *vseq, GtUword vstart, GtUword vlen);
+void    gt_squarealign_print_edit_alignment(const GtUchar *useq, GtUword ustart,
+                                            GtUword ulen, const GtUchar *vseq,
+                                            GtUword vstart, GtUword vlen);
 
 /* Computes crosspoints for a global alignment with linear gapcosts in square
    space. Use of this function requires an initialised <spacemanager> an
@@ -87,16 +88,16 @@ void gt_print_edist_alignment(const GtUchar *useq, GtUword ustart, GtUword ulen,
    by their start positions <ustart> and <vstart> and lengths <ulen> and <vlen>.
    If this function is use in linear context, <rowoffset> is the offset value of
    the subproblem, else zero. Returns distance value of global alignment. */
-GtUword ctab_in_square_space(GtLinspaceManagement *spacemanager,
-                             const GtScoreHandler *scorehandler,
-                             GtUword *Ctab,
-                             const GtUchar *useq,
-                             GtUword ustart,
-                             GtUword ulen,
-                             const GtUchar *vseq,
-                             GtUword vstart,
-                             GtUword vlen,
-                             GtUword rowoffset);
+GtUword gt_squarealign_ctab(GtLinspaceManagement *spacemanager,
+                            const GtScoreHandler *scorehandler,
+                            GtUword *Ctab,
+                            const GtUchar *useq,
+                            GtUword ustart,
+                            GtUword ulen,
+                            const GtUchar *vseq,
+                            GtUword vstart,
+                            GtUword vlen,
+                            GtUword rowoffset);
 
 /* Computes a local alignment with linear gapcosts in square space. Use of this
    function requires an initialised <scorehandler> with score values, the target
@@ -105,7 +106,7 @@ GtUword ctab_in_square_space(GtLinspaceManagement *spacemanager,
    and <vlen>. An initialised <spacemanager> is required to use this function in
    linear space context, in any other case it can be NULL. Returns score
    value of local alignment. */
-GtWord alignment_in_square_space_local_generic(GtLinspaceManagement
+GtWord  gt_squarealign_calculate_local_generic(GtLinspaceManagement
                                                *spacemanager,
                                                GtAlignment *align,
                                                const GtUchar *useq,
@@ -125,7 +126,7 @@ GtWord alignment_in_square_space_local_generic(GtLinspaceManagement
    <gapscore>. An initialised <spacemanager> is required to use this function in
    linear space context, in any other case it can be NULL. Returns score
    value of local alignment. */
-GtWord alignment_in_square_space_local(GtLinspaceManagement *spacemanager,
+GtWord  gt_squarealign_calculate_local(GtLinspaceManagement *spacemanager,
                                        GtAlignment *align,
                                        const GtUchar *useq,
                                        GtUword ustart,
diff --git a/src/extended/type_node.c b/src/extended/type_node.c
index 8dce9d0..ca5038f 100644
--- a/src/extended/type_node.c
+++ b/src/extended/type_node.c
@@ -109,7 +109,7 @@ void gt_type_node_add_is_a_vertex(GtTypeNode *src, const GtTypeNode *dst)
 
    That is, if X is_a Y and Z part_of Y, then Z part_of X.
 
-   The method maintains a <node_stack> containing the inital <node> and all
+   The method maintains a <node_stack> containing the initial <node> and all
    its 'is_a' children.
 
    Example from Sequence Ontology (we are looking at mRNA and exon, see
diff --git a/src/gth/align_protein.c b/src/gth/align_protein.c
index 258d4f3..410d447 100644
--- a/src/gth/align_protein.c
+++ b/src/gth/align_protein.c
@@ -188,7 +188,7 @@ static const char* showretracenames(Retrace retrace)
   return retracenames[retrace];
 }
 
-/* the following function initalizes the input structure */
+/* the following function initializes the input structure */
 static void initinput(GthAlignInputProtein *input,
                       const unsigned char *ref_seq_orig,
                       GthInput *gth_input)
diff --git a/src/gth/intermediate.c b/src/gth/intermediate.c
index 71c18a0..3921e02 100644
--- a/src/gth/intermediate.c
+++ b/src/gth/intermediate.c
@@ -515,7 +515,7 @@ int gt_parse_intermediate_output(GthInput *input,
     if (XML_Parse(parser, gt_str_get(line), gt_str_length(line), false) ==
         XML_STATUS_ERROR) {
       error = XML_GetErrorCode(parser);
-      gt_error_set(err, "an error occured parsing line "GT_WU
+      gt_error_set(err, "an error occurred parsing line "GT_WU
                    " of file \"%s\": %s",
                    parseinfo.linenumber, outputfilename,
                    XML_ErrorString(error));
@@ -530,7 +530,7 @@ int gt_parse_intermediate_output(GthInput *input,
     /* finish parsing */
     if (XML_Parse(parser, NULL, 0, true) == XML_STATUS_ERROR) {
       error = XML_GetErrorCode(parser);
-      gt_error_set(err, "an error occured while finishing the parsing of file "
+      gt_error_set(err, "an error occurred while finishing the parsing of file "
                         "\"%s\": %s", outputfilename, XML_ErrorString(error));
       had_err = -1;
     }
diff --git a/src/gth/parse_options.c b/src/gth/parse_options.c
index c05d77d..84bd8b4 100644
--- a/src/gth/parse_options.c
+++ b/src/gth/parse_options.c
@@ -381,7 +381,7 @@ GtOPrval gth_parse_options(GthCallInfo *call_info, GthInput *input,
   gt_option_parser_add_option(op, optverbose);
 
   /* -verboseseqs */
-  optverboseseqs = gt_option_new_bool("verboseseqs", "show additonal sequence "
+  optverboseseqs = gt_option_new_bool("verboseseqs", "show additional sequence "
                                    "information\n(for debugging purposes)",
                                    &call_info->out->verboseseqs, false);
   gt_option_is_development_option(optverboseseqs);
diff --git a/src/gtlua/region_mapping_lua.c b/src/gtlua/region_mapping_lua.c
index f356216..5565f42 100644
--- a/src/gtlua/region_mapping_lua.c
+++ b/src/gtlua/region_mapping_lua.c
@@ -1,5 +1,6 @@
 /*
   Copyright (c) 2008 Gordon Gremme <gordon at gremme.org>
+  Copyright (c) 2016 Sascha Steinbiss <sascha at steinbiss.name>
   Copyright (c) 2008 Center for Bioinformatics, University of Hamburg
 
   Permission to use, copy, modify, and distribute this software for any
@@ -16,9 +17,11 @@
 */
 
 #include "lauxlib.h"
+#include "core/ma_api.h"
 #include "extended/luahelper.h"
 #include "extended/region_mapping.h"
 #include "gtlua/region_mapping_lua.h"
+#include "gtlua/range_lua.h"
 #include "gtlua/gtcore_lua.h"
 
 static int region_mapping_lua_new_seqfile_matchdesc(lua_State *L)
@@ -84,6 +87,109 @@ static int region_mapping_lua_new_seqfile(lua_State *L)
   return region_mapping_lua_new_seqfile_matchdesc(L);
 }
 
+static int region_mapping_lua_get_sequence_length(lua_State *L)
+{
+  GtRegionMapping **region_mapping;
+  GtError *err;
+  GtStr *seqidstr;
+  GtUword length;
+  const char *seqid;
+  int had_err = 0;
+  gt_assert(L);
+  region_mapping = check_region_mapping(L, 1);
+  seqid = luaL_checkstring(L, 2);
+  seqidstr = gt_str_new_cstr(seqid);
+  err = gt_error_new();
+  had_err = gt_region_mapping_get_sequence_length(*region_mapping, &length,
+                                                  seqidstr, err);
+  gt_str_delete(seqidstr);
+  if (had_err)
+    return gt_lua_error(L, err);
+  gt_error_delete(err);
+  lua_pushnumber(L, length);
+  return 1;
+}
+
+static int region_mapping_lua_get_sequence(lua_State *L)
+{
+  GtRegionMapping **region_mapping;
+  GtError *err;
+  GtStr *seqidstr;
+  char *result;
+  GtUword start, end;
+  const char *seqid;
+  int had_err = 0;
+  gt_assert(L);
+  region_mapping = check_region_mapping(L, 1);
+  seqid = luaL_checkstring(L, 2);
+  start = luaL_checknumber(L, 3);
+  end = luaL_checknumber(L, 4);
+  luaL_argcheck(L, start > 0, 3, "must be > 0");
+  luaL_argcheck(L, end > 0, 4, "must be > 0");
+  luaL_argcheck(L, start <= end, 3, "must be <= endpos");
+  seqidstr = gt_str_new_cstr(seqid);
+  err = gt_error_new();
+  had_err = gt_region_mapping_get_sequence(*region_mapping, &result, seqidstr,
+                                           start, end, err);
+  gt_str_delete(seqidstr);
+  if (had_err)
+    return gt_lua_error(L, err);
+  gt_error_delete(err);
+  lua_pushstring(L, result);
+  gt_free(result);
+  return 1;
+}
+
+static int region_mapping_lua_get_description(lua_State *L)
+{
+  GtRegionMapping **region_mapping;
+  GtError *err;
+  GtStr *seqidstr, *descstr = NULL;
+  const char *seqid;
+  int had_err = 0;
+  gt_assert(L);
+  region_mapping = check_region_mapping(L, 1);
+  seqid = luaL_checkstring(L, 2);
+  seqidstr = gt_str_new_cstr(seqid);
+  descstr = gt_str_new();
+  err = gt_error_new();
+  had_err = gt_region_mapping_get_description(*region_mapping, descstr,
+                                              seqidstr, err);
+  gt_str_delete(seqidstr);
+  if (had_err)
+    return gt_lua_error(L, err);
+  gt_error_delete(err);
+  lua_pushstring(L, gt_str_get(descstr));
+  gt_str_delete(descstr);
+  return 1;
+}
+
+static int region_mapping_lua_get_md5_fingerprint(lua_State *L)
+{
+  GtRegionMapping **region_mapping;
+  GtError *err;
+  GtStr *seqidstr;
+  GtRange *rng = NULL;
+  GtUword offset;
+  const char *md5 = NULL, *seqid;
+  gt_assert(L);
+  region_mapping = check_region_mapping(L, 1);
+  seqid = luaL_checkstring(L, 2);
+  if (lua_gettop(L) == 3)
+    rng = check_range(L, 3);
+  seqidstr = gt_str_new_cstr(seqid);
+  err = gt_error_new();
+  md5 = gt_region_mapping_get_md5_fingerprint(*region_mapping, seqidstr,
+                                              rng, &offset, err);
+  gt_str_delete(seqidstr);
+  if (!md5)
+    return gt_lua_error(L, err);
+  gt_error_delete(err);
+  lua_pushstring(L, md5);
+  lua_pushnumber(L, offset);
+  return 2;
+}
+
 static int region_mapping_lua_delete(lua_State *L)
 {
   GtRegionMapping **region_mapping;
@@ -113,6 +219,14 @@ static const struct luaL_Reg region_mapping_lib_f [] = {
   { NULL, NULL }
 };
 
+static const struct luaL_Reg region_mapping_lib_m [] = {
+  { "get_sequence_length", region_mapping_lua_get_sequence_length },
+  { "get_sequence", region_mapping_lua_get_sequence },
+  { "get_description", region_mapping_lua_get_description },
+  { "get_md5_fingerprint", region_mapping_lua_get_md5_fingerprint },
+  { NULL, NULL }
+};
+
 int gt_lua_open_region_mapping(lua_State *L)
 {
 #ifndef NDEBUG
@@ -130,8 +244,9 @@ int gt_lua_open_region_mapping(lua_State *L)
   lua_pushstring(L, "__gc");
   lua_pushcfunction(L, region_mapping_lua_delete);
   lua_settable(L, -3);
-  lua_pop(L, 1);
   /* register functions */
+  luaL_register(L, NULL, region_mapping_lib_m);
+  lua_pop(L, 1);
   luaL_register(L, "gt", region_mapping_lib_f);
   lua_pop(L, 1);
   gt_assert(lua_gettop(L) == stack_size);
diff --git a/src/gtlua/region_mapping_lua.h b/src/gtlua/region_mapping_lua.h
index 4624b15..69e0134 100644
--- a/src/gtlua/region_mapping_lua.h
+++ b/src/gtlua/region_mapping_lua.h
@@ -1,5 +1,6 @@
 /*
   Copyright (c) 2008 Gordon Gremme <gordon at gremme.org>
+  Copyright (c) 2016 Sascha Steinbiss <sascha at steinbiss.name>
   Copyright (c) 2008 Center for Bioinformatics, University of Hamburg
 
   Permission to use, copy, modify, and distribute this software for any
@@ -26,6 +27,23 @@
    -- Returns a new region mapping which maps everything onto sequence file
    -- <seqfile>.
    function region_mapping_new_seqfile(seqfile)
+
+   -- Use <region_mapping> to extract the sequence from <start> to <end> of the
+   -- given sequence ID <seqid>.
+   function region_mapping:get_sequence(seqid, start, end)
+
+   -- Use <region_mapping> to retrieve the sequence length of the given
+   sequence ID <seqid>.
+   function region_mapping:get_sequence_length(seqid)
+
+   -- Use <region_mapping> to get the description of the MD5 sequence ID
+   -- <seqid>.
+   function region_mapping:get_description(seqid)
+
+   -- Use <region_mapping> to return the MD5 fingerprint of the sequence with
+   -- the sequence ID <seqid> and its corresponding <range> (optional).
+   -- Returns both the MD5 fingerprint as a string and the offset.
+   function region_mapping:get_md5_fingerprint(seqid, range)
 */
 int gt_lua_open_region_mapping(lua_State*);
 
diff --git a/src/gtr.c b/src/gtr.c
index a114cc0..0ddbb91 100644
--- a/src/gtr.c
+++ b/src/gtr.c
@@ -24,7 +24,7 @@
 #include "lauxlib.h"
 #include "lualib.h"
 #include "lfs.h"
-#include "lpeg.h"
+#include "lua-lpeg.h"
 #include "md5.h"
 #include "ldes56.h"
 #include "core/compat.h"
@@ -114,13 +114,15 @@ GtR* gtr_new(GtError *err)
     lua_call(gtr->L, 1, 0);   /* open LPeg library */
     lua_pushcfunction(gtr->L, luaopen_md5_core);
     lua_pushstring(gtr->L, "md5");
-    lua_call(gtr->L, 1, 0);   /* open MD5 library */
+    lua_call(gtr->L, 1, 1);   /* open MD5 library */
+    lua_setglobal(gtr->L, "md5"); /* now it's our responsibility to bind */
     lua_pushcfunction(gtr->L, luaopen_lfs);
     lua_pushstring(gtr->L, "lfs");
     lua_call(gtr->L, 1, 0);   /* open Lua filesystem */
     lua_pushcfunction(gtr->L, luaopen_des56);
     lua_pushstring(gtr->L, "des56");
-    lua_call(gtr->L, 1, 0);   /* open DES56 library */
+    lua_call(gtr->L, 1, 1);   /* open DES56 library */
+    lua_setglobal(gtr->L, "des56"); /* now it's our responsibility to bind */
     had_err = gt_lua_set_modules_path(gtr->L, err);
   }
 #ifndef WITHOUT_CAIRO
diff --git a/src/interactive.c b/src/interactive.c
index 2089bc7..ae50a6a 100644
--- a/src/interactive.c
+++ b/src/interactive.c
@@ -152,11 +152,12 @@ static void dotty(lua_State *L) {
     if (status == 0 && lua_gettop(L) > 0) {  /* any result to print? */
       lua_getglobal(L, "print");
       lua_insert(L, 1);
-      if (lua_pcall(L, lua_gettop(L)-1, 0, 0) != 0)
+      if (lua_pcall(L, lua_gettop(L)-1, 0, 0) != 0) {
         fprintf(stderr, "%s\n", lua_pushfstring(L,
                                "error calling " LUA_QL("print") " (%s)",
                                lua_tostring(L, -1)));
         fflush(stderr);
+      }
     }
   }
   lua_settop(L, 0);  /* clear stack */
diff --git a/src/ltr/ltrdigest_file_out_stream.c b/src/ltr/ltrdigest_file_out_stream.c
index 1afbf15..e57407e 100644
--- a/src/ltr/ltrdigest_file_out_stream.c
+++ b/src/ltr/ltrdigest_file_out_stream.c
@@ -257,14 +257,14 @@ static int write_pdom(GtLTRdigestFileOutStream *ls, GtArray *pdoms,
 
   (void) snprintf(buffer, (size_t) (GT_MAXFILENAMELEN-1), "%s_pdom_%s.fas",
                   ls->fileprefix, pdomname);
-  seqfile = gt_file_xopen(buffer, "w+");
+  seqfile = gt_file_xopen(buffer, "a+");
 
   /* get protein alignment output file */
   if (ls->write_pdom_alignments)
   {
     (void) snprintf(buffer, (size_t) (GT_MAXFILENAMELEN-1), "%s_pdom_%s.ali",
                     ls->fileprefix, pdomname);
-    alifile = gt_file_xopen(buffer, "w+");
+    alifile = gt_file_xopen(buffer, "a+");
   }
 
   /* get amino acid sequence output file */
@@ -273,7 +273,7 @@ static int write_pdom(GtLTRdigestFileOutStream *ls, GtArray *pdoms,
     (void) snprintf(buffer, (size_t) (GT_MAXFILENAMELEN-1),
                     "%s_pdom_%s_aa.fas",
                     ls->fileprefix, pdomname);
-    aafile = gt_file_xopen(buffer, "w+");
+    aafile = gt_file_xopen(buffer, "a+");
   }
 
   if (gt_array_size(pdoms) > 1UL)
diff --git a/src/match/declare-readfunc.h b/src/match/declare-readfunc.h
new file mode 100644
index 0000000..c1c6b30
--- /dev/null
+++ b/src/match/declare-readfunc.h
@@ -0,0 +1,61 @@
+/*
+  Copyright (c) 2016 Stefan Kurtz <kurtz at zbh.uni-hamburg.de>
+  Copyright (c) 2016 Joerg Winkler <j.winkler at posteo.de>
+  Copyright (c) 2016 Center for Bioinformatics, University of Hamburg
+
+  Permission to use, copy, modify, and distribute this software for any
+  purpose with or without fee is hereby granted, provided that the above
+  copyright notice and this permission notice appear in all copies.
+
+  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
+
+#ifndef DECLARE_READFUNC_H
+#define DECLARE_READFUNC_H
+
+#include <stdio.h>
+#include "core/unused_api.h"
+
+#define FILEBUFFERSIZE 4096
+
+#define DECLAREBufferedfiletype(TYPE)\
+        typedef struct\
+        {\
+          unsigned int nextfree,\
+                       nextread;\
+          TYPE *bufferedfilespace;\
+          FILE *fp;\
+        } GtBufferedfile_ ## TYPE
+
+#define DECLAREREADFUNCTION(TYPE)\
+        GT_UNUSED static int gt_readnextfromstream_ ## TYPE (TYPE *val,\
+                                                  GtBufferedfile_ ## TYPE *buf)\
+        {\
+          if (buf->nextread >= buf->nextfree)\
+          {\
+            buf->nextfree = (unsigned int) fread(buf->bufferedfilespace,\
+                                                 sizeof (TYPE),\
+                                                 (size_t) FILEBUFFERSIZE,\
+                                                 buf->fp);\
+            if (ferror(buf->fp))\
+            {\
+              fprintf(stderr,"error when trying to read next %s",#TYPE);\
+              exit(GT_EXIT_PROGRAMMING_ERROR);\
+            }\
+            buf->nextread = 0;\
+            if (buf->nextfree == 0)\
+            {\
+              return 0;\
+            }\
+          }\
+          *val = buf->bufferedfilespace[buf->nextread++];\
+          return 1;\
+        }
+
+#endif
diff --git a/src/match/diagbandseed.c b/src/match/diagbandseed.c
index 98e7112..d2a0425 100644
--- a/src/match/diagbandseed.c
+++ b/src/match/diagbandseed.c
@@ -1,35 +1,39 @@
 /*
- Copyright (c) 2015 Joerg Winkler <joerg.winkler at studium.uni-hamburg.de>
- Copyright (c) 2015 Center for Bioinformatics, University of Hamburg
-
- Permission to use, copy, modify, and distribute this software for any
- purpose with or without fee is hereby granted, provided that the above
- copyright notice and this permission notice appear in all copies.
-
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
+  Copyright (c) 2015-2016 Joerg Winkler <j.winkler at posteo.de>
+  Copyright (c) 2015-2016 Center for Bioinformatics, University of Hamburg
+
+  Permission to use, copy, modify, and distribute this software for any
+  purpose with or without fee is hereby granted, provided that the above
+  copyright notice and this permission notice appear in all copies.
+
+  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
 
 #include <limits.h>
 #include <stddef.h>
 #include <stdio.h>
 #include <string.h>
+#include "core/arraydef.h"
 #include "core/codetype.h"
 #include "core/complement.h"
+#include "core/cstr_api.h"
 #include "core/encseq.h"
+#include "core/fa.h"
+#include "core/fileutils_api.h"
+#include "core/ma_api.h"
 #include "core/minmax.h"
 #include "core/radix_sort.h"
-#include "core/range_api.h"
 #include "core/timer_api.h"
 #include "core/warning_api.h"
-#include "core/arraydef.h"
+#include "core/xansi_api.h"
+#include "match/declare-readfunc.h"
 #include "match/diagbandseed.h"
-#include "match/ft-front-prune.h"
 #include "match/kmercodes.h"
 #include "match/querymatch.h"
 #include "match/querymatch-align.h"
@@ -37,7 +41,12 @@
 #include "match/sfx-mappedstr.h"
 #include "match/sfx-suffixer.h"
 
+#ifdef GT_THREADS_ENABLED
+#include "core/thread_api.h"
+#endif
+
 #define GT_DIAGBANDSEED_SEQNUM_UNDEF UINT_MAX
+/* #define GT_DIAGBANDSEED_SEEDHISTOGRAM 100 */
 
 typedef uint32_t GtDiagbandseedPosition;
 typedef uint32_t GtDiagbandseedSeqnum;
@@ -45,11 +54,15 @@ typedef uint32_t GtDiagbandseedScore;
 typedef struct GtDiagbandseedProcKmerInfo GtDiagbandseedProcKmerInfo;
 
 typedef struct {
-  GtCodetype code;            /* only sort criterion */
+  GtCodetype code;              /* only sort criterion */
   GtDiagbandseedSeqnum seqnum;
   GtDiagbandseedPosition endpos;
 } GtDiagbandseedKmerPos;
 
+GT_DECLAREARRAYSTRUCT(GtDiagbandseedKmerPos);
+DECLAREBufferedfiletype(GtDiagbandseedKmerPos);
+DECLAREREADFUNCTION(GtDiagbandseedKmerPos);
+
 typedef struct {
   GtDiagbandseedSeqnum bseqnum; /*  2nd important sort criterion */
   GtDiagbandseedSeqnum aseqnum; /* most important sort criterion */
@@ -59,9 +72,49 @@ typedef struct {
 
 GT_DECLAREARRAYSTRUCT(GtDiagbandseedSeedPair);
 
+struct GtDiagbandseedInfo {
+  GtEncseq *aencseq;
+  GtEncseq *bencseq;
+  GtUword maxfreq;
+  GtUword memlimit;
+  unsigned int seedlength;
+  bool norev;
+  bool nofwd;
+  GtRange *seedpairdistance;
+  bool verify;
+  bool verbose;
+  bool debug_kmer;
+  bool debug_seedpair;
+  bool use_kmerfile;
+  GtDiagbandseedExtendParams *extp;
+  GtUword anumseqranges;
+  GtUword bnumseqranges;
+};
+
+struct GtDiagbandseedExtendParams {
+  GtUword errorpercentage;
+  GtUword userdefinedleastlength;
+  GtUword logdiagbandwidth;
+  GtUword mincoverage;
+  unsigned int display_flag;
+  bool use_apos;
+  GtXdropscore xdropbelowscore;
+  bool extendgreedy;
+  bool extendxdrop;
+  GtUword maxalignedlendifference;
+  GtUword history_size;
+  GtUword perc_mat_history;
+  GtExtendCharAccess extend_char_access;
+  GtUword sensitivity;
+  double matchscore_bias;
+  bool weakends;
+  bool benchmark;
+  GtUword alignmentwidth;
+  bool always_polished_ends;
+};
+
 struct GtDiagbandseedProcKmerInfo {
-  GtDiagbandseedKmerPos *list;
-  GtUword numberofkmerscollected;
+  GtArrayGtDiagbandseedKmerPos *list;
   GtDiagbandseedSeqnum seqnum;
   GtDiagbandseedPosition endpos;
   const GtEncseq *encseq;
@@ -71,45 +124,168 @@ struct GtDiagbandseedProcKmerInfo {
   GtUword totallength;
   GtUword prev_separator;
   GtUword next_separator;
+  GtRange *specialrange;
 };
 
-/* Returns the position of the next separator following separatorpos.
-   If the end of encseq is reached, the position behind is returned. */
-static GtUword gt_diagbandseed_update_separatorpos(GtUword separatorpos,
+/* * * * * CONSTRUCTORS AND DESTRUCTORS * * * * */
+
+GtDiagbandseedInfo *gt_diagbandseed_info_new(GtEncseq *aencseq,
+                                             GtEncseq *bencseq,
+                                             GtUword maxfreq,
+                                             GtUword memlimit,
+                                             unsigned int seedlength,
+                                             bool norev,
+                                             bool nofwd,
+                                             GtRange *seedpairdistance,
+                                             bool verify,
+                                             bool verbose,
+                                             bool debug_kmer,
+                                             bool debug_seedpair,
+                                             bool use_kmerfile,
+                                             GtDiagbandseedExtendParams *extp,
+                                             GtUword anumseqranges,
+                                             GtUword bnumseqranges)
+{
+  GtDiagbandseedInfo *info = gt_malloc(sizeof *info);
+  info->aencseq = aencseq;
+  info->bencseq = bencseq;
+  info->maxfreq = maxfreq;
+  info->memlimit = memlimit;
+  info->seedlength = seedlength;
+  info->norev = norev;
+  info->nofwd = nofwd;
+  info->seedpairdistance = seedpairdistance;
+  info->verify = verify;
+  info->verbose = verbose;
+  info->debug_kmer = debug_kmer;
+  info->debug_seedpair = debug_seedpair;
+  info->use_kmerfile = use_kmerfile;
+  info->extp = extp;
+  info->anumseqranges = anumseqranges;
+  info->bnumseqranges = bnumseqranges;
+  return info;
+}
+
+void gt_diagbandseed_info_delete(GtDiagbandseedInfo *info)
+{
+  if (info != NULL) {
+    gt_free(info);
+  }
+}
+
+GtDiagbandseedExtendParams *gt_diagbandseed_extend_params_new(
+                                GtUword errorpercentage,
+                                GtUword userdefinedleastlength,
+                                GtUword logdiagbandwidth,
+                                GtUword mincoverage,
+                                unsigned int display_flag,
+                                bool use_apos,
+                                GtXdropscore xdropbelowscore,
+                                bool extendgreedy,
+                                bool extendxdrop,
+                                GtUword maxalignedlendifference,
+                                GtUword history_size,
+                                GtUword perc_mat_history,
+                                GtExtendCharAccess extend_char_access,
+                                GtUword sensitivity,
+                                double matchscore_bias,
+                                bool weakends,
+                                bool benchmark,
+                                GtUword alignmentwidth,
+                                bool always_polished_ends)
+{
+  GtDiagbandseedExtendParams *extp = gt_malloc(sizeof *extp);
+  extp->errorpercentage = errorpercentage;
+  extp->userdefinedleastlength = userdefinedleastlength;
+  extp->logdiagbandwidth = logdiagbandwidth;
+  extp->mincoverage = mincoverage;
+  extp->display_flag = display_flag;
+  extp->use_apos = use_apos;
+  extp->xdropbelowscore = xdropbelowscore;
+  extp->extendgreedy = extendgreedy;
+  extp->extendxdrop = extendxdrop;
+  extp->maxalignedlendifference = maxalignedlendifference;
+  extp->history_size = history_size;
+  extp->perc_mat_history = perc_mat_history;
+  extp->extend_char_access = extend_char_access;
+  extp->sensitivity = sensitivity;
+  extp->matchscore_bias = matchscore_bias;
+  extp->weakends = weakends;
+  extp->benchmark = benchmark;
+  extp->alignmentwidth = alignmentwidth;
+  extp->always_polished_ends = always_polished_ends;
+  return extp;
+}
+
+void gt_diagbandseed_extend_params_delete(GtDiagbandseedExtendParams *extp)
+{
+  if (extp != NULL) {
+    gt_free(extp);
+  }
+}
+
+/* * * * * K-MER LIST CREATION * * * * */
+
+/* Estimate the number of k-mers in the given encseq. */
+static GtUword gt_seed_extend_numofkmers(const GtEncseq *encseq,
+                                         unsigned int seedlength,
+                                         const GtRange *seqrange)
+{
+  GtUword lastpos, numofpos, subtract, ratioofspecial;
+
+  const GtUword totalnumofspecial = gt_encseq_specialcharacters(encseq),
+                totalnumofpos = gt_encseq_total_length(encseq),
+                firstpos = gt_encseq_seqstartpos(encseq, seqrange->start),
+                numofseq = gt_range_length(seqrange);
+  lastpos = (seqrange->end + 1 == gt_encseq_num_of_sequences(encseq)
+             ? totalnumofpos
+             : gt_encseq_seqstartpos(encseq, seqrange->end + 1) - 1);
+  gt_assert(lastpos >= firstpos);
+  numofpos = lastpos - firstpos;
+
+  subtract = MIN(seedlength - 1, gt_encseq_min_seq_length(encseq)) + 1;
+  gt_assert(numofpos + 1 >= numofseq * subtract);
+  ratioofspecial = MIN(totalnumofspecial * numofpos / totalnumofpos, numofpos);
+  return numofpos - MAX(numofseq * subtract - 1, ratioofspecial);
+}
+
+/* Returns the position of the next separator following specialrange.start.
+   If the end of the encseq is reached, the position behind is returned. */
+static GtUword gt_diagbandseed_update_separatorpos(GtRange *specialrange,
                                                    GtSpecialrangeiterator *sri,
                                                    const GtEncseq *encseq,
-                                                   GtUword totallength,
-                                                   GtReadmode readmode) {
-  if (sri != NULL) {
+                                                   GtReadmode readmode)
+{
+  gt_assert(sri != NULL && specialrange != NULL && encseq != NULL);
+  do {
     GtUword idx;
-    GtRange range;
-
-    gt_assert(encseq != NULL && separatorpos < totallength);
-    range.start = separatorpos;
-    range.end = separatorpos + 1;
-    while (gt_specialrangeiterator_next(sri, &range)) {
-      for (idx = range.start; idx < range.end; idx++) {
-        if (gt_encseq_position_is_separator(encseq, idx, readmode)) {
-          return idx;
-        }
+    for (idx = specialrange->start; idx < specialrange->end; idx++) {
+      if (gt_encseq_position_is_separator(encseq, idx, readmode)) {
+        specialrange->start = idx + 1;
+        return idx;
       }
     }
-  }
-  return totallength;
+  } while (gt_specialrangeiterator_next(sri, specialrange));
+  return gt_encseq_total_length(encseq);
 }
 
-/* Add given code and its seqnum and position to a list. */
+/* Add given code and its seqnum and position to a kmer list. */
 static void gt_diagbandseed_processkmercode(void *prockmerinfo,
                                             bool firstinrange,
                                             GtUword startpos,
                                             GtCodetype code)
 {
+  const GtUword array_incr = 256;
   GtDiagbandseedProcKmerInfo *pkinfo;
-  GtDiagbandseedKmerPos *kmerposptr;
+  GtDiagbandseedKmerPos *kmerposptr = NULL;
 
   gt_assert(prockmerinfo != NULL);
   pkinfo = (GtDiagbandseedProcKmerInfo *) prockmerinfo;
-  kmerposptr = pkinfo->list + pkinfo->numberofkmerscollected;
+  GT_GETNEXTFREEINARRAY(kmerposptr,
+                        pkinfo->list,
+                        GtDiagbandseedKmerPos,
+                        array_incr + 0.2 *
+                        pkinfo->list->allocatedGtDiagbandseedKmerPos);
 
   /* check separator positions and determine next seqnum and endpos */
   if (firstinrange) {
@@ -118,12 +294,11 @@ static void gt_diagbandseed_processkmercode(void *prockmerinfo,
       pkinfo->seqnum++;
       pkinfo->prev_separator = pkinfo->next_separator + 1;
       pkinfo->next_separator
-        = gt_diagbandseed_update_separatorpos(pkinfo->next_separator,
+        = gt_diagbandseed_update_separatorpos(pkinfo->specialrange,
                                               pkinfo->sri,
                                               pkinfo->encseq,
-                                              pkinfo->totallength,
                                               pkinfo->readmode);
-      gt_assert(pkinfo->next_separator > pkinfo->prev_separator);
+      gt_assert(pkinfo->next_separator >= pkinfo->prev_separator);
     }
     gt_assert(endpos >= pkinfo->prev_separator);
     gt_assert(startpos < pkinfo->next_separator);
@@ -137,17 +312,14 @@ static void gt_diagbandseed_processkmercode(void *prockmerinfo,
   }
 
   /* save k-mer code */
-  kmerposptr->code
-    = pkinfo->readmode == GT_READMODE_FORWARD
-        ? code
-        : gt_kmercode_reverse(code, pkinfo->seedlength);
+  kmerposptr->code = (pkinfo->readmode == GT_READMODE_FORWARD
+                      ? code : gt_kmercode_reverse(code, pkinfo->seedlength));
   /* save endpos and seqnum */
   gt_assert(pkinfo->endpos != UINT_MAX);
   kmerposptr->endpos = pkinfo->endpos;
   pkinfo->endpos = (pkinfo->readmode == GT_READMODE_FORWARD
                     ? pkinfo->endpos + 1 : pkinfo->endpos - 1);
   kmerposptr->seqnum = pkinfo->seqnum;
-  pkinfo->numberofkmerscollected++;
 }
 
 /* Uses GtKmercodeiterator for fetching the kmers. */
@@ -160,17 +332,17 @@ static void gt_diagbandseed_get_kmers_kciter(GtDiagbandseedProcKmerInfo *pkinfo)
 
   /* initialise GtKmercodeiterator */
   gt_assert(pkinfo != NULL);
+  position = gt_encseq_seqstartpos(pkinfo->encseq, pkinfo->seqnum);
   kc_iter = gt_kmercodeiterator_encseq_new(pkinfo->encseq,
                                            pkinfo->readmode,
                                            pkinfo->seedlength,
-                                           0);
+                                           position);
   if (pkinfo->seedlength <= pkinfo->totallength) {
     maxpos = pkinfo->totallength + 1 - pkinfo->seedlength;
   }
 
   /* iterate */
-  for (position = 0; position < maxpos; position++)
-  {
+  while (position < maxpos) {
     kmercode = gt_kmercodeiterator_encseq_next(kc_iter);
     if (!kmercode->definedspecialposition) {
       gt_diagbandseed_processkmercode((void *) pkinfo,
@@ -181,62 +353,255 @@ static void gt_diagbandseed_get_kmers_kciter(GtDiagbandseedProcKmerInfo *pkinfo)
     } else {
       firstinrange = true;
     }
+    position++;
   }
   gt_kmercodeiterator_delete(kc_iter);
 }
 
-/* Returns a GtDiagbandseedKmerPos list of k-mers from a given encseq. */
-static GtUword gt_diagbandseed_get_kmers(GtDiagbandseedKmerPos *list,
-                                         const GtEncseq *encseq,
-                                         unsigned int seedlength,
-                                         GtReadmode readmode)
+/* Return a sorted list of k-mers of given seedlength from specified encseq.
+ * Only sequences in seqrange will be taken into account.
+ * The caller is responsible for freeing the result. */
+GtArrayGtDiagbandseedKmerPos gt_diagbandseed_get_kmers(const GtEncseq *encseq,
+                                                       unsigned int seedlength,
+                                                       GtReadmode readmode,
+                                                       const GtRange *seqrange,
+                                                       bool debug_kmer,
+                                                       bool verbose,
+                                                       GtUword known_size,
+                                                       FILE *stream)
 {
+  GtArrayGtDiagbandseedKmerPos list;
   GtDiagbandseedProcKmerInfo pkinfo;
+  GtRadixsortinfo *rdxinfo;
+  GtRange specialrange;
+  GtTimer *timer = NULL;
+  GtUword listlen = known_size;
+
+  gt_assert(encseq != NULL);
+  gt_assert(seqrange->start <= seqrange->end);
+  gt_assert(seqrange->end < gt_encseq_num_of_sequences(encseq));
+
+  if (known_size == 0) {
+    listlen = gt_seed_extend_numofkmers(encseq, seedlength, seqrange);
+  }
+
+  if (verbose) {
+    timer = gt_timer_new();
+    fprintf(stream, "# Start fetching %u-mers (expect " GT_WU ")...\n",
+            seedlength, listlen);
+    gt_timer_start(timer);
+  }
 
-  gt_assert(list != NULL && encseq != NULL);
-  pkinfo.list = list;
-  pkinfo.numberofkmerscollected = 0;
-  pkinfo.seqnum = pkinfo.endpos = 0;
+  GT_INITARRAY(&list, GtDiagbandseedKmerPos);
+  GT_CHECKARRAYSPACEMULTI(&list, GtDiagbandseedKmerPos, listlen);
+
+  pkinfo.list = &list;
+  pkinfo.seqnum = seqrange->start;
+  pkinfo.endpos = 0;
   pkinfo.encseq = encseq;
   pkinfo.seedlength = seedlength;
   pkinfo.readmode = readmode;
-  pkinfo.totallength = gt_encseq_total_length(encseq);
-  pkinfo.sri = NULL;
-  if (gt_encseq_has_specialranges(encseq))
-  {
+  if (seqrange->end + 1 == gt_encseq_num_of_sequences(encseq)) {
+    pkinfo.totallength = gt_encseq_total_length(encseq);
+  } else {
+    /* start position of following sequence, minus separator position */
+    pkinfo.totallength = gt_encseq_seqstartpos(encseq, seqrange->end + 1) - 1;
+  }
+  pkinfo.prev_separator = gt_encseq_seqstartpos(encseq, seqrange->start);
+  if (gt_encseq_has_specialranges(encseq)) {
+    bool search = true;
     pkinfo.sri = gt_specialrangeiterator_new(encseq, true);
+    while (search && gt_specialrangeiterator_next(pkinfo.sri, &specialrange)) {
+      search = specialrange.end < pkinfo.prev_separator ? true : false;
+    }
+    specialrange.start = pkinfo.prev_separator;
+    pkinfo.specialrange = &specialrange;
+    pkinfo.next_separator
+      = gt_diagbandseed_update_separatorpos(pkinfo.specialrange,
+                                            pkinfo.sri,
+                                            pkinfo.encseq,
+                                            pkinfo.readmode);
+  } else {
+    pkinfo.sri = NULL;
+    pkinfo.specialrange = NULL;
+    pkinfo.next_separator = pkinfo.totallength;
   }
-  pkinfo.prev_separator = pkinfo.next_separator = 0;
-  pkinfo.next_separator
-    = gt_diagbandseed_update_separatorpos(pkinfo.next_separator,
-                                          pkinfo.sri,
-                                          encseq,
-                                          pkinfo.totallength,
-                                          readmode);
+
   if (gt_encseq_has_twobitencoding(encseq) && gt_encseq_wildcards(encseq) == 0)
   {
     /* Use fast access to encseq, requires 2bit-enc and absence of wildcards. */
-    getencseqkmers_twobitencoding(encseq,
-                                  readmode,
-                                  seedlength,
-                                  seedlength,
-                                  false,
-                                  gt_diagbandseed_processkmercode,
-                                  (void *) &pkinfo,
-                                  NULL,
-                                  NULL);
-  } else
-  {
+    getencseqkmers_twobitencoding_slice(encseq,
+                                        readmode,
+                                        seedlength,
+                                        seedlength,
+                                        false,
+                                        gt_diagbandseed_processkmercode,
+                                        (void *) &pkinfo,
+                                        NULL,
+                                        NULL,
+                                        pkinfo.prev_separator,
+                                        pkinfo.totallength);
+  } else {
     /* Use GtKmercodeiterator for encseq access */
     gt_diagbandseed_get_kmers_kciter(&pkinfo);
   }
-  if (gt_encseq_has_specialranges(encseq))
-  {
+  if (gt_encseq_has_specialranges(encseq)) {
     gt_specialrangeiterator_delete(pkinfo.sri);
   }
-  return pkinfo.numberofkmerscollected;
+  listlen = list.nextfreeGtDiagbandseedKmerPos;
+
+  /* reduce size of array to number of entries */
+  /* list.allocatedGtDiagbandseedKmerPos = listlen;
+  gt_realloc(list.spaceGtDiagbandseedKmerPos,
+             listlen * sizeof (GtDiagbandseedKmerPos)); */
+
+  if (debug_kmer) {
+    GtDiagbandseedKmerPos *idx = list.spaceGtDiagbandseedKmerPos;
+    GtDiagbandseedKmerPos *end = idx + listlen;
+    while (idx < end) {
+      fprintf(stream, "# Kmer (" GT_LX ",%d,%d)\n",
+              idx->code, idx->endpos, idx->seqnum);
+      idx++;
+    }
+  }
+
+  if (verbose) {
+    fprintf(stream, "# ...found " GT_WU " %u-mers ", listlen, seedlength);
+    gt_timer_show_formatted(timer, "in " GT_WD ".%06ld seconds.\n", stream);
+    gt_timer_start(timer);
+  }
+
+  /* sort list */
+  rdxinfo = gt_radixsort_new_ulongpair(listlen);
+  gt_radixsort_inplace_GtUwordPair((GtUwordPair *)
+                                   list.spaceGtDiagbandseedKmerPos,
+                                   listlen);
+  gt_radixsort_delete(rdxinfo);
+
+  if (verbose) {
+    fprintf(stream, "# ...sorted " GT_WU " %u-mers ", listlen, seedlength);
+    gt_timer_show_formatted(timer, "in " GT_WD ".%06ld seconds.\n", stream);
+    gt_timer_delete(timer);
+  }
+
+  return list;
+}
+
+/* * * * * SEEDPAIR LIST CREATION * * * * */
+
+typedef struct {
+  GtArrayGtDiagbandseedKmerPos segment;
+  bool at_end;
+  /* for list based iterator */
+  const GtArrayGtDiagbandseedKmerPos *origin_list;
+  const GtDiagbandseedKmerPos *listend;
+  GtDiagbandseedKmerPos *listptr;
+  /* for file based iterator */
+  GtBufferedfile_GtDiagbandseedKmerPos stream;
+  GtDiagbandseedKmerPos buffer;
+} GtDiagbandseedKmerIterator;
+
+static void gt_diagbandseed_kmer_iter_reset(GtDiagbandseedKmerIterator *ki)
+{
+  gt_assert(ki != NULL);
+  ki->at_end = false;
+  if (ki->origin_list != NULL) { /* list based */
+    ki->listptr = ki->origin_list->spaceGtDiagbandseedKmerPos;
+    ki->segment.spaceGtDiagbandseedKmerPos = ki->listptr;
+    if (ki->origin_list->nextfreeGtDiagbandseedKmerPos == 0) {
+      ki->at_end = true;
+    }
+  } else { /* file based */
+    int rval;
+    ki->stream.nextread = ki->stream.nextfree = 0;
+    rewind(ki->stream.fp);
+    rval = gt_readnextfromstream_GtDiagbandseedKmerPos(&ki->buffer,
+                                                       &ki->stream);
+    if (rval != 1) {
+      ki->at_end = true;
+    }
+  }
 }
 
+static GtDiagbandseedKmerIterator *gt_diagbandseed_kmer_iter_new_list(
+                                      const GtArrayGtDiagbandseedKmerPos *list)
+{
+  GtDiagbandseedKmerIterator *ki = gt_malloc(sizeof *ki);
+  GT_INITARRAY(&ki->segment, GtDiagbandseedKmerPos);
+  gt_assert(list != NULL);
+  ki->origin_list = list;
+  ki->listend = list->spaceGtDiagbandseedKmerPos +
+                list->nextfreeGtDiagbandseedKmerPos;
+  gt_diagbandseed_kmer_iter_reset(ki);
+  return ki;
+}
+
+static
+GtDiagbandseedKmerIterator *gt_diagbandseed_kmer_iter_new_file(FILE *fp)
+{
+  GtDiagbandseedKmerIterator *ki = gt_malloc(sizeof *ki);
+  GT_INITARRAY(&ki->segment, GtDiagbandseedKmerPos);
+  ki->origin_list = NULL;
+  ki->listend = ki->listptr = NULL;
+  gt_assert(fp != NULL);
+  ki->stream.fp = fp;
+  ki->stream.bufferedfilespace = gt_malloc(FILEBUFFERSIZE *
+                                           sizeof (GtDiagbandseedKmerPos));
+  gt_diagbandseed_kmer_iter_reset(ki);
+  return ki;
+}
+
+static void gt_diagbandseed_kmer_iter_delete(GtDiagbandseedKmerIterator *ki)
+{
+  if (ki != NULL) {
+    if (ki->origin_list == NULL) { /* file based */
+      gt_free(ki->stream.bufferedfilespace);
+      gt_fa_fclose(ki->stream.fp);
+      GT_FREEARRAY(&ki->segment, GtDiagbandseedKmerPos);
+    }
+    gt_free(ki);
+  }
+}
+
+static const GtArrayGtDiagbandseedKmerPos *gt_diagbandseed_kmer_iter_next(
+                                              GtDiagbandseedKmerIterator *ki)
+{
+  GtCodetype code;
+  if (ki->at_end) {
+    return NULL;
+  }
+  ki->segment.nextfreeGtDiagbandseedKmerPos = 0; /* reset segment list */
+
+  if (ki->origin_list != NULL) { /* list based */
+    ptrdiff_t segmentlen;
+    code = ki->listptr->code;
+    ki->segment.spaceGtDiagbandseedKmerPos = ki->listptr;
+    /* add element to segment list until code differs */
+    do {
+      ki->listptr++;
+    } while (ki->listptr < ki->listend && code == ki->listptr->code);
+    segmentlen = ki->listptr - ki->segment.spaceGtDiagbandseedKmerPos;
+    ki->segment.nextfreeGtDiagbandseedKmerPos += (GtUword)segmentlen;
+    if (ki->listptr >= ki->listend) {
+      ki->at_end = true;
+    }
+  } else { /* file based */
+    int rval;
+    code = ki->buffer.code;
+    /* fill segment list from file, stop when code changes */
+    do {
+      GT_STOREINARRAY(&ki->segment, GtDiagbandseedKmerPos, 20, ki->buffer);
+      rval = gt_readnextfromstream_GtDiagbandseedKmerPos(&ki->buffer,
+                                                         &ki->stream);
+    } while (rval == 1 && code == ki->buffer.code);
+    if (rval != 1) {
+      ki->at_end = true;
+    }
+  }
+  return &ki->segment;
+}
+
+/* Evaluate the results of the seed pair count histogram */
 static void gt_diagbandseed_processhistogram(GtUword *histogram,
                                              GtUword *maxfreq,
                                              GtUword maxgram,
@@ -283,78 +648,79 @@ static void gt_diagbandseed_processhistogram(GtUword *histogram,
   histogram[maxgram] = count;
 }
 
-/* Returns a GtDiagbandseedSeedPair list of equal kmers from lists a and b. */
+/* Returns a GtDiagbandseedSeedPair list of equal kmers from the iterators. */
 static void gt_diagbandseed_merge(GtArrayGtDiagbandseedSeedPair *mlist,
-                                  const GtDiagbandseedKmerPos *alist,
-                                  GtUword alen,
-                                  const GtDiagbandseedKmerPos *blist,
-                                  GtUword blen,
+                                  GtDiagbandseedKmerIterator *aiter,
+                                  GtDiagbandseedKmerIterator *biter,
                                   GtUword *maxfreq,
                                   GtUword maxgram,
                                   GtUword memlimit,
                                   GtUword *histogram,
-                                  unsigned int endposdiff,
+                                  GtRange *seedpairdistance,
                                   bool selfcomp,
+                                  bool alist_blist_id,
                                   GtUword len_used)
 {
-  const GtDiagbandseedKmerPos *aptr = alist, *bptr = blist, *aend, *bend;
+  const GtArrayGtDiagbandseedKmerPos *alist = NULL, *blist = NULL;
+  GtDiagbandseedKmerPos *asegment = NULL, *bsegment = NULL;
+  GtUword alen, blen;
   const GtUword array_incr = 256;
   GtUword frequency = 0;
 
-  gt_assert(alist != NULL && blist != NULL && maxfreq != NULL);
+  gt_assert(aiter != NULL && biter != NULL && maxfreq != NULL);
   gt_assert((histogram == NULL && mlist != NULL) ||
             (histogram != NULL && mlist == NULL));
-  aend = aptr + alen;
-  bend = bptr + blen;
-  while (aptr < aend && bptr < bend) {
-    if (aptr->code < bptr->code) {
-      aptr++;
-    } else if (aptr->code > bptr->code) {
-      bptr++;
+  alist = gt_diagbandseed_kmer_iter_next(aiter);
+  blist = gt_diagbandseed_kmer_iter_next(biter);
+  while (alist != NULL && blist != NULL) {
+    asegment = alist->spaceGtDiagbandseedKmerPos;
+    bsegment = blist->spaceGtDiagbandseedKmerPos;
+    alen = alist->nextfreeGtDiagbandseedKmerPos;
+    blen = blist->nextfreeGtDiagbandseedKmerPos;
+    if (asegment->code < bsegment->code) {
+      alist = gt_diagbandseed_kmer_iter_next(aiter);
+    } else if (asegment->code > bsegment->code) {
+      blist = gt_diagbandseed_kmer_iter_next(biter);
     } else {
-      /* equality: count frequency of current k-mer in both lists */
-      const GtDiagbandseedKmerPos *aiter, *biter;
-      for (aiter = aptr; aiter < aend && aiter->code == bptr->code; aiter++) {
-        /* nothing */
-      }
-      for (biter = bptr; biter < bend && biter->code == aptr->code; biter++) {
-        /* nothing */
-      }
-      frequency = (GtUword) MAX(aiter - aptr, biter - bptr);
+      frequency = MAX(alen, blen);
       if (frequency <= *maxfreq) {
         /* add all equal k-mers */
-        const GtDiagbandseedKmerPos *asegm_end = aiter, *bsegm_end = biter;
         frequency = MIN(maxgram, frequency);
         gt_assert(frequency > 0);
-        for (aiter = aptr; aiter < asegm_end; aiter++) {
-          for (biter = bptr; biter < bsegm_end; biter++) {
-            if (!selfcomp ||
-                aiter->seqnum < biter->seqnum ||
-                (aiter->seqnum == biter->seqnum &&
-                 aiter->endpos + endposdiff <= biter->endpos)) {
-              /* no duplicates from the same dataset */
-              if (histogram == NULL) {
-                /* save SeedPair in mlist */
-                GtDiagbandseedSeedPair *seedptr = NULL;
-                GT_GETNEXTFREEINARRAY(seedptr,
-                                      mlist,
-                                      GtDiagbandseedSeedPair,
-                                      array_incr + 0.2 *
-                                      mlist->allocatedGtDiagbandseedSeedPair);
-                seedptr->bseqnum = biter->seqnum;
-                seedptr->aseqnum = aiter->seqnum;
-                seedptr->bpos = biter->endpos;
-                seedptr->apos = aiter->endpos;
-              } else {
-                /* count seed pair frequency in histogram */
-                histogram[frequency - 1]++;
+        if (histogram != NULL && !selfcomp) {
+          histogram[frequency - 1] += alen * blen;
+        } else {
+          GtDiagbandseedKmerPos *aptr, *bptr;
+          for (aptr = asegment; aptr < asegment + alen; aptr++) {
+            for (bptr = bsegment; bptr < bsegment + blen; bptr++) {
+              if (!selfcomp || aptr->seqnum < bptr->seqnum ||
+                  (aptr->seqnum == bptr->seqnum &&
+                   aptr->endpos + seedpairdistance->start <= bptr->endpos &&
+                   aptr->endpos + seedpairdistance->end >= bptr->endpos)) {
+                /* no duplicates from the same dataset */
+                if (histogram == NULL) {
+                  /* save SeedPair in mlist */
+                  GtDiagbandseedSeedPair *seedptr = NULL;
+                  GT_GETNEXTFREEINARRAY(seedptr,
+                                        mlist,
+                                        GtDiagbandseedSeedPair,
+                                        array_incr + 0.2 *
+                                        mlist->allocatedGtDiagbandseedSeedPair);
+                  seedptr->bseqnum = bptr->seqnum;
+                  seedptr->aseqnum = aptr->seqnum;
+                  seedptr->bpos = bptr->endpos;
+                  seedptr->apos = aptr->endpos;
+                } else {
+                  /* count seed pair frequency in histogram */
+                  histogram[frequency - 1]++;
+                }
               }
             }
           }
         }
       } /* else: ignore all equal elements */
-      aptr = aiter;
-      bptr = biter;
+      alist = gt_diagbandseed_kmer_iter_next(aiter);
+      blist = gt_diagbandseed_kmer_iter_next(biter);
     }
   }
   if (histogram != NULL) {
@@ -362,24 +728,32 @@ static void gt_diagbandseed_merge(GtArrayGtDiagbandseedSeedPair *mlist,
                                      maxfreq,
                                      maxgram,
                                      memlimit,
-                                     len_used * sizeof *alist,
-                                     alist == blist);
+                                     len_used * sizeof (GtDiagbandseedKmerPos),
+                                     alist_blist_id);
   }
 }
 
 /* Verify seed pairs in the original sequences */
-int gt_diagbandseed_verify(const GtEncseq *aencseq,
-                           const GtEncseq *bencseq,
-                           const GtArrayGtDiagbandseedSeedPair *mlist,
-                           unsigned int seedlength,
-                           bool reverse,
-                           GtError *err) {
+static int gt_diagbandseed_verify(const GtEncseq *aencseq,
+                                  const GtEncseq *bencseq,
+                                  GtArrayGtDiagbandseedSeedPair *mlist,
+                                  unsigned int seedlength,
+                                  bool reverse,
+                                  bool verbose,
+                                  FILE *stream,
+                                  GtError *err) {
+  GtTimer *timer = gt_timer_new();
   GtDiagbandseedSeedPair *curr_sp, *max_sp;
   char *buf1 = gt_malloc(3 * (seedlength + 1) * sizeof *buf1);
   char *buf2 = buf1 + 1 + seedlength;
   char *buf3 = buf2 + 1 + seedlength;
   buf1[seedlength] = buf2[seedlength] = buf3[seedlength] = '\0';
 
+  if (verbose) {
+    fprintf(stream, "# Start verifying seed pairs...\n");
+    gt_timer_start(timer);
+  }
+
   gt_assert(mlist != NULL && aencseq != NULL && bencseq != NULL);
   curr_sp = mlist->spaceGtDiagbandseedSeedPair;
   max_sp = curr_sp + mlist->nextfreeGtDiagbandseedSeedPair;
@@ -399,6 +773,7 @@ int gt_diagbandseed_verify(const GtEncseq *aencseq,
                      curr_sp->aseqnum, curr_sp->bseqnum, curr_sp->apos,
                      curr_sp->bpos, buf1, buf2);
         gt_free(buf1);
+        gt_timer_delete(timer);
         return -1;
       }
     } else {
@@ -416,82 +791,262 @@ int gt_diagbandseed_verify(const GtEncseq *aencseq,
                      curr_sp->aseqnum, curr_sp->bseqnum, curr_sp->apos,
                      curr_sp->bpos, buf1, buf3);
         gt_free(buf1);
+        gt_timer_delete(timer);
         return -1;
       }
     }
     curr_sp++;
   }
+  if (verbose) {
+    fprintf(stream, "# ...successfully verified each seed pair in ");
+    gt_timer_show_formatted(timer, GT_WD ".%06ld seconds.\n", stream);
+  }
   gt_free(buf1);
+  gt_timer_delete(timer);
   return 0;
 }
 
+/* Return estimated length of mlist, and maxfreq w.r.t. the given memlimit */
+static int gt_diagbandseed_get_mlen_maxfreq(GtUword *mlen,
+                                            GtUword *maxfreq,
+                                            GtDiagbandseedKmerIterator *aiter,
+                                            GtDiagbandseedKmerIterator *biter,
+                                            GtUword memlimit,
+                                            GtRange *seedpairdistance,
+                                            GtUword len_used,
+                                            bool selfcomp,
+                                            bool alist_blist_id,
+                                            bool verbose,
+                                            FILE *stream,
+                                            GtError *err)
+{
+  const GtUword maxgram = MIN(*maxfreq, 8190) + 1; /* Cap on k-mer count */
+  GtUword *histogram = NULL;
+  GtTimer *timer = NULL;
+  int had_err = 0;
+
+  if (memlimit == GT_UWORD_MAX) {
+    return 0; /* no histogram calculation */
+  }
+
+  if (verbose) {
+    timer = gt_timer_new();
+    fprintf(stream, "# Start calculating k-mer frequency histogram...\n");
+    gt_timer_start(timer);
+  }
+
+  /* build histogram; histogram[maxgram] := estimation for mlen */
+  histogram = gt_calloc(maxgram + 1, sizeof *histogram);
+  gt_diagbandseed_merge(NULL, /* mlist not needed: just count */
+                        aiter,
+                        biter,
+                        maxfreq,
+                        maxgram,
+                        memlimit,
+                        histogram,
+                        seedpairdistance,
+                        selfcomp,
+                        alist_blist_id,
+                        len_used);
+  *mlen = histogram[maxgram];
+  gt_free(histogram);
+
+  if (verbose) {
+    gt_timer_show_formatted(timer,
+                            "# ...finished in " GT_WD ".%06ld seconds.\n",
+                            stream);
+    gt_timer_delete(timer);
+  }
+
+  /* check maxfreq value */
+  if (*maxfreq == 0 || (*maxfreq == 1 && alist_blist_id)) {
+    gt_error_set(err,
+                 "option -memlimit too strict: need at least " GT_WU "MB",
+                 (*mlen >> 20) + 1);
+    *mlen = 0;
+    had_err = -1;
+  } else if (verbose) {
+    if (*maxfreq == GT_UWORD_MAX) {
+      fprintf(stream, "# Disable k-mer maximum frequency, ");
+    } else {
+      fprintf(stream, "# Set k-mer maximum frequency to " GT_WU ", ", *maxfreq);
+    }
+    fprintf(stream, "expect " GT_WU " seed pairs.\n", *mlen);
+  } else if (*maxfreq <= 5) {
+    gt_warning("Only k-mers occurring <= " GT_WU " times will be considered, "
+               "due to small memlimit.", *maxfreq);
+  }
+
+  return had_err;
+}
+
+/* Return a sorted list of SeedPairs from given Kmer-Iterators.
+ * Parameter known_size > 0 can be given to allocate the memory beforehand.
+ * The caller is responsible for freeing the result. */
+static GtArrayGtDiagbandseedSeedPair gt_diagbandseed_get_seedpairs(
+                                  GtDiagbandseedKmerIterator *aiter,
+                                  GtDiagbandseedKmerIterator *biter,
+                                  GtUword maxfreq,
+                                  GtUword known_size,
+                                  GtRange *seedpairdistance,
+                                  bool selfcomp,
+                                  bool debug_seedpair,
+                                  bool verbose,
+                                  FILE *stream)
+{
+  GtArrayGtDiagbandseedSeedPair mlist;
+  GtTimer *timer = NULL;
+  GtUword mlen;
+
+  if (verbose) {
+    timer = gt_timer_new();
+    if (known_size > 0) {
+      fprintf(stream, "# Start building " GT_WU " seed pairs...\n",
+                      known_size);
+    } else {
+      fprintf(stream, "# Start building seed pairs...\n");
+    }
+    gt_timer_start(timer);
+  }
+
+  /* allocate mlist space according to seed pair count */
+  GT_INITARRAY(&mlist, GtDiagbandseedSeedPair);
+  if (known_size > 0) {
+    GT_CHECKARRAYSPACEMULTI(&mlist, GtDiagbandseedSeedPair, known_size);
+  }
+
+  /* create mlist */
+  gt_diagbandseed_merge(&mlist,
+                        aiter,
+                        biter,
+                        &maxfreq,
+                        GT_UWORD_MAX, /* maxgram not needed */
+                        GT_UWORD_MAX, /* memlimit not needed */
+                        NULL, /* histogram not needed: save seed pairs */
+                        seedpairdistance,
+                        selfcomp,
+                        false, /* not needed */
+                        0); /* len_used not needed */
+  mlen = mlist.nextfreeGtDiagbandseedSeedPair;
+
+  if (verbose) {
+    fprintf(stream, "# ...collected " GT_WU " seed pairs ", mlen);
+    gt_timer_show_formatted(timer, "in " GT_WD ".%06ld seconds.\n", stream);
+  }
+
+  /* sort mlist */
+  if (mlen > 0) {
+    GtDiagbandseedSeedPair *mspace = mlist.spaceGtDiagbandseedSeedPair;
+    GtRadixsortinfo *rdxinfo;
+
+    if (verbose) {
+      gt_timer_start(timer);
+    }
+
+    rdxinfo = gt_radixsort_new_uint64keypair(mlen);
+    gt_radixsort_inplace_Gtuint64keyPair((Gtuint64keyPair*) mspace, mlen);
+    gt_radixsort_delete(rdxinfo);
+
+    if (verbose) {
+      fprintf(stream, "# ...sorted " GT_WU " seed pairs in ", mlen);
+      gt_timer_show_formatted(timer, GT_WD ".%06ld seconds.\n", stream);
+    }
+
+    if (debug_seedpair) {
+      GtDiagbandseedSeedPair *curr_sp;
+      for (curr_sp = mspace; curr_sp < mspace + mlen; curr_sp++) {
+        fprintf(stream, "# SeedPair (%d,%d,%d,%d)\n", curr_sp->aseqnum,
+                curr_sp->bseqnum, curr_sp->apos, curr_sp->bpos);
+      }
+    }
+  }
+
+  if (verbose) {
+    gt_timer_delete(timer);
+  }
+  return mlist;
+}
+
+/* * * * * SEED EXTENSION * * * * */
+
 /* start seed extension for seed pairs in mlist */
-static GtUword gt_diagbandseed_process_seeds(const GtEncseq *aencseq,
-                                  const GtEncseq *bencseq,
-                                  const GtArrayGtDiagbandseedSeedPair *mlist,
-                                  GtGreedyextendmatchinfo *extendgreedyinfo,
-                                  GtXdropmatchinfo *extendxdropinfo,
-                                  GtQuerymatchoutoptions *querymatchoutopt,
-                                  bool seed_display,
-                                  unsigned int seedlength,
-                                  GtUword errorpercentage,
-                                  GtUword userdefinedleastlength,
-                                  GtUword logdiagbandwidth,
-                                  GtUword mincoverage,
-                                  GtUword amaxlen,
-                                  GtUword bmaxlen,
-                                  bool reverse)
+static void gt_diagbandseed_process_seeds(GtArrayGtDiagbandseedSeedPair *mlist,
+                                          const GtDiagbandseedExtendParams *arg,
+                                          void *processinfo,
+                                          GtQuerymatchoutoptions *querymoutopt,
+                                          const GtEncseq *aencseq,
+                                          const GtEncseq *bencseq,
+                                          unsigned int seedlength,
+                                          bool reverse,
+                                          bool verbose,
+                                          FILE *stream)
 {
   GtDiagbandseedScore *score = NULL;
   GtDiagbandseedPosition *lastp = NULL;
   GtExtendSelfmatchRelativeFunc extend_selfmatch_relative_function = NULL;
   GtExtendQuerymatchRelativeFunc extend_querymatch_relative_function = NULL;
   GtProcessinfo_and_querymatchspaceptr info_querymatch;
+  const GtUword amaxlen = gt_encseq_max_seq_length(aencseq),
+                bmaxlen = gt_encseq_max_seq_length(bencseq);
   const GtDiagbandseedSeedPair *lm = NULL, *maxsegm, *nextsegm, *idx;
-  const GtUword ndiags = (amaxlen >> logdiagbandwidth) +
-                         (bmaxlen >> logdiagbandwidth) + 2;
-  const GtUword minsegmentlen = (mincoverage - 1) / seedlength + 1;
+  const GtUword ndiags = (amaxlen >> arg->logdiagbandwidth) +
+                         (bmaxlen >> arg->logdiagbandwidth) + 2;
+  const GtUword minsegmentlen = (arg->mincoverage - 1) / seedlength + 1;
   GtUword mlen = 0, diag = 0;
   bool firstinrange = true;
   GtUword count_extensions = 0;
-  const GtReadmode query_readmode
-    = (reverse && (extendgreedyinfo != NULL ||
-                   extendxdropinfo != NULL)) ? GT_READMODE_REVCOMPL
-                                             : GT_READMODE_FORWARD;
+  const GtReadmode query_readmode = ((arg->extendgreedy || arg->extendxdrop)
+                                     && reverse
+                                     ? GT_READMODE_REVCOMPL
+                                     : GT_READMODE_FORWARD);
+  GtTimer *timer = NULL;
+#ifdef GT_DIAGBANDSEED_SEEDHISTOGRAM
+  GtUword *seedhistogram = NULL;
+  GtUword seedcount = 0;
+#endif
 
   gt_assert(mlist != NULL);
   mlen = mlist->nextfreeGtDiagbandseedSeedPair; /* mlist length  */
   lm = mlist->spaceGtDiagbandseedSeedPair;      /* mlist pointer */
 
+  if (mlen < minsegmentlen || mlen == 0) {
+    return;
+  }
+
   /* select extension method */
-  if (extendgreedyinfo != NULL) {
-    info_querymatch.processinfo = (void *) extendgreedyinfo;
+  info_querymatch.processinfo = processinfo;
+  if (arg->extendgreedy) {
     extend_selfmatch_relative_function = gt_greedy_extend_selfmatch_relative;
     extend_querymatch_relative_function = gt_greedy_extend_querymatch_relative;
-  } else if (extendxdropinfo != NULL) {
-    info_querymatch.processinfo = (void *) extendxdropinfo;
+  } else if (arg->extendxdrop) {
     extend_selfmatch_relative_function = gt_xdrop_extend_selfmatch_relative;
     extend_querymatch_relative_function = gt_xdrop_extend_querymatch_relative;
   } else { /* no seed extension */
-    return 0;
+    return;
   }
 
-  if (mlen < minsegmentlen)
-    return 0;
-  gt_assert(aencseq != NULL && bencseq != NULL);
+  if (verbose) {
+    timer = gt_timer_new();
+    if (arg->extendgreedy) {
+      fprintf(stream, "# Start greedy seed pair extension...\n");
+    } else {
+      fprintf(stream, "# Start xdrop seed pair extension...\n");
+    }
+    fprintf(stream, "# Columns: alen aseq astartpos strand blen bseq bstartpos "
+            "score editdist identity\n");
+    gt_timer_start(timer);
+  }
 
   info_querymatch.querymatchspaceptr = gt_querymatch_new();
-  if (seed_display)
-  {
-    gt_querymatch_seed_display_set(info_querymatch.querymatchspaceptr);
-  }
-  if (querymatchoutopt != NULL)
-  {
+  gt_querymatch_display_set(info_querymatch.querymatchspaceptr,
+                            arg->display_flag);
+  if (querymoutopt != NULL) {
     gt_querymatch_outoptions_set(info_querymatch.querymatchspaceptr,
-                                 querymatchoutopt);
+                                 querymoutopt);
   }
   gt_querymatch_query_readmode_set(info_querymatch.querymatchspaceptr,
                                    query_readmode);
+  gt_querymatch_file_set(info_querymatch.querymatchspaceptr, stream);
 
   /* score[0] and score[ndiags+1] remain zero for boundary */
   score = gt_calloc(ndiags + 2, sizeof *score);
@@ -499,6 +1054,11 @@ static GtUword gt_diagbandseed_process_seeds(const GtEncseq *aencseq,
   maxsegm = lm + mlen - minsegmentlen;
   nextsegm = lm;
 
+#ifdef GT_DIAGBANDSEED_SEEDHISTOGRAM
+  seedhistogram = (GtUword *)gt_calloc(GT_DIAGBANDSEED_SEEDHISTOGRAM,
+                                       sizeof *seedhistogram);
+#endif
+
   /* iterate through segments of equal k-mers */
   while (nextsegm <= maxsegm) {
     const GtDiagbandseedSeedPair *currsegm = nextsegm;
@@ -518,7 +1078,7 @@ static GtUword gt_diagbandseed_process_seeds(const GtEncseq *aencseq,
     do {
       gt_assert(nextsegm->bpos <= bmaxlen && nextsegm->apos <= amaxlen);
       diag = (amaxlen + (GtUword)nextsegm->bpos - (GtUword)nextsegm->apos)
-             >> logdiagbandwidth;
+              >> arg->logdiagbandwidth;
       if (nextsegm->bpos >= seedlength + lastp[diag]) {
         /* no overlap: add seedlength */
         score[diag + 1] += seedlength;
@@ -537,22 +1097,25 @@ static GtUword gt_diagbandseed_process_seeds(const GtEncseq *aencseq,
     for (idx = currsegm; idx < nextsegm; idx++) {
       gt_assert(idx->apos <= amaxlen);
       diag = (amaxlen + (GtUword)idx->bpos - (GtUword)idx->apos)
-             >> logdiagbandwidth;
+             >> arg->logdiagbandwidth;
       if ((GtUword)MAX(score[diag + 2], score[diag]) + (GtUword)score[diag + 1]
-          >= mincoverage)
+          >= arg->mincoverage)
       {
-        /* relative seed start position in B */
+        /* relative seed start position in A and B */
         const GtUword bstart = (GtUword) (idx->bpos + 1 - seedlength);
+        const GtUword astart = (GtUword) (idx->apos + 1 - seedlength);
+#ifdef GT_DIAGBANDSEED_SEEDHISTOGRAM
+        seedcount++;
+#endif
 
         if (firstinrange ||
-            !gt_querymatch_overlap(info_querymatch.querymatchspaceptr,bstart))
+            !gt_querymatch_overlap(info_querymatch.querymatchspaceptr,
+                                   idx->apos, idx->bpos, arg->use_apos))
         {
-          /* relative seed start position in A */
-          const GtUword astart = (GtUword) (idx->apos + 1 - seedlength);
           /* extend seed */
           const GtQuerymatch *querymatch = NULL;
+
           if (aencseq == bencseq) {
-            count_extensions++;
             querymatch = extend_selfmatch_relative_function(&info_querymatch,
                                                             aencseq,
                                                             idx->aseqnum,
@@ -562,7 +1125,6 @@ static GtUword gt_diagbandseed_process_seeds(const GtEncseq *aencseq,
                                                             seedlength,
                                                             query_readmode);
           } else {
-            count_extensions++;
             querymatch = extend_querymatch_relative_function(&info_querymatch,
                                                              aencseq,
                                                              idx->aseqnum,
@@ -573,11 +1135,12 @@ static GtUword gt_diagbandseed_process_seeds(const GtEncseq *aencseq,
                                                              seedlength,
                                                              query_readmode);
           }
+          count_extensions++;
           if (querymatch != NULL) {
             firstinrange = false;
             /* show extension results */
-            if (gt_querymatch_check_final(querymatch,errorpercentage,
-                                          userdefinedleastlength))
+            if (gt_querymatch_check_final(querymatch, arg->errorpercentage,
+                                          arg->userdefinedleastlength))
             {
               gt_querymatch_prettyprint(querymatch);
             }
@@ -589,544 +1152,731 @@ static GtUword gt_diagbandseed_process_seeds(const GtEncseq *aencseq,
     /* reset diagonal band scores */
     for (idx = currsegm; idx < nextsegm; idx++) {
       diag = (amaxlen + (GtUword)idx->bpos - (GtUword)idx->apos)
-             >> logdiagbandwidth;
+             >> arg->logdiagbandwidth;
       score[diag + 1] = 0;
       lastp[diag] = 0;
     }
+
+#ifdef GT_DIAGBANDSEED_SEEDHISTOGRAM
+    seedhistogram[MIN(GT_DIAGBANDSEED_SEEDHISTOGRAM - 1, seedcount)]++;
+    seedcount = 0;
+#endif
   }
   gt_querymatch_delete(info_querymatch.querymatchspaceptr);
   gt_free(score);
   gt_free(lastp);
-  return count_extensions;
+
+#ifdef GT_DIAGBANDSEED_SEEDHISTOGRAM
+  fprintf(stream, "# seed histogram:");
+  for (seedcount = 0; seedcount < GT_DIAGBANDSEED_SEEDHISTOGRAM; seedcount++) {
+    if (seedcount % 10 == 0) {
+      fprintf(stream, "\n#\t");
+    }
+    fprintf(stream, GT_WU "\t", seedhistogram[seedcount]);
+  }
+  fprintf(stream, "\n");
+  gt_free(seedhistogram);
+#endif
+  if (verbose) {
+    fprintf(stream, "# ...finished " GT_WU " seed pair extension%s ",
+            count_extensions, count_extensions > 1 ? "s" : "");
+    gt_timer_show_formatted(timer, "in " GT_WD ".%06ld seconds.\n", stream);
+    gt_timer_delete(timer);
+  }
 }
 
-static GtUword gt_seed_extend_numofkmers(const GtEncseq *encseq,
-                                         GtUword seedlength)
+/* * * * * ALGORITHM STEPS * * * * */
+
+static char *gt_diagbandseed_kmer_filename(const GtEncseq *encseq,
+                                           unsigned int seedlength,
+                                           bool forward,
+                                           unsigned int numparts,
+                                           unsigned int partindex)
 {
-  GtUword kmers;
-  const GtUword totallength = gt_encseq_total_length(encseq),
-                min_seq_length = gt_encseq_min_seq_length(encseq),
-                num_of_sequences = gt_encseq_num_of_sequences(encseq),
-                num_specialchar = gt_encseq_specialcharacters(encseq);
-  gt_assert(seedlength > 0);
-  kmers = totallength -
-          (num_of_sequences * MIN(seedlength, min_seq_length + 1) - 1);
-  kmers = MIN(kmers, totallength - (seedlength - 1 + num_specialchar));
-  return kmers;
+  char *filename;
+  GtStr *str = gt_str_new_cstr(gt_encseq_indexname(encseq));
+  gt_str_append_char(str, '.');
+  gt_str_append_uint(str, seedlength);
+  gt_str_append_char(str, forward ? 'f' : 'r');
+  gt_str_append_uint(str, numparts);
+  gt_str_append_char(str, '-');
+  gt_str_append_uint(str, partindex);
+  gt_str_append_cstr(str, ".kmer");
+  filename = gt_cstr_dup(gt_str_get(str));
+  gt_str_delete(str);
+  return filename;
 }
 
-static int gt_diagbandseed_prepare_mlist2(GtArrayGtDiagbandseedSeedPair *mlist,
-                                          GtDiagbandseedKmerPos *alist,
-                                          GtUword alen,
-                                          GtUword blen,
-                                          const GtEncseq *aencseq,
-                                          const GtEncseq *bencseq,
-                                          const GtDiagbandseed *arg,
-                                          GtUword maxfreq,
-                                          bool selfcomp,
-                                          GtError *err)
+/* Go through the different steps of the seed and extend algorithm. */
+static int gt_diagbandseed_algorithm(const GtDiagbandseedInfo *arg,
+                                     const GtArrayGtDiagbandseedKmerPos *alist,
+                                     FILE *stream,
+                                     const GtRange *aseqrange,
+                                     const GtRange *bseqrange,
+                                     GtUwordPair partindex,
+                                     GtError *err)
 {
-  GtDiagbandseedKmerPos *clist;
-  GtRadixsortinfo *rdxinfo;
-  GtTimer *vtimer = NULL;
-  GtUword mlen, clen;
+  GtArrayGtDiagbandseedKmerPos blist;
+  GtArrayGtDiagbandseedSeedPair mlist, mrevlist;
+  GtDiagbandseedKmerIterator *aiter = NULL, *biter = NULL;
+  GtUword alen = 0, blen = 0, mlen = 0, mrevlen = 0, maxfreq, len_used;
+  GtRange seedpairdistance = *arg->seedpairdistance;
+  char *blist_file = NULL;
   int had_err = 0;
+  bool alist_blist_id, both_strands, selfcomp, equalranges, use_blist = false;
+  GtDiagbandseedExtendParams *extp = NULL;
+  Polishing_info *pol_info = NULL;
+  void *processinfo = NULL;
+  GtQuerymatchoutoptions *querymoutopt = NULL;
 
-  clen = selfcomp ? alen : blen;
-  if (arg->verbose) {
-    vtimer = gt_timer_new();
-    printf("# Start fetching " GT_WU " reverse complement %u-mers...\n",
-           clen, arg->seedlength);
-    gt_timer_start(vtimer);
-  }
-
-  clist = gt_malloc(clen * sizeof *clist);
-  clen = gt_diagbandseed_get_kmers(clist,
-                                   selfcomp ? aencseq : bencseq,
-                                   arg->seedlength,
-                                   GT_READMODE_COMPL);
-  if (arg->debug_kmer) {
-    GtDiagbandseedKmerPos *idx;
-    for (idx = clist; idx < clist + clen; idx++) {
-      printf("# Kmer (" GT_LX ",%d,%d)\n",
-             idx->code, idx->endpos, idx->seqnum);
-    }
+  gt_assert(arg != NULL && aseqrange != NULL && bseqrange != NULL);
+
+  maxfreq = arg->maxfreq;
+  selfcomp = (arg->bencseq == arg->aencseq &&
+              gt_range_overlap(aseqrange, bseqrange))
+              ? true : false;
+  equalranges = gt_range_compare(aseqrange, bseqrange) == 0 ? true : false;
+  alist_blist_id = selfcomp && !arg->nofwd && equalranges ? true : false;
+  both_strands = (arg->norev || arg->nofwd) ? false : true;
+  if (!alist_blist_id) {
+    seedpairdistance.start = 0UL;
   }
 
-  if (arg->verbose) {
-    printf("# ...found " GT_WU " %u-mers ", clen, arg->seedlength);
-    gt_timer_show_formatted(vtimer, "in " GT_WD ".%06ld seconds.\n", stdout);
-    gt_timer_start(vtimer);
+  if (arg->verbose && (arg->anumseqranges > 1 || arg->bnumseqranges > 1)) {
+    fprintf(stream, "# Process part " GT_WU " vs part " GT_WU "\n",
+            partindex.a + 1, partindex.b + 1);
   }
 
-  rdxinfo = gt_radixsort_new_ulongpair(clen);
-  gt_radixsort_inplace_GtUwordPair((GtUwordPair *)clist, clen);
-  gt_radixsort_delete(rdxinfo);
+  /* Create k-mer iterator for alist */
+  if (alist == NULL) {
+    char *alist_file;
+    alist_file = gt_diagbandseed_kmer_filename(arg->aencseq, arg->seedlength,
+                                               true, arg->anumseqranges,
+                                               partindex.a);
+    FILE *alist_fp = gt_fa_fopen(alist_file, "rb", err);
+    if (alist_fp == NULL) {
+      return -1;
+    }
+    alen = (GtUword)(gt_file_size(alist_file) / sizeof (GtDiagbandseedKmerPos));
+    aiter = gt_diagbandseed_kmer_iter_new_file(alist_fp);
+    gt_free(alist_file);
+    alist_file = NULL;
+  } else {
+    gt_assert(alist != NULL);
+    alen = alist->nextfreeGtDiagbandseedKmerPos;
+    aiter = gt_diagbandseed_kmer_iter_new_list(alist);
+  }
 
-  if (arg->verbose) {
-    printf("# ...sorted " GT_WU " %u-mers ", clen, arg->seedlength);
-    gt_timer_show_formatted(vtimer, "in " GT_WD ".%06ld seconds.\n", stdout);
+  /* Second k-mer list */
+  if (alist_blist_id && alist != NULL) {
+    biter = gt_diagbandseed_kmer_iter_new_list(alist);
+    blen = alen;
+  } else if (arg->use_kmerfile) {
+    blist_file = gt_diagbandseed_kmer_filename(arg->bencseq, arg->seedlength,
+                                               !arg->nofwd, arg->bnumseqranges,
+                                               partindex.b);
+    if (!gt_file_exists(blist_file)) {
+      gt_free(blist_file);
+      blist_file = NULL;
+    }
+  }
+  if (blist_file != NULL) {
+    FILE *blist_fp = gt_fa_fopen(blist_file, "rb", err);
+    if (blist_fp == NULL) {
+      gt_free(blist_file);
+      gt_diagbandseed_kmer_iter_delete(aiter);
+      return -1;
+    }
+    blen = (GtUword)(gt_file_size(blist_file) / sizeof (GtDiagbandseedKmerPos));
+    gt_assert(biter == NULL);
+    biter = gt_diagbandseed_kmer_iter_new_file(blist_fp);
+    gt_free(blist_file);
+    blist_file = NULL;
+  } else if (!alist_blist_id) {
+    const GtReadmode readmode = arg->nofwd ? GT_READMODE_COMPL
+                                           : GT_READMODE_FORWARD;
+    const GtUword known_size = (selfcomp && equalranges) ? alen : 0;
+    blist = gt_diagbandseed_get_kmers(arg->bencseq,
+                                      arg->seedlength,
+                                      readmode,
+                                      bseqrange,
+                                      arg->debug_kmer,
+                                      arg->verbose,
+                                      known_size,
+                                      stream);
+    blen = blist.nextfreeGtDiagbandseedKmerPos;
+    biter = gt_diagbandseed_kmer_iter_new_list(&blist);
+    use_blist = true;
   }
 
-  if (arg->verbose) {
-    printf("# Start building seed pairs using rev.compl. %u-mers...\n",
-           arg->seedlength);
-    gt_timer_start(vtimer);
+  len_used = alen;
+  if (!selfcomp || !arg->norev) {
+    len_used += blen;
   }
+  had_err = gt_diagbandseed_get_mlen_maxfreq(&mlen,
+                                             &maxfreq,
+                                             aiter,
+                                             biter,
+                                             arg->memlimit,
+                                             &seedpairdistance,
+                                             len_used,
+                                             selfcomp,
+                                             alist_blist_id,
+                                             arg->verbose,
+                                             stream,
+                                             err);
 
-  GT_INITARRAY(mlist, GtDiagbandseedSeedPair);
-  gt_diagbandseed_merge(mlist,
-                        alist,
-                        alen,
-                        clist,
-                        clen,
-                        &maxfreq,
-                        1,    /* maxgram not needed */
-                        arg->memlimit,
-                        NULL, /* histogram not needed: save seed pairs */
-                        0,
-                        selfcomp,
-                        0);   /* len_used not needed */
-  mlen = mlist->nextfreeGtDiagbandseedSeedPair;
-  gt_free(alist);
-  alist = NULL;
-  gt_free(clist);
-  clist = NULL;
+  if (!had_err) {
+    gt_diagbandseed_kmer_iter_reset(aiter);
+    gt_diagbandseed_kmer_iter_reset(biter);
+    mlist = gt_diagbandseed_get_seedpairs(aiter,
+                                          biter,
+                                          maxfreq,
+                                          mlen,
+                                          &seedpairdistance,
+                                          selfcomp,
+                                          arg->debug_seedpair,
+                                          arg->verbose,
+                                          stream);
+    mlen = mlist.nextfreeGtDiagbandseedSeedPair;
 
-  if (arg->verbose) {
-    printf("# ...collected " GT_WU " rev.compl. seed pairs ", mlen);
-    gt_timer_show_formatted(vtimer, "in " GT_WD ".%06ld seconds.\n", stdout);
+    if (arg->verify && mlen > 0) {
+      had_err = gt_diagbandseed_verify(arg->aencseq,
+                                       arg->bencseq,
+                                       &mlist,
+                                       arg->seedlength,
+                                       arg->nofwd,
+                                       arg->verbose,
+                                       stream,
+                                       err);
+      if (had_err) {
+        GT_FREEARRAY(&mlist, GtDiagbandseedSeedPair);
+      }
+    }
   }
 
-  if (mlen > 0) {
-    if (arg->verbose) {
-      gt_timer_start(vtimer);
+  if (use_blist) {
+    GT_FREEARRAY(&blist, GtDiagbandseedKmerPos);
+  }
+  use_blist = false;
+  gt_diagbandseed_kmer_iter_delete(biter);
+  if (had_err) {
+    gt_diagbandseed_kmer_iter_delete(aiter);
+    return had_err;
+  }
+
+  /* Create extension info objects */
+  extp = arg->extp;
+  if (extp->extendgreedy) {
+    GtGreedyextendmatchinfo *grextinfo = NULL;
+    const double weak_errorperc = (double)(extp->weakends
+                                           ? MAX(extp->errorpercentage, 20)
+                                           : extp->errorpercentage);
+
+    pol_info = polishing_info_new_with_bias(weak_errorperc,
+                                            extp->matchscore_bias,
+                                            extp->history_size);
+    grextinfo = gt_greedy_extend_matchinfo_new(extp->errorpercentage,
+                                               extp->maxalignedlendifference,
+                                               extp->history_size,
+                                               extp->perc_mat_history,
+                                               extp->userdefinedleastlength,
+                                               extp->extend_char_access,
+                                               extp->sensitivity,
+                                               pol_info);
+    if (extp->benchmark) {
+      gt_greedy_extend_matchinfo_silent_set(grextinfo);
     }
-    rdxinfo = gt_radixsort_new_uint64keypair(mlen);
-    gt_radixsort_inplace_Gtuint64keyPair((Gtuint64keyPair*) mlist->
-                                         spaceGtDiagbandseedSeedPair,
-                                         mlen);
-    gt_radixsort_delete(rdxinfo);
-    if (arg->verbose) {
-      printf("# ...sorted " GT_WU " rev.compl. seed pairs in ", mlen);
-      gt_timer_show_formatted(vtimer, GT_WD ".%06ld seconds.\n", stdout);
+    processinfo = (void *)grextinfo;
+  } else if (extp->extendxdrop) {
+    GtXdropmatchinfo *xdropinfo = NULL;
+    gt_assert(extp->extendgreedy == false);
+    xdropinfo = gt_xdrop_matchinfo_new(extp->userdefinedleastlength,
+                                       extp->errorpercentage,
+                                       extp->xdropbelowscore,
+                                       extp->sensitivity);
+    if (extp->benchmark) {
+      gt_xdrop_matchinfo_silent_set(xdropinfo);
     }
-
-    if (arg->debug_seedpair) {
-      GtDiagbandseedSeedPair *curr_sp = mlist->spaceGtDiagbandseedSeedPair;
-      while (curr_sp < mlist->spaceGtDiagbandseedSeedPair + mlen) {
-        printf("# SeedPair (%d,%d,%d,%d)\n", curr_sp->aseqnum,
-               curr_sp->bseqnum, curr_sp->apos, curr_sp->bpos);
-        curr_sp++;
-      }
+    processinfo = (void *)xdropinfo;
+  }
+  if (extp->extendxdrop || extp->alignmentwidth > 0) {
+    querymoutopt = gt_querymatchoutoptions_new(true,
+                                               false,
+                                               extp->alignmentwidth);
+    if (extp->extendxdrop || extp->extendgreedy) {
+      const GtUword sensitivity = extp->extendxdrop ? 100UL : extp->sensitivity;
+      gt_querymatchoutoptions_extend(querymoutopt,
+                                     extp->errorpercentage,
+                                     extp->maxalignedlendifference,
+                                     extp->history_size,
+                                     extp->perc_mat_history,
+                                     extp->extend_char_access,
+                                     extp->weakends,
+                                     sensitivity,
+                                     extp->matchscore_bias,
+                                     extp->always_polished_ends,
+                                     extp->display_flag);
     }
   }
 
-  if (arg->verify) {
-    if (arg->verbose) {
-      printf("# Start verifying rev.compl. seed pairs...\n");
-      gt_timer_start(vtimer);
+  /* process first mlist */
+  gt_diagbandseed_process_seeds(&mlist,
+                                arg->extp,
+                                processinfo,
+                                querymoutopt,
+                                arg->aencseq,
+                                arg->bencseq,
+                                arg->seedlength,
+                                arg->nofwd,
+                                arg->verbose,
+                                stream);
+  GT_FREEARRAY(&mlist, GtDiagbandseedSeedPair);
+
+  /* Third (reverse) k-mer list */
+  if (both_strands) {
+    GtArrayGtDiagbandseedKmerPos clist;
+    gt_assert(blist_file == NULL && !use_blist);
+    seedpairdistance.start = 0UL;
+    if (arg->use_kmerfile) {
+      blist_file = gt_diagbandseed_kmer_filename(arg->bencseq, arg->seedlength,
+                                                 false, arg->bnumseqranges,
+                                                 partindex.b);
+      if (!gt_file_exists(blist_file)) {
+        gt_free(blist_file);
+        blist_file = NULL;
+      }
+    }
+    if (blist_file != NULL) {
+      FILE *blist_fp = gt_fa_fopen(blist_file, "rb", err);
+      if (blist_fp == NULL) {
+        had_err = -1;
+      } else {
+        biter = gt_diagbandseed_kmer_iter_new_file(blist_fp);
+      }
+      gt_free(blist_file);
+    } else {
+      clist = gt_diagbandseed_get_kmers(arg->bencseq,
+                                        arg->seedlength,
+                                        GT_READMODE_COMPL,
+                                        bseqrange,
+                                        arg->debug_kmer,
+                                        arg->verbose,
+                                        blen,
+                                        stream);
+      biter = gt_diagbandseed_kmer_iter_new_list(&clist);
+      use_blist = true;
     }
 
-    had_err = gt_diagbandseed_verify(aencseq,
-                                     bencseq,
-                                     mlist,
-                                     arg->seedlength,
-                                     true,
-                                     err);
-    if (had_err) {
-      GT_FREEARRAY(mlist, GtDiagbandseedSeedPair);
+    if (!had_err) {
+      gt_diagbandseed_kmer_iter_reset(aiter);
+      had_err = gt_diagbandseed_get_mlen_maxfreq(&mrevlen,
+                                                 &maxfreq,
+                                                 aiter,
+                                                 biter,
+                                                 arg->memlimit,
+                                                 &seedpairdistance,
+                                                 len_used,
+                                                 selfcomp,
+                                                 alist_blist_id,
+                                                 arg->verbose,
+                                                 stream,
+                                                 err);
     }
 
-    if (!had_err && arg->verbose) {
-      printf("# ...successfully verified each seed pair ");
-      gt_timer_show_formatted(vtimer, "in " GT_WD ".%06ld seconds.\n", stdout);
+    if (!had_err) {
+      gt_diagbandseed_kmer_iter_reset(aiter);
+      gt_diagbandseed_kmer_iter_reset(biter);
+      mrevlist = gt_diagbandseed_get_seedpairs(aiter,
+                                               biter,
+                                               maxfreq,
+                                               mrevlen,
+                                               &seedpairdistance,
+                                               selfcomp,
+                                               arg->debug_seedpair,
+                                               arg->verbose,
+                                               stream);
+      mrevlen = mrevlist.nextfreeGtDiagbandseedSeedPair;
+
+      if (arg->verify && mrevlen > 0) {
+        had_err = gt_diagbandseed_verify(arg->aencseq,
+                                         arg->bencseq,
+                                         &mrevlist,
+                                         arg->seedlength,
+                                         true,
+                                         arg->verbose,
+                                         stream,
+                                         err);
+        if (had_err) {
+          GT_FREEARRAY(&mlist, GtDiagbandseedSeedPair);
+        }
+      }
     }
+    if (use_blist) {
+      GT_FREEARRAY(&clist, GtDiagbandseedKmerPos);
+    }
+    gt_diagbandseed_kmer_iter_delete(biter);
+  }
+  gt_diagbandseed_kmer_iter_delete(aiter);
+
+  /* Process second (reverse) mlist */
+  if (!had_err && both_strands) {
+    gt_diagbandseed_process_seeds(&mrevlist,
+                                  arg->extp,
+                                  processinfo,
+                                  querymoutopt,
+                                  arg->aencseq,
+                                  arg->bencseq,
+                                  arg->seedlength,
+                                  true,
+                                  arg->verbose,
+                                  stream);
+    GT_FREEARRAY(&mrevlist, GtDiagbandseedSeedPair);
   }
-  if (arg->verbose) {
-    gt_timer_delete(vtimer);
+
+  /* Clean up */
+  if (extp->extendgreedy) {
+    polishing_info_delete(pol_info);
+    gt_greedy_extend_matchinfo_delete((GtGreedyextendmatchinfo *)processinfo);
+  } else if (extp->extendxdrop) {
+    gt_xdrop_matchinfo_delete((GtXdropmatchinfo *)processinfo);
+  }
+  if (extp->extendxdrop || extp->alignmentwidth > 0) {
+    gt_querymatchoutoptions_delete(querymoutopt);
   }
   return had_err;
 }
 
-int gt_diagbandseed_run(const GtEncseq *aencseq,
-                        const GtEncseq *bencseq,
-                        const GtDiagbandseed *arg,
-                        GtError *err)
+#ifdef GT_THREADS_ENABLED
+typedef struct{
+  const GtDiagbandseedInfo *arg;
+  const GtArrayGtDiagbandseedKmerPos *alist;
+  FILE *stream;
+  const GtRange *aseqranges;
+  const GtRange *bseqranges;
+  GtArray *combinations;
+  int had_err;
+  GtError *err;
+}GtDiagbandseedThreadInfo;
+
+static
+void gt_diagbandseed_thread_info_set(GtDiagbandseedThreadInfo *ti,
+                                     const GtDiagbandseedInfo *arg,
+                                     const GtArrayGtDiagbandseedKmerPos *alist,
+                                     FILE *stream,
+                                     const GtRange *aseqranges,
+                                     const GtRange *bseqranges,
+                                     GtArray *combinations,
+                                     GtError *err)
 {
-  GtDiagbandseedKmerPos *alist = NULL, *blist = NULL;
-  GtArrayGtDiagbandseedSeedPair mlist, mlist_rev;
-  GtTimer *vtimer = NULL;
-  GtRadixsortinfo *rdxinfo;
-  GtUword alen, blen = 0, mlen = 0, maxfreq, amaxlen, bmaxlen, ankmers;
-  unsigned int endposdiff;
-  int had_err = 0;
-  bool alist_blist_id = false;
-  bool both_strands = false;
-  const GtUword maxgram = 10000; /* Cap on k-mer count histogram */
-  const bool selfcomp = (bencseq == aencseq) ? true : false;
-
-  gt_assert(arg != NULL && aencseq != NULL && bencseq != NULL);
-  maxfreq = arg->maxfreq;
-  endposdiff = !arg->overlappingseeds ? arg->seedlength : 1;
-  amaxlen = gt_encseq_max_seq_length(aencseq);
-  bmaxlen = gt_encseq_max_seq_length(bencseq);
-  alist_blist_id = (selfcomp && !arg->nofwd) ? true : false;
-  both_strands = (arg->norev || arg->nofwd) ? false : true;
-  if (MIN(amaxlen, bmaxlen) < arg->seedlength) {
-    gt_error_set(err,"argument to option \"-seedlength\" must be an integer <= "
-                 GT_WU " (length of longest sequence).", MIN(amaxlen, bmaxlen));
-    return -1;
-  }
-
-  /* estimate number of expected kmers */
-  ankmers = gt_seed_extend_numofkmers(aencseq, arg->seedlength);
-
-  /* prepare list of kmers from aencseq */
-  if (arg->verbose) {
-    vtimer = gt_timer_new();
-    printf("# Start fetching (at most " GT_WU ") %u-mers for list A...\n",
-           ankmers,arg->seedlength);
-    gt_timer_start(vtimer);
-  }
+  gt_assert(ti != NULL);
+  ti->arg = arg;
+  ti->alist = alist;
+  ti->stream = stream;
+  ti->aseqranges = aseqranges;
+  ti->bseqranges = bseqranges;
+  ti->combinations = gt_array_clone(combinations);
+  ti->had_err = 0;
+  ti->err = err;
+}
 
-  alist = gt_malloc(ankmers * sizeof *alist);
-  alen = gt_diagbandseed_get_kmers(alist,
-                                   aencseq,
-                                   arg->seedlength,
-                                   GT_READMODE_FORWARD);
-  if (arg->debug_kmer) {
-    GtDiagbandseedKmerPos *idx;
-    for (idx = alist; idx < alist + alen; idx++) {
-      printf("# Kmer (" GT_LX ",%d,%d)\n", idx->code, idx->endpos, idx->seqnum);
+static void *gt_diagbandseed_thread_algorithm(void *thread_info)
+{
+  GtDiagbandseedThreadInfo *info = (GtDiagbandseedThreadInfo *)thread_info;
+  if (gt_array_size(info->combinations) != 0) {
+    const GtUwordPair *last = gt_array_get_last(info->combinations);
+    GtUwordPair *comb;
+
+    for (comb = gt_array_get_first(info->combinations); comb <= last; comb++) {
+      info->had_err = gt_diagbandseed_algorithm(info->arg,
+                                                info->alist,
+                                                info->stream,
+                                                info->aseqranges + comb->a,
+                                                info->bseqranges + comb->b,
+                                                *comb,
+                                                info->err);
+      if (info->had_err) break;
     }
   }
+  gt_array_delete(info->combinations);
+  return NULL;
+}
+#endif
 
-  if (arg->verbose) {
-    printf("# ...found " GT_WU " %u-mers ", alen, arg->seedlength);
-    gt_timer_show_formatted(vtimer, "in " GT_WD ".%06ld seconds.\n", stdout);
-    gt_timer_start(vtimer);
-  }
-
-  /* sort alist */
-  rdxinfo = gt_radixsort_new_ulongpair(alen);
-  gt_radixsort_inplace_GtUwordPair((GtUwordPair *)alist, alen);
-  gt_radixsort_delete(rdxinfo);
+static int gt_diagbandseed_write_kmers(const GtArrayGtDiagbandseedKmerPos *list,
+                                       const char *path,
+                                       unsigned int seedlength,
+                                       bool verbose,
+                                       GtError *err)
+{
+  FILE *stream;
+  const size_t nmemb = (size_t)(list->nextfreeGtDiagbandseedKmerPos);
+  const void *contents = (const void *)(list->spaceGtDiagbandseedKmerPos);
 
-  if (arg->verbose) {
-    printf("# ...sorted " GT_WU " %u-mers ", alen, arg->seedlength);
-    gt_timer_show_formatted(vtimer, "in " GT_WD ".%06ld seconds.\n", stdout);
+  if (verbose) {
+    printf("# Write " GT_WU " %u-mers to file %s\n",
+           (GtUword)nmemb, seedlength, path);
   }
 
-  /* if necessary: prepare list of kmers from bencseq */
-  if (alist_blist_id) {
-    /* compare reads of encseq A with themselves */
-    blist = alist;
-    blen = alen;
+  stream = gt_fa_fopen(path, "wb", err);
+  if (stream != NULL) {
+    gt_xfwrite(contents, sizeof (GtDiagbandseedKmerPos), nmemb, stream);
+    gt_fa_fclose(stream);
+    return 0;
   } else {
-    GtRadixsortinfo *rdxinfo;
-    const GtReadmode readmode = arg->nofwd ? GT_READMODE_COMPL
-                                           : GT_READMODE_FORWARD;
-    GtUword bnkmers = 0;
-
-    /* estimate number of expected kmers */
-    if (selfcomp) {                /* same kmer amount as for alist */
-      bnkmers = alen;
-    } else {                 /* no selfcomp: calculate from bencseq */
-      bnkmers = gt_seed_extend_numofkmers(bencseq, arg->seedlength);
-    }
-
-    if (arg->verbose) {
-      printf("# Start fetching (at most " GT_WU ") %u-mers for list B...\n",
-             bnkmers,arg->seedlength);
-      gt_timer_start(vtimer);
-    }
+    return -1;
+  }
+}
 
-    /* fill blist */
-    blist = gt_malloc(bnkmers * sizeof *blist);
-    blen = gt_diagbandseed_get_kmers(blist,
-                                     selfcomp ? aencseq : bencseq,
-                                     arg->seedlength,
-                                     readmode);
-    if (arg->debug_kmer) {
-      GtDiagbandseedKmerPos *idx;
-      for (idx = blist; idx < blist + blen; idx++) {
-        printf("# Kmer (" GT_LX ",%d,%d)\n", idx->code, idx->endpos,
-               idx->seqnum);
+/* Run the algorithm by iterating over all combinations of sequence ranges. */
+int gt_diagbandseed_run(const GtDiagbandseedInfo *arg,
+                        const GtRange *aseqranges,
+                        const GtRange *bseqranges,
+                        GtError *err)
+{
+  const bool self = arg->aencseq == arg->bencseq ? true : false;
+  GtArrayGtDiagbandseedKmerPos alist;
+  GtUword aidx, bidx;
+  int had_err = 0;
+#ifdef GT_THREADS_ENABLED
+  GtDiagbandseedThreadInfo *tinfo = gt_malloc(gt_jobs * sizeof *tinfo);
+  FILE **stream;
+  unsigned int tidx;
+
+  /* create output streams */
+  stream = gt_malloc(gt_jobs * sizeof *stream);
+  stream[0] = stdout;
+  for (tidx = 1; !had_err && tidx < gt_jobs; tidx++) {
+    stream[tidx] = gt_xtmpfp_generic(NULL, TMPFP_OPENBINARY | TMPFP_AUTOREMOVE);
+  }
+#endif
+
+  /* create all missing k-mer lists for bencseq */
+  if (arg->use_kmerfile) {
+    unsigned int count;
+    for (count = 0; count < 2; count++) {
+      const bool fwd = count == 0 ? true : false;
+      if (fwd && (self || arg->nofwd)) continue;
+      if (!fwd && arg->norev) continue;
+
+      for (bidx = 0; !had_err && bidx < arg->bnumseqranges; bidx++) {
+        char *path = gt_diagbandseed_kmer_filename(arg->bencseq,
+                                                   arg->seedlength,
+                                                   fwd,
+                                                   arg->bnumseqranges,
+                                                   bidx);
+        if (!gt_file_exists(path)) {
+          GtArrayGtDiagbandseedKmerPos blist;
+          GtReadmode readmode = fwd ? GT_READMODE_FORWARD : GT_READMODE_COMPL;
+
+          blist = gt_diagbandseed_get_kmers(arg->bencseq, arg->seedlength,
+                                            readmode, bseqranges + bidx,
+                                            arg->debug_kmer, arg->verbose, 0,
+                                            stdout);
+          had_err = gt_diagbandseed_write_kmers(&blist, path, arg->seedlength,
+                                                arg->verbose, err);
+          GT_FREEARRAY(&blist, GtDiagbandseedKmerPos);
+        }
+        gt_free(path);
       }
     }
-
-    if (arg->verbose) {
-      printf("# ...found " GT_WU " %u-mers ", blen, arg->seedlength);
-      gt_timer_show_formatted(vtimer, "in " GT_WD ".%06ld seconds.\n", stdout);
-      gt_timer_start(vtimer);
-    }
-
-    /* sort blist */
-    rdxinfo = gt_radixsort_new_ulongpair(blen);
-    gt_radixsort_inplace_GtUwordPair((GtUwordPair *)blist, blen);
-    gt_radixsort_delete(rdxinfo);
-
-    if (arg->verbose) {
-      printf("# ...sorted " GT_WU " %u-mers ", blen, arg->seedlength);
-      gt_timer_show_formatted(vtimer, "in " GT_WD ".%06ld seconds.\n", stdout);
-    }
   }
 
-  /* calculate maxfreq from memlimit */
-  if (arg->memlimit < GT_UWORD_MAX) {
-    GtUword *histogram = NULL;
-    GtUword len_used = alen;
-    if (!selfcomp || !arg->norev) {
-      len_used += blen;
-    }
-    if (!selfcomp && both_strands && arg->extend_last) {
-      len_used += blen;
+  for (aidx = 0; !had_err && aidx < arg->anumseqranges; aidx++) {
+    /* create alist here to prevent redundant calculations */
+    char *path = NULL;
+    bool use_alist = false;
+    if (arg->use_kmerfile) {
+      path = gt_diagbandseed_kmer_filename(arg->aencseq, arg->seedlength, true,
+                                           arg->anumseqranges, aidx);
     }
 
-    if (arg->verbose) {
-      printf("# Start calculating k-mer frequency histogram...\n");
-      gt_timer_start(vtimer);
-    }
-
-    /* build histogram; histogram[maxgram] := estimation for mlen */
-    histogram = gt_calloc(maxgram + 1, sizeof *histogram);
-    gt_diagbandseed_merge(NULL, /* mlist not needed: just count */
-                          alist,
-                          alen,
-                          blist,
-                          blen,
-                          &maxfreq,
-                          maxgram,
-                          arg->memlimit,
-                          histogram,
-                          alist_blist_id ? endposdiff : 0,
-                          selfcomp,
-                          len_used);
-    mlen = histogram[maxgram];
-    gt_free(histogram);
-
-    /* check maxfreq value */
-    if (maxfreq == 0 || (maxfreq == 1 && alist_blist_id)) {
-      gt_error_set(err,
-                   "option -memlimit too strict: need at least " GT_WU "MB",
-                   (mlen >> 20) + 1);
-      mlen = 0;
-      had_err = -1;
-    } else if (maxfreq < 10) {
-      gt_warning("Only %u-mers occurring <= " GT_WU " times will be "
-                 "considered, "
-                 "due to small memlimit. Expect " GT_WU " seed pairs.",
-                 arg->seedlength,maxfreq, mlen);
-    } else if (arg->verbose) {
-      if (maxfreq == GT_UWORD_MAX) {
-        printf("# Disable k-mer maximum frequency, ");
-      } else {
-        printf("# Set k-mer maximum frequency to " GT_WU ", ", maxfreq);
+    if (!arg->use_kmerfile || !gt_file_exists(path)) {
+      use_alist = true;
+      alist = gt_diagbandseed_get_kmers(arg->aencseq,
+                                        arg->seedlength,
+                                        GT_READMODE_FORWARD,
+                                        aseqranges + aidx,
+                                        arg->debug_kmer,
+                                        arg->verbose,
+                                        0,
+                                        stdout);
+      if (arg->use_kmerfile) {
+        had_err = gt_diagbandseed_write_kmers(&alist, path, arg->seedlength,
+                                              arg->verbose, err);
       }
-      printf("expect " GT_WU " seed pairs.\n", mlen);
-    }
-
-    if (!had_err && arg->verbose) {
-      gt_timer_show_formatted(vtimer,
-                              "# ...finished in " GT_WD ".%06ld seconds.\n",
-                              stdout);
-    }
-  } /* end of maxfreq calculation */
-
-  /* create mlist of SeedPairs by merging alist and blist */
-  if (!had_err) {
-    GT_INITARRAY(&mlist, GtDiagbandseedSeedPair);
-    if (mlen > 0) {
-      /* allocate mlist space according to seed pair count */
-      GT_CHECKARRAYSPACEMULTI(&mlist, GtDiagbandseedSeedPair, mlen);
-    }
-
-    if (arg->verbose) {
-      printf("# Start building seed pairs on equal %u-mers...\n",
-              arg->seedlength);
-      gt_timer_start(vtimer);
-    }
-
-    gt_diagbandseed_merge(&mlist,
-                          alist,
-                          alen,
-                          blist,
-                          blen,
-                          &maxfreq,
-                          maxgram,
-                          arg->memlimit,
-                          NULL, /* histogram not needed: save seed pairs */
-                          alist_blist_id ? endposdiff : 0,
-                          selfcomp,
-                          0);   /* len_used not needed */
-    mlen = mlist.nextfreeGtDiagbandseedSeedPair;
-    if (!both_strands) {
-      gt_free(alist);
-      alist = NULL;
     }
-    if (!alist_blist_id) {
-      gt_free(blist);
-      blist = NULL;
+    if (arg->use_kmerfile) {
+      gt_free(path);
     }
-
-    if (arg->verbose) {
-      printf("# ...collected " GT_WU " seed pairs ", mlen);
-      gt_timer_show_formatted(vtimer, "in " GT_WD ".%06ld seconds.\n", stdout);
-    }
-
-    if (mlen > 0) {
-      GtRadixsortinfo *rdxinfo;
-      if (arg->verbose) {
-        gt_timer_start(vtimer);
+    bidx = self ? aidx : 0;
+
+#ifdef GT_THREADS_ENABLED
+    if (gt_jobs <= 1) {
+#endif
+      while (!had_err && bidx < arg->bnumseqranges) {
+        const GtUwordPair partindex = {aidx, bidx};
+        /* start algorithm with chosen sequence ranges */
+        had_err = gt_diagbandseed_algorithm(arg,
+                                            use_alist ? &alist : NULL,
+                                            stdout,
+                                            aseqranges + aidx,
+                                            bseqranges + bidx,
+                                            partindex,
+                                            err);
+        bidx++;
       }
-      rdxinfo = gt_radixsort_new_uint64keypair(mlen);
-      gt_radixsort_inplace_Gtuint64keyPair((Gtuint64keyPair*) mlist.
-                                           spaceGtDiagbandseedSeedPair,
-                                           mlen);
-      gt_radixsort_delete(rdxinfo);
-      if (arg->verbose) {
-        printf("# ...sorted " GT_WU " seed pairs in ", mlen);
-        gt_timer_show_formatted(vtimer, GT_WD ".%06ld seconds.\n", stdout);
-      }
-
-      if (arg->debug_seedpair) {
-        GtDiagbandseedSeedPair *curr_sp = mlist.spaceGtDiagbandseedSeedPair;
-        while (curr_sp < mlist.spaceGtDiagbandseedSeedPair + mlen) {
-          printf("# SeedPair (%d,%d,%d,%d)\n", curr_sp->aseqnum,
-                 curr_sp->bseqnum, curr_sp->apos, curr_sp->bpos);
-          curr_sp++;
+#ifdef GT_THREADS_ENABLED
+    } else if (!arg->use_kmerfile) {
+      const GtUword num_runs = arg->bnumseqranges - bidx;
+      const GtUword num_runs_per_thread = (num_runs - 1) / gt_jobs + 1;
+      const GtUword num_threads = (num_runs - 1) / num_runs_per_thread + 1;
+      GtArray *combinations = gt_array_new(sizeof (GtUwordPair));
+      GtArray *threads = gt_array_new(sizeof (GtThread *));
+
+      gt_assert(bidx < arg->bnumseqranges);
+      gt_assert(num_threads <= gt_jobs);
+
+      /* start additional threads */
+      for (tidx = 1; !had_err && tidx < num_threads; tidx++) {
+        GtThread *thread;
+        GtUword idx;
+        bidx += num_runs_per_thread;
+        const GtUword end = MIN(bidx + num_runs_per_thread, arg->bnumseqranges);
+
+        for (idx = bidx; idx < end; idx++) {
+          GtUwordPair comb = {aidx, idx};
+          gt_array_add(combinations, comb);
+        }
+        gt_diagbandseed_thread_info_set(tinfo + tidx,
+                                        arg,
+                                        use_alist ? &alist : NULL,
+                                        stream[tidx],
+                                        aseqranges,
+                                        bseqranges,
+                                        combinations,
+                                        err);
+        gt_array_reset(combinations);
+        if ((thread = gt_thread_new(gt_diagbandseed_thread_algorithm,
+                                    tinfo + tidx, err)) != NULL) {
+          gt_array_add(threads, thread);
+        } else {
+          had_err = -1;
         }
       }
-    }
 
-    /* verify SeedPairs in the sequences */
-    if (!had_err && arg->verify) {
-      if (arg->verbose) {
-        printf("# Start verifying seed pairs...\n");
-        gt_timer_start(vtimer);
+      /* start main thread */
+      if (!had_err) {
+        for (bidx = self ? aidx : 0;
+             bidx < MIN(bidx + num_runs_per_thread, arg->bnumseqranges);
+             bidx++) {
+          GtUwordPair comb = {aidx, bidx};
+          gt_array_add(combinations, comb);
+        }
+        gt_diagbandseed_thread_info_set(tinfo,
+                                        arg,
+                                        use_alist ? &alist : NULL,
+                                        stream[0],
+                                        aseqranges,
+                                        bseqranges,
+                                        combinations,
+                                        err);
+        gt_diagbandseed_thread_algorithm(tinfo);
       }
 
-      had_err = gt_diagbandseed_verify(aencseq,
-                                       bencseq,
-                                       &mlist,
-                                       arg->seedlength,
-                                       arg->nofwd,
-                                       err);
-      if (had_err) {
-        GT_FREEARRAY(&mlist, GtDiagbandseedSeedPair);
+      /* clean up */
+      for (tidx = 0; tidx < gt_array_size(threads); tidx++) {
+        GtThread *thread = *(GtThread**) gt_array_get(threads, tidx);
+        if (!had_err) {
+          gt_thread_join(thread);
+        }
+        gt_thread_delete(thread);
       }
-
-      if (!had_err && arg->verbose) {
-        printf("# ...successfully verified each seed pair in ");
-        gt_timer_show_formatted(vtimer, GT_WD ".%06ld seconds.\n", stdout);
+      gt_array_delete(threads);
+      for (tidx = 0; tidx < num_threads && !had_err; tidx++) {
+        had_err = tinfo[tidx].had_err;
       }
+      gt_array_delete(combinations);
     }
-  } else { /* had_err */
-    gt_free(alist);
-    alist = NULL;
-    if (!alist_blist_id) {
-      gt_free(blist);
-      blist = NULL;
+#endif
+    if (use_alist) {
+      GT_FREEARRAY(&alist, GtDiagbandseedKmerPos);
     }
   }
-
-  if (!had_err && both_strands && arg->extend_last) {
-    had_err = gt_diagbandseed_prepare_mlist2(&mlist_rev,
-                                             alist,
-                                             alen,
-                                             blen,
-                                             aencseq,
-                                             bencseq,
-                                             arg,
-                                             maxfreq,
-                                             selfcomp,
-                                             err);
-  }
-
-  /* process SeedPairs */
-  if (!had_err && mlen > 0) {
-    GtUword count_seedextensions;
-    if (arg->verbose &&
-        (arg->extendgreedyinfo != NULL || arg->extendxdropinfo != NULL)) {
-      printf("# Start seed pair extension...\n");
-      gt_timer_start(vtimer);
+#ifdef GT_THREADS_ENABLED
+  if (gt_jobs > 1 && arg->use_kmerfile) {
+    GtArray *combinations[gt_jobs];
+    GtArray *threads = gt_array_new(sizeof (GtThread *));
+    GtUword counter = 0;
+    for (tidx = 0; tidx < gt_jobs; tidx++) {
+      combinations[tidx] = gt_array_new(sizeof (GtUwordPair));
     }
-
-    count_seedextensions
-      = gt_diagbandseed_process_seeds(aencseq,
-                                      bencseq,
-                                      &mlist,
-                                      arg->extendgreedyinfo,
-                                      arg->extendxdropinfo,
-                                      arg->querymatchoutopt,
-                                      arg->seed_display,
-                                      arg->seedlength,
-                                      arg->errorpercentage,
-                                      arg->userdefinedleastlength,
-                                      arg->logdiagbandwidth,
-                                      arg->mincoverage,
-                                      amaxlen,
-                                      bmaxlen,
-                                      arg->nofwd);
-    GT_FREEARRAY(&mlist, GtDiagbandseedSeedPair);
-    if (!had_err && arg->verbose &&
-        (arg->extendgreedyinfo != NULL || arg->extendxdropinfo != NULL)) {
-      printf("# ...finished " GT_WU " seed pair extension%s ",
-             count_seedextensions,
-             count_seedextensions > 1 ? "s" : "");
-      gt_timer_show_formatted(vtimer, "in " GT_WD ".%06ld seconds.\n", stdout);
+    for (aidx = 0; aidx < arg->anumseqranges; aidx++) {
+      for (bidx = self ? aidx : 0; bidx < arg->bnumseqranges; bidx++) {
+        GtUwordPair comb = {aidx, bidx};
+        gt_array_add(combinations[counter++ % gt_jobs], comb);
+      }
     }
-  }
 
-  if (!had_err && both_strands && !arg->extend_last) {
-    had_err = gt_diagbandseed_prepare_mlist2(&mlist_rev,
-                                             alist,
-                                             alen,
-                                             blen,
-                                             aencseq,
-                                             bencseq,
-                                             arg,
-                                             maxfreq,
-                                             selfcomp,
-                                             err);
-  }
+    for (tidx = 1; !had_err && tidx < gt_jobs; tidx++) {
+      GtThread *thread;
+      gt_diagbandseed_thread_info_set(tinfo + tidx,
+                                      arg,
+                                      NULL,
+                                      stream[tidx],
+                                      aseqranges,
+                                      bseqranges,
+                                      combinations[tidx],
+                                      err);
+      if ((thread = gt_thread_new(gt_diagbandseed_thread_algorithm,
+                                  tinfo + tidx, err)) != NULL) {
+        gt_array_add(threads, thread);
+      } else {
+        had_err = -1;
+      }
+    }
+    /* start main thread */
+    if (!had_err) {
+      gt_diagbandseed_thread_info_set(tinfo,
+                                      arg,
+                                      NULL,
+                                      stream[0],
+                                      aseqranges,
+                                      bseqranges,
+                                      combinations[0],
+                                      err);
+      gt_diagbandseed_thread_algorithm(tinfo);
+    }
 
-  if (!had_err && both_strands && mlist_rev.nextfreeGtDiagbandseedSeedPair > 0)
-  {
-    GtUword count_seedextensions;
-    if (arg->verbose &&
-        (arg->extendgreedyinfo != NULL || arg->extendxdropinfo != NULL)) {
-      gt_timer_start(vtimer);
+    /* clean up */
+    for (tidx = 0; tidx < gt_array_size(threads); tidx++) {
+      GtThread *thread = *(GtThread**) gt_array_get(threads, tidx);
+      if (!had_err) {
+        gt_thread_join(thread);
+      }
+      gt_thread_delete(thread);
     }
-    count_seedextensions
-      = gt_diagbandseed_process_seeds(aencseq,
-                                      bencseq,
-                                      &mlist_rev,
-                                      arg->extendgreedyinfo,
-                                      arg->extendxdropinfo,
-                                      arg->querymatchoutopt,
-                                      arg->seed_display,
-                                      arg->seedlength,
-                                      arg->errorpercentage,
-                                      arg->userdefinedleastlength,
-                                      arg->logdiagbandwidth,
-                                      arg->mincoverage,
-                                      amaxlen,
-                                      bmaxlen,
-                                      true);
-    GT_FREEARRAY(&mlist_rev, GtDiagbandseedSeedPair);
-    if (!had_err && arg->verbose &&
-        (arg->extendgreedyinfo != NULL || arg->extendxdropinfo != NULL)) {
-      printf("# ...finished " GT_WU " rev.compl. seed pair extension%s in ",
-             count_seedextensions,
-             count_seedextensions > 1 ? "s" : "");
-      gt_timer_show_formatted(vtimer, GT_WD ".%06ld seconds.\n", stdout);
+    for (tidx = 0; tidx < gt_array_size(threads) && !had_err; tidx++) {
+      had_err = tinfo[tidx].had_err;
+    }
+    gt_array_delete(threads);
+    for (tidx = 0; tidx < gt_jobs; tidx++) {
+      gt_array_delete(combinations[tidx]);
     }
   }
-
-  if (arg->verbose) {
-    gt_timer_delete(vtimer);
+  gt_free(tinfo);
+
+  /* print the threads' output to stdout */
+  for (tidx = 1; tidx < gt_jobs; tidx++) {
+    char cc;
+    rewind(stream[tidx]);
+    while ((cc = fgetc(stream[tidx])) != EOF) {
+      putchar(cc);
+    }
+    gt_fa_xfclose(stream[tidx]);
   }
+  gt_free(stream);
+
+#endif
   return had_err;
 }
diff --git a/src/match/diagbandseed.h b/src/match/diagbandseed.h
index 93946d3..600debf 100644
--- a/src/match/diagbandseed.h
+++ b/src/match/diagbandseed.h
@@ -1,6 +1,6 @@
 /*
-  Copyright (c) 2015 Joerg Winkler <joerg.winkler at studium.uni-hamburg.de>
-  Copyright (c) 2015 Center for Bioinformatics, University of Hamburg
+  Copyright (c) 2015-2016 Joerg Winkler <j.winkler at posteo.de>
+  Copyright (c) 2015-2016 Center for Bioinformatics, University of Hamburg
 
   Permission to use, copy, modify, and distribute this software for any
   purpose with or without fee is hereby granted, provided that the above
@@ -20,34 +20,62 @@
 #include <stdbool.h>
 #include "core/encseq_api.h"
 #include "core/error_api.h"
+#include "core/range_api.h"
 #include "core/types_api.h"
-#include "match/seed-extend.h"
-
-typedef struct {
-  GtUword errorpercentage,
-          userdefinedleastlength;
-  unsigned int seedlength;
-  GtUword logdiagbandwidth;
-  GtUword mincoverage;
-  GtUword maxfreq;
-  GtUword memlimit;
-  bool norev;
-  bool nofwd;
-  bool overlappingseeds;
-  bool verify;
-  bool verbose;
-  bool debug_kmer;
-  bool debug_seedpair;
-  bool seed_display;
-  bool extend_last;
-  GtGreedyextendmatchinfo *extendgreedyinfo;
-  GtXdropmatchinfo *extendxdropinfo;
-  GtQuerymatchoutoptions *querymatchoutopt;
-} GtDiagbandseed;
+#include "match/ft-front-prune.h"
+#include "match/xdrop.h"
+
+typedef struct GtDiagbandseedInfo GtDiagbandseedInfo;
+typedef struct GtDiagbandseedExtendParams GtDiagbandseedExtendParams;
 
 /* Run the whole algorithm. */
-int gt_diagbandseed_run(const GtEncseq *aencseq,
-                        const GtEncseq *bencseq,
-                        const GtDiagbandseed *arg,
+int gt_diagbandseed_run(const GtDiagbandseedInfo *arg,
+                        const GtRange *aseqranges,
+                        const GtRange *bseqranges,
                         GtError *err);
+
+/* The constructor for GtDiagbandseedInfo*/
+GtDiagbandseedInfo *gt_diagbandseed_info_new(GtEncseq *aencseq,
+                                             GtEncseq *bencseq,
+                                             GtUword maxfreq,
+                                             GtUword memlimit,
+                                             unsigned int seedlength,
+                                             bool norev,
+                                             bool nofwd,
+                                             GtRange *seedpairdistance,
+                                             bool verify,
+                                             bool verbose,
+                                             bool debug_kmer,
+                                             bool debug_seedpair,
+                                             bool use_kmerfile,
+                                             GtDiagbandseedExtendParams *extp,
+                                             GtUword anumseqranges,
+                                             GtUword bnumseqranges);
+
+/* The constructor for GtDiagbandseedExtendParams*/
+GtDiagbandseedExtendParams *gt_diagbandseed_extend_params_new(
+                              GtUword errorpercentage,
+                              GtUword userdefinedleastlength,
+                              GtUword logdiagbandwidth,
+                              GtUword mincoverage,
+                              unsigned int display_flag,
+                              bool use_apos,
+                              GtXdropscore xdropbelowscore,
+                              bool extendgreedy,
+                              bool extendxdrop,
+                              GtUword maxalignedlendifference,
+                              GtUword history_size,
+                              GtUword perc_mat_history,
+                              GtExtendCharAccess extend_char_access,
+                              GtUword sensitivity,
+                              double matchscore_bias,
+                              bool weakends,
+                              bool benchmark,
+                              GtUword alignmentwidth,
+                              bool always_polished_ends);
+
+/* The destructors */
+void gt_diagbandseed_info_delete(GtDiagbandseedInfo *info);
+
+void gt_diagbandseed_extend_params_delete(GtDiagbandseedExtendParams *extp);
 #endif
diff --git a/src/match/eis-encidxseq-construct.h b/src/match/eis-encidxseq-construct.h
index 2156408..332629d 100644
--- a/src/match/eis-encidxseq-construct.h
+++ b/src/match/eis-encidxseq-construct.h
@@ -118,7 +118,7 @@ gt_createEncIdxSeqFromSA(Suffixarray *sa,
  * suffix-array data structure to read construction from and progress
  * information
  * @param alphabet encoding to use for the built sequence, "ownership"
- * of alphabet will pass to the returned object if no error occured.
+ * of alphabet will pass to the returned object if no error occurred.
  * @param totalLen length of indexed sequence (including terminator
  * and separators)
  * @param projectName base name of corresponding suffixerator project
diff --git a/src/match/eis-encidxseq.c b/src/match/eis-encidxseq.c
index 643ea59..bd44a55 100644
--- a/src/match/eis-encidxseq.c
+++ b/src/match/eis-encidxseq.c
@@ -50,7 +50,7 @@ const char *EISIntegrityCheckResultStrings[] =
   {                                                              \
     switch (retcode) {                                           \
     case EIS_INTEGRITY_CHECK_INVALID_SYMBOL:                     \
-      fprintf(stderr, "Comparision failed at position "GT_WU""   \
+      fprintf(stderr, "Comparison failed at position "GT_WU""   \
               ", reference symbol: %u, symbol read: %u\n",       \
               pos, symOrig, symEnc);                             \
       gt_error_set(err, "Invalid symbol encountered.");          \
diff --git a/src/match/eis-encidxseq.h b/src/match/eis-encidxseq.h
index 68b3d34..063b379 100644
--- a/src/match/eis-encidxseq.h
+++ b/src/match/eis-encidxseq.h
@@ -50,7 +50,7 @@
  * pass information that is kept across individual calls
  * @param err genometools error object reference
  * @return number of bits actually written, or (BitOffset)-1 if an
- * error occured
+ * error occurred
  */
 typedef BitOffset (*bitInsertFunc)(BitString cwDest, BitOffset cwOffset,
                                    BitString varDest, BitOffset varOffset,
@@ -436,7 +436,7 @@ EISSeekToHeader(const EISeq *seqIdx, uint16_t headerID,
  * @param pos position for which to print context
  * @param fp print diagnostics to this file pointer
  * @param hint use this structure for hinting
- * @return 0 if an I/O error occured wrt fp
+ * @return 0 if an I/O error occurred wrt fp
  */
 static inline int
 EISPrintDiagsForPos(const EISeq *seqIdx, GtUword pos, FILE *fp,
diff --git a/src/match/esa-mmsearch.c b/src/match/esa-mmsearch.c
index 2da6381..7671c67 100644
--- a/src/match/esa-mmsearch.c
+++ b/src/match/esa-mmsearch.c
@@ -455,13 +455,15 @@ void gt_queryuniquematch(bool selfmatch,
     {
       GtUword dbseqnum = gt_encseq_seqnum(suffixarray->encseq,dbstart),
               dbseqstartpos = gt_encseq_seqstartpos(suffixarray->encseq,
-                                                    dbseqnum);
+                                                    dbseqnum),
+              dbseqlen = gt_encseq_seqlength(suffixarray->encseq,dbseqnum);
 
       gt_querymatch_init(querymatchspaceptr,
                          matchlen,
                          dbstart,
                          dbseqnum,
                          dbstart - dbseqstartpos,
+                         dbseqlen,
                          0, /* score */
                          0, /* edist */
                          selfmatch,
@@ -523,7 +525,7 @@ static void gt_querysubstringmatch(bool selfmatch,
                                     dbstart,
                                     &querysubstring))
       {
-        GtUword dbseqnum, dbseqstartpos, extend;
+        GtUword dbseqnum, dbseqstartpos, dbseqlen, extend;
 
         extend = gt_mmsearch_extendright(dbencseq,
                                          mmsi->esr,
@@ -537,15 +539,17 @@ static void gt_querysubstringmatch(bool selfmatch,
         {
           dbseqnum = gt_encseq_seqnum(dbencseq,dbstart);
           dbseqstartpos = gt_encseq_seqstartpos(dbencseq,dbseqnum);
+          dbseqlen = gt_encseq_seqlength(dbencseq,dbseqnum);
         } else
         {
-          dbseqnum = dbseqstartpos = 0;
+          dbseqnum = dbseqstartpos = dbseqlen = 0;
         }
         gt_querymatch_init(querymatchspaceptr,
                            minmatchlength + extend,
                            dbstart,
                            dbseqnum,
                            dbstart - dbseqstartpos,
+                           dbseqlen,
                            0, /* score */
                            0, /* edist */
                            selfmatch,
diff --git a/src/match/querymatch-align.c b/src/match/querymatch-align.c
index b3237e0..bc925ad 100644
--- a/src/match/querymatch-align.c
+++ b/src/match/querymatch-align.c
@@ -160,7 +160,7 @@ GtQuerymatchoutoptions *gt_querymatchoutoptions_new(bool generatealignment,
   {
     querymatchoutoptions->alignment_show_buffer
       = gt_alignment_buffer_new(alignmentwidth);
-    querymatchoutoptions->linspace_spacemanager = gt_linspaceManagement_new();
+    querymatchoutoptions->linspace_spacemanager = gt_linspace_management_new();
     querymatchoutoptions->linspace_scorehandler = gt_scorehandler_new(0,1,0,1);
   }
   return querymatchoutoptions;
@@ -177,7 +177,7 @@ void gt_querymatchoutoptions_extend(
                   GtUword sensitivity,
                   double matchscore_bias,
                   bool always_polished_ends,
-                  bool seed_display)
+                  unsigned int display_flag)
 {
   if (errorpercentage > 0)
   {
@@ -207,7 +207,7 @@ void gt_querymatchoutoptions_extend(
         gt_alignment_polished_ends(querymatchoutoptions->alignment,
                                    querymatchoutoptions->pol_info,true);
       }
-      if (seed_display)
+      if (gt_querymatch_seed_display(display_flag))
       {
         gt_alignment_seed_display_set(querymatchoutoptions->alignment);
       }
@@ -222,7 +222,7 @@ void gt_querymatchoutoptions_for_align_only(
                   double matchscore_bias,
                   GtUword history_size,
                   bool always_polished_ends,
-                  bool seed_display)
+                  unsigned int display_flag)
 {
   gt_querymatchoutoptions_extend(querymatchoutoptions,
                                  errorpercentage,
@@ -234,7 +234,7 @@ void gt_querymatchoutoptions_for_align_only(
                                  100,
                                  matchscore_bias,
                                  always_polished_ends,
-                                 seed_display);
+                                 display_flag);
 }
 
 void gt_querymatchoutoptions_delete(
@@ -253,7 +253,7 @@ void gt_querymatchoutoptions_delete(
     GT_FREEARRAY(&querymatchoutoptions->eoplist,uint8_t);
     gt_alignment_buffer_delete(querymatchoutoptions->alignment_show_buffer);
     gt_encseq_reader_delete(querymatchoutoptions->esr_for_align_show);
-    gt_linspaceManagement_delete(querymatchoutoptions->linspace_spacemanager);
+    gt_linspace_management_delete(querymatchoutoptions->linspace_spacemanager);
     gt_scorehandler_delete(querymatchoutoptions->linspace_scorehandler);
     polishing_info_delete(querymatchoutoptions->pol_info);
     gt_free(querymatchoutoptions);
@@ -577,7 +577,7 @@ bool gt_querymatchoutoptions_alignment_prepare(GtQuerymatchoutoptions
 #else
         (void)
 #endif
-        gt_computelinearspace_generic(
+        gt_linearalign_compute_generic(
                               querymatchoutoptions->linspace_spacemanager,
                               querymatchoutoptions->linspace_scorehandler,
                               querymatchoutoptions->alignment,
@@ -607,7 +607,8 @@ bool gt_querymatchoutoptions_alignment_prepare(GtQuerymatchoutoptions
 void gt_querymatchoutoptions_alignment_show(const GtQuerymatchoutoptions
                                               *querymatchoutoptions,
                                             GtUword distance,
-                                            GT_UNUSED bool verify_alignment)
+                                            GT_UNUSED bool verify_alignment,
+                                            FILE *fp)
 {
   if (querymatchoutoptions != NULL)
   {
@@ -618,7 +619,7 @@ void gt_querymatchoutoptions_alignment_show(const GtQuerymatchoutoptions
         gt_alignment_show_generic(querymatchoutoptions->alignment_show_buffer,
                                   false,
                                   querymatchoutoptions->alignment,
-                                  stdout,
+                                  fp,
                                   (unsigned int)
                                   querymatchoutoptions->alignmentwidth,
                                   querymatchoutoptions->characters,
@@ -627,7 +628,7 @@ void gt_querymatchoutoptions_alignment_show(const GtQuerymatchoutoptions
       {
         gt_alignment_exact_show(querymatchoutoptions->alignment_show_buffer,
                                 querymatchoutoptions->alignment,
-                                stdout,
+                                fp,
                                 querymatchoutoptions->alignmentwidth,
                                 querymatchoutoptions->characters);
       }
@@ -641,11 +642,10 @@ void gt_querymatchoutoptions_alignment_show(const GtQuerymatchoutoptions
     {
       if (distance > 0)
       {
-        gt_alignment_show_multieop_list(querymatchoutoptions->alignment,
-                                        stdout);
+        gt_alignment_show_multieop_list(querymatchoutoptions->alignment, fp);
       } else
       {
-        printf("[]\n");
+        fprintf(fp, "[]\n");
       }
     }
     if (querymatchoutoptions->alignmentwidth > 0 ||
diff --git a/src/match/querymatch-align.h b/src/match/querymatch-align.h
index ed639d7..eeaf3cd 100644
--- a/src/match/querymatch-align.h
+++ b/src/match/querymatch-align.h
@@ -40,7 +40,7 @@ void gt_querymatchoutoptions_extend(
                   GtUword sensitivity,
                   double matchscore_bias,
                   bool always_polished_ends,
-                  bool seed_display);
+                  unsigned int display_flag);
 
 void gt_querymatchoutoptions_for_align_only(
                   GtQuerymatchoutoptions *querymatchoutoptions,
@@ -48,7 +48,7 @@ void gt_querymatchoutoptions_for_align_only(
                   double matchscore_bias,
                   GtUword history_size,
                   bool always_polished_ends,
-                  bool seed_display);
+                  unsigned int display_flag);
 
 void gt_querymatchoutoptions_delete(
         GtQuerymatchoutoptions *querymatchoutoptions);
@@ -75,7 +75,8 @@ bool gt_querymatchoutoptions_alignment_prepare(
 void gt_querymatchoutoptions_alignment_show(const GtQuerymatchoutoptions
                                               *querymatchoutoptions,
                                             GtUword distance,
-                                            bool verify_alignment);
+                                            bool verify_alignment,
+                                            FILE *fp);
 
 typedef struct
 {
diff --git a/src/match/querymatch.c b/src/match/querymatch.c
index 945473e..9998ddb 100644
--- a/src/match/querymatch.c
+++ b/src/match/querymatch.c
@@ -22,30 +22,34 @@
 #include "querymatch.h"
 #include "querymatch-align.h"
 
+#define GT_QUERYMATCH_SEED_DISPLAY_FLAG 1U /* display seeds */
+#define GT_QUERYMATCH_SEQLENGTH_DISPLAY_FLAG (1U << 1) /* display seed length */
+
 struct GtQuerymatch
 {
-   GtUword
-      dblen, /* length of match in dbsequence */
-      querylen, /* same as dblen for exact matches */
-      dbstart, /* absolute start position of match in database seq */
-      querystart, /* start of match in query, relative to start of query */
-      distance, /* 0 for exact match, upper bound on optimal distance */
-      dbseqnum, /* sequence number of dbstart */
-      dbstart_relative, /* start position of match in dbsequence
-                           relative to start of sequence */
-      querystart_fwdstrand, /* relative start of query on forward strand */
-      seedpos1,
-      seedpos2,
-      seedlen;
-   GtWord score; /* 0 for exact match */
-   uint64_t queryseqnum; /* ordinal number of match in query */
-   GtReadmode query_readmode; /* readmode of query sequence */
-   bool selfmatch,       /* true if both instances of the match refer to the
-                            same sequence */
-        seed_display,
-        verify_alignment;
-   GtQuerymatchoutoptions *ref_querymatchoutoptions; /* reference to
-        resources needed for alignment output */
+  GtUword
+    dblen, /* length of match in dbsequence */
+    querylen, /* same as dblen for exact matches */
+    dbstart, /* absolute start position of match in database seq */
+    querystart, /* start of match in query, relative to start of query */
+    distance, /* 0 for exact match, upper bound on optimal distance */
+    dbseqnum, /* sequence number of dbstart */
+    dbstart_relative, /* start position of match in dbsequence
+                         relative to start of sequence */
+    querystart_fwdstrand, /* relative start of query on forward strand */
+    query_totallength, /* length of single query sequence */
+    dbseqlen, /* length of single database sequence */
+    seedpos1,
+    seedpos2,
+    seedlen;
+  GtWord score; /* 0 for exact match */
+  uint64_t queryseqnum; /* ordinal number of match in query */
+  GtReadmode query_readmode; /* readmode of query sequence */
+  bool selfmatch, verify_alignment;
+  unsigned int display_flag;
+  GtQuerymatchoutoptions *ref_querymatchoutoptions; /* reference to
+      resources needed for alignment output */
+  FILE *fp;
 };
 
 GtQuerymatch *gt_querymatch_new(void)
@@ -54,9 +58,10 @@ GtQuerymatch *gt_querymatch_new(void)
 
   gt_assert(querymatch != NULL);
   querymatch->ref_querymatchoutoptions = NULL;
-  querymatch->seed_display = false;
-  querymatch->query_readmode = GT_READMODE_FORWARD;
+  querymatch->display_flag = 0;
   querymatch->verify_alignment = false;
+  querymatch->query_readmode = GT_READMODE_FORWARD;
+  querymatch->fp = stdout;
   return querymatch;
 }
 
@@ -76,10 +81,30 @@ void gt_querymatch_outoptions_set(GtQuerymatch *querymatch,
   querymatch->ref_querymatchoutoptions = querymatchoutoptions;
 }
 
-void gt_querymatch_seed_display_set(GtQuerymatch *querymatch)
+void gt_querymatch_file_set(GtQuerymatch *querymatch, FILE *fp)
+{
+  gt_assert(querymatch != NULL);
+  querymatch->fp = fp;
+}
+
+void gt_querymatch_display_set(GtQuerymatch *querymatch,
+                               unsigned int display_flag)
 {
   gt_assert(querymatch != NULL);
-  querymatch->seed_display = true;
+  querymatch->display_flag = display_flag;
+}
+
+unsigned int gt_querymatch_bool2display_flag(bool seed_display,
+                                             bool seqlength_display)
+{
+  return (unsigned int)
+         (seed_display ? GT_QUERYMATCH_SEED_DISPLAY_FLAG : 0) |
+         (seqlength_display ? GT_QUERYMATCH_SEQLENGTH_DISPLAY_FLAG : 0);
+}
+
+bool gt_querymatch_seed_display(unsigned int display_flag)
+{
+  return (display_flag & GT_QUERYMATCH_SEED_DISPLAY_FLAG) ? true : false;
 }
 
 GtUword gt_querymatch_dbseqnum(const GtQuerymatch *querymatch)
@@ -106,6 +131,7 @@ void gt_querymatch_init(GtQuerymatch *querymatch,
                         GtUword dbstart,
                         GtUword dbseqnum,
                         GtUword dbstart_relative,
+                        GtUword dbseqlen,
                         GtWord score,
                         GtUword distance,
                         bool selfmatch,
@@ -131,6 +157,8 @@ void gt_querymatch_init(GtQuerymatch *querymatch,
                                       querylen,
                                       query_totallength,
                                       querymatch->querystart);
+  querymatch->query_totallength = query_totallength;
+  querymatch->dbseqlen = dbseqlen;
 }
 
 void gt_querymatch_delete(GtQuerymatch *querymatch)
@@ -172,19 +200,20 @@ void gt_querymatch_coordinates_out(const GtQuerymatch *querymatch)
   const char *outflag = "FRCP";
 
   gt_assert(querymatch != NULL);
-  if (querymatch->seed_display)
+  if (querymatch->display_flag & GT_QUERYMATCH_SEED_DISPLAY_FLAG)
   {
-    printf("# seed:\t" GT_WU "\t" GT_WU "\t" GT_WU "\n",querymatch->seedpos1,
-             querymatch->seedpos2,querymatch->seedlen);
+    fprintf(querymatch->fp, "# seed:\t" GT_WU "\t" GT_WU "\t" GT_WU "\n",
+            querymatch->seedpos1, querymatch->seedpos2, querymatch->seedlen);
   }
-  printf(GT_WU " " GT_WU " " GT_WU " %c " GT_WU " " Formatuint64_t " " GT_WU,
-         querymatch->dblen,
-         querymatch->dbseqnum,
-         querymatch->dbstart_relative,
-         outflag[querymatch->query_readmode],
-         querymatch->querylen,
-         PRINTuint64_tcast(querymatch->queryseqnum),
-         querymatch->querystart_fwdstrand);
+  fprintf(querymatch->fp,
+          GT_WU " " GT_WU " " GT_WU " %c " GT_WU " " Formatuint64_t " " GT_WU,
+          querymatch->dblen,
+          querymatch->dbseqnum,
+          querymatch->dbstart_relative,
+          outflag[querymatch->query_readmode],
+          querymatch->querylen,
+          PRINTuint64_tcast(querymatch->queryseqnum),
+          querymatch->querystart_fwdstrand);
   if (querymatch->score > 0)
   {
     double similarity;
@@ -198,10 +227,15 @@ void gt_querymatch_coordinates_out(const GtQuerymatch *querymatch)
                                                     querymatch->dblen +
                                                     querymatch->querylen);
     }
-    printf(" " GT_WD " " GT_WU " %.2f",
-           querymatch->score,querymatch->distance,similarity);
+    fprintf(querymatch->fp, " " GT_WD " " GT_WU " %.2f",
+            querymatch->score, querymatch->distance, similarity);
+  }
+  if (querymatch->display_flag & GT_QUERYMATCH_SEQLENGTH_DISPLAY_FLAG)
+  {
+    fprintf(querymatch->fp, " " GT_WU " " GT_WU,
+            querymatch->dbseqlen, querymatch->query_totallength);
   }
-  printf("\n");
+  fprintf(querymatch->fp, "\n");
 }
 
 void gt_querymatch_prettyprint(const GtQuerymatch *querymatch)
@@ -211,23 +245,24 @@ void gt_querymatch_prettyprint(const GtQuerymatch *querymatch)
     gt_querymatch_coordinates_out(querymatch);
     gt_querymatchoutoptions_alignment_show(querymatch->ref_querymatchoutoptions,
                                            querymatch->distance,
-                                           querymatch->verify_alignment);
+                                           querymatch->verify_alignment,
+                                           querymatch->fp);
   }
 }
 
 bool gt_querymatch_check_final(const GtQuerymatch *querymatch,
-                          GtUword errorpercentage,
-                          GtUword userdefinedleastlength)
+                               GtUword errorpercentage,
+                               GtUword userdefinedleastlength)
 {
   GtUword total_alignedlen;
 
   gt_assert(querymatch != NULL);
   total_alignedlen = querymatch->dblen + querymatch->querylen;
 #ifdef SKDEBUG
-  printf("errorrate = %.2f <=? " GT_WU " = errorpercentage\n",
+  fprintf(querymatch->fp, "errorrate = %.2f <=? " GT_WU " = errorpercentage\n",
           gt_querymatch_error_rate(querymatch->distance,total_alignedlen),
           errorpercentage);
-  printf("total_alignedlen = " GT_WU " >=? " GT_WU
+  fprintf(querymatch->fp, "total_alignedlen = " GT_WU " >=? " GT_WU
          " = 2 * userdefinedleastlen\n",
          total_alignedlen, 2 * userdefinedleastlength);
 #endif
@@ -236,8 +271,7 @@ bool gt_querymatch_check_final(const GtQuerymatch *querymatch,
          total_alignedlen >= 2 * userdefinedleastlength) ? true : false;
 }
 
-static void gt_querymatch_applycorrection(GtQuerymatch *querymatch,
-                                          GtUword query_totallength)
+static void gt_querymatch_applycorrection(GtQuerymatch *querymatch)
 {
   const GtSeqpaircoordinates *coords;
 
@@ -250,6 +284,7 @@ static void gt_querymatch_applycorrection(GtQuerymatch *querymatch,
                      querymatch->dbstart + coords->uoffset,
                      querymatch->dbseqnum,
                      querymatch->dbstart_relative + coords->uoffset,
+                     querymatch->dbseqlen,
                      gt_querymatch_distance2score(coords->sumdist,
                                                   coords->ulen + coords->vlen),
                      coords->sumdist,
@@ -257,13 +292,12 @@ static void gt_querymatch_applycorrection(GtQuerymatch *querymatch,
                      querymatch->queryseqnum,
                      coords->vlen,
                      querymatch->querystart + coords->voffset,
-                     query_totallength);
+                     querymatch->query_totallength);
 }
 
 bool gt_querymatch_process(GtQuerymatch *querymatchptr,
                            const GtEncseq *encseq,
                            const GtSeqorEncseq *query,
-                           GtUword query_totallength,
                            bool greedyextension)
 {
   if (!querymatchptr->selfmatch ||
@@ -301,7 +335,8 @@ bool gt_querymatch_process(GtQuerymatch *querymatchptr,
                                                     querymatchptr->
                                                       query_readmode,
                                                     query_seqstartpos,
-                                                    query_totallength,
+                                                    querymatchptr->
+                                                      query_totallength,
                                                     querymatchptr->dbstart,
                                                     querymatchptr->dblen,
                                                     abs_querystart,
@@ -314,7 +349,7 @@ bool gt_querymatch_process(GtQuerymatch *querymatchptr,
                                                     greedyextension);
       if (seededalignment && !greedyextension)
       {
-        gt_querymatch_applycorrection(querymatchptr,query_totallength);
+        gt_querymatch_applycorrection(querymatchptr);
       }
     }
     return true;
@@ -337,6 +372,7 @@ static GtReadmode gt_readmode_character_code_parse(char direction)
 }
 
 bool gt_querymatch_read_line(GtQuerymatch *querymatchptr,
+                             bool withseqlength,
                              const char *line_ptr,
                              bool selfmatch,
                              GtUword seedpos1,
@@ -347,24 +383,46 @@ bool gt_querymatch_read_line(GtQuerymatch *querymatchptr,
 {
   char direction;
   double identity;
+  int parsed_items;
 
-  if (sscanf(line_ptr,
-             GT_WU " " GT_WU " " GT_WU " %c " GT_WU " %"PRIu64 " "
-             GT_WU " " GT_WD " " GT_WU " %lf",
-             &querymatchptr->dblen,
-             &querymatchptr->dbseqnum,
-             &querymatchptr->dbstart_relative,
-             &direction,
-             &querymatchptr->querylen,
-             &querymatchptr->queryseqnum,
-             &querymatchptr->querystart_fwdstrand,
-             &querymatchptr->score,
-             &querymatchptr->distance,
-             &identity) == 10)
+  if (withseqlength)
+  {
+    parsed_items
+      = sscanf(line_ptr,
+               GT_WU " " GT_WU " " GT_WU " %c " GT_WU " %"PRIu64 " "
+               GT_WU " " GT_WD " " GT_WU " %lf " GT_WU " " GT_WU,
+               &querymatchptr->dblen,
+               &querymatchptr->dbseqnum,
+               &querymatchptr->dbstart_relative,
+               &direction,
+               &querymatchptr->querylen,
+               &querymatchptr->queryseqnum,
+               &querymatchptr->querystart_fwdstrand,
+               &querymatchptr->score,
+               &querymatchptr->distance,
+               &identity,
+               &querymatchptr->dbseqlen,
+               &querymatchptr->query_totallength);
+  } else
+  {
+    parsed_items
+      = sscanf(line_ptr,
+               GT_WU " " GT_WU " " GT_WU " %c " GT_WU " %"PRIu64 " "
+               GT_WU " " GT_WD " " GT_WU " %lf",
+               &querymatchptr->dblen,
+               &querymatchptr->dbseqnum,
+               &querymatchptr->dbstart_relative,
+               &direction,
+               &querymatchptr->querylen,
+               &querymatchptr->queryseqnum,
+               &querymatchptr->querystart_fwdstrand,
+               &querymatchptr->score,
+               &querymatchptr->distance,
+               &identity);
+  }
+  if ((withseqlength && parsed_items == 12) ||
+      (!withseqlength && parsed_items == 10))
   {
-    GtUword query_totallength = gt_encseq_seqlength(queryencseq,
-                                                    querymatchptr->queryseqnum);
-
     querymatchptr->query_readmode = gt_readmode_character_code_parse(direction);
     querymatchptr->dbstart
       = gt_encseq_seqstartpos(dbencseq,querymatchptr->dbseqnum) +
@@ -373,10 +431,17 @@ bool gt_querymatch_read_line(GtQuerymatch *querymatchptr,
     querymatchptr->seedpos1 = seedpos1;
     querymatchptr->seedpos2 = seedpos2;
     querymatchptr->seedlen = seedlen;
+    if (!withseqlength)
+    {
+      querymatchptr->query_totallength
+        = gt_encseq_seqlength(queryencseq,querymatchptr->queryseqnum);
+      querymatchptr->dbseqlen
+        = gt_encseq_seqlength(dbencseq,querymatchptr->dbseqnum);
+    }
     querymatchptr->querystart
       = gt_querymatch_querystart_derive(querymatchptr->query_readmode,
                                         querymatchptr->querylen,
-                                        query_totallength,
+                                        querymatchptr->query_totallength,
                                         querymatchptr->querystart_fwdstrand);
     return true;
   }
@@ -388,6 +453,7 @@ bool gt_querymatch_complete(GtQuerymatch *querymatchptr,
                             GtUword dbstart,
                             GtUword dbseqnum,
                             GtUword dbstart_relative,
+                            GtUword dbseqlen,
                             GtWord score,
                             GtUword distance,
                             bool selfmatch,
@@ -408,6 +474,7 @@ bool gt_querymatch_complete(GtQuerymatch *querymatchptr,
                      dbstart,
                      dbseqnum,
                      dbstart_relative,
+                     dbseqlen,
                      score,
                      distance,
                      selfmatch,
@@ -421,7 +488,6 @@ bool gt_querymatch_complete(GtQuerymatch *querymatchptr,
   return gt_querymatch_process(querymatchptr,
                                encseq,
                                query,
-                               query_totallength,
                                greedyextension);
 }
 
@@ -461,6 +527,12 @@ uint64_t gt_querymatch_queryseqnum(const GtQuerymatch *querymatch)
   return querymatch->queryseqnum;
 }
 
+GtUword gt_querymatch_query_totallength(const GtQuerymatch *querymatch)
+{
+  gt_assert(querymatch != NULL);
+  return querymatch->query_totallength;
+}
+
 void gt_querymatch_query_readmode_set(GtQuerymatch *querymatch,
                                       GtReadmode query_readmode)
 {
@@ -503,12 +575,22 @@ double gt_querymatch_error_rate(GtUword distance,GtUword alignedlen)
 }
 
 bool gt_querymatch_overlap(const GtQuerymatch *querymatch,
-                           GtUword start_relative)
+                           GtUword nextseed_db_end_relative,
+                           GtUword nextseed_query_end_relative,
+                           bool use_db_pos)
 {
+  bool queryoverlap, dboverlap, dboverlap_at_end, dboverlap_at_start;
   gt_assert(querymatch != NULL);
-  return querymatch->querystart + querymatch->querylen >= start_relative
-           ? true /* overlap with querymatch */
-           : false; /* next seeds starts after curren extension */
+
+  queryoverlap = (querymatch->querystart + querymatch->querylen >
+                  nextseed_query_end_relative ? true : false);
+  dboverlap_at_end = (querymatch->dbstart_relative + querymatch->dblen >
+                      nextseed_db_end_relative ? true : false);
+  dboverlap_at_start = (querymatch->dbstart_relative + querymatch->seedlen <=
+                        nextseed_db_end_relative ? true : false);
+  dboverlap = !use_db_pos || (dboverlap_at_end && dboverlap_at_start);
+
+  return queryoverlap && dboverlap ? true : false;
 }
 
 static int gt_querymatch_compare_ascending(const void *va,const void *vb)
diff --git a/src/match/querymatch.h b/src/match/querymatch.h
index 11371b3..7f6a3d4 100644
--- a/src/match/querymatch.h
+++ b/src/match/querymatch.h
@@ -19,6 +19,7 @@
 #define QUERYMATCH_H
 
 #include <inttypes.h>
+#include <stdio.h>
 #include "core/error_api.h"
 #include "core/readmode.h"
 #include "core/encseq.h"
@@ -33,7 +34,15 @@ GT_DECLAREARRAYSTRUCT(GtQuerymatch);
 
 GtQuerymatch *gt_querymatch_new(void);
 
-void gt_querymatch_seed_display_set(GtQuerymatch *querymatch);
+void gt_querymatch_file_set(GtQuerymatch *querymatch, FILE *fp);
+
+void gt_querymatch_display_set(GtQuerymatch *querymatch,
+                               unsigned int display_flag);
+
+unsigned int gt_querymatch_bool2display_flag(bool seed_display,
+                                             bool seqlength_display);
+
+bool gt_querymatch_seed_display(unsigned int display_flag);
 
 void gt_querymatch_outoptions_set(GtQuerymatch *querymatch,
                 GtQuerymatchoutoptions *querymatchoutoptions);
@@ -43,6 +52,7 @@ void gt_querymatch_init(GtQuerymatch *querymatch,
                         GtUword dbstart,
                         GtUword dbseqnum,
                         GtUword dbstart_relative,
+                        GtUword dbseqlen,
                         GtWord score,
                         GtUword distance,
                         bool selfmatch,
@@ -52,6 +62,7 @@ void gt_querymatch_init(GtQuerymatch *querymatch,
                         GtUword query_totallength);
 
 bool gt_querymatch_read_line(GtQuerymatch *querymatchptr,
+                             bool withseqlength,
                              const char *line_ptr,
                              bool selfmatch,
                              GtUword seedpos1,
@@ -63,7 +74,6 @@ bool gt_querymatch_read_line(GtQuerymatch *querymatchptr,
 bool gt_querymatch_process(GtQuerymatch *querymatchptr,
                            const GtEncseq *encseq,
                            const GtSeqorEncseq *query,
-                           GtUword query_totallength,
                            bool greedyextension);
 
 void gt_querymatch_delete(GtQuerymatch *querymatch);
@@ -73,6 +83,7 @@ bool gt_querymatch_complete(GtQuerymatch *querymatchptr,
                             GtUword dbstart,
                             GtUword dbseqnum,
                             GtUword dbstart_relative,
+                            GtUword dbseqlen,
                             GtWord score,
                             GtUword distance,
                             bool selfmatch,
@@ -97,7 +108,7 @@ uint64_t gt_querymatch_queryseqnum(const GtQuerymatch *querymatch);
 
 const GtUchar *gt_querymatch_querysequence(const GtQuerymatch *querymatch);
 
-GtUword gt_querymatch_querytotallength(const GtQuerymatch *querymatch);
+GtUword gt_querymatch_query_totallength(const GtQuerymatch *querymatch);
 
 GtUword gt_querymatch_dbseqnum(const GtQuerymatch *querymatch);
 
@@ -130,7 +141,9 @@ GtWord gt_querymatch_distance2score(GtUword distance,GtUword alignedlen);
 
 /* Returns true, iff the given seed start position is below the querymatch. */
 bool gt_querymatch_overlap(const GtQuerymatch *querymatch,
-                           GtUword start_relative);
+                           GtUword nextseed_db_end_relative,
+                           GtUword nextseed_query_end_relative,
+                           bool use_db_pos);
 
 bool gt_querymatch_has_seed(const GtQuerymatch *querymatch);
 
diff --git a/src/match/rdj-filesuf-def.h b/src/match/rdj-filesuf-def.h
index 0795403..54d26f9 100644
--- a/src/match/rdj-filesuf-def.h
+++ b/src/match/rdj-filesuf-def.h
@@ -31,6 +31,7 @@
 #define GT_READJOINER_SUFFIX_PREFILTERED_FAS    ".p.fas"
 #define GT_READJOINER_SUFFIX_SEQNUMS            ".sn"
 #define GT_READJOINER_SUFFIX_CNTLIST            ".cnt"
+#define GT_READJOINER_SUFFIX_CONNECTING_PATHS   ".connect.fas"
 
 /* string graph */
 #define GT_READJOINER_SUFFIX_SG                 ".sg"
diff --git a/src/match/rdj-strgraph.c b/src/match/rdj-strgraph.c
index fa9c1d3..b8df9c9 100644
--- a/src/match/rdj-strgraph.c
+++ b/src/match/rdj-strgraph.c
@@ -208,6 +208,12 @@ typedef uint64_t GtStrgraphVnum;
 #include "match/rdj-strgraph-edges-bitfield-def.h"
 #endif
 
+/* seqnum where to read label for edge/vertex in mirrored encseq */
+
+#define GT_STRGRAPH_V_MIRROR_SEQNUM(NOFV, V) (GT_STRGRAPH_V_IS_E(V) \
+    ? GT_STRGRAPH_V_READNUM(V) \
+    : ((GtUword)NOFV - GT_STRGRAPH_V_READNUM(V) - 1))
+
 void gt_strgraph_show_limits_debug_log(void)
 {
   gt_log_log("string graph representation: vertices=%s edges=%s",
@@ -1621,6 +1627,284 @@ static int gt_strgraph_dot_show_context(GtStrgraph *strgraph,
   return had_err;
 }
 
+static void gt_strgraph_output_connecting_path(GtStrgraph *strgraph,
+    GtArray *path, GtContigsWriter *cw)
+{
+  GtUword path_size, i;
+  GtStrgraphVnumAndDepth *vd;
+  path_size = gt_array_size(path);
+  vd = gt_array_get(path, 0);
+  gt_contigs_writer_start(cw,
+      GT_STRGRAPH_V_MIRROR_SEQNUM(GT_STRGRAPH_NOFVERTICES(strgraph), vd->v));
+  for (i = (GtUword)1UL; i < path_size; i++)
+  {
+    vd = gt_array_get(path, i);
+    gt_contigs_writer_append(cw, GT_STRGRAPH_V_MIRROR_SEQNUM(
+          GT_STRGRAPH_NOFVERTICES(strgraph), vd->v), (GtUword)vd->d);
+  }
+  gt_contigs_writer_write(cw);
+}
+
+/* return code: 0 if goal_sn was found, -1 otherwise */
+static int gt_strgraph_add_edge_to_connecting_path(GtStrgraph *strgraph,
+    GtStrgraphVnum from, GtStrgraphVEdgenum j, GtUword goal_sn,
+    GtStrgraphVtype goal_vt, GtUword current_length, GtUword minlen,
+    GtUword maxlen, GtArray *path, bool first_path_only,
+    GtUword *count_too_long, GtUword *count_too_short, GtUword *count_found,
+    GtUword *count_circular, GtUword *count_redundant, GtContigsWriter *cw,
+    GtLogger *logger)
+{
+  GtStrgraphVnumAndDepth wl;
+  GtStrgraphVEdgenum e;
+  wl.v = GT_STRGRAPH_EDGE_DEST(strgraph, from, j);
+  wl.d = GT_STRGRAPH_EDGE_LEN(strgraph, from, j);
+  current_length += wl.d;
+  if (current_length > maxlen)
+  {
+    (*count_too_long)++;
+    return -1;
+  }
+  if ((GT_STRGRAPH_V_READNUM(wl.v) == goal_sn) &&
+      ((goal_vt == GT_STRGRAPH_VTYPE_A) ||
+       ((goal_vt == GT_STRGRAPH_VTYPE_E) && GT_STRGRAPH_V_IS_E(wl.v)) ||
+       ((goal_vt == GT_STRGRAPH_VTYPE_B) && GT_STRGRAPH_V_IS_B(wl.v))))
+  {
+    if (current_length <= minlen)
+    {
+      (*count_too_short)++;
+      return -1;
+    }
+    else
+    {
+      (*count_found)++;
+      gt_array_add(path, wl);
+      gt_logger_log(logger, "Path found, length: "GT_WU, current_length);
+      gt_strgraph_output_connecting_path(strgraph, path, cw);
+      gt_array_pop(path);
+      return 0;
+    }
+  }
+  if (GT_STRGRAPH_V_MARK(strgraph, wl.v) == GT_STRGRAPH_V_MARKED)
+  {
+    (*count_circular)++;
+    return -1;
+  }
+  else if (GT_STRGRAPH_V_MARK(strgraph, wl.v) == GT_STRGRAPH_V_INPLAY)
+  {
+    (*count_redundant)++;
+    return -1;
+  }
+  else
+  {
+    int found = -1;
+    GT_STRGRAPH_V_SET_MARK(strgraph, wl.v, GT_STRGRAPH_V_MARKED);
+    for (e = 0; e < GT_STRGRAPH_V_NOFEDGES(strgraph, wl.v); e++)
+    {
+      if (!GT_STRGRAPH_EDGE_IS_REDUCED(strgraph, wl.v, e))
+      {
+        int retcode;
+        gt_array_add(path, wl);
+        retcode = gt_strgraph_add_edge_to_connecting_path(strgraph, wl.v, e,
+            goal_sn, goal_vt, current_length, minlen, maxlen, path,
+            first_path_only, count_too_long, count_too_short, count_found,
+            count_circular, count_redundant, cw, logger);
+        gt_array_pop(path);
+        if (retcode == 0)
+        {
+          if (first_path_only)
+            return retcode;
+          found = retcode;
+        }
+      }
+    }
+    GT_STRGRAPH_V_SET_MARK(strgraph, wl.v, GT_STRGRAPH_V_INPLAY);
+    return found;
+  }
+}
+
+/* return code: 0 if goal_sn was found, -1 otherwise */
+static int gt_strgraph_find_connecting_path_from_vertex(GtStrgraph *strgraph,
+    GtStrgraphVnumAndDepth vd, GtStrgraphVEdgenum nofedges, GtUword to,
+    GtStrgraphVtype to_vt, GtUword minlen, GtUword maxlen, bool first_path_only,
+    GtContigsWriter *cw, GtLogger *logger)
+{
+  GtArray *path;
+  GtStrgraphVEdgenum j;
+  int found = -1;
+  GtUword count_too_long = 0, count_too_short = 0,
+          count_found = 0, count_circular = 0,
+          count_redundant = 0;
+
+  path = gt_array_new(sizeof (GtStrgraphVnumAndDepth));
+  gt_array_add(path, vd);
+  for (j = 0; j < nofedges; j++)
+  {
+    if (!GT_STRGRAPH_EDGE_IS_REDUCED(strgraph, vd.v, j))
+    {
+      int retcode;
+      retcode = gt_strgraph_add_edge_to_connecting_path(strgraph, vd.v, j,
+          to, to_vt, vd.d, minlen, maxlen, path, first_path_only,
+          &count_too_long, &count_too_short, &count_found, &count_circular,
+          &count_redundant, cw, logger);
+      if (retcode == 0)
+      {
+        found = retcode;
+        if (first_path_only)
+          break;
+      }
+    }
+  }
+  gt_array_delete(path);
+  gt_logger_log(logger, "Paths interrupted as too long:  "GT_WU,
+      count_too_long);
+  gt_logger_log(logger, "Paths interrupted as circular:  "GT_WU,
+      count_circular);
+  gt_logger_log(logger, "Paths interrupted as redundant: "GT_WU,
+      count_redundant);
+  gt_logger_log(logger, "Paths discarded as too short:   "GT_WU,
+      count_too_short);
+  gt_logger_log(logger, "Paths output:                   "GT_WU,
+      count_found);
+  return found;
+}
+
+/* note: the algorithm is heuristic and generally will not find all
+   connecting paths; e.g. if a vertex vA is reached by some path P1
+   of length L1 and all paths from vA to the goal have a length
+   > maxlen - L1, the vertex vA will be marked and not visited anymore;
+   however, it could be that arriving later to vA through some other
+   path P2 of length L2 < L1, the same paths would not be too long
+   anymore - but it's too late, as vA has been marked; to fix this
+   one would have to use, instead of a mark, a length value (which would
+   make the algorithm similar to Dijekstra shortest paths)
+*/
+int gt_strgraph_find_connecting_path(GtStrgraph *strgraph, GtUword from,
+    GtStrgraphVtype from_vt, GtUword to, GtStrgraphVtype to_vt,
+    GtUword minlen, GtUword maxlen, bool first_path_only,
+    const char *indexname, const char *suffix,
+    GtLogger *logger, GtError *err)
+{
+  int had_err = 0;
+
+  if (from >= (GtUword)GT_STRGRAPH_NOFREADS(strgraph))
+  {
+    had_err = -1;
+    gt_error_set(err, "Can't search path from read "GT_WU" "
+        "because the readset has "FormatGtStrgraphVnum" reads", from,
+        GT_STRGRAPH_NOFREADS(strgraph));
+  }
+  if (to >= (GtUword)GT_STRGRAPH_NOFREADS(strgraph))
+  {
+    had_err = -1;
+    gt_error_set(err, "Can't search path from read "GT_WU" "
+        "because the readset has "FormatGtStrgraphVnum" reads", to,
+        GT_STRGRAPH_NOFREADS(strgraph));
+  }
+  if (!had_err)
+  {
+    GtStrgraphVnumAndDepth vd;
+    GtStrgraphVEdgenum nofedges, nofedges_sum = 0;
+    GtStrgraphVnum i;
+    GtContigsWriter *cw;
+    GtFile *outfp;
+    GtStr *complete_suffix;
+    bool unreachable = false;
+    int found = -1;
+
+    /* check if "to" is reachable */
+    if (to_vt == GT_STRGRAPH_VTYPE_B || to_vt == GT_STRGRAPH_VTYPE_A)
+    {
+      nofedges = GT_STRGRAPH_V_NOFEDGES(strgraph, GT_STRGRAPH_V_B(to));
+      nofedges_sum = nofedges;
+      if (nofedges == 0)
+      {
+        gt_logger_log(logger, "Destination read has no edges from B vertex");
+        if (to_vt == GT_STRGRAPH_VTYPE_B)
+          unreachable = true;
+      }
+    }
+    if (to_vt == GT_STRGRAPH_VTYPE_E || to_vt == GT_STRGRAPH_VTYPE_A)
+    {
+      nofedges = GT_STRGRAPH_V_NOFEDGES(strgraph, GT_STRGRAPH_V_E(to));
+      nofedges_sum += nofedges;
+      if (nofedges == 0)
+      {
+        gt_logger_log(logger, "Destination read has no edges from E vertex");
+        if (to_vt == GT_STRGRAPH_VTYPE_E || nofedges_sum == 0)
+          unreachable = true;
+      }
+    }
+    if (unreachable)
+    {
+      gt_logger_log(logger, "Destination read unreachable");
+      return 0;
+    }
+
+    gt_assert(strgraph->encseq != NULL);
+    gt_assert(gt_encseq_is_mirrored(strgraph->encseq));
+    complete_suffix = gt_str_new();
+    gt_str_append_char(complete_suffix, '.');
+    gt_str_append_uword(complete_suffix, from);
+    gt_str_append_char(complete_suffix, '.');
+    gt_str_append_uword(complete_suffix, to);
+    gt_str_append_cstr(complete_suffix, suffix);
+    outfp = gt_strgraph_get_file(indexname, gt_str_get(complete_suffix),
+        true, false);
+    gt_logger_log(logger, "Connecting paths output filename: %s%s", indexname,
+        gt_str_get(complete_suffix));
+    cw = gt_contigs_writer_new(strgraph->encseq, outfp);
+    gt_contigs_writer_enable_complete_path_output(cw);
+
+    /* reset vertex marks */
+    for (i = 0; i < GT_STRGRAPH_NOFVERTICES(strgraph); i++)
+      GT_STRGRAPH_V_SET_MARK(strgraph, i, GT_STRGRAPH_V_VACANT);
+
+    vd.d = GT_STRGRAPH_SEQLEN(strgraph, from);
+
+    /* disallow returning to origin read in any orientation
+       (however, from == to should still work) */
+    GT_STRGRAPH_V_SET_MARK(strgraph, GT_STRGRAPH_V_B(from),
+        GT_STRGRAPH_V_MARKED);
+    GT_STRGRAPH_V_SET_MARK(strgraph, GT_STRGRAPH_V_E(from),
+        GT_STRGRAPH_V_MARKED);
+
+    /* search path from B vertex */
+    if (from_vt == GT_STRGRAPH_VTYPE_B || from_vt == GT_STRGRAPH_VTYPE_A)
+    {
+      vd.v = GT_STRGRAPH_V_B(from);
+      nofedges = GT_STRGRAPH_V_NOFEDGES(strgraph, vd.v);
+      if (nofedges == 0)
+        gt_logger_log(logger, "Origin read has no edges from B vertex");
+      else
+      {
+        gt_logger_log(logger, "Computing paths starting from B vertex...");
+        found = gt_strgraph_find_connecting_path_from_vertex(strgraph, vd,
+            nofedges, to, to_vt, minlen, maxlen, first_path_only, cw, logger);
+      }
+    }
+
+    if ((from_vt == GT_STRGRAPH_VTYPE_E || from_vt == GT_STRGRAPH_VTYPE_A) &&
+        ((found != 0) || !first_path_only))
+    {
+      /* search path from E vertex */
+      vd.v = GT_STRGRAPH_V_E(from);
+      nofedges = GT_STRGRAPH_V_NOFEDGES(strgraph, vd.v);
+      if (nofedges == 0)
+        gt_logger_log(logger, "Origin read has no edges from E vertex");
+      else
+      {
+        gt_logger_log(logger, "Computing paths starting from E vertex...");
+        gt_strgraph_find_connecting_path_from_vertex(strgraph, vd, nofedges,
+            to, to_vt, minlen, maxlen, first_path_only, cw, logger);
+      }
+    }
+    gt_str_delete(complete_suffix);
+    gt_contigs_writer_delete(cw);
+    gt_file_delete(outfp);
+  }
+  return had_err;
+}
+
 /* format: read[E|B] [numofedges]: neighbor1[E|B], neighbor2[E|B]... */
 static void gt_strgraph_adjlist_show(const GtStrgraph *strgraph, GtFile *outfp)
 {
@@ -2147,12 +2431,6 @@ static void gt_strgraph_traverse(GtStrgraph *strgraph,
 
 #define GT_STRGRAPH_CONTIG_INC 16384UL
 
-/* seqnum where to read label for edge/vertex in mirrored encseq */
-
-#define GT_STRGRAPH_V_MIRROR_SEQNUM(NOFV, V) (GT_STRGRAPH_V_IS_E(V) \
-    ? GT_STRGRAPH_V_READNUM(V) \
-    : ((GtUword)NOFV - GT_STRGRAPH_V_READNUM(V) - 1))
-
 /* --- Contig Paths Output --- */
 
 GT_DECLAREARRAYSTRUCT(GtContigpathElem);
diff --git a/src/match/rdj-strgraph.h b/src/match/rdj-strgraph.h
index e0fc253..7cdc1e8 100644
--- a/src/match/rdj-strgraph.h
+++ b/src/match/rdj-strgraph.h
@@ -144,6 +144,19 @@ GtUword gt_strgraph_redpbubbles(GtStrgraph *strgraph,
 /* remove marked edges and realloc edges list */
 void gt_strgraph_compact(GtStrgraph *strgraph, bool show_progressbar);
 
+/* allows to specify required vertex type; A = B/E (any) */
+typedef enum {
+  GT_STRGRAPH_VTYPE_B,
+  GT_STRGRAPH_VTYPE_E,
+  GT_STRGRAPH_VTYPE_A,
+} GtStrgraphVtype;
+
+/* find path(s) from-->to of string length l: minlen <= l <= maxlen */
+int gt_strgraph_find_connecting_path(GtStrgraph *strgraph, GtUword from,
+    GtStrgraphVtype from_vt, GtUword to, GtStrgraphVtype to_vt, GtUword minlen,
+    GtUword maxlen, bool first_path_only, const char *indexname,
+    const char *suffix, GtLogger *logger, GtError *err);
+
 /* --- spell contigs --- */
 
 void gt_strgraph_spell(GtStrgraph *strgraph, GtUword min_path_depth,
diff --git a/src/match/sarr-def.h b/src/match/sarr-def.h
index c2c2c7e..78843f3 100644
--- a/src/match/sarr-def.h
+++ b/src/match/sarr-def.h
@@ -24,12 +24,11 @@
 #include "core/types_api.h"
 #include "core/unused_api.h"
 #include "core/codetype.h"
+#include "match/declare-readfunc.h"
 
 #include "lcpoverflow.h"
 #include "bcktab.h"
 
-#define FILEBUFFERSIZE 4096
-
 #define SARR_ESQTAB 1U
 #define SARR_SUFTAB (1U << 1)
 #define SARR_LCPTAB (1U << 2)
@@ -46,40 +45,6 @@
                      SARR_DESTAB |\
                      SARR_SSPTAB)
 
-#define DECLAREBufferedfiletype(TYPE)\
-        typedef struct\
-        {\
-          unsigned int nextfree,\
-                       nextread;\
-          TYPE *bufferedfilespace;\
-          FILE *fp;\
-        } GtBufferedfile_ ## TYPE
-
-#define DECLAREREADFUNCTION(TYPE)\
-        GT_UNUSED static int gt_readnextfromstream_ ## TYPE (TYPE *val,\
-                                                  GtBufferedfile_ ## TYPE *buf)\
-        {\
-          if (buf->nextread >= buf->nextfree)\
-          {\
-            buf->nextfree = (unsigned int) fread(buf->bufferedfilespace,\
-                                                 sizeof (TYPE),\
-                                                 (size_t) FILEBUFFERSIZE,\
-                                                 buf->fp);\
-            if (ferror(buf->fp))\
-            {\
-              fprintf(stderr,"error when trying to read next %s",#TYPE);\
-              exit(GT_EXIT_PROGRAMMING_ERROR);\
-            }\
-            buf->nextread = 0;\
-            if (buf->nextfree == 0)\
-            {\
-              return 0;\
-            }\
-          }\
-          *val = buf->bufferedfilespace[buf->nextread++];\
-          return 1;\
-        }
-
 DECLAREBufferedfiletype(GtUword);
 DECLAREREADFUNCTION(GtUword);
 
diff --git a/src/match/seed-extend-iter.c b/src/match/seed-extend-iter.c
index 99ee080..0dfcba1 100644
--- a/src/match/seed-extend-iter.c
+++ b/src/match/seed-extend-iter.c
@@ -25,7 +25,7 @@
 struct GtSeedextendMatchIterator
 {
   GtStr *ii, *qii;
-  bool mirror, bias_parameters;
+  bool mirror, bias_parameters, seqlength_display;
   GtEncseq *aencseq, *bencseq;
   GtUword errorpercentage, history_size;
   const char *matchfilename;
@@ -95,6 +95,7 @@ GtSeedextendMatchIterator *gt_seedextend_match_iterator_new(
   semi->qii = gt_str_new();
   semi->mirror = false;
   semi->bias_parameters = false;
+  semi->seqlength_display = false;
   semi->aencseq = semi->bencseq = NULL;
   semi->errorpercentage = 0;
   semi->history_size = 0;
@@ -193,6 +194,10 @@ GtSeedextendMatchIterator *gt_seedextend_match_iterator_new(
         {
           semi->bias_parameters = true;
         }
+        if (strcmp(tok, "-seqlength-display") == 0)
+        {
+          semi->seqlength_display = true;
+        }
       }
       if (!had_err)
       {
@@ -318,6 +323,7 @@ GtQuerymatch *gt_seedextend_match_iterator_next(GtSeedextendMatchIterator *semi)
       } else
       {
         if (gt_querymatch_read_line(semi->querymatchptr,
+                                    semi->seqlength_display,
                                     line_ptr,
                                     selfmatch,
                                     semi->seedpos1,
@@ -373,6 +379,13 @@ bool gt_seedextend_match_iterator_bias_parameters(
   return semi->bias_parameters;
 }
 
+bool gt_seedextend_match_iterator_seqlength_display(
+                        const GtSeedextendMatchIterator *semi)
+{
+  gt_assert(semi != NULL);
+  return semi->seqlength_display;
+}
+
 bool gt_seedextend_match_iterator_has_seedline(
                         const GtSeedextendMatchIterator *semi)
 {
@@ -412,11 +425,11 @@ GtUword gt_seedextend_match_iterator_seedpos2(
   return semi->seedpos2;
 }
 
-void gt_seedextend_match_iterator_seed_display_set(
-                        GtSeedextendMatchIterator *semi)
+void gt_seedextend_match_iterator_display_set(GtSeedextendMatchIterator *semi,
+                                              unsigned int display_flag)
 {
   gt_assert(semi != NULL);
-  gt_querymatch_seed_display_set(semi->querymatchptr);
+  gt_querymatch_display_set(semi->querymatchptr,display_flag);
 }
 
 GtUword gt_seedextend_match_iterator_all_sorted(GtSeedextendMatchIterator *semi,
@@ -451,7 +464,7 @@ void gt_seedextend_match_iterator_querymatchoutoptions_set(
                     bool showeoplist,
                     GtUword alignmentwidth,
                     bool always_polished_ends,
-                    bool seed_display)
+                    unsigned int display_flag)
 {
   double matchscore_bias = GT_DEFAULT_MATCHSCORE_BIAS;
 
@@ -466,6 +479,6 @@ void gt_seedextend_match_iterator_querymatchoutoptions_set(
                             matchscore_bias,
                             gt_seedextend_match_iterator_history_size(semi),
                             always_polished_ends,
-                            seed_display);
+                            display_flag);
   gt_querymatch_outoptions_set(semi->querymatchptr,semi->querymatchoutoptions);
 }
diff --git a/src/match/seed-extend-iter.h b/src/match/seed-extend-iter.h
index bccf919..97125f5 100644
--- a/src/match/seed-extend-iter.h
+++ b/src/match/seed-extend-iter.h
@@ -45,11 +45,11 @@ void gt_seedextend_match_iterator_delete(GtSeedextendMatchIterator *semi);
 GtQuerymatch *gt_seedextend_match_iterator_next(
                              GtSeedextendMatchIterator *semi);
 
-/* The following functions set the seed_display flag of the iterators
+/* The following functions set the display flag of the iterators
    querymatch-object. */
 
-void gt_seedextend_match_iterator_seed_display_set(
-                        GtSeedextendMatchIterator *semi);
+void gt_seedextend_match_iterator_display_set(GtSeedextendMatchIterator *semi,
+                                              unsigned int display_flag);
 
 /* The following function reads all matches into an arrays and sorts the,. If
    <ascending is true, then all matches are sorted in ascending order of
@@ -79,7 +79,7 @@ void gt_seedextend_match_iterator_querymatchoutoptions_set(
                     bool showeoplist,
                     GtUword alignmentwidth,
                     bool always_polished_ends,
-                    bool seed_display);
+                    unsigned int display_flag);
 
 /* The following function return different components of the iterator
    object. */
@@ -99,6 +99,9 @@ GtUword gt_seedextend_match_iterator_errorpercentage(
 bool gt_seedextend_match_iterator_bias_parameters(
                         const GtSeedextendMatchIterator *semi);
 
+bool gt_seedextend_match_iterator_seqlength_display(
+                        const GtSeedextendMatchIterator *semi);
+
 bool gt_seedextend_match_iterator_has_seedline(
                         const GtSeedextendMatchIterator *semi);
 
@@ -165,7 +168,6 @@ GtUword gt_seedextend_match_iterator_seedpos2(
   if (gt_querymatch_process(querymatchptr,
                             aencseq,
                             &bseqorencseq,
-                            query_totallength,
                             false) != 0)
   {
     GtAlignment *alignment = gt_querymatch_alignment_get(querymatchptr);
diff --git a/src/match/seed-extend.c b/src/match/seed-extend.c
index 331c4a7..a51a4c3 100644
--- a/src/match/seed-extend.c
+++ b/src/match/seed-extend.c
@@ -86,6 +86,14 @@ GtXdropmatchinfo *gt_xdrop_matchinfo_new(GtUword userdefinedleastlength,
   return xdropmatchinfo;
 }
 
+void gt_xdrop_matchinfo_reset_seqabstract(GtXdropmatchinfo *xdropmatchinfo)
+{
+  if (xdropmatchinfo != NULL) {
+    gt_seqabstract_reset(xdropmatchinfo->useq);
+    gt_seqabstract_reset(xdropmatchinfo->vseq);
+  }
+}
+
 void gt_xdrop_matchinfo_delete(GtXdropmatchinfo *xdropmatchinfo)
 {
   if (xdropmatchinfo != NULL)
@@ -228,7 +236,7 @@ static const GtQuerymatch *gt_combine_extensions(
          GtUword total_distance,
          bool silent)
 {
-  GtUword dblen, querylen, total_alignedlen, dbstart, querystart;
+  GtUword dblen, dbseqlen, querylen, total_alignedlen, dbstart, querystart;
 
   dblen = sesp->seedlen + u_left_ext + u_right_ext;
   querylen = sesp->seedlen + v_left_ext + v_right_ext;
@@ -254,11 +262,13 @@ static const GtQuerymatch *gt_combine_extensions(
   {
     return NULL;
   }
+  dbseqlen = gt_encseq_seqlength(dbencseq,sesp->dbseqnum);
   if (gt_querymatch_complete(querymatchspaceptr,
                              dblen,
                              dbstart,
                              sesp->dbseqnum,
                              dbstart - sesp->dbseqstartpos,
+                             dbseqlen,
                              score,
                              total_distance,
                              query == NULL ? true : false,
@@ -1264,8 +1274,7 @@ static const GtQuerymatch* gt_extend_querymatch(bool forxdrop,
                                                 void *info,
                                                 const GtEncseq *dbencseq,
                                                 const GtQuerymatch *exactseed,
-                                                const GtSeqorEncseq *query,
-                                                GtUword query_totallength)
+                                                const GtSeqorEncseq *query)
 {
   GtSeedextendSeqpair sesp;
   GtUword dbseqnum = gt_querymatch_dbseqnum(exactseed),
@@ -1280,7 +1289,7 @@ static const GtQuerymatch* gt_extend_querymatch(bool forxdrop,
                         query->encseq,
                         gt_querymatch_queryseqnum(exactseed),
                         gt_querymatch_querystart(exactseed),
-                        query_totallength,
+                        gt_querymatch_query_totallength(exactseed),
                         gt_querymatch_querylen(exactseed),
                         gt_querymatch_selfmatch(exactseed),
                         gt_querymatch_query_readmode(exactseed));
@@ -1368,12 +1377,10 @@ static void gt_extend_querymatch_with_output(bool forxdrop,
                                              void *info,
                                              const GtEncseq *dbencseq,
                                              const GtQuerymatch *exactseed,
-                                             const GtSeqorEncseq *query,
-                                             GtUword query_totallength)
+                                             const GtSeqorEncseq *query)
 {
   const GtQuerymatch *querymatch
-    = gt_extend_querymatch(forxdrop,info, dbencseq, exactseed, query,
-                           query_totallength);
+    = gt_extend_querymatch(forxdrop,info, dbencseq, exactseed, query);
   if (querymatch != NULL)
   {
     gt_extend_prettyprint(forxdrop,querymatch,info);
@@ -1383,27 +1390,23 @@ static void gt_extend_querymatch_with_output(bool forxdrop,
 void gt_xdrop_extend_querymatch_with_output(void *info,
                                             const GtEncseq *dbencseq,
                                             const GtQuerymatch *exactseed,
-                                            const GtSeqorEncseq *query,
-                                            GtUword query_totallength)
+                                            const GtSeqorEncseq *query)
 {
   gt_extend_querymatch_with_output(true,
                                    info,
                                    dbencseq,
                                    exactseed,
-                                   query,
-                                   query_totallength);
+                                   query);
 }
 
 void gt_greedy_extend_querymatch_with_output(void *info,
                                              const GtEncseq *dbencseq,
                                              const GtQuerymatch *exactseed,
-                                             const GtSeqorEncseq *query,
-                                             GtUword query_totallength)
+                                             const GtSeqorEncseq *query)
 {
   gt_extend_querymatch_with_output(false,
                                    info,
                                    dbencseq,
                                    exactseed,
-                                   query,
-                                   query_totallength);
+                                   query);
 }
diff --git a/src/match/seed-extend.h b/src/match/seed-extend.h
index d325c58..bdef10c 100644
--- a/src/match/seed-extend.h
+++ b/src/match/seed-extend.h
@@ -84,6 +84,10 @@ GtXdropmatchinfo *gt_xdrop_matchinfo_new(GtUword userdefinedleastlength,
                                          GtXdropscore xdropbelowscore,
                                          GtUword sensitivity);
 
+/* reset seqabstract objects for a new run */
+
+void gt_xdrop_matchinfo_reset_seqabstract(GtXdropmatchinfo *xdropmatchinfo);
+
 /* The destructor-method. */
 
 void gt_xdrop_matchinfo_delete(GtXdropmatchinfo *xdropmatchinfo);
@@ -146,7 +150,7 @@ const GtQuerymatch *gt_xdrop_extend_selfmatch_relative(void *info,
                                               GtReadmode query_readmode);
 
 /* The following function is used for extending a seed obtained
-   in a comparison of the given sequence <query> of length <query_totallength>
+   in a comparison of the given sequence <query>
    against <encseq>. So here a byte sequence is compared against an
    encoded sequence and the seed is specified by <exactseed>.
    A <GtProcessinfo_and_querymatchspaceptr>-object is passed via the
@@ -158,8 +162,7 @@ const GtQuerymatch *gt_xdrop_extend_selfmatch_relative(void *info,
 const GtQuerymatch *gt_xdrop_extend_querymatch(void *info,
                                                const GtEncseq *encseq,
                                                const GtQuerymatch *exactseed,
-                                               const GtSeqorEncseq *query,
-                                               GtUword query_totallength);
+                                               const GtSeqorEncseq *query);
 
 /*
    The following function performs an xdrop extension (as the previous function)
@@ -170,8 +173,7 @@ const GtQuerymatch *gt_xdrop_extend_querymatch(void *info,
 void gt_xdrop_extend_querymatch_with_output(void *info,
                                             const GtEncseq *encseq,
                                             const GtQuerymatch *exactseed,
-                                            const GtSeqorEncseq *query,
-                                            GtUword query_totallength);
+                                            const GtSeqorEncseq *query);
 
 /* The following functions are used for the greedy extension. */
 
@@ -386,8 +388,7 @@ char *gt_seed_extend_params_keystring(bool use_greedy,
 void gt_greedy_extend_querymatch_with_output(void *info,
                                              const GtEncseq *dbencseq,
                                              const GtQuerymatch *exactseed,
-                                             const GtSeqorEncseq *query,
-                                             GtUword query_totallength);
+                                             const GtSeqorEncseq *query);
 
 double gt_greedy_dna_sequence_bias_get(const GtEncseq *encseq);
 
diff --git a/src/match/seqabstract.c b/src/match/seqabstract.c
index 1ae0b98..ddb5943 100644
--- a/src/match/seqabstract.c
+++ b/src/match/seqabstract.c
@@ -62,6 +62,17 @@ GtSeqabstract *gt_seqabstract_new_empty(void)
   return sa;
 }
 
+void gt_seqabstract_reset(GtSeqabstract *sa)
+{
+  sa->seqtype = GT_SEQABSTRACT_UNDEF;
+  sa->len = sa->offset = 0;
+  sa->read_seq_left2right = true;
+  sa->dir_is_complement = false;
+  sa->totallength = GT_SEQABSTRACT_TOTALLENGTH_UNDEF;
+  sa->seqstartpos = 0;
+  sa->seq.string = NULL;
+}
+
 static void gt_seqabstract_init(GtSeqabstract *sa,
                                 bool rightextension,
                                 GtReadmode readmode,
diff --git a/src/match/seqabstract.h b/src/match/seqabstract.h
index 45e559f..d7bd37f 100644
--- a/src/match/seqabstract.h
+++ b/src/match/seqabstract.h
@@ -28,6 +28,9 @@ typedef struct GtSeqabstract GtSeqabstract;
 
 GtSeqabstract* gt_seqabstract_new_empty(void);
 
+/* Reset <GtSeqabstract> object to initial values */
+void gt_seqabstract_reset(GtSeqabstract *sa);
+
 /* Creates new <GtSeqabstract> object from <string>, starting at <startpos> with
    length <len>, <string> should be long enough and <startpos> within <string>.
    Ownership of <string> stays with the caller. */
diff --git a/src/match/sfx-suffixer.c b/src/match/sfx-suffixer.c
index 702f903..081d1df 100644
--- a/src/match/sfx-suffixer.c
+++ b/src/match/sfx-suffixer.c
@@ -838,30 +838,36 @@ static GtCodetype getencseqkmers_nospecialtwobitencoding(
   return code;
 }
 
-static void getencseqkmers_rangetwobitencoding(
-                                      const GtTwobitencoding *twobitencoding,
-                                      GtUword totallength,
-                                      GtUword realtotallength,
-                                      bool mirrored,
-                                      GtCodetype maskright,
-                                      GtReadmode readmode,
-                                      unsigned int kmersize,
-                                      unsigned int upperkmersize,
-                                      bool onlyfirst,
-                                      void(*processkmercode)(void *,
-                                                             bool,
-                                                             GtUword,
-                                                             GtCodetype),
-                                      void *processkmercodeinfo,
-                                      void(*processkmerspecial)(void *,
-                                                                unsigned int,
-                                                                unsigned int,
-                                                                GtUword),
-                                      void *processkmerspecialinfo,
-                                      GtUword startpos,
-                                      GtUword endpos)
+static
+void getencseqkmers_rangetwobitencoding(const GtEncseq *encseq,
+                                        GtReadmode readmode,
+                                        unsigned int kmersize,
+                                        unsigned int upperkmersize,
+                                        bool onlyfirst,
+                                        void(*processkmercode)(void *,
+                                                               bool,
+                                                               GtUword,
+                                                               GtCodetype),
+                                        void *processkmercodeinfo,
+                                        void(*processkmerspecial)(void *,
+                                                                  unsigned int,
+                                                                  unsigned int,
+                                                                  GtUword),
+                                        void *processkmerspecialinfo,
+                                        GtUword startpos,
+                                        GtUword endpos)
 {
-  GtCodetype lastcode, newcode;
+  GtCodetype lastcode, newcode, realtotallength;
+  const GtTwobitencoding *twobitencoding
+          = gt_encseq_twobitencoding_export(encseq);
+  const GtCodetype maskright = GT_MASKRIGHT(kmersize);
+  bool mirrored = gt_encseq_is_mirrored(encseq);
+  const GtUword totallength = gt_encseq_total_length(encseq);
+  realtotallength = totallength;
+  if (mirrored) {
+    gt_assert((totallength & 1) == 1UL);
+    realtotallength = ((totallength - 1) / 2);
+  }
 
   if (mirrored && startpos >= realtotallength) {
     gt_readmode_invert(readmode);
@@ -936,35 +942,28 @@ static void getencseqkmers_rangetwobitencoding(
   }
 }
 
-void getencseqkmers_twobitencoding(const GtEncseq *encseq,
-                                   GtReadmode readmode,
-                                   unsigned int kmersize,
-                                   unsigned int upperkmersize,
-                                   bool onlyfirst,
-                                   void(*processkmercode)(void *,
-                                                          bool,
-                                                          GtUword,
-                                                          GtCodetype),
-                                   void *processkmercodeinfo,
-                                   void(*processkmerspecial)(void *,
-                                                             unsigned int,
-                                                             unsigned int,
-                                                             GtUword),
-                                   void *processkmerspecialinfo)
+void getencseqkmers_twobitencoding_slice(const GtEncseq *encseq,
+                                         GtReadmode readmode,
+                                         unsigned int kmersize,
+                                         unsigned int upperkmersize,
+                                         bool onlyfirst,
+                                         void(*processkmercode)(void *,
+                                                                bool,
+                                                                GtUword,
+                                                                GtCodetype),
+                                         void *processkmercodeinfo,
+                                         void(*processkmerspecial)(void *,
+                                                                   unsigned int,
+                                                                   unsigned int,
+                                                                   GtUword),
+                                         void *processkmerspecialinfo,
+                                         GtUword slice_startpos,
+                                         GtUword slice_endpos)
 {
-  GtUword laststart = 0, lastend,
-                totallength,
-                realtotallength;
-  const GtTwobitencoding *twobitencoding
-    = gt_encseq_twobitencoding_export(encseq);
-  const GtCodetype maskright = GT_MASKRIGHT(kmersize);
-  bool mirrored = gt_encseq_is_mirrored(encseq);
+  GtUword laststart = slice_startpos,
+          lastend = slice_endpos;
+  gt_assert(laststart <= lastend);
 
-  lastend = totallength = realtotallength = gt_encseq_total_length(encseq);
-  if (mirrored) {
-    gt_assert((totallength & 1) == 1UL);
-    realtotallength = ((realtotallength - 1) / 2);
-  }
   if (gt_encseq_has_specialranges(encseq))
   {
     GtSpecialrangeiterator *sri;
@@ -975,68 +974,97 @@ void getencseqkmers_twobitencoding(const GtEncseq *encseq,
       sri = gt_specialrangeiterator_new(encseq,false);
       while (gt_specialrangeiterator_next(sri,&range))
       {
-        gt_assert(range.end <= lastend);
-        getencseqkmers_rangetwobitencoding(twobitencoding,
-                                           totallength,
-                                           realtotallength,
-                                           mirrored,
-                                           maskright,
-                                           readmode,
-                                           kmersize,
-                                           upperkmersize,
-                                           onlyfirst,
-                                           processkmercode,
-                                           processkmercodeinfo,
-                                           processkmerspecial,
-                                           processkmerspecialinfo,
-                                           range.end,
-                                           lastend);
-        lastend = range.start;
+        if (range.end <= lastend) {
+          getencseqkmers_rangetwobitencoding(encseq,
+                                             readmode,
+                                             kmersize,
+                                             upperkmersize,
+                                             onlyfirst,
+                                             processkmercode,
+                                             processkmercodeinfo,
+                                             processkmerspecial,
+                                             processkmerspecialinfo,
+                                             range.end,
+                                             lastend);
+          lastend = range.start;
+        }
+        if (laststart > range.start) {
+          break;
+        }
       }
     } else
     {
       sri = gt_specialrangeiterator_new(encseq,true);
       while (gt_specialrangeiterator_next(sri,&range))
       {
-        gt_assert(range.start >= laststart);
-        getencseqkmers_rangetwobitencoding(twobitencoding,
-                                           totallength,
-                                           realtotallength,
-                                           mirrored,
-                                           maskright,
-                                           readmode,
-                                           kmersize,
-                                           upperkmersize,
-                                           onlyfirst,
-                                           processkmercode,
-                                           processkmercodeinfo,
-                                           processkmerspecial,
-                                           processkmerspecialinfo,
-                                           laststart,
-                                           range.start);
-        laststart = range.end;
+        if (range.start >= laststart) {
+          getencseqkmers_rangetwobitencoding(encseq,
+                                             readmode,
+                                             kmersize,
+                                             upperkmersize,
+                                             onlyfirst,
+                                             processkmercode,
+                                             processkmercodeinfo,
+                                             processkmerspecial,
+                                             processkmerspecialinfo,
+                                             laststart,
+                                             range.start);
+          laststart = range.end;
+        }
+        if (lastend < range.end) {
+          break;
+        }
       }
     }
-    gt_assert(totallength >= laststart);
+    gt_assert(gt_encseq_total_length(encseq) >= laststart);
     gt_specialrangeiterator_delete(sri);
   }
-  getencseqkmers_rangetwobitencoding(twobitencoding,
-                                     totallength,
-                                     realtotallength,
-                                     mirrored,
-                                     maskright,
-                                     readmode,
-                                     kmersize,
-                                     upperkmersize,
-                                     onlyfirst,
-                                     processkmercode,
-                                     processkmercodeinfo,
-                                     processkmerspecial,
-                                     processkmerspecialinfo,
-                                     GT_ISDIRREVERSE(readmode) ? 0
-                                                               : laststart,
-                                     GT_ISDIRREVERSE(readmode) ? lastend
-                                                               : totallength);
+
+  if (laststart <= slice_endpos && slice_startpos <= lastend) {
+    GtUword startpos = GT_ISDIRREVERSE(readmode) ? slice_startpos : laststart;
+    GtUword endpos = GT_ISDIRREVERSE(readmode) ? lastend : slice_endpos;
+
+    getencseqkmers_rangetwobitencoding(encseq,
+                                       readmode,
+                                       kmersize,
+                                       upperkmersize,
+                                       onlyfirst,
+                                       processkmercode,
+                                       processkmercodeinfo,
+                                       processkmerspecial,
+                                       processkmerspecialinfo,
+                                       startpos,
+                                       endpos);
+  }
+}
+
+void getencseqkmers_twobitencoding(const GtEncseq *encseq,
+                                   GtReadmode readmode,
+                                   unsigned int kmersize,
+                                   unsigned int upperkmersize,
+                                   bool onlyfirst,
+                                   void(*processkmercode)(void *,
+                                                          bool,
+                                                          GtUword,
+                                                          GtCodetype),
+                                   void *processkmercodeinfo,
+                                   void(*processkmerspecial)(void *,
+                                                             unsigned int,
+                                                             unsigned int,
+                                                             GtUword),
+                                   void *processkmerspecialinfo)
+{
+  getencseqkmers_twobitencoding_slice(encseq,
+                                      readmode,
+                                      kmersize,
+                                      upperkmersize,
+                                      onlyfirst,
+                                      processkmercode,
+                                      processkmercodeinfo,
+                                      processkmerspecial,
+                                      processkmerspecialinfo,
+                                      0,
+                                      gt_encseq_total_length(encseq));
 }
 
 static void gt_updateleftborderforkmer(Sfxiterator *sfi,
diff --git a/src/match/sfx-suffixer.h b/src/match/sfx-suffixer.h
index c32f4ae..707880e 100644
--- a/src/match/sfx-suffixer.h
+++ b/src/match/sfx-suffixer.h
@@ -90,4 +90,21 @@ void getencseqkmers_twobitencoding(const GtEncseq *encseq,
                                                              GtUword),
                                    void *processkmerspecialinfo);
 
+void getencseqkmers_twobitencoding_slice(const GtEncseq *encseq,
+                                         GtReadmode readmode,
+                                         unsigned int kmersize,
+                                         unsigned int upperkmersize,
+                                         bool onlyfirst,
+                                         void(*processkmercode)(void *,
+                                                                bool,
+                                                                GtUword,
+                                                                GtCodetype),
+                                         void *processkmercodeinfo,
+                                         void(*processkmerspecial)(void *,
+                                                                   unsigned int,
+                                                                   unsigned int,
+                                                                   GtUword),
+                                         void *processkmerspecialinfo,
+                                         GtUword slice_startpos,
+                                         GtUword slice_endpos);
 #endif
diff --git a/src/tools/gt_compreads_decompress.c b/src/tools/gt_compreads_decompress.c
index 8acfada..2e0435f 100644
--- a/src/tools/gt_compreads_decompress.c
+++ b/src/tools/gt_compreads_decompress.c
@@ -119,7 +119,7 @@ gt_compreads_decompress_option_parser_new(void *tool_arguments)
   gt_option_parser_add_option(op, option);
 
   option = gt_option_new_uword("width",
-                               "set width of output, 0 disables formating. "
+                               "set width of output, 0 disables formatting. "
                                "line breaks in quality strings can cause "
                                "problems with parsers, use with care",
                                &arguments->width, 0);
diff --git a/src/tools/gt_condenseq_compress.c b/src/tools/gt_condenseq_compress.c
index 0393119..d33b40c 100644
--- a/src/tools/gt_condenseq_compress.c
+++ b/src/tools/gt_condenseq_compress.c
@@ -108,7 +108,7 @@ gt_condenseq_compress_option_parser_new(void *tool_arguments)
 
   /* -initsize */
   option = gt_option_new_uword("initsize",
-                               "length of inital unique database in bases, "
+                               "length of initial unique database in bases, "
                                "should be larger than -alignlength",
                                &arguments->initsize, GT_UNDEF_UWORD);
   gt_option_parser_add_option(op, option);
diff --git a/src/tools/gt_encseq_sample.c b/src/tools/gt_encseq_sample.c
index b25109c..cfd6c03 100644
--- a/src/tools/gt_encseq_sample.c
+++ b/src/tools/gt_encseq_sample.c
@@ -1,5 +1,5 @@
 /*
-  Copyright (c) 2014 Joerg Winkler <joerg.winkler at studium.uni-hamburg.de>
+  Copyright (c) 2014 Joerg Winkler <j.winkler at posteo.de>
   Copyright (c) 2014 Center for Bioinformatics, University of Hamburg
 
   Permission to use, copy, modify, and distribute this software for any
diff --git a/src/tools/gt_encseq_sample.h b/src/tools/gt_encseq_sample.h
index 5614d9a..529488a 100644
--- a/src/tools/gt_encseq_sample.h
+++ b/src/tools/gt_encseq_sample.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (c) 2014 Joerg Winkler <joerg.winkler at studium.uni-hamburg.de>
+  Copyright (c) 2014 Joerg Winkler <j.winkler at posteo.de>
   Copyright (c) 2014 Center for Bioinformatics, University of Hamburg
 
   Permission to use, copy, modify, and distribute this software for any
diff --git a/src/tools/gt_fastq_sample.c b/src/tools/gt_fastq_sample.c
index d6cdbe0..b68596d 100644
--- a/src/tools/gt_fastq_sample.c
+++ b/src/tools/gt_fastq_sample.c
@@ -1,5 +1,5 @@
 /*
-  Copyright (c) 2014 Joerg Winkler <joerg.winkler at studium.uni-hamburg.de>
+  Copyright (c) 2014 Joerg Winkler <j.winkler at posteo.de>
   Copyright (c) 2014 Center for Bioinformatics, University of Hamburg
 
   Permission to use, copy, modify, and distribute this software for any
diff --git a/src/tools/gt_fastq_sample.h b/src/tools/gt_fastq_sample.h
index 0b020e9..d990f8e 100644
--- a/src/tools/gt_fastq_sample.h
+++ b/src/tools/gt_fastq_sample.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (c) 2014 Joerg Winkler <joerg.winkler at studium.uni-hamburg.de>
+  Copyright (c) 2014 Joerg Winkler <j.winkler at posteo.de>
   Copyright (c) 2014 Center for Bioinformatics, University of Hamburg
 
   Permission to use, copy, modify, and distribute this software for any
diff --git a/src/tools/gt_kmer_database.c b/src/tools/gt_kmer_database.c
index 2ba4193..ca6c0fe 100644
--- a/src/tools/gt_kmer_database.c
+++ b/src/tools/gt_kmer_database.c
@@ -109,7 +109,7 @@ static GtOptionParser* gt_kmer_database_option_parser_new(void *tool_arguments)
   gt_option_imply(option_use_cutoff, option);
 
   /* -set_cutoff */
-  option = gt_option_new_uword_min("set_cutoff", "kmers occuring more often "
+  option = gt_option_new_uword_min("set_cutoff", "kmers occurring more often "
                                    "than this value won't be saved",
                                    &arguments->cutoff_value, (GtUword) 30,
                                    (GtUword) 1);
diff --git a/src/tools/gt_linspace_align.c b/src/tools/gt_linspace_align.c
index 89dc10b..a0ece10 100644
--- a/src/tools/gt_linspace_align.c
+++ b/src/tools/gt_linspace_align.c
@@ -186,7 +186,7 @@ static GtOptionParser* gt_linspace_align_option_parser_new(void *tool_arguments)
   optionshowscore = gt_option_new_bool("showscore", "show score for alignment, "
                                        "please note it will calculate costs "
                                        "for global alignments and scores for "
-                                       "local alignemnts always, independtly "
+                                       "local alignments always, independently "
                                        "of input ",
                                        &arguments->showscore, false);
   gt_option_parser_add_option(op, optionshowscore);
@@ -547,24 +547,24 @@ static int gt_all_against_all_alignment_check(bool affine,
           }
           if (!had_err)
           {
-            (affine ? gt_computediagonalbandaffinealign_generic
-                    : gt_computediagonalbandalign_generic)
+            (affine ? gt_diagonalbandalign_affinegapcost_compute_generic
+                    : gt_diagonalbandalign_compute_generic)
                        (spacemanager, scorehandler, align,
                         useq, 0, ulen, vseq, 0, vlen,
                         left_dist, right_dist);
           }
         } else
         {
-          (affine ? gt_computeaffinelinearspace_generic
-                  : gt_computelinearspace_generic)
+          (affine ? gt_linearalign_affinegapcost_compute_generic
+                  : gt_linearalign_compute_generic)
                              (spacemanager, scorehandler, align,
                               useq, 0, ulen, vseq, 0, vlen);
         }
       }
       else if (arguments->local)
       {
-        (affine ? gt_computeaffinelinearspace_local_generic
-                : gt_computelinearspace_local_generic)
+        (affine ? gt_linearalign_affinegapcost_compute_local_generic
+                : gt_linearalign_compute_local_generic)
                     (spacemanager, scorehandler, align,
                      useq, 0, ulen, vseq, 0, vlen);
       }
@@ -753,8 +753,8 @@ static int gt_linspace_align_runner(GT_UNUSED int argc,
   sequence_table1 = gt_sequence_table_new();
   sequence_table2 = gt_sequence_table_new();
   align = gt_alignment_new();
-  spacemanager = gt_linspaceManagement_new();
-  gt_linspaceManagement_set_TSfactor(spacemanager,arguments->timesquarefactor);
+  spacemanager = gt_linspace_management_new();
+  gt_linspace_management_set_TSfactor(spacemanager,arguments->timesquarefactor);
 
   /* get sequences */
   if (gt_str_array_size(arguments->strings) > 0)
@@ -850,12 +850,12 @@ static int gt_linspace_align_runner(GT_UNUSED int argc,
   if (!had_err && arguments->spacetime)
   {
     printf("# combined space peak in kilobytes: %f\n",
-           GT_KILOBYTES(gt_linspaceManagement_get_spacepeak(spacemanager)));
+           GT_KILOBYTES(gt_linspace_management_get_spacepeak(spacemanager)));
     gt_timer_show_formatted(linspacetimer,"# TIME overall " GT_WD ".%02ld\n",
                             stdout);
   }
   gt_timer_delete(linspacetimer);
-  gt_linspaceManagement_delete(spacemanager);
+  gt_linspace_management_delete(spacemanager);
   gt_sequence_table_delete(sequence_table1);
   gt_sequence_table_delete(sequence_table2);
   gt_alignment_delete(align);
diff --git a/src/tools/gt_paircmp.c b/src/tools/gt_paircmp.c
index 9de5c00..93e6dd2 100644
--- a/src/tools/gt_paircmp.c
+++ b/src/tools/gt_paircmp.c
@@ -358,21 +358,21 @@ int gt_paircmp(int argc, const char **argv, GtError *err)
       const GtStr *str0 = gt_str_array_get_str(cmppairwise.strings,0),
                   *str1 = gt_str_array_get_str(cmppairwise.strings,1);
 
-      gt_print_edist_alignment((const GtUchar *) gt_str_get(str0),0,
-                               gt_str_length(str0),
-                               (const GtUchar *) gt_str_get(str1),0,
-                               gt_str_length(str1));
+      gt_squarealign_print_edit_alignment((const GtUchar *) gt_str_get(str0),0,
+                                          gt_str_length(str0),
+                                          (const GtUchar *) gt_str_get(str1),0,
+                                          gt_str_length(str1));
     } else
     {
       size_t idx;
       Checkfunctiontabentry checkfunction_tab[] = {
         MAKECheckfunctiontabentry(gt_checkgreedyunitedist),
-        MAKECheckfunctiontabentry(gt_checklinearspace),
-        MAKECheckfunctiontabentry(gt_checklinearspace_local),
-        MAKECheckfunctiontabentry(gt_checkaffinelinearspace),
-        MAKECheckfunctiontabentry(gt_checkaffinelinearspace_local),
-        MAKECheckfunctiontabentry(gt_checkdiagonalbandalign),
-        MAKECheckfunctiontabentry(gt_checkdiagonalbandaffinealign)
+        MAKECheckfunctiontabentry(gt_linearalign_check),
+        MAKECheckfunctiontabentry(gt_linearalign_check_local),
+        MAKECheckfunctiontabentry(gt_linearalign_affinegapcost_check),
+        MAKECheckfunctiontabentry(gt_linearalign_affinegapcost_check_local),
+        MAKECheckfunctiontabentry(gt_diagonalbandalign_check),
+        MAKECheckfunctiontabentry(gt_diagonalbandalign_affinegapcost_check)
       };
 
       if (cmppairwise.fasta)
diff --git a/src/tools/gt_readjoiner_assembly.c b/src/tools/gt_readjoiner_assembly.c
index b6e0b6e..73bfb92 100644
--- a/src/tools/gt_readjoiner_assembly.c
+++ b/src/tools/gt_readjoiner_assembly.c
@@ -469,7 +469,7 @@ static int gt_readjoiner_assembly_build_contained_reads_list(
     gt_str_append_cstr(filename, GT_READJOINER_SUFFIX_CNTLIST);
     had_err = gt_cntlist_parse(gt_str_get(filename), false, contained,
         &nofreads_i, err);
-    gt_assert(nofreads == nofreads_i);
+    gt_assert(had_err || nofreads == nofreads_i);
   }
   gt_str_delete(filename);
   return had_err;
diff --git a/src/tools/gt_readjoiner_graph.c b/src/tools/gt_readjoiner_graph.c
index 62a1e70..6beca68 100644
--- a/src/tools/gt_readjoiner_graph.c
+++ b/src/tools/gt_readjoiner_graph.c
@@ -33,10 +33,11 @@
 typedef struct {
   GtStr  *readset;
   bool limits, verbose, quiet, errors, redtrans, eld,
-       save, dot, mdot, adj, spm, subgraph_mono, subgraph_extend;
+       save, dot, mdot, adj, spm, subgraph_mono, subgraph_extend,
+       firstonly, fromB, toB, fromE, toE;
   unsigned int deadend, bubble, deadend_depth;
   GtStrArray *subgraph, *subgraph_other;
-  GtUword subgraph_depth;
+  GtUword subgraph_depth, from, to, minlen, maxlen;
 } GtReadjoinerGraphArguments;
 
 static void* gt_readjoiner_graph_arguments_new(void)
@@ -67,7 +68,8 @@ static GtOptionParser* gt_readjoiner_graph_option_parser_new(
   GtOptionParser *op;
   GtOption *option, *errors_option, *deadend_option, *v_option,
            *q_option, *bubble_option, *deadend_depth_option,
-           *subgraph_option, *sother_option;
+           *subgraph_option, *sother_option, *from_option,
+           *to_option, *fromb_option, *tob_option;
   gt_assert(arguments);
 
   /* init */
@@ -173,6 +175,70 @@ static GtOptionParser* gt_readjoiner_graph_option_parser_new(
   gt_option_imply(bubble_option, errors_option);
   gt_option_parser_add_option(op, bubble_option);
 
+  /* -from/-to */
+  from_option = gt_option_new_uword("from", "find connecting path from->to\n"
+      "requires -to; optional -minlen/-maxlen/-firstonly",
+      &(arguments->from), 0);
+  to_option = gt_option_new_uword("to", "find connecting path from->to\n"
+      "requires -from; optional -minlen/-maxlen/-firstonly",
+      &(arguments->to), 0);
+  gt_option_imply(to_option, from_option);
+  gt_option_imply(from_option, to_option);
+  gt_option_parser_add_option(op, from_option);
+  gt_option_parser_add_option(op, to_option);
+
+  /* -fromB */
+  fromb_option = gt_option_new_bool("fromB",
+      "use only B vertex of origin read\n"
+      "requires -from", &arguments->fromB, false);
+  gt_option_imply(fromb_option, from_option);
+  gt_option_parser_add_option(op, fromb_option);
+
+  /* -fromE */
+  option = gt_option_new_bool("fromE",
+      "use only E vertex of origin read\n"
+      "requires -from", &arguments->fromE, false);
+  gt_option_imply(option, from_option);
+  gt_option_exclude(option, fromb_option);
+  gt_option_parser_add_option(op, option);
+
+  /* -toB */
+  tob_option = gt_option_new_bool("toB",
+      "use only B vertex of origin read\n"
+      "requires -to", &arguments->toB, false);
+  gt_option_imply(tob_option, to_option);
+  gt_option_parser_add_option(op, tob_option);
+
+  /* -toE */
+  option = gt_option_new_bool("toE",
+      "use only E vertex of origin read\n"
+      "requires -to", &arguments->toE, false);
+  gt_option_imply(option, to_option);
+  gt_option_exclude(option, tob_option);
+  gt_option_parser_add_option(op, option);
+
+  /* -minlen */
+  option = gt_option_new_uword("minlen",
+      "minimum string length of path from->to\n"
+      "requires -from and -to",
+      &(arguments->minlen), 0);
+  gt_option_imply(option, from_option);
+  gt_option_parser_add_option(op, option);
+
+  /* -maxlen */
+  option = gt_option_new_uword("maxlen",
+      "maximum string length of path from->to\n"
+      "requires -from and -to",
+      &(arguments->maxlen), 1000);
+  gt_option_imply(option, from_option);
+  gt_option_parser_add_option(op, option);
+
+  /* -firstonly */
+  option = gt_option_new_bool("firstonly",
+      "output only first path from->to",
+      &arguments->firstonly, false);
+  gt_option_parser_add_option(op, option);
+
   /* -deadend */
   deadend_option = gt_option_new_uint("deadend", "number of rounds of "
       "dead end removal to perform a dead end",
@@ -435,6 +501,29 @@ static int gt_readjoiner_graph_runner(GT_UNUSED int argc,
     gt_strgraph_log_space(strgraph);
   }
 
+  if (had_err == 0 && arguments->from)
+  {
+    GtStrgraphVtype from_vt, to_vt;
+    gt_assert(eqlen || (reads != NULL));
+    gt_encseq_mirror(reads, err);
+    if (arguments->fromB)
+      from_vt = GT_STRGRAPH_VTYPE_B;
+    else if (arguments->fromE)
+      from_vt = GT_STRGRAPH_VTYPE_E;
+    else
+      from_vt = GT_STRGRAPH_VTYPE_A;
+    if (arguments->toB)
+      to_vt = GT_STRGRAPH_VTYPE_B;
+    else if (arguments->toE)
+      to_vt = GT_STRGRAPH_VTYPE_E;
+    else
+      to_vt = GT_STRGRAPH_VTYPE_A;
+    had_err = gt_strgraph_find_connecting_path(strgraph, arguments->from,
+        from_vt, arguments->to, to_vt, arguments->minlen, arguments->maxlen,
+        arguments->firstonly, readset, GT_READJOINER_SUFFIX_CONNECTING_PATHS,
+        verbose_logger, err);
+  }
+
   if (!eqlen && reads != NULL && !arguments->errors)
   {
     gt_encseq_delete(reads);
diff --git a/src/tools/gt_repfind.c b/src/tools/gt_repfind.c
index 7b09f63..248af89 100644
--- a/src/tools/gt_repfind.c
+++ b/src/tools/gt_repfind.c
@@ -58,8 +58,8 @@ typedef struct
           alignmentwidth; /* 0 for no alignment display and otherwidth number
                              of columns of alignment per line displayed. */
   bool scanfile, beverbose, forward, reverse, reverse_complement, searchspm,
-       check_extend_symmetry, silent, trimstat, seed_display, noxpolish,
-       verify_alignment;
+       check_extend_symmetry, silent, trimstat, seed_display, seqlength_display,
+       noxpolish, verify_alignment;
   GtStr *indexname, *query_indexname, *cam_string; /* parse this using
                                     gt_greedy_extend_char_access*/
   GtStrArray *query_files;
@@ -79,7 +79,7 @@ static int gt_exact_selfmatch_with_output(void *info,
                                           GT_UNUSED GtError *err)
 {
   GtUword queryseqnum, queryseqstartpos, query_totallength, dbseqnum,
-          dbseqstartpos;
+          dbseqstartpos, dbseqlen;
   const GtEncseq *encseq;
   GtProcessinfo_and_querymatchspaceptr *processinfo_and_querymatchspaceptr
     = (GtProcessinfo_and_querymatchspaceptr *) info;
@@ -90,6 +90,7 @@ static int gt_exact_selfmatch_with_output(void *info,
   {
     dbseqnum = gt_encseq_seqnum(encseq,pos1);
     dbseqstartpos = gt_encseq_seqstartpos(encseq,dbseqnum);
+    dbseqlen = gt_encseq_seqlength(encseq,dbseqnum);
     queryseqnum = gt_encseq_seqnum(encseq,pos2);
     queryseqstartpos = gt_encseq_seqstartpos(encseq,queryseqnum);
     query_totallength = gt_encseq_seqlength(encseq,queryseqnum);
@@ -97,6 +98,7 @@ static int gt_exact_selfmatch_with_output(void *info,
   {
     dbseqnum = 0;
     dbseqstartpos = 0;
+    dbseqlen = 0;
     queryseqnum = 0;
     queryseqstartpos = 0;
     query_totallength = 0;
@@ -108,6 +110,7 @@ static int gt_exact_selfmatch_with_output(void *info,
                              pos1,
                              dbseqnum,
                              pos1 - dbseqstartpos,
+                             dbseqlen,
                              0,
                              0,
                              true,
@@ -217,8 +220,8 @@ static GtOptionParser *gt_repfind_option_parser_new(void *tool_arguments)
            *maxalilendiffoption, *leastlength_option, *char_access_mode_option,
            *check_extend_symmetry_option, *xdropbelowoption, *historyoption,
            *percmathistoryoption, *errorpercentageoption, *optiontrimstat,
-           *withalignmentoption, *optionseed_display, *optionnoxpolish,
-           *verify_alignment_option, *option_query_indexname;
+           *withalignmentoption, *optionseed_display, *optionseqlength_display,
+           *optionnoxpolish, *verify_alignment_option, *option_query_indexname;
   GtMaxpairsoptions *arguments = tool_arguments;
 
   op = gt_option_parser_new("[options] -ii indexname",
@@ -403,6 +406,14 @@ static GtOptionParser *gt_repfind_option_parser_new(void *tool_arguments)
   gt_option_parser_add_option(op, optionseed_display);
   gt_option_is_development_option(optionseed_display);
 
+  optionseqlength_display = gt_option_new_bool("seqlength-display",
+                                       "Display length of sequences in which "
+                                       "the two match-instances occur",
+                                       &arguments->seqlength_display,
+                                       false);
+  gt_option_parser_add_option(op, optionseqlength_display);
+  gt_option_is_development_option(optionseqlength_display);
+
   option_query_indexname = gt_option_new_string("qii",
                                                 "Specify name of query index",
                                                 arguments->query_indexname,
@@ -550,8 +561,7 @@ static int gt_generic_simplegreedyselfmatchoutput(
 typedef void (*GtXdrop_extend_querymatch_func)(void *,
                                                const GtEncseq *,
                                                const GtQuerymatch *,
-                                               const GtSeqorEncseq *,
-                                               GtUword);
+                                               const GtSeqorEncseq *);
 
 static int gt_callenumquerymatches(bool selfmatch,
                                    const char *indexname,
@@ -637,8 +647,8 @@ static int gt_callenumquerymatches(bool selfmatch,
     while (!haserr &&
            (retval = gt_querysubstringmatchiterator_next(qsmi, err)) == 0)
     {
-      GtUword dbstart, dbseqnum, dbseqstartpos, matchlength, query_totallength,
-              querystart;
+      GtUword dbstart, dbseqnum, dbseqstartpos, dbseqlen, matchlength,
+              query_totallength, querystart;
       uint64_t queryunitnum;
 
       dbstart = gt_querysubstringmatchiterator_dbstart(qsmi);
@@ -646,9 +656,10 @@ static int gt_callenumquerymatches(bool selfmatch,
       {
         dbseqnum = gt_encseq_seqnum(suffixarray.encseq,dbstart);
         dbseqstartpos = gt_encseq_seqstartpos(suffixarray.encseq, dbseqnum);
+        dbseqlen = gt_encseq_seqlength(suffixarray.encseq, dbseqnum);
       } else
       {
-        dbseqnum = dbseqstartpos = 0;
+        dbseqnum = dbseqstartpos = dbseqlen = 0;
       }
       matchlength = gt_querysubstringmatchiterator_matchlength(qsmi);
       query_totallength = gt_querysubstringmatchiterator_query_seqlen(qsmi);
@@ -670,6 +681,7 @@ static int gt_callenumquerymatches(bool selfmatch,
                            dbstart,
                            dbseqnum,
                            dbstart - dbseqstartpos,
+                           dbseqlen,
                            0, /* score */
                            0, /* edist */
                            selfmatch,
@@ -677,8 +689,7 @@ static int gt_callenumquerymatches(bool selfmatch,
                            matchlength,
                            querystart,
                            query_totallength);
-        eqmf(eqmf_data,suffixarray.encseq,exactseed,&query_seqorencseq,
-             query_totallength);
+        eqmf(eqmf_data,suffixarray.encseq,exactseed,&query_seqorencseq);
       } else
       {
         if (gt_querymatch_complete(exactseed,
@@ -686,6 +697,7 @@ static int gt_callenumquerymatches(bool selfmatch,
                                    dbstart,
                                    dbseqnum,
                                    dbstart - dbseqstartpos,
+                                   dbseqlen,
                                    0, /* score */
                                    0, /* edist */
                                    selfmatch,
@@ -821,6 +833,9 @@ static int gt_repfind_runner(int argc,
     const bool flags[] = {arguments->forward,
                           arguments->reverse,
                           arguments->reverse_complement};
+    const unsigned int display_flag
+      = gt_querymatch_bool2display_flag(arguments->seed_display,
+                                        arguments->seqlength_display);
 
     processinfo_and_querymatchspaceptr.processinfo = NULL;
     if (arguments->alignmentwidth > 0 ||
@@ -849,18 +864,16 @@ static int gt_repfind_runner(int argc,
                                       sensitivity,
                                       GT_DEFAULT_MATCHSCORE_BIAS,
                                       true,
-                                      arguments->seed_display);
+                                      display_flag);
       }
     } else
     {
       querymatchoutoptions = NULL;
     }
     processinfo_and_querymatchspaceptr.querymatchspaceptr = gt_querymatch_new();
-    if (arguments->seed_display)
-    {
-      gt_querymatch_seed_display_set(
-              processinfo_and_querymatchspaceptr.querymatchspaceptr);
-    }
+    gt_querymatch_display_set(
+              processinfo_and_querymatchspaceptr.querymatchspaceptr,
+              display_flag);
     if (querymatchoutoptions != NULL)
     {
       gt_querymatch_outoptions_set(
diff --git a/src/tools/gt_seed_extend.c b/src/tools/gt_seed_extend.c
index 3d9153c..336edc5 100644
--- a/src/tools/gt_seed_extend.c
+++ b/src/tools/gt_seed_extend.c
@@ -1,6 +1,6 @@
 /*
-  Copyright (c) 2015 Joerg Winkler <joerg.winkler at studium.uni-hamburg.de>
-  Copyright (c) 2015 Center for Bioinformatics, University of Hamburg
+  Copyright (c) 2015-2016 Joerg Winkler <j.winkler at posteo.de>
+  Copyright (c) 2015-2016 Center for Bioinformatics, University of Hamburg
 
   Permission to use, copy, modify, and distribute this software for any
   purpose with or without fee is hereby granted, provided that the above
@@ -17,12 +17,17 @@
 
 #include <limits.h>
 #include "core/alphabet_api.h"
+#include "core/arraydef.h"
+#include "core/cstr_api.h"
+#include "core/cstr_array.h"
 #include "core/encseq.h"
 #include "core/encseq_api.h"
 #include "core/error_api.h"
 #include "core/ma_api.h"
 #include "core/mathsupport.h"
 #include "core/minmax.h"
+#include "core/parseutils_api.h"
+#include "core/range_api.h"
 #include "core/showtime.h"
 #include "core/str_api.h"
 #include "match/diagbandseed.h"
@@ -42,12 +47,16 @@ typedef struct {
   GtUword dbs_maxfreq;
   GtUword dbs_suppress;
   GtUword dbs_memlimit;
+  GtUword dbs_parts;
+  GtRange seedpairdistance;
+  GtStr *dbs_pick_str;
   GtStr *dbs_memlimit_str;
   bool dbs_debug_kmer;
   bool dbs_debug_seedpair;
   bool dbs_verify;
   bool weakends;
   bool onlyseeds;
+  bool overlappingseeds;
   /* xdrop extension options */
   GtOption *se_option_xdrop;
   GtUword se_extendxdrop;
@@ -58,7 +67,7 @@ typedef struct {
   GtUword se_historysize;
   GtUword se_maxalilendiff;
   GtUword se_perc_match_hist;
-  GtStr *se_char_access_mode;
+  GtStr *char_access_mode;
   bool bias_parameters;
   bool relax_polish;
   /* general options */
@@ -68,11 +77,13 @@ typedef struct {
   GtUword se_alignmentwidth;
   bool norev;
   bool nofwd;
-  bool overlappingseeds;
   bool benchmark;
   bool verbose;
   bool seed_display;
-  bool extend_last;
+  bool seqlength_display;
+  bool use_apos;
+  bool histogram;
+  bool use_kmerfile;
 } GtSeedExtendArguments;
 
 static void* gt_seed_extend_arguments_new(void)
@@ -80,8 +91,9 @@ static void* gt_seed_extend_arguments_new(void)
   GtSeedExtendArguments *arguments = gt_calloc((size_t) 1, sizeof *arguments);
   arguments->dbs_indexname = gt_str_new();
   arguments->dbs_queryname = gt_str_new();
+  arguments->dbs_pick_str = gt_str_new();
   arguments->dbs_memlimit_str = gt_str_new();
-  arguments->se_char_access_mode = gt_str_new();
+  arguments->char_access_mode = gt_str_new();
   return arguments;
 }
 
@@ -91,8 +103,9 @@ static void gt_seed_extend_arguments_delete(void *tool_arguments)
   if (arguments != NULL) {
     gt_str_delete(arguments->dbs_indexname);
     gt_str_delete(arguments->dbs_queryname);
+    gt_str_delete(arguments->dbs_pick_str);
     gt_str_delete(arguments->dbs_memlimit_str);
-    gt_str_delete(arguments->se_char_access_mode);
+    gt_str_delete(arguments->char_access_mode);
     gt_option_delete(arguments->se_option_greedy);
     gt_option_delete(arguments->se_option_xdrop);
     gt_option_delete(arguments->se_option_withali);
@@ -106,8 +119,10 @@ static GtOptionParser* gt_seed_extend_option_parser_new(void *tool_arguments)
   GtOptionParser *op;
   GtOption *option, *op_gre, *op_xdr, *op_cam, *op_his, *op_dif, *op_pmh,
     *op_len, *op_err, *op_xbe, *op_sup, *op_frq, *op_mem, *op_ali, *op_bia,
-    *op_onl, *op_weakends, *op_seed_display, *op_relax_polish,
-    *op_norev, *op_nofwd;
+    *op_onl, *op_weakends, *op_seed_display, *op_relax_polish, *op_spdist,
+    *op_norev, *op_nofwd, *op_part, *op_pick, *op_seqlength_display, *op_overl;
+
+  static GtRange seedpairdistance_defaults = {1UL, GT_UWORD_MAX};
   gt_assert(arguments != NULL);
 
   /* init */
@@ -306,7 +321,7 @@ static GtOptionParser* gt_seed_extend_option_parser_new(void *tool_arguments)
   /* -cam */
   op_cam = gt_option_new_string("cam",
                                 gt_cam_extendgreedy_comment(),
-                                arguments->se_char_access_mode,
+                                arguments->char_access_mode,
                                 "");
   gt_option_hide_default(op_cam);
   gt_option_is_development_option(op_cam);
@@ -331,6 +346,8 @@ static GtOptionParser* gt_seed_extend_option_parser_new(void *tool_arguments)
   gt_option_exclude(op_err, op_onl);
   gt_option_parser_add_option(op, op_err);
 
+  /* OUTPUT OPTIONS */
+
   /* -a */
   op_ali = gt_option_new_uword_min("a",
                                    "show alignments/sequences (optional "
@@ -351,6 +368,26 @@ static GtOptionParser* gt_seed_extend_option_parser_new(void *tool_arguments)
   gt_option_is_development_option(op_relax_polish);
   gt_option_imply(op_relax_polish, op_ali);
 
+  /* -seed-display */
+  op_seed_display = gt_option_new_bool("seed-display",
+                                       "Display seeds in #-line and by "
+                                       "character + (instead of |) in middle "
+                                       "row of alignment column",
+                                       &arguments->seed_display,
+                                       false);
+  gt_option_exclude(op_seed_display, op_onl);
+  gt_option_is_development_option(op_seed_display);
+  gt_option_parser_add_option(op, op_seed_display);
+
+  /* -seqlength-display */
+  op_seqlength_display = gt_option_new_bool("seqlength-display",
+                                       "Display length of sequences in which "
+                                       "which the two match-instances occur",
+                                       &arguments->seqlength_display,
+                                       false);
+  gt_option_is_development_option(op_seqlength_display);
+  gt_option_parser_add_option(op, op_seqlength_display);
+
   /* -no-reverse */
   op_norev = gt_option_new_bool("no-reverse",
                                 "do not compute matches on reverse "
@@ -368,12 +405,23 @@ static GtOptionParser* gt_seed_extend_option_parser_new(void *tool_arguments)
   gt_option_parser_add_option(op, op_nofwd);
 
   /* -overlappingseeds */
-  option = gt_option_new_bool("overlappingseeds",
-                              "Allow overlapping SeedPairs",
-                              &arguments->overlappingseeds,
-                              false);
-  gt_option_is_development_option(option);
-  gt_option_parser_add_option(op, option);
+  op_overl = gt_option_new_bool("overlappingseeds",
+                                "Allow overlapping SeedPairs",
+                                &arguments->overlappingseeds,
+                                false);
+  gt_option_is_development_option(op_overl);
+  gt_option_parser_add_option(op, op_overl);
+
+  /* -seedpairdistance */
+  op_spdist = gt_option_new_range("seedpairdistance",
+                                  "Only use SeedPairs whose positions differ "
+                                  "in accordance with the specified range",
+                                  &arguments->seedpairdistance,
+                                  &seedpairdistance_defaults);
+  gt_option_exclude(op_spdist, op_overl);
+  gt_option_is_development_option(op_spdist);
+  gt_option_hide_default(op_spdist);
+  gt_option_parser_add_option(op, op_spdist);
 
   /* -benchmark */
   option = gt_option_new_bool("benchmark",
@@ -383,17 +431,6 @@ static GtOptionParser* gt_seed_extend_option_parser_new(void *tool_arguments)
   gt_option_is_development_option(option);
   gt_option_parser_add_option(op, option);
 
-  /* -seed-display */
-  op_seed_display = gt_option_new_bool("seed-display",
-                                       "Display seeds in #-line and by "
-                                       "character + (instead of |) in middle "
-                                       "row of alignment column",
-                                       &arguments->seed_display,
-                                       false);
-  gt_option_exclude(op_seed_display, op_onl);
-  gt_option_is_development_option(op_seed_display);
-  gt_option_parser_add_option(op, op_seed_display);
-
   /* -weakends */
   op_weakends = gt_option_new_bool("weakends",
                                    "reduce minidentity for ends of seeded "
@@ -404,15 +441,48 @@ static GtOptionParser* gt_seed_extend_option_parser_new(void *tool_arguments)
   gt_option_is_development_option(op_weakends);
   gt_option_parser_add_option(op, op_weakends);
 
-  /* -extend-last */
-  option = gt_option_new_bool("extend-last",
-                              "Start extension after all SeedPair lists are "
-                              "created",
-                              &arguments->extend_last,
+  /* -use-apos */
+  option = gt_option_new_bool("use-apos",
+                              "Discard a seed only if both apos and bpos "
+                              "overlap with previous alignment",
+                              &arguments->use_apos,
                               false);
   gt_option_is_development_option(option);
   gt_option_parser_add_option(op, option);
 
+  /* -parts */
+  op_part = gt_option_new_uword_min("parts",
+                                    "Divide data into specified number of "
+                                    "parts",
+                                    &arguments->dbs_parts,
+                                    1, 1UL);
+  gt_option_parser_add_option(op, op_part);
+
+  /* -pick */
+  op_pick = gt_option_new_string("pick",
+                                 "Choose parts for 1st/2nd sequence set. "
+                                 "Format: i,j",
+                                 arguments->dbs_pick_str,
+                                 "use all combinations successively");
+  gt_option_imply(op_pick, op_part);
+  gt_option_is_development_option(op_pick);
+  gt_option_parser_add_option(op, op_pick);
+
+  /* -histogram */
+  option = gt_option_new_bool("histogram",
+                              "Calculate histogram to determine size of mlist",
+                              &arguments->histogram,
+                              true);
+  gt_option_is_development_option(option);
+  gt_option_parser_add_option(op, option);
+
+  /* -kmerfile */
+  option = gt_option_new_bool("kmerfile",
+                              "Use pre-calculated k-mers from file (if exist)",
+                              &arguments->use_kmerfile,
+                              true);
+  gt_option_parser_add_option(op, option);
+
   /* -v */
   option = gt_option_new_verbose(&arguments->verbose);
   gt_option_parser_add_option(op, option);
@@ -440,6 +510,9 @@ static int gt_seed_extend_arguments_check(int rest_argc, void *tool_arguments,
 
   /* parse memlimit argument */
   arguments->dbs_memlimit = GT_UWORD_MAX;
+  if (arguments->histogram == true) {
+    arguments->dbs_memlimit -= 1;
+  }
   if (strcmp(gt_str_get(arguments->dbs_memlimit_str), "") != 0) {
     had_err = gt_option_parse_spacespec(&arguments->dbs_memlimit,
                                         "memlimit",
@@ -473,24 +546,63 @@ static int gt_seed_extend_arguments_check(int rest_argc, void *tool_arguments,
   return had_err;
 }
 
-static int gt_seed_extend_runner(GT_UNUSED int argc,
-                                 GT_UNUSED const char **argv,
+/* Compute sequence ranges for specified number of parts and pick value. */
+static int gt_seed_extend_compute_parts(GtRange *seqranges,
+                                        GtUword *numseqranges,
+                                        const GtEncseq *encseq,
+                                        GtUword pick_value,
+                                        GtError *err)
+{
+  GtUword seqnum;
+  const GtUword numparts = *numseqranges;
+  const GtUword maxseqnum = gt_encseq_num_of_sequences(encseq) - 1;
+  const GtUword partsize = maxseqnum / numparts + 1;
+  int had_err = 0;
+  gt_assert(seqranges && numseqranges);
+  *numseqranges = 0;
+
+  if (pick_value == GT_UWORD_MAX) { /* not specified: take all sequences */
+    GtRange *new_range;
+    for (seqnum = 0; seqnum <= maxseqnum; seqnum += partsize) {
+      gt_assert(*numseqranges < numparts);
+      new_range = seqranges + *numseqranges;
+      new_range->start = seqnum;
+      new_range->end = MIN(seqnum + partsize - 1, maxseqnum);
+      (*numseqranges)++;
+    }
+    gt_assert(*numseqranges > 0);
+  } else if (pick_value > numparts) {
+    gt_error_set(err, "arguments to option -pick must not exceed " GT_WU
+                 " (number of parts)", numparts);
+    had_err = -1;
+  } else if (pick_value < 1) {
+    gt_error_set(err, "arguments to option -pick must be at least 1");
+    had_err = -1;
+  } else {
+    seqranges->start = (pick_value - 1) * partsize;
+    seqranges->end = MIN(pick_value * partsize - 1, maxseqnum);
+    *numseqranges = 1;
+  }
+  return had_err;
+}
+
+static int gt_seed_extend_runner(int argc,
+                                 const char **argv,
                                  GT_UNUSED int parsed_args,
                                  void *tool_arguments,
                                  GtError *err)
 {
   GtSeedExtendArguments *arguments = tool_arguments;
-  GtEncseqLoader *encseq_loader = NULL;
   GtEncseq *aencseq = NULL, *bencseq = NULL;
-  GtGreedyextendmatchinfo *grextinfo = NULL;
-  GtXdropmatchinfo *xdropinfo = NULL;
-  GtQuerymatchoutoptions *querymatchoutopt = NULL;
   GtTimer *seedextendtimer = NULL;
   GtExtendCharAccess cam = GT_EXTEND_CHAR_ACCESS_ANY;
   GtUword errorpercentage = 0UL;
   double matchscore_bias = GT_DEFAULT_MATCHSCORE_BIAS;
-  bool extendgreedy = true;
-  Polishing_info *pol_info = NULL;
+  bool extendxdrop, extendgreedy = true;
+  unsigned int display_flag = 0;
+  unsigned int maxseedlength = 0, nchars = 0;
+  GtUword apick = GT_UWORD_MAX, bpick = GT_UWORD_MAX;
+  GtUword maxseqlength = 0;
   int had_err = 0;
 
   gt_error_check(err);
@@ -498,32 +610,31 @@ static int gt_seed_extend_runner(GT_UNUSED int argc,
   gt_assert(arguments->se_minidentity >= GT_EXTEND_MIN_IDENTITY_PERCENTAGE &&
             arguments->se_minidentity <= 100UL);
 
-  if (arguments->onlyseeds || gt_option_is_set(arguments->se_option_xdrop)) {
+  /* Define, whether greedy extension will be performed */
+  extendxdrop = gt_option_is_set(arguments->se_option_xdrop);
+  if (arguments->onlyseeds || extendxdrop) {
     extendgreedy = false;
   }
 
-  if (arguments->dbs_verify || arguments->verbose) {
+  /* Print verbose option string */
+  if (arguments->verbose) {
     int idx;
     bool minid_out = false, history_out = false;
 
     printf("# Options:");
     for (idx = 1; idx < argc; idx++) {
-      if (strcmp(argv[idx],"-minidentity") == 0)
-      {
+      if (strcmp(argv[idx],"-minidentity") == 0) {
         minid_out = true;
       }
-      if (strcmp(argv[idx],"-history") == 0)
-      {
+      if (strcmp(argv[idx],"-history") == 0) {
         history_out = true;
       }
       printf(" %s", argv[idx]);
     }
-    if (!minid_out)
-    {
+    if (!minid_out) {
       printf(" -minidentity " GT_WU,arguments->se_minidentity);
     }
-    if (!history_out)
-    {
+    if (!history_out) {
       printf(" -history " GT_WU,arguments->se_historysize);
     }
     printf("\n");
@@ -542,240 +653,260 @@ static int gt_seed_extend_runner(GT_UNUSED int argc,
     gt_timer_start(seedextendtimer);
   }
 
-  /* Load encseq A */
-  encseq_loader = gt_encseq_loader_new();
-  gt_encseq_loader_enable_autosupport(encseq_loader);
-  aencseq = gt_encseq_loader_load(encseq_loader,
-                                  gt_str_get(arguments->dbs_indexname),
-                                  err);
-  if (aencseq == NULL)
-    had_err = -1;
+  /* Set display flag */
+  display_flag = gt_querymatch_bool2display_flag(arguments->seed_display,
+                                                 arguments->seqlength_display);
 
-  /* If there is a 2nd read set: Load encseq B */
-  if (!had_err) {
-    if (strcmp(gt_str_get(arguments->dbs_queryname), "") != 0) {
-      bencseq = gt_encseq_loader_load(encseq_loader,
-                                      gt_str_get(arguments->dbs_queryname),
-                                      err);
-    } else {
-      bencseq = gt_encseq_ref(aencseq);
-    }
-    if (bencseq == NULL) {
+  /* Set character access method */
+  if (!arguments->onlyseeds || arguments->se_alignmentwidth > 0) {
+    cam = gt_greedy_extend_char_access(gt_str_get(arguments->char_access_mode),
+                                       err);
+    if ((int) cam == -1) {
       had_err = -1;
-      gt_encseq_delete(aencseq);
     }
   }
-  gt_encseq_loader_delete(encseq_loader);
 
-  if (!had_err && !gt_alphabet_is_dna(gt_encseq_alphabet(bencseq))) {
-    if (arguments->nofwd) {
-      gt_error_set(err, "option -no-forward is only allowed for DNA sequences");
+  if (!had_err) {
+    GtEncseqLoader *encseq_loader = gt_encseq_loader_new();
+    gt_encseq_loader_require_multiseq_support(encseq_loader);
+
+    /* Load encseq A */
+    aencseq = gt_encseq_loader_load(encseq_loader,
+                                    gt_str_get(arguments->dbs_indexname),
+                                    err);
+    if (aencseq == NULL) {
       had_err = -1;
     } else {
-      arguments->norev = true;
+      /* If there is a 2nd read set: Load encseq B */
+      if (strcmp(gt_str_get(arguments->dbs_queryname), "") != 0) {
+        bencseq = gt_encseq_loader_load(encseq_loader,
+                                        gt_str_get(arguments->dbs_queryname),
+                                        err);
+      } else {
+        bencseq = gt_encseq_ref(aencseq);
+      }
+      if (bencseq == NULL) {
+        had_err = -1;
+        gt_encseq_delete(aencseq);
+      }
     }
+    gt_encseq_loader_delete(encseq_loader);
   }
 
-  /* set character access method */
-  if (!had_err && (!arguments->onlyseeds ||
-                   arguments->se_alignmentwidth > 0))
-  {
-    cam = gt_greedy_extend_char_access(gt_str_get
-                                       (arguments->se_char_access_mode),
-                                       err);
-    if ((int) cam == -1) {
-      had_err = -1;
+  /* Check alphabet sizes */
+  if (!had_err) {
+    unsigned int nchars_b;
+    nchars = gt_alphabet_num_of_chars(gt_encseq_alphabet(aencseq));
+    nchars_b = gt_alphabet_num_of_chars(gt_encseq_alphabet(bencseq));
+    if (nchars != nchars_b) {
+      gt_error_set(err,"encoded sequences have different alphabet "
+                   "sizes %u and %u", nchars, nchars_b);
       gt_encseq_delete(aencseq);
       gt_encseq_delete(bencseq);
+      had_err = -1;
     }
   }
 
-  /* set seedlength */
-  if (!had_err && arguments->dbs_seedlength == UINT_MAX) {
-    unsigned int nchars = gt_alphabet_num_of_chars(gt_encseq_alphabet(aencseq));
+  if (had_err) {
+    if (gt_showtime_enabled()) {
+      gt_timer_delete(seedextendtimer);
+    }
+    return had_err;
+  }
+
+  /* Set seedlength */
+  gt_assert(aencseq != NULL && bencseq != NULL);
+  if (gt_encseq_has_twobitencoding(aencseq) &&
+      gt_encseq_wildcards(aencseq) == 0 &&
+      gt_encseq_has_twobitencoding(bencseq) &&
+      gt_encseq_wildcards(bencseq) == 0) {
+    maxseedlength = 32;
+  } else {
+    maxseedlength = gt_maxbasepower(nchars) - 1;
+  }
+  maxseqlength = MIN(gt_encseq_max_seq_length(aencseq),
+                     gt_encseq_max_seq_length(bencseq));
+
+  if (arguments->dbs_seedlength == UINT_MAX) {
+    unsigned int seedlength;
     double totallength = 0.5 * (gt_encseq_total_length(aencseq) +
                                 gt_encseq_total_length(bencseq));
     gt_assert(nchars > 0);
-    arguments->dbs_seedlength
-      = (unsigned int)gt_round_to_long(gt_log_base(totallength,(double)nchars));
-    GT_UPDATE_MAX(arguments->dbs_seedlength, 2);
+    seedlength = (unsigned int)gt_round_to_long(gt_log_base(totallength,
+                                                            (double)nchars));
+    seedlength = (unsigned int)MIN3(seedlength, maxseqlength, maxseedlength);
+    arguments->dbs_seedlength = MAX(seedlength, 2);
+  }
+  if (arguments->dbs_seedlength > MIN(maxseedlength, maxseqlength)) {
+    if (maxseedlength <= maxseqlength) {
+      gt_error_set(err, "maximum seedlength for alphabet of size %u is %u",
+                   nchars, maxseedlength);
+    } else {
+      gt_error_set(err, "argument to option \"-seedlength\" must be an integer "
+                   "<= " GT_WU " (length of longest sequence).", maxseqlength);
+    }
+    had_err = -1;
   }
 
-  /* set mincoverage */
+  /* Set mincoverage */
   if (!had_err && arguments->dbs_mincoverage == GT_UWORD_MAX) {
     arguments->dbs_mincoverage = (GtUword) (2.5 * arguments->dbs_seedlength);
   }
 
-  /* set minimum alignment length */
+  /* Set minimum alignment length */
   if (!had_err && arguments->se_alignlength == GT_UWORD_MAX) {
     arguments->se_alignlength = arguments->dbs_mincoverage;
   }
 
-  /* Prepare options for greedy extension */
-  if (!had_err && extendgreedy) {
-    /* Use bias dependent parameters, adapted from E. Myers' DALIGNER */
-    if (!had_err && arguments->bias_parameters)
-    {
-      matchscore_bias = gt_greedy_dna_sequence_bias_get(aencseq);
-      arguments->se_maxalilendiff = 30;
-      arguments->se_perc_match_hist
-        = (GtUword) (100.0 - errorpercentage * matchscore_bias);
-    }
-    pol_info = polishing_info_new_with_bias(arguments->weakends
-                                              ? MAX(errorpercentage,20)
-                                              : errorpercentage,
-                                            matchscore_bias,
-                                            arguments->se_historysize);
-    grextinfo = gt_greedy_extend_matchinfo_new(errorpercentage,
-                                               arguments->se_maxalilendiff,
-                                               arguments->se_historysize,
-                                               arguments->se_perc_match_hist,
-                                               arguments->se_alignlength,
-                                               cam,
-                                               arguments->se_extendgreedy,
-                                               pol_info);
-    if (arguments->benchmark) {
-      gt_greedy_extend_matchinfo_silent_set(grextinfo);
+  /* Check alphabet and direction compatibility */
+  if (!had_err && !gt_alphabet_is_dna(gt_encseq_alphabet(bencseq))) {
+    if (arguments->nofwd) {
+      gt_error_set(err, "option -no-forward is only allowed for DNA sequences");
+      had_err = -1;
+    } else {
+      arguments->norev = true; /* reverse is just for DNA */
     }
   }
 
-  /* Prepare options for xdrop extension */
-  if (!had_err && gt_option_is_set(arguments->se_option_xdrop)) {
-    xdropinfo = gt_xdrop_matchinfo_new(arguments->se_alignlength,
-                                       errorpercentage,
-                                       arguments->se_xdropbelowscore,
-                                       arguments->se_extendxdrop);
-    if (arguments->benchmark) {
-      gt_xdrop_matchinfo_silent_set(xdropinfo);
+  /* Parse pick option */
+  if (!had_err && strcmp(gt_str_get(arguments->dbs_pick_str),
+                         "use all combinations successively") != 0) {
+    char **items = gt_cstr_split(gt_str_get(arguments->dbs_pick_str), ',');
+    if (gt_cstr_array_size((const char **)items) != 2 ||
+        gt_parse_uword(&apick, items[0]) != 0 ||
+        gt_parse_uword(&bpick, items[1]) != 0) {
+      gt_error_set(err, "argument to option -pick must satisfy format i,j");
+      had_err = -1;
+    } else if (aencseq == bencseq && apick > bpick) {
+      GtUword tmp = apick;
+      apick = bpick;
+      bpick = tmp;
     }
+    gt_cstr_array_delete(items);
   }
 
-  /* Prepare output options */
-  if (!had_err && (arguments->se_alignmentwidth > 0 ||
-                   gt_option_is_set(arguments->se_option_xdrop)))
-  {
-    querymatchoutopt
-      = gt_querymatchoutoptions_new(true,false,arguments->se_alignmentwidth);
-
-    if (!arguments->onlyseeds)
-    {
-      GtUword sensitivity = 97UL;
-      if (gt_option_is_set(arguments->se_option_greedy)) {
-        sensitivity = arguments->se_extendgreedy;
-      } else if (gt_option_is_set(arguments->se_option_xdrop)) {
-        sensitivity = 100UL;
-      }
+  /* Use bias dependent parameters, adapted from E. Myers' DALIGNER */
+  if (!had_err && extendgreedy && arguments->bias_parameters) {
+    matchscore_bias = gt_greedy_dna_sequence_bias_get(aencseq);
+    arguments->se_maxalilendiff = 30;
+    arguments->se_perc_match_hist = (GtUword) (100.0 - errorpercentage *
+                                               matchscore_bias);
+  }
 
-      gt_querymatchoutoptions_extend(querymatchoutopt,
-                                     errorpercentage,
-                                     arguments->se_maxalilendiff,
-                                     arguments->se_historysize,
-                                     arguments->se_perc_match_hist,
-                                     cam,
-                                     arguments->weakends,
-                                     sensitivity,
-                                     matchscore_bias,
-                                     !arguments->relax_polish,
-                                     arguments->seed_display);
+  /* Set SeedPair distance according to overlappingseeds flag */
+  if (!had_err && arguments->seedpairdistance.end == GT_UWORD_MAX) {
+    arguments->seedpairdistance.end -= gt_encseq_max_seq_length(aencseq);
+    if (!arguments->overlappingseeds &&
+        arguments->seedpairdistance.start == 1UL) {
+      arguments->seedpairdistance.start = (GtUword)arguments->dbs_seedlength;
     }
   }
 
-  /* Start algorithm */
+  /* Fill struct of algorithm arguments */
   if (!had_err) {
-    GtDiagbandseed dbsarguments;
-    unsigned int maxseedlength;
-
-    dbsarguments.errorpercentage = errorpercentage;
-    dbsarguments.userdefinedleastlength = arguments->se_alignlength;
-    dbsarguments.seedlength = arguments->dbs_seedlength;
-    dbsarguments.logdiagbandwidth = arguments->dbs_logdiagbandwidth;
-    dbsarguments.mincoverage = arguments->dbs_mincoverage;
-    dbsarguments.maxfreq = arguments->dbs_maxfreq;
-    dbsarguments.memlimit = arguments->dbs_memlimit;
-    dbsarguments.norev = arguments->norev;
-    dbsarguments.nofwd = arguments->nofwd;
-    dbsarguments.overlappingseeds = arguments->overlappingseeds;
-    dbsarguments.verify = arguments->dbs_verify;
-    dbsarguments.verbose = arguments->verbose;
-    dbsarguments.debug_kmer = arguments->dbs_debug_kmer;
-    dbsarguments.debug_seedpair = arguments->dbs_debug_seedpair;
-    dbsarguments.seed_display = arguments->seed_display;
-    dbsarguments.extend_last = arguments->extend_last;
-    dbsarguments.extendgreedyinfo = grextinfo;
-    dbsarguments.extendxdropinfo = xdropinfo;
-    dbsarguments.querymatchoutopt = querymatchoutopt;
-
-    gt_assert(bencseq != NULL);
-    if (gt_encseq_has_twobitencoding(aencseq) &&
-        gt_encseq_wildcards(aencseq) == 0 &&
-        gt_encseq_has_twobitencoding(bencseq) &&
-        gt_encseq_wildcards(bencseq) == 0)
-    {
-      maxseedlength = 32;
-    } else
-    {
-      unsigned int numofchars_a
-        = gt_alphabet_num_of_chars(gt_encseq_alphabet(aencseq));
-      unsigned int numofchars_b
-        = gt_alphabet_num_of_chars(gt_encseq_alphabet(bencseq));
-      if (numofchars_a != numofchars_b)
-      {
-        gt_error_set(err,"encoded sequences have different alphabet "
-                         "sizes %u and %u",numofchars_a,numofchars_b);
-        had_err = -1;
-      }
-      if (!had_err)
-      {
-        maxseedlength = gt_maxbasepower(numofchars_a) - 1;
-        if (dbsarguments.seedlength > maxseedlength)
-        {
-          gt_error_set(err,"maximum seedlength for alphabet of size %u is %u",
-                          numofchars_a,maxseedlength);
-          had_err = -1;
-        }
-      }
-    }
-    if (!had_err)
-    {
-      had_err = gt_diagbandseed_run(aencseq, bencseq, &dbsarguments, err);
-    }
+    GtDiagbandseedExtendParams *extp = NULL;
+    GtDiagbandseedInfo *info = NULL;
+    GtUword sensitivity = 0;
+    GtUword anum = arguments->dbs_parts;
+    GtUword bnum = arguments->dbs_parts;
+    GtRange *aseqranges = (GtRange *)gt_malloc(anum * sizeof *aseqranges);
+    GtRange *bseqranges = (GtRange *)gt_malloc(bnum * sizeof *bseqranges);
 
-    /* clean up */
-    gt_encseq_delete(aencseq);
-    gt_encseq_delete(bencseq);
     if (extendgreedy) {
-      gt_greedy_extend_matchinfo_delete(grextinfo);
+      sensitivity = arguments->se_extendgreedy;
+    } else if (extendxdrop) {
+      sensitivity = arguments->se_extendxdrop;
     }
-    if (gt_option_is_set(arguments->se_option_xdrop)) {
-      gt_xdrop_matchinfo_delete(xdropinfo);
-    }
-    if (arguments->se_alignmentwidth > 0 ||
-        gt_option_is_set(arguments->se_option_xdrop)) {
-      gt_querymatchoutoptions_delete(querymatchoutopt);
+
+    gt_assert(gt_encseq_num_of_sequences(aencseq) > 0);
+    gt_assert(gt_encseq_num_of_sequences(bencseq) > 0);
+
+    /* Get sequence ranges */
+    had_err = gt_seed_extend_compute_parts(aseqranges,
+                                           &anum,
+                                           aencseq,
+                                           apick,
+                                           err);
+    if (!had_err) {
+      had_err = gt_seed_extend_compute_parts(bseqranges,
+                                             &bnum,
+                                             bencseq,
+                                             bpick,
+                                             err);
     }
-  }
-  polishing_info_delete(pol_info);
 
-  if (gt_showtime_enabled()) {
+    extp = gt_diagbandseed_extend_params_new(errorpercentage,
+                                             arguments->se_alignlength,
+                                             arguments->dbs_logdiagbandwidth,
+                                             arguments->dbs_mincoverage,
+                                             display_flag,
+                                             arguments->use_apos,
+                                             arguments->se_xdropbelowscore,
+                                             extendgreedy,
+                                             extendxdrop,
+                                             arguments->se_maxalilendiff,
+                                             arguments->se_historysize,
+                                             arguments->se_perc_match_hist,
+                                             cam,
+                                             sensitivity,
+                                             matchscore_bias,
+                                             arguments->weakends,
+                                             arguments->benchmark,
+                                             arguments->se_alignmentwidth,
+                                             !arguments->relax_polish);
+
+    info = gt_diagbandseed_info_new(aencseq,
+                                    bencseq,
+                                    arguments->dbs_maxfreq,
+                                    arguments->dbs_memlimit,
+                                    arguments->dbs_seedlength,
+                                    arguments->norev,
+                                    arguments->nofwd,
+                                    &arguments->seedpairdistance,
+                                    arguments->dbs_verify,
+                                    arguments->verbose,
+                                    arguments->dbs_debug_kmer,
+                                    arguments->dbs_debug_seedpair,
+                                    arguments->use_kmerfile,
+                                    extp,
+                                    anum,
+                                    bnum);
+
+    /* Start algorithm */
     if (!had_err) {
-      char *keystring
-        = gt_seed_extend_params_keystring(extendgreedy,
-                                          gt_option_is_set(arguments->
-                                                           se_option_xdrop),
-                                          arguments->dbs_seedlength,
-                                          arguments->se_alignlength,
-                                          arguments->se_minidentity,
-                                          arguments->se_maxalilendiff,
-                                          arguments->se_perc_match_hist,
-                                          arguments->se_extendgreedy,
-                                          arguments->se_extendxdrop,
-                                          arguments->se_xdropbelowscore);
-      printf("# TIME seedextend-%s", keystring);
-      gt_free(keystring);
-      gt_timer_show_formatted(seedextendtimer,
-                              " overall " GT_WD ".%06ld\n",
-                              stdout);
+      had_err = gt_diagbandseed_run(info,
+                                    aseqranges,
+                                    bseqranges,
+                                    err);
     }
+
+    /* clean up */
+    gt_free(aseqranges);
+    gt_free(bseqranges);
+    gt_diagbandseed_extend_params_delete(extp);
+    gt_diagbandseed_info_delete(info);
+  }
+  gt_encseq_delete(aencseq);
+  gt_encseq_delete(bencseq);
+
+  if (!had_err && gt_showtime_enabled()) {
+    char *keystring;
+    keystring = gt_seed_extend_params_keystring(extendgreedy,
+                                                extendxdrop,
+                                                arguments->dbs_seedlength,
+                                                arguments->se_alignlength,
+                                                arguments->se_minidentity,
+                                                arguments->se_maxalilendiff,
+                                                arguments->se_perc_match_hist,
+                                                arguments->se_extendgreedy,
+                                                arguments->se_extendxdrop,
+                                                arguments->se_xdropbelowscore);
+    printf("# TIME seedextend-%s", keystring);
+    gt_free(keystring);
+    gt_timer_show_formatted(seedextendtimer,
+                            " overall " GT_WD ".%06ld\n", stdout);
+  }
+  if (gt_showtime_enabled()) {
     gt_timer_delete(seedextendtimer);
   }
   return had_err;
diff --git a/src/tools/gt_seed_extend.h b/src/tools/gt_seed_extend.h
index 944dad2..107a54b 100644
--- a/src/tools/gt_seed_extend.h
+++ b/src/tools/gt_seed_extend.h
@@ -1,6 +1,6 @@
 /*
-  Copyright (c) 2015 Joerg Winkler <joerg.winkler at studium.uni-hamburg.de>
-  Copyright (c) 2015 Center for Bioinformatics, University of Hamburg
+  Copyright (c) 2015-2016 Joerg Winkler <j.winkler at posteo.de>
+  Copyright (c) 2015-2016 Center for Bioinformatics, University of Hamburg
 
   Permission to use, copy, modify, and distribute this software for any
   purpose with or without fee is hereby granted, provided that the above
diff --git a/src/tools/gt_seq.c b/src/tools/gt_seq.c
index 442330f..fa6ed1a 100644
--- a/src/tools/gt_seq.c
+++ b/src/tools/gt_seq.c
@@ -21,6 +21,7 @@
 #include "core/option_api.h"
 #include "core/output_file_api.h"
 #include "core/undef_api.h"
+#include "core/eansi.h"
 #include "tools/gt_seq.h"
 
 typedef struct {
@@ -28,10 +29,12 @@ typedef struct {
        showfasta,
        gc_content,
        stat,
-       seqlengthdistri;
+       seqlengthdistri,
+       seqnum_from_0;
   GtUword showseqnum,
+          showseqlength,
                 width;
-  GtStr *reader;
+  GtStr *showseqnum_inputfile;
   GtOutputFileInfo *ofi;
   GtFile *outfp;
 } SeqArguments;
@@ -39,8 +42,8 @@ typedef struct {
 static void* gt_seq_arguments_new(void)
 {
   SeqArguments *arguments = gt_calloc(1, sizeof *arguments);
-  arguments->reader = gt_str_new();
   arguments->ofi = gt_output_file_info_new();
+  arguments->showseqnum_inputfile = gt_str_new();
   return arguments;
 }
 
@@ -50,7 +53,7 @@ static void gt_seq_arguments_delete(void *tool_arguments)
   if (!arguments) return;
   gt_file_delete(arguments->outfp);
   gt_output_file_info_delete(arguments->ofi);
-  gt_str_delete(arguments->reader);
+  gt_str_delete(arguments->showseqnum_inputfile);
   gt_free(arguments);
 }
 
@@ -58,7 +61,8 @@ static GtOptionParser* gt_seq_option_parser_new(void *tool_arguments)
 {
   SeqArguments *arguments = tool_arguments;
   GtOption *option, *option_recreate, *option_showfasta, *option_showseqnum,
-           *option_width, *option_stat;
+           *option_width, *option_stat, *option_showseqnum_inputfile,
+           *option_seqnum_from_0, *option_showseqlength;
   GtOptionParser *op;
   gt_assert(arguments);
 
@@ -79,12 +83,37 @@ static GtOptionParser* gt_seq_option_parser_new(void *tool_arguments)
   gt_option_parser_add_option(op, option_showfasta);
 
   /* -showseqnum */
-  option_showseqnum = gt_option_new_uword_min("showseqnum", "show sequence "
-                                              "with given number (in FASTA "
-                                              "format)", &arguments->showseqnum,
-                                              GT_UNDEF_UWORD, 1);
+#define GT_COMMENT_COUNTED_FROM_0\
+        "(sequences are counted from 1 unless -seqnum_from_0 is specified)"
+  option_showseqnum = gt_option_new_uword_min("showseqnum",
+                      "show sequence with given number "
+                      GT_COMMENT_COUNTED_FROM_0,
+                      &arguments->showseqnum,
+                      GT_UNDEF_UWORD, 0);
   gt_option_parser_add_option(op, option_showseqnum);
 
+  option_showseqlength = gt_option_new_uword_min("showseqlength",
+                      "show length of sequence with given number "
+                      GT_COMMENT_COUNTED_FROM_0,
+                      &arguments->showseqlength,
+                      GT_UNDEF_UWORD, 0);
+  gt_option_parser_add_option(op, option_showseqlength);
+
+  /* -showseqnum_inputfile */
+  option_showseqnum_inputfile = gt_option_new_filename("showseqnum_inputfile",
+                                "show sequence with given numbers "
+                                "specified line by line in given file "
+                                GT_COMMENT_COUNTED_FROM_0,
+                                arguments->showseqnum_inputfile);
+  gt_option_parser_add_option(op, option_showseqnum_inputfile);
+
+  /* -seqnum_from_0 */
+  option_seqnum_from_0 = gt_option_new_bool("seqnum_from_0",
+                        "for options -showseqnum and -showseqnum_inputfile: "
+                        "count sequence numbers from 0 instead of 1",
+                        &arguments->seqnum_from_0, false);
+  gt_option_parser_add_option(op, option_seqnum_from_0);
+
   /* -gc-content */
   option = gt_option_new_bool("gc-content", "print GC-content (for DNA files)",
                               &arguments->gc_content, false);
@@ -102,6 +131,7 @@ static GtOptionParser* gt_seq_option_parser_new(void *tool_arguments)
   gt_option_parser_add_option(op, option);
 
   /* -width */
+
   option_width = gt_option_new_width(&arguments->width);
   gt_option_parser_add_option(op, option_width);
 
@@ -109,12 +139,20 @@ static GtOptionParser* gt_seq_option_parser_new(void *tool_arguments)
   gt_output_file_info_register_options(arguments->ofi, op, &arguments->outfp);
 
   /* option implications */
-  gt_option_imply_either_2(option_width, option_showfasta, option_showseqnum);
+  gt_option_imply_either_3(option_width, option_showfasta, option_showseqnum,
+                           option_showseqnum_inputfile);
+  gt_option_imply_either_3(option_seqnum_from_0, option_showseqnum,
+                           option_showseqlength,
+                           option_showseqnum_inputfile);
 
   /* option exclusions */
   gt_option_exclude(option_showfasta, option_stat);
   gt_option_exclude(option_showfasta, option_showseqnum);
   gt_option_exclude(option_showseqnum, option_stat);
+  gt_option_exclude(option_showseqnum, option_showseqnum_inputfile);
+  gt_option_exclude(option_showseqlength, option_stat);
+  gt_option_exclude(option_showseqlength, option_showseqnum);
+  gt_option_exclude(option_showseqlength, option_showseqnum_inputfile);
 
   /* set minimal arguments */
   gt_option_parser_set_min_args(op, 1);
@@ -129,10 +167,26 @@ static int gt_seq_arguments_check(int rest_argc, void *tool_arguments,
   gt_error_check(err);
   gt_assert(arguments);
   /* option -showseqnum makes only sense if we got a single sequence file */
-  if (arguments->showseqnum != GT_UNDEF_UWORD && rest_argc > 1) {
-    gt_error_set(err, "option '-showseqnum' makes only sense with a single "
-                      "sequence_file");
-    return -1;
+  if (arguments->showseqnum != GT_UNDEF_UWORD ||
+      arguments->showseqlength != GT_UNDEF_UWORD)
+  {
+    if (rest_argc > 1)
+    {
+      gt_error_set(err, "option '-showseq%s' only makes sense with a single "
+                        "sequence_file",
+                        arguments->showseqnum != GT_UNDEF_UWORD ? "num"
+                                                                : "length");
+      return -1;
+    }
+    if ((arguments->showseqnum == 0 || arguments->showseqlength == 0) &&
+        !arguments->seqnum_from_0)
+    {
+      gt_error_set(err, "argument to option '-showseq%s' must be >= 1 if "
+                        "option -seqnum_from_0 is not used",
+                        arguments->showseqnum == 0 ? "num"
+                                                   : "length");
+      return -1;
+    }
   }
   return 0;
 }
@@ -159,18 +213,97 @@ static int gt_seq_runner(int argc, const char **argv, int parsed_args,
     if (!had_err && arguments->showfasta)
       gt_bioseq_show_as_fasta(bioseq, arguments->width, arguments->outfp);
 
-    if (!had_err && arguments->showseqnum != GT_UNDEF_UWORD) {
-      if (arguments->showseqnum > gt_bioseq_number_of_sequences(bioseq)) {
-        gt_error_set(err, "argument '"GT_WU"' to option '-showseqnum' is too "
-                     "large. The sequence index contains only '"GT_WU"' "
-                     "sequences.",
-                     arguments->showseqnum,
-                     gt_bioseq_number_of_sequences(bioseq));
-        had_err = -1;
+    if (!had_err && (arguments->showseqnum != GT_UNDEF_UWORD ||
+                     arguments->showseqlength != GT_UNDEF_UWORD ||
+                     gt_str_length(arguments->showseqnum_inputfile) > 0))
+    {
+      GtUword maxseqnum = gt_bioseq_number_of_sequences(bioseq);
+      if (arguments->seqnum_from_0)
+      {
+        gt_assert(maxseqnum > 0);
+        maxseqnum--;
       }
-      if (!had_err) {
-        gt_bioseq_show_sequence_as_fasta(bioseq, arguments->showseqnum - 1,
-                                         arguments->width, arguments->outfp);
+      if (arguments->showseqnum != GT_UNDEF_UWORD ||
+          arguments->showseqlength != GT_UNDEF_UWORD)
+      {
+        if ((arguments->showseqnum != GT_UNDEF_UWORD &&
+             arguments->showseqnum > maxseqnum) ||
+            (arguments->showseqlength != GT_UNDEF_UWORD &&
+             arguments->showseqlength > maxseqnum))
+        {
+          gt_error_set(err, "argument '" GT_WU "' to option '-showseq%s' "
+                            "is too large. The largest possible number is '"
+                            GT_WU "'",
+                     arguments->showseqnum,
+                     arguments->showseqnum != GT_UNDEF_UWORD ? "num"
+                                                             : "length",
+                     maxseqnum);
+          had_err = -1;
+        }
+        if (!had_err) {
+          if (arguments->showseqnum != GT_UNDEF_UWORD)
+          {
+            gt_bioseq_show_sequence_as_fasta(bioseq,
+                                             arguments->seqnum_from_0
+                                               ? arguments->showseqnum
+                                               : arguments->showseqnum - 1,
+                                             arguments->width,
+                                             arguments->outfp);
+          } else
+          {
+            GtUword seqnum = arguments->seqnum_from_0
+                               ? arguments->showseqlength
+                               : arguments->showseqlength - 1;
+            gt_file_xprintf(arguments->outfp,GT_WU "\n",
+                            gt_bioseq_get_sequence_length(bioseq, seqnum));
+          }
+        }
+      } else
+      {
+        FILE *fpin;
+
+        gt_assert(gt_str_length(arguments->showseqnum_inputfile) > 0);
+        if (strcmp(gt_str_get(arguments->showseqnum_inputfile),"-") == 0)
+        {
+          fpin = stdin;
+        } else
+        {
+          fpin = gt_efopen(gt_str_get(arguments->showseqnum_inputfile),
+                           "rb",err);
+        }
+        if (fpin == NULL)
+        {
+          had_err = -1;
+        } else
+        {
+          GtWord seqnum_input;
+          while (fscanf(fpin,GT_WD,&seqnum_input) == 1)
+          {
+            if (seqnum_input < 0 ||
+                (!arguments->seqnum_from_0 && seqnum_input == 0) ||
+                (GtUword) seqnum_input > maxseqnum)
+            {
+              gt_error_set(err, "sequence number '" GT_WD "' is not in range "
+                                "[%d," GT_WU "]",
+                                 seqnum_input,
+                                 arguments->seqnum_from_0 ? 0 : 1,
+                                 maxseqnum);
+              had_err = -1;
+            }
+            if (!had_err)
+            {
+              gt_bioseq_show_sequence_as_fasta(bioseq,
+                                           arguments->seqnum_from_0
+                                             ? (GtUword) seqnum_input
+                                             : (GtUword) seqnum_input - 1,
+                                           arguments->width, arguments->outfp);
+            }
+          }
+          if (strcmp(gt_str_get(arguments->showseqnum_inputfile),"-") == 0)
+          {
+            fclose(fpin);
+          }
+        }
       }
     }
 
diff --git a/src/tools/gt_seqorder.c b/src/tools/gt_seqorder.c
index f7b17d3..4f1939d 100644
--- a/src/tools/gt_seqorder.c
+++ b/src/tools/gt_seqorder.c
@@ -17,8 +17,11 @@
 
 #include "core/encseq.h"
 #include "core/fasta_separator.h"
+#include "core/qsort_r_api.h"
 #include "core/ma.h"
 #include "core/mathsupport.h"
+#include "core/minmax.h"
+#include "core/parseutils.h"
 #include "core/unused_api.h"
 #include "core/warning_api.h"
 #include "core/xansi_api.h"
@@ -28,7 +31,7 @@
 #include "tools/gt_seqorder.h"
 
 typedef struct {
-  bool invert, sort, revsort, shuffle;
+  bool invert, sort, revsort, shuffle, sorthdr, sorthdrnum;
 } GtSeqorderArguments;
 
 static void* gt_seqorder_arguments_new(void)
@@ -48,11 +51,13 @@ static GtOptionParser* gt_seqorder_option_parser_new(void *tool_arguments)
 {
   GtSeqorderArguments *arguments = tool_arguments;
   GtOptionParser *op;
-  GtOption *invert_option, *sort_option, *revsort_option, *shuffle_option;
+  GtOption *invert_option, *sort_option, *sorthdr_option, *sorthdrnum_option,
+           *revsort_option, *shuffle_option;
   gt_assert(arguments);
 
   /* init */
-  op = gt_option_parser_new("(-invert|-sort|-revsort|-shuffle) encseq",
+  op = gt_option_parser_new("(-invert|-sort|-revsort|-shuffle|-sorthdr"
+                            "|-sorthdrnum) encseq",
                             "Output sequences as MultiFasta in specified "
                             "order.");
 
@@ -77,6 +82,27 @@ static GtOptionParser* gt_seqorder_option_parser_new(void *tool_arguments)
   gt_option_exclude(revsort_option, sort_option);
   gt_option_parser_add_option(op, revsort_option);
 
+  /* -sorthdr */
+  sorthdr_option = gt_option_new_bool("sorthdr",
+                                      "sort sequences lexicographically "
+                                      "by sequence header",
+                                      &arguments->sorthdr, false);
+  gt_option_exclude(sorthdr_option, sort_option);
+  gt_option_exclude(sorthdr_option, invert_option);
+  gt_option_exclude(sorthdr_option, revsort_option);
+  gt_option_parser_add_option(op, sorthdr_option);
+
+    /* -sorthdrnum */
+  sorthdrnum_option = gt_option_new_bool("sorthdrnum",
+                                         "sort sequences numerically "
+                                         "by sequence header",
+                                         &arguments->sorthdrnum, false);
+  gt_option_exclude(sorthdrnum_option, sort_option);
+  gt_option_exclude(sorthdrnum_option, invert_option);
+  gt_option_exclude(sorthdrnum_option, revsort_option);
+  gt_option_exclude(sorthdrnum_option, sorthdr_option);
+  gt_option_parser_add_option(op, sorthdrnum_option);
+
   /* -shuffle */
   shuffle_option = gt_option_new_bool("shuffle", "shuffle sequences "
                                       "pseudo-randomly",
@@ -101,10 +127,11 @@ static int gt_seqorder_arguments_check(GT_UNUSED int rest_argc,
   gt_assert(arguments != NULL);
 
   if (!(arguments->invert || arguments->sort || arguments->revsort ||
-        arguments->shuffle))
+        arguments->shuffle || arguments->sorthdr || arguments->sorthdrnum))
   {
     had_err = 1;
-    gt_error_set(err, "order option needed: -invert|-sort|-revsort|-shuffle");
+    gt_error_set(err, "order option needed: -invert|-sort|-revsort|-shuffle|"
+                      "-sorthdr|-sorthdrnum");
   }
 
   return had_err;
@@ -138,6 +165,62 @@ static void gt_seqorder_get_shuffled_seqnums(GtUword nofseqs,
   }
 }
 
+static int seqorder_str_compare_lex(const void *v1, const void *v2, void *data)
+{
+  GtUword n1 = *(GtUword*) v1,
+          n2 = *(GtUword*) v2,
+          desclen1, desclen2;
+  const char *desc1, *desc2;
+  int rval = 0;
+  desc1 = gt_encseq_description((GtEncseq*) data, &desclen1, n1);
+  desc2 = gt_encseq_description((GtEncseq*) data, &desclen2, n2);
+  rval = strncmp(desc1, desc2, MIN(desclen1, desclen2) * sizeof (char));
+  if (rval == 0)
+    rval = desclen1-desclen2;
+  return rval;
+}
+
+static int seqorder_str_compare_num(const void *v1, const void *v2, void *data)
+{
+  GtUword n1 = *(GtUword*) v1,
+          n2 = *(GtUword*) v2,
+          desclen1, desclen2,
+          anum, bnum;
+  int arval, brval, rval = 0;
+  const char *desc1, *desc2;
+  char buf[BUFSIZ];
+  desc1 = gt_encseq_description((GtEncseq*) data, &desclen1, n1);
+  desc2 = gt_encseq_description((GtEncseq*) data, &desclen2, n2);
+  (void) strncpy(buf, desc1, MIN(BUFSIZ, desclen1) * sizeof (char));
+  buf[desclen1] = '\0';
+  arval = gt_parse_uword(&anum, buf);
+  (void) strncpy(buf, desc2, MIN(BUFSIZ, desclen2) * sizeof (char));
+  buf[desclen2] = '\0';
+  brval = gt_parse_uword(&bnum, buf);
+  if (arval == 0 && brval == 0)
+    rval = anum-bnum;
+  else if (arval == 0)
+    return -1;
+  else if (brval == 0)
+    return 1;
+  else
+    rval = 0;
+  return rval;
+}
+
+static void gt_seqorder_get_hdrsorted_seqnums(const GtEncseq *encseq,
+                                              GtUword *seqnums,
+                                              GtCompareWithData cmpfunc)
+{
+  GtUword i;
+  gt_assert(encseq != NULL);
+
+  for (i = 0UL; i < gt_encseq_num_of_sequences(encseq); i++)
+    seqnums[i] = i;
+  (void) gt_qsort_r(seqnums, gt_encseq_num_of_sequences(encseq),
+                    sizeof (GtUword), (void*) encseq, cmpfunc);
+}
+
 static void gt_seqorder_output(GtUword seqnum, GtEncseq *encseq)
 {
   GtEncseqReader *esr;
@@ -203,6 +286,26 @@ static int gt_seqorder_runner(GT_UNUSED int argc,
         gt_seqorder_output(seqnums[i], encseq);
       gt_free(seqnums);
     }
+    else if (arguments->sorthdr)
+    {
+      GtUword *seqnums;
+      seqnums = gt_malloc(sizeof (GtUword) * nofseqs);
+      gt_seqorder_get_hdrsorted_seqnums(encseq, seqnums,
+                                        seqorder_str_compare_lex);
+      for (i = 0; i < nofseqs; i++)
+        gt_seqorder_output(seqnums[i], encseq);
+      gt_free(seqnums);
+    }
+    else if (arguments->sorthdrnum)
+    {
+      GtUword *seqnums;
+      seqnums = gt_malloc(sizeof (GtUword) * nofseqs);
+      gt_seqorder_get_hdrsorted_seqnums(encseq, seqnums,
+                                        seqorder_str_compare_num);
+      for (i = 0; i < nofseqs; i++)
+        gt_seqorder_output(seqnums[i], encseq);
+      gt_free(seqnums);
+    }
     else
     {
       GtSuffixsortspace *suffixsortspace;
diff --git a/src/tools/gt_show_seedext.c b/src/tools/gt_show_seedext.c
index 0aee081..7576015 100644
--- a/src/tools/gt_show_seedext.c
+++ b/src/tools/gt_show_seedext.c
@@ -1,6 +1,6 @@
 /*
   Copyright (c) 2015 Stefan Kurtz <kurtz at zbh.uni-hamburg.de>
-  Copyright (c) 2015 Joerg Winkler <joerg.winkler at studium.uni-hamburg.de>
+  Copyright (c) 2015 Joerg Winkler <j.winkler at posteo.de>
   Copyright (c) 2015 Center for Bioinformatics, University of Hamburg
 
   Permission to use, copy, modify, and distribute this software for any
@@ -37,6 +37,7 @@ typedef struct
 {
   bool show_alignment,
        seed_display,
+       seqlength_display,
        relax_polish,
        sortmatches,
        showeoplist,
@@ -89,6 +90,15 @@ static GtOptionParser* gt_show_seedext_option_parser_new(void *tool_arguments)
                               false);
   gt_option_parser_add_option(op, option);
 
+  /* -seqlength-display */
+  option = gt_option_new_bool("seqlength-display",
+                              "Display length of sequences in which "
+                              "the two match-instances occur",
+                              &arguments->seqlength_display,
+                              false);
+  gt_option_is_development_option(option);
+  gt_option_parser_add_option(op, option);
+
   /* -seed-extend */
   op_seed_extend = gt_option_new_bool("seed-extend",
                               "read the seeds from the # seed: -lines and "
@@ -205,15 +215,15 @@ static void gt_show_seed_extend_plain(GtSequencepairbuffer *seqpairbuf,
     gt_assert(query_readmode == GT_READMODE_REVCOMPL);
     gt_inplace_reverse_complement(seqpairbuf->b_sequence,querylen);
   }
-  edist = gt_computelinearspace_generic(linspace_spacemanager,
-                                        linspace_scorehandler,
-                                        alignment,
-                                        seqpairbuf->a_sequence,
-                                        0,
-                                        dblen,
-                                        seqpairbuf->b_sequence,
-                                        0,
-                                        querylen);
+  edist = gt_linearalign_compute_generic(linspace_spacemanager,
+                                         linspace_scorehandler,
+                                         alignment,
+                                         seqpairbuf->a_sequence,
+                                         0,
+                                         dblen,
+                                         seqpairbuf->b_sequence,
+                                         0,
+                                         querylen);
   if (edist < distance)
   {
     printf("# edist=" GT_WU " (smaller by " GT_WU ")\n",edist,distance - edist);
@@ -241,8 +251,7 @@ static void gt_show_seed_extend_plain(GtSequencepairbuffer *seqpairbuf,
 
 static void gt_show_seed_extend_encseq(GtQuerymatch *querymatchptr,
                                        const GtEncseq *aencseq,
-                                       const GtEncseq *bencseq,
-                                       GtUword query_totallength)
+                                       const GtEncseq *bencseq)
 {
   GtSeqorEncseq bseqorencseq;
 
@@ -251,7 +260,6 @@ static void gt_show_seed_extend_encseq(GtQuerymatch *querymatchptr,
   if (gt_querymatch_process(querymatchptr,
                             aencseq,
                             &bseqorencseq,
-                            query_totallength,
                             false) != 0)
   {
     gt_querymatch_prettyprint(querymatchptr);
@@ -295,8 +303,11 @@ static int gt_show_seedext_runner(GT_UNUSED int argc,
     GtUchar *alignment_show_buffer
       = arguments->show_alignment ? gt_alignment_buffer_new(alignmentwidth)
                                   : NULL;
-    GtLinspaceManagement *linspace_spacemanager = gt_linspaceManagement_new();
+    GtLinspaceManagement *linspace_spacemanager = gt_linspace_management_new();
     GtScoreHandler *linspace_scorehandler = gt_scorehandler_new(0,1,0,1);;
+    const unsigned int display_flag
+      = gt_querymatch_bool2display_flag(arguments->seed_display,
+                                        arguments->seqlength_display);
 
     if (!arguments->relax_polish)
     {
@@ -310,10 +321,7 @@ static int gt_show_seedext_runner(GT_UNUSED int argc,
                           matchscore_bias,
                           gt_seedextend_match_iterator_history_size(semi));
     }
-    if (arguments->seed_display)
-    {
-      gt_seedextend_match_iterator_seed_display_set(semi);
-    }
+    gt_seedextend_match_iterator_display_set(semi,display_flag);
     if (arguments->show_alignment || arguments->showeoplist)
     {
       gt_seedextend_match_iterator_querymatchoutoptions_set(semi,
@@ -321,7 +329,7 @@ static int gt_show_seedext_runner(GT_UNUSED int argc,
                                                        arguments->showeoplist,
                                                        alignmentwidth,
                                                        !arguments->relax_polish,
-                                                       arguments->seed_display);
+                                                       display_flag);
     }
     if (arguments->seed_extend)
     {
@@ -382,13 +390,7 @@ static int gt_show_seedext_runner(GT_UNUSED int argc,
           }
         } else
         {
-          const GtUword query_totallength
-            = gt_encseq_seqlength(bencseq,
-                                  gt_querymatch_queryseqnum(querymatchptr));
-          gt_show_seed_extend_encseq(querymatchptr,
-                                     aencseq,
-                                     bencseq,
-                                     query_totallength);
+          gt_show_seed_extend_encseq(querymatchptr, aencseq, bencseq);
         }
       } else
       {
@@ -410,7 +412,7 @@ static int gt_show_seedext_runner(GT_UNUSED int argc,
     gt_greedy_extend_matchinfo_delete(greedyextendmatchinfo);
     gt_free(alignment_show_buffer);
     gt_scorehandler_delete(linspace_scorehandler);
-    gt_linspaceManagement_delete(linspace_spacemanager);
+    gt_linspace_management_delete(linspace_spacemanager);
     gt_free(seqpairbuf.a_sequence);
     gt_free(seqpairbuf.b_sequence);
     gt_alignment_delete(alignment);
diff --git a/src/tools/gt_show_seedext.h b/src/tools/gt_show_seedext.h
index 35dacde..d47b798 100644
--- a/src/tools/gt_show_seedext.h
+++ b/src/tools/gt_show_seedext.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (c) 2015 Joerg Winkler <joerg.winkler at studium.uni-hamburg.de>
+  Copyright (c) 2015 Joerg Winkler <j.winkler at posteo.de>
   Copyright (c) 2015 Center for Bioinformatics, University of Hamburg
 
   Permission to use, copy, modify, and distribute this software for any
diff --git a/src/tools/gt_speck.c b/src/tools/gt_speck.c
index 2ec2b87..f043051 100644
--- a/src/tools/gt_speck.c
+++ b/src/tools/gt_speck.c
@@ -1,6 +1,6 @@
 /*
-  Copyright (c) 2014-2015 Sascha Steinbiss <ss34 at sanger.ac.uk>
-  Copyright (c) 2014-2015 Genome Research Ltd.
+  Copyright (c) 2014-2016 Sascha Steinbiss <ss34 at sanger.ac.uk>
+  Copyright (c) 2014-2016 Genome Research Ltd.
 
   Permission to use, copy, modify, and distribute this software for any
   purpose with or without fee is hereby granted, provided that the above
@@ -114,7 +114,8 @@ static GtOptionParser* gt_speck_option_parser_new(void *tool_arguments)
 
   /* -format */
   option = gt_option_new_string("output", "output format\n"
-                                "choose from: json, text, html, statsonly",
+                                "choose from: [json, text, html, statsonly, "
+                                "tabular] or give path to output driver",
                                 arguments->format, "text");
   gt_option_parser_add_option(op, option);
 
@@ -301,6 +302,11 @@ static int gt_speck_runner(int argc, const char **argv, int parsed_args,
                                                 gt_str_get(runtime), err);
       gt_str_delete(runtime);
     }
+
+    if (!had_err && (gt_spec_results_has_runtime_errors(res)
+          || gt_spec_results_has_failures(res))) {
+      had_err = -2;
+    }
   }
 
   /* free */
diff --git a/testdata/gt_encseq_col_test1.fasta b/testdata/gt_encseq_col_test1.fasta
new file mode 100644
index 0000000..5c0c47e
--- /dev/null
+++ b/testdata/gt_encseq_col_test1.fasta
@@ -0,0 +1,428 @@
+>test1
+GTTTCCTGTGAGGTACGAACTGAATTCTTATATATTATTCTTATACACTGCCGGTCACGG
+TAGCCGAGCGGTCTAAGGCATGTACTGTCTTCGCTCGCTTGGAAGCCGGGATCGTGGGTT
+CGAATCCCACTCAGGGCATGGATGTTTGGTGTGCGTTTTCTCTGTTTGTGTACAGGTAGA
+GGTCTTGCGAGGAGCTAATCACCCGCCCAAGGAGTCCTACCGAATGTTTAAGATCTAGTA
+AACCGAAGAGAAACGGAGAGTTTCATGGAGGTAGGCCTAAGCCCAAATTGGGGCTGTAGC
+GCCAAAGGAAAGAAAAAAAAAACGTTTTTGAGGACACGTTACACCTGGGGTAGGCAACCT
+TACGTAGTGATGAATTAGTTAAGCACAGGGACAATTTAAGCTCTATTTAGCCGCTATGCC
+CCACATATATGCTTAACTACAGGAAAATATAGAGATAAATATTAAATAATTACGTAAATG
+TCTTAGTAAGTCCTTTGGAATTATGAATACTTAACTATCTTACTAACGAGAGCCGGGATA
+GCTCAGTCGGTATAGTATCGGGTTACGGCCAGGACGGCTGAGGTCCGATTTTCTGCAGGG
+ACAAGGATTTTCCTCTTCTCTGTAGCGTCCAGACGGACTCTGCCCCCTCCTACCCCAGCC
+TCTTATTCAAGTGGGTACCGGGGGCTCTTTCTTAGGGGGTAAAGCGGCCAGGACATGAAG
+CTGTCTGCTCAATTCCAACTACTGCCCAGATCAATAATGNCGCTGATAAAGAGGAGAAGT
+GTCAGATTTCCCGTTGAATTTTAACGGACATATTACTATTAGTCACAACATAAAATACTA
+TTCTTATAAAATTATGTAATTAGTTTATATATAAATTATTTATATATTTCATAAATACAT
+AACTTCTGTTCGAAATATGCGGATAGACGAATAGGTCCTAGCTTCTCGTTAACGAATTTA
+CTTCGTAAATACACGTACTCTGTACGGAAAGCACAAAACCTGTCGTAAAACACATGCGAC
+ACCATTACACAGTAATGTGGGCTTTCATCAACAATACATGAAATAATGTAGTATAAATGA
+GAGAGAAAAGAAATGCATACAGCATTTTGGTTAGAAAACCCGAAGGAAAGAGACCACTCG
+GAAGACCTAGACTACAAGGGAGAATAATACAGATAAATTAATCCCTGTGCTTAAATAATT
+AAACTCCACGCCATGAAGACGTATGGGGGAGTGGAGATAACAGCTTAATAATTTTTGACC
+TCGGCTTTAGGTGGAGGAGAATGATTAGATTTACGCTGCGGCTGCTTAGCCCCCGGGAGA
+AGAACTCAAGTTAGCCATTGGATTAGAGACTGGGCGAACCACAGAGCCGGTCTGGGAGCT
+GTGAAGTAGACAAAGTCTCTTTCCCTCGCAGGGAATTTAACCACCGTCTTTCAGTCCGTA
+GTCCGTCGCTATTCCGACCGAAATATCCTGACTCCCAGATAGGAGGATAGCACCAGGATT
+TACGTTAAGGATACGGCTTGGGTGGTGATGAACTTAATTATTATGGCTCAGGATACGGAT
+CAATATCGGGCTTTTGTGAACATGGTAATGAAGATTCGGGACTCTGTAAAACGCAGAGAA
+TTTCATGAAGAGATGAGCGATCCTTGGCCCTTCAAGAAGGATAAATCTCCAAAAAGTTAT
+TAGTCTTATAATTCTCAGTTGTTTCCTCAAAATTGTTATATACAGAATTTGTATTATTTT
+TTCCTTGGCACTACAGCCCCAGTGGGCCTAGGCCTACCGCCATGAACTTCTCCGTTCACT
+TCGGTTTTTCTAGATATTACACATTAGGTAGGACTCCTTGGGAGGGTGATCAGCTCGTCG
+CAAGGCCTCTACCTGTACACAAACACAGAAAAACGCACACATACAAACTAAACATCCATG
+CCCTGAGTGGGATTCGAGCCCACGATCCCGGTTTCCAAGCGAGCGAAGACAGTACATGCC
+TTAGACCGCTCGGCTACCGTGACCGGCAGTGTATAAGAATAATATATAAGAATTCAGTTC
+GTACCTCACAGGAAACAGATCCGAACCCACGATCCCGGTTTCCAAGCGAGCGAAGACAGT
+ACATGCCTTAGACCGCTCGGCTACCGTGACCGGCAGTGTATAAGAATAATATATAAGAAT
+TCAGTTCGTACCTCACAGGAAACAGATCCGAACCCACGATCCCGGCTTCCGAGCGAGCGA
+AGACAGTGCATGCCTTAGACCGCTCGGCTACTGTGACCGGCAGTGTATAAGAATAATATA
+TAAGAATTCAGTTCGTACCTCACAGGAAACAGATCCGAACTCACGATCCCGGCTTCCGAG
+CGACTGAAGACAGTGCATGCCTTAAACCGCTCGGCTACCGTGACCGGCAGTGTATAAGAA
+TAATATATAAGAATTCAGTCCGTACCTCACAGGAAACAGATCCGAACCCACGATCCCGGC
+TTCCGAGCGAGCGAAGACAGCGCATGCCTTACACCGCTCGGCTACCGTGACCGGCGAATT
+CGTATTCAACATTCCTAAATTTGCAAACCAGGGAGTGCACACACGATTCATATGGCTCAG
+TGACGGGAACCAGTGGCCGATTCTAGTAACAGTGCAATGAACTTTCACGTTCCATTAACT
+TCCGGGGTATCCTGAGTAGCCGAGTAACTTCTTCCTCTTCTTCTTCTATTCCTGTTGCTC
+CCAATTGGAGCATAGGGCATCCTTGAAACACTTCATTTCTCTTGAGTTTCTTAATGTAAG
+ACTATCGGTAGGACTCCTTGGACGGGGGATCAGCCCGTCACAAGGCCGCTACCTCACATA
+AAACCATAATAAACACAAATAGACATCCATGCATTGAGTGAGATTGGAACCCACGATCCC
+AGTGTTGGAGTGAGTGAAGATATTTCATGCCTTAAAACGCGCGGGCATTGTGATCGACGA
+GCAACTACTAGCTTCTCAAAAGGACTCCGCTATATGCAGTTATTTTAGTCGTAAAGATCA
+GGGAAAAATCCCGTATTTCAGTAATTTAAGGTTTTCCTACATGTTCTTCTGGTTCGCTCG
+CGGTTTTTTTCTTGTCTTATACCCTGAAGATGGAGGCGATACGTTCCTCCGAAACGTCGG
+TTAACACAATTTATACATGGCTTCCTTCATAGTCACCGCCGTGAAAACCTCAACTCTTAC
+ATGAATCATTTTGGTTTATCCCACTTTAATCCTTCATTCACATCTGTTTCAGAATAAACA
+TTTTGATCACGAATGGGTTCAAATTTTTTGATGATGACGAATATTTTTATTTGGCGCATG
+GAATAATATATTTTAAAGCCTATTTCAGACAGCGTAGTATTCATAAAGCATGTCATATCA
+TAGCGGACAACATGTGGTGGATATTGGGGTGCAAGTTGTGACAACGCAACTGCTTTCAGC
+TGGGGGTTGGGAGGGGTGGGGTAAAACCACATTTAATCGGATTACTCAGCAGCTATTCAA
+TCAGTGCCCATGTTTCACATTCCGTCATCATGTTTGTGGGGTATGTATCAGAAAGGTTAC
+TGAAGCTGGGAAAAAAAGTAATACAGAATCTGAAGCTTCTGTGATGAAGGTTTGTCAGGT
+CGTGACGTTTTCCACATTATTACACACTCTGCTCTATATATTTCGAAACGTCCGAAGACC
+TCTCTGAGACACACAAAGCATAAAGTCCCGGTTACGTGGACAGTAGGCCGCGCCATAGCT
+CAAGCGGTTAGTCGCTGGCTTCCCACAGCGACGGCCCGGGTTCGATTCCTGGTCTGGTCA
+AGTGGGATTTGTGGTGGACGAAGTGGCGCTGGGGCAGGTTTTCTCCGAGTACTTCGGTTT
+CCCCTGCTAATCTTCATTCCACCAATTGCTTTACAATCACCCTCACTTTTCATCTTGGGC
+TGGTACAATAGGCCAGAAGTGGCCGCAGTACAAGGGACTTAGTCCCACCCCACTAGCAAT
+AAAAAAATACGTGGACGATTCTCCTGATTCGTATCAGAAATATAGGAACAATGAGTTTGA
+ACACCTCAGTACGAGTGTGCACCTCCAAACCACGGATTTTTTTTATTACTAGTGGGGTGG
+GACGAAGTCCCTTACACTGCGGCCAGAGGGAGACATGTAGTCGGAGATAGATAGTTGGGG
+AGTTGCAGATAGACAATTAAAGTGTTTTTTTATAAATATTATTTTAAGTCTTATGTGGAA
+ATATTTAAAAACTTTAAAGTTTAAAATTTTTATGTTTTAAATTTAAAACATTCAATAACG
+AGACACACAGAGAAGAACTCAACAGGAAGAAGCATGACGCTCTAACTACAAGACGCATGC
+GCATCAGAGGGACCTACACATGTAATAGCAGCAACAATAGAAAGCAGCAGTTTCCCCATT
+TGATATATTCTAACACTGACGATGGTCATATTGGCCGAAACATGTTTGGCTCTTAAATTT
+TTTAATTTAAAACTTTTAAGTTAATAAATAATTACACATAAGACTGTACGAGTAAATAAG
+ATTTATAAGAAAATGGAAGAGTGCAACAGGATGCTGCAATACAATAATAGTTACAGTGAC
+AGAGCGAGAGAGGTCAGCGTGGGGAACACCCGCCATGTTTCCATTTTGAAGTTAGTTTAT
+GAGTTAGGAACTAGAATTTCAATTAGTGAAGCCCTAAGGCGACTTCGTCTTTCGTCTTTC
+AAATGCTTCCCTAGATGCGTAAAGGTGAAACTCGAGACAGAAAAACTTTTCTTTGTCCCT
+TTGCATCTTCCTGTAAGACAACAGGTACAAAATTATACAGGATGATTCTAAATTACTGTC
+GGGTTTCCATGGTCCACAATTTTCAAACCTCAAAGAATAAAATAGAACTGATTACGAAAT
+ATGAAAACACAACTCTAAAAGTTTTATTATTTTTAGAATTATTACTGCAGAACGCTAAAC
+AGTTTCAATATGCGCGTCTTTTTTTTTTATCTTAAGATGTCCAAATGATGGCAAAAGCTG
+CATTTAGCAAGAAGAAGAATCTTTTTACCAGCAAATTGGACTTAAATTTGAGGAAGAAAC
+TAGTGAAATTCTACATTTTTAGCATAGCTCTGTATGGGGCTGAAACATGGACACTTAGGG
+CAGTAGATCAGAAACATCTGGAAAGTTTCGAAATGTGGTGTTGGAGAAGGATGGAGAAGA
+TCAGTTGGACCGATTATGTGAGAAATGAAGAAGTGTTAATTAGAGTCAGTGAGCAGAGGA
+ATATCCTACACGAAATAAGAAAACGGAAGGCTAACTGGATTGGTCATGTTTTACACAGAA
+ACTGACTTCTAAAAGAAGAAGTTACTGAAGGAAAGAAAGAGGGGCGGATAGAAGTGACAA
+GAAGACGAGGAAGAAGACGTAAGAAGATGCTGGATGACCTTGGGGACAGAAGAGGATACT
+GTCATTTGAAGGAGAAAGCTCTAGATCGCATTAAATGGAGGAATTGTTTTGGAAGAGACT
+GTGGACCTTTCGTATTGACAGATTACTGATGATGATGATGATGATGATGTCCAAATGGTA
+TTCACTTTCTCTCCAAATGTTCTATAGCATTTGCTGTGCAACTTTTTCGATTGCAGAAAT
+AATTTGGAACCTCAGATAATAATTTAGAATTACCTGGTACTGCTCACGAATCGAGGTTCT
+CACAGCTGTAAATTATGAAGACTACTGTATTGTATAATGGGTCGCCACGTTGTCTGGTAC
+AAAGTTATCGACGTTTCGTAAGAACCTGATGTCTCTACTCTGAAGATAGAGGTAGCATGC
+ATCTGAAAAATACAGTAAATACAGTAATTAGTAAACTACACAACAACACACCTGAGGAGG
+CAAAGTTATGTTGGCCTATATTTCTGGCGGTGACAATGAATGTAGTTGAGGTTAAGGCTT
+CACGTTCCGACAGGGTTTACCATCAGACTCTGACAGTCGCTCAGCTAGTTAAGAAAATCC
+ATGCTTTTTCTGCATTTCTTATTTTGCTCTCATGCGCACACCATATTGTGATCCGCAGCA
+ATTTCCCGTTGAAAACTTATGCCCTTTTTCTTTTAGAGGGTGTTGATCCTGTAAAGGCAC
+AGGCCTTGATATGAACCGATTTAGAATCAATACAAATATCTAAAAGGACTCAACACTTTC
+AGGATTCGTTCTGCATCGAAACAGACAAGAGATTCTAATGCGCGACAGGTGAATATGGAT
+ATTGGAAGGTCATATCTAGGCAGCTAATCTAGGAACTTAACAAAGTCACCAGTGATTTGC
+ATCAAATTTACATTGAAATGCTGTTCAGCTTGAACCGGTAATATTGAGTTCCGAGTGAGG
+CTTCAAAATTCTCTGCTCAGTTGTTTGGTTTAATCTAATTTCCCTAGAGACGTGGAGAAC
+TGGCCTCGCAAGGAAATTCAGTAATCTAGCTTATCGTGTAGTCTACTCACAAGTCCTCAC
+AATTAAACCGTAATTAAGCTATACACTGTTCATTGTTAGTTGAATATTTAATATGTACGT
+CTGGGAATTTTGTCTGTACCCCCCCCCCCTTCATCAAGTAAATGTCATTAGACATATAAA
+TTTTTACTGCGTATTTATTTTGGTTGTCAATAACAGTGTTCGAGATTAAACTCAAGATTC
+TGCAAGTGTTACATTTGTAATACATACACGACGTTTCGGAAATTTTGCTCAACTTCCCTT
+TTTAGGCTACTAGTTGCCACTCTACTGACAGATTATCCTTTTATGGTACATGAGATATTT
+ATATCTGCGGTAGGGATCCAGTTGTTTGGGCAGTAAATGTGTATATTTAATACAGACGTT
+TCGAGACGTTTTATCTACTCGCATATTAAGGTTATCCTTGTGATTAATAATAGTTTTTCT
+TCTTGTCTCATATGTTATTAATAGCAGTTGGAATCGAGCACGAACTTTATAAGCAAATTA
+TGTAGATCCAAATGTACGAGTACACGGTAGTGGCCAGAGGAAAAGTCAGTCACAGGAAGT
+GTAAGGGGTCAGACCTAGGACAGTCCAGCTGACTTAAATGCGGTTTCATAACAGTTACGT
+ATTGTAAGGCATAAGCTGCTGCACAAGCCTGCATTGATAGGAAATCTCTGTATCCCCTTA
+TATAAACGCTACTTAGTACAGTGCAGTGCAGTGCAGTGACACAGGGCCTACAGTGACATG
+GACGCCGTGACAGCGCGGATATACTCGTGCTGAAACTGCGGTGCAACAAACGTAGCGCCT
+ACATAGAGAGGCCGACCCCTGTACAGTGCAGTGCAGTGCAGTGACACAGAGCCCACAGTG
+ACTTGGACGCCGTGACAGCGCTGATATACTCGTGCTGAAACTACGGTGCAACAAACGTGG
+CGCCTATATAGAGAGAAAATGTGAGAGCCTCGACGTCTCACTACCATATGGGTCTCCATG
+GCCTGTTACAAGGATAATTTTACCTTTTAACTAACACCGTTCAGAGTATCACAATCCCTG
+AATTCTGAGACAACATGTTTTTGGGGTGTAAAACAAGTCGACACGGACTGAGTCCTGGTT
+TATTTATCGAAGCTTAAGGCAGCCCAGACTGTACAGTTGAATTGTATTATATCCCCTGAA
+GAATAAGACGAGTATATTTCTCTGAAACTTTCGTAACAACCTACAGACTACATGGTGTCA
+TAACCCAGGAGATCACAACATGAAGAGTGTGATGTTGTCAAGTCAGTGTGAGTAAAAACA
+GGCCTACACAGATAGTCCTTTGTCTTACTAACAGTTATGTTCCTGAAGAGAGTTCGTGAA
+GTAAAATTTCGTAATGGTAATCTCTCTTTCCCATGAGCACAATGAAGTTAGCTTCCCGGG
+CGACCAAAGAATGATAAACACAAGAAGTTCTGGGAAGAACTAATATCCTACTTCCTTTTC
+ATAGGACATAGACAGCATAGAAAACGAAGAAAGGGGAACGCAGAGACACACAGACAACAA
+AACGGTTTCAAAATCTTCCTAACGAAGGGGATACATAGACAGACAGCAACGATATTTCAT
+ATTCCCACTTTTATTATTTCAGAATAAAGAAAGTAAGCTAAAAATAGGAATCACGAATTT
+GATTATCTGAAAGGAAACATGTACTACACATATATTGAATTATCCTACTGATTTGTCTGT
+AAAATCTGTATGCGCCTGAGAGCCGGCGGCGCCACGGTCGCTGTGAATCGCAGAGTCGTG
+GAACAGCCAACAAAAGTAAGAACTTTCCTGTAGATATATACATAGACAGTTACATGGGTA
+GGTTGTTGGACAAACAACGAGTGAACCTCATGCAGTCTGGACTTTGCAGTATCATAAAGC
+CCAGCAACCTCTCACCTCTGGAATGTCACAATGTCAGGTTTCAAAAGCTTTACTCGTTAC
+ATTCTAACCCGTTCGCATGCCCCTCATCAAAGGAGCTCTACAGGGAAGTAGGACATTATT
+CGGGTGTTCCGGGTAAGAGACACATGGAGCACTAAGTTATTTATCGGACCGAAATGACTG
+CTCCCCACTTTGCTTAATTAAATCTAAACATCAGAATGTCATATACAGACTTAATAAATT
+AATGATCTATCTTACAGCCATTGGCTACGGGCTGGCCGGACGAGGGGTCGAAGTTCGAGT
+CCCCGTAGGGGCAAGATTTTTCTCCTCTCCAGATTGTCCGAACAGTTTCCTAGGCCCACC
+AACCTGCTATGTAGTGGCTACCGGGTGTTCTTTCGCTGGAAAGCGGGGGTGGGGGTGGGG
+AGTGGGGGGTGTTTGAAGCCGCCAAAAATGAAGTTTACCGGTGACCTCCAACTTGTGCAA
+CGTGGATCTGATTAGTTAGTTAAGCATAAGGCAGCGCCATAGCTCAAGCGGTTAGTCGCT
+GACTTCCCACCGCGGCGGCCCGGGTTCGATCTCGAGTCTGGTCAAGTGGGATTTGTGGTG
+GACAAAGTAGCGCTGGGGTGGGTTTTCTCCGAGTACTTCGGTTTCCCCTGCCAATCTTTA
+TTCCACCAATTGCTACACAATCACCCTCACCTATCATCTGGGGCTGGTACAATAGGCCAG
+AAGTGGCCGCAGTACAAGGGACTTAGTCCCACCCCACTAGCAATAAAAGAACATTTCAGA
+GCTAAACTGGATTAGTTTAATGTTATCAAGCCTGAATTCTAAAACAACGTACATACACAG
+TAAATAAAAAATAAAAGAAACTCCGTGGTCCATAGTCCCCAAGCGAACTATACCGGCCAA
+GCGACCGCCACTTGTCGGCGAAATTAGTGCCAACTTTTGCGGATAGAGGGTGTCGCGTGG
+TCAGGGCAAAGGATCCTCACGGCCGATTATTTCGCTTTTATAGACCGGAGCCGCTATTTC
+CTTATAATAGCTCATCAGTTATCCTCACGAGGTTGAGTGGACCCCGTTCCAGACCCACTA
+CTTCTCAGAAAATCTGGTATCGACGGGAATCGAACCCGGGACCTCTGGATTTATTGACAG
+GAACTCTGACCACTAGACCACAGAAGCGGACTATACACAGTAAACATAACATGCGAAATA
+TGGCAGAAGAGATATTTCATACGGTCACATGACCAAACAGTTCTTCGCTTACTGAACTTA
+CTTTTACACGAATGAAACTAAATAATAATAGAATCATCAAATAAATGAAGATAATATGAC
+AGGTATGTAGCACGCACAGCTGGAAACTGAAACATTTGAAGACATAGACTTAGATGGTGA
+CGAATATTAAAATAACCGGTCACGGTAGCCGAGCGGTCTAAGGCATGCACTGTCTTCGCT
+CACTCGGAAGCAGGGATCGTGGGTTCGGATCTGTTTCCTGTGAGGTACGAACTGATTTCT
+TATATATTATTCTTATACACTGCGGGTCACGGTAGCCGAGCGGTCTAAGGCATGCACTGT
+CTTCGCTCGCTCGGAAgccgggatcgtgggttcggatcccactcaggacatggatgttNN
+NNNNNctgtgaggtacgaactgaattcttatatattattcttatacactgccgttcacgg
+tagccgagcggtctaaggcatgcactgtcttcgctcgctaGAAGCCGGGATCGTGGGTTC
+GGATCCCACTCAGGACATGGATGTTTGGTGTGTGTATGCGTTTCTTCTGTGTTT
+>test2
+TCCGTAGTCTAGGGGTAACGTTCCCACCTCATGACTCAAGGTACGCGGGTTCAAACCCGG
+CGGAGGTCGTGGAATTTTTAAGGGCGGAAAAAATCAGGGAACAAGTCCTTCGGGAGGGAC
+TTTACGGCACGTAAAAGATCCTCATGTCTCTAGGAGACCTCTGAGCAAAATTAGGCAACA
+ATTTCCCGCCCAAGTAGTTTCCAATGCCTCTGGTAGATGGGGGAAATATCAGGTACCGAC
+GGCCGACGTCGTTGGCTGAACGGGGCTTATAGCACGCACGAGTACCGATAGGGTATGGCG
+ACAGTGGAAATTAAAGGGGGACGCACAATGGACCAATAACTGGTCTAAATGCATGGGGAA
+ACCCACCCCCTCTAATTATAATAATAATAATAATAATAATAAAATAATGTCATAAACGTA
+CTACCTCCTTCCATACAAGATCATCTAAACAGTGGATTACTGACAGGAGTGACTAATCAT
+AACCTACACAAAGCTTGTCAACGCTGAGTTCCCCACCTTTTGCTGTTTCTTAAGGCGCGT
+CCACATTACTCGTGCTCGTGCGTCAGAAGCTTACTGCTGCTATCTGTTGTGAAGAAATGG
+AAACCAATTTGGGCGTCCACTTCGTCAGCTCCAGATCCTGATTTTCCGGCAGCAGTAAGC
+TTCTGACGCACGAGCACGAGTAATGTGGACGGACCTTAACTCTCCTAGTGTTTGTCGGTC
+TATCATTATGTCGTTTCCTTGGAAACCAAATGCAAAAGTAACCTCACATTAGGATAGAAC
+TGGATTACGACAACAATAAACGTTAATGTTTCAGTCTGTAATAAAATGTCTTCTCTTACG
+ATTAAAGCTACTTCTAAAATATTATTATCATTATTCTGTGGATTTAACATTCCAGGACTT
+CCAGAAGTTGCAGCTTGCATATTCAACAAAATCATCACTTAACAAGAAGTTCCAGGAAGA
+ACTAATAACCTATTTTCCTTTGTTATGATACGGACTGCATAGAAAACGACTCGTTCAACA
+GTTCTTTTGTTGTGTATATTCGTCTCCGCTGTAATGTTTTTACCGAGTCGTTGCCTAGAA
+ATGGGTCTGGTATATCCTCCCATCTCGCAGTCGTCGCATAGCAACGGCTCTACGTTCTAC
+AGTTTCTTGCTTCTGTCGGGAATCGAAAATCGATTGCTTGGCTGTGCAACCTAACACTTC
+CCTTCATTTATATTTTAGTCTGCCTACTCTTCCAGTGTTTGTCTTACGGGCTTGAAGAGT
+GGCAAAAGAAATTCAGTTCTAACCGTCTCCTGTTCGAAACTTGACCTCCCTAATGAGAAG
+CACGATTGCCAATCACTGGAACGCAGCCTTTAACTATTTATCTAACTCCACAGGATCGAT
+TCCTTCTTCAGAAGTTAGCAGTGCTCCAGTTAATCAAGAATTTCCCAGTATTCTACTGAA
+CCCGAAAGTCCATTACCATGTTCACAAGAGCCCGTTACTGCTCCCTATCCTGAGCCAGAT
+AAATCCAGTCCACACCCTGTAAGATCAATTTTAGGCCACGCCATAGCTCAGGCGGTTAGT
+CGCTGGCTTCCCATTGCGGCGGCCCGGGTTCGATCCCGGGTCTACTCAAGTGGGATTTGT
+GGAGGACAAAGTGGCCCTGGGGCAGGTTTTCTCCGAGGACTTCGGTTTCCCCTGCCAATC
+TTCATTCCACCAATTGCTCCACAATCACCCTCACCTATCATCTGGGGCTTGTACAGTAGG
+CCAGAAGTGGCCGCAGTACAAGGGACTTAGTCCCACCCCACTAGCAATAAAAGATAAATT
+TTAAAGTTTTTAATATCGTGTTAATTTCTATAATGATTGGACCTAGTCTGGCCATGCGTT
+TCTCTAAGATTATGGTCCTCTGGAGTGTGACTTTTATAGTTTGGTACAAATGTACTAAGG
+CGCTGCTGCCTCTATCTTCAGAGTAGAATACGTGACGTCACTTAGAGTGTCGGCTTAGCT
+ACAACGCTCTCGACTTGTATTCAGGATGTGATCGATTAATATCTCGATTAGGACACAGGC
+TCTCCTAAGGTTGTCATGGTTTACTCAGTCACTCCATGCACATACAGGACAATATTTCGG
+TTAGGTTACGATAGGTTACTTCCAAATAACATTCATTTACAGTCCATGAATTCGAAGCTA
+TGTATTCTAGCAAGTGAATGAGTCGTAATCAGTAACTCACAGAATTGAATAAATACACTG
+TCTCGTCCCCAAAACTGAGGTCTTCACGAGGACCCCAGTCCTTAGTTCCTTCATATTTCG
+TTCCTCCATAATCAATCTAATTATATATGAAAGATAACCTACTTGAAGAGATTAGCGAAT
+TCCGAATTTTCGACATCACAATCCCCCTCCCCCCACTTTGGTCTTCATCAAATCTTCGAG
+CCATCCCTTTTATTTCTTAACTGAAATAACGCTAACACCACCATCTTGTATATACGATTA
+ATTATTGTCAACCAACTCTCCGTAGTCTAGGGGTAACGTTCCCACCTCCTGACTCAAGGT
+ACGCGGGTTCAAACCCGGCGGAGGTCGTGGAATTTTTAAGGGCGGAAAAATTCAGGGAAC
+AAGTCTTCCGGGAGGGACTTTAAGCCGTGGGTTCCG
+>test3
+GTTTCCTGTGAGGTACGAACTGAATTCTTATATATTATTCTTATACACTGCCGGTCACGG
+TAGCCGAGCGGTCTAAGGCATGTACTGTCTTCGCTCGCTTGGAAGCCGGGATCGTGGGTT
+CGAATCCCACTCAGGGCATGGATGTTTGGTGTGCGTTTTCTCTGTTTGTGTACAGGTAGA
+GGTCTTGCGAGGAGCTAATCACCCGCCCAAGGAGTCCTACCGAATGTTTAAGATCTAGTA
+AACCGAAGAGAAACGGAGAGTTTCATGGAGGTAGGCCTAAGCCCAAATTGGGGCTGTAGC
+GCCAAAGGAAAGAAAAAAAAAACGTTTTTGAGGACACGTTACACCTGGGGTAGGCAACCT
+TACGTAGTGATGAATTAGTTAAGCACAGGGACAATTTAAGCTCTATTTAGCCGCTATGCC
+CCACATATATGCTTAACTACAGGAAAATATAGAGATAAATATTAAATAATTACGTAAATG
+TCTTAGTAAGTCCTTTGGAATTATGAATACTTAACTATCTTACTAACGAGAGCCGGGATA
+GCTCAGTCGGTATAGTATCGGGTTACGGCCAGGACGGCTGAGGTCCGATTTTCTGCAGGG
+ACAAGGATTTTCCTCTTCTCTGTAGCGTCCAGACGGACTCTGCCCCCTCCTACCCCAGCC
+TCTTATTCAAGTGGGTACCGGGGGCTCTTTCTTAGGGGGTAAAGCGGCCAGGACATGAAG
+CTGTCTGCTCAATTCCAACTACTGCCCAGATCAATAATGNCGCTGATAAAGAGGAGAAGT
+GTCAGATTTCCCGTTGAATTTTAACGGACATATTACTATTAGTCACAACATAAAATACTA
+TTCTTATAAAATTATGTAATTAGTTTATATATAAATTATTTATATATTTCATAAATACAT
+AACTTCTGTTCGAAATATGCGGATAGACGAATAGGTCCTAGCTTCTCGTTAACGAATTTA
+CTTCGTAAATACACGTACTCTGTACGGAAAGCACAAAACCTGTCGTAAAACACATGCGAC
+ACCATTACACAGTAATGTGGGCTTTCATCAACAATACATGAAATAATGTAGTATAAATGA
+GAGAGAAAAGAAATGCATACAGCATTTTGGTTAGAAAACCCGAAGGAAAGAGACCACTCG
+GAAGACCTAGACTACAAGGGAGAATAATACAGATAAATTAATCCCTGTGCTTAAATAATT
+AAACTCCACGCCATGAAGACGTATGGGGGAGTGGAGATAACAGCTTAATAATTTTTGACC
+TCGGCTTTAGGTGGAGGAGAATGATTAGATTTACGCTGCGGCTGCTTAGCCCCCGGGAGA
+AGAACTCAAGTTAGCCATTGGATTAGAGACTGGGCGAACCACAGAGCCGGTCTGGGAGCT
+GTGAAGTAGACAAAGTCTCTTTCCCTCGCAGGGAATTTAACCACCGTCTTTCAGTCCGTA
+GTCCGTCGCTATTCCGACCGAAATATCCTGACTCCCAGATAGGAGGATAGCACCAGGATT
+TACGTTAAGGATACGGCTTGGGTGGTGATGAACTTAATTATTATGGCTCAGGATACGGAT
+CAATATCGGGCTTTTGTGAACATGGTAATGAAGATTCGGGACTCTGTAAAACGCAGAGAA
+TTTCATGAAGAGATGAGCGATCCTTGGCCCTTCAAGAAGGATAAATCTCCAAAAAGTTAT
+TAGTCTTATAATTCTCAGTTGTTTCCTCAAAATTGTTATATACAGAATTTGTATTATTTT
+TTCCTTGGCACTACAGCCCCAGTGGGCCTAGGCCTACCGCCATGAACTTCTCCGTTCACT
+TCGGTTTTTCTAGATATTACACATTAGGTAGGACTCCTTGGGAGGGTGATCAGCTCGTCG
+CAAGGCCTCTACCTGTACACAAACACAGAAAAACGCACACATACAAACTAAACATCCATG
+CCCTGAGTGGGATTCGAGCCCACGATCCCGGTTTCCAAGCGAGCGAAGACAGTACATGCC
+TTAGACCGCTCGGCTACCGTGACCGGCAGTGTATAAGAATAATATATAAGAATTCAGTTC
+GTACCTCACAGGAAACAGATCCGAACCCACGATCCCGGTTTCCAAGCGAGCGAAGACAGT
+ACATGCCTTAGACCGCTCGGCTACCGTGACCGGCAGTGTATAAGAATAATATATAAGAAT
+TCAGTTCGTACCTCACAGGAAACAGATCCGAACCCACGATCCCGGCTTCCGAGCGAGCGA
+AGACAGTGCATGCCTTAGACCGCTCGGCTACTGTGACCGGCAGTGTATAAGAATAATATA
+TAAGAATTCAGTTCGTACCTCACAGGAAACAGATCCGAACTCACGATCCCGGCTTCCGAG
+CGACTGAAGACAGTGCATGCCTTAAACCGCTCGGCTACCGTGACCGGCAGTGTATAAGAA
+TAATATATAAGAATTCAGTCCGTACCTCACAGGAAACAGATCCGAACCCACGATCCCGGC
+TTCCGAGCGAGCGAAGACAGCGCATGCCTTACACCGCTCGGCTACCGTGACCGGCGAATT
+CGTATTCAACATTCCTAAATTTGCAAACCAGGGAGTGCACACACGATTCATATGGCTCAG
+TGACGGGAACCAGTGGCCGATTCTAGTAACAGTGCAATGAACTTTCACGTTCCATTAACT
+TCCGGGGTATCCTGAGTAGCCGAGTAACTTCTTCCTCTTCTTCTTCTATTCCTGTTGCTC
+CCAATTGGAGCATAGGGCATCCTTGAAACACTTCATTTCTCTTGAGTTTCTTAATGTAAG
+ACTATCGGTAGGACTCCTTGGACGGGGGATCAGCCCGTCACAAGGCCGCTACCTCACATA
+AAACCATAATAAACACAAATAGACATCCATGCATTGAGTGAGATTGGAACCCACGATCCC
+AGTGTTGGAGTGAGTGAAGATATTTCATGCCTTAAAACGCGCGGGCATTGTGATCGACGA
+GCAACTACTAGCTTCTCAAAAGGACTCCGCTATATGCAGTTATTTTAGTCGTAAAGATCA
+GGGAAAAATCCCGTATTTCAGTAATTTAAGGTTTTCCTACATGTTCTTCTGGTTCGCTCG
+CGGTTTTTTTCTTGTCTTATACCCTGAAGATGGAGGCGATACGTTCCTCCGAAACGTCGG
+TTAACACAATTTATACATGGCTTCCTTCATAGTCACCGCCGTGAAAACCTCAACTCTTAC
+ATGAATCATTTTGGTTTATCCCACTTTAATCCTTCATTCACATCTGTTTCAGAATAAACA
+TTTTGATCACGAATGGGTTCAAATTTTTTGATGATGACGAATATTTTTATTTGGCGCATG
+GAATAATATATTTTAAAGCCTATTTCAGACAGCGTAGTATTCATAAAGCATGTCATATCA
+TAGCGGACAACATGTGGTGGATATTGGGGTGCAAGTTGTGACAACGCAACTGCTTTCAGC
+TGGGGGTTGGGAGGGGTGGGGTAAAACCACATTTAATCGGATTACTCAGCAGCTATTCAA
+TCAGTGCCCATGTTTCACATTCCGTCATCATGTTTGTGGGGTATGTATCAGAAAGGTTAC
+TGAAGCTGGGAAAAAAAGTAATACAGAATCTGAAGCTTCTGTGATGAAGGTTTGTCAGGT
+CGTGACGTTTTCCACATTATTACACACTCTGCTCTATATATTTCGAAACGTCCGAAGACC
+TCTCTGAGACACACAAAGCATAAAGTCCCGGTTACGTGGACAGTAGGCCGCGCCATAGCT
+CAAGCGGTTAGTCGCTGGCTTCCCACAGCGACGGCCCGGGTTCGATTCCTGGTCTGGTCA
+AGTGGGATTTGTGGTGGACGAAGTGGCGCTGGGGCAGGTTTTCTCCGAGTACTTCGGTTT
+CCCCTGCTAATCTTCATTCCACCAATTGCTTTACAATCACCCTCACTTTTCATCTTGGGC
+TGGTACAATAGGCCAGAAGTGGCCGCAGTACAAGGGACTTAGTCCCACCCCACTAGCAAT
+AAAAAAATACGTGGACGATTCTCCTGATTCGTATCAGAAATATAGGAACAATGAGTTTGA
+ACACCTCAGTACGAGTGTGCACCTCCAAACCACGGATTTTTTTTATTACTAGTGGGGTGG
+GACGAAGTCCCTTACACTGCGGCCAGAGGGAGACATGTAGTCGGAGATAGATAGTTGGGG
+AGTTGCAGATAGACAATTAAAGTGTTTTTTTATAAATATTATTTTAAGTCTTATGTGGAA
+ATATTTAAAAACTTTAAAGTTTAAAATTTTTATGTTTTAAATTTAAAACATTCAATAACG
+AGACACACAGAGAAGAACTCAACAGGAAGAAGCATGACGCTCTAACTACAAGACGCATGC
+GCATCAGAGGGACCTACACATGTAATAGCAGCAACAATAGAAAGCAGCAGTTTCCCCATT
+TGATATATTCTAACACTGACGATGGTCATATTGGCCGAAACATGTTTGGCTCTTAAATTT
+TTTAATTTAAAACTTTTAAGTTAATAAATAATTACACATAAGACTGTACGAGTAAATAAG
+ATTTATAAGAAAATGGAAGAGTGCAACAGGATGCTGCAATACAATAATAGTTACAGTGAC
+AGAGCGAGAGAGGTCAGCGTGGGGAACACCCGCCATGTTTCCATTTTGAAGTTAGTTTAT
+GAGTTAGGAACTAGAATTTCAATTAGTGAAGCCCTAAGGCGACTTCGTCTTTCGTCTTTC
+AAATGCTTCCCTAGATGCGTAAAGGTGAAACTCGAGACAGAAAAACTTTTCTTTGTCCCT
+TTGCATCTTCCTGTAAGACAACAGGTACAAAATTATACAGGATGATTCTAAATTACTGTC
+GGGTTTCCATGGTCCACAATTTTCAAACCTCAAAGAATAAAATAGAACTGATTACGAAAT
+ATGAAAACACAACTCTAAAAGTTTTATTATTTTTAGAATTATTACTGCAGAACGCTAAAC
+AGTTTCAATATGCGCGTCTTTTTTTTTTATCTTAAGATGTCCAAATGATGGCAAAAGCTG
+CATTTAGCAAGAAGAAGAATCTTTTTACCAGCAAATTGGACTTAAATTTGAGGAAGAAAC
+TAGTGAAATTCTACATTTTTAGCATAGCTCTGTATGGGGCTGAAACATGGACACTTAGGG
+CAGTAGATCAGAAACATCTGGAAAGTTTCGAAATGTGGTGTTGGAGAAGGATGGAGAAGA
+TCAGTTGGACCGATTATGTGAGAAATGAAGAAGTGTTAATTAGAGTCAGTGAGCAGAGGA
+ATATCCTACACGAAATAAGAAAACGGAAGGCTAACTGGATTGGTCATGTTTTACACAGAA
+ACTGACTTCTAAAAGAAGAAGTTACTGAAGGAAAGAAAGAGGGGCGGATAGAAGTGACAA
+GAAGACGAGGAAGAAGACGTAAGAAGATGCTGGATGACCTTGGGGACAGAAGAGGATACT
+GTCATTTGAAGGAGAAAGCTCTAGATCGCATTAAATGGAGGAATTGTTTTGGAAGAGACT
+GTGGACCTTTCGTATTGACAGATTACTGATGATGATGATGATGATGATGTCCAAATGGTA
+TTCACTTTCTCTCCAAATGTTCTATAGCATTTGCTGTGCAACTTTTTCGATTGCAGAAAT
+AATTTGGAACCTCAGATAATAATTTAGAATTACCTGGTACTGCTCACGAATCGAGGTTCT
+CACAGCTGTAAATTATGAAGACTACTGTATTGTATAATGGGTCGCCACGTTGTCTGGTAC
+AAAGTTATCGACGTTTCGTAAGAACCTGATGTCTCTACTCTGAAGATAGAGGTAGCATGC
+ATCTGAAAAATACAGTAAATACAGTAATTAGTAAACTACACAACAACACACCTGAGGAGG
+CAAAGTTATGTTGGCCTATATTTCTGGCGGTGACAATGAATGTAGTTGAGGTTAAGGCTT
+CACGTTCCGACAGGGTTTACCATCAGACTCTGACAGTCGCTCAGCTAGTTAAGAAAATCC
+ATGCTTTTTCTGCATTTCTTATTTTGCTCTCATGCGCACACCATATTGTGATCCGCAGCA
+ATTTCCCGTTGAAAACTTATGCCCTTTTTCTTTTAGAGGGTGTTGATCCTGTAAAGGCAC
+AGGCCTTGATATGAACCGATTTAGAATCAATACAAATATCTAAAAGGACTCAACACTTTC
+AGGATTCGTTCTGCATCGAAACAGACAAGAGATTCTAATGCGCGACAGGTGAATATGGAT
+ATTGGAAGGTCATATCTAGGCAGCTAATCTAGGAACTTAACAAAGTCACCAGTGATTTGC
+ATCAAATTTACATTGAAATGCTGTTCAGCTTGAACCGGTAATATTGAGTTCCGAGTGAGG
+CTTCAAAATTCTCTGCTCAGTTGTTTGGTTTAATCTAATTTCCCTAGAGACGTGGAGAAC
+TGGCCTCGCAAGGAAATTCAGTAATCTAGCTTATCGTGTAGTCTACTCACAAGTCCTCAC
+AATTAAACCGTAATTAAGCTATACACTGTTCATTGTTAGTTGAATATTTAATATGTACGT
+CTGGGAATTTTGTCTGTACCCCCCCCCCCTTCATCAAGTAAATGTCATTAGACATATAAA
+TTTTTACTGCGTATTTATTTTGGTTGTCAATAACAGTGTTCGAGATTAAACTCAAGATTC
+TGCAAGTGTTACATTTGTAATACATACACGACGTTTCGGAAATTTTGCTCAACTTCCCTT
+TTTAGGCTACTAGTTGCCACTCTACTGACAGATTATCCTTTTATGGTACATGAGATATTT
+ATATCTGCGGTAGGGATCCAGTTGTTTGGGCAGTAAATGTGTATATTTAATACAGACGTT
+TCGAGACGTTTTATCTACTCGCATATTAAGGTTATCCTTGTGATTAATAATAGTTTTTCT
+TCTTGTCTCATATGTTATTAATAGCAGTTGGAATCGAGCACGAACTTTATAAGCAAATTA
+TGTAGATCCAAATGTACGAGTACACGGTAGTGGCCAGAGGAAAAGTCAGTCACAGGAAGT
+GTAAGGGGTCAGACCTAGGACAGTCCAGCTGACTTAAATGCGGTTTCATAACAGTTACGT
+ATTGTAAGGCATAAGCTGCTGCACAAGCCTGCATTGATAGGAAATCTCTGTATCCCCTTA
+TATAAACGCTACTTAGTACAGTGCAGTGCAGTGCAGTGACACAGGGCCTACAGTGACATG
+GACGCCGTGACAGCGCGGATATACTCGTGCTGAAACTGCGGTGCAACAAACGTAGCGCCT
+ACATAGAGAGGCCGACCCCTGTACAGTGCAGTGCAGTGCAGTGACACAGAGCCCACAGTG
+ACTTGGACGCCGTGACAGCGCTGATATACTCGTGCTGAAACTACGGTGCAACAAACGTGG
+CGCCTATATAGAGAGAAAATGTGAGAGCCTCGACGTCTCACTACCATATGGGTCTCCATG
+GCCTGTTACAAGGATAATTTTACCTTTTAACTAACACCGTTCAGAGTATCACAATCCCTG
+AATTCTGAGACAACATGTTTTTGGGGTGTAAAACAAGTCGACACGGACTGAGTCCTGGTT
+TATTTATCGAAGCTTAAGGCAGCCCAGACTGTACAGTTGAATTGTATTATATCCCCTGAA
+GAATAAGACGAGTATATTTCTCTGAAACTTTCGTAACAACCTACAGACTACATGGTGTCA
+TAACCCAGGAGATCACAACATGAAGAGTGTGATGTTGTCAAGTCAGTGTGAGTAAAAACA
+GGCCTACACAGATAGTCCTTTGTCTTACTAACAGTTATGTTCCTGAAGAGAGTTCGTGAA
+GTAAAATTTCGTAATGGTAATCTCTCTTTCCCATGAGCACAATGAAGTTAGCTTCCCGGG
+CGACCAAAGAATGATAAACACAAGAAGTTCTGGGAAGAACTAATATCCTACTTCCTTTTC
+ATAGGACATAGACAGCATAGAAAACGAAGAAAGGGGAACGCAGAGACACACAGACAACAA
+AACGGTTTCAAAATCTTCCTAACGAAGGGGATACATAGACAGACAGCAACGATATTTCAT
+ATTCCCACTTTTATTATTTCAGAATAAAGAAAGTAAGCTAAAAATAGGAATCACGAATTT
+GATTATCTGAAAGGAAACATGTACTACACATATATTGAATTATCCTACTGATTTGTCTGT
+AAAATCTGTATGCGCCTGAGAGCCGGCGGCGCCACGGTCGCTGTGAATCGCAGAGTCGTG
+GAACAGCCAACAAAAGTAAGAACTTTCCTGTAGATATATACATAGACAGTTACATGGGTA
+GGTTGTTGGACAAACAACGAGTGAACCTCATGCAGTCTGGACTTTGCAGTATCATAAAGC
+CCAGCAACCTCTCACCTCTGGAATGTCACAATGTCAGGTTTCAAAAGCTTTACTCGTTAC
+ATTCTAACCCGTTCGCATGCCCCTCATCAAAGGAGCTCTACAGGGAAGTAGGACATTATT
+CGGGTGTTCCGGGTAAGAGACACATGGAGCACTAAGTTATTTATCGGACCGAAATGACTG
+CTCCCCACTTTGCTTAATTAAATCTAAACATCAGAATGTCATATACAGACTTAATAAATT
+AATGATCTATCTTACAGCCATTGGCTACGGGCTGGCCGGACGAGGGGTCGAAGTTCGAGT
+CCCCGTAGGGGCAAGATTTTTCTCCTCTCCAGATTGTCCGAACAGTTTCCTAGGCCCACC
+AACCTGCTATGTAGTGGCTACCGGGTGTTCTTTCGCTGGAAAGCGGGGGTGGGGGTGGGG
+AGTGGGGGGTGTTTGAAGCCGCCAAAAATGAAGTTTACCGGTGACCTCCAACTTGTGCAA
+CGTGGATCTGATTAGTTAGTTAAGCATAAGGCAGCGCCATAGCTCAAGCGGTTAGTCGCT
+GACTTCCCACCGCGGCGGCCCGGGTTCGATCTCGAGTCTGGTCAAGTGGGATTTGTGGTG
+GACAAAGTAGCGCTGGGGTGGGTTTTCTCCGAGTACTTCGGTTTCCCCTGCCAATCTTTA
+TTCCACCAATTGCTACACAATCACCCTCACCTATCATCTGGGGCTGGTACAATAGGCCAG
+AAGTGGCCGCAGTACAAGGGACTTAGTCCCACCCCACTAGCAATAAAAGAACATTTCAGA
+GCTAAACTGGATTAGTTTAATGTTATCAAGCCTGAATTCTAAAACAACGTACATACACAG
+TAAATAAAAAATAAAAGAAACTCCGTGGTCCATAGTCCCCAAGCGAACTATACCGGCCAA
+GCGACCGCCACTTGTCGGCGAAATTAGTGCCAACTTTTGCGGATAGAGGGTGTCGCGTGG
+TCAGGGCAAAGGATCCTCACGGCCGATTATTTCGCTTTTATAGACCGGAGCCGCTATTTC
+CTTATAATAGCTCATCAGTTATCCTCACGAGGTTGAGTGGACCCCGTTCCAGACCCACTA
+CTTCTCAGAAAATCTGGTATCGACGGGAATCGAACCCGGGACCTCTGGATTTATTGACAG
+GAACTCTGACCACTAGACCACAGAAGCGGACTATACACAGTAAACATAACATGCGAAATA
+TGGCAGAAGAGATATTTCATACGGTCACATGACCAAACAGTTCTTCGCTTACTGAACTTA
+CTTTTACACGAATGAAACTAAATAATAATAGAATCATCAAATAAATGAAGATAATATGAC
+AGGTATGTAGCACGCACAGCTGGAAACTGAAACATTTGAAGACATAGACTTAGATGGTGA
+CGAATATTAAAATAACCGGTCACGGTAGCCGAGCGGTCTAAGGCATGCACTGTCTTCGCT
+CACTCGGAAGCAGGGATCGTGGGTTCGGATCTGTTTCCTGTGAGGTACGAACTGATTTCT
+TATATATTATTCTTATACACTGCGGGTCACGGTAGCCGAGCGGTCTAAGGCATGCACTGT
+CTTCGCTCGCTCGGAAgccgggatcgtgggttcggatcccactcaggacatggatgttNN
+NNNNNctgtgaggtacgaactgaattcttatatattattcttatacactgccgttcacgg
+tagccgagcggtctaaggcatgcactgtcttcgctcgctaGAAGCCGGGATCGTGGGTTC
+GGATCCCACTCAGGACATGGATGTTTGGTGTGTGTATGCGTTTCTTCTGTGTTT
+>test4
+TCCGTAGTCTAGGGGTAACGTTCCCACCTCATGACTCAAGGTACGCGGGTTCAAACCCGG
+CGGAGGTCGTGGAATTTTTAAGGGCGGAAAAAATCAGGGAACAAGTCCTTCGGGAGGGAC
+TTTACGGCACGTAAAAGATCCTCATGTCTCTAGGAGACCTCTGAGCAAAATTAGGCAACA
+ATTTCCCGCCCAAGTAGTTTCCAATGCCTCTGGTAGATGGGGGAAATATCAGGTACCGAC
+GGCCGACGTCGTTGGCTGAACGGGGCTTATAGCACGCACGAGTACCGATAGGGTATGGCG
+ACAGTGGAAATTAAAGGGGGACGCACAATGGACCAATAACTGGTCTAAATGCATGGGGAA
+ACCCACCCCCTCTAATTATAATAATAATAATAATAATAATAAAATAATGTCATAAACGTA
+CTACCTCCTTCCATACAAGATCATCTAAACAGTGGATTACTGACAGGAGTGACTAATCAT
+AACCTACACAAAGCTTGTCAACGCTGAGTTCCCCACCTTTTGCTGTTTCTTAAGGCGCGT
+CCACATTACTCGTGCTCGTGCGTCAGAAGCTTACTGCTGCTATCTGTTGTGAAGAAATGG
+AAACCAATTTGGGCGTCCACTTCGTCAGCTCCAGATCCTGATTTTCCGGCAGCAGTAAGC
+TTCTGACGCACGAGCACGAGTAATGTGGACGGACCTTAACTCTCCTAGTGTTTGTCGGTC
+TATCATTATGTCGTTTCCTTGGAAACCAAATGCAAAAGTAACCTCACATTAGGATAGAAC
+TGGATTACGACAACAATAAACGTTAATGTTTCAGTCTGTAATAAAATGTCTTCTCTTACG
+ATTAAAGCTACTTCTAAAATATTATTATCATTATTCTGTGGATTTAACATTCCAGGACTT
+CCAGAAGTTGCAGCTTGCATATTCAACAAAATCATCACTTAACAAGAAGTTCCAGGAAGA
+ACTAATAACCTATTTTCCTTTGTTATGATACGGACTGCATAGAAAACGACTCGTTCAACA
+GTTCTTTTGTTGTGTATATTCGTCTCCGCTGTAATGTTTTTACCGAGTCGTTGCCTAGAA
+ATGGGTCTGGTATATCCTCCCATCTCGCAGTCGTCGCATAGCAACGGCTCTACGTTCTAC
+AGTTTCTTGCTTCTGTCGGGAATCGAAAATCGATTGCTTGGCTGTGCAACCTAACACTTC
+CCTTCATTTATATTTTAGTCTGCCTACTCTTCCAGTGTTTGTCTTACGGGCTTGAAGAGT
+GGCAAAAGAAATTCAGTTCTAACCGTCTCCTGTTCGAAACTTGACCTCCCTAATGAGAAG
+CACGATTGCCAATCACTGGAACGCAGCCTTTAACTATTTATCTAACTCCACAGGATCGAT
+TCCTTCTTCAGAAGTTAGCAGTGCTCCAGTTAATCAAGAATTTCCCAGTATTCTACTGAA
+CCCGAAAGTCCATTACCATGTTCACAAGAGCCCGTTACTGCTCCCTATCCTGAGCCAGAT
+AAATCCAGTCCACACCCTGTAAGATCAATTTTAGGCCACGCCATAGCTCAGGCGGTTAGT
+CGCTGGCTTCCCATTGCGGCGGCCCGGGTTCGATCCCGGGTCTACTCAAGTGGGATTTGT
+GGAGGACAAAGTGGCCCTGGGGCAGGTTTTCTCCGAGGACTTCGGTTTCCCCTGCCAATC
+TTCATTCCACCAATTGCTCCACAATCACCCTCACCTATCATCTGGGGCTTGTACAGTAGG
+CCAGAAGTGGCCGCAGTACAAGGGACTTAGTCCCACCCCACTAGCAATAAAAGATAAATT
+TTAAAGTTTTTAATATCGTGTTAATTTCTATAATGATTGGACCTAGTCTGGCCATGCGTT
+TCTCTAAGATTATGGTCCTCTGGAGTGTGACTTTTATAGTTTGGTACAAATGTACTAAGG
+CGCTGCTGCCTCTATCTTCAGAGTAGAATACGTGACGTCACTTAGAGTGTCGGCTTAGCT
+ACAACGCTCTCGACTTGTATTCAGGATGTGATCGATTAATATCTCGATTAGGACACAGGC
+TCTCCTAAGGTTGTCATGGTTTACTCAGTCACTCCATGCACATACAGGACAATATTTCGG
+TTAGGTTACGATAGGTTACTTCCAAATAACATTCATTTACAGTCCATGAATTCGAAGCTA
+TGTATTCTAGCAAGTGAATGAGTCGTAATCAGTAACTCACAGAATTGAATAAATACACTG
+TCTCGTCCCCAAAACTGAGGTCTTCACGAGGACCCCAGTCCTTAGTTCCTTCATATTTCG
+TTCCTCCATAATCAATCTAATTATATATGAAAGATAACCTACTTGAAGAGATTAGCGAAT
+TCCGAATTTTCGACATCACAATCCCCCTCCCCCCACTTTGGTCTTCATCAAATCTTCGAG
+CCATCCCTTTTATTTCTTAACTGAAATAACGCTAACACCACCATCTTGTATATACGATTA
+ATTATTGTCAACCAACTCTCCGTAGTCTAGGGGTAACGTTCCCACCTCCTGACTCAAGGT
+ACGCGGGTTCAAACCCGGCGGAGGTCGTGGAATTTTTAAGGGCGGAAAAATTCAGGGAAC
+AAGTCTTCCGGGAGGGACTTTAAGCCGTGGGTTCCG
diff --git a/testdata/gt_gff3_phases1.gff3 b/testdata/gt_gff3_phases1.gff3
new file mode 100644
index 0000000..94f0aef
--- /dev/null
+++ b/testdata/gt_gff3_phases1.gff3
@@ -0,0 +1,8 @@
+##gff-version   3
+##sequence-region Chr1 1 20
+Chr1	foo	gene	1	20	.	-	.	ID=gene1;
+Chr1	foo	mRNA	1	20	.	-	.	ID=transcript1;Parent=gene1;
+Chr1	foo	CDS	1	5	.	-	2	Parent=transcript1;
+Chr1	foo	CDS	10	10	.	-	0	Parent=transcript1;
+Chr1	foo	CDS	14	17	.	-	1	Parent=transcript1;
+Chr1	foo	CDS	19	20	.	-	0	Parent=transcript1;
diff --git a/testdata/gt_gff3_phases1.out b/testdata/gt_gff3_phases1.out
new file mode 100644
index 0000000..ef60659
--- /dev/null
+++ b/testdata/gt_gff3_phases1.out
@@ -0,0 +1,9 @@
+##gff-version 3
+##sequence-region   Chr1 1 20
+Chr1	foo	gene	1	20	.	-	.	ID=gene1
+Chr1	foo	mRNA	1	20	.	-	.	ID=mRNA1;Parent=gene1
+Chr1	foo	CDS	1	5	.	-	2	Parent=mRNA1
+Chr1	foo	CDS	10	10	.	-	0	Parent=mRNA1
+Chr1	foo	CDS	14	17	.	-	1	Parent=mRNA1
+Chr1	foo	CDS	19	20	.	-	0	Parent=mRNA1
+###
diff --git a/testdata/gt_gff3_phases2.gff3 b/testdata/gt_gff3_phases2.gff3
new file mode 100644
index 0000000..31da8b0
--- /dev/null
+++ b/testdata/gt_gff3_phases2.gff3
@@ -0,0 +1,8 @@
+##gff-version   3
+##sequence-region Chr1 1 20
+Chr1	foo	gene	1	20	.	-	.	ID=gene1;
+Chr1	foo	mRNA	1	20	.	-	.	ID=transcript1;Parent=gene1;
+Chr1	foo	CDS	1	5	.	-	0	Parent=transcript1;
+Chr1	foo	CDS	10	10	.	-	0	Parent=transcript1;
+Chr1	foo	CDS	14	17	.	-	0	Parent=transcript1;
+Chr1	foo	CDS	19	20	.	-	0	Parent=transcript1;
diff --git a/testdata/gt_gff3_phases3.gff3 b/testdata/gt_gff3_phases3.gff3
new file mode 100644
index 0000000..c1b9fe2
--- /dev/null
+++ b/testdata/gt_gff3_phases3.gff3
@@ -0,0 +1,24 @@
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	gene	40282	46004	.	-	.	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960;Name=TRIAE_CS42_5DL_TGACv1_434051_AA1427960;biotype=protein_coding;confidence=High
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	mRNA	40282	46004	.	-	.	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960;Name=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2;aed=0.0;note=TRIAE_CS42_5DL_TGACv1_434051_AA1427960;confidence=High;has_start=True;has_stop=True;original_stop=True;protein_rank=P1;transcript_rank=T2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	exon	40282	40933	.	-	.	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.exon1;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	three_prime_UTR	40282	40720	.	-	.	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.three_prime_UTR1;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	CDS	40721	40933	.	-	0	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.CDS1;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	CDS	41018	41111	.	-	1	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.CDS2;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	exon	41018	41111	.	-	.	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.exon2;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	CDS	41227	41468	.	-	0	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.CDS3;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	exon	41227	41468	.	-	.	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.exon3;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	CDS	41673	41831	.	-	0	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.CDS4;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	exon	41673	41831	.	-	.	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.exon4;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	CDS	41946	42820	.	-	2	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.CDS5;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	exon	41946	42820	.	-	.	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.exon5;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	CDS	42905	42913	.	-	2	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.CDS6;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	exon	42905	42913	.	-	.	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.exon6;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	CDS	45373	45496	.	-	0	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.CDS7;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	exon	45373	45496	.	-	.	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.exon7;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	CDS	45600	45651	.	-	1	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.CDS8;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	exon	45600	45651	.	-	.	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.exon8;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	CDS	45726	45726	.	-	2	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.CDS9;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	exon	45726	45726	.	-	.	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.exon9;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	CDS	45875	45893	.	-	0	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.CDS10;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	exon	45875	46004	.	-	.	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.exon10;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	five_prime_UTR	45894	46004	.	-	.	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.five_prime_UTR1;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
\ No newline at end of file
diff --git a/testdata/gt_gff3_phases3.out b/testdata/gt_gff3_phases3.out
new file mode 100644
index 0000000..e136b20
--- /dev/null
+++ b/testdata/gt_gff3_phases3.out
@@ -0,0 +1,26 @@
+##gff-version 3
+##sequence-region   Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL 40282 46004
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	gene	40282	46004	.	-	.	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960;Name=TRIAE_CS42_5DL_TGACv1_434051_AA1427960;biotype=protein_coding;confidence=High
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	mRNA	40282	46004	.	-	.	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960;Name=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2;aed=0.0;note=TRIAE_CS42_5DL_TGACv1_434051_AA1427960;confidence=High;has_start=True;has_stop=True;original_stop=True;protein_rank=P1;transcript_rank=T2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	three_prime_UTR	40282	40720	.	-	.	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.three_prime_UTR1;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	exon	40282	40933	.	-	.	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.exon1;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	CDS	40721	40933	.	-	0	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.CDS1;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	CDS	41018	41111	.	-	1	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.CDS2;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	exon	41018	41111	.	-	.	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.exon2;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	CDS	41227	41468	.	-	0	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.CDS3;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	exon	41227	41468	.	-	.	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.exon3;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	CDS	41673	41831	.	-	0	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.CDS4;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	exon	41673	41831	.	-	.	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.exon4;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	CDS	41946	42820	.	-	2	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.CDS5;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	exon	41946	42820	.	-	.	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.exon5;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	CDS	42905	42913	.	-	2	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.CDS6;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	exon	42905	42913	.	-	.	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.exon6;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	CDS	45373	45496	.	-	0	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.CDS7;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	exon	45373	45496	.	-	.	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.exon7;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	CDS	45600	45651	.	-	1	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.CDS8;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	exon	45600	45651	.	-	.	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.exon8;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	CDS	45726	45726	.	-	2	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.CDS9;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	exon	45726	45726	.	-	.	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.exon9;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	CDS	45875	45893	.	-	0	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.CDS10;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+Triticum_aestivum_CS42_TGACv1_scaffold_434051_5DL	TGACv1	exon	45875	46004	.	-	.	ID=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2.exon10;Parent=TRIAE_CS42_5DL_TGACv1_434051_AA1427960.2
+###
diff --git a/testdata/gt_gff3_phases4.gff3 b/testdata/gt_gff3_phases4.gff3
new file mode 100644
index 0000000..bc12022
--- /dev/null
+++ b/testdata/gt_gff3_phases4.gff3
@@ -0,0 +1,10 @@
+##gff-version   3
+##sequence-region Chr1 1 20
+Chr1	foo	gene	1	20	.	-	.	ID=gene1;
+Chr1	foo	mRNA	1	20	.	-	.	ID=transcript1;Parent=gene1;
+Chr1	foo	CDS	1	1	.	-	0	Parent=transcript1;
+Chr1	foo	CDS	3	3	.	-	1	Parent=transcript1;
+Chr1	foo	CDS	5	5	.	-	2	Parent=transcript1;
+Chr1	foo	CDS	10	10	.	-	0	Parent=transcript1;
+Chr1	foo	CDS	17	17	.	-	1	Parent=transcript1;
+Chr1	foo	CDS	20	20	.	-	2	Parent=transcript1;
diff --git a/testdata/gt_gff3_phases5.gff3 b/testdata/gt_gff3_phases5.gff3
new file mode 100644
index 0000000..e6176eb
--- /dev/null
+++ b/testdata/gt_gff3_phases5.gff3
@@ -0,0 +1,10 @@
+##gff-version   3
+##sequence-region Chr1 1 20
+Chr1	foo	gene	1	20	.	-	.	ID=gene1;
+Chr1	foo	mRNA	1	20	.	-	.	ID=transcript1;Parent=gene1;
+Chr1	foo	CDS	1	1	.	-	2	Parent=transcript1;
+Chr1	foo	CDS	3	3	.	-	0	Parent=transcript1;
+Chr1	foo	CDS	5	5	.	-	1	Parent=transcript1;
+Chr1	foo	CDS	10	10	.	-	2	Parent=transcript1;
+Chr1	foo	CDS	17	17	.	-	0	Parent=transcript1;
+Chr1	foo	CDS	19	20	.	-	2	Parent=transcript1;
diff --git a/testdata/gt_gff3_phases6.gff3 b/testdata/gt_gff3_phases6.gff3
new file mode 100644
index 0000000..9cabadc
--- /dev/null
+++ b/testdata/gt_gff3_phases6.gff3
@@ -0,0 +1,10 @@
+##gff-version   3
+##sequence-region Chr1 1 20
+Chr1	foo	gene	1	20	.	-	.	ID=gene1;
+Chr1	foo	mRNA	1	20	.	-	.	ID=transcript1;Parent=gene1;
+Chr1	foo	CDS	1	1	.	-	1	Parent=transcript1;
+Chr1	foo	CDS	3	3	.	-	2	Parent=transcript1;
+Chr1	foo	CDS	5	5	.	-	0	Parent=transcript1;
+Chr1	foo	CDS	10	10	.	-	1	Parent=transcript1;
+Chr1	foo	CDS	17	17	.	-	2	Parent=transcript1;
+Chr1	foo	CDS	19	20	.	-	1	Parent=transcript1;
diff --git a/testdata/gt_gff3_phases7.gff3 b/testdata/gt_gff3_phases7.gff3
new file mode 100644
index 0000000..e6176eb
--- /dev/null
+++ b/testdata/gt_gff3_phases7.gff3
@@ -0,0 +1,10 @@
+##gff-version   3
+##sequence-region Chr1 1 20
+Chr1	foo	gene	1	20	.	-	.	ID=gene1;
+Chr1	foo	mRNA	1	20	.	-	.	ID=transcript1;Parent=gene1;
+Chr1	foo	CDS	1	1	.	-	2	Parent=transcript1;
+Chr1	foo	CDS	3	3	.	-	0	Parent=transcript1;
+Chr1	foo	CDS	5	5	.	-	1	Parent=transcript1;
+Chr1	foo	CDS	10	10	.	-	2	Parent=transcript1;
+Chr1	foo	CDS	17	17	.	-	0	Parent=transcript1;
+Chr1	foo	CDS	19	20	.	-	2	Parent=transcript1;
diff --git a/testdata/gt_seqorder_test_sorthdr.fas b/testdata/gt_seqorder_test_sorthdr.fas
new file mode 100644
index 0000000..88b3877
--- /dev/null
+++ b/testdata/gt_seqorder_test_sorthdr.fas
@@ -0,0 +1,34 @@
+>0
+aan
+>1
+at
+>10
+ga
+>11
+a
+>12
+aaa
+>13
+aaaa
+>14
+aa
+>15
+aan
+>16
+ana
+>2
+ta
+>3
+ag
+>4
+gg
+>5
+ca
+>6
+at
+>7
+tt
+>8
+ac
+>9
+cg
diff --git a/testdata/seedextend2.out.gz b/testdata/seedextend2.out.gz
index 0d90272..a284eb0 100644
Binary files a/testdata/seedextend2.out.gz and b/testdata/seedextend2.out.gz differ
diff --git a/testsuite/gt_chain2dim_include.rb b/testsuite/gt_chain2dim_include.rb
index 718e3d6..366474e 100644
--- a/testsuite/gt_chain2dim_include.rb
+++ b/testsuite/gt_chain2dim_include.rb
@@ -12,7 +12,7 @@ def runchain2dim(args,matchfile)
   Test do
     run_test "#{$bin}gt chain2dim -m #{matchfile} " + args
     argstring = args.gsub(/[ ]/,"")
-    run "cmp -s #{last_stdout} #{$testdata}chaindata/chain#{argstring}"
+    run "cmp #{last_stdout} #{$testdata}chaindata/chain#{argstring}"
   end
 end
 
@@ -26,7 +26,7 @@ Name "gt chain2dim small all"
 Keywords "gt_chain2dim all"
 Test do
   run_test "#{$bin}gt chain2dim -global all -m #{$testdata}chaindata/matches-nd.txt"
-  run "cmp -s #{last_stdout} #{$testdata}chaindata/matches-nd.chains"
+  run "cmp #{last_stdout} #{$testdata}chaindata/matches-nd.chains"
 end
 
 Name "gt chain2dim ecoli all"
diff --git a/testsuite/gt_extractseq_include.rb b/testsuite/gt_extractseq_include.rb
index f2ad11b..cbd3a73 100644
--- a/testsuite/gt_extractseq_include.rb
+++ b/testsuite/gt_extractseq_include.rb
@@ -200,10 +200,10 @@ if $gttestdata then
     run("mv #{last_stdout} trembl-section.random-keylist")
     run_test("#{$bin}gt extractseq -keys trembl-section.keylist -width 60 " +
              "trembl-section.fsa.gz")
-    run("cmp -s #{last_stdout} trembl-section.fsa")
+    run("cmp #{last_stdout} trembl-section.fsa")
     run_test("#{$bin}gt extractseq -keys #{$testdata}trkeys.txt -width 60 " +
              "trembl-section.fsa.gz")
-    run("cmp -s #{last_stdout} #{$testdata}trkeys-result.txt")
+    run("cmp #{last_stdout} #{$testdata}trkeys-result.txt")
     run_test("#{$bin}gt extractseq -keys #{last_stdout} " +
              "trembl-section.fsa.gz",:retval => 1)
     run_test("#{$bin}gt extractseq -keys #{$testdata}trembl-wrongkey.txt " +
@@ -219,6 +219,6 @@ if $gttestdata then
     run("mv #{last_stdout} trembl-section-sorted.keylist")
     run_test("#{$bin}gt extractseq -keys trembl-section-sorted.keylist " +
              "-width 60 trembl-section-sorted.fna")
-    run("cmp -s #{last_stdout} trembl-section-sorted.fna")
+    run("cmp #{last_stdout} trembl-section-sorted.fna")
   end
 end
diff --git a/testsuite/gt_gff3_include.rb b/testsuite/gt_gff3_include.rb
index 65e58be..d7ad44c 100644
--- a/testsuite/gt_gff3_include.rb
+++ b/testsuite/gt_gff3_include.rb
@@ -1120,6 +1120,36 @@ Test do
   run "diff #{last_stdout} #{$testdata}cds_check_succ_12.gff3"
 end
 
+Name "gt gff3 (CDS check with short exons 1)"
+Keywords "gt_gff3 cds_check"
+Test do
+  run_test "#{$bin}gt gff3 #{$testdata}gt_gff3_phases1.gff3"
+  run "diff #{last_stdout} #{$testdata}gt_gff3_phases1.out"
+end
+
+Name "gt gff3 (CDS check with short exons 2)"
+Keywords "gt_gff3 cds_check"
+Test do
+  run_test "#{$bin}gt gff3 -tidy #{$testdata}gt_gff3_phases2.gff3 > out"
+  grep last_stderr, /has the wrong phase 0 -> correcting it to 1/
+  run "diff out #{$testdata}gt_gff3_phases1.out"
+end
+
+Name "gt gff3 (CDS check with short exons 3)"
+Keywords "gt_gff3 cds_check"
+Test do
+  run_test "#{$bin}gt gff3 -tidy -retainids #{$testdata}gt_gff3_phases3.gff3"
+  run "diff #{last_stdout} #{$testdata}gt_gff3_phases3.out"
+end
+
+4.upto(7) do |i|
+  Name "gt gff3 (CDS check with short exons #{i})"
+  Keywords "gt_gff3 cds_check"
+  Test do
+    run_test "#{$bin}gt gff3 #{$testdata}gt_gff3_phases#{i}.gff3"
+  end
+end
+
 Name "gt gff3 (-addids no)"
 Keywords "gt_gff3 addids"
 Test do
diff --git a/testsuite/gt_ltrdigest_include.rb b/testsuite/gt_ltrdigest_include.rb
index 826b6e8..91c0712 100644
--- a/testsuite/gt_ltrdigest_include.rb
+++ b/testsuite/gt_ltrdigest_include.rb
@@ -187,6 +187,15 @@ def check_amino_acid_output(gff3file, chr, pdoms)
   end
 end
 
+Name "gt ltrdigest using -encseq"
+Keywords "gt_ltrdigest encseqcol"
+Test do
+  run "cp #{$testdata}/gt_encseq_col_test1.fasta in.fasta"
+  run_test "#{$bin}gt suffixerator -lossless -suf -lcp -dna -des -ssp -tis -v -db in.fasta"
+  run_test "#{$bin}gt ltrharvest -tabout no -seqids yes -index in.fasta > out.gff3"
+  run_test "#{$bin}gt ltrdigest -matchdescstart -outfileprefix foo -encseq in.fasta < out.gff3"
+end
+
 if $gttestdata then
   Name "gt ltrdigest missing input GFF"
   Keywords "gt_ltrdigest"
@@ -450,6 +459,9 @@ if $gttestdata then
       if !File.exists?("result4_pdom_RVT_1_aa.fas") then
         raise TestFailed, "file \"result4_pdom_RVT_1_aa.fas\" does not exist"
       end
+      if !(`grep ">" result4_pdom_RVT_1_aa.fas | wc -l`.to_i > 1) then
+        raise TestFailed, "file \"result4_pdom_RVT_1_aa.fas\" only contains one sequence"
+      end
     end
   end
 
diff --git a/testsuite/gt_mergeesa_include.rb b/testsuite/gt_mergeesa_include.rb
index 6316ec0..c28ced1 100644
--- a/testsuite/gt_mergeesa_include.rb
+++ b/testsuite/gt_mergeesa_include.rb
@@ -13,9 +13,9 @@ def runmerge(queryfile,referencefiles)
   end
   run_test "#{$bin}gt dev mergeesa -indexname midx-all " +
            "-ii #{indexlist.join(" ")}"
-  run "cmp -s midx-all.suf all.suf"
-  run "cmp -s midx-all.lcp all.lcp"
-  run "cmp -s midx-all.llv all.llv"
+  run "cmp midx-all.suf all.suf"
+  run "cmp midx-all.lcp all.lcp"
+  run "cmp midx-all.llv all.llv"
   run_test "#{$bin}gt mkfmindex -noindexpos -fmout fm-all " + 
            "-ii #{indexlist.join(" ")}"
   run_test "#{$bin}gt suffixerator -indexname fm-all -plain -des no -ssp no" +
diff --git a/testsuite/gt_repfind_include.rb b/testsuite/gt_repfind_include.rb
index 021f3fc..9e5101b 100644
--- a/testsuite/gt_repfind_include.rb
+++ b/testsuite/gt_repfind_include.rb
@@ -5,6 +5,16 @@ repfindtestfiles=["Duplicate.fna",
                   "mpomtcg.fna",
                   "at1MB",
                   "ychrIII.fna"]
+seeds = [170039800390891361279027638963673934519,
+         189224055964190192145211745471700259490,
+         80497492730600996116307599313171942911,
+         287388662527785534859766605927664912964,
+         296993902622042895065571446462399141014,
+         267703755545645415708106570926631501781,
+         31312989670081360011048989184888532950,
+         54623490901073137545509422160541861122,
+         255642063275935424280602245704332672807,
+         154944791630888166287160428655840885636]
 
 def testdatadir(filename)
   if filename == 'Duplicate.fna' or filename == 'at1MB'
@@ -38,10 +48,10 @@ def checkrepfind(reffile,withextend = false)
   minlength = determineminlength(reffile)
   run_test("#{$bin}gt repfind -l #{minlength} -ii sfxidx", :maxtime => 600)
   resultfile="#{rdir}/#{reffile}.result"
-  run "cmp -s #{last_stdout} #{resultfile}"
+  run "cmp #{last_stdout} #{resultfile}"
   run_test("#{$bin}gt repfind -l #{minlength} -r -ii sfxidx", :maxtime => 600)
   resultfile="#{rdir}/#{reffile}-r.result"
-  run "cmp -s #{last_stdout} #{resultfile}"
+  run "cmp #{last_stdout} #{resultfile}"
   if withextend
     run_test("#{$bin}gt repfind -l #{minlength} -ii sfxidx -extendgreedy " +
              "-minidentity 90 -maxalilendiff 30 -percmathistory 55",
@@ -51,7 +61,7 @@ def checkrepfind(reffile,withextend = false)
     else
       resultfile="#{$testdata}/repfind-result/#{reffile}-gr-ext.result"
     end
-    run "cmp -s #{last_stdout} #{resultfile}"
+    run "cmp #{last_stdout} #{resultfile}"
   end
 end
 
@@ -70,7 +80,7 @@ def checkrepfindwithquery(reffile,queryfile)
   #    "#{queryfilepath}"
   #run "sed -e '/^#/d' #{last_stdout} | sort"
   # run "#{$scriptsdir}repfind-cmp.rb #{last_stdout} #{$gttestdata}repfind-result/#{reffile}-#{queryfile}.result"
-  run "cmp -s #{last_stdout} #{$gttestdata}repfind-result/#{reffile}-#{queryfile}.result"
+  run "cmp #{last_stdout} #{$gttestdata}repfind-result/#{reffile}-#{queryfile}.result"
 end
 
 def crosstest(common,opts,key)
@@ -97,43 +107,43 @@ Test do
            "-indexname Atinsert -dna -tis -suf -lcp"
   run_test "#{$bin}gt repfind -minidentity 90 -l 20 -extendxdrop " +
            "-xdropbelow 5 -ii at1MB"
-  run "cmp -s #{last_stdout} #{rdir}/at1MB-xdrop-20-20-80-6"
+  run "cmp #{last_stdout} #{rdir}/at1MB-xdrop-20-20-80-6"
   run_test "#{$bin}gt repfind -minidentity 80 -l 20 -extendxdrop -ii at1MB " +
            "-q #{$testdata}/U89959_genomic.fas"
-  run "cmp -s #{last_stdout} #{rdir}/at1MB-U8-xdrop-20-20-80-6"
+  run "cmp #{last_stdout} #{rdir}/at1MB-U8-xdrop-20-20-80-6"
   run_test "#{$bin}gt repfind -minidentity 80 -l 20 -extendxdrop -ii at1MB " +
            "-qii U8"
-  run "cmp -s #{last_stdout} #{rdir}/at1MB-U8-xdrop-20-20-80-6"
+  run "cmp #{last_stdout} #{rdir}/at1MB-U8-xdrop-20-20-80-6"
   run_test "#{$bin}gt repfind -minidentity 70 -l 700 -seedlength 15 " +
            "-extendgreedy -ii at1MB -q #{$testdata}Atinsert.fna"
-  run "cmp -s #{last_stdout} #{rdir}/at1MB-Atinsert-greedy-15-700-70-4-43"
+  run "cmp #{last_stdout} #{rdir}/at1MB-Atinsert-greedy-15-700-70-4-43"
   run_test "#{$bin}gt repfind -minidentity 70 -l 700 -seedlength 15 " +
            "-extendgreedy -ii at1MB -qii Atinsert"
-  run "cmp -s #{last_stdout} #{rdir}/at1MB-Atinsert-greedy-15-700-70-4-43"
+  run "cmp #{last_stdout} #{rdir}/at1MB-Atinsert-greedy-15-700-70-4-43"
   run_test "#{$bin}gt repfind -extendxdrop -ii at1MB -seedlength 70 -l 500 " +
            "-minidentity 90 -a -verify-alignment"
-  run "cmp -s #{last_stdout} #{rdir}/at1MB-xdrop-70-500-90-1-39-a"
+  run "cmp #{last_stdout} #{rdir}/at1MB-xdrop-70-500-90-1-39-a"
   run_test "#{$bin}gt repfind -minidentity 75 -l 700 -seedlength 20 " +
            "-extendgreedy -ii at1MB -q #{$testdata}Atinsert.fna -a " +
            "-verify-alignment"
-  run "cmp -s #{last_stdout} #{rdir}/at1MB-Atinsert-greedy-20-700-75-3-39-a"
+  run "cmp #{last_stdout} #{rdir}/at1MB-Atinsert-greedy-20-700-75-3-39-a"
   run_test "#{$bin}gt repfind -minidentity 75 -l 700 -seedlength 20 " +
            "-extendgreedy -ii at1MB -qii Atinsert -a " +
            "-verify-alignment"
-  run "cmp -s #{last_stdout} #{rdir}/at1MB-Atinsert-greedy-20-700-75-3-39-a"
+  run "cmp #{last_stdout} #{rdir}/at1MB-Atinsert-greedy-20-700-75-3-39-a"
   run_test "#{$bin}gt repfind -extendgreedy -ii at1MB -seedlength 14 " +
            "-a -verify-alignment"
   run_test "#{$bin}gt repfind -extendxdrop -ii at1MB -seedlength 14 " +
            "-a -verify-alignment"
   run_test "#{$bin}gt repfind -extendgreedy -ii at1MB -seedlength 70 -l 500 " +
            "-minidentity 90 -a -verify-alignment"
-  run "cmp -s #{last_stdout} #{rdir}/at1MB-greedy-70-500-90-1-39-a"
+  run "cmp #{last_stdout} #{rdir}/at1MB-greedy-70-500-90-1-39-a"
   run_test "#{$bin}gt repfind -minidentity 80 -l 20 -extendxdrop -ii at1MB " +
            "-q #{$testdata}U89959_genomic.fas -a -verify-alignment"
-  run "cmp -s #{last_stdout} #{rdir}/at1MB-U8-xdrop-20-20-80-6-a"
+  run "cmp #{last_stdout} #{rdir}/at1MB-U8-xdrop-20-20-80-6-a"
   run_test "#{$bin}gt repfind -minidentity 80 -l 20 -extendxdrop -ii at1MB " +
            "-qii U8 -a -verify-alignment"
-  run "cmp -s #{last_stdout} #{rdir}/at1MB-U8-xdrop-20-20-80-6-a"
+  run "cmp #{last_stdout} #{rdir}/at1MB-U8-xdrop-20-20-80-6-a"
   ["xdrop","greedy"].each do |ext|
     if ext == "xdrop"
       params = "6"
@@ -143,14 +153,14 @@ Test do
     run_test "#{$bin}gt repfind -minidentity 80 -l 30 -seedlength 12 " +
              "-extend#{ext} -ii at1MB " +
              "-q #{$testdata}U89959_genomic.fas -r -a -verify-alignment"
-    run "cmp -s #{last_stdout} #{rdir}/at1MB-U8-#{ext}-r-12-30-80-#{params}-a"
+    run "cmp #{last_stdout} #{rdir}/at1MB-U8-#{ext}-r-12-30-80-#{params}-a"
     run_test "#{$bin}gt repfind -minidentity 80 -l 30 -seedlength 12 " +
              "-extend#{ext} -ii at1MB " +
              "-qii U8 -r -a -verify-alignment"
-    run "cmp -s #{last_stdout} #{rdir}/at1MB-U8-#{ext}-r-12-30-80-#{params}-a"
+    run "cmp #{last_stdout} #{rdir}/at1MB-U8-#{ext}-r-12-30-80-#{params}-a"
     run_test "#{$bin}gt repfind -seedlength 14 -a -verify-alignment -l 32 -r " +
              "-extend#{ext} -ii at1MB"
-    run "cmp -s #{last_stdout} #{$testdata}repfind-result/at1MB-#{ext}-r-14-32-80-#{params}-a"
+    run "cmp #{last_stdout} #{$testdata}repfind-result/at1MB-#{ext}-r-14-32-80-#{params}-a"
   end
   minlen=24
   ["xdrop","greedy"].each do |ext|
@@ -159,13 +169,13 @@ Test do
     run "mv #{last_stdout} at1MB-vs-U8.#{ext}.matches"
     run_test "#{$bin}gt repfind -minidentity 80 -l #{minlen} -extend#{ext} " +
              "-ii at1MB -qii U8"
-    run "cmp -s #{last_stdout} at1MB-vs-U8.#{ext}.matches"
+    run "cmp #{last_stdout} at1MB-vs-U8.#{ext}.matches"
     run_test "#{$bin}gt repfind -minidentity 80 -l #{minlen} -extend#{ext} -ii U8 " +
              "-q #{$testdata}/at1MB"
     run "mv #{last_stdout} U8-vs-at1MB.#{ext}.matches"
     run_test "#{$bin}gt repfind -minidentity 80 -l #{minlen} -extend#{ext} -ii U8 " +
              "-qii at1MB"
-    run "cmp -s #{last_stdout} U8-vs-at1MB.#{ext}.matches"
+    run "cmp #{last_stdout} U8-vs-at1MB.#{ext}.matches"
     run "#{$scriptsdir}cmp_db_query_exch.rb U8-vs-at1MB.#{ext}.matches " +
         "at1MB-vs-U8.#{ext}.matches"
   end
@@ -174,10 +184,10 @@ Test do
      run "mv #{last_stdout} U8-selfcompare.matches"
      run_test "#{$bin}gt repfind -seedlength #{seedlength} -extendgreedy -ii U8 "
               "-cam encseq"
-     run "cmp -s #{last_stdout} U8-selfcompare.matches"
+     run "cmp #{last_stdout} U8-selfcompare.matches"
      run_test "#{$bin}gt repfind -seedlength #{seedlength} -extendgreedy -ii U8 "
               "-cam encseq_reader"
-     run "cmp -s #{last_stdout} U8-selfcompare.matches"
+     run "cmp #{last_stdout} U8-selfcompare.matches"
   end
 end
 
@@ -189,8 +199,8 @@ Test do
   extendlength = 200
   minid = 80
   opts = "-dna -suf -lcp -tis"
-  3.times do
-    run "#{$scriptsdir}gen-randseq.rb --number 1 --reverse --minidentity #{minid} --seedlength #{seedlength} --length #{extendlength} --mode seeded --namedfiles"
+  for seed in seeds[0..2] do
+    run "#{$scriptsdir}gen-randseq.rb --number 1 --reverse --minidentity #{minid} --seedlength #{seedlength} --length #{extendlength} --mode seeded --namedfiles --seed #{seed}"
     run "#{$bin}gt suffixerator -indexname db-query-index -db db.fna query.fna #{opts}"
     run "#{$bin}gt suffixerator -indexname db-query-r-index -db db.fna query-r.fna #{opts}"
     run "#{$bin}gt suffixerator -indexname db-index -db db.fna #{opts}"
@@ -202,9 +212,9 @@ Test do
       crosstest(common,"-ii db-query-r-index -r","#{ext}-db-query-r-index")
       crosstest(common,"-ii db-index -r -q query-r.fna","#{ext}-db-index-r-q")
       ["coords","al"].each do |suffix|
-        run "cmp -s #{ext}-db-query-index.#{suffix} #{ext}-db-index-q.#{suffix}"
-        run "cmp -s #{ext}-db-index-q.#{suffix} #{ext}-db-query-r-index.#{suffix}"
-        run "cmp -s #{ext}-db-query-r-index.#{suffix} #{ext}-db-index-r-q.#{suffix}"
+        run "cmp #{ext}-db-query-index.#{suffix} #{ext}-db-index-q.#{suffix}"
+        run "cmp #{ext}-db-index-q.#{suffix} #{ext}-db-query-r-index.#{suffix}"
+        run "cmp #{ext}-db-query-r-index.#{suffix} #{ext}-db-index-r-q.#{suffix}"
       end
     end
   end
@@ -213,8 +223,8 @@ end
 Name "gt repfind mirror symmetric"
 Keywords "gt_repfind"
 Test do
-  10.times.each do
-    run "#{$scriptsdir}gen-randseq.rb --seedlength 200 --length 2200 --mode mirrored"
+  for seed in seeds do
+    run "#{$scriptsdir}gen-randseq.rb --seedlength 200 --length 2200 --mode mirrored --seed #{seed}"
     run_test "#{$bin}gt suffixerator -suftabuint -db #{last_stdout} " +
              "-dna -suf -tis -lcp -md5 no -des no -sds no -indexname sfx"
     run_test "#{$bin}gt repfind -minidentity 90 -percmathistory 55 " +
diff --git a/testsuite/gt_scripts_include.rb b/testsuite/gt_scripts_include.rb
index 5acc9fd..d85f731 100644
--- a/testsuite/gt_scripts_include.rb
+++ b/testsuite/gt_scripts_include.rb
@@ -134,7 +134,7 @@ end
 Name "MD5 library"
 Keywords "gt_scripts"
 Test do
-  run_test "#{$bin}gt #{$cur}/src/external/md5-1.1.2/tests/test.lua"
+  run_test "#{$bin}gt #{$cur}/src/external/md5-1.2/tests/test.lua"
 end
 
 Name "gtdoc"
diff --git a/testsuite/gt_seed_extend_include.rb b/testsuite/gt_seed_extend_include.rb
index a1d059b..3e02841 100644
--- a/testsuite/gt_seed_extend_include.rb
+++ b/testsuite/gt_seed_extend_include.rb
@@ -19,110 +19,127 @@ seeds = [170039800390891361279027638963673934519,
          267703755545645415708106570926631501781,
          31312989670081360011048989184888532950,
          54623490901073137545509422160541861122,
-         255642063275935424280602245704332672807,
-         124756200605387950056148243621528752027]
+         255642063275935424280602245704332672807]
 
-Name "gt seed_extend reverse, check k-mers and seed pairs"
-Keywords "gt_seed_extend seedpair kmer polysequence xdrop extend"
+# KmerPos and SeedPair verification
+Name "gt seed_extend: small_poly, no extension, verify lists"
+Keywords "gt_seed_extend only-seeds verify debug-kmer debug-seedpair small_poly"
 Test do
   run_test build_encseq("small_poly", "#{$testdata}small_poly.fas")
-  run_test "#{$bin}gt seed_extend -seedlength 10 " +
-           "-debug-kmer -debug-seedpair -ii small_poly"
-  run "gunzip -c #{$testdata}seedextend1.out.gz | cmp -s #{last_stdout}"
-  run_test "#{$bin}gt seed_extend -seedlength 10 " +
-           "-extendxdrop 97 -l 10 -mincoverage 11 -ii small_poly"
-  run "cmp -s #{last_stdout} #{$testdata}seedextend3.out"
+  run_test "#{$bin}gt seed_extend -only-seeds -verify -seedlength 10 " +
+           "-debug-kmer -debug-seedpair -ii small_poly -kmerfile no"
+  run "gunzip -c #{$testdata}seedextend1.out.gz | cmp #{last_stdout}"
+  run_test "#{$bin}gt seed_extend -only-seeds -verify -kmerfile no " +
+           "-debug-kmer -debug-seedpair -ii small_poly | wc -l | grep 792"
+  run_test "#{$bin}gt seed_extend -only-seeds -verify -seedlength 13 " +
+           "-debug-seedpair -ii small_poly"
+  grep last_stdout, /\# SeedPair \(0,2,12,12\)/
+  grep last_stdout, /\# SeedPair \(0,2,13,12\)/
 end
 
-Name "gt seed_extend memlimit, use wildcard containing reads"
-Keywords "gt_seed_extend seedpair at1MB memlimit maxfreq verbose"
+# Compare xdrop and greedy extension
+Name "gt seed_extend: small_poly, xdrop vs greedy extension"
+Keywords "gt_seed_extend extendgreedy extendxdrop small_poly"
+Test do
+  run_test build_encseq("small_poly", "#{$testdata}small_poly.fas")
+  run_test "#{$bin}gt seed_extend -extendxdrop 97 " +
+           "-l 10 -ii small_poly"
+  run "cmp #{last_stdout} #{$testdata}seedextend3.out"
+  run_test "#{$bin}gt seed_extend -extendgreedy 97 " +
+           "-l 10 -ii small_poly"
+  run "cmp #{last_stdout} #{$testdata}seedextend3.out"
+end
+
+# Memlimit and maxfreq options (filter)
+Name "gt seed_extend: at1MB, no extension, memlimit, maxfreq"
+Keywords "gt_seed_extend at1MB memlimit maxfreq"
 Test do
   run_test build_encseq("at1MB", "#{$testdata}at1MB")
   run_test "#{$bin}gt seed_extend -verify -debug-seedpair -memlimit 10MB " +
            "-ii at1MB -only-seeds -no-reverse -seedlength 14"
-  grep last_stderr, /Only 14-mers occurring <= 3 times will be considered, due to small memlimit. Expect 50496 seed pairs./
-  run "gunzip -c #{$testdata}seedextend2.out.gz | cmp -s #{last_stdout}"
-  run_test "#{$bin}gt seed_extend -v -maxfreq 5 -ii at1MB -only-seeds " +
-           "-no-reverse -seedlength 14"
-  grep last_stdout, /...found 582230 14-mers/
-  grep last_stdout, /...collected 68577 seed pairs/
+  grep last_stderr, /Only k-mers occurring <= 3 times will be considered, /
+    /due to small memlimit. Expect 50496 seed pairs./
+  run "gunzip -c #{$testdata}seedextend2.out.gz | cmp #{last_stdout}"
+  run_test "#{$bin}gt seed_extend -only-seeds -v -maxfreq 5 -ii at1MB"
+  grep last_stdout, /...found 622939 10-mers/
+  grep last_stdout, /...collected 305756 seed pairs/
+  grep last_stdout, /...collected 235705 seed pairs/
+  run_test "#{$bin}gt seed_extend -only-seeds -v -maxfreq 11 -memlimit 1GB " +
+           "-ii at1MB"
+  grep last_stdout, /Set k-mer maximum frequency to 11, expect 460986 seed/
 end
 
-Name "gt seed_extend filter options"
-Keywords "gt_seed_extend options"
+# Filter options
+Name "gt seed_extend: diagbandwidth, mincoverage, seedlength"
+Keywords "gt_seed_extend filter diagbandwidth mincoverage memlimit"
 Test do
   run_test build_encseq("gt_bioseq_succ_3", "#{$testdata}gt_bioseq_succ_3.fas")
-  # filter options
-  for seedlength in [5, 14, 32] do
-    for diagbandwidth in [2, 5] do
-      for mincoverage in [10, 50] do
-        for memlimit in ["30MB -no-reverse", "1GB"] do
-          run_test "#{$bin}gt seed_extend -seedlength #{seedlength} " +
-                   "-diagbandwidth #{diagbandwidth} " +
-                   "-mincoverage #{mincoverage} " +
-                   "-memlimit #{memlimit} -ii gt_bioseq_succ_3", :retval => 0
-        end
+  for seedlength in [2, 5, 14, 32] do
+    for diagbandwidth in [0, 1, 5, 10] do
+      for mincoverage in [1, 10, 50] do
+        run_test "#{$bin}gt seed_extend -seedlength #{seedlength} " +
+                 "-diagbandwidth #{diagbandwidth} " +
+                 "-mincoverage #{mincoverage} " +
+                 "-ii gt_bioseq_succ_3", :retval => 0
       end
     end
   end
 end
 
-Name "gt seed_extend greedy extension options"
-Keywords "gt_seed_extend options"
+# Extension options
+Name "gt seed_extend: greedy sensitivity, l, minidentity"
+Keywords "gt_seed_extend extendgreedy sensitivity alignlength history"
 Test do
   run_test build_encseq("at1MB", "#{$testdata}at1MB")
-  # greedy extend options
-  for sensitivity in [90, 100] do
-    for alignlength in [10, 80] do
-      for history in [10, 64] do
+  for sensitivity in [90, 97, 100] do
+    for alignlength in [2, 80] do
+      for minidentity in [70, 80, 99] do
         run_test "#{$bin}gt seed_extend -extendgreedy #{sensitivity} " +
-                 "-history #{history} -l #{alignlength} -a -no-reverse " +
+                 "-minidentity #{minidentity} -l #{alignlength} -a " +
                  "-seed-display -ii at1MB", :retval => 0
       end
     end
   end
   run_test "#{$bin}gt seed_extend -extendgreedy -bias-parameters -verify " +
-           "-overlappingseeds -benchmark -a -no-reverse " +
-           "-seed-display -ii at1MB", :retval => 0
+           "-overlappingseeds -a -seed-display -ii at1MB", :retval => 0
 end
 
-Name "gt seed_extend xdrop extension options"
-Keywords "gt_seed_extend options"
+# Greedy extension options
+Name "gt seed_extend: history, percmathistory, maxalilendiff"
+Keywords "gt_seed_extend extendgreedy history percmathistory maxalilendiff"
 Test do
   run_test build_encseq("at1MB", "#{$testdata}at1MB")
-  # xdrop extend options
-  for sensitivity in [90, 100] do
-    for xdbelow in [1, 3, 5] do
-      for cam in ["encseq", "encseq_reader"] do
-        run_test "#{$bin}gt seed_extend -extendxdrop #{sensitivity} " +
-                 "-xdropbelow #{xdbelow} -cam #{cam} -overlappingseeds " +
-                 "-ii at1MB -no-reverse", :retval => 0
+  for history in [10, 50, 64] do
+    for percmathistory in [70, 80, 99] do
+      for maxalilendiff in [1, 10, 30] do
+        run_test "#{$bin}gt seed_extend -maxalilendiff #{maxalilendiff} " +
+        "-history #{history} -percmathistory #{percmathistory} -a " +
+        "-ii at1MB", :retval => 0
       end
     end
   end
+  run_test "#{$bin}gt seed_extend -bias-parameters -seedpairdistance 10 20 " +
+  "-seed-display -ii at1MB", :retval => 0
 end
 
-Name "gt seed_extend artificial sequences"
-Keywords "gt_seed_extend artificial"
+# Xdrop extension options
+Name "gt seed_extend: extendxdrop, xdropbelow, cam"
+Keywords "gt_seed_extend extendxdrop xdropbelow cam"
 Test do
-  for seed in seeds do
-    for minidentity in [80, 90] do
-      run "#{$scriptsdir}gen-randseq.rb --minidentity #{minidentity} " +
-          "--seedlength 14 --length 2200 --mode seeded --seed #{seed} " +
-          "> artseq.fasta"
-      run_test build_encseq("artseq", "artseq.fasta")
-      run_test "#{$bin}gt seed_extend -extendxdrop 100 -l 2000 -ii artseq " +
-               "-minidentity #{minidentity-2} -no-reverse"
-      grep last_stdout, /^\d+ \d+ \d+ . \d+ \d+ \d+ \d+ \d+ \d+/
-      run_test "#{$bin}gt seed_extend -extendgreedy 100 -l 2000 -ii artseq " +
-               "-minidentity #{minidentity-10} -no-reverse"
-      grep last_stdout, /^\d+ \d+ \d+ . \d+ \d+ \d+ \d+ \d+ \d+/
+  run_test build_encseq("at1MB", "#{$testdata}at1MB")
+  for sensitivity in [90, 100] do
+    for xdbelow in [1, 3, 5] do
+      for cam in ["encseq", "encseq_reader"] do
+        run_test "#{$bin}gt seed_extend -extendxdrop #{sensitivity} " +
+                 "-xdropbelow #{xdbelow} -cam #{cam} -ii at1MB", :retval => 0
+      end
     end
   end
 end
 
-Name "gt seed_extend failure"
-Keywords "gt_seed_extend fail"
+# Invalid arguments
+Name "gt seed_extend: failure"
+Keywords "gt_seed_extend failure"
 Test do
   run_test build_encseq("at1MB", "#{$testdata}at1MB")
   run_test build_encseq("foo", "#{$testdata}foo.fas")
@@ -145,15 +162,52 @@ Test do
            "-ii at1MB", :retval => 1
   grep last_stderr, /option "-percmathistory" must be an integer <= 100/
   run_test "#{$bin}gt seed_extend -extendgreedy -cam invalidlongcamstring " +
-    "-ii at1MB", :retval => 1
+           "-ii at1MB", :retval => 1
   grep last_stderr, /illegal parameter for option -cam/
   run_test "#{$bin}gt seed_extend -v -ii at1MB at1MB at1MB", :retval => 1
   grep last_stderr, /too many arguments/
   run_test "#{$bin}gt seed_extend -benchmark", :retval => 1
   grep last_stderr, /option "-ii" is mandatory/
+  run_test "#{$bin}gt seed_extend -no-reverse -no-forward -ii foo", :retval => 1
+  grep last_stderr, /option "-no-reverse" and option "-no-forward" exclude /
+                    /each other/
+  run_test "#{$bin}gt seed_extend -ii at1MB -pick 1,2", :retval => 1
+  grep last_stderr, /option "-pick" requires option "-parts"/
+  run_test "#{$bin}gt seed_extend -ii at1MB -parts 5 -pick 1,6", :retval => 1
+  grep last_stderr, /option -pick must not exceed 5 \(number of parts\)/
+  run_test "#{$bin}gt seed_extend -ii at1MB -parts 5 -pick 3", :retval => 1
+  grep last_stderr, /argument to option -pick must satisfy format i,j/
+  run_test "#{$bin}gt seed_extend -ii not-existing-file", :retval => 1
+  grep last_stderr, /cannot open file 'not-existing-file.esq': No such file/
 end
 
-Name "gt seed_extend self vs query"
+# Find synthetic alignments
+Name "gt seed_extend: artificial sequences"
+Keywords "gt_seed_extend artificial"
+Test do
+  for seed in seeds do
+    for minidentity in [90, 80] do
+      run "#{$scriptsdir}gen-randseq.rb --minidentity #{minidentity} " +
+      "--seedlength 14 --length 1000 --mode seeded --seed #{seed} " +
+      "--seedcoverage 35 --long 10000  --reverse-complement > longseeded.fasta"
+      run_test build_encseq("longseeded", "longseeded.fasta")
+      run_test "#{$bin}gt seed_extend -extendgreedy -l 900 " +
+               "-minidentity #{minidentity} -ii longseeded -kmerfile no"
+      # Check whether the correct number of alignments are found.
+      numalignments = `wc -l #{last_stdout}`.to_i
+      # split db fasta header by '|' and add 1 for number of seeds
+      run "head -1 longseeded.fasta"
+      run "grep -o '|' #{last_stdout}"
+      numseeds = `wc -l #{last_stdout}`.to_i + 1
+      if numalignments < numseeds then
+        raise TestFailed, "did not find all alignments"
+      end
+    end
+  end
+end
+
+# Query sequences
+Name "gt seed_extend: self vs query"
 Keywords "gt_seed_extend query"
 Test do
   seedlength = 14
@@ -167,19 +221,67 @@ Test do
     run_test build_encseq("db", "db.fna")
     run_test build_encseq("all", "db.fna query.fna")
     ["xdrop","greedy"].each do |ext|
-      run_test "#{$bin}gt seed_extend -extend#{ext} 100 -l #{extendlength-20} " +
-               "-minidentity #{minid} -seedlength #{seedlength} -no-reverse " +
-               "-mincoverage #{seedlength} -seed-display -ii all"
+      run_test "#{$bin}gt seed_extend -extend#{ext} 100 -l #{extendlength-20}" +
+               " -minidentity #{minid} -seedlength #{seedlength} -no-reverse " +
+               "-mincoverage #{seedlength} -seed-display -ii all -kmerfile no"
       grep last_stdout, /^\d+ \d+ \d+ . \d+ \d+ \d+ \d+ \d+ \d+/
       run "mv #{last_stdout} combined.out"
       split_output("combined")
-      run_test "#{$bin}gt seed_extend -extend#{ext} 100 -l #{extendlength-20} " +
-               "-minidentity #{minid} -seedlength #{seedlength} -no-reverse " +
-               "-mincoverage #{seedlength} -seed-display -ii db -qii query"
+      run_test "#{$bin}gt seed_extend -extend#{ext} 100 -l #{extendlength-20}" +
+               " -minidentity #{minid} -seedlength #{seedlength} -no-reverse " +
+               "-mincoverage #{seedlength} -seed-display -ii db -qii query " +
+               "-kmerfile no"
       grep last_stdout, /^\d+ \d+ \d+ . \d+ \d+ \d+ \d+ \d+ \d+/
       run "mv #{last_stdout} separated.out"
       split_output("separated")
-      run "cmp -s separated.coords combined.coords"
+      run "cmp separated.coords combined.coords"
+    end
+  end
+end
+
+# Part of encseq
+Name "gt seed_extend: parts"
+Keywords "gt_seed_extend parts pick"
+Test do
+  run_test build_encseq("at1MB", "#{$testdata}at1MB")
+  run_test build_encseq("gt_bioseq_succ_3", "#{$testdata}gt_bioseq_succ_3.fas")
+  run_test "#{$bin}gt seed_extend -ii at1MB"
+  run "sort #{last_stdout}"
+  run "mv #{last_stdout} default.out"
+  run_test "#{$bin}gt seed_extend -ii at1MB -parts 4"
+  run "sort #{last_stdout}"
+  run "cmp -s default.out #{last_stdout}"
+  run_test "#{$bin}gt seed_extend -ii at1MB -qii gt_bioseq_succ_3 " +
+           "-parts 2 -pick 1,2"
+  grep last_stdout, /24 209 15 P 26 2 248 35 5 80.00/
+  grep last_stdout, /23 418 127 P 24 2 68 35 4 82.98/
+end
+
+# Threading
+Name "gt seed_extend: threading"
+Keywords "gt_seed_extend thread"
+Test do
+  run_test build_encseq("at1MB", "#{$testdata}at1MB")
+  run_test build_encseq("fastq_long", "#{$testdata}fastq_long.fastq")
+  run_test build_encseq("paired", "#{$testdata}readjoiner/paired_reads_1.fas")
+  run_test build_encseq("U89959_genomic", "#{$testdata}U89959_genomic.fas")
+  for dataset in ["at1MB", "paired", "fastq_long"] do
+    for query in ["", " -qii U89959_genomic"]
+      run_test "#{$bin}gt seed_extend -ii #{dataset}#{query}"
+      run "sort #{last_stdout}"
+      run "mv #{last_stdout} default_run.out"
+      run_test "#{$bin}gt -j 4 seed_extend -ii #{dataset}#{query} -parts 4"
+      run "sort #{last_stdout}"
+      run "cmp -s default_run.out #{last_stdout}"
+      run_test "#{$bin}gt -j 2 seed_extend -ii #{dataset}#{query} -parts 5"
+      run "sort #{last_stdout}"
+      run "cmp -s default_run.out #{last_stdout}"
+      run_test "#{$bin}gt -j 8 seed_extend -ii #{dataset}#{query} -parts 2"
+      run "sort #{last_stdout}"
+      run "cmp -s default_run.out #{last_stdout}"
+      run_test "#{$bin}gt -j 3 seed_extend -ii #{dataset}#{query}"
+      run "sort #{last_stdout}"
+      run "cmp -s default_run.out #{last_stdout}"
     end
   end
 end
diff --git a/testsuite/gt_seqorder_include.rb b/testsuite/gt_seqorder_include.rb
index 572fcbc..8a75084 100644
--- a/testsuite/gt_seqorder_include.rb
+++ b/testsuite/gt_seqorder_include.rb
@@ -7,6 +7,26 @@ Test do
   run "diff #{last_stdout} #{$testdata}gt_seqorder_test_sort.fas"
 end
 
+Name "gt seqorder -sorthdr test"
+Keywords "gt_seqorder"
+Test do
+  seq = "gt_seqorder_test.fas"
+  run "#{$bin}gt encseq encode #$testdata#{seq}"
+  run_test "#{$bin}gt seqorder -sorthdr #{seq}"
+  run "diff #{last_stdout} #{$testdata}gt_seqorder_test_sorthdr.fas"
+end
+
+Name "gt seqorder -sorthdrnum test"
+Keywords "gt_seqorder"
+Test do
+  seq = "gt_seqorder_test.fas"
+  run "#{$bin}gt encseq encode #$testdata#{seq}"
+  run_test "#{$bin}gt seqorder -shuffle #{seq} > out"
+  run "#{$bin}gt encseq encode out"
+  run_test "#{$bin}gt seqorder -sorthdrnum #{seq}"
+  run "diff #{last_stdout} #{$testdata}gt_seqorder_test.fas"
+end
+
 Name "gt seqorder -revsort test"
 Keywords "gt_seqorder"
 Test do
diff --git a/testsuite/gt_suffixerator_include.rb b/testsuite/gt_suffixerator_include.rb
index 8852182..144f31e 100644
--- a/testsuite/gt_suffixerator_include.rb
+++ b/testsuite/gt_suffixerator_include.rb
@@ -432,7 +432,7 @@ Test do
       run_test "#{$bin}/gt suffixerator -db #{last_stdout} -dna -v -tis -sds no -des no -md5 no -indexname sfx"
       run_test "#{$bin}/gt dev sfxmap -ownencseq2file -esa sfx"
       if File.exists?("sfx.ssp")
-        run "cmp -s sfx.ssp sfx2.ssp"
+        run "cmp sfx.ssp sfx2.ssp"
       end
     end
   end
diff --git a/testsuite/gt_tallymer_include.rb b/testsuite/gt_tallymer_include.rb
index b81f398..d4fd85e 100644
--- a/testsuite/gt_tallymer_include.rb
+++ b/testsuite/gt_tallymer_include.rb
@@ -24,7 +24,7 @@ def checktallymer(reffile,mersize)
            :maxtime => 360)
   suffix="tyrmkiout"
   run "mv #{last_stdout} #{reffile}.gt#{suffix}"
-  run "cmp -s #{reffile}.gt#{suffix} #{reftestdir}/#{reffile}.#{suffix}"
+  run "cmp #{reffile}.gt#{suffix} #{reftestdir}/#{reffile}.#{suffix}"
   run_test "#{$bin}gt tallymer mkindex #{outoptions} " + 
            "-indexname tyr-index -esa sfxidx", :maxtime => 360
   if not File.zero?("tyr-index.mct")
@@ -32,7 +32,7 @@ def checktallymer(reffile,mersize)
     run_test "#{$bin}gt tallymer search -strand fp -output qseqnum qpos " + 
              "counts sequence -test -tyr tyr-index -q #{query}", :maxtime => 360
     run "mv #{last_stdout} #{reffile}.gt#{suffix}"
-    run "cmp -s #{reffile}.gt#{suffix} #{reftestdir}/#{reffile}.#{suffix}"
+    run "cmp #{reffile}.gt#{suffix} #{reftestdir}/#{reffile}.#{suffix}"
   end
 end
 
diff --git a/testsuite/testsuite.rb b/testsuite/testsuite.rb
index fcda4a8..58f8428 100755
--- a/testsuite/testsuite.rb
+++ b/testsuite/testsuite.rb
@@ -127,9 +127,13 @@ def with_environment(variables={})
 end
 
 def python_tests_runnable?
-  if `which python`.empty? then
+  if not ENV.has_key?("PATH")
     return false
   end
+  return false unless
+    ENV['PATH'].split(File::PATH_SEPARATOR).any? do |directory|
+      File.executable?(File.join(directory, "python"))
+    end
   require "open3"
   runline = "python #{$gtpython}/gt/dlload.py"
   with_environment({"PYTHONPATH" => $gtpython, \
diff --git a/www/genometools.org/htdocs/docs.html b/www/genometools.org/htdocs/docs.html
index 991aab9..76521f8 100644
--- a/www/genometools.org/htdocs/docs.html
+++ b/www/genometools.org/htdocs/docs.html
@@ -1000,6 +1000,13 @@ Show range on stdout.
 Returns a new region mapping which maps everything onto sequence file <code>seqfile</code>.
 </p>
 <hr>
+<a name="region_mapping:get_sequence"></a>
+
+<code> region_mapping:get_sequence(seqid, start, end)</code>
+<p>
+Use <code>region_mapping</code> to extract the sequence from <code>start</code> to <code>end</code> of the given sequence ID <code>seqid</code>.
+</p>
+<hr>
 <a name="RegionNode"></a>
 <h2>Class RegionNode</h2>
 <a name="region_node_new"></a>
@@ -1339,6 +1346,8 @@ Returns translated <code>dna</code>.
 
   <a href="#re"><code>re</code></a><br>
 
+  <a href="#region_mapping:get_sequence"><code>region_mapping:get_sequence</code></a><br>
+
   <a href="#region_mapping_new_seqfile"><code>region_mapping_new_seqfile</code></a><br>
 
   <a href="#region_node_new"><code>region_node_new</code></a><br>
@@ -1376,9 +1385,9 @@ Returns translated <code>dna</code>.
   <a href="#translate_dna"><code>translate_dna</code></a><br>
 
 <div id="footer">
-Copyright © 2008-2013
+Copyright © 2008-2016
 The <i>GenomeTools</i> authors.
-Last update: 2016-01-07
+Last update: 2016-07-21
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/libgenometools.html b/www/genometools.org/htdocs/libgenometools.html
index 4c24660..80c6d0b 100644
--- a/www/genometools.org/htdocs/libgenometools.html
+++ b/www/genometools.org/htdocs/libgenometools.html
@@ -3197,7 +3197,7 @@ Deletes <code>esr</code>, freeing all associated space.
    This class is used for the handling of <strong>user errors</strong> in <em>GenomeTools</em>.
    Thereby, the actual <code>GtError</code> object is used to store the <em>error message</em>
    while it is signaled by the return value of the called function, if an error
-   occured.</p><p>   By convention in <em>GenomeTools</em>, the <code>GtError</code> object is always passed into
+   occurred.</p><p>   By convention in <em>GenomeTools</em>, the <code>GtError</code> object is always passed into
    a function as the last parameter and -1 (or <code>NULL</code> for constructors) is used
    as return value to indicate that an error occurred.
    Success is usually indicated by 0 as return value or via a non-<code>NULL</code> object
@@ -5879,7 +5879,7 @@ Try to get the the next <code>GtGenomeNode</code> from <code>node_stream</code>
    If no error occurs, 0 is returned and <code>genome_node</code> contains either the next
    <code>GtGenomeNode</code> or <code>NULL</code>, if the <code>node_stream</code> is exhausted.
    If an error occurs, -1 is returned and <code>err</code> is set accordingly (the status
-   of <code>genome_node</code> is undefined, but no ownership transfer occured).
+   of <code>genome_node</code> is undefined, but no ownership transfer occurred).
 </p>
 <hr>
 <a name="gt_node_stream_pull"></a>
@@ -7430,7 +7430,7 @@ If set to <code>true</code>, sequences and descriptions are processed (otherwise
 Get next <code>sequence</code> (of length <code>len</code>) and <code>description</code> from <code>seqit</code>.
    Note that <code>seqit</code> retains ownership of the <code>sequence</code> and <code>description</code>.
    Returns 1 if another sequence could be parsed, 0 if all given sequence
-   files are exhausted, And -1 if an error occured (<code>err</code> is set
+   files are exhausted, And -1 if an error occurred (<code>err</code> is set
    accordingly).
 </p>
 <hr>
@@ -12074,9 +12074,9 @@ Similar to <code>vsnprintf(3)</code>, terminates on error.
   <a href="#gt_xvsnprintf"><code>gt_xvsnprintf</code></a><br>
 
 <div id="footer">
-Copyright © 2008-2013
+Copyright © 2008-2016
 The <i>GenomeTools</i> authors.
-Last update: 2016-01-07
+Last update: 2016-07-21
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/license.html b/www/genometools.org/htdocs/license.html
index 6469cea..7fd64be 100644
--- a/www/genometools.org/htdocs/license.html
+++ b/www/genometools.org/htdocs/license.html
@@ -42,7 +42,7 @@
 <p>
 Our copyright policy is modeled after the one of the
 <a href="http://openbsd.org/policy.html">OpenBSD</a> operating system.
-We chose one of the most simple and free licenses, the ICS license.
+We chose one of the most simple and free licenses, the ISC license.
 It is functionally equivalent to a two-term BSD copyright with
 language removed that is made unnecessary by the Berne convention.
 </p>
@@ -56,8 +56,8 @@ We use external sources which are covered by their respective licenses. See
 file for details.
 </p>
 <div id="footer">
-Copyright © 2006-2015 The <i>GenomeTools</i> authors.
-All rights reserved. Last update: 2015-01-06
+Copyright © 2006-2016 The <i>GenomeTools</i> authors.
+All rights reserved. Last update: 2016-02-14
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tool.conf b/www/genometools.org/htdocs/tool.conf
index d6a812a..61703bc 100644
--- a/www/genometools.org/htdocs/tool.conf
+++ b/www/genometools.org/htdocs/tool.conf
@@ -679,7 +679,7 @@ endif::doctype-manpage[]
 
 [footer]
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tool_list.conf b/www/genometools.org/htdocs/tool_list.conf
index bd0fe85..359ce48 100644
--- a/www/genometools.org/htdocs/tool_list.conf
+++ b/www/genometools.org/htdocs/tool_list.conf
@@ -562,7 +562,7 @@ cellspacing="0" cellpadding="4">
 
 [footer]
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools.html b/www/genometools.org/htdocs/tools.html
index 97f8a37..6545418 100644
--- a/www/genometools.org/htdocs/tools.html
+++ b/www/genometools.org/htdocs/tools.html
@@ -600,7 +600,7 @@ Output is fastq/fasta format depending on whether qualities are available.
 </li>
 </ul></div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt.html b/www/genometools.org/htdocs/tools/gt.html
index 0c07b24..84fb185 100644
--- a/www/genometools.org/htdocs/tools/gt.html
+++ b/www/genometools.org/htdocs/tools/gt.html
@@ -502,7 +502,7 @@ shows all possible "environment options".</p></div>
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_bed_to_gff3.html b/www/genometools.org/htdocs/tools/gt_bed_to_gff3.html
index 269e10c..3d343ff 100644
--- a/www/genometools.org/htdocs/tools/gt_bed_to_gff3.html
+++ b/www/genometools.org/htdocs/tools/gt_bed_to_gff3.html
@@ -127,7 +127,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_cds.html b/www/genometools.org/htdocs/tools/gt_cds.html
index 25cfe43..ce78fb0 100644
--- a/www/genometools.org/htdocs/tools/gt_cds.html
+++ b/www/genometools.org/htdocs/tools/gt_cds.html
@@ -216,7 +216,7 @@ sequence file name when it is called with the <tt>sequence_region</tt> as argume
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_chain2dim.html b/www/genometools.org/htdocs/tools/gt_chain2dim.html
index f4104a7..3ba95be 100644
--- a/www/genometools.org/htdocs/tools/gt_chain2dim.html
+++ b/www/genometools.org/htdocs/tools/gt_chain2dim.html
@@ -186,7 +186,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_chseqids.html b/www/genometools.org/htdocs/tools/gt_chseqids.html
index ca4eb99..f6dfa02 100644
--- a/www/genometools.org/htdocs/tools/gt_chseqids.html
+++ b/www/genometools.org/htdocs/tools/gt_chseqids.html
@@ -133,7 +133,7 @@ and all sequence ids “chr2” to “seq2”.</p></div>
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_clean.html b/www/genometools.org/htdocs/tools/gt_clean.html
index b137b2d..1b6addb 100644
--- a/www/genometools.org/htdocs/tools/gt_clean.html
+++ b/www/genometools.org/htdocs/tools/gt_clean.html
@@ -71,7 +71,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_compreads.html b/www/genometools.org/htdocs/tools/gt_compreads.html
index e5d820a..a68fee7 100644
--- a/www/genometools.org/htdocs/tools/gt_compreads.html
+++ b/www/genometools.org/htdocs/tools/gt_compreads.html
@@ -94,7 +94,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_compreads_compress.html b/www/genometools.org/htdocs/tools/gt_compreads_compress.html
index fbead86..177dce7 100644
--- a/www/genometools.org/htdocs/tools/gt_compreads_compress.html
+++ b/www/genometools.org/htdocs/tools/gt_compreads_compress.html
@@ -128,7 +128,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_compreads_decompress.html b/www/genometools.org/htdocs/tools/gt_compreads_decompress.html
index 894b34c..f533a40 100644
--- a/www/genometools.org/htdocs/tools/gt_compreads_decompress.html
+++ b/www/genometools.org/htdocs/tools/gt_compreads_decompress.html
@@ -98,7 +98,7 @@ decode multiple consecutive reads. If range is not specified, the  entire file w
 </dt>
 <dd>
 <p>
-set width of output, 0 disables formating. line breaks in quality strings can cause problems with parsers, use with care (default: 0)
+set width of output, 0 disables formatting. line breaks in quality strings can cause problems with parsers, use with care (default: 0)
 </p>
 </dd>
 <dt class="hdlist1">
@@ -127,7 +127,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_compreads_refcompress.html b/www/genometools.org/htdocs/tools/gt_compreads_refcompress.html
index d770273..e86f040 100644
--- a/www/genometools.org/htdocs/tools/gt_compreads_refcompress.html
+++ b/www/genometools.org/htdocs/tools/gt_compreads_refcompress.html
@@ -143,7 +143,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_compreads_refdecompress.html b/www/genometools.org/htdocs/tools/gt_compreads_refdecompress.html
index f9d2b47..e05d9ad 100644
--- a/www/genometools.org/htdocs/tools/gt_compreads_refdecompress.html
+++ b/www/genometools.org/htdocs/tools/gt_compreads_refdecompress.html
@@ -111,7 +111,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_condenseq.html b/www/genometools.org/htdocs/tools/gt_condenseq.html
index 8b71eee..0380a54 100644
--- a/www/genometools.org/htdocs/tools/gt_condenseq.html
+++ b/www/genometools.org/htdocs/tools/gt_condenseq.html
@@ -94,7 +94,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_congruence.html b/www/genometools.org/htdocs/tools/gt_congruence.html
index 2883918..48443be 100644
--- a/www/genometools.org/htdocs/tools/gt_congruence.html
+++ b/www/genometools.org/htdocs/tools/gt_congruence.html
@@ -85,7 +85,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_congruence_spacedseed.html b/www/genometools.org/htdocs/tools/gt_congruence_spacedseed.html
index c4cb09f..ae16fb3 100644
--- a/www/genometools.org/htdocs/tools/gt_congruence_spacedseed.html
+++ b/www/genometools.org/htdocs/tools/gt_congruence_spacedseed.html
@@ -103,7 +103,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_convertseq.html b/www/genometools.org/htdocs/tools/gt_convertseq.html
index e79729d..5cc8f04 100644
--- a/www/genometools.org/htdocs/tools/gt_convertseq.html
+++ b/www/genometools.org/htdocs/tools/gt_convertseq.html
@@ -159,7 +159,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_csa.html b/www/genometools.org/htdocs/tools/gt_csa.html
index 718a50b..12deb14 100644
--- a/www/genometools.org/htdocs/tools/gt_csa.html
+++ b/www/genometools.org/htdocs/tools/gt_csa.html
@@ -180,7 +180,7 @@ shorter than the corresponding exon from the second alternative splice form.</p>
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_dot.html b/www/genometools.org/htdocs/tools/gt_dot.html
index 6cb3750..5270271 100644
--- a/www/genometools.org/htdocs/tools/gt_dot.html
+++ b/www/genometools.org/htdocs/tools/gt_dot.html
@@ -71,7 +71,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_dupfeat.html b/www/genometools.org/htdocs/tools/gt_dupfeat.html
index 2e89712..0b0e2f9 100644
--- a/www/genometools.org/htdocs/tools/gt_dupfeat.html
+++ b/www/genometools.org/htdocs/tools/gt_dupfeat.html
@@ -119,7 +119,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_encseq.html b/www/genometools.org/htdocs/tools/gt_encseq.html
index f0ba330..6f47a50 100644
--- a/www/genometools.org/htdocs/tools/gt_encseq.html
+++ b/www/genometools.org/htdocs/tools/gt_encseq.html
@@ -114,7 +114,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_encseq2spm.html b/www/genometools.org/htdocs/tools/gt_encseq2spm.html
index 816e261..ef59128 100644
--- a/www/genometools.org/htdocs/tools/gt_encseq2spm.html
+++ b/www/genometools.org/htdocs/tools/gt_encseq2spm.html
@@ -127,7 +127,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_encseq_bench.html b/www/genometools.org/htdocs/tools/gt_encseq_bench.html
index 8996888..327fad9 100644
--- a/www/genometools.org/htdocs/tools/gt_encseq_bench.html
+++ b/www/genometools.org/htdocs/tools/gt_encseq_bench.html
@@ -95,7 +95,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_encseq_bitextract.html b/www/genometools.org/htdocs/tools/gt_encseq_bitextract.html
index c1d4fd9..977414a 100644
--- a/www/genometools.org/htdocs/tools/gt_encseq_bitextract.html
+++ b/www/genometools.org/htdocs/tools/gt_encseq_bitextract.html
@@ -111,7 +111,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_encseq_check.html b/www/genometools.org/htdocs/tools/gt_encseq_check.html
index 182a929..336e9fe 100644
--- a/www/genometools.org/htdocs/tools/gt_encseq_check.html
+++ b/www/genometools.org/htdocs/tools/gt_encseq_check.html
@@ -119,7 +119,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_encseq_decode.html b/www/genometools.org/htdocs/tools/gt_encseq_decode.html
index fa3e8bc..c920969 100644
--- a/www/genometools.org/htdocs/tools/gt_encseq_decode.html
+++ b/www/genometools.org/htdocs/tools/gt_encseq_decode.html
@@ -151,7 +151,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_encseq_encode.html b/www/genometools.org/htdocs/tools/gt_encseq_encode.html
index 9446af8..ecef726 100644
--- a/www/genometools.org/htdocs/tools/gt_encseq_encode.html
+++ b/www/genometools.org/htdocs/tools/gt_encseq_encode.html
@@ -192,7 +192,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_encseq_info.html b/www/genometools.org/htdocs/tools/gt_encseq_info.html
index 608cc4b..5130aaa 100644
--- a/www/genometools.org/htdocs/tools/gt_encseq_info.html
+++ b/www/genometools.org/htdocs/tools/gt_encseq_info.html
@@ -143,7 +143,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_encseq_md5.html b/www/genometools.org/htdocs/tools/gt_encseq_md5.html
index 29bcb8a..d61c6cf 100644
--- a/www/genometools.org/htdocs/tools/gt_encseq_md5.html
+++ b/www/genometools.org/htdocs/tools/gt_encseq_md5.html
@@ -111,7 +111,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_encseq_sample.html b/www/genometools.org/htdocs/tools/gt_encseq_sample.html
index 0da449b..e8046be 100644
--- a/www/genometools.org/htdocs/tools/gt_encseq_sample.html
+++ b/www/genometools.org/htdocs/tools/gt_encseq_sample.html
@@ -143,7 +143,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_eval.html b/www/genometools.org/htdocs/tools/gt_eval.html
index 3fbdf8c..84d0b28 100644
--- a/www/genometools.org/htdocs/tools/gt_eval.html
+++ b/www/genometools.org/htdocs/tools/gt_eval.html
@@ -143,7 +143,7 @@ that type from the “reference”.</p></div>
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_extractfeat.html b/www/genometools.org/htdocs/tools/gt_extractfeat.html
index 9977df9..87eaec9 100644
--- a/www/genometools.org/htdocs/tools/gt_extractfeat.html
+++ b/www/genometools.org/htdocs/tools/gt_extractfeat.html
@@ -285,7 +285,7 @@ sequence file name when it is called with the <tt>sequence_region</tt> as argume
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_extractseq.html b/www/genometools.org/htdocs/tools/gt_extractseq.html
index 332b0fd..7273f71 100644
--- a/www/genometools.org/htdocs/tools/gt_extractseq.html
+++ b/www/genometools.org/htdocs/tools/gt_extractseq.html
@@ -211,7 +211,7 @@ the sequences are output in the order the corresponding keys appear in
 </ul></div>
 <div class="paragraph"><p>If the end of the argument list only contains one filename, say fastaindex, then
 it is checked if there is a file <tt>fastaindex.kys</tt>. This makes up part of the
-fasta index, which is contructed by calling the suffixerator tool as follows:</p></div>
+fasta index, which is constructed by calling the suffixerator tool as follows:</p></div>
 <div class="literalblock">
 <div class="content">
 <pre><tt>gt suffixerator -protein -ssp -tis -des -sds -kys -indexname fastaindex \
@@ -270,7 +270,7 @@ they have to appear in lexicographic order
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_fastq_sample.html b/www/genometools.org/htdocs/tools/gt_fastq_sample.html
index d3c8f3c..3392419 100644
--- a/www/genometools.org/htdocs/tools/gt_fastq_sample.html
+++ b/www/genometools.org/htdocs/tools/gt_fastq_sample.html
@@ -80,7 +80,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_featureindex.html b/www/genometools.org/htdocs/tools/gt_featureindex.html
index e35141f..41828bd 100644
--- a/www/genometools.org/htdocs/tools/gt_featureindex.html
+++ b/www/genometools.org/htdocs/tools/gt_featureindex.html
@@ -120,7 +120,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_fingerprint.html b/www/genometools.org/htdocs/tools/gt_fingerprint.html
index 4d99d53..dba0d62 100644
--- a/www/genometools.org/htdocs/tools/gt_fingerprint.html
+++ b/www/genometools.org/htdocs/tools/gt_fingerprint.html
@@ -176,7 +176,7 @@ CAACGTAATGGGAGCTTAAAAATA</tt></pre>
 </li>
 <li>
 <p>
-1  an error occured     (<em>-check</em>: the comparison was not successful;
+1  an error occurred     (<em>-check</em>: the comparison was not successful;
                            <em>-duplicates</em>: duplicates found)
 </p>
 </li>
@@ -190,7 +190,7 @@ CAACGTAATGGGAGCTTAAAAATA</tt></pre>
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_genomediff.html b/www/genometools.org/htdocs/tools/gt_genomediff.html
index 231d42f..235fb0c 100644
--- a/www/genometools.org/htdocs/tools/gt_genomediff.html
+++ b/www/genometools.org/htdocs/tools/gt_genomediff.html
@@ -212,7 +212,7 @@ You can use</p></div>
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_gff3.html b/www/genometools.org/htdocs/tools/gt_gff3.html
index 5f2cb84..5844220 100644
--- a/www/genometools.org/htdocs/tools/gt_gff3.html
+++ b/www/genometools.org/htdocs/tools/gt_gff3.html
@@ -265,7 +265,7 @@ given GFF3 files must be defined.</p></div>
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_gff3_to_gtf.html b/www/genometools.org/htdocs/tools/gt_gff3_to_gtf.html
index dd7f6c8..748c1a2 100644
--- a/www/genometools.org/htdocs/tools/gt_gff3_to_gtf.html
+++ b/www/genometools.org/htdocs/tools/gt_gff3_to_gtf.html
@@ -103,7 +103,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_gff3validator.html b/www/genometools.org/htdocs/tools/gt_gff3validator.html
index 75bd38d..2e5f9b4 100644
--- a/www/genometools.org/htdocs/tools/gt_gff3validator.html
+++ b/www/genometools.org/htdocs/tools/gt_gff3validator.html
@@ -93,7 +93,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_gtf_to_gff3.html b/www/genometools.org/htdocs/tools/gt_gtf_to_gff3.html
index ded862c..00b32d3 100644
--- a/www/genometools.org/htdocs/tools/gt_gtf_to_gff3.html
+++ b/www/genometools.org/htdocs/tools/gt_gtf_to_gff3.html
@@ -111,7 +111,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_hop.html b/www/genometools.org/htdocs/tools/gt_hop.html
index 8fcaacd..55287aa 100644
--- a/www/genometools.org/htdocs/tools/gt_hop.html
+++ b/www/genometools.org/htdocs/tools/gt_hop.html
@@ -303,7 +303,7 @@ as cognate sequence and outputs an ideal list of corrections.)</p></div>
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_id_to_md5.html b/www/genometools.org/htdocs/tools/gt_id_to_md5.html
index 9464115..ac0937e 100644
--- a/www/genometools.org/htdocs/tools/gt_id_to_md5.html
+++ b/www/genometools.org/htdocs/tools/gt_id_to_md5.html
@@ -200,7 +200,7 @@ sequence file name when it is called with the <tt>sequence_region</tt> as argume
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_inlineseq_add.html b/www/genometools.org/htdocs/tools/gt_inlineseq_add.html
index 00882ff..43631ca 100644
--- a/www/genometools.org/htdocs/tools/gt_inlineseq_add.html
+++ b/www/genometools.org/htdocs/tools/gt_inlineseq_add.html
@@ -161,7 +161,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_inlineseq_split.html b/www/genometools.org/htdocs/tools/gt_inlineseq_split.html
index 4f45a23..575cc4d 100644
--- a/www/genometools.org/htdocs/tools/gt_inlineseq_split.html
+++ b/www/genometools.org/htdocs/tools/gt_inlineseq_split.html
@@ -87,7 +87,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_interfeat.html b/www/genometools.org/htdocs/tools/gt_interfeat.html
index 5e8b28d..e941d48 100644
--- a/www/genometools.org/htdocs/tools/gt_interfeat.html
+++ b/www/genometools.org/htdocs/tools/gt_interfeat.html
@@ -119,7 +119,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_loccheck.html b/www/genometools.org/htdocs/tools/gt_loccheck.html
index efc4362..9df371d 100644
--- a/www/genometools.org/htdocs/tools/gt_loccheck.html
+++ b/www/genometools.org/htdocs/tools/gt_loccheck.html
@@ -71,7 +71,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_ltrclustering.html b/www/genometools.org/htdocs/tools/gt_ltrclustering.html
index 7823b16..5cf65b5 100644
--- a/www/genometools.org/htdocs/tools/gt_ltrclustering.html
+++ b/www/genometools.org/htdocs/tools/gt_ltrclustering.html
@@ -119,7 +119,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_ltrdigest.html b/www/genometools.org/htdocs/tools/gt_ltrdigest.html
index 2e0f6a1..7bca63d 100644
--- a/www/genometools.org/htdocs/tools/gt_ltrdigest.html
+++ b/www/genometools.org/htdocs/tools/gt_ltrdigest.html
@@ -438,7 +438,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_ltrharvest.html b/www/genometools.org/htdocs/tools/gt_ltrharvest.html
index 985db2c..777709d 100644
--- a/www/genometools.org/htdocs/tools/gt_ltrharvest.html
+++ b/www/genometools.org/htdocs/tools/gt_ltrharvest.html
@@ -317,7 +317,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_matchtool.html b/www/genometools.org/htdocs/tools/gt_matchtool.html
index 40ae609..cfc4b2a 100644
--- a/www/genometools.org/htdocs/tools/gt_matchtool.html
+++ b/www/genometools.org/htdocs/tools/gt_matchtool.html
@@ -127,7 +127,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_matstat.html b/www/genometools.org/htdocs/tools/gt_matstat.html
index 3af1b38..66a89e2 100644
--- a/www/genometools.org/htdocs/tools/gt_matstat.html
+++ b/www/genometools.org/htdocs/tools/gt_matstat.html
@@ -133,7 +133,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_md5_to_id.html b/www/genometools.org/htdocs/tools/gt_md5_to_id.html
index 58f5d0c..364a3f9 100644
--- a/www/genometools.org/htdocs/tools/gt_md5_to_id.html
+++ b/www/genometools.org/htdocs/tools/gt_md5_to_id.html
@@ -111,7 +111,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_merge.html b/www/genometools.org/htdocs/tools/gt_merge.html
index b100be1..fe465d7 100644
--- a/www/genometools.org/htdocs/tools/gt_merge.html
+++ b/www/genometools.org/htdocs/tools/gt_merge.html
@@ -120,7 +120,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_mergefeat.html b/www/genometools.org/htdocs/tools/gt_mergefeat.html
index c924189..93db9e9 100644
--- a/www/genometools.org/htdocs/tools/gt_mergefeat.html
+++ b/www/genometools.org/htdocs/tools/gt_mergefeat.html
@@ -103,7 +103,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_mkfeatureindex.html b/www/genometools.org/htdocs/tools/gt_mkfeatureindex.html
index 0fc1347..3258dac 100644
--- a/www/genometools.org/htdocs/tools/gt_mkfeatureindex.html
+++ b/www/genometools.org/htdocs/tools/gt_mkfeatureindex.html
@@ -113,7 +113,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_mmapandread.html b/www/genometools.org/htdocs/tools/gt_mmapandread.html
index 99e3cf5..6e1df70 100644
--- a/www/genometools.org/htdocs/tools/gt_mmapandread.html
+++ b/www/genometools.org/htdocs/tools/gt_mmapandread.html
@@ -71,7 +71,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_orffinder.html b/www/genometools.org/htdocs/tools/gt_orffinder.html
index 04511da..cc7a943 100644
--- a/www/genometools.org/htdocs/tools/gt_orffinder.html
+++ b/www/genometools.org/htdocs/tools/gt_orffinder.html
@@ -202,7 +202,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_packedindex.html b/www/genometools.org/htdocs/tools/gt_packedindex.html
index 344ef1d..d94bf42 100644
--- a/www/genometools.org/htdocs/tools/gt_packedindex.html
+++ b/www/genometools.org/htdocs/tools/gt_packedindex.html
@@ -105,7 +105,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_prebwt.html b/www/genometools.org/htdocs/tools/gt_prebwt.html
index f260f4d..f807cf4 100644
--- a/www/genometools.org/htdocs/tools/gt_prebwt.html
+++ b/www/genometools.org/htdocs/tools/gt_prebwt.html
@@ -87,7 +87,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_readjoiner.html b/www/genometools.org/htdocs/tools/gt_readjoiner.html
index a8d3fd9..b3e53de 100644
--- a/www/genometools.org/htdocs/tools/gt_readjoiner.html
+++ b/www/genometools.org/htdocs/tools/gt_readjoiner.html
@@ -90,7 +90,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_readjoiner_assembly.html b/www/genometools.org/htdocs/tools/gt_readjoiner_assembly.html
index 3930328..73ecb15 100644
--- a/www/genometools.org/htdocs/tools/gt_readjoiner_assembly.html
+++ b/www/genometools.org/htdocs/tools/gt_readjoiner_assembly.html
@@ -168,7 +168,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_readjoiner_overlap.html b/www/genometools.org/htdocs/tools/gt_readjoiner_overlap.html
index 664013c..864e8a8 100644
--- a/www/genometools.org/htdocs/tools/gt_readjoiner_overlap.html
+++ b/www/genometools.org/htdocs/tools/gt_readjoiner_overlap.html
@@ -119,7 +119,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_readjoiner_prefilter.html b/www/genometools.org/htdocs/tools/gt_readjoiner_prefilter.html
index cc7b526..7149782 100644
--- a/www/genometools.org/htdocs/tools/gt_readjoiner_prefilter.html
+++ b/www/genometools.org/htdocs/tools/gt_readjoiner_prefilter.html
@@ -164,7 +164,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_repfind.html b/www/genometools.org/htdocs/tools/gt_repfind.html
index 51cb26d..1cb1741 100644
--- a/www/genometools.org/htdocs/tools/gt_repfind.html
+++ b/www/genometools.org/htdocs/tools/gt_repfind.html
@@ -184,7 +184,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_scriptfilter.html b/www/genometools.org/htdocs/tools/gt_scriptfilter.html
index 9122652..b6edd6a 100644
--- a/www/genometools.org/htdocs/tools/gt_scriptfilter.html
+++ b/www/genometools.org/htdocs/tools/gt_scriptfilter.html
@@ -103,7 +103,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_repfind.html b/www/genometools.org/htdocs/tools/gt_seed_extend.html
similarity index 59%
copy from www/genometools.org/htdocs/tools/gt_repfind.html
copy to www/genometools.org/htdocs/tools/gt_seed_extend.html
index 51cb26d..41515cf 100644
--- a/www/genometools.org/htdocs/tools/gt_repfind.html
+++ b/www/genometools.org/htdocs/tools/gt_seed_extend.html
@@ -2,7 +2,7 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
-<title>GenomeTools - manual page for GT-REPFIND(1)</title>
+<title>GenomeTools - manual page for GT-SEED_EXTEND(1)</title>
 <link rel="stylesheet" type="text/css" href="style.css">
 <link rel="stylesheet" href="..//style.css" type="text/css" />
 </head>
@@ -32,13 +32,13 @@
 <div class="sect1">
 <h2 id="_name">NAME</h2>
 <div class="sectionbody">
-<div class="paragraph"><p>gt-repfind - Compute maximal exact matches (and more).</p></div>
+<div class="paragraph"><p>gt-seed_extend - Calculate local alignments using the seed and extend algorithm.</p></div>
 </div>
 </div>
 <div class="sect1">
 <h2 id="_synopsis">SYNOPSIS</h2>
 <div class="sectionbody">
-<div class="paragraph"><p><strong>gt repfind</strong> [options] -ii indexname</p></div>
+<div class="paragraph"><p><strong>gt seed_extend</strong> [option …] encseq_basename [encseq_basename]</p></div>
 </div>
 </div>
 <div class="sect1">
@@ -46,43 +46,45 @@
 <div class="sectionbody">
 <div class="dlist"><dl>
 <dt class="hdlist1">
-<strong>-l</strong> [<em>value</em>]
+<strong>-ii</strong> [<em>string</em>]
 </dt>
 <dd>
 <p>
-Specify minimum length of matches (default: 0)
+Input index for encseq encoded sequences
 </p>
 </dd>
 <dt class="hdlist1">
-<strong>-f</strong> [<em>yes|no</em>]
+<strong>-qii</strong> [<em>string</em>]
 </dt>
 <dd>
 <p>
-Compute forward matches (default: yes)
+Query input index (encseq)
 </p>
 </dd>
 <dt class="hdlist1">
-<strong>-r</strong> [<em>yes|no</em>]
+<strong>-seedlength</strong> [<em>value</em>]
 </dt>
 <dd>
 <p>
-Compute reverse matches (default: no)
+Minimum length of a seed
+default: logarithm of input length to the basis alphabet size
 </p>
 </dd>
 <dt class="hdlist1">
-<strong>-p</strong> [<em>yes|no</em>]
+<strong>-diagbandwidth</strong> [<em>value</em>]
 </dt>
 <dd>
 <p>
-Compute matches on reverse strand (default: no)
+Logarithm of diagonal band width (for filter) (default: 6)
 </p>
 </dd>
 <dt class="hdlist1">
-<strong>-seedlength</strong> [<em>value</em>]
+<strong>-mincoverage</strong> [<em>value</em>]
 </dt>
 <dd>
 <p>
-Specify minimum length of seed (default: 0)
+Minimum coverage in two neighbouring diagonal bands (for filter)
+default: 2.5 x seedlength
 </p>
 </dd>
 <dt class="hdlist1">
@@ -90,7 +92,15 @@ Specify minimum length of seed (default: 0)
 </dt>
 <dd>
 <p>
-Specify maximal frequency of maximal exact matches in reference sequence (default: 0)
+Maximum frequency of a k-mer (for filter) (default: undefined)
+</p>
+</dd>
+<dt class="hdlist1">
+<strong>-memlimit</strong> [<em>string</em>]
+</dt>
+<dd>
+<p>
+Maximum memory usage to determine the maximum frequency of a k-mer (for filter) (default: undefined)
 </p>
 </dd>
 <dt class="hdlist1">
@@ -98,7 +108,7 @@ Specify maximal frequency of maximal exact matches in reference sequence (defaul
 </dt>
 <dd>
 <p>
-Extend seed to both sides using xdrop algorithm, optional parameter specifies sensitivity (default: 97)
+Extend seed to both sides using xdrop algorithm, /noptional parameter specifies sensitivity (default: 97)
 </p>
 </dd>
 <dt class="hdlist1">
@@ -106,7 +116,7 @@ Extend seed to both sides using xdrop algorithm, optional parameter specifies se
 </dt>
 <dd>
 <p>
-Specify xdrop cutoff score (argument 0 means undefined). If undefined an optimal value is determined automatically depending on the error rate
+Specify xdrop cutoff score (0 means automatically defined depending on minidentity)
 </p>
 </dd>
 <dt class="hdlist1">
@@ -114,7 +124,16 @@ Specify xdrop cutoff score (argument 0 means undefined). If undefined an optimal
 </dt>
 <dd>
 <p>
-Extend seed to both sides using greedy algorithm with trimming of waves, optional parameter specifies sensitivity (default: 97)
+Extend seed to both sides using greedy algorithm,
+optional parameter specifies sensitivity (default: 97)
+</p>
+</dd>
+<dt class="hdlist1">
+<strong>-l</strong> [<em>value</em>]
+</dt>
+<dd>
+<p>
+Minimum alignment length (for seed extension) (default: undefined)
 </p>
 </dd>
 <dt class="hdlist1">
@@ -122,8 +141,7 @@ Extend seed to both sides using greedy algorithm with trimming of waves, optiona
 </dt>
 <dd>
 <p>
-Specify minimum identity of matches
-as integer in the range from 70 to 99 (for xdrop and greedy extension) (default: 80)
+Minimum identity of matches (for seed extension) (default: 80)
 </p>
 </dd>
 <dt class="hdlist1">
@@ -131,23 +149,39 @@ as integer in the range from 70 to 99 (for xdrop and greedy extension) (default:
 </dt>
 <dd>
 <p>
-show alignments/sequences for exact matches (optional argument is number of columns per line) (default: 70)
+show alignments/sequences (optional argument is number of columns per line) (default: 70)
 </p>
 </dd>
 <dt class="hdlist1">
-<strong>-ii</strong> [<em>string</em>]
+<strong>-no-reverse</strong> [<em>yes|no</em>]
+</dt>
+<dd>
+<p>
+do not compute matches on reverse complemented strand (default: no)
+</p>
+</dd>
+<dt class="hdlist1">
+<strong>-no-forward</strong> [<em>yes|no</em>]
+</dt>
+<dd>
+<p>
+do not compute matches on forward strand (default: no)
+</p>
+</dd>
+<dt class="hdlist1">
+<strong>-parts</strong> [<em>value</em>]
 </dt>
 <dd>
 <p>
-Specify input index (default: undefined)
+Divide data into specified number of parts (default: 1)
 </p>
 </dd>
 <dt class="hdlist1">
-<strong>-scan</strong> [<em>yes|no</em>]
+<strong>-kmerfile</strong> [<em>yes|no</em>]
 </dt>
 <dd>
 <p>
-scan index rather than map it to main memory (default: no)
+Use pre-calculated k-mers from file (if exist) (default: yes)
 </p>
 </dd>
 <dt class="hdlist1">
@@ -180,11 +214,11 @@ display version information and exit
 <div class="sect1">
 <h2 id="_reporting_bugs">REPORTING BUGS</h2>
 <div class="sectionbody">
-<div class="paragraph"><p>Report bugs to <<a href="mailto:kurtz at zbh.uni-hamburg.de">kurtz at zbh.uni-hamburg.de</a>>.</p></div>
+<div class="paragraph"><p>Report bugs to <<a href="mailto:gt-users at genometools.org">gt-users at genometools.org</a>>.</p></div>
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_select.html b/www/genometools.org/htdocs/tools/gt_select.html
index 4881770..5d6e3e7 100644
--- a/www/genometools.org/htdocs/tools/gt_select.html
+++ b/www/genometools.org/htdocs/tools/gt_select.html
@@ -272,7 +272,7 @@ indicating that the node survived the filtering process.</p></div>
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_seq.html b/www/genometools.org/htdocs/tools/gt_seq.html
index 872759f..e756fd6 100644
--- a/www/genometools.org/htdocs/tools/gt_seq.html
+++ b/www/genometools.org/htdocs/tools/gt_seq.html
@@ -66,7 +66,31 @@ show all sequences (in FASTA format) (default: no)
 </dt>
 <dd>
 <p>
-show sequence with given number (in FASTA format) (default: undefined)
+show sequence with given number (sequences are counted from 1 unless -seqnum_from_0 is specified) (default: undefined)
+</p>
+</dd>
+<dt class="hdlist1">
+<strong>-showseqlength</strong> [<em>value</em>]
+</dt>
+<dd>
+<p>
+show length of sequence with given number (sequences are counted from 1 unless -seqnum_from_0 is specified) (default: undefined)
+</p>
+</dd>
+<dt class="hdlist1">
+<strong>-showseqnum_inputfile</strong> [<em>filename</em>]
+</dt>
+<dd>
+<p>
+show sequence with given numbers specified line by line in given file (sequences are counted from 1 unless -seqnum_from_0 is specified) (default: undefined)
+</p>
+</dd>
+<dt class="hdlist1">
+<strong>-seqnum_from_0</strong> [<em>yes|no</em>]
+</dt>
+<dd>
+<p>
+for options -showseqnum and -showseqnum_inputfile: count sequence numbers from 0 instead of 1 (default: no)
 </p>
 </dd>
 <dt class="hdlist1">
@@ -160,7 +184,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_seqfilter.html b/www/genometools.org/htdocs/tools/gt_seqfilter.html
index 8ca8775..d0a9f0d 100644
--- a/www/genometools.org/htdocs/tools/gt_seqfilter.html
+++ b/www/genometools.org/htdocs/tools/gt_seqfilter.html
@@ -160,7 +160,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_seqids.html b/www/genometools.org/htdocs/tools/gt_seqids.html
index 6bf82bf..3611bd1 100644
--- a/www/genometools.org/htdocs/tools/gt_seqids.html
+++ b/www/genometools.org/htdocs/tools/gt_seqids.html
@@ -71,7 +71,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_seqmutate.html b/www/genometools.org/htdocs/tools/gt_seqmutate.html
index ba891b5..29c8fa1 100644
--- a/www/genometools.org/htdocs/tools/gt_seqmutate.html
+++ b/www/genometools.org/htdocs/tools/gt_seqmutate.html
@@ -129,7 +129,7 @@ mRNA and EST sequences. Bioinformatics, 21(9):1859-1875, 2005.</em></p></div>
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_seqorder.html b/www/genometools.org/htdocs/tools/gt_seqorder.html
index 8b0a493..01b138d 100644
--- a/www/genometools.org/htdocs/tools/gt_seqorder.html
+++ b/www/genometools.org/htdocs/tools/gt_seqorder.html
@@ -38,7 +38,7 @@
 <div class="sect1">
 <h2 id="_synopsis">SYNOPSIS</h2>
 <div class="sectionbody">
-<div class="paragraph"><p><strong>gt seqorder</strong> (-invert|-sort|-revsort|-shuffle) encseq</p></div>
+<div class="paragraph"><p><strong>gt seqorder</strong> (-invert|-sort|-revsort|-shuffle|-sorthdr|-sorthdrnum) encseq</p></div>
 </div>
 </div>
 <div class="sect1">
@@ -70,6 +70,22 @@ sort sequences in reverse lexicographic order (default: no)
 </p>
 </dd>
 <dt class="hdlist1">
+<strong>-sorthdr</strong> [<em>yes|no</em>]
+</dt>
+<dd>
+<p>
+sort sequences lexicographically by sequence header (default: no)
+</p>
+</dd>
+<dt class="hdlist1">
+<strong>-sorthdrnum</strong> [<em>yes|no</em>]
+</dt>
+<dd>
+<p>
+sort sequences numerically by sequence header (default: no)
+</p>
+</dd>
+<dt class="hdlist1">
 <strong>-shuffle</strong> [<em>yes|no</em>]
 </dt>
 <dd>
@@ -103,7 +119,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_seqstat.html b/www/genometools.org/htdocs/tools/gt_seqstat.html
index 736b9da..7bd2c67 100644
--- a/www/genometools.org/htdocs/tools/gt_seqstat.html
+++ b/www/genometools.org/htdocs/tools/gt_seqstat.html
@@ -137,7 +137,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_seqtransform.html b/www/genometools.org/htdocs/tools/gt_seqtransform.html
index 0051685..2b1e0cf 100644
--- a/www/genometools.org/htdocs/tools/gt_seqtransform.html
+++ b/www/genometools.org/htdocs/tools/gt_seqtransform.html
@@ -120,7 +120,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_seqtranslate.html b/www/genometools.org/htdocs/tools/gt_seqtranslate.html
index 73c6df4..ce13fb2 100644
--- a/www/genometools.org/htdocs/tools/gt_seqtranslate.html
+++ b/www/genometools.org/htdocs/tools/gt_seqtranslate.html
@@ -119,7 +119,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_sequniq.html b/www/genometools.org/htdocs/tools/gt_sequniq.html
index 5e24b30..1d9c5f8 100644
--- a/www/genometools.org/htdocs/tools/gt_sequniq.html
+++ b/www/genometools.org/htdocs/tools/gt_sequniq.html
@@ -130,7 +130,7 @@ contained within other sequences.</p></div>
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_shredder.html b/www/genometools.org/htdocs/tools/gt_shredder.html
index 51980c1..2d00a4e 100644
--- a/www/genometools.org/htdocs/tools/gt_shredder.html
+++ b/www/genometools.org/htdocs/tools/gt_shredder.html
@@ -188,7 +188,7 @@ To get rid of such fragments use <tt>gt seqfilter</tt> (see example below).</p><
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_shulengthdist.html b/www/genometools.org/htdocs/tools/gt_shulengthdist.html
index 72c1e6a..66b2ce8 100644
--- a/www/genometools.org/htdocs/tools/gt_shulengthdist.html
+++ b/www/genometools.org/htdocs/tools/gt_shulengthdist.html
@@ -95,7 +95,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_simreads.html b/www/genometools.org/htdocs/tools/gt_simreads.html
index 3c1b419..95bf4ea 100644
--- a/www/genometools.org/htdocs/tools/gt_simreads.html
+++ b/www/genometools.org/htdocs/tools/gt_simreads.html
@@ -200,7 +200,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_sketch.html b/www/genometools.org/htdocs/tools/gt_sketch.html
index 75d087f..222cca5 100644
--- a/www/genometools.org/htdocs/tools/gt_sketch.html
+++ b/www/genometools.org/htdocs/tools/gt_sketch.html
@@ -180,7 +180,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_sketch_page.html b/www/genometools.org/htdocs/tools/gt_sketch_page.html
index 88bb650..7916585 100644
--- a/www/genometools.org/htdocs/tools/gt_sketch_page.html
+++ b/www/genometools.org/htdocs/tools/gt_sketch_page.html
@@ -164,7 +164,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_snpper.html b/www/genometools.org/htdocs/tools/gt_snpper.html
index b4a61f0..f0f0beb 100644
--- a/www/genometools.org/htdocs/tools/gt_snpper.html
+++ b/www/genometools.org/htdocs/tools/gt_snpper.html
@@ -289,7 +289,7 @@ sequence file name when it is called with the <tt>sequence_region</tt> as argume
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_speck.html b/www/genometools.org/htdocs/tools/gt_speck.html
index a6f97ff..6171f69 100644
--- a/www/genometools.org/htdocs/tools/gt_speck.html
+++ b/www/genometools.org/htdocs/tools/gt_speck.html
@@ -91,7 +91,7 @@ stop processing and report runtime errors instead of recording them in the resul
 <dd>
 <p>
 output format
-choose from: json, text, html, statsonly (default: text)
+choose from: [json, text, html, statsonly, tabular] or give path to output driver (default: text)
 </p>
 </dd>
 <dt class="hdlist1">
@@ -229,7 +229,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_splicesiteinfo.html b/www/genometools.org/htdocs/tools/gt_splicesiteinfo.html
index 99e4d6a..1e7aa99 100644
--- a/www/genometools.org/htdocs/tools/gt_splicesiteinfo.html
+++ b/www/genometools.org/htdocs/tools/gt_splicesiteinfo.html
@@ -193,7 +193,7 @@ sequence file name when it is called with the <tt>sequence_region</tt> as argume
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_splitfasta.html b/www/genometools.org/htdocs/tools/gt_splitfasta.html
index 632efde..61af6e8 100644
--- a/www/genometools.org/htdocs/tools/gt_splitfasta.html
+++ b/www/genometools.org/htdocs/tools/gt_splitfasta.html
@@ -112,7 +112,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_stat.html b/www/genometools.org/htdocs/tools/gt_stat.html
index 789cc70..8d894ff 100644
--- a/www/genometools.org/htdocs/tools/gt_stat.html
+++ b/www/genometools.org/htdocs/tools/gt_stat.html
@@ -175,7 +175,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_tagerator.html b/www/genometools.org/htdocs/tools/gt_tagerator.html
index 9bd96e8..83c8673 100644
--- a/www/genometools.org/htdocs/tools/gt_tagerator.html
+++ b/www/genometools.org/htdocs/tools/gt_tagerator.html
@@ -178,7 +178,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_tallymer.html b/www/genometools.org/htdocs/tools/gt_tallymer.html
index 960a946..6af84a8 100644
--- a/www/genometools.org/htdocs/tools/gt_tallymer.html
+++ b/www/genometools.org/htdocs/tools/gt_tallymer.html
@@ -95,7 +95,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_tallymer_mkindex.html b/www/genometools.org/htdocs/tools/gt_tallymer_mkindex.html
index 447f494..3203d6e 100644
--- a/www/genometools.org/htdocs/tools/gt_tallymer_mkindex.html
+++ b/www/genometools.org/htdocs/tools/gt_tallymer_mkindex.html
@@ -146,7 +146,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_tallymer_occratio.html b/www/genometools.org/htdocs/tools/gt_tallymer_occratio.html
index 2518087..2d6e656 100644
--- a/www/genometools.org/htdocs/tools/gt_tallymer_occratio.html
+++ b/www/genometools.org/htdocs/tools/gt_tallymer_occratio.html
@@ -136,7 +136,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_tallymer_search.html b/www/genometools.org/htdocs/tools/gt_tallymer_search.html
index d0b129f..5003f1f 100644
--- a/www/genometools.org/htdocs/tools/gt_tallymer_search.html
+++ b/www/genometools.org/htdocs/tools/gt_tallymer_search.html
@@ -111,7 +111,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_tirvish.html b/www/genometools.org/htdocs/tools/gt_tirvish.html
index fdde706..da40da4 100644
--- a/www/genometools.org/htdocs/tools/gt_tirvish.html
+++ b/www/genometools.org/htdocs/tools/gt_tirvish.html
@@ -266,7 +266,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_uniq.html b/www/genometools.org/htdocs/tools/gt_uniq.html
index 495e156..6377f6a 100644
--- a/www/genometools.org/htdocs/tools/gt_uniq.html
+++ b/www/genometools.org/htdocs/tools/gt_uniq.html
@@ -123,7 +123,7 @@ score, this one is kept.</p></div>
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_uniquesub.html b/www/genometools.org/htdocs/tools/gt_uniquesub.html
index 7c16142..92864c4 100644
--- a/www/genometools.org/htdocs/tools/gt_uniquesub.html
+++ b/www/genometools.org/htdocs/tools/gt_uniquesub.html
@@ -133,7 +133,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->
diff --git a/www/genometools.org/htdocs/tools/gt_wtree.html b/www/genometools.org/htdocs/tools/gt_wtree.html
index dff40da..f0d5353 100644
--- a/www/genometools.org/htdocs/tools/gt_wtree.html
+++ b/www/genometools.org/htdocs/tools/gt_wtree.html
@@ -79,7 +79,7 @@ display version information and exit
 </div>
 </div>
 <div id="footer">
-Copyright © 2007-2013 The <i>GenomeTools</i> authors.
+Copyright © 2007-2016 The <i>GenomeTools</i> authors.
 </div>
 </div>
 <!-- Piwik -->

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



More information about the debian-med-commit mailing list