[med-svn] [seqan2] 01/01: New upstream version 2.3.2.000platform-issues8-6f85721+dfsg

Michael Crusoe misterc-guest at moszumanska.debian.org
Fri Dec 8 12:42:01 UTC 2017


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

misterc-guest pushed a commit to annotated tag upstream/2.3.2.000platform-issues8-6f85721+dfsg
in repository seqan2.

commit 9f5dc0271574a8c6d712dbdd27d133dc86e6eb83
Author: Michael R. Crusoe <michael.crusoe at gmail.com>
Date:   Fri Dec 8 02:42:37 2017 -0800

    New upstream version 2.3.2.000platform-issues8-6f85721+dfsg
---
 CMakeLists.txt                                     |   6 +-
 apps/alf/README                                    |   8 +-
 apps/bs_tools/bisar.h                              |   2 +-
 apps/bs_tools/casbar.cpp                           |  10 +-
 apps/bs_tools/casbar.h                             |   4 +-
 apps/bs_tools/casbar_consensus_realign.h           |   2 +-
 apps/dfi/README                                    |  14 +-
 apps/fiona/compute_gain.cpp                        |   5 +-
 apps/fiona/fiona.cpp                               |  36 ++--
 apps/gustaf/README                                 |   6 +-
 apps/gustaf/create_stellarmatches_from_file.h      |   6 +-
 apps/gustaf/msplazer.h                             |  42 ++---
 apps/gustaf/msplazer_algorithms.h                  |  10 +-
 apps/gustaf/msplazer_out.h                         |  39 ++--
 apps/insegt/README                                 |  14 +-
 apps/insegt/base.h                                 |   6 +-
 apps/insegt/create_gff.h                           |   4 +-
 apps/insegt/fusion.h                               |  46 ++---
 apps/insegt/overlap_module.h                       |  32 ++--
 apps/mason2/external_split_merge.cpp               |   6 +-
 apps/mason2/external_split_merge.h                 |   6 +-
 apps/mason2/fragment_generation.h                  |   2 +
 apps/mason2/genomic_variants.cpp                   |  18 +-
 apps/mason2/mason_materializer.cpp                 |   2 +-
 apps/mason2/mason_simulator.cpp                    |   4 +-
 apps/mason2/mason_splicing.cpp                     |  18 +-
 apps/mason2/mason_variator.cpp                     |  28 +--
 apps/micro_razers/README                           |  14 +-
 apps/ngs_roi/CMakeLists.txt                        |   5 +
 apps/ngs_roi/project_spliced.cpp                   |   6 +-
 apps/ngs_roi/roi_feature_projection.cpp            |   2 +-
 apps/pair_align/lib/pair_align_lib.cpp             |   2 +-
 apps/rabema/rabema_build_gold_standard.cpp         |  12 +-
 apps/rabema/rabema_evaluate.cpp                    |  24 +--
 apps/rabema/ref_id_mapping.h                       |   6 +-
 apps/razers/README                                 |  14 +-
 apps/razers/outputFormat.h                         |   8 +-
 apps/razers/razers.h                               |  10 +-
 apps/razers/razers_matepairs.h                     |  10 +-
 apps/razers/razers_spliced.h                       |  12 +-
 apps/razers/readSimulator.h                        |   2 +-
 apps/razers/tests/run_tests.py                     |   7 +
 apps/razers3/README                                |  16 +-
 apps/razers3/razers.h                              |  30 ++--
 apps/razers3/razers_match_filter.h                 |   4 +-
 apps/razers3/razers_matepairs.h                    |  10 +-
 apps/razers3/razers_matepairs_parallel.h           |  10 +-
 apps/razers3/razers_paired_match_filter.h          |   4 +-
 apps/razers3/razers_parallel.h                     |  14 +-
 apps/razers3/readSimulator.h                       |   2 +-
 apps/sak/sak.cpp                                   |  12 +-
 apps/samcat/CMakeLists.txt                         |   5 +
 apps/searchjoin/db.h                               |  26 +--
 apps/sgip/sgip_base.h                              |   4 +-
 apps/snp_store/README                              |  12 +-
 apps/snp_store/snp_store.cpp                       |  10 +-
 apps/snp_store/snp_store.h                         |   6 +-
 apps/splazers/README                               |  15 +-
 apps/splazers/outputFormat.h                       |   8 +-
 apps/splazers/razers.h                             |  10 +-
 apps/splazers/razers_matepairs.h                   |   8 +-
 apps/splazers/razers_spliced.h                     |  24 +--
 apps/splazers/readSimulator.h                      |   2 +-
 apps/stellar/README                                |   8 +-
 apps/stellar/stellar.cpp                           |   4 +-
 apps/stellar/stellar.h                             |   8 +-
 apps/stellar/stellar_extension.h                   |   6 +-
 apps/stellar/stellar_types.h                       |   4 +-
 apps/yara/bits_context.h                           |   2 +-
 apps/yara/bits_matches.h                           |   4 +-
 apps/yara/indexer.cpp                              |   8 +-
 apps/yara/mapper.cpp                               |   8 +-
 apps/yara/tests/run_tests.py                       |  11 +-
 demos/blast/blast_in_lowlevel.cpp                  |   4 +-
 demos/dox/bam_io/bam_file_in.cpp                   |   2 +-
 demos/dox/index/find_repeats.cpp                   |   2 +-
 demos/dox/statistics/build_markov_model.cpp        |   3 +-
 demos/dox/statistics/load_markov_model.cpp         |   3 +-
 demos/dox/store/store_example.cpp                  |   4 +-
 demos/tutorial/sam_and_bam_io/base.cpp             |   6 +-
 demos/tutorial/string_sets/example_iterators.cpp   |   2 +-
 demos/unassigned_or_unused/filter_sam.cpp          |   2 +-
 demos/unassigned_or_unused/sam2svg.cpp             |   8 +-
 .../tutorial_file_io/solution2.cpp                 |  61 -------
 .../tutorial_file_io/solution3.cpp                 |  72 --------
 .../stream_compression_formats.cpp                 |  12 +-
 dox/CMakeLists.txt                                 |  54 +-----
 include/seqan/align/align_base.h                   |  13 +-
 include/seqan/align/align_interface_wrapper.h      |   3 +-
 include/seqan/align/dp_algorithm_impl.h            |   4 +-
 include/seqan/align/dp_cell.h                      |   4 +-
 include/seqan/align/dp_matrix_navigator.h          |   2 +-
 .../seqan/align/dp_matrix_navigator_score_matrix.h |   4 +-
 .../dp_matrix_navigator_score_matrix_sparse.h      |   4 +-
 .../seqan/align/dp_matrix_navigator_trace_matrix.h |   6 +-
 include/seqan/align/dp_profile.h                   |  14 +-
 include/seqan/align/evaluate_alignment.h           |   2 +-
 include/seqan/align/gaps_anchor.h                  |   8 +-
 include/seqan/align/gaps_base.h                    |   2 +-
 include/seqan/align/gaps_iterator_anchor.h         |   4 +-
 .../align/global_alignment_myers_hirschberg_impl.h |   6 +-
 include/seqan/align/global_alignment_myers_impl.h  |   2 +-
 .../local_alignment_banded_waterman_eggert_impl.h  |   4 +-
 .../align/local_alignment_waterman_eggert_impl.h   |   8 +-
 include/seqan/align_extend/align_extend.h          |  10 +-
 include/seqan/align_extend/dp_scout_xdrop.h        |   8 +-
 include/seqan/align_profile/add_to_profile.h       |   6 +-
 include/seqan/align_split/align_split_interface.h  |  10 +-
 include/seqan/bam_io/bam_alignment_record.h        |  20 +--
 include/seqan/bam_io/bam_file.h                    |   2 +-
 include/seqan/bam_io/bam_header_record.h           |   4 +-
 include/seqan/bam_io/bam_index_bai.h               |  62 +++----
 include/seqan/bam_io/bam_sam_conversion.h          |   4 +-
 include/seqan/bam_io/bam_tags_dict.h               |   6 +-
 include/seqan/bam_io/read_bam.h                    |   6 +-
 include/seqan/bam_io/read_sam.h                    |   2 +-
 include/seqan/basic/allocator_interface.h          |  40 ++---
 include/seqan/basic/alphabet_adapt_builtins.h      |  13 +-
 include/seqan/basic/alphabet_concept.h             |  24 +--
 include/seqan/basic/alphabet_math.h                |  28 +--
 include/seqan/basic/alphabet_simple_type.h         |  90 +++++++---
 include/seqan/basic/array_construct_destruct.h     |   4 +-
 include/seqan/basic/basic_stream.h                 |   7 +-
 include/seqan/basic/debug_test_system.h            |   7 +-
 include/seqan/basic/fundamental_concepts.h         |  32 +++-
 include/seqan/basic/fundamental_transport.h        |   4 +-
 include/seqan/basic/holder_tristate.h              |   6 +-
 include/seqan/basic/iterator_adaptor.h             |  12 +-
 include/seqan/basic/iterator_interface.h           |  14 +-
 include/seqan/basic/math_log_space_value.h         |   2 +-
 include/seqan/basic/pair_bit_compressed.h          |  17 +-
 include/seqan/basic/pair_packed.h                  |  16 +-
 include/seqan/basic/proxy_base.h                   |   4 +-
 include/seqan/consensus/consensus_base.h           |   2 +-
 include/seqan/consensus/consensus_library.h        |   2 +-
 include/seqan/consensus/consensus_realign.h        |   2 +-
 include/seqan/consensus/overlap_info_computation.h |   4 +-
 include/seqan/consensus/overlapper.h               |   2 +-
 include/seqan/file/file_base.h                     |   1 +
 include/seqan/file/file_page.h                     |   4 +-
 include/seqan/find/find_bom.h                      |   1 +
 include/seqan/find/find_multiple_bfam.h            |   1 +
 include/seqan/find/find_myers_ukkonen.h            |   6 +-
 include/seqan/find/find_shiftand.h                 |   4 +-
 include/seqan/find/find_shiftor.h                  |   2 +-
 include/seqan/find/find_wumanber.h                 |   4 +-
 include/seqan/gff_io/gff_io_base.h                 |  15 +-
 include/seqan/graph_align/graph_impl_align.h       |   8 +-
 .../graph_msa/graph_align_tcoffee_guidetree.h      |   2 +-
 include/seqan/graph_types/graph_interface.h        |   3 +-
 include/seqan/index/find_backtracking.h            |   2 +-
 include/seqan/index/find_pigeonhole.h              |   4 +-
 include/seqan/index/index_base.h                   |   7 +-
 include/seqan/index/index_childtab.h               |   2 +-
 include/seqan/index/index_fm_compressed_sa.h       |  10 +-
 include/seqan/index/index_fm_lf_table.h            |  20 +--
 .../seqan/index/index_fm_rank_dictionary_base.h    |   4 +-
 .../seqan/index/index_fm_rank_dictionary_levels.h  |   6 +-
 .../seqan/index/index_fm_rank_dictionary_naive.h   |   2 +-
 include/seqan/index/index_fm_rank_dictionary_wt.h  |   2 +-
 include/seqan/index/index_pizzachili.h             |   4 +
 include/seqan/index/index_qgram.h                  |  14 +-
 include/seqan/index/index_sa_bwtwalk.h             |  20 +--
 include/seqan/index/index_sa_lss.h                 |   4 +-
 include/seqan/index/index_sa_truncated.h           |   8 +-
 include/seqan/index/index_wotd.h                   |   8 +-
 include/seqan/index/shape_threshold.h              |   2 +-
 include/seqan/journaled_string_tree/delta_map.h    |   2 +-
 .../journaled_string_tree/delta_map_iterator.h     |   4 +-
 .../journaled_string_tree_traverser_util.h         |  12 +-
 include/seqan/math/math_rational.h                 |   6 +-
 include/seqan/misc/interval_tree.h                 |  12 +-
 include/seqan/misc/name_store_cache.h              |  25 ++-
 include/seqan/modifier/modifier_padding.h          |  14 +-
 include/seqan/modifier/modifier_view.h             |   4 +-
 include/seqan/parse_lm/local_match_store.h         |  22 +--
 include/seqan/pipe/pipe_source.h                   |   2 +-
 include/seqan/pipe/pool_base.h                     |   8 +-
 include/seqan/platform.h                           |  27 ++-
 include/seqan/realign/realign_base.h               |  10 +-
 include/seqan/rna_io/rna_record.h                  |  15 +-
 include/seqan/seeds/banded_chain_alignment_impl.h  |  10 +-
 include/seqan/seeds/seeds_extension.h              |   4 +-
 include/seqan/seeds/seeds_global_chaining.h        |   8 +-
 include/seqan/seq_io/bam_sam.h                     |   6 +-
 include/seqan/seq_io/sequence_file.h               |   6 +-
 include/seqan/sequence/adapt_stl_container.h       |   3 +-
 include/seqan/sequence/sequence_forwards.h         |   3 +
 include/seqan/sequence/string_cstyle.h             |   3 +-
 include/seqan/sequence/string_packed.h             |  12 +-
 include/seqan/sequence/string_packed_old.h         |   2 +-
 include/seqan/sequence/string_set_base.h           |   5 +-
 include/seqan/sequence/string_set_owner.h          |   6 +
 include/seqan/simd.h                               |  12 ++
 include/seqan/simd/simd_base.h                     |   4 +
 include/seqan/simd/simd_base_seqan_impl_avx2.h     | 179 ++++++++++++------
 include/seqan/simd/simd_base_seqan_impl_sse4.2.h   | 165 ++++++++++++-----
 include/seqan/simd/simd_base_seqan_interface.h     |  12 ++
 include/seqan/simd/simd_base_umesimd_impl.h        |  11 ++
 include/seqan/statistics/statistics_markov_model.h |   2 +-
 include/seqan/store/store_align.h                  |   4 +-
 include/seqan/store/store_all.h                    |  50 +++---
 include/seqan/store/store_annotation.h             |   4 +-
 include/seqan/store/store_contig.h                 |   6 +-
 include/seqan/store/store_io_sam.h                 |   6 +-
 include/seqan/store/store_io_ucsc.h                |   2 +-
 include/seqan/store/store_matepair.h               |   2 +-
 include/seqan/store/store_read.h                   |   2 +-
 include/seqan/stream.h                             |   6 +
 include/seqan/stream/lexical_cast.h                |   8 +-
 include/seqan/stream/stream_compressor.h           |   8 +-
 include/seqan/stream/tokenization.h                |  10 +-
 include/seqan/system/file_async.h                  |  13 +-
 include/seqan/tabix_io/tabix_index_tbi.h           |  10 +-
 .../Infrastructure/Use/CustomBuildSystem.rst       |  25 +++
 .../source/Infrastructure/Use/FindSeqAnCMake.rst   |  24 +++
 .../DataStructures/Indices/StringIndices.rst       |  16 ++
 tests/align/CMakeLists.txt                         |   6 +
 tests/align/test_align_simd.h                      |  14 +-
 .../test_alignment_algorithms_band_position.h      |  34 ++--
 tests/align/test_alignment_dp_cell.h               |   2 +-
 tests/align/test_alignment_dp_matrix_navigator.h   |  24 +--
 tests/arg_parse/test_arg_parse_ctd_support.h       |   3 +-
 tests/bam_io/test_bam_file.h                       |  26 +--
 tests/bam_io/test_bam_index.h                      |  15 +-
 tests/bam_io/test_bam_io.cpp                       |   2 +-
 tests/bam_io/test_bam_sam_conversion.h             |  11 +-
 tests/bam_io/test_read_bam.h                       |  10 +-
 tests/bam_io/test_write_bam.h                      |   6 +-
 tests/basic/test_basic.cpp                         |   1 -
 tests/basic/test_basic_alphabet.cpp                |   6 +-
 tests/basic/test_basic_alphabet.h                  |  50 +-----
 tests/basic/test_basic_alphabet_adapt_builtins.h   | 199 ---------------------
 tests/basic/test_basic_alphabet_math.h             |  29 +--
 tests/basic/test_basic_alphabet_residue.h          |  74 ++------
 tests/basic/test_basic_concept.cpp                 |   4 +-
 tests/basic/test_basic_concepts.h                  |  39 ++++
 tests/basic/test_basic_exception.h                 |   6 +-
 tests/basic/test_basic_iterator.h                  |   2 +-
 tests/bed_io/test_bed_io.cpp                       |   8 +-
 tests/blast/test_blast_input.h                     |   8 +-
 tests/consensus/test_consensus.h                   |  27 +--
 tests/consensus/test_consensus_realign.h           |   5 +-
 tests/gff_io/test_gff_io.h                         |  37 ++--
 tests/index/test_index_creation.h                  |   6 +-
 tests/index/test_index_helpers.h                   |   8 +-
 tests/index/test_qgram_index.h                     |  23 +--
 tests/index/test_sa_bwtwalk.h                      |   2 +-
 tests/journaled_string_tree/test_delta_map.h       |  14 +-
 .../test_journaled_string_tree.h                   |   2 +-
 tests/misc/test_misc.cpp                           |   6 +-
 tests/parse_lm/test_parse_lm.h                     |   2 +-
 tests/rna_io/CMakeLists.txt                        |   4 +-
 tests/roi_io/test_roi_io.cpp                       |   8 +-
 tests/score/test_score.cpp                         |   9 +-
 tests/seeds/test_align_banded_chain_impl.cpp       |   2 +-
 tests/seq_io/test_fai_index.h                      |  24 +--
 tests/seq_io/test_sequence_file.h                  |  36 ++--
 tests/sequence/test_sequence.h                     |  53 ++----
 tests/sequence/test_string_packed_extension.h      |   4 +-
 tests/sequence/test_string_set.h                   |  67 ++-----
 tests/simd/CMakeLists.txt                          |   5 +-
 tests/simd/test_simd_vector.h                      |  79 +++++---
 tests/statistics/test_statistics_base.h            |   3 +-
 tests/store/test_store_io.h                        |  92 +++++-----
 tests/store/test_store_io_bam.h                    |  10 +-
 tests/stream/test_stream_lexical_cast.h            |   4 +-
 tests/stream/test_stream_tokenization.h            |  60 +++----
 tests/stream/test_stream_virtual_stream.h          |  15 +-
 tests/tabix_io/test_tabix_io.h                     |  11 +-
 tests/translation/test_translation.h               |   3 +-
 tests/ucsc_io/test_ucsc_io.cpp                     |  24 +--
 tests/vcf_io/test_vcf_io.h                         |  16 +-
 util/cmake/SeqAnBuildSystem.cmake                  |  16 +-
 util/cmake/SeqAnContribs.cmake                     | 113 +++++-------
 util/cmake/SeqAnSimdUtility.cmake                  |  31 ++--
 util/cmake/seqan-config.cmake                      |  14 +-
 util/py_lib/CMakeLists.txt                         |   5 +
 278 files changed, 1964 insertions(+), 2039 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index fc06439..2e2511e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -135,8 +135,10 @@ if ("${SEQAN_BUILD_SYSTEM}" STREQUAL "DEVELOP")
     message (STATUS "Configuring demos")
     add_subdirectory (demos)
 
-    message (STATUS "Configuring manual")
-    add_subdirectory (manual)
+    if (NOT SEQAN_NO_DOX)
+        message (STATUS "Configuring manual")
+        add_subdirectory (manual)
+    endif ()
 endif ()
 
 if ((("${SEQAN_BUILD_SYSTEM}" STREQUAL "DEVELOP") OR
diff --git a/apps/alf/README b/apps/alf/README
index 95f9f30..d2b0bbd 100644
--- a/apps/alf/README
+++ b/apps/alf/README
@@ -28,12 +28,12 @@ N2 similarity measure.
 ---------------------------------------------------------------------------
 
 ALF is distributed with SeqAn - The C++ Sequence Analysis Library (see
-http://www.seqan.de). To build ALF from SVN do the following:
+http://www.seqan.de). To build ALF from Git do the following:
 
-  1) svn co http://svn.mi.fu-berlin.de/seqan/trunk/seqan
+  1) git clone https://github.com/seqan/seqan.git
   2) mkdir -p build/Release
   3) cd build/Release
-  4) cmake ../.. -DCMAKE_BUILD_TYPE=Release
+  4) cmake ../../seqan -DCMAKE_BUILD_TYPE=Release
   5) make alf
   6) ./apps/alf/alf --help
 
@@ -42,7 +42,7 @@ was dumped.
 
 For more information about retrieving SeqAn and prerequisites please visit
 
-  http://trac.seqan.de/wiki/Tutorial/GettingStarted
+  https://www.seqan.de/getting-started/
 
 ---------------------------------------------------------------------------
 3. Usage
diff --git a/apps/bs_tools/bisar.h b/apps/bs_tools/bisar.h
index 7ac9c59..6b8b261 100644
--- a/apps/bs_tools/bisar.h
+++ b/apps/bs_tools/bisar.h
@@ -1098,7 +1098,7 @@ postProcessMain(TOptions &options, TModel const &)
         if (hasFlagUnmapped(record)) continue;     // Read is unmapped
         // Get readId (could be curr. read or mate) -> Only Id, seq. we will get the original from readSeqStore
         // If read name not found, skip entry
-        if (!getIdByName(store.readNameStore, record.qName, readId, readNameCache)) continue;
+        if (!getIdByName(readId, readNameCache, record.qName)) continue;
 
         if (hasFlagMultiple(record))   //)    // If paired: Get readId for current mate
         {
diff --git a/apps/bs_tools/casbar.cpp b/apps/bs_tools/casbar.cpp
index 15f25a6..3bfd9df 100755
--- a/apps/bs_tools/casbar.cpp
+++ b/apps/bs_tools/casbar.cpp
@@ -165,8 +165,8 @@ copyNextWindowMatchesAndReads(TFragmentStore &fragmentStore,
     --itG;
 
     // We will use minCoord/maxCoord to store the temporarily minimal and maximal coordinates in the window.
-    int minCoord = maxValue<int>();
-    int maxCoord = minValue<int>();
+    int minCoord = std::numeric_limits<int>::max();
+    int maxCoord = std::numeric_limits<int>::min();
     //CharString str = "discBef";
     //_dumpMatches(fragmentStore, str);
 
@@ -192,9 +192,9 @@ copyNextWindowMatchesAndReads(TFragmentStore &fragmentStore,
     }
 
     // Write minimal and maximal coordinate from reads in this window to options.minCoord/options.maxCoord.
-    if (minCoord != maxValue<int>())
+    if (minCoord != std::numeric_limits<int>::max())
         options.minCoord = minCoord;
-    if (maxCoord != minValue<int>())
+    if (maxCoord != std::numeric_limits<int>::min())
         options.maxCoord = maxCoord;
 
     if(options._debugLevel > 1)
@@ -625,7 +625,7 @@ detectSNPsForContig(seqan::VcfFileOut & vcfFileOut,
     TReadStore tmpRs;
     TReadSeqStore tmpReads;     // Something went wrong when keeping all reads of contig, so keep it like that for the moment
     TSetContigAnchorGaps tmpSetContigAnchorGaps;
-    options.minCoord = MaxValue<unsigned>::VALUE;
+    options.minCoord = std::numeric_limits<unsigned>::max();
     options.maxCoord = 0;
 
     // snp calling is done for all positions between windowBegin and windowEnd
diff --git a/apps/bs_tools/casbar.h b/apps/bs_tools/casbar.h
index 1831843..8398799 100755
--- a/apps/bs_tools/casbar.h
+++ b/apps/bs_tools/casbar.h
@@ -180,7 +180,7 @@ struct SNPCallingOptions
         pHomoSnp(0.0005),
         //
         maxHitLength(1),
-        minCoord(maxValue<unsigned>()),
+        minCoord(std::numeric_limits<unsigned>::max()),
         maxCoord(0),
         windowSize(100000),  // 10000?
         windowBuff(70)
@@ -684,7 +684,7 @@ int readMatchesFromSamBam(
                 options.maxHitLength = endPos - beginPos;
 
             // remember min and max positions seen
-            if(beginPos < (TContigPos)options.minCoord || options.minCoord == maxValue<unsigned>()) options.minCoord = (unsigned)beginPos;
+            if(beginPos < (TContigPos)options.minCoord || options.minCoord == numeric_limits<unsigned>::max()) options.minCoord = (unsigned)beginPos;
             if(endPos > (TContigPos)options.maxCoord) options.maxCoord =  (unsigned)endPos;
 
             // alignedReadStoreElement
diff --git a/apps/bs_tools/casbar_consensus_realign.h b/apps/bs_tools/casbar_consensus_realign.h
index 32511e0..c177c1a 100644
--- a/apps/bs_tools/casbar_consensus_realign.h
+++ b/apps/bs_tools/casbar_consensus_realign.h
@@ -628,7 +628,7 @@ reAlign(FragmentStore<TSpec, TConfig> & fragStore,
 	// Copy all reads belonging to this contig and reverse complement them if necessary.
 	TAlignedReadStore contigReads;  // TODO(holtgrew): Rather contigAlignedReads?
 	TReadPos maxPos = 0;
-	TReadPos minPos = MaxValue<TReadPos>::VALUE;
+	TReadPos minPos = std::numeric_limits<TReadPos>::max();
 	for (; alignIt != alignItEnd; ++alignIt) {
 		if (alignIt->beginPos > alignIt->endPos) {
 			reverseComplement(fragStore.readSeqStore[alignIt->readId]);
diff --git a/apps/dfi/README b/apps/dfi/README
index 95e4aad..654e11e 100644
--- a/apps/dfi/README
+++ b/apps/dfi/README
@@ -49,16 +49,14 @@ http://www.seqan.de). To compile DFI on your system do the following:
   5)  cd dfi
   6)  ./dfi --help
 
-Alternatively you can check out the latest SVN version of DFI and SeqAn
+Alternatively you can check out the latest Git version of DFI and SeqAn
 with:
 
-  1)  svn co http://svn.mi.fu-berlin.de/seqan/trunk/seqan
-  2)  cd seqan
-  3)  make forwards
-  4)  cd projects/library/apps
-  5)  make dfi
-  6)  cd dfi
-  7)  ./dfi --help
+  1)  git clone https://github.com/seqan/seqan.git
+  2)  mkdir seqan/buld; cd seqan/build
+  3)  cmake .. -DCMAKE_BUILD_TYPE=Release
+  4)  make dfi
+  5)  ./bin/dfi --help
 
 On success, an executable file dfi was build and a brief usage description
 was dumped.
diff --git a/apps/fiona/compute_gain.cpp b/apps/fiona/compute_gain.cpp
index 2db17a7..523daa5 100644
--- a/apps/fiona/compute_gain.cpp
+++ b/apps/fiona/compute_gain.cpp
@@ -956,7 +956,7 @@ int main(int argc, char const ** argv)
     }
 
     String<unsigned> idMap;
-    resize(idMap, length(contigNames(context(inPre))), maxValue<unsigned>());
+    resize(idMap, length(contigNames(context(inPre))), std::numeric_limits<unsigned>::max());
     for (unsigned i = 0; i < length(ids); ++i)
     {
         trimSeqHeaderToId(ids[i]);
@@ -990,9 +990,6 @@ int main(int argc, char const ** argv)
     bool stop = false;
     bool error = false;
 
-    // Format recognition tag used for sequence file I/O.
-    seqan::AutoSeqFormat seqFormatTag;
-
     uint64_t chunksLeftToRead = options.maxChunks;
     --chunksLeftToRead;
 
diff --git a/apps/fiona/fiona.cpp b/apps/fiona/fiona.cpp
index b468b16..5aeae30 100644
--- a/apps/fiona/fiona.cpp
+++ b/apps/fiona/fiona.cpp
@@ -994,7 +994,7 @@ inline void fillCorrection(TCorrection &newCorrection,
 {
     //TValue empty=maxValue(readLength);
     //fill Correction struct
-    newCorrection.nextCorrection = maxValue<unsigned>();  // it will be the last correction in the linked list
+    newCorrection.nextCorrection = std::numeric_limits<unsigned>::max();  // it will be the last correction in the linked list
 #ifndef FIONA_CONSENSUS_REDUCE_MEMORY
     newCorrection.correctReadId = correctReadId;        // only for debugging purposes
     newCorrection.correctPos = correctPos;
@@ -1246,7 +1246,7 @@ getFoundCorrections(
     unsigned numCorrections = 0;
 
     TValue currentPos = firstCorrectionForRead[erroneousReadId];
-    while (currentPos != maxValue<TValue>())
+    while (currentPos != std::numeric_limits<TValue>::max())
     {
         if (correctionList[currentPos].errorPos == errorPos)
         {
@@ -1302,9 +1302,9 @@ inline void addCorrectionEntry(String<TCorrection> &correctionList,
     //TValue empty=maxValue(erroneousReadId);
     //first check if a Correction for erroneousReadId exists already
 
-    TValue insertLinkAt = maxValue<TValue>();
+    TValue insertLinkAt = std::numeric_limits<TValue>::max();
     TValue currentPos = firstCorrectionForRead[erroneousReadId];
-    while (currentPos != maxValue<TValue>())
+    while (currentPos != std::numeric_limits<TValue>::max())
     {
         TCorrection &corr = correctionList[currentPos];
         if (existsCorrectionAtPos(
@@ -1354,7 +1354,7 @@ inline void addCorrectionEntry(String<TCorrection> &correctionList,
     }
     appendValue(correctionList, newCorrection);
 
-    if (insertLinkAt == maxValue<TValue>())
+    if (insertLinkAt == std::numeric_limits<TValue>::max())
         firstCorrectionForRead[erroneousReadId] = length(correctionList) - 1;
     else
         correctionList[insertLinkAt].nextCorrection = length(correctionList) - 1;
@@ -1423,7 +1423,7 @@ inline void addCorrectionEntry(String<TCorrection> &correctionList,
         inline void  _testCorrectionStruct(String<TCorrection> &correctionList, String<TValue> &firstCorrectionForRead,TReadStore &store)
 	{
 		// we assume we work with three reads here
-		TValue empty = maxValue<TValue>();
+		TValue empty = std::numeric_limits<TValue>::max();
 		appendValue(firstCorrectionForRead,empty);
 		appendValue(firstCorrectionForRead,empty);
 		appendValue(firstCorrectionForRead,empty);
@@ -1574,12 +1574,12 @@ inline void _dumpCorrectionList(
     for (unsigned int i =0;i< length(firstCorrectionForRead);i++)
     {
         std::cerr << "Found "<<length(correctionList)<<" corrections. Look at readID: " <<i<<std::endl;
-        if (firstCorrectionForRead[i] != maxValue<TValue>())
+        if (firstCorrectionForRead[i] != std::numeric_limits<TValue>::max())
         {
             std::cerr << "found Correction for read "<<i<< " at pos (in String<corrections>) "<< firstCorrectionForRead[i] << std::endl;
             _dumpCorrectionIndelPos(correctionList[firstCorrectionForRead[i]],i,store);
             TValue next = correctionList[firstCorrectionForRead[i]].nextCorrection;
-            while (next != maxValue<TValue>())
+            while (next != std::numeric_limits<TValue>::max())
             {
                 std::cerr << "found Correction for read "<<i<< " at pos (in String<corrections>) "<< next << std::endl;
                 _dumpCorrectionIndelPos(correctionList[next],i,store);
@@ -1699,7 +1699,7 @@ inline unsigned applyReadErrorCorrections(String<TCorrection> const &correctionL
     {
         // descend if correction exists
         TValue corrId = firstCorrectionForRead[readId];
-        if (corrId == maxValue<TValue>())
+        if (corrId == std::numeric_limits<TValue>::max())
             continue;
 
         // step through linked list and collect corrections
@@ -1717,7 +1717,7 @@ inline unsigned applyReadErrorCorrections(String<TCorrection> const &correctionL
 #endif
             //_dumpCorrectionIndelPos(correction, readId);
             corrId = correction.nextCorrection;
-        } while (corrId != maxValue<TValue>());
+        } while (corrId != std::numeric_limits<TValue>::max());
 
         //sorting by Position first to get the best correction per Position
         //sorting is done arbitrarily from large to small(right to left)
@@ -2346,7 +2346,7 @@ void computeCutoffRepeats(
 	TGenomeLen genomelength)
 {
 	clear(thresholds);
-	resize(thresholds, kmax + 1, maxValue<typename Value<TCuttoffs>::Type>());
+	resize(thresholds, kmax + 1, std::numeric_limits<typename Value<TCuttoffs>::Type>::max());
 	for (int i = kmin; i <= kmax; i++)
 		thresholds[i] = OddsRepeatCutoff(odds, expected[i], errorrate, i, genomelength); // Dave: I added "/ 3", otherwise this cutoff seems to have no effect
 }
@@ -3743,11 +3743,11 @@ if (LOOP_LEVEL != 0)
                             if (ordValue(*itE) == 4) continue;
                         #endif
                             if (*itE != *itCLeft)
-                                if (--acceptedMismatchesLeft == MaxValue<unsigned>::VALUE) break;
+                                if (--acceptedMismatchesLeft == std::numeric_limits<unsigned>::max()) break;
                         }
                         
                         // too many mismatches left of the common prefix?
-                        if (acceptedMismatchesLeft == MaxValue<unsigned>::VALUE)
+                        if (acceptedMismatchesLeft == std::numeric_limits<unsigned>::max())
                             continue;
                     #endif
 
@@ -3834,12 +3834,12 @@ if (LOOP_LEVEL != 0)
                                 if (ordValue(*itE) == 4) continue;
                             #endif
                                 if (*itE != *itC)
-                                    if (--acceptedMismatches == MaxValue<unsigned>::VALUE)
+                                    if (--acceptedMismatches == std::numeric_limits<unsigned>::max())
                                         break;
                             }
 
                             // too many mismatches right of the common prefix?
-                            if (acceptedMismatches == MaxValue<unsigned>::VALUE)
+                            if (acceptedMismatches == std::numeric_limits<unsigned>::max())
                                 continue;
 
                             errorsRight = acceptedMismatchesLeft - acceptedMismatches;
@@ -4216,7 +4216,7 @@ unsigned correctReads(
     // if no occurrence exists set the enrty to maxINt Value
     String<unsigned int> firstCorrectionForRead; // should this really be always created anew for different cycles, could be created outside correctReads?
     // we assume we work with three reads here
-    resize(firstCorrectionForRead, readCount, maxValue<unsigned>(), Exact());
+    resize(firstCorrectionForRead, readCount, std::numeric_limits<unsigned>::max(), Exact());
 
     // Determine the number of allowed corrections per round per read, depending on the read length and the
     // configuration in options.relativeErrorsToCorrect.  We set a hard lower limit of 2.
@@ -4356,7 +4356,7 @@ unsigned correctReads(
 	}
     else
     {
-        resize(options.repeatCutoffs, options.toLevel + 2, maxValue<unsigned>());
+        resize(options.repeatCutoffs, options.toLevel + 2, std::numeric_limits<unsigned>::max());
     }
 
     if (options.verbosity >= 2)
@@ -4969,7 +4969,7 @@ unsigned correctReads(
 	unsigned readCorrections=0;
     for (unsigned a = 0; a < length(firstCorrectionForRead); ++a)
     {
-        if (firstCorrectionForRead[a] == maxValue<unsigned>()) continue;
+        if (firstCorrectionForRead[a] == std::numeric_limits<unsigned>::max()) continue;
         ++readCorrections;
     }
 
diff --git a/apps/gustaf/README b/apps/gustaf/README
index 6bb02b1..cf39ad2 100644
--- a/apps/gustaf/README
+++ b/apps/gustaf/README
@@ -48,10 +48,10 @@ http://www.seqan.de/downloads/projects.html
 
 Gustaf is distributed with SeqAn - The C++ Sequence Analysis Library (see
 http://www.seqan.de). To build Gustaf yourself, you can check out the latest
-SVN version of Gustaf and SeqAn with:
+Git version of Gustaf and SeqAn with:
 
-  1)  svn co http://svn.mi.fu-berlin.de/seqan/trunk/seqan
-  2)  cd seqan/build/
+  1)  git clone https://github.com/seqan/seqan.git
+  2)  mkdir seqan/buld; cd seqan/build
   3)  cmake .. -DCMAKE_BUILD_TYPE=Release
   4)  make gustaf
   5)  ./bin/gustaf --help
diff --git a/apps/gustaf/create_stellarmatches_from_file.h b/apps/gustaf/create_stellarmatches_from_file.h
index 627ff74..984c5d5 100644
--- a/apps/gustaf/create_stellarmatches_from_file.h
+++ b/apps/gustaf/create_stellarmatches_from_file.h
@@ -92,8 +92,8 @@ bool _createStellarMatches(StringSet<TSequence> & queries,
 		TInfix queryInf;
 
 		// Take match query ID and find the right index in queries
-		unsigned iDB = maxValue<unsigned>();     // position of database sequence in databases
-		unsigned iQuery = maxValue<unsigned>();  // position of query/read sequence in queries
+		unsigned iDB = std::numeric_limits<unsigned>::max();     // position of database sequence in databases
+		unsigned iQuery = std::numeric_limits<unsigned>::max();  // position of query/read sequence in queries
 
 		// Takes the short chromosome Id (from the Stellar match file) and looks up the corresponding long chromosome
 		// Id entry from the reference input file
@@ -118,7 +118,7 @@ bool _createStellarMatches(StringSet<TSequence> & queries,
 		}
 		// Sanity check for read and query Id:
 		// skips entry if no corresponding entry in the input file could not be found, else creates StellarMatch object
-		if (iDB == maxValue<unsigned>() || iQuery == maxValue<unsigned>())
+		if (iDB == std::numeric_limits<unsigned>::max() || iQuery == std::numeric_limits<unsigned>::max())
 		{
 		    std::cerr << "Read or database does not exist for match: " << it - begin(lmStore.matchStore, Standard())
 			      << " subjectId: " << lmStore.sequenceNameStore[(*it).subjectId]
diff --git a/apps/gustaf/msplazer.h b/apps/gustaf/msplazer.h
index dfa80eb..210463d 100644
--- a/apps/gustaf/msplazer.h
+++ b/apps/gustaf/msplazer.h
@@ -193,15 +193,15 @@ struct Breakpoint
         midPosStrand(false),
         startSeqPos(0),
         endSeqPos(0),
-        dupTargetPos(maxValue<unsigned>()),
-        dupMiddlePos(maxValue<unsigned>()),
+        dupTargetPos(std::numeric_limits<unsigned>::max()),
+        dupMiddlePos(std::numeric_limits<unsigned>::max()),
         readStartPos(0),
         readEndPos(0),
-        cipos(maxValue<unsigned>()),
-        ciend(maxValue<unsigned>()),
-        cimiddle(maxValue<unsigned>()),
+        cipos(std::numeric_limits<unsigned>::max()),
+        ciend(std::numeric_limits<unsigned>::max()),
+        cimiddle(std::numeric_limits<unsigned>::max()),
         support(1),
-        similar(maxValue<unsigned>()),
+        similar(std::numeric_limits<unsigned>::max()),
         svtype(INVALID),
         insertionSeq("NNNN"),
         revStrandDel(false),
@@ -227,15 +227,15 @@ struct Breakpoint
         midPosStrand(false),
         startSeqPos(sPos),
         endSeqPos(ePos),
-        dupTargetPos(maxValue<unsigned>()),
-        dupMiddlePos(maxValue<unsigned>()),
+        dupTargetPos(std::numeric_limits<unsigned>::max()),
+        dupMiddlePos(std::numeric_limits<unsigned>::max()),
         readStartPos(rsPos),
         readEndPos(rePos),
-        cipos(maxValue<unsigned>()),
-        ciend(maxValue<unsigned>()),
-        cimiddle(maxValue<unsigned>()),
+        cipos(std::numeric_limits<unsigned>::max()),
+        ciend(std::numeric_limits<unsigned>::max()),
+        cimiddle(std::numeric_limits<unsigned>::max()),
         support(1),
-        similar(maxValue<unsigned>()),
+        similar(std::numeric_limits<unsigned>::max()),
         svtype(INVALID),
         insertionSeq("NNNN"),
         revStrandDel(false),
@@ -262,15 +262,15 @@ struct Breakpoint
         midPosStrand(false),
         startSeqPos(sPos),
         endSeqPos(ePos),
-        dupTargetPos(maxValue<unsigned>()),
-        dupMiddlePos(maxValue<unsigned>()),
+        dupTargetPos(std::numeric_limits<unsigned>::max()),
+        dupMiddlePos(std::numeric_limits<unsigned>::max()),
         readStartPos(rsPos),
         readEndPos(rePos),
-        cipos(maxValue<unsigned>()),
-        ciend(maxValue<unsigned>()),
-        cimiddle(maxValue<unsigned>()),
+        cipos(std::numeric_limits<unsigned>::max()),
+        ciend(std::numeric_limits<unsigned>::max()),
+        cimiddle(std::numeric_limits<unsigned>::max()),
         support(1),
-        similar(maxValue<unsigned>()),
+        similar(std::numeric_limits<unsigned>::max()),
         svtype(INVALID),
         insertionSeq("NNNN"),
         revStrandDel(false),
@@ -589,7 +589,7 @@ inline bool _breakendSupport(Breakpoint<TId, TPos> & be, Breakpoint<TId, TPos> &
         return false;
     // If bp is duplication or translocation, also check targetpos
     if ((bp.svtype == TBreakpoint::DISPDUPLICATION || bp.svtype == TBreakpoint::TRANSLOCATION || bp.svtype == TBreakpoint::INTERTRANSLOCATION)
-            && bp.dupMiddlePos != maxValue<unsigned>())
+            && bp.dupMiddlePos != std::numeric_limits<unsigned>::max())
         return (_posInSameRange(be.startSeqPos, bp.startSeqPos, range) ||
                 _posInSameRange(be.startSeqPos, bp.endSeqPos, range)   ||
                 _posInSameRange(be.startSeqPos, bp.dupMiddlePos, range) );
@@ -616,7 +616,7 @@ inline bool _similarBreakpoints(Breakpoint<TId, TPos> & bp1, Breakpoint<TId, TPo
                 && _posInSameRange(length(bp1.insertionSeq), length(bp2.insertionSeq), range));
     if (bp1.svtype == TBreakpoint::DISPDUPLICATION || bp1.svtype == TBreakpoint::TRANSLOCATION)
     {
-        if (bp1.dupMiddlePos != maxValue<unsigned>() && bp2.dupMiddlePos != maxValue<unsigned>())
+        if (bp1.dupMiddlePos != std::numeric_limits<unsigned>::max() && bp2.dupMiddlePos != std::numeric_limits<unsigned>::max())
             return (_posInSameRange(bp1.dupMiddlePos, bp2.dupMiddlePos, range)
                     && _posInSameRange(bp1.startSeqPos, bp2.startSeqPos, range)
                     && _posInSameRange(bp1.endSeqPos, bp2.endSeqPos, range));
@@ -679,7 +679,7 @@ TStream & operator<<(TStream & out, Breakpoint<TSequence, TId> const & value)
     out << value.startSeqId << " ( " << value.startSeqStrand << " ) " << " --> " << value.endSeqId << " ( " <<
     value.endSeqStrand << " ) " << std::endl;
     out << " ( " << value.startSeqPos + 1 << " ) --> ( " << value.endSeqPos + 1 << " ) " << std::endl;
-    if (value.dupMiddlePos != maxValue<unsigned>())
+    if (value.dupMiddlePos != std::numeric_limits<unsigned>::max())
         out << "dup middle pos " << value.dupMiddlePos + 1 << std::endl;
     out << " ( " << value.readStartPos + 1 << " ) --> ( " << value.readEndPos + 1 << " ) " << std::endl;
     switch (value.svtype)
diff --git a/apps/gustaf/msplazer_algorithms.h b/apps/gustaf/msplazer_algorithms.h
index 950c407..ee45073 100644
--- a/apps/gustaf/msplazer_algorithms.h
+++ b/apps/gustaf/msplazer_algorithms.h
@@ -424,7 +424,7 @@ void _chainMatches(QueryMatches<StellarMatch<TSequence, TId> > & queryMatches,
                     // Note: old match scores are already distances, new score is a negative score bc. we use scoring sceme (0, -1, -1, -1)
                     auto tmp = _splitAlignmentImpl(row(match1, 0), row(match1, 1), row(match2, 0), row(match2, 1),
                                                    scoreType, AlignConfig<false, false, true, true>());
-                    SEQAN_ASSERT_NEQ(std::get<0>(tmp) + std::get<1>(tmp), maxValue<int>());
+                    SEQAN_ASSERT_NEQ(std::get<0>(tmp) + std::get<1>(tmp), std::numeric_limits<int>::max());
                     score = std::get<0>(tmp) + std::get<1>(tmp) + (static_cast<int>(matchDistanceScores[m1]) + static_cast<int>(matchDistanceScores[m2]));
                     splitPos = endPosition(row(match1, 0)) + stMatch1.begin2;
 
@@ -1305,7 +1305,7 @@ inline void _inferComplexBP(String<TBreakpoint> & globalBreakpoints, TBreakpoint
     // Append breakpoint if new
     if (keepBP)
     {
-        if (bp.similar == maxValue<unsigned>())
+        if (bp.similar == std::numeric_limits<unsigned>::max())
         {
             bp.similar = similarBPId;
             ++similarBPId;
@@ -1339,7 +1339,7 @@ inline void _insertBreakpoint(String<TBreakpoint> & countedBP, TBreakpoint & bp,
         else if (_similarBreakpoints(bp, tempBP, bpPosRange))
         {
             appendSupportId(tempBP, bp.supportIds);
-	    if (bp.dupMiddlePos != maxValue<unsigned>() && tempBP.dupMiddlePos != maxValue<unsigned>()
+	    if (bp.dupMiddlePos != std::numeric_limits<unsigned>::max() && tempBP.dupMiddlePos != std::numeric_limits<unsigned>::max()
 		&& bp.dupMiddlePos < tempBP.dupMiddlePos)
             {
                 tempBP.dupMiddlePos = bp.dupMiddlePos; 
@@ -1358,7 +1358,7 @@ inline void _insertBreakpoint(String<TBreakpoint> & countedBP, TBreakpoint & bp,
     // Append breakpoint if new
     if (newBP)
     {
-        if (bp.similar == maxValue<unsigned>())
+        if (bp.similar == std::numeric_limits<unsigned>::max())
         {
             bp.similar = similarBPId;
             ++similarBPId;
@@ -1504,7 +1504,7 @@ bool _findBestChain(TMSplazerChain & queryChain, String<TMatch> & stellarMatches
         // Getting vertex descriptor of anchestor
         spVertex2 = getProperty(queryChain.predMap, spVertex1);
         // if vertex descriptor has max value then there is no (shortest) path from start to end.
-        if (spVertex2 == maxValue<TVertexDescriptor>())
+        if (spVertex2 == std::numeric_limits<TVertexDescriptor>::max())
         {
             // queryChain.isPartial = true;
             ++bcc;
diff --git a/apps/gustaf/msplazer_out.h b/apps/gustaf/msplazer_out.h
index bcadb7c..49ef6d2 100644
--- a/apps/gustaf/msplazer_out.h
+++ b/apps/gustaf/msplazer_out.h
@@ -227,7 +227,7 @@ inline void _fillGffRecordDuplication(GffRecord & record, TBreakpoint & bp, unsi
     record.ref = sId;
     record.source = "GUSTAF";
     record.type = "duplication";
-    TPos begin, end, target = maxValue<unsigned>();
+    TPos begin, end, target = std::numeric_limits<unsigned>::max();
     // Using set function for VCF duplication to set positions
     _setVcfRecordDuplicationPos(bp, begin, end, target);
     if (begin > end)
@@ -244,7 +244,7 @@ inline void _fillGffRecordDuplication(GffRecord & record, TBreakpoint & bp, unsi
     record.strand = '+';
     appendValue(record.tagNames, "ID");
     appendValue(record.tagValues, toString(id));
-    if (target != maxValue<unsigned>())
+    if (target != std::numeric_limits<unsigned>::max())
     {
         appendValue(record.tagNames, "size");
         appendValue(record.tagValues, toString((end - begin)));
@@ -409,7 +409,7 @@ inline void _fillVcfRecordInsertion(VcfRecord & record, TBreakpoint & bp, TSeque
     ss << "SVTYPE=INS";
     SEQAN_ASSERT_GEQ_MSG(bp.endSeqPos, bp.startSeqPos, "Insertion end position smaller than begin position!");
     ss << ";SVLEN=" << length(bp.insertionSeq);
-    //if (bp.similar != maxValue<unsigned>())
+    //if (bp.similar != std::numeric_limits<unsigned>::max())
         ss << ";BM=" << bp.similar;
     ss << ";DP=" << bp.support;
     record.info = ss.str();
@@ -444,7 +444,7 @@ inline void _fillVcfRecordDeletion(VcfRecord & record, TBreakpoint & bp, TSequen
     ss << ";END=" << bp.endSeqPos + 1 - 1; // 1-base adjustment, -1 bc endPos is behind last variant position
     SEQAN_ASSERT_GEQ_MSG(bp.endSeqPos, bp.startSeqPos, "Deletion end position smaller than begin position!");
     ss << ";SVLEN=-" << bp.endSeqPos-bp.startSeqPos;
-    //if (bp.similar != maxValue<unsigned>())
+    //if (bp.similar != std::numeric_limits<unsigned>::max())
         ss << ";BM=" << bp.similar;
     ss << ";DP=" << bp.support;
     record.info = ss.str();
@@ -481,7 +481,7 @@ inline void _fillVcfRecordInversion(VcfRecord & record, TBreakpoint & bp, TSeque
     ss << ";END=" << bp.endSeqPos + 1 - 1; // 1-base adjustment, -1 bc endPos is behind last variant position
     SEQAN_ASSERT_GEQ_MSG(bp.endSeqPos, bp.startSeqPos, "Inversion end position smaller than begin position!");
     ss << ";SVLEN=" << bp.endSeqPos-bp.startSeqPos;
-    //if (bp.similar != maxValue<unsigned>())
+    //if (bp.similar != std::numeric_limits<unsigned>::max())
         ss << ";BM=" << bp.similar;
     ss << ";DP=" << bp.support;
     record.info = ss.str();
@@ -511,7 +511,7 @@ inline void _fillVcfRecordTandem(VcfRecord & record, TBreakpoint & bp, TSequence
     ss << ";END=" << bp.endSeqPos + 1 - 1; // 1-base adjustment, -1 bc endPos is behind last variant position
     SEQAN_ASSERT_GEQ_MSG(bp.endSeqPos, bp.startSeqPos, "Tandem duplication end position smaller than begin position!");
     ss << ";SVLEN=" << bp.endSeqPos-bp.startSeqPos - 1; // -1 bc positions are flanking the variant region
-    //if (bp.similar != maxValue<unsigned>())
+    //if (bp.similar != std::numeric_limits<unsigned>::max())
         ss << ";BM=" << bp.similar;
     ss << ";DP=" << bp.support;
     record.info = ss.str();
@@ -536,7 +536,7 @@ inline void _fillVcfRecordTandem(VcfRecord & record, TBreakpoint & bp, TSequence
 template <typename TBreakpoint, typename TPos>
 inline bool _setVcfRecordDuplicationPos(TBreakpoint & bp, TPos & begin, TPos & end, TPos & target)
 {
-    if (bp.dupMiddlePos != maxValue<unsigned>())
+    if (bp.dupMiddlePos != std::numeric_limits<unsigned>::max())
     {
 	// Downstream duplication dup(middlePos, endPos, startPos)
         if (bp.dupTargetPos == bp.startSeqPos)
@@ -560,7 +560,7 @@ template <typename TBreakpoint, typename TSequence>
 inline void _fillVcfRecordDuplication(VcfRecord & record, TBreakpoint & bp, TSequence & ref, unsigned id)
 {
     typedef typename TBreakpoint::TPos TPos;
-    TPos begin, end, target = maxValue<unsigned>();
+    TPos begin, end, target = std::numeric_limits<unsigned>::max();
     std::stringstream ss;
     if (!_setVcfRecordDuplicationPos(bp, begin, end, target))
         ss << "IMPRECISE;";
@@ -573,12 +573,12 @@ inline void _fillVcfRecordDuplication(VcfRecord & record, TBreakpoint & bp, TSeq
     ss << "SVTYPE=DUP";
     ss << ";END=" << end - 1 + 1; // -1 to set end as last position of variant, +1 for 1-base adjustment
     SEQAN_ASSERT_GEQ_MSG(bp.endSeqPos, bp.startSeqPos, "Duplication end position smaller than begin position!");
-    if (target != maxValue<unsigned>())
+    if (target != std::numeric_limits<unsigned>::max())
     {
         ss << ";SVLEN=" << end-begin;
         ss << ";TARGETPOS=" << target - 1 + 1; // -1 to set target as position before insertion, +1 for 1-base adjustment
     }
-    //if (bp.similar != maxValue<unsigned>())
+    //if (bp.similar != std::numeric_limits<unsigned>::max())
         ss << ";BM=" << bp.similar;
     ss << ";DP=" << bp.support;
     record.info = ss.str();
@@ -607,7 +607,7 @@ inline void _fillVcfRecordBreakend(VcfRecord & record, TBreakpoint & bp, TSequen
     // ss << "IMPRECISE;";
     ss << "SVTYPE=BND";
     // ss << ";CIPOS=-5,5";
-    //if (bp.similar != maxValue<unsigned>())
+    //if (bp.similar != std::numeric_limits<unsigned>::max())
         //ss << ";BM=" << bp.similar;
     ss << ";DP=" << bp.support;
     record.info = ss.str();
@@ -691,7 +691,7 @@ inline bool _writeVcfTranslocation(VcfFileOut & vcfOut, TBreakpoint & bp, TSeque
     std::stringstream ss;
     ss << "SVTYPE=BND";
     ss << ";EVENT=Trans" << bp_id;
-    //if (bp.similar != maxValue<unsigned>())
+    //if (bp.similar != std::numeric_limits<unsigned>::max())
         ss << ";BM=" << bp.similar;
     ss << ";DP=" << bp.support;
     record.info = ss.str();
@@ -718,7 +718,7 @@ inline bool _writeVcfTranslocation(VcfFileOut & vcfOut, TBreakpoint & bp, TSeque
     }
 
     // Compute ALT columns
-    if (bp.dupMiddlePos != maxValue<unsigned>())
+    if (bp.dupMiddlePos != std::numeric_limits<unsigned>::max())
     {
         _getShortId(sId, bp.midPosId);
         std::stringstream alt1;
@@ -790,7 +790,7 @@ inline bool _writeVcfTranslocation(VcfFileOut & vcfOut, TBreakpoint & bp, TSeque
     clear(record.alt);
 
     // 3rd and 4th entry only exist if the middle (bp.dupMiddlePos) of translocation is known
-    if (bp.dupMiddlePos != maxValue<unsigned>())
+    if (bp.dupMiddlePos != std::numeric_limits<unsigned>::max())
     {
         // 3rd entry
         // 3rd: pos. before second split (dupMiddlePos - 1) ALT: endSeqPos
@@ -922,7 +922,7 @@ inline bool _writeVcfTranslocation(VcfFileOut & vcfOut, TBreakpoint & bp, TSeque
     record.beginPos = bp.endSeqPos;
 
     // Compute ALT columns
-    if (bp.dupMiddlePos != maxValue<unsigned>())
+    if (bp.dupMiddlePos != std::numeric_limits<unsigned>::max())
     {
         std::stringstream alt1;
         if (bp.endSeqStrand != bp.midPosStrand)
@@ -1017,8 +1017,7 @@ void _fillVcfHeader(seqan::VcfHeader & vcfHeader,
         append(contigStr, ">");
         appendValue(vcfHeader, seqan::VcfHeaderRecord("contig", contigStr));
 
-        appendName(contigNames(context(vcfFileOut)), databaseIDs[i],
-                   contigNamesCache(context(vcfFileOut)));
+        appendName(contigNamesCache(context(vcfFileOut)), databaseIDs[i]);
     }
 }
 
@@ -1032,7 +1031,7 @@ int32_t _getrID(StringSet<TId> & databaseIDs, TId dbID)
         if (sID == dbID)
             return static_cast<int32_t>(i);
     }
-    return maxValue<int>();
+    return std::numeric_limits<int>::max();
 }
 
 // Breakpoint writing call
@@ -1070,7 +1069,7 @@ bool _writeGlobalBreakpoints(String<TBreakpoint> & globalBreakpoints,
     }
 
     VcfRecord vcf_record;
-    int32_t id = maxValue<int>();
+    int32_t id = std::numeric_limits<int>::max();
     for (unsigned i = 0; i < length(globalBreakpoints); ++i)
     {
         TBreakpoint & bp = globalBreakpoints[i];
@@ -1097,7 +1096,7 @@ bool _writeGlobalBreakpoints(String<TBreakpoint> & globalBreakpoints,
             } else
             {
                 // extra write function because we have to write 6 records here instead of 1
-                int32_t id2 = maxValue<int>();
+                int32_t id2 = std::numeric_limits<int>::max();
                 id2 = _getrID(databaseIDs, bp.endSeqId);
                 if (_writeVcfTranslocation(vcfOut, bp, databases[id], databases[id2], id, id2, i))
                         std::cerr << "Error while writing breakpoint translocation vcf record!" << std::endl;
diff --git a/apps/insegt/README b/apps/insegt/README
index 0d027a0..15bb528 100644
--- a/apps/insegt/README
+++ b/apps/insegt/README
@@ -42,17 +42,15 @@ INSEGT is distributed with SeqAn - The C++ Sequence Analysis Library (see
 http://www.seqan.de). To build INSEGT do the following:
 
 Follow the "Getting Started" section on http://trac.seqan.de/wiki and check
-out the latest SVN trunk. Instead of creating a project file in Debug mode,
+out the latest Git repo. Instead of creating a project file in Debug mode,
 switch to Release mode (-DCMAKE_BUILD_TYPE=Release) and compile insegt. This
 can be done as follows:
 
-  svn co http://svn.mi.fu-berlin.de/seqan/trunk/seqan seqan-trunk
-  mkdir seqan-trunk-build
-  mkdir seqan-trunk-build/release
-  cd seqan-trunk-build/release
-  cmake ../../seqan-trunk -DCMAKE_BUILD_TYPE=Release
-  make insegt
-
+  1)  git clone https://github.com/seqan/seqan.git
+  2)  mkdir seqan/buld; cd seqan/build
+  3)  cmake .. -DCMAKE_BUILD_TYPE=Release
+  4)  make insegt
+  5)  ./bin/insegt --help
 
 ---------------------------------------------------------------------------
 3. Usage
diff --git a/apps/insegt/base.h b/apps/insegt/base.h
index 198e849..f77145d 100644
--- a/apps/insegt/base.h
+++ b/apps/insegt/base.h
@@ -70,7 +70,7 @@ create_nTuple(TStringSet &tupleSet, FragmentStore<TSpec, TConfig> &fragStore, co
 		itSetEnd = end(tempTupleSet);
 		for ( ; itSet != itSetEnd; goNext(itSet))
 		{
-			appendValue(tupleSet, getValue(itSet), Generous());
+			appendValue(tupleSet, *itSet, Generous());
 		}
 	}
 }
@@ -98,7 +98,7 @@ create_Tuple(TStringSet &tupleSet, FragmentStore<TSpec, TConfig> &fragStore, con
 		itEnd = end(tempTupleSet);
 		for ( ; it != itEnd; goNext(it))
 		{
-			appendValue(tupleSet, getValue(it), Generous());
+			appendValue(tupleSet, *it, Generous());
 		}
 	}
 }
@@ -124,7 +124,7 @@ createCombinations(TStringSet &tupleSet, TStringSet &annoIds)
 		unsigned n = 1;
 		for ( ; itStrSet != itStrSetEnd; goNext(itStrSet))
 		{
-			n = n * length(getValue(itStrSet));
+			n = n * length(*itStrSet);
 		}
 	
 		clear(tupleSet);
diff --git a/apps/insegt/create_gff.h b/apps/insegt/create_gff.h
index 395e659..9715ae5 100644
--- a/apps/insegt/create_gff.h
+++ b/apps/insegt/create_gff.h
@@ -74,14 +74,14 @@ createReadCountGFF(TFile & readOutput, TReadAnnoStore & readAnnoStore, FragmentS
 			
 			itAnnoIds = begin(getValue(itCountStore).annoIds);
 			itAnnoIdsEnd = end(getValue(itCountStore).annoIds);
-			while (itAnnoIds != itAnnoIdsEnd && front(getValue(itAnnoIds)) == INVALID_ID)
+			while (itAnnoIds != itAnnoIdsEnd && front(*itAnnoIds) == INVALID_ID)
 			{
 				goNext(itAnnoIds);
 			}
 	
 			if (itAnnoIds != itAnnoIdsEnd) // not only INVALID_IDS
 			{
-				firstId = front(getValue(itAnnoIds));
+				firstId = front(*itAnnoIds);
 				
 				// orientation:
 				if (getValue(fragStore.annotationStore, firstId).beginPos <= getValue(fragStore.annotationStore, firstId).endPos)
diff --git a/apps/insegt/fusion.h b/apps/insegt/fusion.h
index ae0751f..3832cc4 100644
--- a/apps/insegt/fusion.h
+++ b/apps/insegt/fusion.h
@@ -192,7 +192,7 @@ buildTupleCountStore_Fusion(TTupleCountStore & tupleCountStore,
 										itSecTupleEnd = end(tempSecTupleSet);
 										for ( ; itSecTuple != itSecTupleEnd; goNext(itSecTuple))
 										{										
-											appendValue(secTupleSet, getValue(itSecTuple));
+											appendValue(secTupleSet, *itSecTuple);
 										}
 									}
 								}
@@ -209,25 +209,25 @@ buildTupleCountStore_Fusion(TTupleCountStore & tupleCountStore,
 						itTupleEnd = end(tupleSet);
 						for ( ; itTuple != itTupleEnd; goNext(itTuple))	
 						{
-							firstAnnoId1 = front(getValue(itTuple));
+							firstAnnoId1 = front(*itTuple);
 							erase(value(itTuple), 0);			// first id is not stored; is know by position in tupleCountStore
 
 							// readConnections:
-							if (!empty(getValue(itTuple)))
+							if (!empty(*itTuple))
 							{
-								if (searchValue(pos, getValue(itTuple), getValue(tupleCountStore, firstAnnoId1).readConnections)) 
+								if (searchValue(pos, *itTuple, getValue(tupleCountStore, firstAnnoId1).readConnections))
 									++value(value(tupleCountStore, firstAnnoId1).readConnectionCounts, pos);
 								else 
 								{
 									if (pos != endPosition(getValue(tupleCountStore, firstAnnoId1).readConnections) )
 									{
 										resizeSpace(value(tupleCountStore, firstAnnoId1).readConnections, 1, pos, pos, Generous());
-										assignValue(value(tupleCountStore, firstAnnoId1).readConnections, pos, getValue(itTuple));
+										assignValue(value(tupleCountStore, firstAnnoId1).readConnections, pos, *itTuple);
 										insertValue(value(tupleCountStore, firstAnnoId1).readConnectionCounts, pos, 1, Generous());
 									}
 									else
 									{
-										appendValue(value(tupleCountStore, firstAnnoId1).readConnections, getValue(itTuple), Generous());
+										appendValue(value(tupleCountStore, firstAnnoId1).readConnections, *itTuple, Generous());
 										appendValue(value(tupleCountStore, firstAnnoId1).readConnectionCounts, 1, Generous());
 									}
 								}
@@ -239,29 +239,29 @@ buildTupleCountStore_Fusion(TTupleCountStore & tupleCountStore,
 								itSecTupleEnd = end(secTupleSet);
 								for ( ; itSecTuple != itSecTupleEnd; goNext(itSecTuple) )
 								{
-									matePairTuple = getValue(itTuple);
+									matePairTuple = *itTuple;
 									// INVALID_ID: sign for connection by matepair (apart from that, there are no INVALID_IDs in the list)
 									appendValue(matePairTuple, INVALID_ANNO_ID, Generous());				
-									if (!empty(getValue(itTuple)) && back(getValue(itTuple)) == front(getValue(itSecTuple)) )		// no id 2x allowed
+									if (!empty(*itTuple) && back(*itTuple) == front(*itSecTuple))		// no id 2x allowed
 									{	
 										if (exact_nTuple == 0 && n == 0) erase(value(itSecTuple), 0);
 										else continue;							// tupel would be created double or tupel wouldn't have the length n anymore
 									}
-									append(matePairTuple, getValue(itSecTuple), Generous());
+									append(matePairTuple, *itSecTuple, Generous());
 					
-									if (empty(getValue(itTuple))) 							
+									if (empty(*itTuple))
 									{
 										beginPos1 = getValue(fragStore.annotationStore, firstAnnoId1).beginPos;
 										endPos1 = getValue(fragStore.annotationStore, firstAnnoId1).endPos;
 									}
 									else
 									{
-										beginPos1 = getValue(fragStore.annotationStore, back(getValue(itTuple))).beginPos;
-										endPos1 = getValue(fragStore.annotationStore, back(getValue(itTuple))).endPos;
+										beginPos1 = getValue(fragStore.annotationStore, back(*itTuple)).beginPos;
+										endPos1 = getValue(fragStore.annotationStore, back(*itTuple)).endPos;
 									}
 									// begin position of first annotation in tuple of second read
-									beginPos2 = getValue(fragStore.annotationStore, front(getValue(itSecTuple))).beginPos; 
-									endPos2 = getValue(fragStore.annotationStore, front(getValue(itSecTuple))).endPos;
+									beginPos2 = getValue(fragStore.annotationStore, front(*itSecTuple)).beginPos;
+									endPos2 = getValue(fragStore.annotationStore, front(*itSecTuple)).endPos;
 									if ( (beginPos1 <= endPos1 && endPos1 < beginPos2) ||			// no overlapping annotations allowed
 									     (endPos1 < beginPos1 && beginPos1 < endPos2) )
 									{
@@ -292,37 +292,37 @@ buildTupleCountStore_Fusion(TTupleCountStore & tupleCountStore,
 						itTupleEnd = end(tupleSet);
 						for ( ; itTuple != itTupleEnd; goNext(itTuple))	
 						{
-							firstAnnoId1 = front(getValue(itTuple));
+							firstAnnoId1 = front(*itTuple);
 							erase(value(itTuple), 0);			// first id is not stored; is know by position in tupleCountStore
 			
 							itSecTuple = begin(secTupleSet);
 							itSecTupleEnd = end(secTupleSet);
 							for ( ; itSecTuple != itSecTupleEnd; goNext(itSecTuple) )
 							{
-								matePairTuple = getValue(itTuple);
+								matePairTuple = *itTuple;
 								// INVALID_ID: sign for connection by matepair (apart from that, there are no INVALID_IDs in the list)
 								appendValue(matePairTuple, INVALID_ANNO_ID, Generous());				
-								if (!empty(getValue(itTuple)) && back(getValue(itTuple)) == front(getValue(itSecTuple)) )		// no id 2x allowed
+								if (!empty(*itTuple) && back(*itTuple) == front(*itSecTuple))		// no id 2x allowed
 								{	
 									if (exact_nTuple == 0 && n == 0) erase(value(itSecTuple), 0);
 									else continue;							// tupel would be created double or tupel wouldn't have the length n anymore
 								}
-								append(matePairTuple, getValue(itSecTuple), Generous());
+								append(matePairTuple, *itSecTuple, Generous());
 						
-								if (empty(getValue(itTuple))) 							
+								if (empty(*itTuple))
 								{
 									beginPos1 = getValue(fragStore.annotationStore, firstAnnoId1).beginPos;
 									endPos1 = getValue(fragStore.annotationStore, firstAnnoId1).endPos;
 								}
 								else
 								{
-									beginPos1 = getValue(fragStore.annotationStore, back(getValue(itTuple))).beginPos;
-									endPos1 = getValue(fragStore.annotationStore, back(getValue(itTuple))).endPos;
+									beginPos1 = getValue(fragStore.annotationStore, back(*itTuple)).beginPos;
+									endPos1 = getValue(fragStore.annotationStore, back(*itTuple)).endPos;
 								}
 	
 								// begin position of first annotation in tuple of second read
-								beginPos2 = getValue(fragStore.annotationStore, front(getValue(itSecTuple))).beginPos; 
-								endPos2 = getValue(fragStore.annotationStore, front(getValue(itSecTuple))).endPos;
+								beginPos2 = getValue(fragStore.annotationStore, front(*itSecTuple)).beginPos;
+								endPos2 = getValue(fragStore.annotationStore, front(*itSecTuple)).endPos;
 								if ( (beginPos1 <= endPos1 && endPos1 < beginPos2) ||			// no overlapping annotations allowed
 								     (endPos1 < beginPos1 && beginPos1 < endPos2) )
 								{
diff --git a/apps/insegt/overlap_module.h b/apps/insegt/overlap_module.h
index 79e450c..1a7da0f 100644
--- a/apps/insegt/overlap_module.h
+++ b/apps/insegt/overlap_module.h
@@ -94,9 +94,9 @@ getIdsForRead(TAnnoIds & ids, FragmentStore<TSpec, TConfig> & fragStore, TInterv
 	
 	for ( ; itI != itIEnd; goNext(itI), goNext(itR))
 	{
-		for (unsigned i = 0; i < length(getValue(itR)); ++i)
+		for (unsigned i = 0; i < length(*itR); ++i)
 		{
-			currentId = getValue(getValue(itR), i);
+			currentId = getValue(*itR, i);
 			beginPos = getValue(fragStore.annotationStore, currentId).beginPos;
 			endPos = getValue(fragStore.annotationStore, currentId).endPos;
 			
@@ -138,7 +138,7 @@ getIdsForRead(TAnnoIds & ids, FragmentStore<TSpec, TConfig> & fragStore, TInterv
 				}
 			}
 		}
-		if (empty(getValue(itR)) )  // if aligment-interval doesn't fit to any annotation, append INVALID_ID to mark this
+		if (empty(*itR) )  // if aligment-interval doesn't fit to any annotation, append INVALID_ID to mark this
 			appendValue(value(itR), INVALID_ID, Generous());
 	}
 }
@@ -355,25 +355,25 @@ buildTupleCountStore(TTupleCountStore & tupleCountStore,
 						itTupleEnd = end(tupleSet);
 						for ( ; itTuple != itTupleEnd; goNext(itTuple))	
 						{
-							firstAnnoId1 = front(getValue(itTuple));
+							firstAnnoId1 = front(*itTuple);
 							erase(value(itTuple), 0);			// first id is not stored; is know by position in tupleCountStore
 
 							// readConnections:
-							if (!empty(getValue(itTuple)))
+							if (!empty(*itTuple))
 							{
-								if (searchValue(pos, getValue(itTuple), getValue(tupleCountStore, firstAnnoId1).readConnections)) 
+								if (searchValue(pos, *itTuple, getValue(tupleCountStore, firstAnnoId1).readConnections))
 									++value(value(tupleCountStore, firstAnnoId1).readConnectionCounts, pos);
 								else 
 								{
 									if (pos != endPosition(getValue(tupleCountStore, firstAnnoId1).readConnections) )
 									{
 										resizeSpace(value(tupleCountStore, firstAnnoId1).readConnections, 1, pos, pos, Generous());
-										assignValue(value(tupleCountStore, firstAnnoId1).readConnections, pos, getValue(itTuple));
+										assignValue(value(tupleCountStore, firstAnnoId1).readConnections, pos, *itTuple);
 										insertValue(value(tupleCountStore, firstAnnoId1).readConnectionCounts, pos, 1, Generous());
 									}
 									else
 									{
-										appendValue(value(tupleCountStore, firstAnnoId1).readConnections, getValue(itTuple), Generous());
+										appendValue(value(tupleCountStore, firstAnnoId1).readConnections, *itTuple, Generous());
 										appendValue(value(tupleCountStore, firstAnnoId1).readConnectionCounts, 1, Generous());
 									}
 								}
@@ -385,29 +385,29 @@ buildTupleCountStore(TTupleCountStore & tupleCountStore,
 								itSecTupleEnd = end(secTupleSet);
 								for ( ; itSecTuple != itSecTupleEnd; goNext(itSecTuple) )
 								{
-									matePairTuple = getValue(itTuple);
+									matePairTuple = *itTuple;
 									// INVALID_ID: sign for connection by matepair (apart from that, there are no INVALID_IDs in the list)
 									appendValue(matePairTuple, INVALID_ANNO_ID, Generous());				
-									if (!empty(getValue(itTuple)) && back(getValue(itTuple)) == front(getValue(itSecTuple)) )		// no id 2x allowed
+									if (!empty(*itTuple) && back(*itTuple) == front(*itSecTuple))		// no id 2x allowed
 									{	
 										if (exact_nTuple == 0 && n == 0) erase(value(itSecTuple), 0);
 										else continue;							// tupel would be created double or tupel wouldn't have the length n anymore
 									}
-									append(matePairTuple, getValue(itSecTuple), Generous());
+									append(matePairTuple, *itSecTuple, Generous());
 					
-									if (empty(getValue(itTuple))) 							
+									if (empty(*itTuple))
 									{
 										beginPos1 = getValue(fragStore.annotationStore, firstAnnoId1).beginPos;
 										endPos1 = getValue(fragStore.annotationStore, firstAnnoId1).endPos;
 									}
 									else
 									{
-										beginPos1 = getValue(fragStore.annotationStore, back(getValue(itTuple))).beginPos;
-										endPos1 = getValue(fragStore.annotationStore, back(getValue(itTuple))).endPos;
+										beginPos1 = getValue(fragStore.annotationStore, back(*itTuple)).beginPos;
+										endPos1 = getValue(fragStore.annotationStore, back(*itTuple)).endPos;
 									}
 									// begin position of first annotation in tuple of second read
-									beginPos2 = getValue(fragStore.annotationStore, front(getValue(itSecTuple))).beginPos; 
-									endPos2 = getValue(fragStore.annotationStore, front(getValue(itSecTuple))).endPos;
+									beginPos2 = getValue(fragStore.annotationStore, front(*itSecTuple)).beginPos;
+									endPos2 = getValue(fragStore.annotationStore, front(*itSecTuple)).endPos;
 									if ( (beginPos1 <= endPos1 && endPos1 < beginPos2) ||			// no overlapping annotations allowed
 									     (endPos1 < beginPos1 && beginPos1 < endPos2) )
 									{
diff --git a/apps/mason2/external_split_merge.cpp b/apps/mason2/external_split_merge.cpp
index 6d9314d..f90b030 100644
--- a/apps/mason2/external_split_merge.cpp
+++ b/apps/mason2/external_split_merge.cpp
@@ -178,15 +178,15 @@ bool SamJoiner::_loadNext(seqan::BamAlignmentRecord & record, unsigned idx)
 
 int SamJoiner::get(seqan::BamAlignmentRecord & record)
 {
-    unsigned idx = seqan::maxValue<unsigned>();
+    unsigned idx = std::numeric_limits<unsigned>::max();
     for (unsigned i = 0; i < length(records); ++i)
     {
         if (!active[i])
             continue;
-        if (idx == seqan::maxValue<unsigned>() || ltBamAlignmentRecord(records[i], records[idx]))
+        if (idx == std::numeric_limits<unsigned>::max() || ltBamAlignmentRecord(records[i], records[idx]))
             idx = i;
     }
-    if (idx == seqan::maxValue<unsigned>())
+    if (idx == std::numeric_limits<unsigned>::max())
         return 1;
 
     // We use double-buffering and the input parameters as buffers.
diff --git a/apps/mason2/external_split_merge.h b/apps/mason2/external_split_merge.h
index e36aaa9..4e43d81 100644
--- a/apps/mason2/external_split_merge.h
+++ b/apps/mason2/external_split_merge.h
@@ -302,15 +302,15 @@ bool FastxJoiner<TTag>::_loadNext(TSeq & id, TSeq & seq, TSeq & qual, unsigned i
 template <typename TTag>
 int FastxJoiner<TTag>::get(seqan::CharString & id, seqan::CharString & seq, seqan::CharString & qual)
 {
-    unsigned idx = seqan::maxValue<unsigned>();
+    unsigned idx = std::numeric_limits<unsigned>::max();
     for (unsigned i = 0; i < length(ids); ++i)
     {
         if (!active[i])
             continue;
-        if (idx == seqan::maxValue<unsigned>() || strnum_cmp(toCString(ids[i]), toCString(ids[idx])) < 0)
+        if (idx == std::numeric_limits<unsigned>::max() || strnum_cmp(toCString(ids[i]), toCString(ids[idx])) < 0)
             idx = i;
     }
-    if (idx == seqan::maxValue<unsigned>())
+    if (idx == std::numeric_limits<unsigned>::max())
         return 1;
 
     // We use double-buffering and the input parameters as buffers.
diff --git a/apps/mason2/fragment_generation.h b/apps/mason2/fragment_generation.h
index 33bf5de..32fa109 100644
--- a/apps/mason2/fragment_generation.h
+++ b/apps/mason2/fragment_generation.h
@@ -96,6 +96,8 @@ public:
     virtual void generateMany(std::vector<Fragment> & frags, int rId, unsigned contigLength,
                               std::vector<std::pair<int, int> > const & gapIntervals,
                               unsigned count) = 0;
+
+    virtual ~FragmentSamplerImpl() = default;
 };
 
 
diff --git a/apps/mason2/genomic_variants.cpp b/apps/mason2/genomic_variants.cpp
index 6d073d7..52356ac 100644
--- a/apps/mason2/genomic_variants.cpp
+++ b/apps/mason2/genomic_variants.cpp
@@ -51,7 +51,7 @@ std::ostream & operator<<(std::ostream & out, SmallIndelRecord const & record)
 int StructuralVariantRecord::endPosition() const
 {
     if (pos == -1)
-        return seqan::MaxValue<int>::VALUE;
+        return std::numeric_limits<int>::max();
 
     switch (kind)
     {
@@ -211,12 +211,12 @@ int VariantMaterializer::_materializeSmallVariants(
     unsigned smallIndelIdx = 0;
     // Current SNP record, default to sentinel.
     SnpRecord snpRecord;
-    snpRecord.rId = seqan::maxValue<int>();
+    snpRecord.rId = std::numeric_limits<int>::max();
     if (snpsIdx < length(variants.snps))
         snpRecord = variants.snps[snpsIdx++];
     // Current small indel record, default to sentinel.
     SmallIndelRecord smallIndelRecord;
-    smallIndelRecord.rId = seqan::maxValue<int>();
+    smallIndelRecord.rId = std::numeric_limits<int>::max();
     if (smallIndelIdx < length(variants.smallIndels))
         smallIndelRecord = variants.smallIndels[smallIndelIdx++];
     // Track last position from contig appended to seq so far.
@@ -227,7 +227,7 @@ int VariantMaterializer::_materializeSmallVariants(
     // TODO(holtgrew): Extract contig building into their own functions.
     if (verbosity >= 2)
         std::cerr << "building output\n";
-    while (snpRecord.rId != seqan::maxValue<int>() || smallIndelRecord.rId != seqan::maxValue<int>())
+    while (snpRecord.rId != std::numeric_limits<int>::max() || smallIndelRecord.rId != std::numeric_limits<int>::max())
     {
         // TODO(holtgrew): Extract SNP and small indel handling into their own functions.
         if (snpRecord.getPos() < smallIndelRecord.getPos())  // process SNP records
@@ -259,7 +259,7 @@ int VariantMaterializer::_materializeSmallVariants(
             }
 
             if (snpsIdx >= length(variants.snps))
-                snpRecord.rId = seqan::maxValue<int>();
+                snpRecord.rId = std::numeric_limits<int>::max();
             else
                 snpRecord = variants.snps[snpsIdx++];
         }
@@ -337,7 +337,7 @@ int VariantMaterializer::_materializeSmallVariants(
             }
 
             if (smallIndelIdx >= length(variants.smallIndels))
-                smallIndelRecord.rId = seqan::maxValue<int>();
+                smallIndelRecord.rId = std::numeric_limits<int>::max();
             else
                 smallIndelRecord = variants.smallIndels[smallIndelIdx++];
         }
@@ -704,7 +704,7 @@ int VariantMaterializer::_materializeLargeVariants(
 
 bool PositionMap::overlapsWithBreakpoint(int svBeginPos, int svEndPos) const
 {
-    std::set<std::pair<int, int> >::const_iterator it = svBreakpoints.upper_bound(std::make_pair(svBeginPos, seqan::maxValue<int>()));
+    std::set<std::pair<int, int> >::const_iterator it = svBreakpoints.upper_bound(std::make_pair(svBeginPos, std::numeric_limits<int>::max()));
     return (it != svBreakpoints.end() && it->first < svEndPos);
 }
 
@@ -856,14 +856,14 @@ void PositionMap::reinit(TJournalEntries const & journal)
     SEQAN_ASSERT_NEQ(it->segmentSource, seqan::SOURCE_NULL);
     SEQAN_ASSERT_EQ(it->virtualPosition, 0u);
 
-    unsigned lastRefPos = seqan::MaxValue<unsigned>::VALUE;  // Previous position from reference.
+    unsigned lastRefPos = std::numeric_limits<unsigned>::max();  // Previous position from reference.
     for (; it != end(journal, seqan::Standard()); ++it)
     {
         // std::cerr << *it << "\n";
         SEQAN_ASSERT_NEQ(it->segmentSource, seqan::SOURCE_NULL);
         if (it->segmentSource == seqan::SOURCE_ORIGINAL)
         {
-            if (lastRefPos == seqan::maxValue<unsigned>())
+            if (lastRefPos == std::numeric_limits<unsigned>::max())
             {
                 if (it->physicalPosition != 0)
                 {
diff --git a/apps/mason2/mason_materializer.cpp b/apps/mason2/mason_materializer.cpp
index 84d2bbf..df5d2a8 100644
--- a/apps/mason2/mason_materializer.cpp
+++ b/apps/mason2/mason_materializer.cpp
@@ -118,7 +118,7 @@ public:
                     throw MasonIOException("Could not open methylation output file.");
             }
         }
-        catch (MasonIOException e)
+        catch (MasonIOException & e)
         {
             std::cerr << "\nERROR: " << e.what() << "\n";
             return 1;
diff --git a/apps/mason2/mason_simulator.cpp b/apps/mason2/mason_simulator.cpp
index 24d1736..3285e76 100644
--- a/apps/mason2/mason_simulator.cpp
+++ b/apps/mason2/mason_simulator.cpp
@@ -237,7 +237,7 @@ public:
         setClippedBeginPosition(gapsContig, countGaps(begin(gapsRead, seqan::Standard())));
         setClippedBeginPosition(gapsRead, countGaps(begin(gapsRead, seqan::Standard())));
 
-        getCigarString(record.cigar, gapsContig, gapsRead, seqan::maxValue<int>());
+        getCigarString(record.cigar, gapsContig, gapsRead, std::numeric_limits<int>::max());
         getMDString(mdString, gapsContig, gapsRead);
     }
 
@@ -558,7 +558,7 @@ public:
         setClippedBeginPosition(gapsContig, countGaps(begin(gapsRead, seqan::Standard())));
         setClippedBeginPosition(gapsRead, countGaps(begin(gapsRead, seqan::Standard())));
 
-        getCigarString(record.cigar, gapsContig, gapsRead, seqan::maxValue<int>());
+        getCigarString(record.cigar, gapsContig, gapsRead, std::numeric_limits<int>::max());
         getMDString(mdString, gapsContig, gapsRead);
     }
 
diff --git a/apps/mason2/mason_splicing.cpp b/apps/mason2/mason_splicing.cpp
index 7e109ae..d556809 100644
--- a/apps/mason2/mason_splicing.cpp
+++ b/apps/mason2/mason_splicing.cpp
@@ -67,11 +67,11 @@ public:
 
     static const int INVALID_IDX;
 
-    MyGffRecord() : seqan::GffRecord(), rID(seqan::maxValue<int>())
+    MyGffRecord() : seqan::GffRecord(), rID(std::numeric_limits<int>::max())
     {}
 };
 
-const int MyGffRecord::INVALID_IDX = seqan::maxValue<int>();
+const int MyGffRecord::INVALID_IDX = std::numeric_limits<int>::max();
 
 // --------------------------------------------------------------------------
 // Class SplicingInstruction
@@ -152,7 +152,7 @@ public:
             if (!open(gffFileIn, toCString(options.inputGffFile)))
                 throw MasonIOException("Could not open GFF/GTF file.");
         }
-        catch (MasonIOException e)
+        catch (MasonIOException & e)
         {
             std::cerr << "\nERROR: " << e.what() << "\n";
             return 1;
@@ -166,7 +166,7 @@ public:
         // Read first GFF record.
         MyGffRecord record;
         _readFirstRecord(record);
-        if (record.rID == seqan::maxValue<int>())
+        if (record.rID == std::numeric_limits<int>::max())
             return 0;  // at end, could not read any, done
 
         // Transcript names.
@@ -185,7 +185,7 @@ public:
 
         // Read GFF/GTF file contig by contig (must be sorted by reference name).  For each contig, we all recors,
         // create simulation instructions and then build the transcripts for each haplotype.
-        while (record.rID != seqan::maxValue<int>())  // sentinel, at end
+        while (record.rID != std::numeric_limits<int>::max())  // sentinel, at end
         {
             seqan::CharString refName = record.ref;
             std::cerr << "Splicing for " << refName << " ...";
@@ -206,7 +206,7 @@ public:
 
                 if (atEnd(gffFileIn))
                 {
-                    record.rID = seqan::maxValue<int>();
+                    record.rID = std::numeric_limits<int>::max();
                     break;
                 }
 
@@ -362,10 +362,10 @@ public:
         {
             if (empty(ss[i]))
                 continue;
-            if (!getIdByName(contigNames, ss[i], idx, cache))
+            if (!getIdByName(idx, cache, ss[i]))
             {
                 appendValue(tIDs, length(contigNames));
-                appendName(contigNames, ss[i], cache);
+                appendName(cache, ss[i]);
             }
             else
             {
@@ -396,7 +396,7 @@ public:
             }
         }
         if (!found)
-            record.rID = seqan::maxValue<int>();
+            record.rID = std::numeric_limits<int>::max();
     }
 };
 
diff --git a/apps/mason2/mason_variator.cpp b/apps/mason2/mason_variator.cpp
index b3e8b26..cc27c96 100644
--- a/apps/mason2/mason_variator.cpp
+++ b/apps/mason2/mason_variator.cpp
@@ -1136,30 +1136,30 @@ public:
         unsigned svIdx = 0;
         // Current SNP record, default to sentinel.
         SnpRecord snpRecord;
-        snpRecord.rId = seqan::maxValue<int>();
+        snpRecord.rId = std::numeric_limits<int>::max();
         if (snpsIdx < length(variants.snps))
             snpRecord = variants.snps[snpsIdx++];
         // Current small indel record, default to sentinel.
         SmallIndelRecord smallIndelRecord;
-        smallIndelRecord.rId = seqan::maxValue<int>();
+        smallIndelRecord.rId = std::numeric_limits<int>::max();
         if (smallIndelIdx < length(variants.smallIndels))
             smallIndelRecord = variants.smallIndels[smallIndelIdx++];
         // Current SV record, default to sentinel.
         StructuralVariantRecord svRecord;
-        svRecord.rId = seqan::maxValue<int>();
+        svRecord.rId = std::numeric_limits<int>::max();
         if (svIdx < length(variants.svRecords))
             svRecord = variants.svRecords[svIdx++];
-        while (snpRecord.rId != seqan::maxValue<int>() ||
-               smallIndelRecord.rId != seqan::maxValue<int>() ||
-               svRecord.rId != seqan::maxValue<int>())
+        while (snpRecord.rId != std::numeric_limits<int>::max() ||
+               smallIndelRecord.rId != std::numeric_limits<int>::max() ||
+               svRecord.rId != std::numeric_limits<int>::max())
         {
-            if (snpRecord.rId != seqan::maxValue<int>() && smallIndelRecord.rId != seqan::maxValue<int>())
+            if (snpRecord.rId != std::numeric_limits<int>::max() && smallIndelRecord.rId != std::numeric_limits<int>::max())
                 SEQAN_ASSERT(snpRecord.getPos() != smallIndelRecord.getPos());  // are generated indendently
-            if (snpRecord.rId != seqan::maxValue<int>() && svRecord.rId != seqan::maxValue<int>())
+            if (snpRecord.rId != std::numeric_limits<int>::max() && svRecord.rId != std::numeric_limits<int>::max())
                 SEQAN_ASSERT_MSG(snpRecord.getPos() != svRecord.getPos(),
                                  "Should be generated non-overlapping (snp pos = %d, sv pos = %d).",
                                  snpRecord.pos, svRecord.pos);
-            if (smallIndelRecord.rId != seqan::maxValue<int>() && svRecord.rId != seqan::maxValue<int>())
+            if (smallIndelRecord.rId != std::numeric_limits<int>::max() && svRecord.rId != std::numeric_limits<int>::max())
                 SEQAN_ASSERT(smallIndelRecord.getPos() != svRecord.getPos());  // are generated indendently
             SEQAN_ASSERT_NEQ(snpRecord.pos, 0);   // Not simulated, VCF complexer.
             SEQAN_ASSERT_NEQ(svRecord.pos, 0);   // Not simulated, VCF complexer.
@@ -1206,7 +1206,7 @@ public:
                 }
 
                 if (svIdx >= length(variants.svRecords))
-                    svRecord.rId = seqan::maxValue<int>();
+                    svRecord.rId = std::numeric_limits<int>::max();
                 else
                     svRecord = variants.svRecords[svIdx++];
             }
@@ -1242,11 +1242,11 @@ public:
             inTos[ordValue(seqan::Dna5(snpRecord.to))] = true;
 
             if (snpsIdx >= length(variants.snps))
-                snpRecord.rId = seqan::maxValue<int>();
+                snpRecord.rId = std::numeric_limits<int>::max();
             else
                 snpRecord = variants.snps[snpsIdx++];
         }
-        while (snpRecord.rId != seqan::maxValue<int>() &&
+        while (snpRecord.rId != std::numeric_limits<int>::max() &&
                snpsIdx < length(variants.snps) &&
                snpRecord.getPos() == pos);
 
@@ -1313,11 +1313,11 @@ public:
             appendValue(records, smallIndelRecord);
 
             if (smallIndelIdx >= length(variants.smallIndels))
-                smallIndelRecord.rId = seqan::maxValue<int>();
+                smallIndelRecord.rId = std::numeric_limits<int>::max();
             else
                 smallIndelRecord = variants.smallIndels[smallIndelIdx++];
         }
-        while (smallIndelRecord.rId != seqan::maxValue<int>() &&
+        while (smallIndelRecord.rId != std::numeric_limits<int>::max() &&
                smallIndelIdx < length(variants.smallIndels) &&
                smallIndelRecord.getPos() == variants.smallIndels[smallIndelIdx].getPos());
         SEQAN_ASSERT_NOT(empty(records));
diff --git a/apps/micro_razers/README b/apps/micro_razers/README
index a176f66..2289160 100644
--- a/apps/micro_razers/README
+++ b/apps/micro_razers/README
@@ -43,16 +43,14 @@ MicroRazerS is distributed with SeqAn - The C++ Sequence Analysis Library
   5)  cd micro_razers
   6)  ./micro_razers --help
 
-Alternatively you can check out the latest SVN version of MicroRazerS and SeqAn
+Alternatively you can check out the latest Git version of MicroRazerS and SeqAn
 with:
 
-  1)  svn co http://svn.mi.fu-berlin.de/seqan/trunk/seqan
-  2)  cd seqan
-  3)  make forwards
-  4)  cd projects/library/apps
-  5)  make micro_razers
-  6)  cd micro_razers
-  7)  ./micro_razers --help
+  1)  git clone https://github.com/seqan/seqan.git
+  2)  mkdir seqan/buld; cd seqan/build
+  3)  cmake .. -DCMAKE_BUILD_TYPE=Release
+  4)  make micro_razers
+  5)  ./bin/micro_razers --help
 
 On success, an executable file micro_razers was built and a brief usage 
 description was dumped.
diff --git a/apps/ngs_roi/CMakeLists.txt b/apps/ngs_roi/CMakeLists.txt
index 980224b..2ee38bd 100644
--- a/apps/ngs_roi/CMakeLists.txt
+++ b/apps/ngs_roi/CMakeLists.txt
@@ -23,6 +23,11 @@ if (NOT "${SEQAN_BUILD_SYSTEM}" STREQUAL "DEVELOP")
     find_package (SeqAn CONFIG REQUIRED)
 endif ()
 
+if (NOT ZLIB_FOUND)
+  message (STATUS "  ZLIB not found: ngs_roi will not be built.")
+  return ()
+endif ()
+
 # ----------------------------------------------------------------------------
 # Build Setup
 # ----------------------------------------------------------------------------
diff --git a/apps/ngs_roi/project_spliced.cpp b/apps/ngs_roi/project_spliced.cpp
index 3b5b1e2..5f9d8d5 100644
--- a/apps/ngs_roi/project_spliced.cpp
+++ b/apps/ngs_roi/project_spliced.cpp
@@ -77,7 +77,7 @@ void ProjectSplicedRoi::beginContig()
     clear(ranges);
 
     // Set current group to invalid.
-    currentGroup = seqan::maxValue<unsigned>();
+    currentGroup = std::numeric_limits<unsigned>::max();
 }
 
 // ---------------------------------------------------------------------------
@@ -122,7 +122,7 @@ void ProjectSplicedRoi::_updateRanges(seqan::GffRecord const & record,
         std::cerr << "Updating " << name << "\t" << record.beginPos << "\t" << record.endPos << "\n";
 
     unsigned idx = 0;
-    if (getIdByName(groupNames, name, idx, groupNamesCache))
+    if (getIdByName(idx, groupNamesCache, name))
     {
         ranges[idx].i1 = std::min(ranges[idx].i1, (int)record.beginPos);
         ranges[idx].i2 = std::max(ranges[idx].i2, (int)record.endPos);
@@ -130,7 +130,7 @@ void ProjectSplicedRoi::_updateRanges(seqan::GffRecord const & record,
     else
     {
         idx = length(groupNames);
-        appendName(groupNames, name, groupNamesCache);
+        appendName(groupNamesCache, name);
         appendValue(ranges, TIntPair(record.beginPos, record.endPos));
     }
 }
diff --git a/apps/ngs_roi/roi_feature_projection.cpp b/apps/ngs_roi/roi_feature_projection.cpp
index d6c8f96..acb9fde 100644
--- a/apps/ngs_roi/roi_feature_projection.cpp
+++ b/apps/ngs_roi/roi_feature_projection.cpp
@@ -136,7 +136,7 @@ template <typename TRecord>
 void makeSentinel(TRecord & record)
 {
     clear(record.ref);
-    record.beginPos = seqan::maxValue<int>();
+    record.beginPos = std::numeric_limits<int>::max();
 }
 
 // Configuration object for directly reading BED records with IntersectDriver.
diff --git a/apps/pair_align/lib/pair_align_lib.cpp b/apps/pair_align/lib/pair_align_lib.cpp
index 52bdcb4..5d2ad1b 100644
--- a/apps/pair_align/lib/pair_align_lib.cpp
+++ b/apps/pair_align/lib/pair_align_lib.cpp
@@ -37,4 +37,4 @@
 #include "pair_align_lib.h"
 
 // Definition of static variable has to be moved to cpp file.
-int const Options::INVALID_DIAGONAL = seqan::MaxValue<int>::VALUE;
+int const Options::INVALID_DIAGONAL = std::numeric_limits<int>::max();
diff --git a/apps/rabema/rabema_build_gold_standard.cpp b/apps/rabema/rabema_build_gold_standard.cpp
index b6febd0..08ac1fa 100644
--- a/apps/rabema/rabema_build_gold_standard.cpp
+++ b/apps/rabema/rabema_build_gold_standard.cpp
@@ -275,8 +275,8 @@ int intervalizeAndDumpErrorCurves(TStream & stream,
         // The position of the previous match, so we can consider only the ones with the smallest error.
         //
         // The following two vars should be != first pos and contigId.
-        size_t previousPos = maxValue<size_t>();
-        size_t previousContigId = maxValue<size_t>();
+        size_t previousPos = std::numeric_limits<size_t>::max();
+        size_t previousContigId = std::numeric_limits<size_t>::max();
         typedef Iterator<TWeightedMatches>::Type TWeightedMatchesIter;
         for (TWeightedMatchesIter it = begin(sortedMatches);
              it != end(sortedMatches); ++it)
@@ -396,7 +396,7 @@ void buildErrorCurvePoints(String<WeightedMatch> & errorCurve,
 
     // In oracle Sam mode, the maximum error is the error at the position given in the Sam alignment.
     bool oracleMode = false;
-    if (maxError == maxValue<int>())  // We are in oracle mode.
+    if (maxError == std::numeric_limits<int>::max())  // We are in oracle mode.
     {
         oracleMode = true;
         Finder<TContigSeq> finder(contig);
@@ -827,10 +827,10 @@ int matchesToErrorFunction(TErrorCurves & errorCurves,
             append(record.qName, "/1");
         // Translate read to read id.
         unsigned readId = 0;
-        if (!getIdByName(readNameStore, record.qName, readId, readNameStoreCache))
+        if (!getIdByName(readId, readNameStoreCache, record.qName))
         {
             readId = length(readNameStore);
-            appendName(readNameStore, record.qName, readNameStoreCache);
+            appendName(readNameStoreCache, record.qName);
             appendValue(readLengthStore, length(record.seq));
             if (options.oracleMode)
                 appendValue(readAlignmentDistances, -1);
@@ -888,7 +888,7 @@ int matchesToErrorFunction(TErrorCurves & errorCurves,
 
         // In oracle mode, set max error to -1, buildErrorCurvePoints() will use the error at the alignment position
         // from the SAM/BAM file.  In normal mode, convert from error rate from options to error count.
-        int maxError = maxValue<int>();
+        int maxError = std::numeric_limits<int>::max();
         if (!options.oracleMode)
             maxError = static_cast<int>(floor(0.01 * options.maxError * length(record.seq)));
 
diff --git a/apps/rabema/rabema_evaluate.cpp b/apps/rabema/rabema_evaluate.cpp
index 6d6b241..89c2707 100644
--- a/apps/rabema/rabema_evaluate.cpp
+++ b/apps/rabema/rabema_evaluate.cpp
@@ -260,9 +260,9 @@ void performIntervalLowering(String<GsiRecord> & gsiRecords, int maxError)
 
     // Add sentinel interval.
     GsiRecord sentinel(back(gsiRecords));
-    sentinel.firstPos = MaxValue<size_t>::VALUE;
-    sentinel.lastPos = MaxValue<size_t>::VALUE;
-    // sentinel.id = MaxValue<size_t>::VALUE;
+    sentinel.firstPos = std::numeric_limits<size_t>::max();
+    sentinel.lastPos = std::numeric_limits<size_t>::max();
+    // sentinel.id = std::numeric_limits<size_t>::max();
     appendValue(gsiRecords, sentinel);
 
     String<TInterval> openIntervals;
@@ -402,7 +402,7 @@ int benchmarkReadResult(RabemaStats & result,
     // In case of oracle mode, we ignore the distance of the intervals in the GSI file here but use it later on.
     //
     // Start with picking the smallest distance if *-best mode.
-    int smallestDistance = options.oracleMode ? maxValue<int>() : options.maxError;
+    int smallestDistance = options.oracleMode ? std::numeric_limits<int>::max() : options.maxError;
     // Note that smallestDistance (as bestDistance defined below) is expressed as percent of read length ceiled
     // and cat to an int value.
     if (options.oracleMode || options.benchmarkCategory == CATEGORY_ANY_BEST ||
@@ -410,7 +410,7 @@ int benchmarkReadResult(RabemaStats & result,
         for (unsigned i = 0; i < length(gsiRecords); ++i)
             smallestDistance = std::min(smallestDistance, gsiRecords[i].distance);
     int largestDistance = options.maxError;
-    if (options.oracleMode && smallestDistance != maxValue<int>())
+    if (options.oracleMode && smallestDistance != std::numeric_limits<int>::max())
         for (unsigned i = 0; i < length(gsiRecords); ++i)
             largestDistance = std::max(largestDistance, gsiRecords[i].distance);
     String<GsiRecord> pickedGsiRecords;
@@ -592,7 +592,7 @@ int benchmarkReadResult(RabemaStats & result,
             endPos--;
         }
 
-        int bestDistance = minValue<int>();  // Marker for "not set yet".
+        int bestDistance = std::numeric_limits<int>::min();  // Marker for "not set yet".
         // Note that bestDistance expresses the distance in percent error, relative to the read length, ceiled up
         // and converted to an int value.
         if (!options.oracleMode)
@@ -652,7 +652,7 @@ int benchmarkReadResult(RabemaStats & result,
             for (unsigned i = 0; i < length(queryResult); ++i)
                 intervalHit[queryResult[i]] = true;
         }
-        else if (bestDistance != minValue<int>())
+        else if (bestDistance != std::numeric_limits<int>::min())
         {
             // && bestDistance <= options.maxError)
 
@@ -664,7 +664,7 @@ int benchmarkReadResult(RabemaStats & result,
             // Note that all distances including allowedDistance are percent of read length, ceiled up.
             int allowedDistance = options.maxError;
             if ((options.benchmarkCategory == CATEGORY_ALL_BEST || options.benchmarkCategory == CATEGORY_ANY_BEST) &&
-                (smallestDistance != maxValue<int>()))
+                (smallestDistance != std::numeric_limits<int>::max()))
                 allowedDistance = smallestDistance;
             if (bestDistance > allowedDistance)
             {
@@ -708,7 +708,7 @@ int benchmarkReadResult(RabemaStats & result,
         resize(foundIntervalsForErrorRate, largestDistance + 1, 0);
     if (options.oracleMode || options.benchmarkCategory == CATEGORY_ANY_BEST)
     {
-        int bestDistance = maxValue<int>();
+        int bestDistance = std::numeric_limits<int>::max();
         int bestIdx = 0;
         for (unsigned i = 0; i < length(intervalDistances); ++i)
             if (intervalHit[i])
@@ -719,7 +719,7 @@ int benchmarkReadResult(RabemaStats & result,
                     bestIdx = i;
                 bestDistance = std::min(bestDistance, intervalDistances[i]);
             }
-        if (bestDistance != maxValue<int>())
+        if (bestDistance != std::numeric_limits<int>::max())
         {
             if (options.showHitIntervals)
                 std::cerr << "HIT_BEST\t" << filteredGsiRecords[bestIdx] << "\t" << filteredGsiRecords[bestIdx].originalDistance << "\n";
@@ -765,7 +765,7 @@ int benchmarkReadResult(RabemaStats & result,
         result.intervalsToFind += 1;
         result.intervalsFound += found;
         result.normalizedIntervals += found;
-        int d = (smallestDistance == maxValue<int>()) ? 0 : smallestDistance;
+        int d = (smallestDistance == std::numeric_limits<int>::max()) ? 0 : smallestDistance;
         result.intervalsToFindForErrorRate[d] += 1;
         result.intervalsFoundForErrorRate[d] += found;
         result.normalizedIntervalsToFindForErrorRate[d] += 1;
@@ -773,7 +773,7 @@ int benchmarkReadResult(RabemaStats & result,
     }
     else if (options.benchmarkCategory == CATEGORY_ANY_BEST)
     {
-        int d = (smallestDistance == maxValue<int>()) ? 0 : smallestDistance;
+        int d = (smallestDistance == std::numeric_limits<int>::max()) ? 0 : smallestDistance;
         bool toFind = (numIntervalsForErrorRate[d] > 0u);
         bool found = (foundIntervalsForErrorRate[d] > 0u);
         SEQAN_ASSERT_LEQ(found, toFind);
diff --git a/apps/rabema/ref_id_mapping.h b/apps/rabema/ref_id_mapping.h
index b858686..69cd755 100644
--- a/apps/rabema/ref_id_mapping.h
+++ b/apps/rabema/ref_id_mapping.h
@@ -79,17 +79,17 @@ inline unsigned length(RefIdMapping const & mapping)
 
 template <typename TTargetNameStore, typename TTargetNameStoreCache, typename TSourceNameStore>
 void rebuildMapping(RefIdMapping & mapping,
-                    TTargetNameStore const & targetNameStore,
+                    TTargetNameStore const & /*targetNameStore*/,
                     TTargetNameStoreCache const & targetNameStoreCache,
                     TSourceNameStore const & sourceNameStore)
 {
     clear(mapping.map);
-    resize(mapping.map, length(sourceNameStore), maxValue<unsigned>());
+    resize(mapping.map, length(sourceNameStore), std::numeric_limits<unsigned>::max());
 
     for (unsigned i = 0; i < length(sourceNameStore); ++i)
     {
         unsigned idx = 0;
-        if (getIdByName(targetNameStore, sourceNameStore[i], idx, targetNameStoreCache))
+        if (getIdByName(idx, targetNameStoreCache, sourceNameStore[i]))
             mapping.map[i] = idx;
     }
 }
diff --git a/apps/razers/README b/apps/razers/README
index 284e973..3a0c105 100644
--- a/apps/razers/README
+++ b/apps/razers/README
@@ -41,16 +41,14 @@ http://www.seqan.de). To build RazerS do the following:
   5)  cd razers
   6)  ./razers --help
 
-Alternatively you can check out the latest SVN version of RazerS and SeqAn
+Alternatively you can check out the latest Git version of RazerS and SeqAn
 with:
 
-  1)  svn co http://svn.mi.fu-berlin.de/seqan/trunk/seqan
-  2)  cd seqan
-  3)  make forwards
-  4)  cd projects/library/apps
-  5)  make razers
-  6)  cd razers
-  7)  ./razers --help
+  1)  git clone https://github.com/seqan/seqan.git
+  2)  mkdir seqan/buld; cd seqan/build
+  3)  cmake .. -DCMAKE_BUILD_TYPE=Release
+  4)  make razers
+  5)  ./bin/razers --help
 
 On success, an executable file razers was build and a brief usage 
 description was dumped.
diff --git a/apps/razers/outputFormat.h b/apps/razers/outputFormat.h
index ae01817..be854c7 100644
--- a/apps/razers/outputFormat.h
+++ b/apps/razers/outputFormat.h
@@ -934,7 +934,12 @@ void dumpMatches(
 			}
 			break;
 		case 3: // Gff:  printf "$chr $name_$format read $pos %ld . $dir . ID=$col[0]$unique$rest\n",$pos+$len-1;
-			for (unsigned filecount = 0; filecount < length(genomeFileNameList); ++filecount)
+			// NOTE(marehr): filecount+=2 might be a potential bug [https://github.com/seqan/seqan/issues/2165]
+			// In revision 4dbf27b55 and before, filecount was incremented twice at the
+			// end of the for loop, which caused a compiler warning (once in the body
+			// and once in the iteration_expression of the for loop). We kept this
+			// behaviour, because we have no active maintainer for this app.
+			for (unsigned filecount = 0; filecount < length(genomeFileNameList); filecount+=2)
 			{
 				// open genome file	
 				SeqFileIn gFile;
@@ -1201,7 +1206,6 @@ void dumpMatches(
 					}
 				}
 				close(gFile);
-				++filecount;
 			}
 			break;
 	}
diff --git a/apps/razers/razers.h b/apps/razers/razers.h
index 3ea0c30..931b304 100644
--- a/apps/razers/razers.h
+++ b/apps/razers/razers.h
@@ -945,7 +945,7 @@ void countMatches(TMatches &matches, TCounts &cnt)
 	unsigned readNo = -1;
 	short editDist = -1;
 	int64_t count = 0;
-	int64_t maxVal = MaxValue<TValue>::VALUE;
+	int64_t maxVal = std::numeric_limits<TValue>::max();
 
 	for (; it != itEnd; ++it) 
 	{
@@ -982,7 +982,7 @@ setMaxErrors(TSwift &swift, TReadNo readNo, TMaxErrors maxErrors)
 	int minT = _qgramLemma(swift, readNo, maxErrors);
 	if (minT > 1)
 	{
-		if (maxErrors < 0) minT = MaxValue<int>::VALUE;
+		if (maxErrors < 0) minT = std::numeric_limits<int>::max();
 //		::std::cout<<" read:"<<readNo<<" newThresh:"<<minT;
 		setMinThreshold(swift, readNo, (unsigned)minT);
 	}
@@ -1032,7 +1032,7 @@ void compactMatches(TMatches &matches, TCounts &
 		++hitCountCutOff;	// we keep one more match than we actually want, so we can later decide
 							// whether the read mapped more than maxhits times 
 #endif
-	int editDistCutOff = MaxValue<int>::VALUE;
+	int editDistCutOff = std::numeric_limits<int>::max();
 
 	TIterator it = begin(matches, Standard());
 	TIterator itEnd = end(matches, Standard());
@@ -1204,7 +1204,7 @@ void purgeAmbiguousRnaMatches(TMatches &matches, TStats &stats, RazerSOptions<TS
 	unsigned readNo = -1;
 	unsigned hitCount = 0;
 	unsigned hitCountCutOff = options.maxHits;
-	int editDistCutOff = MaxValue<int>::VALUE;
+	int editDistCutOff = std::numeric_limits<int>::max();
 
 	TIterator it = begin(matches, Standard());
 	TIterator itEnd = end(matches, Standard());
@@ -1447,7 +1447,7 @@ matchVerify(
 #endif
 
     unsigned ndlLength = sequenceLength(rseqNo, readSet);
-	int maxScore = MinValue<int>::VALUE;
+	int maxScore = std::numeric_limits<int>::min();
 	int minScore = -(int)(ndlLength * options.errorRate);
 	TMyersFinder maxPos;
 
diff --git a/apps/razers/razers_matepairs.h b/apps/razers/razers_matepairs.h
index bc46240..06d8c6b 100644
--- a/apps/razers/razers_matepairs.h
+++ b/apps/razers/razers_matepairs.h
@@ -250,14 +250,14 @@ void compactPairMatches(TMatches &matches, TCounts & /*cnts*/, RazerSOptions<TSp
 	unsigned readNo = -1;
 	unsigned hitCount = 0;
 	unsigned hitCountCutOff = options.maxHits;
-	int scoreDistCutOff = MinValue<int>::VALUE;
+	int scoreDistCutOff = std::numeric_limits<int>::min();
 
 	TIterator it = begin(matches, Standard());
 	TIterator itEnd = end(matches, Standard());
 	TIterator dit = it;
 	TIterator ditBeg = it;
 
-    int scoreRangeBest = (options.distanceRange == 0u)? MinValue<int>::VALUE: -(int)options.distanceRange;
+    int scoreRangeBest = (options.distanceRange == 0u)? std::numeric_limits<int>::min(): -(int)options.distanceRange;
 
 	// sort 
 	::std::sort(it, itEnd, LessPairErrors<TMatch>());
@@ -468,8 +468,8 @@ void mapMatePairReads(
             }
 		}
         
-		int	bestLeftErrors = MaxValue<int>::VALUE;
-		int bestLibSizeError = MaxValue<int>::VALUE;
+		int	bestLeftErrors = std::numeric_limits<int>::max();
+		int bestLibSizeError = std::numeric_limits<int>::max();
 		TDequeueIterator bestLeft = TDequeueIterator();
 
         bool rightVerified = false;
@@ -576,7 +576,7 @@ void mapMatePairReads(
 		}
 		
         // verify right mate, if left mate matches
-		if (bestLeftErrors != MaxValue<int>::VALUE)
+		if (bestLeftErrors != std::numeric_limits<int>::max())
 		{
             // distance between left mate beginning and right mate end
             int64_t dist = (int64_t)mR.gEnd - (int64_t)(*bestLeft).i2.gBegin;
diff --git a/apps/razers/razers_spliced.h b/apps/razers/razers_spliced.h
index 36100f8..57e83e5 100644
--- a/apps/razers/razers_spliced.h
+++ b/apps/razers/razers_spliced.h
@@ -190,7 +190,7 @@ void compactSplicedMatches(TMatches &matches,
 	unsigned readNo = -1;
 	unsigned hitCount = 0;
 	unsigned hitCountCutOff = options.maxHits;
-	int scoreDistCutOff = MinValue<int>::VALUE;
+	int scoreDistCutOff = std::numeric_limits<int>::min();
 	
 	TIterator it = begin(matches, Standard());
 	TIterator itEnd = end(matches, Standard());
@@ -271,7 +271,7 @@ void compactSplicedMatchesPurgeAmbiguous(TMatches &matches, TCounts & /*cnts*/,
 	unsigned readNo = -1;
 	unsigned hitCount = 0;
 	unsigned hitCountCutOff = options.maxHits;
-	int scoreDistCutOff = MinValue<int>::VALUE;
+	int scoreDistCutOff = std::numeric_limits<int>::min();
 	
 	TIterator it = begin(matches, Standard());
 	TIterator itEnd = end(matches, Standard());
@@ -355,7 +355,7 @@ void countSplitMatches(TMatches &matches, TCounts &cnt)
 	unsigned readNo = -1;
 	short editDist = -1;
 	int64_t count = 0;
-	int64_t maxVal = MaxValue<TValue>::VALUE;
+	int64_t maxVal = std::numeric_limits<TValue>::max();
 
 	for (; it != itEnd; ++it) 
 	{
@@ -477,7 +477,7 @@ matchVerify(
 #endif
 	
 	unsigned ndlLength = _min(sequenceLength(rseqNo, readSet),options.minMatchLen);
-	int maxScore = MinValue<int>::VALUE;
+	int maxScore = std::numeric_limits<int>::min();
 	int minScore = -(int)(ndlLength * options.errorRate);
 	TMyersFinder maxPos;
 	
@@ -950,7 +950,7 @@ findBestSplitPosition(String<Pair<TScore,int> > & maxColsL,
 	::std::cout << "findBestSplitEditForward\n";
 #endif
 
-	TScore maxSum = minValue<TScore>();
+	TScore maxSum = std::numeric_limits<TScore>::min();
 	int bestL = rowPosL1;
 	int bestR = rowPosR1;
 	while (rowPosL1 <= rowPosL2 && rowPosR1 >= rowPosR2)
@@ -991,7 +991,7 @@ findBestSplitPosition(String<Pair<TScore,int> > & maxColsL,
 	::std::cout << "findBestSplitEditReverse\n";
 #endif
 
-	TScore maxSum = minValue<TScore>();
+	TScore maxSum = std::numeric_limits<TScore>::min();
 	int bestL = rowPosL2;
 	int bestR = rowPosR2;
 
diff --git a/apps/razers/readSimulator.h b/apps/razers/readSimulator.h
index bc04f2d..9b9bedc 100644
--- a/apps/razers/readSimulator.h
+++ b/apps/razers/readSimulator.h
@@ -378,7 +378,7 @@ void simulateReads(
 			TMyersPattern &myersPattern = forwardPattern;
 			
 			// find end of best semi-global alignment
-			int maxScore = MinValue<int>::VALUE;
+			int maxScore = std::numeric_limits<int>::min();
 			int minScore = -(int)countErrors;
 			TMyersFinder maxPos;
 			while (find(myersFinder, myersPattern, minScore))
diff --git a/apps/razers/tests/run_tests.py b/apps/razers/tests/run_tests.py
index 6fd2cb8..ff0b4bd 100644
--- a/apps/razers/tests/run_tests.py
+++ b/apps/razers/tests/run_tests.py
@@ -12,6 +12,7 @@ Usage:  run_tests.py SOURCE_ROOT_PATH BINARY_ROOT_PATH
 import logging
 import os.path
 import sys
+import platform
 
 # Automagically add util/py_lib to PYTHONPATH environment variable.
 path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..',
@@ -23,6 +24,12 @@ import seqan.app_tests as app_tests
 def main(source_base, binary_base):
     """Main entry point of the script."""
 
+    # gold standard binary files created on little endian
+    if platform.machine().startswith('mips64'):
+        print 'Skipping tests for Razers on mips64el'
+        print '====================================='
+        return 0
+
     print 'Executing test for razers'
     print '========================='
     print
diff --git a/apps/razers3/README b/apps/razers3/README
index cd912ce..8b4e1d3 100644
--- a/apps/razers3/README
+++ b/apps/razers3/README
@@ -51,23 +51,23 @@ and BAM formats (.sam or .bam).
 2. Installation
 ------------------------------------------------------------------------------
 
-To install RazerS 3, you can either compile the latest version from the SVN
-trunk or use a precompiled binary.
+To install RazerS 3, you can either compile the latest version from the Git
+version or use a precompiled binary.
 
 ------------------------------------------------------------------------------
 2.1. Compilation from source code
 ------------------------------------------------------------------------------
 
 Follow the "Getting Started" section on http://trac.seqan.de/wiki and check
-out the latest SVN trunk. Instead of creating a project file in Debug mode,
+out the latest Git repo. Instead of creating a project file in Debug mode,
 switch to Release mode (-DCMAKE_BUILD_TYPE=Release) and compile razers3. This
 can be done as follows:
 
-  svn co http://svn.mi.fu-berlin.de/seqan/trunk/seqan seqan-trunk
-  mkdir seqan-trunk/build
-  cd seqan-trunk/build
-  cmake .. -DCMAKE_BUILD_TYPE=Release
-  make razers3
+  1)  git clone https://github.com/seqan/seqan.git
+  2)  mkdir seqan/buld; cd seqan/build
+  3)  cmake .. -DCMAKE_BUILD_TYPE=Release
+  4)  make razers3
+  5)  ./bin/razers3 --help
 
 If RazerS 3 will be run on the same machine it is compiled on, you may
 consider to optimize for the given system architecture. For gcc or llvm/clang
diff --git a/apps/razers3/razers.h b/apps/razers3/razers.h
index f898689..d5f79e4 100644
--- a/apps/razers3/razers.h
+++ b/apps/razers3/razers.h
@@ -70,12 +70,12 @@ struct MatchRecord
     static const unsigned INVALID_ID;
 
     MatchRecord() :
-        contigId(MaxValue<unsigned>::VALUE), readId(MaxValue<unsigned>::VALUE),
+        contigId(std::numeric_limits<unsigned>::max()), readId(std::numeric_limits<unsigned>::max()),
         beginPos(0), endPos(0),
 #ifdef RAZERS_DEFER_COMPACTION
         isRegistered(false),
 #endif  // #ifndef RAZERS_DEFER_COMPACTION
-        orientation('-'), score(0), pairMatchId(MaxValue<unsigned>::VALUE),
+        orientation('-'), score(0), pairMatchId(std::numeric_limits<unsigned>::max()),
         libDiff(0), pairScore(0)
     {}
 };
@@ -89,7 +89,7 @@ operator<<(TStream & stream, MatchRecord<TPos> & record)
 }
 
 template <typename TGPos_>
-const unsigned MatchRecord<TGPos_>::INVALID_ID = MaxValue<unsigned>::VALUE;
+const unsigned MatchRecord<TGPos_>::INVALID_ID = std::numeric_limits<unsigned>::max();
 
 #ifdef RAZERS_PROFILE
 enum
@@ -551,7 +551,7 @@ struct MatchVerifier
     double compactionTime;
 
     MatchVerifier() :
-        genomeLength(0), rightClip(0), sinkPos(MaxValue<TContigPos>::VALUE), onReverseComplement(false), oneMatchPerBucket(false), compactionTime(0) {}
+        genomeLength(0), rightClip(0), sinkPos(std::numeric_limits<TContigPos>::max()), onReverseComplement(false), oneMatchPerBucket(false), compactionTime(0) {}
 
     MatchVerifier(TMatches_ & _matches, TOptions & _options, TFilterPattern & _filterPattern, TCounts & _cnts) :
         matches(&_matches),
@@ -561,7 +561,7 @@ struct MatchVerifier
     {
         genomeLength = 0;
         rightClip = 0;
-        sinkPos = MaxValue<TContigPos>::VALUE >> 1;
+        sinkPos = std::numeric_limits<TContigPos>::max() >> 1;
         onReverseComplement = false;
         oneMatchPerBucket = false;
         compactionTime = 0;
@@ -1478,7 +1478,7 @@ void countMatches(TFragmentStore & store, TCounts & cnt, TRazerSMode const &)
     unsigned readId = TAlignedRead::INVALID_ID;
     short errors = -1;
     int64_t count = 0;
-    int64_t maxVal = MaxValue<TValue>::VALUE;
+    int64_t maxVal = std::numeric_limits<TValue>::max();
 
 #ifdef RAZERS_PROFILE
     timelineBeginTask(TASK_SORT);
@@ -1534,7 +1534,7 @@ setMaxErrors(Pattern<TIndex, Swift<TSwiftSpec> > & filterPattern, TReadNo readNo
     {
 //		std::cout<<" read:"<<readNo<<" newThresh:"<<minT;
         if (maxErrors < 0)
-            minT = MaxValue<int>::VALUE;
+            minT = std::numeric_limits<int>::max();
         setMinThreshold(filterPattern, readNo, (unsigned)minT);
     }
 }
@@ -1568,8 +1568,8 @@ void compactMatches(
     unsigned readNo = -1;
     unsigned hitCount = 0;
     unsigned hitCountCutOff = options.maxHits;
-    int scoreCutOff = MinValue<int>::VALUE;
-    int scoreRangeBest = (IsSameType<TAlignMode, RazerSGlobal>::VALUE && !IsSameType<TScoreMode, RazerSScore>::VALUE) ? -(int)options.scoreDistanceRange : MaxValue<int>::VALUE;
+    int scoreCutOff = std::numeric_limits<int>::min();
+    int scoreRangeBest = (IsSameType<TAlignMode, RazerSGlobal>::VALUE && !IsSameType<TScoreMode, RazerSScore>::VALUE) ? -(int)options.scoreDistanceRange : std::numeric_limits<int>::max();
     ignoreUnusedVariableWarning(scoreRangeBest);
     ignoreUnusedVariableWarning(compactMode);
 
@@ -1863,7 +1863,7 @@ matchVerify(
     TGenomeIterator git     = begin(inf, Standard());
     TGenomeIterator gitEnd  = end(inf, Standard()) - (ndlLength - 1);
 
-    unsigned errorThresh = (verifier.oneMatchPerBucket) ? MaxValue<unsigned>::VALUE : maxErrors;
+    unsigned errorThresh = (verifier.oneMatchPerBucket) ? std::numeric_limits<unsigned>::max() : maxErrors;
     unsigned minErrors = maxErrors + 2;
     int bestHitLength = 0;
 
@@ -2007,7 +2007,7 @@ matchVerify(
     TGenomeIterator gitEnd  = end(inf, Standard()) - (ndlLength - 1);
 
     int maxScore = minScore - 1;
-    int scoreThresh = (verifier.oneMatchPerBucket) ? MaxValue<int>::VALUE : minScore;
+    int scoreThresh = (verifier.oneMatchPerBucket) ? std::numeric_limits<int>::max() : minScore;
     int score, errors;
 
     for (; git < gitEnd; ++git)
@@ -2137,14 +2137,14 @@ matchVerify(
     typedef Pattern<TReadRev, MyersUkkonenGlobal>           TMyersPatternRev;
 
     unsigned ndlLength = length(read);
-    int maxScore = MinValue<int>::VALUE;
+    int maxScore = std::numeric_limits<int>::min();
     int minScore = verifier.options->errorCutOff[readId];
     if (minScore == 0)
         return false;
 
     minScore = -minScore + 1;
 
-    TDistance minSinkDistance = MaxValue<TDistance>::VALUE;
+    TDistance minSinkDistance = std::numeric_limits<TDistance>::max();
     TPosition maxPos = 0;
     TPosition lastPos = length(inf);
 #ifdef RAZERS_ISLAND_CRITERION
@@ -2282,7 +2282,7 @@ matchVerify(
 
                 verifier.push();
                 maxScore = minScore - 1;
-                minSinkDistance = MaxValue<TDistance>::VALUE;
+                minSinkDistance = std::numeric_limits<TDistance>::max();
             }
         }
 #endif  // #ifdef RAZERS_ISLAND_CRITERION
@@ -2466,7 +2466,7 @@ void computeQGramLengths(TDelta & minDelta, TOptions const & options)
 
     unsigned seqCount = 0;
     String<unsigned> maxDelta;
-    resize(minDelta, options.maxOverlap + 1, MaxValue<unsigned>::VALUE);
+    resize(minDelta, options.maxOverlap + 1, std::numeric_limits<unsigned>::max());
     resize(maxDelta, options.maxOverlap + 1, 3);
 
     // compute delta (==stepSize) for different overlaps
diff --git a/apps/razers3/razers_match_filter.h b/apps/razers3/razers_match_filter.h
index 05bc4ef..cf8e422 100644
--- a/apps/razers3/razers_match_filter.h
+++ b/apps/razers3/razers_match_filter.h
@@ -174,7 +174,7 @@ inline void
 registerRead(MatchFilter<TOptionsSpec, TReadSeqSet, TCallback> & filter, unsigned readId, int score)
 {
     // std::cerr << "registering read " << readId << std::endl;
-    if (filter.hitCount[readId - filter.readOffset] == MaxValue<unsigned>::VALUE)
+    if (filter.hitCount[readId - filter.readOffset] == std::numeric_limits<unsigned>::max())
         return;
 
     if (++filter.hitCount[readId - filter.readOffset] < filter.matchThreshold)
@@ -254,7 +254,7 @@ processRead(MatchFilter<TOptionsSpec, TReadSeqSet, TCallback> & filter, unsigned
     {
         _freeHistogram(filter, histogramId);
         filter.readIdToHistogramId.erase(readId);
-        filter.hitCount[readId - filter.readOffset] = MaxValue<unsigned>::VALUE;
+        filter.hitCount[readId - filter.readOffset] = std::numeric_limits<unsigned>::max();
         return true;
     }
     return false;
diff --git a/apps/razers3/razers_matepairs.h b/apps/razers3/razers_matepairs.h
index bfe549e..f0329d4 100644
--- a/apps/razers3/razers_matepairs.h
+++ b/apps/razers3/razers_matepairs.h
@@ -425,8 +425,8 @@ void compactPairMatches(
     unsigned matePairId = -2;
     unsigned hitCount = 0;
     unsigned hitCountCutOff = options.maxHits;
-    int scoreDistCutOff = MinValue<int>::VALUE;
-    int scoreRangeBest = (options.scoreDistanceRange == 0u) ? MinValue<int>::VALUE : -(int)options.scoreDistanceRange;
+    int scoreDistCutOff = std::numeric_limits<int>::min();
+    int scoreRangeBest = (options.scoreDistanceRange == 0u) ? std::numeric_limits<int>::min() : -(int)options.scoreDistanceRange;
 
     TIterator it = begin(matches, Standard());
     TIterator itEnd = end(matches, Standard());
@@ -751,8 +751,8 @@ void _mapMatePairReads(
             }
         }
 
-        int bestLeftScore = MinValue<int>::VALUE;
-        int bestLibSizeError = MaxValue<int>::VALUE;
+        int bestLeftScore = std::numeric_limits<int>::min();
+        int bestLibSizeError = std::numeric_limits<int>::max();
         TDequeueIterator bestLeft = TDequeueIterator();
 
         bool rightVerified = false;
@@ -916,7 +916,7 @@ void _mapMatePairReads(
         }
 
         // verify right mate, if left mate matches
-        if (bestLeftScore != MinValue<int>::VALUE)
+        if (bestLeftScore != std::numeric_limits<int>::min())
         {
             fL.i2 = (*bestLeft).i2;
 
diff --git a/apps/razers3/razers_matepairs_parallel.h b/apps/razers3/razers_matepairs_parallel.h
index 7854ced..b57b37d 100644
--- a/apps/razers3/razers_matepairs_parallel.h
+++ b/apps/razers3/razers_matepairs_parallel.h
@@ -371,7 +371,7 @@ void initializeThreadLocalStoragesPaired(TThreadLocalStorages & threadLocalStora
         typedef typename TThreadLocalStorage::TMatchFilter TMatchFilter;
         double READ_FRAC_WITH_HISTO = 0.01;
         tls.matchFilter.reset(new TMatchFilter(tls.splitters[i + 1] - tls.splitters[i], options.matchHistoStartThreshold, READ_FRAC_WITH_HISTO, tls, tls.splitters[i], tls.globalStore->readSeqStore, tls.options));
-        tls.options.compactThresh = MaxValue<unsigned>::VALUE;
+        tls.options.compactThresh = std::numeric_limits<unsigned>::max();
 #endif // #ifdef RAZERS_DEFER_COMPACTION
 
         unsigned offset = splitters[i];
@@ -663,8 +663,8 @@ void workVerification(ThreadLocalStorage<MapPairedReads<TMatches, TFragmentStore
             }
         }
 
-        int bestLeftScore = MinValue<int>::VALUE;
-        int bestLibSizeError = MaxValue<int>::VALUE;
+        int bestLeftScore = std::numeric_limits<int>::min();
+        int bestLibSizeError = std::numeric_limits<int>::max();
         TDequeueIterator bestLeft = TDequeueIterator();
 
         bool rightVerified = false;
@@ -822,7 +822,7 @@ void workVerification(ThreadLocalStorage<MapPairedReads<TMatches, TFragmentStore
         }
 
         // (4) Verify right mate, if left mate matches.
-        if (bestLeftScore != MinValue<int>::VALUE)
+        if (bestLeftScore != std::numeric_limits<int>::min())
         {
             fL.i2 = (*bestLeft).i2;
 
@@ -1477,7 +1477,7 @@ int _mapMatePairReadsParallel(
 
     // Save compaction threshold and set global threshold to infinity, so matchVerify does not compact!
     int oldThreshold = options.compactThresh;
-    options.compactThresh = MaxValue<unsigned>::VALUE;
+    options.compactThresh = std::numeric_limits<unsigned>::max();
 
     SEQAN_PROTIMESTART(findTime);
     for (int contigId = 0; contigId < (int)length(store.contigStore); ++contigId)
diff --git a/apps/razers3/razers_paired_match_filter.h b/apps/razers3/razers_paired_match_filter.h
index c4d9049..4eaac9d 100644
--- a/apps/razers3/razers_paired_match_filter.h
+++ b/apps/razers3/razers_paired_match_filter.h
@@ -83,7 +83,7 @@ inline void
 registerRead(PairedMatchFilter<TOptionsSpec, TReadSeqSet, TCallback> & filter, unsigned pairId, int score)
 {
     // std::cerr << "registering read " << pairId << std::endl;
-    if (filter.hitCount[pairId - filter.readOffset] == MaxValue<unsigned>::VALUE)
+    if (filter.hitCount[pairId - filter.readOffset] == std::numeric_limits<unsigned>::max())
         return;
 
     if (++filter.hitCount[pairId - filter.readOffset] < filter.matchThreshold)
@@ -170,7 +170,7 @@ processRead(PairedMatchFilter<TOptionsSpec, TReadSeqSet, TCallback> & filter, un
     {
         _freeHistogram(filter, histogramId);
         filter.pairIdToHistogramId.erase(pairId);
-        filter.hitCount[pairId - filter.readOffset] = MaxValue<unsigned>::VALUE;
+        filter.hitCount[pairId - filter.readOffset] = std::numeric_limits<unsigned>::max();
         return true;
     }
     return false;
diff --git a/apps/razers3/razers_parallel.h b/apps/razers3/razers_parallel.h
index 3555004..7113973 100644
--- a/apps/razers3/razers_parallel.h
+++ b/apps/razers3/razers_parallel.h
@@ -353,8 +353,8 @@ writeBackToLocal(ThreadLocalStorage<MapSingleReads<TMatches, TFragmentStore, TFi
     unsigned const DELTA = getMaxDeviationOfOrder(tls.filterPattern);
     // std::cerr << "(DELTA=" << DELTA << ")";
     //std::cerr << "[DELTA=" << DELTA << std::endl;
-    size_t firstBeginPos = MaxValue<size_t>::VALUE;  // Leftmost sort position, required later for masking.
-    size_t firstWindowBegin = MaxValue<size_t>::VALUE;  // Leftmost sort position, required later for masking.
+    size_t firstBeginPos = std::numeric_limits<size_t>::max();  // Leftmost sort position, required later for masking.
+    size_t firstWindowBegin = std::numeric_limits<size_t>::max();  // Leftmost sort position, required later for masking.
     unsigned bucketsWrittenBack = 0;
     // (2) Write back the longest contiguous sequence of full buckets.
     for (; tls.nextBucketToWriteBack < length(tls.missingInBucket) && tls.missingInBucket[tls.nextBucketToWriteBack] == 0u; ++tls.nextBucketToWriteBack, ++bucketsWrittenBack)
@@ -394,7 +394,7 @@ writeBackToLocal(ThreadLocalStorage<MapSingleReads<TMatches, TFragmentStore, TFi
         size_t dPos = 1;
         // Exponential search backwards.  After masking, reads are sorted by begin position.
         size_t windowBegin = tls.options.windowSize * idx;
-        if (firstWindowBegin == MaxValue<size_t>::VALUE)
+        if (firstWindowBegin == std::numeric_limits<size_t>::max())
             firstWindowBegin = windowBegin;
         while (beginPos > 0u &&
                static_cast<size_t>(tls.matches[beginPos].beginPos) < windowBegin &&
@@ -414,7 +414,7 @@ writeBackToLocal(ThreadLocalStorage<MapSingleReads<TMatches, TFragmentStore, TFi
         // LessBeginPos<TMatch> cmp;
         // TIterator it = std::lower_bound(begin(tls.matches, Standard()) + beginPos, end(tls.matches, Standard()), m, cmp);
         // beginPos = it - begin(tls.matches, Standard());
-        if (firstBeginPos == MaxValue<size_t>::VALUE)
+        if (firstBeginPos == std::numeric_limits<size_t>::max())
             firstBeginPos = beginPos;
 
 // SEQAN_OMP_PRAGMA(critical)
@@ -675,7 +675,7 @@ void _mapSingleReadsParallelToContig(
 // SEQAN_OMP_PRAGMA(critical)
 //         std::cerr << "window count: " << length(tls.verificationResultBuckets) << std::endl;
         clear(tls.missingInBucket);
-        resize(tls.missingInBucket, length(tls.verificationResultBuckets), MaxValue<unsigned>::VALUE);
+        resize(tls.missingInBucket, length(tls.verificationResultBuckets), std::numeric_limits<unsigned>::max());
 
         // For each filtration window...
         bool hasMore = !empty(host(tls.filterFinder));
@@ -841,7 +841,7 @@ void initializeThreadLocalStoragesSingle(TThreadLocalStorages & threadLocalStora
         typedef typename TThreadLocalStorage::TMatchFilter TMatchFilter;
         double READ_FRAC_WITH_HISTO = 0.01;
         tls.matchFilter.reset(new TMatchFilter(tls.splitters[tls.threadId + 1] - tls.splitters[tls.threadId], options.matchHistoStartThreshold, READ_FRAC_WITH_HISTO, tls, tls.splitters[tls.threadId], tls.globalStore->readSeqStore, tls.options));
-        tls.options.compactThresh = MaxValue<unsigned>::VALUE;
+        tls.options.compactThresh = std::numeric_limits<unsigned>::max();
 #endif // #ifdef RAZERS_DEFER_COMPACTION
 
         // Clear pattern and set parameters.
@@ -1022,7 +1022,7 @@ int _mapSingleReadsParallel(
 
     // Save compaction threshold and set global threshold to infinity, so matchVerify does not compact!
     int oldThreshold = options.compactThresh;
-    options.compactThresh = MaxValue<unsigned>::VALUE;
+    options.compactThresh = std::numeric_limits<unsigned>::max();
 
     // For each contig: Map reads in parallel.
     SEQAN_PROTIMESTART(findTime);
diff --git a/apps/razers3/readSimulator.h b/apps/razers3/readSimulator.h
index aa3df4c..3a52a92 100644
--- a/apps/razers3/readSimulator.h
+++ b/apps/razers3/readSimulator.h
@@ -381,7 +381,7 @@ void simulateReads(
             TMyersPattern &myersPattern = forwardPattern;
 
             // find end of best semi-global alignment
-            int maxScore = MinValue<int>::VALUE;
+            int maxScore = std::numeric_limits<int>::min();
             int minScore = -(int)countErrors;
             TMyersFinder maxPos;
             while (find(myersFinder, myersPattern, minScore))
diff --git a/apps/sak/sak.cpp b/apps/sak/sak.cpp
index bb1f23a..7762286 100644
--- a/apps/sak/sak.cpp
+++ b/apps/sak/sak.cpp
@@ -85,9 +85,9 @@ struct SakOptions
     SakOptions() :
         verbosity(1),
         seqInfixBegin(0),
-        seqInfixEnd(seqan::maxValue<uint64_t>()),
+        seqInfixEnd(std::numeric_limits<uint64_t>::max()),
         reverseComplement(false),
-        maxLength(seqan::maxValue<uint64_t>())
+        maxLength(std::numeric_limits<uint64_t>::max())
     {
     }
 };
@@ -118,7 +118,7 @@ bool parseRange(TNum & beginPos, TNum & endPos, seqan::CharString const & rangeS
 
     if (empty(buffer))
     {
-        endPos = seqan::maxValue<TNum>();
+        endPos = std::numeric_limits<TNum>::max();
         return true;
     }
 
@@ -354,12 +354,12 @@ int main(int argc, char ** argv)
     }
 
     // Compute index of last sequence to write if any.
-    uint64_t endIdx = seqan::maxValue<uint64_t>();
+    uint64_t endIdx = std::numeric_limits<uint64_t>::max();
     for (unsigned i = 0; i < length(options.seqIndices); ++i)
-        if (endIdx == seqan::maxValue<uint64_t>() || endIdx > options.seqIndices[i] + 1)
+        if (endIdx == std::numeric_limits<uint64_t>::max() || endIdx > options.seqIndices[i] + 1)
             endIdx = options.seqIndices[i] + 1;
     for (unsigned i = 0; i < length(options.seqIndexRanges); ++i)
-        if (endIdx == seqan::maxValue<uint64_t>() || endIdx > options.seqIndexRanges[i].i2)
+        if (endIdx == std::numeric_limits<uint64_t>::max() || endIdx > options.seqIndexRanges[i].i2)
             endIdx = options.seqIndexRanges[i].i2;
     if (options.verbosity >= 2)
         std::cerr << "Sequence end idx: " << endIdx << "\n";
diff --git a/apps/samcat/CMakeLists.txt b/apps/samcat/CMakeLists.txt
index 963ec67..1fada83 100644
--- a/apps/samcat/CMakeLists.txt
+++ b/apps/samcat/CMakeLists.txt
@@ -23,6 +23,11 @@ if (NOT "${SEQAN_BUILD_SYSTEM}" STREQUAL "DEVELOP")
     find_package (SeqAn CONFIG REQUIRED)
 endif ()
 
+if (NOT ZLIB_FOUND)
+  message (STATUS "  ZLIB not found: samcat will not be built.")
+  return ()
+endif ()
+
 # ----------------------------------------------------------------------------
 # Build Setup
 # ----------------------------------------------------------------------------
diff --git a/apps/searchjoin/db.h b/apps/searchjoin/db.h
index 2ef7a45..bec0120 100644
--- a/apps/searchjoin/db.h
+++ b/apps/searchjoin/db.h
@@ -130,25 +130,25 @@ namespace seqan
 template <>
 struct Fibre<TDbDnaSaSmall, FibreSA>
 {
-    typedef String<Pair<unsigned int, unsigned char, BitPacked<24, 8> >, DefaultIndexStringSpec<TDbDnaSaSmall>::Type> Type;
+    typedef String<Pair<unsigned int, unsigned char, BitPacked<24, 8> >, StringSpec<TDbDnaSaSmall>::Type> Type;
 };
 
 template <>
 struct Fibre<TDbGeoSaSmall, FibreSA>
 {
-    typedef String<Pair<unsigned int, unsigned char, BitPacked<24, 8> >, DefaultIndexStringSpec<TDbGeoSaSmall>::Type> Type;
+    typedef String<Pair<unsigned int, unsigned char, BitPacked<24, 8> >, StringSpec<TDbGeoSaSmall>::Type> Type;
 };
 
 template <>
 struct Fibre<TDbDnaSaHuge, FibreSA>
 {
-    typedef String<Pair<unsigned int, unsigned char, Pack>, DefaultIndexStringSpec<TDbDnaSaHuge>::Type> Type;
+    typedef String<Pair<unsigned int, unsigned char, Pack>, StringSpec<TDbDnaSaHuge>::Type> Type;
 };
 
 template <>
 struct Fibre<TDbGeoSaHuge, FibreSA>
 {
-    typedef String<Pair<unsigned int, unsigned char, Pack>, DefaultIndexStringSpec<TDbDnaSaHuge>::Type> Type;
+    typedef String<Pair<unsigned int, unsigned char, Pack>, StringSpec<TDbDnaSaHuge>::Type> Type;
 };
 }
 
@@ -159,7 +159,7 @@ struct Fibre<TDbGeoSaHuge, FibreSA>
 //template <typename TText>
 //struct ShapeLength
 //{
-//    static const unsigned VALUE = MaxValue<typename Size<TText>::Type>::VALUE;
+//    static const unsigned VALUE = std::numeric_limits<typename Size<TText>::Type>::max();
 //};
 //
 //template <>
@@ -511,8 +511,8 @@ bool load(Db<TText, TSpec> & db, TFileName const & fileName)
     TDbParser parser(db);
 
     // Initialize min/max text length.
-    db.minLength = MaxValue<TTextSize>::VALUE;
-    db.maxLength = MinValue<TTextSize>::VALUE;
+    db.minLength = std::numeric_limits<TTextSize>::max();
+    db.maxLength = std::numeric_limits<TTextSize>::min();
 
     // Read the file.
     while (!atEnd(inputIt))
@@ -573,10 +573,10 @@ void split(Db<TText, Query> & dbShort, Db<TText, Query> & dbLong, Db<TText, Quer
     TDbSize dbSize = length(db.text);
 
     // Initialize min/max text length.
-    dbShort.minLength = MaxValue<TTextSize>::VALUE;
-    dbShort.maxLength = MinValue<TTextSize>::VALUE;
-    dbLong.minLength = MaxValue<TTextSize>::VALUE;
-    dbLong.maxLength = MinValue<TTextSize>::VALUE;
+    dbShort.minLength = std::numeric_limits<TTextSize>::max();
+    dbShort.maxLength = std::numeric_limits<TTextSize>::min();
+    dbLong.minLength = std::numeric_limits<TTextSize>::max();
+    dbLong.maxLength = std::numeric_limits<TTextSize>::min();
 
     for (TDbSize dbId = 0; dbId < dbSize; ++dbId)
     {
@@ -834,7 +834,7 @@ void build(DbIndex<Index<TText, TIndexSpec>, TDbIndexSpec> & dbIndex,
 //        }
 //    }
 //
-//    QGramLess_<TIndexSAPos, TText const> less(db.text, MaxValue<TTextSize>::VALUE);
+//    QGramLess_<TIndexSAPos, TText const> less(db.text, std::numeric_limits<TTextSize>::max());
 //    sort(sa, less, Parallel());
 }
 
@@ -923,7 +923,7 @@ void _buildSA(TIndexSAFibre & sa,
         TTextSize textLength = length(text);
 
         TErrors errors = getErrors(db, dbId);
-        
+
         TTextSize seedCount = _max(textLength / seedLength, 1u);
         TSeedErrors seedErrors_ = errors / seedCount;
         TTextSize seedCountHigh = (errors % seedCount) + 1;
diff --git a/apps/sgip/sgip_base.h b/apps/sgip/sgip_base.h
index a471240..0e3d3b6 100644
--- a/apps/sgip/sgip_base.h
+++ b/apps/sgip/sgip_base.h
@@ -310,11 +310,11 @@ inline int compare_(std::vector<TValue> const & obj1, std::vector<TValue> const
     tiEnd = obj2.end();
     while (it < itEnd && ti < tiEnd)
     {
-        if (getValue(it) < getValue(ti))
+        if (*it < *ti)
         {
             return -1;
         }
-        else if (getValue(it) > getValue(ti))
+        else if (*it > *ti)
         {
             return 1;
         }
diff --git a/apps/snp_store/README b/apps/snp_store/README
index 69427cb..4112f41 100644
--- a/apps/snp_store/README
+++ b/apps/snp_store/README
@@ -26,7 +26,7 @@ Reads can optionally be realigned, using the ReAligner algorithm by Anson
 and Myers.
 
 Please note: SnpStore is work in progress! Keep yourself up to date by 
-checking out the latest version of SnpStore from the SeqAn SVN repository
+checking out the latest version of SnpStore from the SeqAn Git repository
 (instructions follow below).
 
 
@@ -45,13 +45,13 @@ http://www.seqan.de). To build SnpStore do the following:
   6)  ./apps/snp_store
 
 Alternatively - and this is what I recommend - you can check out the latest 
-SVN version of SnpStore and SeqAn with:
+Git version of SnpStore and SeqAn with:
 
-  1)  svn co http://svn.mi.fu-berlin.de/seqan/trunk/seqan
-  2)  cd seqan/build
+  1)  git clone https://github.com/seqan/seqan.git
+  2)  mkdir seqan/buld; cd seqan/build
   3)  cmake .. -DCMAKE_BUILD_TYPE=Release
-  5)  make snp_store
-  7)  ./apps/snp_store
+  4)  make snp_store
+  5)  ./bin/snp_store --help
 
 If successful, an executable file snp_store was built and a brief usage 
 description was dumped.
diff --git a/apps/snp_store/snp_store.cpp b/apps/snp_store/snp_store.cpp
index cb6ad0d..419e90f 100755
--- a/apps/snp_store/snp_store.cpp
+++ b/apps/snp_store/snp_store.cpp
@@ -158,8 +158,8 @@ copyNextWindowMatchesAndReads(TFragmentStore &fragmentStore,
     --mIt;
 
     // We will use minCoord/maxCoord to store the temporarily minimal and maximal coordinates in the window.
-    int minCoord = maxValue<int>();
-    int maxCoord = minValue<int>();
+    int minCoord = std::numeric_limits<int>::max();
+    int maxCoord = std::numeric_limits<int>::min();
     //CharString str = "discBef";
     //_dumpMatches(fragmentStore, str);
 
@@ -187,9 +187,9 @@ copyNextWindowMatchesAndReads(TFragmentStore &fragmentStore,
     }
 
     // Write minimal and maximal coordinate from reads in this window to options.minCoord/options.maxCoord.
-    if (minCoord != maxValue<int>())
+    if (minCoord != std::numeric_limits<int>::max())
         options.minCoord = minCoord;
-    if (maxCoord != minValue<int>())
+    if (maxCoord != std::numeric_limits<int>::min())
         options.maxCoord = maxCoord;
 
     if(options._debugLevel > 1)
@@ -817,7 +817,7 @@ int detectSNPs(SNPCallingOptions<TSpec> &options)
         TReadCounts tmpReadCounts;
         TReadClips tmpReadClips;
         TReadCigars tmpReadCigars;
-        options.minCoord = MaxValue<unsigned>::VALUE;
+        options.minCoord = std::numeric_limits<unsigned>::max();
         options.maxCoord = 0;
 
         // snp calling is done for all positions between windowBegin and windowEnd
diff --git a/apps/snp_store/snp_store.h b/apps/snp_store/snp_store.h
index 6aaee0f..2288c19 100755
--- a/apps/snp_store/snp_store.h
+++ b/apps/snp_store/snp_store.h
@@ -297,7 +297,7 @@ struct FragmentStoreConfig<SnpStoreGroupSpec_> :
 
             windowSize = 1000000;
             windowBuff = 70;
-            minCoord = maxValue<unsigned>();
+            minCoord = std::numeric_limits<unsigned>::max();
             maxCoord = 0;
             maxHitLength = 1;
 
@@ -1161,7 +1161,7 @@ int readMatchesFromGFF_Batch(
                 options.maxHitLength = endPos - beginPos;
 
             // remember min and max positions seen
-            if(beginPos < (TContigPos)options.minCoord || options.minCoord == maxValue<unsigned>()) options.minCoord = (unsigned)beginPos;
+            if(beginPos < (TContigPos)options.minCoord || options.minCoord == std::numeric_limits<unsigned>::max()) options.minCoord = (unsigned)beginPos;
             if(endPos > (TContigPos)options.maxCoord) options.maxCoord =  (unsigned)endPos;
 
             // create match m
@@ -1658,7 +1658,7 @@ int readMatchesFromSamBam_Batch(
                 options.maxHitLength = endPos - beginPos;
 
             // remember min and max positions seen
-            if(beginPos < (TContigPos)options.minCoord || options.minCoord == maxValue<unsigned>()) options.minCoord = (unsigned)beginPos;
+            if(beginPos < (TContigPos)options.minCoord || options.minCoord == std::numeric_limits<unsigned>::max()) options.minCoord = (unsigned)beginPos;
             if(endPos > (TContigPos)options.maxCoord) options.maxCoord =  (unsigned)endPos;
 
             // create match m
diff --git a/apps/splazers/README b/apps/splazers/README
index 938b2e7..b6721f6 100644
--- a/apps/splazers/README
+++ b/apps/splazers/README
@@ -43,14 +43,13 @@ SeqAn projects download page: http://www.seqan.de/downloads/projects.html
 
 SplazerS is distributed with SeqAn - The C++ Sequence Analysis Library (see 
 http://www.seqan.de). To build SplazerS yourself you can check out the latest 
-SVN version of SplazerS and SeqAn with:
-
-  1)  svn co http://svn.mi.fu-berlin.de/seqan/trunk/seqan seqan-trunk
-  2)  mkdir seqan-trunk/build/
-  3)  cd seqan-trunk/build/
-  4)  cmake .. -DCMAKE_BUILD_TYPE=Release
-  5)  make splazers
-  6)  ./apps/splazers/splazers --help
+Git version of SplazerS and SeqAn with:
+
+  1)  git clone https://github.com/seqan/seqan.git
+  2)  mkdir seqan/buld; cd seqan/build
+  3)  cmake .. -DCMAKE_BUILD_TYPE=Release
+  4)  make splazers
+  5)  ./bin/splazers --help
 
 Alternatively, you can download the latest SeqAn snapshot and build SplazerS
 with:
diff --git a/apps/splazers/outputFormat.h b/apps/splazers/outputFormat.h
index 80557c4..3fd0f0c 100644
--- a/apps/splazers/outputFormat.h
+++ b/apps/splazers/outputFormat.h
@@ -1112,7 +1112,12 @@ void dumpMatches(
 			}
 			break;
 		case 3: // Gff:  printf "$chr $name_$format read $pos %ld . $dir . ID=$col[0]$unique$rest\n",$pos+$len-1;
-			for (unsigned filecount = 0; filecount < length(genomeFileNameList); ++filecount)
+			// NOTE(marehr): filecount+=2 might be a potential bug [https://github.com/seqan/seqan/issues/2165]
+			// In revision 4dbf27b55 and before, filecount was incremented twice at the
+			// end of the for loop, which caused a compiler warning (once in the body
+			// and once in the iteration_expression of the for loop). We kept this
+			// behaviour, because we have no active maintainer for this app.
+			for (unsigned filecount = 0; filecount < length(genomeFileNameList); filecount+=2)
 			{
 				// open genome file	
 				SeqFileIn gFile;
@@ -1358,7 +1363,6 @@ void dumpMatches(
 					}
 				}
 				close(gFile);
-				++filecount;
 			}
 			break;
 		case 4: // SAM output for splitMatches
diff --git a/apps/splazers/razers.h b/apps/splazers/razers.h
index 3c1669f..72e32ff 100644
--- a/apps/splazers/razers.h
+++ b/apps/splazers/razers.h
@@ -917,7 +917,7 @@ void countMatches(TMatches &matches, TCounts &cnt)
 	unsigned readNo = -1;
 	short editDist = -1;
 	int64_t count = 0;
-	int64_t maxVal = MaxValue<TValue>::VALUE;
+	int64_t maxVal = std::numeric_limits<TValue>::max();
 
 	for (; it != itEnd; ++it) 
 	{
@@ -954,7 +954,7 @@ setMaxErrors(TSwift &swift, TReadNo readNo, TMaxErrors maxErrors)
 	int minT = _qgramLemma(swift, readNo, maxErrors);
 	if (minT > 1)
 	{
-		if (maxErrors < 0) minT = MaxValue<int>::VALUE;
+		if (maxErrors < 0) minT = std::numeric_limits<int>::max();
 //		::std::cout<<" read:"<<readNo<<" newThresh:"<<minT;
 		setMinThreshold(swift, readNo, (unsigned)minT);
 	}
@@ -1002,7 +1002,7 @@ void compactMatches(TMatches &matches, TCounts &
 		++hitCountCutOff;	// we keep one more match than we actually want, so we can later decide
 							// whether the read mapped more than maxhits times 
 #endif
-	int editDistCutOff = MaxValue<int>::VALUE;
+	int editDistCutOff = std::numeric_limits<int>::max();
 
 	TIterator it = begin(matches, Standard());
 	TIterator itEnd = end(matches, Standard());
@@ -1165,7 +1165,7 @@ void purgeAmbiguousRnaMatches(TMatches &matches, RazerSOptions<TSpec> &options)
 	unsigned readNo = -1;
 	unsigned hitCount = 0;
 	unsigned hitCountCutOff = options.maxHits;
-	int editDistCutOff = MaxValue<int>::VALUE;
+	int editDistCutOff = std::numeric_limits<int>::max();
 
 	TIterator it = begin(matches, Standard());
 	TIterator itEnd = end(matches, Standard());
@@ -1406,7 +1406,7 @@ matchVerify(
 #endif
 
     unsigned ndlLength = sequenceLength(rseqNo, readSet);
-	int maxScore = MinValue<int>::VALUE;
+	int maxScore = std::numeric_limits<int>::min();
 	int minScore = -(int)(ndlLength * options.errorRate);
 	TMyersFinder maxPos;
 
diff --git a/apps/splazers/razers_matepairs.h b/apps/splazers/razers_matepairs.h
index f07e3d8..ff2ce7c 100644
--- a/apps/splazers/razers_matepairs.h
+++ b/apps/splazers/razers_matepairs.h
@@ -542,7 +542,7 @@ void compactPairMatches(TMatches &matches, TCounts & /*cnts*/, RazerSOptions<TSp
 	unsigned readNo = -1;
 	unsigned hitCount = 0;
 	unsigned hitCountCutOff = options.maxHits;
-	int scoreDistCutOff = MinValue<int>::VALUE;
+	int scoreDistCutOff = std::numeric_limits<int>::min();
 
 	TIterator it = begin(matches, Standard());
 	TIterator itEnd = end(matches, Standard());
@@ -744,8 +744,8 @@ void mapMatePairReads(
 				break;
 		}
 
-		int	bestLeftErrors = MaxValue<int>::VALUE;
-		int bestLibSizeError = MaxValue<int>::VALUE;
+		int	bestLeftErrors = std::numeric_limits<int>::max();
+		int bestLibSizeError = std::numeric_limits<int>::max();
 		TDequeueIterator bestLeft = TDequeueIterator();
 
 		TDequeueIterator it;
@@ -817,7 +817,7 @@ void mapMatePairReads(
 			value(fifo, lastPositive - firstNo).i1 = (int64_t)-1;
 		
 		// verify right mate, if left mate matches
-		if (bestLeftErrors != MaxValue<int>::VALUE)
+		if (bestLeftErrors != std::numeric_limits<int>::max())
 		{
 			if (matchVerify(
 					mR, infix(swiftFinderR),
diff --git a/apps/splazers/razers_spliced.h b/apps/splazers/razers_spliced.h
index 13b97c1..f370d67 100644
--- a/apps/splazers/razers_spliced.h
+++ b/apps/splazers/razers_spliced.h
@@ -210,7 +210,7 @@ bool loadReadsSam(
 	if (!open(file, fileName)) return false;
 
 	options.maxReadRegionsEnd = 0;
-	options.minReadRegionsStart = maxValue<int>();
+	options.minReadRegionsStart = std::numeric_limits<int>::max();
 	TContigPos regionBegin = options.minReadRegionsStart;
 	TContigPos regionEnd = options.maxReadRegionsEnd;
 
@@ -351,7 +351,7 @@ void compactSplicedMatches(TMatches &matches,
 	unsigned readNo = -1;
 	unsigned hitCount = 0;
 	unsigned hitCountCutOff = options.maxHits;
-	int scoreDistCutOff = MinValue<int>::VALUE;
+	int scoreDistCutOff = std::numeric_limits<int>::min();
 	
 	TIterator it = begin(matches, Standard());
 	TIterator itEnd = end(matches, Standard());
@@ -442,7 +442,7 @@ void compactAndCountSplicedMatches(TMatches &matches,
 	unsigned readNo = -1;
 	unsigned hitCount = 0;
 	unsigned hitCountCutOff = options.maxHits;
-	int scoreDistCutOff = MinValue<int>::VALUE;
+	int scoreDistCutOff = std::numeric_limits<int>::min();
 	
 	clear(states);
 	
@@ -643,7 +643,7 @@ matchVerify(
 #endif
 	
 	unsigned ndlLength = _min(sequenceLength(rseqNo, readSet),options.minMatchLen);
-	int maxScore = MinValue<int>::VALUE;
+	int maxScore = std::numeric_limits<int>::min();
 	int minScore = - maxNumSeedErrors(options,TSufPrefSpec());
 
 	TMyersFinder maxPos;
@@ -1117,7 +1117,7 @@ findBestSplitPosition(String<Pair<TScore,int> > & maxColsL,
 	::std::cout << "findBestSplitEditForward\n";
 #endif
 
-	TScore maxSum = minValue<TScore>();
+	TScore maxSum = std::numeric_limits<TScore>::min();
 	int bestL = rowPosL1;
 	int bestR = rowPosR1;
 	int bestTraceExtL = rowPosL1;
@@ -1319,8 +1319,8 @@ _alignBandedNeedlemanWunsch(TTrace& trace,
 	resize(mat, diagonalWidth);
 	resize(trace, height * diagonalWidth);
 //      ::std::cout <<height << "<-hieght\n";
-	overallMaxValue[0] = MinValue<TScoreValue>::VALUE;
-	overallMaxValue[1] = MinValue<TScoreValue>::VALUE;
+	overallMaxValue[0] = std::numeric_limits<TScoreValue>::min();
+	overallMaxValue[1] = std::numeric_limits<TScoreValue>::min();
 	overallMaxIndex[0] = diagonalWidth;     overallMaxIndex[1] = height;
 	overallMaxIndex[2] = diagonalWidth;     overallMaxIndex[3] = height;
 
@@ -1346,14 +1346,14 @@ _alignBandedNeedlemanWunsch(TTrace& trace,
 	TScoreValue verti_val = 0;
 	TScoreValue hori_val = 0;
 	for(TSize row = 0; row < height; ++row) {
-		TScoreValue maxRowVal = MinValue<TScoreValue>::VALUE;
+		TScoreValue maxRowVal = std::numeric_limits<TScoreValue>::min();
 		unsigned maxRowCol = 0;
 		actualRow = row + lo_row;
 		if (lo_diag > 0) --lo_diag;
 		if (row + lo_row >= len1 - diagU) --hi_diag;
 		TTraceIter traceIt = begin(trace, Standard()) + row * diagonalWidth + lo_diag;
 		TRowIter matIt = begin(mat, Standard()) + lo_diag;
-		hori_val = MinValue<TScoreValue>::VALUE;
+		hori_val = std::numeric_limits<TScoreValue>::min();
 		for(TSize col = lo_diag; col<hi_diag; ++col, ++matIt, ++traceIt) {
 			actualCol = col + diagL + actualRow;
 			//std::cerr << row << ',' << col << ':' << value(originalMat, actualRow * len1 + actualCol) << std::endl;
@@ -1365,14 +1365,14 @@ _alignBandedNeedlemanWunsch(TTrace& trace,
 				*traceIt = Diagonal;
 				if ((verti_val = (col < diagonalWidth - 1) ? *(matIt+1) +
 				    scoreGapExtendVertical(sc, sequenceEntryForScore(sc, str1, ((int) actualCol - 1)),
-				                           sequenceEntryForScore(sc, str2, ((int) actualRow - 1))) : MinValue<TScoreValue>::VALUE) > *matIt)
+				                           sequenceEntryForScore(sc, str2, ((int) actualRow - 1))) : std::numeric_limits<TScoreValue>::min()) > *matIt)
 				{
 					*matIt = verti_val;
 					*traceIt = Vertical;
 				}
 				if ((hori_val = (col > 0) ? hori_val +
 				    scoreGapExtendHorizontal(sc, sequenceEntryForScore(sc, str1, ((int) actualCol - 1)),
-				                             sequenceEntryForScore(sc, str2, ((int) actualRow - 1))) : MinValue<TScoreValue>::VALUE) > *matIt)
+				                             sequenceEntryForScore(sc, str2, ((int) actualRow - 1))) : std::numeric_limits<TScoreValue>::min()) > *matIt)
 				{
 					*matIt = hori_val;
 					*traceIt = Horizontal;
@@ -1481,7 +1481,7 @@ findBestSplitPosition(String<Pair<TScore,int> > & maxColsL,
 	::std::cout << "findBestSplitEditReverse\n";
 #endif
 
-	TScore maxSum = minValue<TScore>();
+	TScore maxSum = std::numeric_limits<TScore>::min();
 	int bestL = rowPosL2;
 	int bestR = rowPosR2;
 	int bestTraceExtR = rowPosL1;
diff --git a/apps/splazers/readSimulator.h b/apps/splazers/readSimulator.h
index 4c53fee..6bc11f6 100644
--- a/apps/splazers/readSimulator.h
+++ b/apps/splazers/readSimulator.h
@@ -381,7 +381,7 @@ void simulateReads(
 			TMyersPattern &myersPattern = forwardPattern;
 			
 			// find end of best semi-global alignment
-			int maxScore = MinValue<int>::VALUE;
+			int maxScore = std::numeric_limits<int>::min();
 			int minScore = -(int)countErrors;
 			TMyersFinder maxPos;
 			while (find(myersFinder, myersPattern, minScore))
diff --git a/apps/stellar/README b/apps/stellar/README
index 47e3513..e7486a4 100755
--- a/apps/stellar/README
+++ b/apps/stellar/README
@@ -47,14 +47,14 @@ http://www.seqan.de). To build STELLAR do the following:
   5)  make stellar
   6)  ./apps/stellar/stellar
 
-Alternatively you can check out the latest SVN version of STELLAR and SeqAn
+Alternatively you can check out the latest Git version of STELLAR and SeqAn
 with:
 
-  1)  svn co http://svn.mi.fu-berlin.de/seqan/trunk/seqan
-  2)  cd seqan/build/
+  1)  git clone https://github.com/seqan/seqan.git
+  2)  mkdir seqan/buld; cd seqan/build
   3)  cmake .. -DCMAKE_BUILD_TYPE=Release
   4)  make stellar
-  5)  ./apps/stellar/stellar
+  5)  ./bin/stellar --help
 
 On success, an executable file stellar was build and a brief usage 
 description was dumped.
diff --git a/apps/stellar/stellar.cpp b/apps/stellar/stellar.cpp
index 090f928..604cd43 100644
--- a/apps/stellar/stellar.cpp
+++ b/apps/stellar/stellar.cpp
@@ -187,7 +187,7 @@ _stellarOnAll(StringSet<TSequence> & databases,
     std::cout << std::endl;
 
     // file output
-    if (options.disableThresh != seqan::maxValue<unsigned>())
+    if (options.disableThresh != std::numeric_limits<unsigned>::max())
     {
         if (!_outputMatches(matches, queries, queryIDs, databases, options.verbose,
                             options.outputFile, options.outputFormat, options.disabledQueriesFile))
@@ -637,7 +637,7 @@ int mainWithOptions(TOptions & options, String<TAlphabet>)
     }
     file.close();
 
-    if (options.disableThresh != seqan::maxValue<unsigned>())
+    if (options.disableThresh != std::numeric_limits<unsigned>::max())
     {
         std::ofstream daFile;
         daFile.open(toCString(options.disabledQueriesFile));
diff --git a/apps/stellar/stellar.h b/apps/stellar/stellar.h
index d67ffd0..8d9b51f 100755
--- a/apps/stellar/stellar.h
+++ b/apps/stellar/stellar.h
@@ -78,7 +78,7 @@ _appendNegativeSegment(TAlign const & align,
         }
         ++pos;
     }
-    if (pos == len) appendValue(queue, TMerger(beginPos, pos, minValue<TScoreValue>()+1));
+    if (pos == len) appendValue(queue, TMerger(beginPos, pos, MinValue<TScoreValue>::VALUE + 1));
     else appendValue(queue, TMerger(beginPos, pos, score));
 }
 
@@ -172,7 +172,7 @@ _splitAtXDrops(TAlign & align,
     String<TMerger> queue;
     TPos pos = _min(toViewPosition(row(align, 0), beginPosition(row(align, 0))),
                     toViewPosition(row(align, 1), beginPosition(row(align, 1))));
-    appendValue(queue, TMerger(pos, pos, minValue<TScoreValue1>()+1));
+    appendValue(queue, TMerger(pos, pos, MinValue<TScoreValue1>::VALUE + 1));
 
     TPos aliLength = _max(toViewPosition(row(align, 0), endPosition(row(align, 0))),
                           toViewPosition(row(align, 1), endPosition(row(align, 1))));
@@ -510,7 +510,7 @@ verifySwiftHit(Segment<TInfix, InfixSegment> const & infH,
     TScore match = 1;
     TScore mismatchIndel = (TScore)_max((TScore) ceil(-1/eps) + 1, -(TScore)length(host(infH)));
     Score<TScore> scoreMatrix(match, mismatchIndel, mismatchIndel);
-    TScore scoreDropOff = (TScore) _max((TScore) xDrop * (-mismatchIndel), minValue<TScore>()+1);
+    TScore scoreDropOff = (TScore) _max((TScore) xDrop * (-mismatchIndel), MinValue<TScore>::VALUE + 1);
 
     // diagonals for banded alignment
     int64_t upperDiag = 0;
@@ -576,7 +576,7 @@ verifySwiftHit(Segment<TInfix, InfixSegment> const & infH,
     TScore match = 1;
     TScore mismatchIndel = (TScore)_max((TScore) ceil(-1/eps) + 1, -(TScore)length(host(infH)));
     Score<TScore> scoreMatrix(match, mismatchIndel, mismatchIndel);
-    TScore scoreDropOff = (TScore) _max((TScore) xDrop * (-mismatchIndel), minValue<TScore>()+1);
+    TScore scoreDropOff = (TScore) _max((TScore) xDrop * (-mismatchIndel), MinValue<TScore>::VALUE + 1);
 
     // calculate minimal score for local alignments
     TEpsilon e = floor(eps*minLength);
diff --git a/apps/stellar/stellar_extension.h b/apps/stellar/stellar_extension.h
index b9b9cfb..3b8c879 100644
--- a/apps/stellar/stellar_extension.h
+++ b/apps/stellar/stellar_extension.h
@@ -294,7 +294,7 @@ _align_banded_nw_best_ends(TTrace& trace,
 		TTraceIter traceIt = begin(trace, Standard()) + row * diagonalWidth + lo_diag;
 		TRowIter matIt = begin(mat, Standard()) + lo_diag;
 		TRowIter lenIt = begin(len, Standard()) + lo_diag;
-		hori_val = MinValue<TScoreValue>::VALUE;
+		hori_val = std::numeric_limits<TScoreValue>::min();
 		hori_len = len1+len2+1;
 		for(TSize col = lo_diag; col<hi_diag; ++col, ++matIt, ++traceIt, ++lenIt) {
 			actualCol = col + diagL + actualRow;
@@ -308,7 +308,7 @@ _align_banded_nw_best_ends(TTrace& trace,
 				++(*lenIt);
 				if ((verti_val = (col < diagonalWidth - 1) ? *(matIt+1) +
 				    scoreGapExtendVertical(sc,sequenceEntryForScore(sc, str1, ((int) actualCol - 1)),
-				                           sequenceEntryForScore(sc, str2, ((int) actualRow - 1))) : MinValue<TScoreValue>::VALUE) > *matIt)
+				                           sequenceEntryForScore(sc, str2, ((int) actualRow - 1))) : std::numeric_limits<TScoreValue>::min()) > *matIt)
 				{
 					*matIt = verti_val;
 					*traceIt = Vertical;
@@ -316,7 +316,7 @@ _align_banded_nw_best_ends(TTrace& trace,
 				}						
 				if ((hori_val = (col > 0) ? hori_val +
 				    scoreGapExtendHorizontal(sc, sequenceEntryForScore(sc, str1, ((int) actualCol - 1)),
-				                             sequenceEntryForScore(sc, str2, ((int) actualRow - 1))) : MinValue<TScoreValue>::VALUE) > *matIt)
+				                             sequenceEntryForScore(sc, str2, ((int) actualRow - 1))) : std::numeric_limits<TScoreValue>::min()) > *matIt)
 				{
 					*matIt = hori_val;
 					*traceIt = Horizontal;
diff --git a/apps/stellar/stellar_types.h b/apps/stellar/stellar_types.h
index b754265..fc24de6 100755
--- a/apps/stellar/stellar_types.h
+++ b/apps/stellar/stellar_types.h
@@ -66,7 +66,7 @@ struct StellarOptions {
         alphabet = "dna5";
         noRT = false;
 
-		qGram = seqan::maxValue<unsigned>();
+		qGram = std::numeric_limits<unsigned>::max();
 		epsilon = 0.05;
 		minLength = 100;
 		xDrop = 5;
@@ -74,7 +74,7 @@ struct StellarOptions {
 		forward = true;
 		reverse = true;
 		fastOption = "exact";		// exact verification
-		disableThresh = seqan::maxValue<unsigned>();
+		disableThresh = std::numeric_limits<unsigned>::max();
 		compactThresh = 500;
 		numMatches = 50;
 		maxRepeatPeriod = 1;
diff --git a/apps/yara/bits_context.h b/apps/yara/bits_context.h
index a6c28bb..beddb92 100644
--- a/apps/yara/bits_context.h
+++ b/apps/yara/bits_context.h
@@ -83,7 +83,7 @@ template <typename TSpec, typename TConfig, typename TReadSeqs>
 inline void resize(ReadsContext<TSpec, TConfig> & ctx, TReadSeqs const & readSeqs)
 {
     resize(ctx.seedErrors, getReadSeqsCount(readSeqs), 0, Exact());
-    resize(ctx.minErrors, getReadSeqsCount(readSeqs), MaxValue<unsigned char>::VALUE, Exact());
+    resize(ctx.minErrors, getReadSeqsCount(readSeqs), std::numeric_limits<unsigned char>::max(), Exact());
     resize(ctx.mapped, getReadsCount(readSeqs), false, Exact());
     resize(ctx.paired, getReadsCount(readSeqs), false, Exact());
 }
diff --git a/apps/yara/bits_matches.h b/apps/yara/bits_matches.h
index e8f2feb..4265d4f 100644
--- a/apps/yara/bits_matches.h
+++ b/apps/yara/bits_matches.h
@@ -615,7 +615,7 @@ getLibraryLength(Match<TSpec> const & a, Match<TSpec> const & b)
     }
     else
     {
-        return MaxValue<TContigSize>::VALUE;
+        return std::numeric_limits<TContigSize>::max();
     }
 }
 
@@ -633,7 +633,7 @@ getLibraryDeviation(Match<TSpec> const & a, Match<TSpec> const & b, TSize meanLe
     if (isValid(a) && isValid(b) && contigEqual(a, b))
         return _abs((TSignedContigSize)getLibraryLength(a, b) - (TSignedContigSize)meanLength);
     else
-        return MaxValue<TContigSize>::VALUE;
+        return std::numeric_limits<TContigSize>::max();
 }
 
 // ----------------------------------------------------------------------------
diff --git a/apps/yara/indexer.cpp b/apps/yara/indexer.cpp
index 93dc388..c28e41a 100644
--- a/apps/yara/indexer.cpp
+++ b/apps/yara/indexer.cpp
@@ -298,7 +298,7 @@ void saveIndex(YaraIndexer<TSpec, TConfig> & me)
 template <typename TContigsSize, typename TContigsLen, typename TSpec, typename TConfig>
 void saveIndex(YaraIndexer<TSpec, TConfig> & me)
 {
-    if (me.options.contigsSum <= MaxValue<uint32_t>::VALUE)
+    if (me.options.contigsSum <= std::numeric_limits<uint32_t>::max())
     {
         saveIndex<TContigsSize, TContigsLen, uint32_t>(me);
     }
@@ -311,7 +311,7 @@ void saveIndex(YaraIndexer<TSpec, TConfig> & me)
 template <typename TContigsSize, typename TSpec, typename TConfig>
 void saveIndex(YaraIndexer<TSpec, TConfig> & me)
 {
-    if (me.options.contigsMaxLength <= MaxValue<uint32_t>::VALUE)
+    if (me.options.contigsMaxLength <= std::numeric_limits<uint32_t>::max())
     {
         saveIndex<TContigsSize, uint32_t>(me);
     }
@@ -328,11 +328,11 @@ void saveIndex(YaraIndexer<TSpec, TConfig> & me)
 template <typename TSpec, typename TConfig>
 void saveIndex(YaraIndexer<TSpec, TConfig> & me)
 {
-    if (me.options.contigsSize <= MaxValue<uint8_t>::VALUE)
+    if (me.options.contigsSize <= std::numeric_limits<uint8_t>::max())
     {
         saveIndex<uint8_t>(me);
     }
-    else if (me.options.contigsSize <= MaxValue<uint16_t>::VALUE)
+    else if (me.options.contigsSize <= std::numeric_limits<uint16_t>::max())
     {
         saveIndex<uint16_t>(me);
     }
diff --git a/apps/yara/mapper.cpp b/apps/yara/mapper.cpp
index 1cb6e8c..8e523af 100644
--- a/apps/yara/mapper.cpp
+++ b/apps/yara/mapper.cpp
@@ -342,7 +342,7 @@ parseCommandLine(Options & options, ArgumentParser & parser, int argc, char cons
 template <typename TContigsSize, typename TContigsLen, typename TThreading, typename TSequencing, typename TStrategy>
 void configureMapper(Options const & options, TThreading const & threading, TSequencing const & sequencing, TStrategy const & strategy)
 {
-    if (options.contigsSum <= MaxValue<uint32_t>::VALUE)
+    if (options.contigsSum <= std::numeric_limits<uint32_t>::max())
     {
         spawnMapper<TContigsSize, TContigsLen, uint32_t>(options, threading, sequencing, strategy);
     }
@@ -355,7 +355,7 @@ void configureMapper(Options const & options, TThreading const & threading, TSeq
 template <typename TContigsSize, typename TThreading, typename TSequencing, typename TStrategy>
 void configureMapper(Options const & options, TThreading const & threading, TSequencing const & sequencing, TStrategy const & strategy)
 {
-    if (options.contigsMaxLength <= MaxValue<uint32_t>::VALUE)
+    if (options.contigsMaxLength <= std::numeric_limits<uint32_t>::max())
     {
         configureMapper<TContigsSize, uint32_t>(options, threading, sequencing, strategy);
     }
@@ -372,11 +372,11 @@ void configureMapper(Options const & options, TThreading const & threading, TSeq
 template <typename TThreading, typename TSequencing, typename TStrategy>
 void configureMapper(Options const & options, TThreading const & threading, TSequencing const & sequencing, TStrategy const & strategy)
 {
-    if (options.contigsSize <= MaxValue<uint8_t>::VALUE)
+    if (options.contigsSize <= std::numeric_limits<uint8_t>::max())
     {
         configureMapper<uint8_t>(options, threading, sequencing, strategy);
     }
-    else if (options.contigsSize <= MaxValue<uint16_t>::VALUE)
+    else if (options.contigsSize <= std::numeric_limits<uint16_t>::max())
     {
         configureMapper<uint16_t>(options, threading, sequencing, strategy);
     }
diff --git a/apps/yara/tests/run_tests.py b/apps/yara/tests/run_tests.py
index db6d921..32c7a8c 100644
--- a/apps/yara/tests/run_tests.py
+++ b/apps/yara/tests/run_tests.py
@@ -13,7 +13,6 @@ import logging
 import os.path
 import sys
 import glob
-import platform
 
 # Automagically add util/py_lib to PYTHONPATH environment variable.
 path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..',
@@ -35,9 +34,9 @@ def main(source_base, binary_base):
     """Main entry point of the script."""
 
     # gold standard binary files created on little endian
-    if sys.byteorder != 'little' or platform.machine().startswith('mips64'):
-        print 'Skipping tests for Yara on big endian and mips64el'
-        print '=================================================='
+    if sys.byteorder != 'little':
+        print 'Skipping tests for Yara on big endian'
+        print '====================================='
         return 0
 
     print 'Executing test for Yara'
@@ -79,9 +78,9 @@ def main(source_base, binary_base):
         conf = app_tests.TestConf(
             program=path_to_indexer,
             args=[ph.inFile('input/%s-genome.fa' % organism),
-                '-o', ph.outFile('%s-genome' % organism)],
+                  '-o', ph.outFile('%s-genome' % organism)],
             to_diff=[(ph.inFile('gold/%s-genome.%s' % (organism, ext)),
-                      ph.outFile('%s-genome.%s' % (organism, ext)), 'md5') for ext in exts])
+                     ph.outFile('%s-genome.%s' % (organism, ext)), 'md5') for ext in exts])
         conf_list.append(conf)
 
     # ============================================================
diff --git a/demos/blast/blast_in_lowlevel.cpp b/demos/blast/blast_in_lowlevel.cpp
index 0c6f83c..3238fbe 100644
--- a/demos/blast/blast_in_lowlevel.cpp
+++ b/demos/blast/blast_in_lowlevel.cpp
@@ -7,7 +7,7 @@ using namespace seqan;
 
 int main()
 {
-    std::string inPath = std::string(SEQAN_PATH_TO_ROOT()) + "/tests/blast/plus_comments_defaults.m9";
+    std::string inPath = getAbsolutePath("/tests/blast/plus_comments_defaults.m9");
 
     std::ifstream fin(toCString(inPath), std::ios_base::in | std::ios_base::binary);
     auto fit = directionIterator(fin, Input());
@@ -46,4 +46,4 @@ int main()
     std::cerr << "Demo not run, because of a bug in Microsoft Visual Studio 2015.\n";
     return 0;
 }
-#endif
\ No newline at end of file
+#endif
diff --git a/demos/dox/bam_io/bam_file_in.cpp b/demos/dox/bam_io/bam_file_in.cpp
index b2be48f..267e089 100644
--- a/demos/dox/bam_io/bam_file_in.cpp
+++ b/demos/dox/bam_io/bam_file_in.cpp
@@ -7,7 +7,7 @@ using namespace seqan;
 int main()
 {
     // Open input stream, BamStream can read SAM and BAM files.
-    std::string pathSam = std::string(SEQAN_PATH_TO_ROOT()) + "/demos/bam_io/example.sam";
+    std::string pathSam = getAbsolutePath("/demos/bam_io/example.sam");
 
     BamFileIn bamFileIn;
     if (!open(bamFileIn, toCString(pathSam)))
diff --git a/demos/dox/index/find_repeats.cpp b/demos/dox/index/find_repeats.cpp
index cc0dbf9..3c212ab 100644
--- a/demos/dox/index/find_repeats.cpp
+++ b/demos/dox/index/find_repeats.cpp
@@ -9,7 +9,7 @@ using namespace seqan;
 int main()
 {
     // Get path to file to search for repeats in.
-    std::string path = (std::string)SEQAN_PATH_TO_ROOT() + "/demos/index/ref.fa";
+    std::string path = getAbsolutePath("/demos/index/ref.fa");
 
     // Load first sequence from file.
     CharString id;
diff --git a/demos/dox/statistics/build_markov_model.cpp b/demos/dox/statistics/build_markov_model.cpp
index 64904a1..60764c5 100644
--- a/demos/dox/statistics/build_markov_model.cpp
+++ b/demos/dox/statistics/build_markov_model.cpp
@@ -10,8 +10,7 @@ using namespace seqan;
 int main()
 {
     // Build path to background FASTA file.
-    CharString bgPath = SEQAN_PATH_TO_ROOT();
-    append(bgPath, "/demos/statistics/background.fa");
+    CharString bgPath = getAbsolutePath("/demos/statistics/background.fa");
 
     // Read the background from a file into X.
     StringSet<DnaString> X;
diff --git a/demos/dox/statistics/load_markov_model.cpp b/demos/dox/statistics/load_markov_model.cpp
index f90d44a..f26ff1c 100644
--- a/demos/dox/statistics/load_markov_model.cpp
+++ b/demos/dox/statistics/load_markov_model.cpp
@@ -11,8 +11,7 @@ using namespace seqan;
 int main()
 {
     // Build path to serialized MarkovModel.
-    CharString mmPath = SEQAN_PATH_TO_ROOT();
-    append(mmPath, "/demos/statistics/zscore_example_mm.3");
+    CharString mmPath = getAbsolutePath("/demos/statistics/zscore_example_mm.3");
 
     // Open the file.
     FILE * mmFile = fopen(toCString(mmPath), "rb");
diff --git a/demos/dox/store/store_example.cpp b/demos/dox/store/store_example.cpp
index f15940b..a07fb28 100644
--- a/demos/dox/store/store_example.cpp
+++ b/demos/dox/store/store_example.cpp
@@ -7,8 +7,8 @@ int main()
 {
     // instantiate emtpy FragmentStore and set file paths
     FragmentStore<> store;
-    std::string pathGenome = std::string(SEQAN_PATH_TO_ROOT()) + "/demos/tutorial/store/ex1.fa";
-    std::string pathSAM    = std::string(SEQAN_PATH_TO_ROOT()) + "/demos/tutorial/store/ex1.sam";
+    std::string pathGenome = getAbsolutePath("/demos/tutorial/store/ex1.fa");
+    std::string pathSAM    = getAbsolutePath("/demos/tutorial/store/ex1.sam");
 
     // load example genome and example reads and alignments
     loadContigs(store, pathGenome.c_str());
diff --git a/demos/tutorial/sam_and_bam_io/base.cpp b/demos/tutorial/sam_and_bam_io/base.cpp
index ac3a181..ceca6a5 100644
--- a/demos/tutorial/sam_and_bam_io/base.cpp
+++ b/demos/tutorial/sam_and_bam_io/base.cpp
@@ -10,11 +10,11 @@ class myBamAlignmentRecord
 {
 public:
     CharString qName;               // QNAME
-    __uint16 flag;                  // FLAG
+    uint16_t flag;                  // FLAG
     int32_t rID;                    // REF
     int32_t beginPos;               // POS
-    __uint8 mapQ;                   // MAPQ mapping quality, 255 for */invalid
-    __uint16 bin;                   // bin for indexing
+    uint8_t mapQ;                   // MAPQ mapping quality, 255 for */invalid
+    uint16_t bin;                   // bin for indexing
     String<CigarElement<> > cigar;  // CIGAR string
     int32_t rNextId;                // RNEXT (0-based)
     int32_t pNext;                  // PNEXT (0-based)
diff --git a/demos/tutorial/string_sets/example_iterators.cpp b/demos/tutorial/string_sets/example_iterators.cpp
index f4b5f4a..bad9c1d 100644
--- a/demos/tutorial/string_sets/example_iterators.cpp
+++ b/demos/tutorial/string_sets/example_iterators.cpp
@@ -30,7 +30,7 @@ int main()
     Iterator<TConcat>::Type itEnd = end(concatSet);
     for (; it != itEnd; goNext(it))
     {
-        std::cout << getValue(it) << " ";
+        std::cout << *it << " ";
     }
     std::cout << '\n';
 //![concatenator]
diff --git a/demos/unassigned_or_unused/filter_sam.cpp b/demos/unassigned_or_unused/filter_sam.cpp
index 806e718..4d3649b 100644
--- a/demos/unassigned_or_unused/filter_sam.cpp
+++ b/demos/unassigned_or_unused/filter_sam.cpp
@@ -112,7 +112,7 @@ void performWork(Options const & options)
     // Copy over at most options.limit alignments per read.
     std::cerr << "Filtering reads..." << std::endl;
     FragmentStore<>::TAlignedReadStore rsCopy;
-    size_t readId = MaxValue<size_t>::VALUE;
+    size_t readId = std::numeric_limits<size_t>::max();
     size_t alignmentCount = 0;
     for (TIterator it = begin(fragmentStore.alignedReadStore), itEnd = end(fragmentStore.alignedReadStore); it != itEnd; ++it)
     {
diff --git a/demos/unassigned_or_unused/sam2svg.cpp b/demos/unassigned_or_unused/sam2svg.cpp
index d79c6b8..71253d0 100644
--- a/demos/unassigned_or_unused/sam2svg.cpp
+++ b/demos/unassigned_or_unused/sam2svg.cpp
@@ -177,7 +177,7 @@ int main(int argc, char const ** argv)
     std::cerr << "Writing " << contigs.size() << " contigs...\n";
 
     int beginLine = (options.beginLine == -1) ? 0 : options.beginLine;
-    int endLine = (options.endLine == -1) ? MaxValue<int>::VALUE : options.endLine;
+    int endLine = (options.endLine == -1) ? std::numeric_limits<int>::max() : options.endLine;
 
     for (unsigned i = 0; i < contigs.size(); ++i)
         if (contigs[i] < length(store.contigStore))
@@ -185,18 +185,18 @@ int main(int argc, char const ** argv)
             std::cerr << "Writing contig " << store.contigNameStore[contigs[i]] << " ... ";
 
             int64_t l = (options.beginPos == -1) ? 0 : options.beginPos;
-            int64_t r = (options.endPos == -1) ? MaxValue<TContigPos>::VALUE : options.endPos;
+            int64_t r = (options.endPos == -1) ? std::numeric_limits<TContigPos>::max() : options.endPos;
 
             if (!options.gapSpace)
             {
                 typedef Gaps<Nothing, AnchorGaps<TContig::TGapAnchors> >   TContigGaps;
                 TContigGaps contigGaps(store.contigStore[i].gaps);
                 l = positionSeqToGap(contigGaps, l);
-                if (r != MaxValue<TContigPos>::VALUE)
+                if (r != std::numeric_limits<TContigPos>::max())
                     r = positionSeqToGap(contigGaps, r);
             }
 
-            if (r == MaxValue<TContigPos>::VALUE)
+            if (r == std::numeric_limits<TContigPos>::max())
             {
                 r = 0;
                 for (unsigned j = 0; j < length(layout.contigRows[i]); ++j)
diff --git a/demos/unassigned_or_unused/tutorial_file_io/solution2.cpp b/demos/unassigned_or_unused/tutorial_file_io/solution2.cpp
deleted file mode 100644
index b2487c2..0000000
--- a/demos/unassigned_or_unused/tutorial_file_io/solution2.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-#include <iostream>
-#include <fstream>
-
-#include <seqan/stream.h>
-
-using namespace seqan;
-
-// Copy from stream in to the stream out.
-
-template <typename TOutStream, typename TInStream>
-void copyStream(TOutStream & vout, TInStream & vin)
-{
-    // Create iterators to read and write.
-    typedef typename DirectionIterator<TInStream, Input>::Type TReader;
-    typedef typename DirectionIterator<TOutStream, Output>::Type TWriter;
-
-    TReader reader = directionIterator(vin, Input());
-    TWriter writer = directionIterator(vout, Output());
-
-    CharString buffer;
-    reserve(buffer, 1000);
-
-    while (!atEnd(reader))
-    {
-        clear(buffer);
-        read(buffer, reader, capacity(buffer));
-        write(writer, buffer);
-    }
-}
-
-// The main function parses the command line, opens the files
-// and then calls either copyStream.
-
-int main(int argc, char const ** argv)
-{
-    VirtualStream<char, Input> vin;
-    VirtualStream<char, Output> vout;
-
-    if (argc != 3)
-    {
-        CharString inExts = concat(vin.getFileExtensions(), "|", true);
-        CharString outExts = concat(vout.getFileExtensions(), "|", true);
-        std::cerr << "USAGE: " << argv[0] << " input[" << inExts << "] output[" << outExts << "]\n";
-        return 1;
-    }
-
-    if (!open(vin, argv[1]))
-    {
-        std::cerr << "ERROR: Could not open file " << argv[1] << "\n";
-        return 1;
-    }
-
-    if (!open(vout, argv[2]))
-    {
-        std::cerr << "ERROR: Could not open file " << argv[2] << "\n";
-        return 1;
-    }
-
-    copyStream(vout, vin);
-    return 0;
-}
diff --git a/demos/unassigned_or_unused/tutorial_file_io/solution3.cpp b/demos/unassigned_or_unused/tutorial_file_io/solution3.cpp
deleted file mode 100644
index 8dbe78b..0000000
--- a/demos/unassigned_or_unused/tutorial_file_io/solution3.cpp
+++ /dev/null
@@ -1,72 +0,0 @@
-#include <cstring>
-#include <iostream>
-#include <fstream>
-
-#include <seqan/stream.h>
-
-using namespace seqan;
-
-// Copy from stream in to the stream out.
-
-template <typename TOutStream, typename TInStream>
-void copyStream(TOutStream & vout, TInStream & vin)
-{
-    // Create iterators to read and write.
-    typedef typename DirectionIterator<TInStream, Input>::Type TReader;
-    TReader reader = directionIterator(vin, Input());
-
-    CharString buffer;
-    reserve(buffer, 1000);
-
-    while (!atEnd(reader))
-    {
-        clear(buffer);
-        read(buffer, reader, capacity(buffer));
-        write(vout, buffer);
-    }
-}
-
-// The main function parses the command line, opens the files
-// and then calls either copyStream. Read from stdin if the 1st
-// argument is - or omitted and write to stdout if the 2nd argument
-// is omitted.
-
-int main(int argc, char const ** argv)
-{
-    VirtualStream<char, Input> vin;
-    VirtualStream<char, Output> vout;
-
-    if (argc < 1 || argc > 3)
-    {
-        CharString inExts = concat(vin.getFileExtensions(), "|", true);
-        CharString outExts = concat(vout.getFileExtensions(), "|", true);
-        std::cerr << "USAGE: " << argv[0] << " input[" << inExts << "] [output[" << outExts << "]]\n";
-        return 1;
-    }
-
-    bool success;
-    if (argc >= 2 && strcmp(argv[1], "-") != 0)
-        success = open(vin, argv[1]);
-    else
-        success = open(vin, std::cin);
-
-    if (!success)
-    {
-        std::cerr << "ERROR: Could not open input file " << argv[1] << "\n";
-        return 1;
-    }
-
-    if (argc == 3)
-        success = open(vout, argv[2]);
-    else
-        success = open(vout, std::cout, Nothing());  // disable compression on stdout
-
-    if (!success)
-    {
-        std::cerr << "ERROR: Could not open output file " << ((argc == 3) ? argv[2] : "") << "\n";
-        return 1;
-    }
-
-    copyStream(vout, vin);
-    return 0;
-}
diff --git a/demos/unassigned_or_unused/tutorial_file_io/stream_compression_formats.cpp b/demos/unassigned_or_unused/tutorial_file_io/stream_compression_formats.cpp
index 567b582..6230038 100644
--- a/demos/unassigned_or_unused/tutorial_file_io/stream_compression_formats.cpp
+++ b/demos/unassigned_or_unused/tutorial_file_io/stream_compression_formats.cpp
@@ -1,5 +1,9 @@
 //![header]
 #include <fstream>
+#include <vector>
+#include <iterator>
+#include <algorithm>
+
 #include <seqan/sequence.h>
 #include <seqan/stream.h>
 
@@ -13,8 +17,12 @@ int main(int argc, char const ** argv)
 
     if (argc != 2)
     {
-        CharString exts = concat(TVStream::getFileExtensions(), "|", true);
-        std::cerr << "USAGE: " << argv[0] << " input[" << exts << "]" << std::endl;
+        std::vector<std::string> file_ext_list = TVStream::getFileExtensions();
+        std::ostream_iterator<std::string> out_it (std::cerr,"|");
+
+        std::cerr << "USAGE: " << argv[0] << " input[";
+        std::copy(file_ext_list.begin(), file_ext_list.end() - 1, out_it);
+        std::cerr << "]" << std::endl;
         return 1;
     }
 
diff --git a/dox/CMakeLists.txt b/dox/CMakeLists.txt
index 78c0597..74b4749 100644
--- a/dox/CMakeLists.txt
+++ b/dox/CMakeLists.txt
@@ -9,56 +9,18 @@
 cmake_minimum_required (VERSION 3.0.0)
 project (seqan_dox CXX)
 
+# require python 2.7, not python3
+set(PythonInterp_FIND_VERSION 2.7)
+set(PythonInterp_FIND_VERSION_MAJOR 2)
+set(PythonInterp_FIND_VERSION_MINOR 7)
+set(PythonInterp_FIND_VERSION_COUNT 2)
+
 find_package (PythonInterp)
-if (NOT PYTHONINTERP_FOUND)
-    message (STATUS "  Python not found, not building dox as a tests.")
+if (NOT PYTHONINTERP_FOUND OR NOT(${PYTHON_VERSION_MAJOR} MATCHES "2"))
+    message (STATUS "  You need Python 2.x for building dox. (skip the tests)")
     return ()
 endif ()
 
-# find python 2.x
-if(NOT(${PYTHON_VERSION_MAJOR} MATCHES "2"))
-    set(_PYTHON2_VERSIONS 2.7 2.6 2.5 2.4 2.3 2.2 2.1 2.0)
-    unset(_Python_NAMES)
-    foreach(_CURRENT_VERSION IN LISTS _PYTHON2_VERSIONS)
-        list(APPEND _Python_NAMES "python${_CURRENT_VERSION}")
-    endforeach()
-    unset(_PYTHON2_VERSIONS)
-
-    find_program(PYTHON2_EXECUTABLE NAMES ${_Python_NAMES})
-    if(PYTHON2_EXECUTABLE MATCHES "PYTHON2_EXECUTABLE-NOTFOUND")
-        message (STATUS "You need Python 2.x for building dox. (skip the tests)")
-        return()
-    endif()
-    set(PYTHON_EXECUTABLE "${PYTHON2_EXECUTABLE}")
-    message (STATUS "Found Python 2.x: ${PYTHON_EXECUTABLE}") 
-endif()
-
-# find python 2.x
-if(NOT(${PYTHON_VERSION_MAJOR} MATCHES "2"))
-    set(_PYTHON2_VERSIONS 2.7 2.6 2.5 2.4 2.3 2.2 2.1 2.0)
-    unset(_Python_NAMES)
-    foreach(_CURRENT_VERSION IN LISTS _PYTHON2_VERSIONS)
-        list(APPEND _Python_NAMES "python${_CURRENT_VERSION}")
-    endforeach()
-    unset(_PYTHON2_VERSIONS)
-
-    find_program(PYTHON2_EXECUTABLE NAMES ${_Python_NAMES})
-    if(PYTHON2_EXECUTABLE MATCHES "PYTHON2_EXECUTABLE-NOTFOUND")
-        message (STATUS "You need Python 2.x for building dox. (skip the tests)")
-        return()
-    endif()
-    set(PYTHON_EXECUTABLE "${PYTHON2_EXECUTABLE}")
-    message (STATUS "Found Python 2.x: ${PYTHON_EXECUTABLE}")
-
-    # change shell scripts for building dox
-    file(READ "${CMAKE_CURRENT_SOURCE_DIR}/../dox/run.sh.in" run_content)
-    file(READ "${CMAKE_CURRENT_SOURCE_DIR}/../dox/dox_only.sh.in" dox_only_content)
-    string(REPLACE "python2 ../" "${PYTHON_EXECUTABLE} ../" run_content "${run_content}")
-    string(REPLACE "python2 ../" "${PYTHON_EXECUTABLE} ../" dox_only_content "${dox_only_content}")
-    file(WRITE "${CMAKE_CURRENT_SOURCE_DIR}/../dox/run.sh" "${run_content}")
-    file(WRITE "${CMAKE_CURRENT_SOURCE_DIR}/../dox/dox_only.sh" "${dox_only_content}")
-endif()
-
 # Add building the documentation as a test.
 add_test (build_dox
   ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/../util/bin/dox.py
diff --git a/include/seqan/align/align_base.h b/include/seqan/align/align_base.h
index a23afff..be165df 100644
--- a/include/seqan/align/align_base.h
+++ b/include/seqan/align/align_base.h
@@ -476,7 +476,7 @@ detach(Align<TSource, TSpec> & me)
 
 template <typename TFile, typename TSource, typename TSpec>
 inline void
-write(TFile & target,
+_write(TFile & target,
       Align<TSource, TSpec> const & source)
 {
     typedef Align<TSource, TSpec> const TAlign;
@@ -557,6 +557,15 @@ write(TFile & target,
     writeValue(target, '\n');
 }
 
+template <typename TFile, typename TSource, typename TSpec>
+[[deprecated("Old-style I/O. Use stream operator << instead.")]]
+inline void
+write(TFile & target,
+      Align<TSource, TSpec> const & source)
+{
+    _write(target, source);
+}
+
 // ----------------------------------------------------------------------------
 // Function clearClipping()
 // ----------------------------------------------------------------------------
@@ -607,7 +616,7 @@ operator<<(TStream & target,
            Align<TSource, TSpec> const & source)
 {
     typename DirectionIterator<TStream, Output>::Type it = directionIterator(target, Output());
-    write(it, source);
+    _write(it, source);
     return target;
 }
 
diff --git a/include/seqan/align/align_interface_wrapper.h b/include/seqan/align/align_interface_wrapper.h
index 177d0ae..6baafa0 100644
--- a/include/seqan/align/align_interface_wrapper.h
+++ b/include/seqan/align/align_interface_wrapper.h
@@ -167,7 +167,8 @@ _alignWrapperSequential(StringSet<Gaps<TSequenceH, TGapsSpecH>, TSetSpecH> & gap
 template <typename... TArgs>
 inline auto _alignWrapper(TArgs && ...args)
 {
-#ifdef SEQAN_SIMD_ENABLED
+// NOTE(marehr): ume_simd is currently not working, thus falling back to sequential case
+#if defined(SEQAN_SIMD_ENABLED) && !defined(SEQAN_UMESIMD_ENABLED)
     return _alignWrapperSimd(std::forward<TArgs>(args)...);
 #else
     return _alignWrapperSequential(std::forward<TArgs>(args)...);
diff --git a/include/seqan/align/dp_algorithm_impl.h b/include/seqan/align/dp_algorithm_impl.h
index de388f9..88736ba 100644
--- a/include/seqan/align/dp_algorithm_impl.h
+++ b/include/seqan/align/dp_algorithm_impl.h
@@ -87,7 +87,7 @@
 // are accepted. If the dp profile consists of the standard global alignment
 // algorithm (NeedlemanWunsch or Gotoh), the band is required to go through
 // the sink and the source of the dp matrix. If this is not given the
-// alignment algorithm is aborted and the score MinValue<TScoreValue>::VALUE
+// alignment algorithm is aborted and the score std::numeric_limits<TScoreValue>::min()
 // is returned.
 // There are no further restrictions.
 //
@@ -1543,7 +1543,7 @@ _computeAlignment(DPContext<TScoreValue, TGapScheme> & dpContext,
 
     // Check if current dp settings are valid. If not return infinity value for dp score value.
     if (!_isValidDPSettings(seqH, seqV, band, dpProfile))
-        return createVector<TScoreValue>(MinValue<typename Value<TScoreValue>::Type>::VALUE);  // NOTE(rrahn): In case of non-simd version, createVector returns just a scalar.
+        return createVector<TScoreValue>(std::numeric_limits<typename Value<TScoreValue>::Type>::min());  // NOTE(rrahn): In case of non-simd version, createVector returns just a scalar.
 
     TDPScoreMatrix dpScoreMatrix;
     TDPTraceMatrix dpTraceMatrix;
diff --git a/include/seqan/align/dp_cell.h b/include/seqan/align/dp_cell.h
index 49f3b85..ee3c5d5 100644
--- a/include/seqan/align/dp_cell.h
+++ b/include/seqan/align/dp_cell.h
@@ -109,7 +109,7 @@ struct DPCellDefaultInfinity
 };
 
 template <typename T>
-const int DPCellDefaultInfinity<T>::VALUE = MinValue<int>::VALUE;
+const int DPCellDefaultInfinity<T>::VALUE = std::numeric_limits<int>::min();
 
 // We use the min value of the score type and shift it one bits to the left.  This way we can use "infinity" without
 // checking for it during the computation.
@@ -121,7 +121,7 @@ struct DPCellDefaultInfinity<DPCell_<TScoreValue, TGapCostFunction> >
 
 template <typename TScoreValue, typename TGapCostFunction>
     const TScoreValue DPCellDefaultInfinity<DPCell_<TScoreValue, TGapCostFunction> >::VALUE =
-        createVector<TScoreValue>(MinValue<typename Value<TScoreValue>::Type>::VALUE) / createVector<TScoreValue>(2);
+        createVector<TScoreValue>(std::numeric_limits<typename Value<TScoreValue>::Type>::min()) / createVector<TScoreValue>(2);
 
 template <typename TScoreValue, typename TGapCostFunction>
 struct DPCellDefaultInfinity<DPCell_<TScoreValue, TGapCostFunction> const> :
diff --git a/include/seqan/align/dp_matrix_navigator.h b/include/seqan/align/dp_matrix_navigator.h
index a39100b..44d038b 100644
--- a/include/seqan/align/dp_matrix_navigator.h
+++ b/include/seqan/align/dp_matrix_navigator.h
@@ -154,7 +154,7 @@ inline void
 assignValue(DPMatrixNavigator_<TDPMatrix, TDPMatrixType, TNavigationSpec> & dpNavigator,
             TValue const & element)
 {
-    assignValue(dpNavigator._activeColIterator, element);
+    *dpNavigator._activeColIterator = element;
 }
 
 // ----------------------------------------------------------------------------
diff --git a/include/seqan/align/dp_matrix_navigator_score_matrix.h b/include/seqan/align/dp_matrix_navigator_score_matrix.h
index 9110b49..56622fe 100644
--- a/include/seqan/align/dp_matrix_navigator_score_matrix.h
+++ b/include/seqan/align/dp_matrix_navigator_score_matrix.h
@@ -96,7 +96,7 @@ _init(DPMatrixNavigator_<DPMatrix_<TValue, FullDPMatrix>, DPScoreMatrix, Navigat
     navigator._activeColIterator = begin(dpMatrix, Standard());
     navigator._prevColIterator = navigator._activeColIterator - _dataFactors(dpMatrix)[DPMatrixDimension_::HORIZONTAL];
     navigator._laneLeap = 1;
-    assignValue(navigator._activeColIterator, TValue());
+    *navigator._activeColIterator =  TValue();
 }
 
 // Initializes the navigator for a banded alignment.
@@ -131,7 +131,7 @@ _init(DPMatrixNavigator_<DPMatrix_<TValue, FullDPMatrix>, DPScoreMatrix, Navigat
     }
     // Set previous iterator to same position, one column left.
     navigator._prevColIterator = navigator._activeColIterator - _dataFactors(dpMatrix)[DPMatrixDimension_::HORIZONTAL];
-    assignValue(navigator._activeColIterator, TValue());
+    *navigator._activeColIterator =  TValue();
 }
 
 // ----------------------------------------------------------------------------
diff --git a/include/seqan/align/dp_matrix_navigator_score_matrix_sparse.h b/include/seqan/align/dp_matrix_navigator_score_matrix_sparse.h
index acc3267..4202d56 100644
--- a/include/seqan/align/dp_matrix_navigator_score_matrix_sparse.h
+++ b/include/seqan/align/dp_matrix_navigator_score_matrix_sparse.h
@@ -95,7 +95,7 @@ _init(DPMatrixNavigator_<DPMatrix_<TValue, SparseDPMatrix>, DPScoreMatrix, Navig
     navigator._activeColIterator = begin(dpMatrix, Standard());
     navigator._prevColIterator = navigator._activeColIterator;
     navigator._laneLeap = 1 - _dataLengths(dpMatrix)[DPMatrixDimension_::VERTICAL];
-    assignValue(navigator._activeColIterator, TValue());
+    *navigator._activeColIterator = TValue();
 }
 
 // Initializes the navigator for banded alignments
@@ -127,7 +127,7 @@ _init(DPMatrixNavigator_<DPMatrix_<TValue, SparseDPMatrix>, DPScoreMatrix, Navig
         navigator._activeColIterator = begin(dpMatrix, Standard()) + length(dpMatrix, DPMatrixDimension_::VERTICAL) + navigator._laneLeap - 1;
     }
     navigator._prevColIterator = navigator._activeColIterator;
-    assignValue(navigator._activeColIterator, TValue());
+    *navigator._activeColIterator = TValue();
 }
 
 // ----------------------------------------------------------------------------
diff --git a/include/seqan/align/dp_matrix_navigator_trace_matrix.h b/include/seqan/align/dp_matrix_navigator_trace_matrix.h
index 0fc7233..af944ee 100644
--- a/include/seqan/align/dp_matrix_navigator_trace_matrix.h
+++ b/include/seqan/align/dp_matrix_navigator_trace_matrix.h
@@ -104,7 +104,7 @@ _init(DPMatrixNavigator_<DPMatrix_<TValue, FullDPMatrix>, DPTraceMatrix<TTraceFl
     navigator._ptrDataContainer = &dpMatrix;
     navigator._activeColIterator = begin(dpMatrix, Standard());
     navigator._laneLeap = 1;
-    assignValue(navigator._activeColIterator, TValue());
+    *navigator._activeColIterator = TValue();
 }
 
 // Initializes the navigator for banded alignments.
@@ -144,7 +144,7 @@ _init(DPMatrixNavigator_<DPMatrix_<TValue, FullDPMatrix>, DPTraceMatrix<TTraceFl
         navigator._laneLeap = lengthVertical + lastPos;
         navigator._activeColIterator = begin(dpMatrix, Standard()) + navigator._laneLeap - 1;
     }
-    assignValue(navigator._activeColIterator, TValue());
+    *navigator._activeColIterator = TValue();
 }
 
 // ----------------------------------------------------------------------------
@@ -376,7 +376,7 @@ assignValue(DPMatrixNavigator_<TDPMatrix, DPTraceMatrix<TTraceFlag>, TNavigation
     if (IsSameType<TTraceFlag, TracebackOff>::VALUE)
         return;  // Do nothing since no trace back is computed.
 
-    assignValue(dpNavigator._activeColIterator, element);
+    *dpNavigator._activeColIterator = element;
 }
 
 // ----------------------------------------------------------------------------
diff --git a/include/seqan/align/dp_profile.h b/include/seqan/align/dp_profile.h
index 5f5c5f7..a861e37 100644
--- a/include/seqan/align/dp_profile.h
+++ b/include/seqan/align/dp_profile.h
@@ -110,7 +110,7 @@ typedef LocalAlignment_<SuboptimalAlignment> DPLocalEnumerate;
 
 // Use macro expansion to define all possible SIMD initialization types.
 
-template <typename TVector, __uint8 FILL_VALUE, unsigned SIZE>
+template <typename TVector, uint8_t FILL_VALUE, unsigned SIZE>
 struct InitSimdTrace_;
 
 #define SEQAN_SIMD_INIT_FILL_VALUE_2_ FILL_VALUE, FILL_VALUE
@@ -121,23 +121,23 @@ struct InitSimdTrace_;
 
 #ifdef COMPILER_MSVC
 #define SEQAN_SIMD_TRACE_SETUP_2_(SIZE, ...)                                                        \
-template <typename TVector, __uint8 FILL_VALUE>                                                     \
+template <typename TVector, uint8_t FILL_VALUE>                                                     \
 struct InitSimdTrace_<TVector, FILL_VALUE, SIZE>                                                    \
 {                                                                                                   \
     static const TVector VALUE;                                                                     \
 };                                                                                                  \
                                                                                                     \
-template <typename TVector, __uint8 FILL_VALUE>                                                     \
+template <typename TVector, uint8_t FILL_VALUE>                                                     \
 const TVector InitSimdTrace_<TVector, FILL_VALUE, SIZE>::VALUE = TVector{__VA_ARGS__};
 #else // COMPILER_MSVC
 #define SEQAN_SIMD_TRACE_SETUP_2_(SIZE, ...)                                                        \
-template <typename TVector, __uint8 FILL_VALUE>                                                     \
+template <typename TVector, uint8_t FILL_VALUE>                                                     \
 struct InitSimdTrace_<TVector, FILL_VALUE, SIZE>                                                    \
 {                                                                                                   \
     static const TVector VALUE;                                                                     \
 };                                                                                                  \
                                                                                                     \
-template <typename TVector, __uint8 FILL_VALUE>                                                     \
+template <typename TVector, uint8_t FILL_VALUE>                                                     \
 const TVector InitSimdTrace_<TVector, FILL_VALUE, SIZE>::VALUE{__VA_ARGS__};
 #endif // COMPILER_MSVC
 
@@ -188,7 +188,7 @@ struct TraceValue_<TVector, True>
 
 #define SEQAN_SIMD_TRACE_OUT_OF_CLASS_INIT_(TRACE_VALUE)                             \
     template <typename TVector>                                                      \
-    const TVector TraceValue_<TVector, True>::TRACE_VALUE = InitSimdTrace_<TVector, TraceValue_<__uint8, False>::TRACE_VALUE, LENGTH<TVector>::VALUE>::VALUE;
+    const TVector TraceValue_<TVector, True>::TRACE_VALUE = InitSimdTrace_<TVector, TraceValue_<uint8_t, False>::TRACE_VALUE, LENGTH<TVector>::VALUE>::VALUE;
 
 SEQAN_SIMD_TRACE_OUT_OF_CLASS_INIT_(NONE)
 SEQAN_SIMD_TRACE_OUT_OF_CLASS_INIT_(DIAGONAL)
@@ -202,7 +202,7 @@ SEQAN_SIMD_TRACE_OUT_OF_CLASS_INIT_(NO_HORIZONTAL_TRACEBACK)
 SEQAN_SIMD_TRACE_OUT_OF_CLASS_INIT_(NO_VERTICAL_TRACEBACK)
 
 // Type alias to choose between scalar and simd version of trace value.
-template <typename TValue = __uint8>
+template <typename TValue = uint8_t>
 using TraceBitMap_ = TraceValue_<TValue, typename Is<SimdVectorConcept<TValue> >::Type >;
 
 // ----------------------------------------------------------------------------
diff --git a/include/seqan/align/evaluate_alignment.h b/include/seqan/align/evaluate_alignment.h
index e242f2e..a8fdaa5 100644
--- a/include/seqan/align/evaluate_alignment.h
+++ b/include/seqan/align/evaluate_alignment.h
@@ -316,8 +316,8 @@ TScoreVal computeAlignmentStats(AlignmentStats & stats,
     return computeAlignmentStats(stats, row(align, 0), row(align, 1), scoringScheme);
 }
 
-// NOTE(h-2): this interface is deprecated. Don't use it.
 template <typename TGaps, typename TAlignSpec, typename TScoreVal, typename TScoreSpec>
+[[deprecated("Use computeAlignmentStats(stats, align, scoringScheme) instead.")]]
 TScoreVal computeAlignmentStats(Align<TGaps, TAlignSpec> const & align,
                                 Score<TScoreVal, TScoreSpec> const & scoringScheme)
 {
diff --git a/include/seqan/align/gaps_anchor.h b/include/seqan/align/gaps_anchor.h
index c75042d..154f1c6 100644
--- a/include/seqan/align/gaps_anchor.h
+++ b/include/seqan/align/gaps_anchor.h
@@ -302,7 +302,7 @@ inline void
 _assignSourceLength(TSize & size, Gaps<TSource, AnchorGaps<TGapAnchors> > const & me)
 {
     if (IsSameType<TSource, Nothing>::VALUE)
-        size = maxValue<TSize>() / 2;
+        size = std::numeric_limits<TSize>::max() / 2;
     else
         size = length(value(me.data_source));
 }
@@ -345,13 +345,13 @@ _getAnchor(TAnchor & anchor, Gaps<TSource, AnchorGaps<TGapAnchors> > const & me,
             {
                 // if there is no sequence but anchors -> assume infinite sequence
                 if (anchor.seqPos == 0)
-                    anchor.seqPos = maxValue(anchor.gapPos);
+                    anchor.seqPos = std::numeric_limits<decltype(anchor.gapPos)>::max();
                 // if the sequence has a length > 0, but there is an anchor behind the end
                 // -> elongate sequence
                 else if ((int64_t)anchor.seqPos < (int64_t)back(_dataAnchors(me)).seqPos)
                     anchor.seqPos = back(_dataAnchors(me)).seqPos;
             }
-            anchor.gapPos = maxValue(anchor.gapPos);
+            anchor.gapPos = std::numeric_limits<decltype(anchor.gapPos)>::max();
         }
     }
     else if (idx > 0)
@@ -362,7 +362,7 @@ _getAnchor(TAnchor & anchor, Gaps<TSource, AnchorGaps<TGapAnchors> > const & me,
         if (idx == 0)
             anchor.gapPos = 0;
         else
-            anchor.gapPos = minValue(anchor.gapPos);
+            anchor.gapPos = std::numeric_limits<decltype(anchor.gapPos)>::min();
     }
 }
 
diff --git a/include/seqan/align/gaps_base.h b/include/seqan/align/gaps_base.h
index e187688..ed29a01 100644
--- a/include/seqan/align/gaps_base.h
+++ b/include/seqan/align/gaps_base.h
@@ -455,7 +455,7 @@ bool isGap(Gaps<TSequence, TSpec> const & gaps, TPos clippedViewPos)
  * @fn Gaps#isCharacer
  * @brief Query positions in a Gaps object for being a character.
  *
- * @signature bool isGap(gaps, viewPos);
+ * @signature bool isCharacter(gaps, viewPos);
  *
  * @param[in] gaps    The Gaps object to query.
  * @param[in] viewPos The view position (including clipping and gaps).
diff --git a/include/seqan/align/gaps_iterator_anchor.h b/include/seqan/align/gaps_iterator_anchor.h
index 775af98..7d98108 100644
--- a/include/seqan/align/gaps_iterator_anchor.h
+++ b/include/seqan/align/gaps_iterator_anchor.h
@@ -180,7 +180,7 @@ getValue(Iter<TGaps, GapsIterator<AnchorGaps<TGapAnchors> > > & me)
     typedef typename Value<Iter<TGaps, GapsIterator<ArrayGaps> > >::Type TValue;
     if (isGap(me)) return gapValue<TValue>();
     else if (isUnknown(me)) return unknownValue<TValue>();
-    else return getValue(source(me));
+    else return *source(me);
 }
 
 template <typename TGaps, typename TGapAnchors>
@@ -190,7 +190,7 @@ getValue(Iter<TGaps, GapsIterator<AnchorGaps<TGapAnchors> > > const & me)
     typedef typename Value<Iter<TGaps, GapsIterator<ArrayGaps> > const>::Type TValue;
     if (isGap(me)) return gapValue<TValue>();
     else if (isUnknown(me)) return unknownValue<TValue>();
-    else return getValue(source(me));
+    else return *source(me);
 }
 
 // ----------------------------------------------------------------------------
diff --git a/include/seqan/align/global_alignment_myers_hirschberg_impl.h b/include/seqan/align/global_alignment_myers_hirschberg_impl.h
index 24e67ec..d6ce1f0 100644
--- a/include/seqan/align/global_alignment_myers_hirschberg_impl.h
+++ b/include/seqan/align/global_alignment_myers_hirschberg_impl.h
@@ -257,7 +257,7 @@ _globalAlignment(Gaps<TSequenceH, TGapsSpecH> & gapsH,
     String<unsigned> forwardBitMask;
     String<unsigned> reverseBitMask;
 
-    resize(VP, blockCount, maxValue<unsigned>());
+    resize(VP, blockCount, std::numeric_limits<unsigned>::max());
     resize(VN, blockCount, 0);
 
     // first bitMask will be constructed from the shorter sequence
@@ -512,7 +512,7 @@ _globalAlignment(Gaps<TSequenceH, TGapsSpecH> & gapsH,
             fSilencer <<= fOffSet;
 
             /* reset v-bitvectors */
-            std::fill(begin(VP, Standard()) + fStartBlock, begin(VP, Standard()) + fEndBlock + 1, maxValue<unsigned>());
+            std::fill(begin(VP, Standard()) + fStartBlock, begin(VP, Standard()) + fEndBlock + 1, std::numeric_limits<unsigned>::max());
             std::fill(begin(VN, Standard()) + fStartBlock, begin(VN, Standard()) + fEndBlock + 1, 0);
 
             /* determine start-position and start-score */
@@ -622,7 +622,7 @@ _globalAlignment(Gaps<TSequenceH, TGapsSpecH> & gapsH,
             rSilencer <<= rOffSet;
 
             /* reset v-bitvectors */
-            std::fill(begin(VP, Standard()) + rStartBlock, begin(VP, Standard()) + rEndBlock + 1, maxValue<unsigned>());
+            std::fill(begin(VP, Standard()) + rStartBlock, begin(VP, Standard()) + rEndBlock + 1, std::numeric_limits<unsigned>::max());
             std::fill(begin(VN, Standard()) + rStartBlock, begin(VN, Standard()) + rEndBlock + 1, 0);
 
             /* determine start-position and start-score */
diff --git a/include/seqan/align/global_alignment_myers_impl.h b/include/seqan/align/global_alignment_myers_impl.h
index 8082f3b..0d3c20e 100644
--- a/include/seqan/align/global_alignment_myers_impl.h
+++ b/include/seqan/align/global_alignment_myers_impl.h
@@ -94,7 +94,7 @@ _globalAlignmentScore(String<TAlphabetH, TSpecH> const & seqH,
     unsigned int scoreMask = 1 << ((len_y % BLOCK_SIZE) - 1);    // the mask with a bit set at the position of the last active cell
 
     String<unsigned> VP;
-    resize(VP, blockCount, maxValue<unsigned>());
+    resize(VP, blockCount, std::numeric_limits<unsigned>::max());
     String<unsigned> VN;
     resize(VN, blockCount, 0);
     String<unsigned> bitMask;
diff --git a/include/seqan/align/local_alignment_banded_waterman_eggert_impl.h b/include/seqan/align/local_alignment_banded_waterman_eggert_impl.h
index 3f42d50..b80511c 100644
--- a/include/seqan/align/local_alignment_banded_waterman_eggert_impl.h
+++ b/include/seqan/align/local_alignment_banded_waterman_eggert_impl.h
@@ -498,8 +498,8 @@ _initLocalAlignmentFinder(TSequenceH const & seqH,
 
     resize(finder.forbidden, height * diagonalWidth, false);
 
-    finder.bestEndPos = minValue<typename TFinder::TMatrixPosition>();
-    finder.bestBeginPos = minValue<typename TFinder::TMatrixPosition>();
+    finder.bestEndPos = std::numeric_limits<typename TFinder::TMatrixPosition>::min();
+    finder.bestBeginPos = std::numeric_limits<typename TFinder::TMatrixPosition>::min();
 }
 
 // ----------------------------------------------------------------------------
diff --git a/include/seqan/align/local_alignment_waterman_eggert_impl.h b/include/seqan/align/local_alignment_waterman_eggert_impl.h
index e78fc33..d80cfc3 100644
--- a/include/seqan/align/local_alignment_waterman_eggert_impl.h
+++ b/include/seqan/align/local_alignment_waterman_eggert_impl.h
@@ -64,7 +64,7 @@ public:
     TValue value_;
     TID id_;
 
-    ScoreAndID() : value_(MinValue<TValue>::VALUE), id_(MaxValue<TValue>::VALUE)
+    ScoreAndID() : value_(std::numeric_limits<TValue>::min()), id_(std::numeric_limits<TValue>::max())
     {}
 
     ScoreAndID(TValue score, TID id_pos)
@@ -157,8 +157,8 @@ _initLocalAlignmentFinder(TSequenceH const & seqH,
 
     resize(finder.forbidden, (len0 + 1) * (len1 + 1), false);
 
-    finder.bestEndPos = maxValue<typename TFinder::TMatrixPosition>();
-    finder.bestBeginPos = maxValue<typename TFinder::TMatrixPosition>();
+    finder.bestEndPos = std::numeric_limits<typename TFinder::TMatrixPosition>::max();
+    finder.bestBeginPos = std::numeric_limits<typename TFinder::TMatrixPosition>::max();
 }
 
 // ----------------------------------------------------------------------------
@@ -179,7 +179,7 @@ template <typename TScoreValue>
 TScoreValue getScore(LocalAlignmentFinder<TScoreValue> const & sw)
 {
     typedef LocalAlignmentFinder<TScoreValue> TFinder;
-    if(sw.bestEndPos !=  maxValue<typename TFinder::TMatrixPosition>())
+    if(sw.bestEndPos !=  std::numeric_limits<typename TFinder::TMatrixPosition>::max())
         return getValue(const_cast<typename TFinder::TMatrix &>(sw.matrix), sw.bestEndPos);
     return 0;
 }
diff --git a/include/seqan/align_extend/align_extend.h b/include/seqan/align_extend/align_extend.h
index f5459fb..6489927 100644
--- a/include/seqan/align_extend/align_extend.h
+++ b/include/seqan/align_extend/align_extend.h
@@ -254,7 +254,7 @@ _extendAlignmentImpl(Gaps<TSource0, TGapsSpec0> & row0,
     TPos newAlignLen = length(row0);
 
     // centerScore was set to "compute yourself" by interface function without score parameter
-    if (centerScore == minValue<TScoreValue>())
+    if (centerScore == std::numeric_limits<TScoreValue>::min())
     {
         centerScore = 0;
 
@@ -501,7 +501,7 @@ extendAlignment(Align<TStringInfix, TAlignSpec> & align,
                 ExtensionDirection const & direction,
                 Score<TScoreValue, TScoreSpec> const & scoreScheme)
 {
-    return _extendAlignmentImpl(align, minValue<TScoreValue>(), hSeq, vSeq, positions, direction, 0, 0, 0, scoreScheme,
+    return _extendAlignmentImpl(align, std::numeric_limits<TScoreValue>::min(), hSeq, vSeq, positions, direction, 0, 0, 0, scoreScheme,
                                 False(), False());
 }
 
@@ -533,7 +533,7 @@ extendAlignment(Align<TStringInfix, TAlignSpec> & align,
                 int const upperDiag,
                 Score<TScoreValue, TScoreSpec> const & scoreScheme)
 {
-    return _extendAlignmentImpl(align, minValue<TScoreValue>(), hSeq, vSeq, positions, direction, lowerDiag, upperDiag,
+    return _extendAlignmentImpl(align, std::numeric_limits<TScoreValue>::min(), hSeq, vSeq, positions, direction, lowerDiag, upperDiag,
                                 0, scoreScheme, True(), False());
 }
 
@@ -566,7 +566,7 @@ extendAlignment(Align<TStringInfix, TAlignSpec> & align,
                 TScoreValue const & xDrop,
                 Score<TScoreValue, TScoreSpec> const & scoreScheme)
 {
-    return _extendAlignmentImpl(align, minValue<TScoreValue>(), hSeq, vSeq, positions, direction, 0, 0, xDrop,
+    return _extendAlignmentImpl(align, std::numeric_limits<TScoreValue>::min(), hSeq, vSeq, positions, direction, 0, 0, xDrop,
                                 scoreScheme, False(), True());
 }
 
@@ -600,7 +600,7 @@ extendAlignment(Align<TStringInfix, TAlignSpec> & align,
                 TScoreValue const & xDrop,
                 Score<TScoreValue, TScoreSpec> const & scoreScheme)
 {
-    return _extendAlignmentImpl(align, minValue<TScoreValue>(), hSeq, vSeq, positions, direction, lowerDiag, upperDiag,
+    return _extendAlignmentImpl(align, std::numeric_limits<TScoreValue>::min(), hSeq, vSeq, positions, direction, lowerDiag, upperDiag,
                                 xDrop, scoreScheme, True(), True());
 }
 
diff --git a/include/seqan/align_extend/dp_scout_xdrop.h b/include/seqan/align_extend/dp_scout_xdrop.h
index 8331f22..9cd22eb 100644
--- a/include/seqan/align_extend/dp_scout_xdrop.h
+++ b/include/seqan/align_extend/dp_scout_xdrop.h
@@ -68,14 +68,14 @@ public:
     TScoreValue columnMax;
 
     DPScoutState_() :
-        terminationThreshold(MaxValue<TScoreValue>::VALUE),
-        columnMax(MinValue<TScoreValue>::VALUE)
+        terminationThreshold(std::numeric_limits<TScoreValue>::max()),
+        columnMax(std::numeric_limits<TScoreValue>::min())
     {
     }
 
     DPScoutState_(TScoreValue const & _terminationThreshold) :
         terminationThreshold(_terminationThreshold),
-        columnMax(MinValue<TScoreValue>::VALUE)
+        columnMax(std::numeric_limits<TScoreValue>::min())
     {
     }
 };
@@ -156,7 +156,7 @@ _scoutBestScore(DPScout_<TDPCell, Terminator_<XDrop_<TDPCellValue> > > & dpScout
     if (_scoreOfCell(dpScout._maxScore) - dpScout.state->columnMax >= dpScout.state->terminationThreshold)
         terminateScout(dpScout);
     else // reset columMax at end of column
-        dpScout.state->columnMax = MinValue<TScoreValue>::VALUE;
+        dpScout.state->columnMax = std::numeric_limits<TScoreValue>::min();
 }
 
 // ----------------------------------------------------------------------------
diff --git a/include/seqan/align_profile/add_to_profile.h b/include/seqan/align_profile/add_to_profile.h
index 76f035d..bbd1cac 100644
--- a/include/seqan/align_profile/add_to_profile.h
+++ b/include/seqan/align_profile/add_to_profile.h
@@ -83,8 +83,8 @@ namespace seqan {
 template <typename TChar, typename TValue, typename TSpec, typename TSpec2>
 void addToProfile(String<ProfileChar<TChar, TValue, TSpec> > & profile,
                   String<TChar, TSpec2> /*const*/ & seq,
-                  int lDiag = minValue<int>(),
-                  int uDiag = maxValue<int>())  // non-const because of holder issues
+                  int lDiag = std::numeric_limits<int>::min(),
+                  int uDiag = std::numeric_limits<int>::max())  // non-const because of holder issues
 {
     typedef ProfileChar<TChar, TValue, TSpec> TProfileChar;
 
@@ -97,7 +97,7 @@ void addToProfile(String<ProfileChar<TChar, TValue, TSpec> > & profile,
     seqan::Score<int, seqan::ProfileSeqScore> sScheme(profile);
 
     // Perform the global alignment.
-    if (lDiag == minValue<int>() || uDiag == maxValue<int>())
+    if (lDiag == std::numeric_limits<int>::min() || uDiag == std::numeric_limits<int>::max())
         globalAlignment(gapsH, gapsV, sScheme, Gotoh());
     else
         globalAlignment(gapsH, gapsV, sScheme, lDiag, uDiag, Gotoh());
diff --git a/include/seqan/align_split/align_split_interface.h b/include/seqan/align_split/align_split_interface.h
index 658536a..f1db184 100644
--- a/include/seqan/align_split/align_split_interface.h
+++ b/include/seqan/align_split/align_split_interface.h
@@ -389,7 +389,7 @@ auto _splitAlignmentImpl(Gaps<TContigSeqL> & gapsContigL,
     // We actually need to first compute the scores, than trace from the choosen split position.
     DPContext<TScoreValue, TGapModel> dpContextL;
     DPScoutState_<SplitAlignmentScout> scoutStateL;
-    resize(scoutStateL.splitScore, length(source(gapsContigL)) + 1, minValue<TScoreValue>() / 2);
+    resize(scoutStateL.splitScore, length(source(gapsContigL)) + 1, std::numeric_limits<TScoreValue>::min() / 2);
     resize(scoutStateL.splitPos, length(scoutStateL.splitScore));
 
     String<TTraceSegment> traceL;
@@ -402,7 +402,7 @@ auto _splitAlignmentImpl(Gaps<TContigSeqL> & gapsContigL,
     // Compute trace and split score sequence for the right alignment.
     DPContext<TScoreValue, TGapModel> dpContextR;
     DPScoutState_<SplitAlignmentScout> scoutStateR;
-    resize(scoutStateR.splitScore, length(source(gapsContigR)) + 1, minValue<TScoreValue>() / 2);
+    resize(scoutStateR.splitScore, length(source(gapsContigR)) + 1, std::numeric_limits<TScoreValue>::min() / 2);
     resize(scoutStateR.splitPos, length(scoutStateR.splitScore));
 
     String<TTraceSegment> traceR;
@@ -482,7 +482,7 @@ auto _splitAlignmentImpl(Gaps<TContigSeqL> & gapsContigL,
 {
     typedef typename SubstituteAlignConfig_<AlignConfig<TTop, TRight, TLeft, TBottom> >::Type TFreeEndGaps;
     // Check whether we need to run the banded versions.
-    if (lowerDiagonal != minValue<int>() && upperDiagonal != maxValue<int>())
+    if (lowerDiagonal != std::numeric_limits<int>::min() && upperDiagonal != std::numeric_limits<int>::max())
     {
         typedef AlignConfig2<SplitAlignmentAlgo, DPBandConfig<BandOn>, TFreeEndGaps,
         TracebackOn<TracebackConfig_<CompleteTrace, GapsLeft> > > TAlignConfigL;
@@ -513,8 +513,8 @@ auto _splitAlignmentImpl(Gaps<TContigSeqL> & gapsContigL,
                          Gaps<TReadSeqR> & gapsReadR,
                          Score<TScoreValue, TScoreSpec> const & scoringScheme,
                          AlignConfig<TTop, TRight, TLeft, TBottom, TConfigSpec> const & config,
-                         int lowerDiagonal = minValue<int>(),
-                         int upperDiagonal = maxValue<int>())
+                         int lowerDiagonal = std::numeric_limits<int>::min(),
+                         int upperDiagonal = std::numeric_limits<int>::max())
 {
     if (_usesAffineGaps(scoringScheme, source(gapsContigL), source(gapsReadL)))
         return _splitAlignmentImpl(gapsContigL, gapsReadL, gapsContigR, gapsReadR,
diff --git a/include/seqan/bam_io/bam_alignment_record.h b/include/seqan/bam_io/bam_alignment_record.h
index b2b089e..7f2ff6e 100644
--- a/include/seqan/bam_io/bam_alignment_record.h
+++ b/include/seqan/bam_io/bam_alignment_record.h
@@ -254,7 +254,7 @@ public:
     static int32_t const INVALID_LEN = 0;
     static uint32_t const INVALID_QID = 4294967295u;  // TODO(holtgrew): Undocumented as of yet.
 
-    BamAlignmentRecord() : _qID(MaxValue<unsigned>::VALUE) { clear(*this); }
+    BamAlignmentRecord() : _qID(std::numeric_limits<unsigned>::max()) { clear(*this); }
 };
 
 // ============================================================================
@@ -281,7 +281,7 @@ clear(BamAlignmentRecord & record)
 {
     clear(record.qName);
     record.flag = 0;
-    record._qID = MaxValue<uint32_t>::VALUE;
+    record._qID = std::numeric_limits<uint32_t>::max();
     record.rID = BamAlignmentRecord::INVALID_REFID;
     record.beginPos = BamAlignmentRecord::INVALID_POS;
     record.mapQ = 255;
@@ -613,19 +613,19 @@ getAlignmentLengthInRef(BamAlignmentRecord const & record)
 
 #if SEQAN_BIG_ENDIAN
 inline void
-ensure_little_endian(BamAlignmentRecordCore & r)
+enforceLittleEndian(BamAlignmentRecordCore & r)
 {
-    ensure_little_endian(r.rID);
-    ensure_little_endian(r.beginPos);
+    enforceLittleEndian(r.rID);
+    enforceLittleEndian(r.beginPos);
     // _l_qname unchanged because 8bit
     // mapQ unchanged because 8bit
     r.bin       = htole16(r.bin);
     r._n_cigar  = htole16(r._n_cigar);
     r.flag      = htole16(r.flag);
-    ensure_little_endian(r._l_qseq);
-    ensure_little_endian(r.rNextId);
-    ensure_little_endian(r.pNext);
-    ensure_little_endian(r.tLen);
+    enforceLittleEndian(r._l_qseq);
+    enforceLittleEndian(r.rNextId);
+    enforceLittleEndian(r.pNext);
+    enforceLittleEndian(r.tLen);
 }
 
 // This function is guarded so that we save the copy on little endian systems
@@ -633,7 +633,7 @@ template <typename TTarget>
 inline void
 appendRawPod(TTarget & target, BamAlignmentRecordCore r)
 {
-    ensure_little_endian(r);
+    enforceLittleEndian(r);
     appendRawPodImpl(target, r);
 }
 #endif
diff --git a/include/seqan/bam_io/bam_file.h b/include/seqan/bam_io/bam_file.h
index bf1c681..059a17a 100644
--- a/include/seqan/bam_io/bam_file.h
+++ b/include/seqan/bam_io/bam_file.h
@@ -243,7 +243,7 @@ readRecord(BamAlignmentRecord & record, FormattedFile<Bam, Input, TSpec> & file)
 
 template <typename TRecords, typename TSpec, typename TSize>
 inline SEQAN_FUNC_ENABLE_IF(And<IsSameType<typename Value<TRecords>::Type, BamAlignmentRecord>,
-                                IsInteger<TSize> >, TSize)
+                                Is<IntegerConcept<TSize> > >, TSize)
 readRecords(TRecords & records, FormattedFile<Bam, Input, TSpec> & file, TSize maxRecords)
 {
     String<CharString> & buffers = context(file).buffers;
diff --git a/include/seqan/bam_io/bam_header_record.h b/include/seqan/bam_io/bam_header_record.h
index 0854d33..ee095a8 100644
--- a/include/seqan/bam_io/bam_header_record.h
+++ b/include/seqan/bam_io/bam_header_record.h
@@ -272,7 +272,7 @@ findTagKey(unsigned & idx, TKeyName const & key, BamHeaderRecord const & record)
 
 template <typename TId>
 SEQAN_FUNC_ENABLE_IF(
-    IsInteger<TId>,
+    Is<IntegerConcept<TId> >,
     bool)
 inline getTagValue(CharString & value, TId idx, BamHeaderRecord const & record)
 {
@@ -310,7 +310,7 @@ inline getTagValue(CharString & value, TKeyName const & key, BamHeaderRecord con
 
 template <typename TId>
 SEQAN_FUNC_ENABLE_IF(
-    IsInteger<TId>,
+    Is<IntegerConcept<TId> >,
     void)
 inline setTagValue(TId idx, CharString const & value, BamHeaderRecord & record)
 {
diff --git a/include/seqan/bam_io/bam_index_bai.h b/include/seqan/bam_io/bam_index_bai.h
index 4a115f9..bbd07a8 100644
--- a/include/seqan/bam_io/bam_index_bai.h
+++ b/include/seqan/bam_io/bam_index_bai.h
@@ -146,7 +146,7 @@ public:
     String<TBinIndex_> _binIndices;
     String<TLinearIndex_> _linearIndices;
 
-    BamIndex() : _unalignedCount(maxValue<uint64_t>())
+    BamIndex() : _unalignedCount(std::numeric_limits<uint64_t>::max())
     {}
 };
 
@@ -218,7 +218,7 @@ jumpToRegion(FormattedFile<Bam, Input, TSpec> & bamFile,
     // ------------------------------------------------------------------------
     // Compute offset in BGZF file.
     // ------------------------------------------------------------------------
-    uint64_t offset = MaxValue<uint64_t>::VALUE;
+    uint64_t offset = std::numeric_limits<uint64_t>::max();
 
     // Retrieve the candidate bin identifiers for [pos, posEnd).
     String<uint16_t> candidateBins;
@@ -312,7 +312,7 @@ jumpToRegion(FormattedFile<Bam, Input, TSpec> & bamFile,
             break;  // Cannot find overlapping any more.
     }
 
-    if (offset != MaxValue<uint64_t>::VALUE)
+    if (offset != std::numeric_limits<uint64_t>::max())
         setPosition(bamFile, offset);
 
     // Finding no overlapping alignment is not an error, hasAlignments is false.
@@ -345,19 +345,19 @@ bool jumpToOrphans(FormattedFile<Bam, Input, TSpec> & bamFile,
     hasAlignments = false;
 
     // Search linear indices for the largest entry of all references.
-    uint64_t aliOffset = MaxValue<uint64_t>::VALUE;
+    uint64_t aliOffset = std::numeric_limits<uint64_t>::max();
     for (int i = length(index._linearIndices) - 1; i >= 0; --i)
         if (!empty(index._linearIndices[i]))
         {
             aliOffset = back(index._linearIndices[i]);
             break;
         }
-    if (aliOffset == MaxValue<uint64_t>::VALUE)
+    if (aliOffset == std::numeric_limits<uint64_t>::max())
         return false;  // No offset found.
 
     // Get index of the first orphan alignment by seeking from linear index bucket.
     BamAlignmentRecord record;
-    uint64_t offset = MaxValue<uint64_t>::VALUE;
+    uint64_t offset = std::numeric_limits<uint64_t>::max();
     uint64_t result = 0;
     if (!setPosition(bamFile, aliOffset))
         return false;  // Error while seeking.
@@ -375,7 +375,7 @@ bool jumpToOrphans(FormattedFile<Bam, Input, TSpec> & bamFile,
     }
 
     // Jump back to the first alignment.
-    if (offset != MaxValue<uint64_t>::VALUE)
+    if (offset != std::numeric_limits<uint64_t>::max())
     {
         if (!setPosition(bamFile, offset))
             return false;  // Error while seeking.
@@ -440,7 +440,7 @@ open(BamIndex<Bai> & index, char const * filename)
     fin.read(reinterpret_cast<char *>(&nRef), 4);
     if (!fin.good())
         return false;
-    ensure_little_endian(nRef);
+    enforceLittleEndian(nRef);
 
     resize(index._linearIndices, nRef);
     resize(index._binIndices, nRef);
@@ -452,7 +452,7 @@ open(BamIndex<Bai> & index, char const * filename)
         fin.read(reinterpret_cast<char *>(&nBin), 4);
         if (!fin.good())
             return false;
-        ensure_little_endian(nBin);
+        enforceLittleEndian(nBin);
         index._binIndices[i].clear();
         BaiBamIndexBinData_ data;
         for (int j = 0; j < nBin; ++j)  // For each bin.
@@ -463,13 +463,13 @@ open(BamIndex<Bai> & index, char const * filename)
             fin.read(reinterpret_cast<char *>(&bin), 4);
             if (!fin.good())
                 return false;
-            ensure_little_endian(bin);
+            enforceLittleEndian(bin);
 
             int32_t nChunk = 0;
             fin.read(reinterpret_cast<char *>(&nChunk), 4);
             if (!fin.good())
                 return false;
-            ensure_little_endian(nChunk);
+            enforceLittleEndian(nChunk);
             reserve(data.chunkBegEnds, nChunk);
             for (int k = 0; k < nChunk; ++k)  // For each chunk;
             {
@@ -479,8 +479,8 @@ open(BamIndex<Bai> & index, char const * filename)
                 fin.read(reinterpret_cast<char *>(&chunkEnd), 8);
                 if (!fin.good())
                     return false;
-                ensure_little_endian(chunkBeg);
-                ensure_little_endian(chunkEnd);
+                enforceLittleEndian(chunkBeg);
+                enforceLittleEndian(chunkEnd);
                 appendValue(data.chunkBegEnds, Pair<uint64_t>(chunkBeg, chunkEnd));
             }
 
@@ -493,7 +493,7 @@ open(BamIndex<Bai> & index, char const * filename)
         fin.read(reinterpret_cast<char *>(&nIntv), 4);
         if (!fin.good())
             return false;
-        ensure_little_endian(nIntv);
+        enforceLittleEndian(nIntv);
         clear(index._linearIndices[i]);
         reserve(index._linearIndices[i], nIntv);
         for (int j = 0; j < nIntv; ++j)
@@ -502,7 +502,7 @@ open(BamIndex<Bai> & index, char const * filename)
             fin.read(reinterpret_cast<char *>(&ioffset), 8);
             if (!fin.good())
                 return false;
-            ensure_little_endian(ioffset);
+            enforceLittleEndian(ioffset);
             appendValue(index._linearIndices[i], ioffset);
         }
     }
@@ -518,7 +518,7 @@ open(BamIndex<Bai> & index, char const * filename)
         fin.clear();
         nNoCoord = 0;
     }
-    ensure_little_endian(nNoCoord);
+    enforceLittleEndian(nNoCoord);
     index._unalignedCount = nNoCoord;
 
     return true;
@@ -558,7 +558,7 @@ inline bool save(BamIndex<Bai> const & index, char const * baiFilename)
     // Write header.
     out.write("BAI\1", 4);
     int32_t numRefSeqs = length(index._binIndices);
-    ensure_little_endian(numRefSeqs);
+    enforceLittleEndian(numRefSeqs);
     out.write(reinterpret_cast<char *>(&numRefSeqs), 4);
 
     // Write out indices.
@@ -573,26 +573,26 @@ inline bool save(BamIndex<Bai> const & index, char const * baiFilename)
 
         // Write out binning index.
         int32_t numBins = binIndex.size();
-        ensure_little_endian(numBins);
+        enforceLittleEndian(numBins);
         out.write(reinterpret_cast<char *>(&numBins), 4);
         for (TBinIndexIter itB = binIndex.begin(), itBEnd = binIndex.end(); itB != itBEnd; ++itB)
         {
             // Write out bin id.
             uint32_t tmp = itB->first;
-            ensure_little_endian(tmp);
+            enforceLittleEndian(tmp);
             out.write(reinterpret_cast<char const *>(&tmp), 4);
             // Write out number of chunks.
             uint32_t numChunks = length(itB->second.chunkBegEnds);
-            ensure_little_endian(numChunks);
+            enforceLittleEndian(numChunks);
             out.write(reinterpret_cast<char *>(&numChunks), 4);
             // Write out all chunks.
             typedef Iterator<String<Pair<uint64_t> > const, Rooted>::Type TChunkIter;
             for (TChunkIter itC = begin(itB->second.chunkBegEnds); !atEnd(itC); goNext(itC))
             {
                 uint64_t tmp1 = itC->i1;
-                ensure_little_endian(tmp1);
+                enforceLittleEndian(tmp1);
                 uint64_t tmp2 = itC->i2;
-                ensure_little_endian(tmp2);
+                enforceLittleEndian(tmp2);
                 out.write(reinterpret_cast<char const *>(&tmp1), 8);
                 out.write(reinterpret_cast<char const *>(&tmp2), 8);
             }
@@ -600,23 +600,23 @@ inline bool save(BamIndex<Bai> const & index, char const * baiFilename)
 
         // Write out linear index.
         int32_t numIntervals = length(linearIndex);
-        ensure_little_endian(numIntervals);
+        enforceLittleEndian(numIntervals);
         out.write(reinterpret_cast<char *>(&numIntervals), 4);
         typedef Iterator<String<uint64_t> const, Rooted>::Type TLinearIndexIter;
         for (TLinearIndexIter it = begin(linearIndex, Rooted()); !atEnd(it); goNext(it))
         {
             uint64_t tmp = *it;
-            ensure_little_endian(tmp);
+            enforceLittleEndian(tmp);
             out.write(reinterpret_cast<char const *>(&tmp), 8);
         }
     }
 
     // Write the number of unaligned reads if set.
     //std::cerr << "UNALIGNED\t" << index._unalignedCount << std::endl;
-    if (index._unalignedCount != maxValue<uint64_t>())
+    if (index._unalignedCount != std::numeric_limits<uint64_t>::max())
     {
         uint64_t tmp = index._unalignedCount;
-        ensure_little_endian(tmp);
+        enforceLittleEndian(tmp);
         out.write(reinterpret_cast<char const *>(&tmp), 8);
     }
 
@@ -683,13 +683,13 @@ inline bool build(BamIndex<Bai> & index, char const * bamFilename)
 
     // Scan over BAM file and create index.
     BamAlignmentRecord record;
-    uint32_t currBin    = maxValue<uint32_t>();
-    uint32_t prevBin    = maxValue<uint32_t>();
+    uint32_t currBin    = std::numeric_limits<uint32_t>::max();
+    uint32_t prevBin    = std::numeric_limits<uint32_t>::max();
     int32_t currRefId   = BamAlignmentRecord::INVALID_REFID;
     int32_t prevRefId   = BamAlignmentRecord::INVALID_REFID;
     uint64_t currOffset = position(bamFile);
     uint64_t prevOffset = currOffset;
-    int32_t prevPos     = minValue<int32_t>();
+    int32_t prevPos     = std::numeric_limits<int32_t>::min();
 
     while (!atEnd(bamFile))
     {
@@ -737,7 +737,7 @@ inline bool build(BamIndex<Bai> & index, char const * bamFilename)
 
             // Update reference book keeping.
             prevRefId = record.rID;
-            prevBin = minValue<int32_t>();
+            prevBin = std::numeric_limits<int32_t>::min();
         }
 
         // If the alignment's reference id is valid and its bin is not a leaf.
@@ -763,7 +763,7 @@ inline bool build(BamIndex<Bai> & index, char const * bamFilename)
         if (record.bin != prevBin)
         {
             // If not first bin of reference, save previous bin data.
-            if (currBin != maxValue<uint32_t>())
+            if (currBin != std::numeric_limits<uint32_t>::max())
                 _baiAddAlignmentChunkToBin(index, currBin, currOffset, prevOffset);
 
             // Update markers.
diff --git a/include/seqan/bam_io/bam_sam_conversion.h b/include/seqan/bam_io/bam_sam_conversion.h
index 66fafa9..2f5dd6e 100644
--- a/include/seqan/bam_io/bam_sam_conversion.h
+++ b/include/seqan/bam_io/bam_sam_conversion.h
@@ -234,7 +234,7 @@ struct AssignTagsBamToSamOneTagHelper_
             return false;
 
         Type tmp = *reinterpret_cast<Type const *>(&*it);
-        ensure_little_endian(tmp);
+        enforceLittleEndian(tmp);
         appendNumber(target, tmp);
         it += sizeof(Type);
         return true;
@@ -308,7 +308,7 @@ void _appendTagsBamToSamOneTag(TTarget & target, TSourceIter & it)
                 SEQAN_ASSERT_NOT(atEnd(it));
                 tmp.raw[i] = *it++;
             }
-            ensure_little_endian(tmp.len);
+            enforceLittleEndian(tmp.len);
             for (uint32_t i = 0; i < tmp.len; ++i)
             {
                 writeValue(target, ',');
diff --git a/include/seqan/bam_io/bam_tags_dict.h b/include/seqan/bam_io/bam_tags_dict.h
index 296f01c..98c41c7 100644
--- a/include/seqan/bam_io/bam_tags_dict.h
+++ b/include/seqan/bam_io/bam_tags_dict.h
@@ -302,7 +302,7 @@ buildIndex(BamTagsDict const & bamTags)
                 uint32_t len;
             } tmp;
             arrayCopyForward(it, it + 4, tmp.raw);
-            ensure_little_endian(tmp.len);
+            enforceLittleEndian(tmp.len);
             it += 4 + tmp.len * getBamTypeSize(c);
         }
         else
@@ -493,7 +493,7 @@ struct ExtractTagValueHelper_
         } tmp;
 
         arrayCopyForward(rawIter, rawIter + sizeof(Type), tmp.raw);
-        ensure_little_endian(tmp.i);
+        enforceLittleEndian(tmp.i);
         result = static_cast<TResultType>(tmp.i);
         return true;
     }
@@ -668,7 +668,7 @@ struct ToBamTagValueHelper_
         } tmp;
 
         tmp.i = static_cast<Type>(val);
-        ensure_little_endian(tmp.i);
+        enforceLittleEndian(tmp.i);
         append(result, toRange(&tmp.raw[0], &tmp.raw[sizeof(Type)]));
         return true;
     }
diff --git a/include/seqan/bam_io/read_bam.h b/include/seqan/bam_io/read_bam.h
index 24d57ca..8d5143f 100644
--- a/include/seqan/bam_io/read_bam.h
+++ b/include/seqan/bam_io/read_bam.h
@@ -207,7 +207,7 @@ readRecord(BamAlignmentRecord & record,
 
     // BamAlignmentRecordCore.
     arrayCopyForward(it, it + sizeof(BamAlignmentRecordCore), reinterpret_cast<char*>(&record));
-    ensure_little_endian(*reinterpret_cast<BamAlignmentRecordCore*>(&record));
+    enforceLittleEndian(*reinterpret_cast<BamAlignmentRecordCore*>(&record));
     it += sizeof(BamAlignmentRecordCore);
 
     remainingBytes -= sizeof(BamAlignmentRecordCore) + record._l_qname +
@@ -252,9 +252,9 @@ readRecord(BamAlignmentRecord & record,
     {
         unsigned char ui = getValue(it);
         ++it;
-        assignValue(sit, Iupac(ui >> 4));
+        *sit = Iupac(ui >> 4);
         ++sit;
-        assignValue(sit, Iupac(ui & 0x0f));
+        *sit = Iupac(ui & 0x0f);
         ++sit;
     }
     if (record._l_qseq & 1)
diff --git a/include/seqan/bam_io/read_sam.h b/include/seqan/bam_io/read_sam.h
index ad30a46..83c52db 100644
--- a/include/seqan/bam_io/read_sam.h
+++ b/include/seqan/bam_io/read_sam.h
@@ -353,7 +353,7 @@ readRecord(BamAlignmentRecord & record,
     // TLEN
     if (value(iter) == '*')
     {
-        record.tLen = MaxValue<int32_t>::VALUE;
+        record.tLen = std::numeric_limits<int32_t>::max();
         skipOne(iter);
     }
     else
diff --git a/include/seqan/basic/allocator_interface.h b/include/seqan/basic/allocator_interface.h
index 41d7169..60d09af 100644
--- a/include/seqan/basic/allocator_interface.h
+++ b/include/seqan/basic/allocator_interface.h
@@ -200,34 +200,18 @@ allocate(T const &,
 #else
     data = (TValue *) malloc(count * sizeof(TValue));
 #endif*/
-  data = (TValue *) operator new(count * sizeof(TValue));
-#endif
-
-#ifdef SEQAN_PROFILE
-    if (data)
-        SEQAN_PROADD(SEQAN_PROMEMORY, count * sizeof(TValue));
-#endif
-}
-
-template <typename T, typename TValue, typename TSize, typename TUsage>
-inline void
-allocate(T &,
-         TValue * & data,
-         TSize count,
-         Tag<TUsage> const &)
-{
-//  data = (TValue *) operator new(count * sizeof(TValue));
-#ifdef STDLIB_VS
-    data = (TValue *) _aligned_malloc(count * sizeof(TValue), __alignof(TValue));
-#else
-/*#if _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600
-    const size_t align = (__alignof__(TValue) < sizeof(void*)) ? sizeof(void*) : __alignof__(TValue);
-    if (posix_memalign(&(void* &)data, align, count * sizeof(TValue)))
-      data = NULL;
-#else
-    data = (TValue *) malloc(count * sizeof(TValue));
-#endif*/
-  data = (TValue *) operator new(count * sizeof(TValue));
+// suppress -Walloc-size-larger-than= warning; a simple static_cast does not work
+// a working solution would be to downcast std::size_t to unsigned, but this
+// would loose information; thus disabling this for gcc 7 and upwards
+    SEQAN_ASSERT_LEQ(static_cast<std::size_t>(count), std::numeric_limits<std::size_t>::max() / sizeof(TValue));
+#   if defined(COMPILER_GCC) &&  __GNUC__ >= 7
+#       pragma GCC diagnostic push
+#       pragma GCC diagnostic ignored "-Walloc-size-larger-than="
+#   endif //COMPILER_GCC
+    data = (TValue *) operator new(count * sizeof(TValue));
+#   if defined(COMPILER_GCC) &&  __GNUC__ >= 7
+#       pragma GCC diagnostic pop
+#   endif //COMPILER_GCC
 #endif
 
 #ifdef SEQAN_PROFILE
diff --git a/include/seqan/basic/alphabet_adapt_builtins.h b/include/seqan/basic/alphabet_adapt_builtins.h
index a5db639..730cea5 100644
--- a/include/seqan/basic/alphabet_adapt_builtins.h
+++ b/include/seqan/basic/alphabet_adapt_builtins.h
@@ -171,13 +171,15 @@ unknownValueImpl(char const *)
 // ----------------------------------------------------------------------------
 
 template <typename T>
+[[deprecated("Use std::numeric_limits<T>::max() instead.")]]
 inline T const &
 supremumValueImpl(T *)
 {
-    static T const x = MaxValue<T>::VALUE;
+    static T const x = std::numeric_limits<T>::max();
     return x;
 }
 
+[[deprecated("Use std::numeric_limits<T>::max() instead.")]]
 inline long double const &
 supremumValueImpl(long double *)
 {
@@ -185,12 +187,15 @@ supremumValueImpl(long double *)
     return _value;
 }
 
+[[deprecated("Use std::numeric_limits<T>::max() instead.")]]
 inline double const &
 supremumValueImpl(double *)
 {
     static double const _value = std::numeric_limits<double>::infinity( );
     return _value;
 }
+
+[[deprecated("Use std::numeric_limits<T>::max() instead.")]]
 inline float const &
 supremumValueImpl(float *)
 {
@@ -203,13 +208,15 @@ supremumValueImpl(float *)
 // ----------------------------------------------------------------------------
 
 template <typename T>
+[[deprecated("Use std::numeric_limits<T>::min() instead.")]]
 inline T const &
 infimumValueImpl(T *)
 {
-    static T const x = MinValue<T>::VALUE;
+    static T const x = std::numeric_limits<T>::min();
     return x;
 }
 
+[[deprecated("Use std::numeric_limits<T>::min() instead.")]]
 inline float const &
 infimumValueImpl(float *)
 {
@@ -217,6 +224,7 @@ infimumValueImpl(float *)
     return _value;
 }
 
+[[deprecated("Use std::numeric_limits<T>::min() instead.")]]
 inline double const &
 infimumValueImpl(double *)
 {
@@ -224,6 +232,7 @@ infimumValueImpl(double *)
     return _value;
 }
 
+[[deprecated("Use std::numeric_limits<T>::min() instead.")]]
 inline long double const &
 infimumValueImpl(long double *)
 {
diff --git a/include/seqan/basic/alphabet_concept.h b/include/seqan/basic/alphabet_concept.h
index 50e5164..c0955ae 100644
--- a/include/seqan/basic/alphabet_concept.h
+++ b/include/seqan/basic/alphabet_concept.h
@@ -171,7 +171,7 @@ SEQAN_CONCEPT_REFINE(AlphabetConcept, (TValue), (Assignable)(DefaultConstructibl
  *
  * @section Status
  *
- * Deprecated, will be removed in favour of OrderedAlphabetConcept#MaxValue.
+ * @deprecated Will be removed in favour of MaxValue.
  *
  * @see OrderedAlphabetConcept#maxValue
  */
@@ -191,7 +191,7 @@ SEQAN_CONCEPT_REFINE(AlphabetConcept, (TValue), (Assignable)(DefaultConstructibl
  *
  * @section Status
  *
- * Deprecated, will be removed in favour of MaxValue.
+ * @deprecated Will be removed in favour of MaxValue.
  *
  * @see OrderedAlphabetConcept#supremumValueImpl
  * @see OrderedAlphabetConcept#minValue
@@ -213,7 +213,7 @@ SEQAN_CONCEPT_REFINE(AlphabetConcept, (TValue), (Assignable)(DefaultConstructibl
  *
  * @section Status
  *
- * Deprecated, will be removed in favour of MinValue.
+ * @deprecated Will be removed in favour of MinValue.
  *
  * @see OrderedAlphabetConcept#minValue
  */
@@ -233,7 +233,7 @@ SEQAN_CONCEPT_REFINE(AlphabetConcept, (TValue), (Assignable)(DefaultConstructibl
  *
  * @section Status
  *
- * Deprecated, will be removed in favour of MinValue.
+ * @deprecated  Will be removed in favour of MinValue.
  *
  * @see OrderedAlphabetConcept#infimumValueImpl
  * @see OrderedAlphabetConcept#maxValue
@@ -243,10 +243,10 @@ SEQAN_CONCEPT_REFINE(AlphabetConcept, (TValue), (Assignable)(DefaultConstructibl
 // Forwards for Metafunctions and Functions.
 template <typename T> struct MinValue;
 template <typename T> struct MaxValue;
-template <typename T> T const & minValue();
-template <typename T> T const & minValue(T);
-template <typename T> T const & maxValue();
-template <typename T> T const & maxValue(T);
+template <typename T> T minValue();
+template <typename T> T minValue(T);
+template <typename T> T maxValue();
+template <typename T> T maxValue(T);
 
 SEQAN_CONCEPT_REFINE(OrderedAlphabetConcept, (TValue), (AlphabetConcept)(Comparable))
 {
@@ -255,11 +255,11 @@ SEQAN_CONCEPT_REFINE(OrderedAlphabetConcept, (TValue), (AlphabetConcept)(Compara
     SEQAN_CONCEPT_USAGE(OrderedAlphabetConcept)
     {
         // type consistency checks
-        sameType(minValue(val), val);
-        sameType(minValue<TValue>(), val);
+        // sameType(minValue(val), val);      // minValue() is deprecated
+        // sameType(minValue<TValue>(), val); // minValue() is deprecated
         sameType(MinValue<TValue>::VALUE, val);
-        sameType(maxValue(val), val);
-        sameType(maxValue<TValue>(), val);
+        // sameType(maxValue(val), val);      // maxValue() is deprecated
+        // sameType(maxValue<TValue>(), val); // maxValue() is deprecated
         sameType(MaxValue<TValue>::VALUE, val);
 
         // TODO(holtgrew): This does not work in C++98, we need C++11 with constexpr.
diff --git a/include/seqan/basic/alphabet_math.h b/include/seqan/basic/alphabet_math.h
index c77afdb..d471a7b 100644
--- a/include/seqan/basic/alphabet_math.h
+++ b/include/seqan/basic/alphabet_math.h
@@ -211,7 +211,7 @@ unsigned char toUpperValue(unsigned char c)
 // Function supremumValueImpl
 // ----------------------------------------------------------------------------
 
-template <typename T> inline T const & supremumValueImpl(T *);
+template <typename T> [[deprecated("Use std::numeric_limits<T>::max() instead.")]] inline T const & supremumValueImpl(T *);
 
 // ----------------------------------------------------------------------------
 // Function maxValue
@@ -220,26 +220,26 @@ template <typename T> inline T const & supremumValueImpl(T *);
 // Forward to supremumValueImpl() only.
 
 template <typename T>
-inline T const &
+[[deprecated("Use std::numeric_limits<T>::max() instead.")]]
+inline T
 maxValue()
 {
-    T * _tag = 0;
-    return supremumValueImpl(_tag);
+    return std::numeric_limits<T>::max();
 }
 
 template <typename T>
-inline T const &
+[[deprecated("Use std::numeric_limits<T>::max() instead.")]]
+inline T
 maxValue(T /*tag*/)
 {
-    T * _tag = 0;
-    return supremumValueImpl(_tag);
+    return std::numeric_limits<T>::max();
 }
 
 // ----------------------------------------------------------------------------
 // Function infimumValueImpl
 // ----------------------------------------------------------------------------
 
-template <typename T> inline T const & infimumValueImpl(T *);
+template <typename T> [[deprecated("Use std::numeric_limits<T>::min() instead.")]] inline T const & infimumValueImpl(T *);
 
 // ----------------------------------------------------------------------------
 // Function minValue
@@ -248,19 +248,19 @@ template <typename T> inline T const & infimumValueImpl(T *);
 // Forward to infimumValueImpl() only.
 
 template <typename T>
-inline T const &
+[[deprecated("Use std::numeric_limits<T>::min() instead.")]]
+inline T
 minValue()
 {
-    T * _tag = 0;
-    return infimumValueImpl(_tag);
+    return std::numeric_limits<T>::min();
 }
 
 template <typename T>
-inline T const &
+[[deprecated("Use std::numeric_limits<T>::min() instead.")]]
+inline T
 minValue(T /*tag*/)
 {
-    T * _tag = 0;
-    return infimumValueImpl(_tag);
+    return std::numeric_limits<T>::min();
 }
 
 // ----------------------------------------------------------------------------
diff --git a/include/seqan/basic/alphabet_simple_type.h b/include/seqan/basic/alphabet_simple_type.h
index f4955fc..b7bc8f6 100644
--- a/include/seqan/basic/alphabet_simple_type.h
+++ b/include/seqan/basic/alphabet_simple_type.h
@@ -135,26 +135,20 @@ public:
     // Members;  Have to be defined in class.
     // ------------------------------------------------------------------------
 
-    TValue value;
+    TValue value{0};
 
     // ------------------------------------------------------------------------
     // Constructors;  Have to be defined in class.
     // ------------------------------------------------------------------------
 
     // TODO(holtgrew): Do we want default initialization?
-   
-    SimpleType() : value(0)
-    {}
-
-   
-    SimpleType(SimpleType const & other)
-    {
-        assign(*this, other);
-    }
+    SimpleType() = default;
+    SimpleType(SimpleType const &) = default;
+    SimpleType(SimpleType &&) = default;
+    ~SimpleType() = default;
 
     // TODO(holtgrew): Do we want an explicit here?
     template <typename T>
-   
     SimpleType(T const & other)
     {
         assign(*this, other);
@@ -163,13 +157,8 @@ public:
     // ------------------------------------------------------------------------
     // Assignment Operator;  Have to be defined in class.
     // ------------------------------------------------------------------------
-
-   
-    SimpleType & operator=(SimpleType const & other)
-    {
-        assign(*this, other);
-        return *this;
-    }
+    SimpleType & operator=(SimpleType const &) = default;
+    SimpleType & operator=(SimpleType &&) = default;
 
     template <typename T>
     inline SimpleType &
@@ -264,6 +253,67 @@ public:
 };
 #pragma pack(pop)
 
+} // namespace seqan
+
+// ----------------------------------------------------------------------------
+// Class numeric_limits
+// ----------------------------------------------------------------------------
+namespace std
+{
+
+template <typename TValue, typename TSpec>
+class numeric_limits<seqan::SimpleType<TValue, TSpec> >
+{
+public:
+    static constexpr bool is_specialized    = true;
+    static constexpr bool is_signed         = false;
+    static constexpr bool is_integer        = false;
+    static constexpr bool is_exact          = true;
+    static constexpr bool has_infinity      = false;
+    static constexpr bool has_quiet_NaN     = false;
+    static constexpr bool has_signaling_NaN = false;
+    static constexpr float_denorm_style has_denorm = denorm_absent;
+    static constexpr bool has_denorm_loss   = false;
+    static constexpr float_round_style round_style = round_toward_zero;
+    static constexpr bool is_iec559         = false;
+    static constexpr bool is_bounded        = true;
+    static constexpr bool is_modulu         = false;
+    static constexpr int  digits            = seqan::BitsPerValue<seqan::SimpleType<TValue, TSpec>>::VALUE;
+    static constexpr int  digits10          = digits - 1;
+    static constexpr int  max_digits10      = 0;
+    static constexpr int  radix             = 2;
+    static constexpr int  min_exponent      = 0;
+    static constexpr int  min_exponent10    = 0;
+    static constexpr int  max_exponent      = 0;
+    static constexpr int  max_exponent10    = 0;
+    static constexpr bool traps             = false;
+    static constexpr bool tinyness_before   = false;
+
+    static constexpr seqan::SimpleType<TValue, TSpec> min()
+    {
+        return seqan::SimpleType<TValue, TSpec>(0);
+    }
+
+    static constexpr seqan::SimpleType<TValue, TSpec> max()
+    {
+        return seqan::SimpleType<TValue, TSpec>(((TValue)seqan::ValueSize<seqan::SimpleType<TValue, TSpec> >::VALUE - 1));
+    }
+
+    static constexpr seqan::SimpleType<TValue, TSpec> lowest()
+    {
+        return seqan::SimpleType<TValue, TSpec>(0);
+    }
+
+    static constexpr seqan::SimpleType<TValue, TSpec> infinity()
+    {
+        return seqan::SimpleType<TValue, TSpec>(((TValue)seqan::ValueSize<seqan::SimpleType<TValue, TSpec> >::VALUE - 1));
+    }
+};
+
+} //namespace std
+
+namespace seqan
+{
 // ============================================================================
 // Metafunctions
 // ============================================================================
@@ -319,7 +369,7 @@ struct MinValue<SimpleType<TValue, TSpec> >
 };
 
 template <typename TValue, typename TSpec>
-const SimpleType<TValue, TSpec> MinValue<SimpleType<TValue, TSpec> >::VALUE = SimpleType<TValue, TSpec>(0);
+const SimpleType<TValue, TSpec> MinValue<SimpleType<TValue, TSpec> >::VALUE = std::numeric_limits<SimpleType<TValue, TSpec>>::min();
 
 template <typename TValue, typename TSpec>
 inline SimpleType<TValue, TSpec> const &
@@ -339,7 +389,7 @@ struct MaxValue<SimpleType<TValue, TSpec> >
 };
 
 template <typename TValue, typename TSpec>
-const SimpleType<TValue, TSpec> MaxValue<SimpleType<TValue, TSpec> >::VALUE = SimpleType<TValue, TSpec>(((TValue)ValueSize<SimpleType<TValue, TSpec> >::VALUE - 1));
+const SimpleType<TValue, TSpec> MaxValue<SimpleType<TValue, TSpec> >::VALUE = std::numeric_limits<SimpleType<TValue, TSpec>>::max();
 
 template <typename TValue, typename TSpec>
 inline SimpleType<TValue, TSpec> const &
diff --git a/include/seqan/basic/array_construct_destruct.h b/include/seqan/basic/array_construct_destruct.h
index cb83d7a..01940a7 100644
--- a/include/seqan/basic/array_construct_destruct.h
+++ b/include/seqan/basic/array_construct_destruct.h
@@ -460,9 +460,7 @@ _arrayConstructCopyDefault(TSource1 source_begin,
 {
     while (source_begin != source_end)
     {
-        // NOTE(holtgrew): getValue() is used here since value() could return
-        // a proxy!
-        valueConstruct(target_begin, getValue(source_begin));
+        valueConstruct(target_begin, *source_begin);
         ++source_begin;
         ++target_begin;
     }
diff --git a/include/seqan/basic/basic_stream.h b/include/seqan/basic/basic_stream.h
index ee4a46c..9308601 100644
--- a/include/seqan/basic/basic_stream.h
+++ b/include/seqan/basic/basic_stream.h
@@ -813,8 +813,9 @@ writeValue(TTargetValue * & iter, TValue val)
 template <typename TTarget, typename TFwdIterator, typename TSize, typename TIChunk, typename TOChunk>
 inline void _write(TTarget &target, TFwdIterator &iter, TSize n, TIChunk, TOChunk)
 {
+    typedef typename GetValue<TFwdIterator>::Type TValue;
     for (; n > (TSize)0; --n, ++iter)
-        writeValue(target, getValue(iter));
+        writeValue(target, static_cast<TValue>(*iter));
 }
 
 // ----------------------------------------------------------------------------
@@ -1206,7 +1207,7 @@ template <typename TTarget, typename TValue>
 inline std::enable_if_t<std::is_arithmetic<TValue>::value>
 appendRawPod(TTarget & target, TValue val)
 {
-    ensure_little_endian(val);
+    enforceLittleEndian(val);
     appendRawPodImpl(target, val);
 }
 
@@ -1278,7 +1279,7 @@ read(TTarget &target, TFwdIterator &iter, TSize n)
 {
     TSize i;
     for (i = 0; !atEnd(iter) && i < n; ++i, ++iter)
-        writeValue(target, value(iter));
+        writeValue(target, *iter);
     return i;
 }
 
diff --git a/include/seqan/basic/debug_test_system.h b/include/seqan/basic/debug_test_system.h
index 410ab6c..f1cdc6c 100644
--- a/include/seqan/basic/debug_test_system.h
+++ b/include/seqan/basic/debug_test_system.h
@@ -114,7 +114,11 @@
 
 // Set default for SEQAN_ENABLE_DEBUG.
 #ifndef SEQAN_ENABLE_DEBUG
+#ifdef NDEBUG
 #define SEQAN_ENABLE_DEBUG 0
+#else
+#define SEQAN_ENABLE_DEBUG 1
+#endif
 #endif  // #ifndef SEQAN_ENABLE_DEBUG
 
 #if !SEQAN_ENABLE_DEBUG
@@ -2316,7 +2320,6 @@ inline void fail()
 #define SEQAN_PATH_TO_ROOT()                      \
     ::seqan::ClassTest::StaticData::pathToRoot()
 
-
 // Returns the POSIX int file handle to an open file.
 // TODO(holtgrewe): Uncomment if openTempFile has been implemented.
 // #define SEQAN_OPEN_TEMP_FILE() (::seqan::ClassTest::openTempFile())
@@ -2384,7 +2387,7 @@ inline void fail()
 
 inline std::string getAbsolutePath(const char * path)
 {
-    return std::string(SEQAN_PATH_TO_ROOT()) + "/" + path;
+    return std::string(::seqan::ClassTest::StaticData::pathToRoot()) + "/" + path;
 }
 
 }  // namespace seqan
diff --git a/include/seqan/basic/fundamental_concepts.h b/include/seqan/basic/fundamental_concepts.h
index 5cf7646..588958f 100644
--- a/include/seqan/basic/fundamental_concepts.h
+++ b/include/seqan/basic/fundamental_concepts.h
@@ -277,6 +277,7 @@ struct Is<Convertible<T, S const> > :
  * @endcode
  *
  * @see DefaultConstructibleConcept
+ * @see MoveConstructibleConcept
  */
 
 SEQAN_CONCEPT(CopyConstructible,(T))
@@ -299,6 +300,33 @@ private:
     T b;
 };
 
+/*!
+ * @concept MoveConstructibleConcept
+ * @brief A type with a move-constructor.
+ *
+ * @headerfile <seqan/basic.h>
+ *
+ * @signature MoveConstructible<T>
+ *
+ * @section Valid Expressions
+ *
+ * @code{.cpp}
+ * T a(rv);  // rv is an rvalue expression of type T
+ * @endcode
+ *
+ * @see DefaultConstructibleConcept
+ * @see CopyConstructibleConcept
+ */
+
+SEQAN_CONCEPT(MoveConstructible,(T))
+{
+    SEQAN_CONCEPT_USAGE(MoveConstructible)
+    {
+        T a{T{}};               // require move constructor
+        ignoreUnusedVariableWarning(a);
+    }
+};
+
 
 // ============================================================================
 // Relation Concepts
@@ -680,10 +708,10 @@ struct IsSignedInteger : Is< SignedIntegerConcept<T> > {};
 template <typename T>
 struct IsUnsignedInteger : Is< UnsignedIntegerConcept<T> > {};
 template <typename T>
-struct IsInteger : Is< IntegerConcept<T> > {};
+struct [[deprecated("Please use Is<IntegerConcept<T> >::Type.")]] IsInteger : Is< IntegerConcept<T> > {};
 
 template <typename T>
-struct IsIntegral : IsInteger<T> {};
+struct [[deprecated("Please use Is<IntegerConcept<T> >::Type.")]] IsIntegral : Is< IntegerConcept<T> > {};
 
 // ============================================================================
 // Concepts for integers
diff --git a/include/seqan/basic/fundamental_transport.h b/include/seqan/basic/fundamental_transport.h
index 116a6ba..8a97d9c 100644
--- a/include/seqan/basic/fundamental_transport.h
+++ b/include/seqan/basic/fundamental_transport.h
@@ -127,7 +127,7 @@ inline void
 assign(Proxy<TTargetSpec> & target,
        TSource & source)
 {
-    assignValue(iter(target), source);
+    *iter(target) = source;
 }
 
 template<typename TTargetSpec, typename TSource>
@@ -135,7 +135,7 @@ inline void
 assign(Proxy<TTargetSpec> & target,
        TSource const & source)
 {
-    assignValue(iter(target), source);
+    *iter(target) = source;
 }
 
 // ----------------------------------------------------------------------------
diff --git a/include/seqan/basic/holder_tristate.h b/include/seqan/basic/holder_tristate.h
index 0849a0a..fd40cd6 100644
--- a/include/seqan/basic/holder_tristate.h
+++ b/include/seqan/basic/holder_tristate.h
@@ -936,15 +936,15 @@ assign(Holder<TValue const, Tristate> & target_,
        Holder<TValue const, Tristate> const & source_)
 {
     switch(source_.data_state) {
-        case Holder<TValue, Tristate>::EMPTY:
+        case Holder<TValue const, Tristate>::EMPTY:
             clear(target_);
             break;
 
-        case Holder<TValue, Tristate>::OWNER:
+        case Holder<TValue const, Tristate>::OWNER:
             create(target_, value(source_));
             break;
 
-        default:  // case Holder<TValue, Tristate>::DEPENDENT
+        default:  // case Holder<TValue const, Tristate>::DEPENDENT
             setValue(target_, value(source_));
             break;
     }
diff --git a/include/seqan/basic/iterator_adaptor.h b/include/seqan/basic/iterator_adaptor.h
index 006906e..6ed4128 100644
--- a/include/seqan/basic/iterator_adaptor.h
+++ b/include/seqan/basic/iterator_adaptor.h
@@ -378,14 +378,14 @@ template <typename TContainer, typename TIterator, typename TSpec>
 inline typename Reference<Iter<TContainer, AdaptorIterator<TIterator, TSpec> > >::Type
 value(Iter<TContainer, AdaptorIterator<TIterator, TSpec> > & me)
 {
-    return value(hostIterator(me));
+    return *hostIterator(me);
 }
 
 template <typename TContainer, typename TIterator, typename TSpec>
 inline typename Reference<Iter<TContainer, AdaptorIterator<TIterator, TSpec> > const>::Type
 value(Iter<TContainer, AdaptorIterator<TIterator, TSpec> > const & me)
 {
-    return value(hostIterator(me));
+    return *hostIterator(me);
 }
 
 // ----------------------------------------------------------------------------
@@ -396,14 +396,14 @@ template <typename TContainer, typename TIterator, typename TSpec>
 inline typename GetValue<Iter<TContainer, AdaptorIterator<TIterator, TSpec> > >::Type
 getValue(Iter<TContainer, AdaptorIterator<TIterator, TSpec> > & me)
 {
-    return getValue(hostIterator(me));
+    return *hostIterator(me);
 }
 
 template <typename TContainer, typename TIterator, typename TSpec>
 inline typename GetValue<Iter<TContainer, AdaptorIterator<TIterator, TSpec> > const>::Type
 getValue(Iter<TContainer, AdaptorIterator<TIterator, TSpec> > const & me)
 {
-    return getValue(hostIterator(me));
+    return *hostIterator(me);
 }
 
 // ----------------------------------------------------------------------------
@@ -415,7 +415,7 @@ inline void
 assignValue(Iter<TContainer, AdaptorIterator<TIterator, TSpec> > & me,
             TValue const & _value)
 {
-    assignValue(hostIterator(me), _value);
+    *hostIterator(me) = _value;
 }
 
 template <typename TContainer, typename TIterator, typename TSpec, typename TValue>
@@ -423,7 +423,7 @@ inline void
 assignValue(Iter<TContainer, AdaptorIterator<TIterator, TSpec> > const & me,
             TValue const & _value)
 {
-    assignValue(hostIterator(me), _value);
+    *hostIterator(me) = _value;
 }
 
 // ----------------------------------------------------------------------------
diff --git a/include/seqan/basic/iterator_interface.h b/include/seqan/basic/iterator_interface.h
index 3cc7c0b..a2b945b 100644
--- a/include/seqan/basic/iterator_interface.h
+++ b/include/seqan/basic/iterator_interface.h
@@ -183,6 +183,7 @@ struct Container
 // ---------------------------------------------------------------------------
 
 template <typename T>
+[[deprecated("Use operator*() instead.")]]
 inline typename Reference<T>::Type
 value(T & me)
 {
@@ -190,6 +191,7 @@ value(T & me)
 }
 
 template <typename T>
+[[deprecated("Use operator*() instead.")]]
 inline typename Reference<T const>::Type
 value(T const & me)
 {
@@ -201,17 +203,19 @@ value(T const & me)
 // ---------------------------------------------------------------------------
 
 template <typename T>
+[[deprecated("Use operator*() instead.")]]
 inline typename GetValue<T>::Type
 getValue(T & me)
 {
-    return value(me);
+    return *me;
 }
 
 template <typename T>
+[[deprecated("Use operator*() instead.")]]
 inline typename GetValue<T const>::Type
 getValue(T const & me)
 {
-    return value(me);
+    return *me;
 }
 
 // ---------------------------------------------------------------------------
@@ -226,20 +230,22 @@ getValue(T const & me)
 // ---------------------------------------------------------------------------
 
 template <typename T, typename TValue>
+[[deprecated("Use dereferencement and assignment instead.")]]
 inline void
 assignValue(T & me,
             TValue const & _value)
 {
-    assign(value(me), _value);
+    assign(*me, _value);
 }
 
 //const version for iterators as targets
 template <typename T, typename TValue>
+[[deprecated("Use dereferencement and assignment instead.")]]
 inline void
 assignValue(T const & me,
             TValue const & _value)
 {
-    assign(value(me), _value);
+    assign(*me, _value);
 }
 
 // ---------------------------------------------------------------------------
diff --git a/include/seqan/basic/math_log_space_value.h b/include/seqan/basic/math_log_space_value.h
index a945003..cec7ed1 100644
--- a/include/seqan/basic/math_log_space_value.h
+++ b/include/seqan/basic/math_log_space_value.h
@@ -140,7 +140,7 @@ class LogProb
     inline
     operator TValue2() const
     {
-        return _convert<TValue2>(typename IsInteger<TValue2>::Type());
+        return _convert<TValue2>(typename Is<IntegerConcept<TValue2> >::Type());
     }
 /*
     inline
diff --git a/include/seqan/basic/pair_bit_compressed.h b/include/seqan/basic/pair_bit_compressed.h
index 6d7e5d5..5075f33 100644
--- a/include/seqan/basic/pair_bit_compressed.h
+++ b/include/seqan/basic/pair_bit_compressed.h
@@ -86,16 +86,23 @@ struct Pair<T1, T2, BitPacked<BITSIZE1, BITSIZE2> >
     // Constructors
     // ------------------------------------------------------------------------
 
-    inline Pair() : i1(T1()), i2(T2()) {}
-
-    inline Pair(Pair const & _p) : i1(_p.i1), i2(_p.i2) {}
+    // bitfield member cannot have an in-class initializer, thus
+    // `inline Pair() = default;` is not possible
+    // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65132
+    inline Pair() : i1(T1{}), i2(T2{}) {};
+    inline Pair(Pair const &) = default;
+    inline Pair(Pair &&) = default;
+    inline Pair & operator=(Pair const &) = default;
+    inline Pair & operator=(Pair &&) = default;
+    inline ~Pair() = default;
 
     inline Pair(T1 const & _i1, T2 const & _i2) : i1(_i1), i2(_i2) {}
 
     template <typename T1_, typename T2_, typename TSpec__>
     // TODO(holtgrew): explicit?
-    inline Pair(Pair<T1_, T2_, TSpec__> const &_p)
-            : i1(getValueI1(_p)), i2(getValueI2(_p)) {}
+    inline Pair(Pair<T1_, T2_, TSpec__> const &_p) :
+        i1(getValueI1(_p)), i2(getValueI2(_p))
+    {}
 };
 #pragma pack(pop)
 
diff --git a/include/seqan/basic/pair_packed.h b/include/seqan/basic/pair_packed.h
index 429e54f..b78d420 100644
--- a/include/seqan/basic/pair_packed.h
+++ b/include/seqan/basic/pair_packed.h
@@ -86,16 +86,22 @@ struct Pair<T1, T2, Pack>
     // Constructors
     // ------------------------------------------------------------------------
 
-    Pair() : i1(T1()), i2(T2()) {}
-
-    Pair(Pair const &_p) : i1(_p.i1), i2(_p.i2) {}
+    // Pair() = default; does not work on gcc4.9, it issues warnings if T1/T2
+    // have no proper default constructor. >=gcc5.0 reports no warnings.
+    Pair() : i1(), i2() {};
+    Pair(Pair const &) = default;
+    Pair(Pair &&) = default;
+    ~Pair() = default;
+    Pair & operator=(Pair const &) = default;
+    Pair & operator=(Pair &&) = default;
 
     Pair(T1 const & _i1, T2 const & _i2) : i1(_i1), i2(_i2) {}
 
     template <typename T1_, typename T2_, typename TSpec__>
     // TODO(holtgrew): explicit?
-    Pair(Pair<T1_, T2_, TSpec__> const &_p)
-            : i1(getValueI1(_p)), i2(getValueI2(_p)) {}
+    Pair(Pair<T1_, T2_, TSpec__> const &_p) :
+        i1(getValueI1(_p)), i2(getValueI2(_p))
+    {}
 };
 #pragma pack(pop)
 
diff --git a/include/seqan/basic/proxy_base.h b/include/seqan/basic/proxy_base.h
index 446bb74..ae09d57 100644
--- a/include/seqan/basic/proxy_base.h
+++ b/include/seqan/basic/proxy_base.h
@@ -429,7 +429,7 @@ operator>>(TStream & strm,
     typedef typename Value<TProxy>::Type TValue;
     TValue temp;
     strm >> temp;
-    assignValue(iter(proxy), temp);
+    *iter(proxy) = temp;
     return strm;
 }
 
@@ -442,7 +442,7 @@ operator>>(TStream & strm,
     typedef typename Value<TProxy>::Type TValue;
     TValue temp;
     strm >> temp;
-    assignValue(iter(proxy), temp);
+    *iter(proxy) = temp;
     return strm;
 }
 
diff --git a/include/seqan/consensus/consensus_base.h b/include/seqan/consensus/consensus_base.h
index b71c368..6c64877 100644
--- a/include/seqan/consensus/consensus_base.h
+++ b/include/seqan/consensus/consensus_base.h
@@ -1354,7 +1354,7 @@ return;
 //
 //    // Parse the file and convert the internal ids
 //    TPos maxPos = 0;
-//    TPos minPos = MaxValue<TPos>::VALUE;
+//    TPos minPos = std::numeric_limits<TPos>::max();
 //    TId count = 0;
 //    if (atEnd(reader))
 //        return false;
diff --git a/include/seqan/consensus/consensus_library.h b/include/seqan/consensus/consensus_library.h
index 433ed84..5e4d448 100644
--- a/include/seqan/consensus/consensus_library.h
+++ b/include/seqan/consensus/consensus_library.h
@@ -483,7 +483,7 @@ appendSegmentMatches(StringSet<TString, TSpec> const & str,
     typedef typename Iterator<TBegEndPos const, Standard>::Type TBegEndIter;
     TBegEndIter begEndIt = begin(begEndPos, Standard());
     TBegEndIter begEndItEnd = end(begEndPos, Standard());
-    TSize minVal = maxValue<TSize>();
+    TSize minVal = std::numeric_limits<TSize>::max();
     TSize maxVal = 0;
     for(;begEndIt != begEndItEnd; ++begEndIt) {
         TSize pos1 = begEndIt->i1;
diff --git a/include/seqan/consensus/consensus_realign.h b/include/seqan/consensus/consensus_realign.h
index c970e74..9caf632 100644
--- a/include/seqan/consensus/consensus_realign.h
+++ b/include/seqan/consensus/consensus_realign.h
@@ -590,7 +590,7 @@ reAlign(FragmentStore<TSpec, TConfig> & fragStore,
     // Copy all reads belonging to this contig and reverse complement them if necessary.
     TAlignedReadStore contigReads;  // TODO(holtgrew): Rather contigAlignedReads?
     TReadPos maxPos = 0;
-    TReadPos minPos = MaxValue<TReadPos>::VALUE;
+    TReadPos minPos = std::numeric_limits<TReadPos>::max();
     for (; alignIt != alignItEnd; ++alignIt) {
         if (alignIt->beginPos > alignIt->endPos) {
             reverseComplement(fragStore.readSeqStore[alignIt->readId]);
diff --git a/include/seqan/consensus/overlap_info_computation.h b/include/seqan/consensus/overlap_info_computation.h
index 5250123..df9cc76 100644
--- a/include/seqan/consensus/overlap_info_computation.h
+++ b/include/seqan/consensus/overlap_info_computation.h
@@ -184,7 +184,7 @@ inline OverlapInfo_ OverlapInfoComputation_<TFragmentStore>::computeOverlapInfo(
 
     AlignConfig<true, true, true, true> alignConfig;
 
-    if (lDiag != seqan::minValue<int>() && uDiag != seqan::minValue<int>())
+    if (lDiag != std::numeric_limits<int>::min() && uDiag != std::numeric_limits<int>::min())
     {
         if (options.verbosity >= 2)
             std::cerr << "global alignment with bands " << lDiag << ", " << uDiag << "\n";
@@ -244,7 +244,7 @@ inline void OverlapInfoComputation_<TFragmentStore>::buildGlobalAlignmentOverlap
         for (unsigned j = i + 1; j < length(store.readStore); ++j)
         {
             OverlapInfo_ info = computeOverlapInfo(i, j,
-                                                   seqan::minValue<int>(), seqan::minValue<int>());
+                                                   std::numeric_limits<int>::min(), std::numeric_limits<int>::min());
             int ovlLen = length(store.readSeqStore[info.seq0]) - info.pos1;
             // if (ovlLen < options.overlapMinLength || 100.0 * info.numErrors / ovlLen > options.overlapMaxErrorRate)
             // {
diff --git a/include/seqan/consensus/overlapper.h b/include/seqan/consensus/overlapper.h
index 52cf68a..2dd6b5f 100644
--- a/include/seqan/consensus/overlapper.h
+++ b/include/seqan/consensus/overlapper.h
@@ -253,7 +253,7 @@ Overlap_ Overlapper_<TFragments, TSequence>::overlapFromAlignment(
     unsigned len1 = length(strings[1]);
 
     typedef int TPos;
-    std::pair<TPos, TPos> range0(seqan::maxValue<TPos>(), seqan::minValue<TPos>());
+    std::pair<TPos, TPos> range0(std::numeric_limits<TPos>::max(), std::numeric_limits<TPos>::min());
     std::pair<TPos, TPos> range1 = range0;
     int errors = 0;
     typedef typename Iterator<TFragments, Standard>::Type TFragmentsIter;
diff --git a/include/seqan/file/file_base.h b/include/seqan/file/file_base.h
index 8852d03..a2a222a 100644
--- a/include/seqan/file/file_base.h
+++ b/include/seqan/file/file_base.h
@@ -597,6 +597,7 @@ inline typename Position< File<TSpec> >::Type seek(File<TSpec> &me, TPos const f
 
     // deprecated
     template < typename TSpec, typename AsyncRequest >
+    [[deprecated]]
     inline void release(File<TSpec> &, AsyncRequest &)
     {
 //IOREV _noop_ see general discussion about AsynRequest
diff --git a/include/seqan/file/file_page.h b/include/seqan/file/file_page.h
index 177f6c3..e54f24f 100644
--- a/include/seqan/file/file_page.h
+++ b/include/seqan/file/file_page.h
@@ -358,7 +358,7 @@ struct MMap;
         Buffer():
             TBase(),
             dirty(false),
-            pageNo(MaxValue<unsigned>::VALUE),
+            pageNo(std::numeric_limits<unsigned>::max()),
             status(READY),
             next(NULL) {}
 
@@ -505,7 +505,7 @@ struct MMap;
 
         PageFrame():
             TBase(),
-            pageNo(MaxValue<unsigned>::VALUE),
+            pageNo(std::numeric_limits<unsigned>::max()),
             next(NULL) {}
     };
 */
diff --git a/include/seqan/find/find_bom.h b/include/seqan/find/find_bom.h
index e499646..f9f71fb 100644
--- a/include/seqan/find/find_bom.h
+++ b/include/seqan/find/find_bom.h
@@ -98,6 +98,7 @@ struct Trie {}; //Trie Tag => "BTM"
 template <typename TSpec = Oracle>
 struct Bfam; //backward factor automaton searching
 
+[[deprecated]]
 typedef Bfam<Oracle> BomAlgo; //deprecated, still there for compatibility reasons
 
 //////////////////////////////////////////////////////////////////////////////
diff --git a/include/seqan/find/find_multiple_bfam.h b/include/seqan/find/find_multiple_bfam.h
index ffd2111..ce66b15 100644
--- a/include/seqan/find/find_multiple_bfam.h
+++ b/include/seqan/find/find_multiple_bfam.h
@@ -76,6 +76,7 @@ namespace seqan
 template <typename TSpec = Oracle>
 struct MultiBfam; //multiple backward factor automaton searching
 
+[[deprecated]]
 typedef MultiBfam<Oracle> SBomAlgo; //deprecated
 
 //////////////////////////////////////////////////////////////////////////////
diff --git a/include/seqan/find/find_myers_ukkonen.h b/include/seqan/find/find_myers_ukkonen.h
index 3d30e1b..799596c 100644
--- a/include/seqan/find/find_myers_ukkonen.h
+++ b/include/seqan/find/find_myers_ukkonen.h
@@ -960,7 +960,7 @@ _patternInitSmallStateBanded(
     //  VP = 100...      VP = 111...
     //
 
-    TWord VP = (MyersUkkonenHP0_<TSpec>::VALUE == 1)? (TWord)1 << ((int)BitsPerValue<TWord>::VALUE-1): maxValue<TWord>(); // HP[0]==1 <-> global, HP[0]==0 <-> local
+    TWord VP = (MyersUkkonenHP0_<TSpec>::VALUE == 1)? (TWord)1 << ((int)BitsPerValue<TWord>::VALUE-1): std::numeric_limits<TWord>::max(); // HP[0]==1 <-> global, HP[0]==0 <-> local
     TWord VN = 0;
 
     // Errors are counted along the lowest diagonal and the
@@ -1047,7 +1047,7 @@ _patternInitSmallStateBanded(
 
         // adjust bitmasks (errors = number of needle chars to preprocess)
         for (; shift < errors; ++ndlIter, ++shift)
-            _myersAdjustBitmask(state, getValue(ndlIter), shift, typename MyersSmallAlphabet_<TValue>::Type());
+            _myersAdjustBitmask(state, *ndlIter, shift, typename MyersSmallAlphabet_<TValue>::Type());
 
         // initialise left column with
         //
@@ -1073,7 +1073,7 @@ _patternInitSmallStateBanded(
         //////////////////////////////////////////////////////////////////
 
         // adjust bitmask
-        _myersAdjustBitmask(state, getValue(ndlIter), shift, typename MyersSmallAlphabet_<TValue>::Type());
+        _myersAdjustBitmask(state, *ndlIter, shift, typename MyersSmallAlphabet_<TValue>::Type());
 
         /////////////////////////
         // DIAGONAL MYERS CORE
diff --git a/include/seqan/find/find_shiftand.h b/include/seqan/find/find_shiftand.h
index 4c5d5cd..ebd33f1 100644
--- a/include/seqan/find/find_shiftand.h
+++ b/include/seqan/find/find_shiftand.h
@@ -161,7 +161,7 @@ _findShiftAndSmallNeedle(TFinder & finder, Pattern<TNeedle, ShiftAnd> & me)
     TWord compare = (TWord)1 << (me.needleLength - 1);
     while (!atEnd(finder))
     {
-        TWord pos = ordValue(convert<TValue>(getValue(finder)));
+        TWord pos = ordValue(convert<TValue>(*finder));
         me.prefSufMatch[0] = ((me.prefSufMatch[0] << 1) | (TWord)1) & me.bitMasks[pos];
         if ((me.prefSufMatch[0] & compare) != 0)
         {
@@ -184,7 +184,7 @@ _findShiftAndLargeNeedle(TFinder & finder, Pattern<TNeedle, ShiftAnd> & me)
     TWord compare = (TWord)1 << ((me.needleLength - 1) % BitsPerValue<TWord>::VALUE);
     while (!atEnd(finder))
     {
-        TWord pos = ordValue(convert<TValue>(getValue(finder)));
+        TWord pos = ordValue(convert<TValue>(*finder));
         TWord carry = 1;
         for(TWord block = 0; block < me.blockCount; ++block)
         {
diff --git a/include/seqan/find/find_shiftor.h b/include/seqan/find/find_shiftor.h
index 4e41811..13d5e13 100644
--- a/include/seqan/find/find_shiftor.h
+++ b/include/seqan/find/find_shiftor.h
@@ -221,7 +221,7 @@ _findShiftOrLargeNeedle(TFinder & finder, Pattern<TNeedle, ShiftOr> & me)
     TWord compare = ~((TWord)1 << ((me.needleLength - 1) % BitsPerValue<TWord>::VALUE));
     while (!atEnd(finder))
     {
-        TWord pos = ordValue(convert<TValue>(getValue(finder)));
+        TWord pos = ordValue(convert<TValue>(*finder));
         TWord carry = 0;
         for(TWord block = 0; block < me.blockCount; ++block)
         {
diff --git a/include/seqan/find/find_wumanber.h b/include/seqan/find/find_wumanber.h
index cf4417b..3268fee 100644
--- a/include/seqan/find/find_wumanber.h
+++ b/include/seqan/find/find_wumanber.h
@@ -360,11 +360,11 @@ void _reinitPattern(Pattern<TNeedle, WuManber> & me)
     typedef typename Size<TKeyword>::Type TSize;
 
     //determine lmin
-    me.lmin = maxValue<TSize>();
+    me.lmin = std::numeric_limits<TSize>::max();
     for (TNeedleIterator it = begin(needle(me)); it != end(needle(me)); ++it)
         if (!empty(*it) && length(*it) < me.lmin)  // skipping empty needles
             me.lmin = length(*it);
-    if (me.lmin == maxValue<TSize>())
+    if (me.lmin == std::numeric_limits<TSize>::max())
         return;  // only empty needles
 
     //compute q:
diff --git a/include/seqan/gff_io/gff_io_base.h b/include/seqan/gff_io/gff_io_base.h
index 8f2e8c0..4906b61 100644
--- a/include/seqan/gff_io/gff_io_base.h
+++ b/include/seqan/gff_io/gff_io_base.h
@@ -129,7 +129,7 @@ struct GffRecord
      * @var int32_t GffRecord::INVALID_IDX;
      * @brief Static member with invalid/sentinel rID value.
      */
-    static int32_t const INVALID_POS = 2147483647;  // TODO(singer): Should be MaxValue<int32_t>::VALUE, but that is not a constant expression :(
+    static int32_t const INVALID_POS = 2147483647;  // TODO(singer): Should be std::numeric_limits<int32_t>::max(), but that is not a constant expression :(
 
     /*!
      * @var CharString GffRecord::ref;
@@ -349,12 +349,13 @@ void readRecord(GffRecord & record, CharString & buffer, TFwdIterator & iter)
 {
     IsNewline isNewline;
 
-    // skip commented lines
+    // skip commented lines as well as ## directives
+    skipUntil(iter, NotFunctor<IsWhitespace>());  //skip empty lines
     while (!atEnd(iter) && value(iter) == '#')
         skipLine(iter);
+    skipUntil(iter, NotFunctor<IsWhitespace>());  //skip empty lines
 
     clear(record);
-    skipUntil(iter, NotFunctor<IsWhitespace>());  //skip empty lines
 
     // read column 1: seqid
     readUntil(record.ref, iter, OrFunctor<IsTab, AssertFunctor<NotFunctor<IsNewline>, ParseError, Gff> >());
@@ -436,6 +437,14 @@ void readRecord(GffRecord & record, CharString & buffer, TFwdIterator & iter)
             break;
         }
     }
+
+    // The last line might be a "### directive" specifically in GFF3
+    // Need to skip it to avoid another call of readRecords
+    skipUntil(iter, NotFunctor<IsWhitespace>());  //skip empty lines
+    while (!atEnd(iter) && value(iter) == '#')
+        skipLine(iter);
+    skipUntil(iter, NotFunctor<IsWhitespace>());  //skip empty lines
+
     return;
 }
 
diff --git a/include/seqan/graph_align/graph_impl_align.h b/include/seqan/graph_align/graph_impl_align.h
index d78aa7d..472f041 100644
--- a/include/seqan/graph_align/graph_impl_align.h
+++ b/include/seqan/graph_align/graph_impl_align.h
@@ -1947,7 +1947,7 @@ heaviestCommonSubsequence(Graph<Alignment<TStringSet, TCargo, TSpec> > const& g,
     // Remember for each vertex descriptor the position in the sequence
     typedef String<TSize> TMapVertexPos;
     TMapVertexPos map;
-    resize(map, getIdUpperBound(_getVertexIdManager(g)), MaxValue<TSize>::VALUE);
+    resize(map, getIdUpperBound(_getVertexIdManager(g)), std::numeric_limits<TSize>::max());
     typedef typename Iterator<TString const, Standard>::Type TStringIterConst;
     typedef typename Iterator<TVertexSet const, Standard>::Type TVertexSetIterConst;
     TStringIterConst itStr1 = begin(str1, Standard());
@@ -1978,7 +1978,7 @@ heaviestCommonSubsequence(Graph<Alignment<TStringSet, TCargo, TSpec> > const& g,
             for(;!atEnd(itOut); ++itOut) {
                 // Target vertex must be in the map
                 pPos = map[targetVertex(itOut)];
-                if (pPos != MaxValue<TSize>::VALUE)
+                if (pPos != std::numeric_limits<TSize>::max())
                     appendValue(occupiedPositions, pPos * n + (TSize) (n - posItStr2 - 1), Generous());
             }
         }
@@ -1989,7 +1989,7 @@ heaviestCommonSubsequence(Graph<Alignment<TStringSet, TCargo, TSpec> > const& g,
     typedef typename Iterator<TSlotToPos, Standard>::Type TSlotToPosIter;
     TSlotToPos slotToPos;
     TSize counter = 0;
-    TSize oldVal = MaxValue<TSize>::VALUE;
+    TSize oldVal = std::numeric_limits<TSize>::max();
     TOccIter occIt = begin(occupiedPositions, Standard());
     TOccIter occItEnd = end(occupiedPositions, Standard());
     for(;occIt != occItEnd; ++occIt) {
@@ -2015,7 +2015,7 @@ heaviestCommonSubsequence(Graph<Alignment<TStringSet, TCargo, TSpec> > const& g,
             for(;!atEnd(itOut); ++itOut) {
                 // Target vertex must be in the map
                 pPos = map[targetVertex(itOut)];
-                if ( pPos != MaxValue<TSize>::VALUE)
+                if ( pPos != std::numeric_limits<TSize>::max())
                     weights[std::distance(begin(slotToPos, Standard()), std::lower_bound(begin(slotToPos, Standard()), end(slotToPos, Standard()), pPos * n + (TSize) (n - posItStr2 - 1)))] += (TCargo) cargo(*itOut);
             }
         }
diff --git a/include/seqan/graph_msa/graph_align_tcoffee_guidetree.h b/include/seqan/graph_msa/graph_align_tcoffee_guidetree.h
index 802205c..f295974 100644
--- a/include/seqan/graph_msa/graph_align_tcoffee_guidetree.h
+++ b/include/seqan/graph_msa/graph_align_tcoffee_guidetree.h
@@ -731,7 +731,7 @@ upgmaTree(Graph<Undirected<TValue, TSpec1> >& pairGraph,
     typedef typename Size<TPairGraph>::Type TSize;
 
     // First initialization
-    TCargo const maxVal = maxValue<TCargo>();
+    TCargo const maxVal = std::numeric_limits<TCargo>::max();
     TSize nseq = numVertices(pairGraph);
     TCargo infCargo = _getInfinity<TCargo>();
     clearVertices(g);
diff --git a/include/seqan/graph_types/graph_interface.h b/include/seqan/graph_types/graph_interface.h
index efb38bf..08da833 100644
--- a/include/seqan/graph_types/graph_interface.h
+++ b/include/seqan/graph_types/graph_interface.h
@@ -652,8 +652,7 @@ template <typename T>
 inline T
 _getInfinity()
 {
-    T * _tag = 0;
-    return supremumValueImpl(_tag);
+    return std::numeric_limits<T>::max();
 }
 
 //////////////////////////////////////////////////////////////////////////////
diff --git a/include/seqan/index/find_backtracking.h b/include/seqan/index/find_backtracking.h
index d95798c..339ff70 100644
--- a/include/seqan/index/find_backtracking.h
+++ b/include/seqan/index/find_backtracking.h
@@ -284,7 +284,7 @@ template <typename TPrefix>
 inline unsigned
 getScore(PrefixAligner_<TPrefix, HammingDistance> const & me, bool atEnd)
 {
-    return atEnd ? me.errors : MaxValue<unsigned>::VALUE;
+    return atEnd ? me.errors : std::numeric_limits<unsigned>::max();
 }
 
 template <typename TPrefix>
diff --git a/include/seqan/index/find_pigeonhole.h b/include/seqan/index/find_pigeonhole.h
index 88e104f..8037826 100644
--- a/include/seqan/index/find_pigeonhole.h
+++ b/include/seqan/index/find_pigeonhole.h
@@ -468,7 +468,7 @@ inline void _patternInit(Pattern<TIndex, Pigeonhole<TSpec> > &pattern, TFloat er
 
         pattern._currentErrorRate = _newErrorRate;
 
-        TSize minDelta = MaxValue<TSize>::VALUE;
+        TSize minDelta = std::numeric_limits<TSize>::max();
         TSize maxDelta = 3;
         TSize maxSeqLen = 0;
         for(unsigned seqNo = 0; seqNo < seqCount; ++seqNo)
@@ -504,7 +504,7 @@ inline void _patternInit(Pattern<TIndex, Pigeonhole<TSpec> > &pattern, TFloat er
             minDelta = pattern.params.delta;
         }
 
-        if (minDelta == MaxValue<TSize>::VALUE)
+        if (minDelta == std::numeric_limits<TSize>::max())
         {
             // disable index
             minDelta = pattern.maxSeqLen + 1;
diff --git a/include/seqan/index/index_base.h b/include/seqan/index/index_base.h
index bb74311..1cb2eb8 100644
--- a/include/seqan/index/index_base.h
+++ b/include/seqan/index/index_base.h
@@ -201,6 +201,7 @@ SEQAN_CONCEPT_REFINE(StringTrieConcept, (TIndex), (StringIndexConcept)) {};
  * @headerfile <seqan/index.h>
  * @brief Default @link String @endlink specialization type of the @link Fibre
  *        @endlink of an @link Index @endlink.
+ * @deprecated Deprecated in favor of StringSpec.
  *
  * @signature DefaultIndexStringSpec<TIndex>::Type;
  *
@@ -217,7 +218,7 @@ SEQAN_CONCEPT_REFINE(StringTrieConcept, (TIndex), (StringIndexConcept)) {};
  */
 
     template <typename TObject>
-    struct DefaultIndexStringSpec : StringSpec<TObject> {};
+    struct [[deprecated("Deprecated in favor of StringSpec.")]] DefaultIndexStringSpec : StringSpec<TObject> {};
 
 
 //////////////////////////////////////////////////////////////////////////////
@@ -1317,13 +1318,13 @@ template <
 
     template <typename TValue>
     inline void _setSizeInval(TValue &v) {
-        v = MaxValue<TValue>::VALUE;
+        v = std::numeric_limits<TValue>::max();
     }
 
     template <typename TValue>
     inline bool _isSizeInval(TValue const &v) {
 //IOREV _notio_
-        return v == MaxValue<TValue>::VALUE;
+        return v == std::numeric_limits<TValue>::max();
     }
 
 //////////////////////////////////////////////////////////////////////////////
diff --git a/include/seqan/index/index_childtab.h b/include/seqan/index/index_childtab.h
index 91e6af0..d42d151 100644
--- a/include/seqan/index/index_childtab.h
+++ b/include/seqan/index/index_childtab.h
@@ -73,7 +73,7 @@ namespace seqan
         stack_updown.push(TPair(0, 0));
         stack_nextl.push(TPair(0, 0));
 
-        dest.undefinedValue = TPair(MaxValue<TSize>::VALUE, 0);        // undefined value for unused entries
+        dest.undefinedValue = TPair(std::numeric_limits<TSize>::max(), 0);        // undefined value for unused entries
         resize(dest, length(lcpIn));
         beginRead(lcpIn);
         beginWrite(dest);
diff --git a/include/seqan/index/index_fm_compressed_sa.h b/include/seqan/index/index_fm_compressed_sa.h
index 784742b..16fbc0c 100644
--- a/include/seqan/index/index_fm_compressed_sa.h
+++ b/include/seqan/index/index_fm_compressed_sa.h
@@ -84,8 +84,8 @@ typedef Tag<FibreSparseString_> const FibreSparseString;
 // ----------------------------------------------------------------------------
 
 template <typename TText, typename TSpec, typename TConfig>
-struct DefaultIndexStringSpec<CompressedSA<TText, TSpec, TConfig> > :
-    DefaultIndexStringSpec<TText> {};
+struct StringSpec<CompressedSA<TText, TSpec, TConfig> > :
+    StringSpec<TText> {};
 
 // ----------------------------------------------------------------------------
 // Metafunction Fibre
@@ -97,7 +97,7 @@ struct Fibre<CompressedSA<TText, TSpec, TConfig>, FibreSparseString>
     // TODO(esiragusa): Change SparseString spec to be SparseString<TValue, TSpec, TConfig>.
     typedef CompressedSA<TText, TSpec, TConfig>         TCSA;
     typedef typename SAValue<TText>::Type               TSAValue_;
-    typedef typename DefaultIndexStringSpec<TCSA>::Type TSASpec_;
+    typedef typename StringSpec<TCSA>::Type TSASpec_;
     typedef String<TSAValue_, TSASpec_>                 TSA_;
     typedef SparseString<TSA_, TConfig>                 Type;
 };
@@ -305,7 +305,7 @@ void createCompressedSa(CompressedSA<TText, TSpec, TConfig> & compressedSA, TSA
 
     for (TSASize pos = offset; saIt != saItEnd; ++saIt, ++pos)
     {
-        if (getSeqOffset(getValue(saIt)) % TConfig::SAMPLING == 0)
+        if (getSeqOffset(*saIt) % TConfig::SAMPLING == 0)
             setValue(indicators, pos, true);
         else
             setValue(indicators, pos, false);
@@ -319,7 +319,7 @@ void createCompressedSa(CompressedSA<TText, TSpec, TConfig> & compressedSA, TSA
     {
         if (getValue(indicators, pos))
         {
-            assignValue(values, counter, getValue(saIt));
+            assignValue(values, counter, *saIt);
             ++counter;
         }
     }
diff --git a/include/seqan/index/index_fm_lf_table.h b/include/seqan/index/index_fm_lf_table.h
index 1ee81ef..8da0a12 100644
--- a/include/seqan/index/index_fm_lf_table.h
+++ b/include/seqan/index/index_fm_lf_table.h
@@ -125,7 +125,7 @@ struct Fibre<LF<TText, TSpec, TConfig>, FibrePrefixSums>
 //    typedef Tuple<TSize_, ValueSize<TValue_>::VALUE>          Type;
 
     typedef typename Size<LF<TText, TSpec, TConfig> >::Type TSize_;
-    typedef typename DefaultIndexStringSpec<TText>::Type    TSpec_;
+    typedef typename StringSpec<TText>::Type                TSpec_;
     typedef String<TSize_,  TSpec_>                         Type;
 };
 
@@ -537,7 +537,7 @@ _setSentinelSubstitute(LF<TText, TSpec, TConfig> & lf)
     typedef typename Value<TPrefixSums>::Type           TValue;
     typedef typename Size<TPrefixSums>::Type            TSize;
 
-    TValue minOcc = MaxValue<TValue>::VALUE;
+    TValue minOcc = std::numeric_limits<TValue>::max();
     TSize ordVal = 0;
 
     for (TSize i = 0; i < length(lf.sums) - 1; ++i)
@@ -577,20 +577,20 @@ _createBwt(LF<TText, TSpec, TConfig> & lf, TBwt & bwt, TOtherText const & text,
     TSAIter saItEnd = end(sa, Standard());
     TBwtIter bwtIt = begin(bwt, Standard());
 
-    assignValue(bwtIt, back(text));
+    *bwtIt = back(text);
     ++bwtIt;
 
     for (; saIt != saItEnd; ++saIt, ++bwtIt)
     {
-        TSAValue pos = getValue(saIt);
+        TSAValue pos = *saIt;
 
         if (pos != 0)
         {
-            assignValue(bwtIt, getValue(text, pos - 1));
+            *bwtIt = getValue(text, pos - 1);
         }
         else
         {
-            assignValue(bwtIt, lf.sentinelSubstitute);
+            *bwtIt = lf.sentinelSubstitute;
             lf.sentinels = bwtIt - begin(bwt, Standard());
         }
     }
@@ -625,7 +625,7 @@ _createBwt(LF<StringSet<TText, TSSetSpec>, TSpec, TConfig> & lf, TBwt & bwt, TOt
     {
         if (length(text[seqNum - i]) > 0)
         {
-            assignValue(bwtIt, back(text[seqNum - i]));
+            *bwtIt = back(text[seqNum - i]);
             setValue(lf.sentinels, bwtIt - bwtItBeg, false);
         }
     }
@@ -634,16 +634,16 @@ _createBwt(LF<StringSet<TText, TSSetSpec>, TSpec, TConfig> & lf, TBwt & bwt, TOt
     for (; saIt != saItEnd; ++saIt, ++bwtIt)
     {
         TSAValue pos;    // = SA[i];
-        posLocalize(pos, getValue(saIt), stringSetLimits(text));
+        posLocalize(pos, *saIt, stringSetLimits(text));
 
         if (getSeqOffset(pos) != 0)
         {
-            assignValue(bwtIt, getValue(getValue(text, getSeqNo(pos)), getSeqOffset(pos) - 1));
+            *bwtIt = getValue(getValue(text, getSeqNo(pos)), getSeqOffset(pos) - 1);
             setValue(lf.sentinels, bwtIt - bwtItBeg, false);
         }
         else
         {
-            assignValue(bwtIt, lf.sentinelSubstitute);
+            *bwtIt = lf.sentinelSubstitute;
             setValue(lf.sentinels, bwtIt - bwtItBeg, true);
         }
     }
diff --git a/include/seqan/index/index_fm_rank_dictionary_base.h b/include/seqan/index/index_fm_rank_dictionary_base.h
index fd6b5a2..6d8a5ba 100644
--- a/include/seqan/index/index_fm_rank_dictionary_base.h
+++ b/include/seqan/index/index_fm_rank_dictionary_base.h
@@ -121,7 +121,7 @@ struct RankDictionary;
 // ----------------------------------------------------------------------------
 
 template <typename TValue, template <typename, typename> class TRankDictionary, typename TSpec, typename TConfig>
-struct DefaultIndexStringSpec<RankDictionary<TValue, TRankDictionary<TSpec, TConfig> > >
+struct StringSpec<RankDictionary<TValue, TRankDictionary<TSpec, TConfig> > >
 {
     typedef typename TConfig::Fibre Type;
 };
@@ -255,7 +255,7 @@ createRankDictionary(RankDictionary<TValue, TSpec> & dict, TText const & text)
     TTextIterator textBegin = begin(text, Standard());
     TTextIterator textEnd = end(text, Standard());
     for (TTextIterator textIt = textBegin; textIt != textEnd; ++textIt)
-        setValue(dict, textIt - textBegin, value(textIt));
+        setValue(dict, textIt - textBegin, *textIt);
 
     // Update all ranks.
     updateRanks(dict);
diff --git a/include/seqan/index/index_fm_rank_dictionary_levels.h b/include/seqan/index/index_fm_rank_dictionary_levels.h
index 2eeeadd..8b0a446 100644
--- a/include/seqan/index/index_fm_rank_dictionary_levels.h
+++ b/include/seqan/index/index_fm_rank_dictionary_levels.h
@@ -354,7 +354,7 @@ struct Fibre<RankDictionary<TValue, Levels<TSpec, TConfig> >, FibreRanks>
 {
     typedef RankDictionary<TValue, Levels<TSpec, TConfig> >         TRankDictionary_;
     typedef RankDictionaryEntry_<TValue, Levels<TSpec, TConfig> >   TEntry_;
-    typedef typename DefaultIndexStringSpec<TRankDictionary_>::Type TFibreSpec_;
+    typedef typename StringSpec<TRankDictionary_>::Type             TFibreSpec_;
 
     typedef String<TEntry_, TFibreSpec_>                            Type;
 };
@@ -364,7 +364,7 @@ struct Fibre<RankDictionary<TValue, Levels<TSpec, TConfig> >, FibreSuperBlocks>
 {
     typedef RankDictionary<TValue, Levels<TSpec, TConfig> >                             TRankDictionary_;
     typedef typename RankDictionarySuperBlock_<TValue, Levels<TSpec, TConfig> >::Type   TSuperBlocks_;
-    typedef typename DefaultIndexStringSpec<TRankDictionary_>::Type                     TFibreSpec_;
+    typedef typename StringSpec<TRankDictionary_>::Type                                 TFibreSpec_;
 
     typedef String<TSuperBlocks_, TFibreSpec_>                                          Type;
 };
@@ -374,7 +374,7 @@ struct Fibre<RankDictionary<TValue, Levels<TSpec, TConfig> >, FibreUltraBlocks>
 {
     typedef RankDictionary<TValue, Levels<TSpec, TConfig> >                             TRankDictionary_;
     typedef typename RankDictionaryUltraBlock_<TValue, Levels<TSpec, TConfig> >::Type   TUltraBlocks_;
-    typedef typename DefaultIndexStringSpec<TRankDictionary_>::Type                     TFibreSpec_;
+    typedef typename StringSpec<TRankDictionary_>::Type                                 TFibreSpec_;
 
     typedef String<TUltraBlocks_, TFibreSpec_>                                          Type;
 };
diff --git a/include/seqan/index/index_fm_rank_dictionary_naive.h b/include/seqan/index/index_fm_rank_dictionary_naive.h
index dcd9ab0..1884c2e 100644
--- a/include/seqan/index/index_fm_rank_dictionary_naive.h
+++ b/include/seqan/index/index_fm_rank_dictionary_naive.h
@@ -61,7 +61,7 @@ struct Fibre<RankDictionary<TValue, Naive<TSpec, TConfig> >, FibreRanks>
 {
     typedef RankDictionary<TValue, Naive<TSpec, TConfig> >          TRankDictionary_;
     typedef typename Size<TRankDictionary_>::Type                   TSize_;
-    typedef typename DefaultIndexStringSpec<TRankDictionary_>::Type TFibreSpec_;
+    typedef typename StringSpec<TRankDictionary_>::Type TFibreSpec_;
 
     typedef String<TSize_, TFibreSpec_>                             Type;
 };
diff --git a/include/seqan/index/index_fm_rank_dictionary_wt.h b/include/seqan/index/index_fm_rank_dictionary_wt.h
index 3c75e16..1e4d214 100644
--- a/include/seqan/index/index_fm_rank_dictionary_wt.h
+++ b/include/seqan/index/index_fm_rank_dictionary_wt.h
@@ -375,7 +375,7 @@ inline void _fillStructure(RankDictionary<TValue, WaveletTree<TSpec, TConfig> >
         while (true)
         {
             // decide whether the character is smaller then the pivot element of the current node
-            if (ordGreater(getCharacter(it), value(textIt)))
+            if (ordGreater(getCharacter(it), *textIt))
             {
                 // TODO(esiragusa): use resize() & setValue() instead of appendValue().
                 appendValue(dict.ranks[getPosition(it)], false);
diff --git a/include/seqan/index/index_pizzachili.h b/include/seqan/index/index_pizzachili.h
index 9d5d2e1..53b831b 100644
--- a/include/seqan/index/index_pizzachili.h
+++ b/include/seqan/index/index_pizzachili.h
@@ -274,6 +274,7 @@ indexSolveDependencies(Index<TText, PizzaChili<TSpec> >& me, PizzaChiliCompresse
 
 namespace impl {
     template <typename TText, typename TSpec>
+    [[deprecated("The PizzaChiliIndex is outdated and is not maintained anymore.")]]
     inline bool
     createPizzaChiliIndex(
         Index<TText, PizzaChili<TSpec> >& me,
@@ -301,6 +302,7 @@ namespace impl {
 } // namespace impl
 
 template <typename TText, typename TSpec>
+[[deprecated("The PizzaChiliIndex is outdated and is not maintained anymore.")]]
 inline bool
 indexCreate(Index<TText, PizzaChili<TSpec> >& me, PizzaChiliCompressed const) {
     typedef
@@ -351,6 +353,7 @@ setIndexText(Index<TText, PizzaChili<TSpec> >& me, TOtherText& text) {
 //////////////////////////////////////////////////////////////////////////////
 
 template <typename TText, typename TSpec>
+[[deprecated("The PizzaChiliIndex is outdated and is not maintained anymore.")]]
 inline bool open(
     Index<TText, PizzaChili<TSpec> >& me,
     char const* filename
@@ -368,6 +371,7 @@ inline bool open(
 }
 
 template <typename TText, typename TSpec>
+[[deprecated("The PizzaChiliIndex is outdated and is not maintained anymore.")]]
 inline bool save(
     Index<TText, PizzaChili<TSpec> >& me,
     char const* filename
diff --git a/include/seqan/index/index_qgram.h b/include/seqan/index/index_qgram.h
index 670ddca..90ba86f 100644
--- a/include/seqan/index/index_qgram.h
+++ b/include/seqan/index/index_qgram.h
@@ -343,7 +343,7 @@ struct Fibre< Index<TText, TSpec>, FibreCounts> {
     typename Size< TText >::Type,
     typename Size< Index<TText, TSpec> >::Type
     >,
-    typename DefaultIndexStringSpec< Index<TText, TSpec> >::Type
+    typename StringSpec< Index<TText, TSpec> >::Type
     > Type;
 };
 
@@ -1395,8 +1395,9 @@ void createQGramIndex(TIndex &index)
     _qgramRefineSuffixArray(sa, text, shape, dir);
 }
 
-// DEPRECATED
-// better use createQGramIndex(index) (above)
+// DEPRECATED: Use createQGramIndex(index) instead. (above)
+// NOTE: This function is currently still used in the app search join (status 25.10.2016) so the deprecation macro
+// can't be used yet. As soon as the app is altered accordingly the macro shall be applied.
 template <
 typename TSA,
 typename TDir,
@@ -1404,6 +1405,7 @@ typename TBucketMap,
 typename TText,
 typename TShape,
 typename TStepSize >
+/*[[deprecated("Use createQGramIndex(index) instead.")]]*/
 void createQGramIndex(
                       TSA &sa,
                       TDir &dir,
@@ -1428,8 +1430,9 @@ void createQGramIndex(
     _qgramFillSuffixArray(sa, text, shape, dir, bucketMap, stepSize, False());
 }
 
-// DEPRECATED
-// better use createQGramIndex(index) (above)
+// DEPRECATED: Use createQGramIndex(index) instead.
+// NOTE: This function is currently still used in the app search join (status 25.10.2016) so the deprecation macro
+// can't be used yet. As soon as the app is altered accordingly the macro shall be applied.
 template <
 typename TSA,
 typename TDir,
@@ -1437,6 +1440,7 @@ typename TBucketMap,
 typename TText,
 typename TShape,
 typename TStepSize >
+/*[[deprecated("Use createQGramIndex(index) instead.")]]*/
 void createQGramIndex(
                       TSA &sa,
                       TDir &dir,
diff --git a/include/seqan/index/index_sa_bwtwalk.h b/include/seqan/index/index_sa_bwtwalk.h
index 68267f4..3da5acb 100644
--- a/include/seqan/index/index_sa_bwtwalk.h
+++ b/include/seqan/index/index_sa_bwtwalk.h
@@ -64,7 +64,7 @@ namespace seqan
     // Public function
     // NOTE: This function uses the supremum value of Value<TSA>::Type as NIL symbol
     //       for temporary calculations. Therefore, the caller must ensure that
-    //       length(s) < MaxValue<TValue>::VALUE. Otherwise, behaviour is undefined!
+    //       length(s) < std::numeric_limits<TValue>::max(). Otherwise, behaviour is undefined!
     template < typename TSA, typename TText, typename TSpec >
     inline void createSuffixArray(
         TSA &SA,
@@ -89,7 +89,7 @@ namespace seqan
     {
         value(lexprevpos, p) = predecessor;
         value(lexnextpos, p) = successor;
-        const TValue NIL = MaxValue<TValue>::VALUE;
+        const TValue NIL = std::numeric_limits<TValue>::max();
         if (predecessor != NIL) value(lexnextpos, predecessor) = p;
         if (successor != NIL) value(lexprevpos, successor) = p;
     }
@@ -124,7 +124,7 @@ namespace seqan
         TValue predecessor,
         TValue successor)
     {
-        const TValue NIL = MaxValue<TValue>::VALUE;
+        const TValue NIL = std::numeric_limits<TValue>::max();
         value(lexxorpos, p) = predecessor ^ successor;
         if (predecessor != NIL) value(lexxorpos, predecessor) = getValue(lexxorpos, predecessor) ^ successor ^ p;
         if (successor != NIL) value(lexxorpos, successor) = getValue(lexxorpos, successor) ^ predecessor ^ p;
@@ -140,7 +140,7 @@ namespace seqan
     {
         typedef typename Value<TSA>::Type TValue;
         typedef typename Iterator<TSA, Standard>::Type TSaIter;
-        const TValue NIL = MaxValue<TValue>::VALUE;
+        const TValue NIL = std::numeric_limits<TValue>::max();
 
         if (empty(s)) return;
 
@@ -174,7 +174,7 @@ namespace seqan
     {
         typedef typename Value<TSA>::Type TValue;
         typedef typename Iterator<TSA, Standard>::Type TSaIter;
-        const TValue NIL = MaxValue<TValue>::VALUE;
+        const TValue NIL = std::numeric_limits<TValue>::max();
         typedef String<TValue> TArray;
 
         if (empty(s)) return;
@@ -208,7 +208,7 @@ namespace seqan
     {
         typedef typename Value<TSA>::Type TValue;
         typedef typename Iterator<TSA, Standard>::Type TSaIter;
-        const TValue NIL = MaxValue<TValue>::VALUE;
+        const TValue NIL = std::numeric_limits<TValue>::max();
         typedef String<TValue> TArray;
 
         if (empty(s)) return;
@@ -380,7 +380,7 @@ namespace seqan
         True const &)
     {
         typedef typename Value<TSA>::Type TValue;
-        const TValue NIL = MaxValue<TValue>::VALUE;
+        const TValue NIL = std::numeric_limits<TValue>::max();
 
         const TValue FLAGBIT = (TValue)1 << (BitsPerValue<TValue>::VALUE-1);
         const TValue NOTFLAGBIT = ~FLAGBIT;
@@ -408,7 +408,7 @@ namespace seqan
         TValue &pPlus,
         unsigned int cOrd)
     {
-        const TValue NIL = MaxValue<TValue>::VALUE;
+        const TValue NIL = std::numeric_limits<TValue>::max();
 
         // current char does not exist
         // first find pMinus ...
@@ -444,7 +444,7 @@ namespace seqan
 
         typedef typename Value<const TText>::Type TChar;
         const unsigned int ALPHABETSIZE = ValueSize<TChar>::VALUE;
-        const TValue NIL = MaxValue<TValue>::VALUE;
+        const TValue NIL = std::numeric_limits<TValue>::max();
         typedef String<TValue, Array<ALPHABETSIZE> > TAlphabetArray;
 
         TAlphabetArray lexfirstpos, lexlastpos;
@@ -539,7 +539,7 @@ namespace seqan
 
         typedef typename Value<const TText>::Type TChar;
         const unsigned int ALPHABETSIZE = ValueSize<TChar>::VALUE;
-        const TValue NIL = MaxValue<TValue>::VALUE;
+        const TValue NIL = std::numeric_limits<TValue>::max();
         typedef String<TValue, Array<ALPHABETSIZE> > TAlphabetArray;
 
         TAlphabetArray lexfirstpos;
diff --git a/include/seqan/index/index_sa_lss.h b/include/seqan/index/index_sa_lss.h
index 312c96c..8c73cac 100644
--- a/include/seqan/index/index_sa_lss.h
+++ b/include/seqan/index/index_sa_lss.h
@@ -256,7 +256,7 @@ struct ContextLss_
 
        for (s=0, i=k-l; i; i>>=1)
           ++s;                      /* s is number of bits in old symbol.*/
-       e=MaxValue<TValue>::VALUE>>s; /* e is for overflow checking.*/
+       e=std::numeric_limits<TValue>::max()>>s; /* e is for overflow checking.*/
        for (b=d=r=0; r<n && d<=e && (c=d<<s|(k-l))<=q; ++r) {
           b=b<<s|(x[r]-l+1);        /* b is start of x in chunk alphabet.*/
           d=c;                      /* d is max symbol in chunk alphabet.*/
@@ -317,7 +317,7 @@ struct ContextLss_
           j=transform(V, I, n, k, l, n);
           bucketsort(V, I, n, j);   /* bucketsort on first r positions.*/
        } else {
-          transform(V, I, n, k, l, MaxValue<TValue>::VALUE);
+          transform(V, I, n, k, l, std::numeric_limits<TValue>::max());
           for (i=0; i<=n; ++i)
              I[i]=i;                /* initialize I with suffix numbers.*/
           h=0;
diff --git a/include/seqan/index/index_sa_truncated.h b/include/seqan/index/index_sa_truncated.h
index 79cc98b..07fde62 100644
--- a/include/seqan/index/index_sa_truncated.h
+++ b/include/seqan/index/index_sa_truncated.h
@@ -68,22 +68,22 @@ public:
 
     Iter() :
         TBase(),
-        depth(MaxValue<TDepth>::VALUE)
+        depth(std::numeric_limits<TDepth>::max())
     {}
 
     Iter(TIndex &_index) :
         TBase(_index),
-        depth(MaxValue<TDepth>::VALUE)
+        depth(std::numeric_limits<TDepth>::max())
     {}
 
     Iter(TIndex &_index, MinimalCtor) :
         TBase(_index, MinimalCtor()),
-        depth(MaxValue<TDepth>::VALUE)
+        depth(std::numeric_limits<TDepth>::max())
     {}
 
     Iter(TIndex &_index, TVertexDesc const &_vDesc) :
         TBase(_index, _vDesc),
-        depth(MaxValue<TDepth>::VALUE)
+        depth(std::numeric_limits<TDepth>::max())
     {}
 
     Iter(Iter const &_origin):
diff --git a/include/seqan/index/index_wotd.h b/include/seqan/index/index_wotd.h
index a4f6c15..c1afc47 100644
--- a/include/seqan/index/index_wotd.h
+++ b/include/seqan/index/index_wotd.h
@@ -977,7 +977,7 @@ SEQAN_CONCEPT_IMPL((Index<TText, IndexWotd<TSpec> > const), (StringTreeConcept))
         TTextIterator itText = begin(text, Standard());
         TTextIterator itTextEnd = end(text, Standard());
         for (; itText != itTextEnd; ++itText)
-            ++buckets[ordValue(getValue(itText))];
+            ++buckets[ordValue(*itText)];
     }
 
 
@@ -993,7 +993,7 @@ SEQAN_CONCEPT_IMPL((Index<TText, IndexWotd<TSpec> > const), (StringTreeConcept))
             TTextIterator itText = begin(text, Standard());
             TTextIterator itTextEnd = end(text, Standard());
             for (; itText != itTextEnd; ++itText)
-                ++buckets[ordValue(getValue(itText))];
+                ++buckets[ordValue(*itText)];
         }
     }
 
@@ -1196,7 +1196,7 @@ SEQAN_CONCEPT_IMPL((Index<TText, IndexWotd<TSpec> > const), (StringTreeConcept))
             TTextIterator itText = begin(text, Standard());
             TTextIterator itTextEnd = end(text, Standard());
             for(TSize i = 0; itText != itTextEnd; ++itText, ++i)
-                *(saBeg + (*(boundBeg + ordValue(getValue(itText))))++) = i;
+                *(saBeg + (*(boundBeg + ordValue(*itText)))++) = i;
         }
         index.sentinelOcc = 0;
         index.sentinelBound = 0;
@@ -1247,7 +1247,7 @@ SEQAN_CONCEPT_IMPL((Index<TText, IndexWotd<TSpec> > const), (StringTreeConcept))
             TTextIterator itTextEnd = end(text, Standard());
             for(; itText != itTextEnd; ++itText)
             {
-                *(saBeg + (*(boundBeg + ordValue(getValue(itText))))++) = localPos;
+                *(saBeg + (*(boundBeg + ordValue(*itText)))++) = localPos;
                 assignValueI2(localPos, getValueI2(localPos) + 1);
             }
         }
diff --git a/include/seqan/index/shape_threshold.h b/include/seqan/index/shape_threshold.h
index d4ab53d..d97a41b 100644
--- a/include/seqan/index/shape_threshold.h
+++ b/include/seqan/index/shape_threshold.h
@@ -841,7 +841,7 @@ void computeExactQGramThreshold(
     // columns n-1 and n for recursion
     TMatrixCol col0;    // addressing is colx[errors * statesCount + state]
     TMatrixCol col1;
-    const TThresh infty = MaxValue<TThresh>::VALUE >> 1;
+    const TThresh infty = std::numeric_limits<TThresh>::max() >> 1;
 
     resize(col0, maxErrors * statesCount, infty);
     resize(col1, maxErrors * statesCount);
diff --git a/include/seqan/journaled_string_tree/delta_map.h b/include/seqan/journaled_string_tree/delta_map.h
index fa241fa..c41f986 100644
--- a/include/seqan/journaled_string_tree/delta_map.h
+++ b/include/seqan/journaled_string_tree/delta_map.h
@@ -1049,7 +1049,7 @@ template <typename TConfig, typename TSpec>
 constexpr typename Size<DeltaMap<TConfig, TSpec> >::Type
 maxSize(DeltaMap<TConfig, TSpec> const & /*deltaMap*/)
 {
-    return MaxValue<typename Size<DeltaMap<TConfig, TSpec> >::Type>::VALUE;
+    return std::numeric_limits<typename Size<DeltaMap<TConfig, TSpec> >::Type>::max();
 }
 
 }
diff --git a/include/seqan/journaled_string_tree/delta_map_iterator.h b/include/seqan/journaled_string_tree/delta_map_iterator.h
index 915c493..cefa4ff 100644
--- a/include/seqan/journaled_string_tree/delta_map_iterator.h
+++ b/include/seqan/journaled_string_tree/delta_map_iterator.h
@@ -200,14 +200,14 @@ inline typename DeltaValue<typename Container<Iter<TDeltaMap, DeltaMapIteratorSp
 deltaValue(Iter<TDeltaMap, DeltaMapIteratorSpec> & iter, TTag const & tag)
 {
     SEQAN_ASSERT(isDeltaType(deltaType(iter), TTag()));
-    return deltaValue(container(iter)._deltaStore, getDeltaRecord(value(iter)).i2, tag);
+    return deltaValue(container(iter)._deltaStore, getDeltaRecord(*iter).i2, tag);
 }
 
 template <typename TDeltaMap, typename TTag>
 inline typename DeltaValue<typename Container<Iter<TDeltaMap, DeltaMapIteratorSpec> const>::Type, TTag>::Type &
 deltaValue(Iter<TDeltaMap, DeltaMapIteratorSpec> const & iter, TTag const & tag)
 {
-    return deltaValue(container(iter)._deltaStore, getDeltaRecord(value(iter)).i2, tag);
+    return deltaValue(container(iter)._deltaStore, getDeltaRecord(*iter).i2, tag);
 }
 
 namespace impl
diff --git a/include/seqan/journaled_string_tree/journaled_string_tree_traverser_util.h b/include/seqan/journaled_string_tree/journaled_string_tree_traverser_util.h
index 6e00357..ba32ac8 100644
--- a/include/seqan/journaled_string_tree/journaled_string_tree_traverser_util.h
+++ b/include/seqan/journaled_string_tree/journaled_string_tree_traverser_util.h
@@ -375,11 +375,11 @@ mapBranchPointToVirtual(TIterator & resultIt,
     if (it->segmentSource == SOURCE_PATCH)  // The iterator has to be at the beginning.
     {
         TVarIterator itVar = begin(variantStore, Standard());  // TODO(rrahn): Optimize!
-        SEQAN_ASSERT_LEQ(getDeltaPosition(*itVar), static_cast<TDeltaMapPos const>(hostPos));
+        SEQAN_ASSERT_LEQ(getDeltaPosition(*itVar), static_cast<TDeltaMapPos>(hostPos));
 
         TDeltaMapPos virtualOffset = 0;
         // Now we move to the right until we find the node that we are looking for and reconstruct the offset of the virtual positions.
-        while(getDeltaPosition(*itVar) != static_cast<TDeltaMapPos const>(hostPos) && !atEnd(itVar, variantStore))
+        while(getDeltaPosition(*itVar) != static_cast<TDeltaMapPos>(hostPos) && !atEnd(itVar, variantStore))
         {
             if (getDeltaCoverage(*itVar)[proxyId] != true)  // irrelevant variant.
             {
@@ -403,7 +403,7 @@ mapBranchPointToVirtual(TIterator & resultIt,
 
     // We assume that the operation begins here!
     resultIt._journalEntriesIterator = it;
-    if (it->physicalOriginPosition + it->length > static_cast<TDeltaMapPos const>(hostPos))
+    if (it->physicalOriginPosition + it->length > static_cast<TDeltaMapPos>(hostPos))
     {
         _updateSegmentIterators(resultIt);
         if (it->physicalOriginPosition < hostPos)
@@ -412,7 +412,7 @@ mapBranchPointToVirtual(TIterator & resultIt,
     }
 
     _updateSegmentIteratorsLeft(resultIt);  // Set the iterator to the end of the current original node.
-    if (_physicalPosition(resultIt) + 1 == static_cast<TDeltaMapPos const>(hostPos))
+    if (_physicalPosition(resultIt) + 1 == static_cast<TDeltaMapPos>(hostPos))
     {
         ++resultIt;
         return;
@@ -426,10 +426,10 @@ mapBranchPointToVirtual(TIterator & resultIt,
     f.iter = std::upper_bound(begin(variantStore, Standard()), end(variantStore, Standard()), child,
                               DeltaMapEntryPosLessThanComparator_());
 
-    SEQAN_ASSERT_LEQ(getDeltaPosition(*f.iter), static_cast<TDeltaMapPos const>(hostPos));
+    SEQAN_ASSERT_LEQ(getDeltaPosition(*f.iter), static_cast<TDeltaMapPos>(hostPos));
 
     // Now we move to the right until we find the node that we are looking for and reconstruct the offset of the virtual positions.
-    while (getDeltaPosition(*f.iter) != static_cast<TDeltaMapPos const>(hostPos) && !atEnd(f.iter))
+    while (getDeltaPosition(*f.iter) != static_cast<TDeltaMapPos>(hostPos) && !atEnd(f.iter))
     {
         if (getDeltaCoverage(*f.iter)[proxyId] != true || isRightEnd(*f.iter))  // irrelevant variant.
         {
diff --git a/include/seqan/math/math_rational.h b/include/seqan/math/math_rational.h
index 23a77ad..f334cf8 100644
--- a/include/seqan/math/math_rational.h
+++ b/include/seqan/math/math_rational.h
@@ -90,7 +90,7 @@ public:
     Rational() : num(0), den(1) {}
 
     template <typename T>
-    Rational(T const & n, SEQAN_CTOR_ENABLE_IF( IsInteger<T> ) ) : num(n), den(1) { (void)dummy; }
+    Rational(T const & n, SEQAN_CTOR_ENABLE_IF( Is<IntegerConcept<T> > ) ) : num(n), den(1) { (void)dummy; }
     Rational(param_type n, param_type d) : num(n), den(d) { normalize(); }
 
     // Default copy constructor and assignment are fine
@@ -503,8 +503,8 @@ std::istream& operator>> (std::istream& is, Rational<TInt>& r)
         c = is.get();
         // read digits as long we can store them
         while ('0' <= c && c <= '9' &&
-                (n < (TInt)MaxValue<TInt>::VALUE / (TInt)10 - (TInt)9) &&
-                (d < (TInt)MaxValue<TInt>::VALUE / (TInt)10))
+                (n < (TInt)std::numeric_limits<TInt>::max() / (TInt)10 - (TInt)9) &&
+                (d < (TInt)std::numeric_limits<TInt>::max() / (TInt)10))
         {
             n = 10 * n + (c - '0');
             d *= 10;
diff --git a/include/seqan/misc/interval_tree.h b/include/seqan/misc/interval_tree.h
index 455f60c..560d199 100644
--- a/include/seqan/misc/interval_tree.h
+++ b/include/seqan/misc/interval_tree.h
@@ -1032,10 +1032,10 @@ _createIntervalTree(TGraph & g, TPropertyMap & pm,
     // one list of interval pointers for the intervals to the right of center
     TIntervalPointers S_right;
 
-    TValue min1 = maxValue<TValue>();
-    TValue min2 = maxValue<TValue>();
-    TValue max1 = minValue<TValue>();
-    TValue max2 = minValue<TValue>();
+    TValue min1 = std::numeric_limits<TValue>::max();
+    TValue min2 = std::numeric_limits<TValue>::max();
+    TValue max1 = std::numeric_limits<TValue>::min();
+    TValue max2 = std::numeric_limits<TValue>::min();
 
     value(pm, knot).center = center;
 
@@ -1212,8 +1212,8 @@ _calcIntervalTreeRootCenter(TIntervals & intervals)
     TIntervalIterator it = begin(intervals);
     TIntervalIterator it_end = end(intervals);
 
-    TValue min = maxValue<TValue>();
-    TValue max = minValue<TValue>();
+    TValue min = std::numeric_limits<TValue>::max();
+    TValue max = std::numeric_limits<TValue>::min();
 
     // get min and max
     while (it != it_end)
diff --git a/include/seqan/misc/name_store_cache.h b/include/seqan/misc/name_store_cache.h
index 29fe408..1969b34 100644
--- a/include/seqan/misc/name_store_cache.h
+++ b/include/seqan/misc/name_store_cache.h
@@ -71,15 +71,15 @@ struct NameStoreLess_
     template <typename TId>
     inline bool operator() (TId a, TId b) const
     {
-        if (a != maxValue(a))
+        if (a != std::numeric_limits<TId>::max())
         {
-            if (b != maxValue(b))
+            if (b != std::numeric_limits<TId>::max())
                 return (*nameStore)[a] < (*nameStore)[b];
             else
                 return (*nameStore)[a] < *name;
         } else
         {
-            if (b != maxValue(b))
+            if (b != std::numeric_limits<TId>::max())
                 return *name < (*nameStore)[b];
             else
                 return false;
@@ -293,22 +293,19 @@ void appendName(NameStoreCache<TCNameStore, TCName> & cache, TName const & name)
     cache.nameSet.insert(length(host(cache)) - 1);
 }
 
-// TODO(holtgrew): Add deprecation annotation for compiler warnings.
-
-// deprecated.
 // In the future we want to use only one argument either nameStore or nameStoreCache (has a reference to the nameStore)
 template <typename TNameStore, typename TName, typename TContext>
+[[deprecated("Use appendName(cache, name) instead.")]]
 void appendName(TNameStore &nameStore, TName const & name, TContext &)
 {
     appendName(nameStore, name);
 }
 
-// deprecated.
 template <typename TNameStore, typename TName, typename TCNameStore, typename TCName>
-void appendName(TNameStore &nameStore, TName const & name, NameStoreCache<TCNameStore, TCName> &context)
+[[deprecated("Use appendName(cache, name) instead. (nameStoreCache has a reference to the nameStore)")]]
+void appendName(TNameStore & /*nameStore*/, TName const & name, NameStoreCache<TCNameStore, TCName> &context)
 {
-    appendValue(nameStore, name, Generous());
-    context.nameSet.insert(length(nameStore) - 1);
+    appendName(context, name);
 }
 
 // ----------------------------------------------------------------------------
@@ -338,7 +335,7 @@ bool getIdByName(TPos & pos, TNameStore const & nameStore, TName const & name)
     for (TNameStoreIter iter = begin(nameStore, Standard()); iter != end(nameStore, Standard()); ++iter)
     {
         // if the element was found
-        if (name == getValue(iter))
+        if (name == *iter)
         {
             // set the ID
             pos = iter - begin(nameStore, Standard());
@@ -368,7 +365,7 @@ getIdByName(TPos & pos, NameStoreCache<TCNameStore, TCName> const & context, TNa
     {
 
         context.name = name;
-        it = set.find(maxValue<TId>());
+        it = set.find(std::numeric_limits<TId>::max());
     }
 
     if (it != set.end())
@@ -379,16 +376,16 @@ getIdByName(TPos & pos, NameStoreCache<TCNameStore, TCName> const & context, TNa
     return false;
 }
 
-// deprecated.
 template <typename TNameStore, typename TName, typename TPos, typename TContext>
+[[deprecated("Use getIdByName(idx, cache, name) instead.")]]
 inline bool
 getIdByName(TNameStore const & nameStore, TName const & name, TPos & pos, TContext const & /*not a cache*/)
 {
     return getIdByName(pos, nameStore, name);
 }
 
-// deprecated.
 template<typename TNameStore, typename TName, typename TPos, typename TCNameStore, typename TCName>
+[[deprecated("Use getIdByName(idx, cache, name) instead.")]]
 inline bool
 getIdByName(TNameStore const & /*nameStore*/, TName const & name, TPos & pos, NameStoreCache<TCNameStore, TCName> const & context)
 {
diff --git a/include/seqan/modifier/modifier_padding.h b/include/seqan/modifier/modifier_padding.h
index b02dbb7..83bb805 100644
--- a/include/seqan/modifier/modifier_padding.h
+++ b/include/seqan/modifier/modifier_padding.h
@@ -169,12 +169,24 @@ struct DefaultIteratorSpec< ModifiedString<THost, ModPadding> >
  * @datarace Not thread-safe.
  */
 
+template <typename T>
+bool _isValid(T* value)
+{
+    return value != nullptr;
+}
+
+template <typename T>
+bool _isValid(T const &)
+{
+    return true;
+}
+
 template <typename THost, typename TSize, typename TPadding>
 inline void expand(ModifiedString<THost, ModPadding> & me,
                    TSize const newSize,
                    TPadding const & _padding)
 {
-    SEQAN_ASSERT(me._host != nullptr);
+    SEQAN_ASSERT(_isValid(me._host));
 
     cargo(me)._numPaddedChar = newSize;
     cargo(me)._paddedValue = _padding;
diff --git a/include/seqan/modifier/modifier_view.h b/include/seqan/modifier/modifier_view.h
index 5637708..7631b36 100644
--- a/include/seqan/modifier/modifier_view.h
+++ b/include/seqan/modifier/modifier_view.h
@@ -321,14 +321,14 @@ template <typename THost, typename TFunctor>
 inline typename GetValue<ModifiedIterator<THost, ModView<TFunctor> > >::Type
 getValue(ModifiedIterator<THost, ModView<TFunctor> > & me)
 {
-    return cargo(me).func(getValue(host(me)));
+    return cargo(me).func(*host(me));
 }
 
 template <typename THost, typename TFunctor>
 inline typename GetValue<ModifiedIterator<THost, ModView<TFunctor> > const>::Type
 getValue(ModifiedIterator<THost, ModView<TFunctor> > const & me)
 {
-    return cargo(me).func(getValue(host(me)));
+    return cargo(me).func(*host(me));
 }
 
 // --------------------------------------------------------------------------
diff --git a/include/seqan/parse_lm/local_match_store.h b/include/seqan/parse_lm/local_match_store.h
index d5b1387..47fa817 100644
--- a/include/seqan/parse_lm/local_match_store.h
+++ b/include/seqan/parse_lm/local_match_store.h
@@ -103,13 +103,13 @@ public:
     TPosition queryEndPos;
 
     LocalMatch() :
-            id(MaxValue<TId>::VALUE),
-            subjectId(MaxValue<TId>::VALUE),
-            subjectBeginPos(MaxValue<TPosition>::VALUE),
-            subjectEndPos(MaxValue<TPosition>::VALUE),
-            queryId(MaxValue<TId>::VALUE),
-            queryBeginPos(MaxValue<TPosition>::VALUE),
-            queryEndPos(MaxValue<TPosition>::VALUE)
+            id(std::numeric_limits<TId>::max()),
+            subjectId(std::numeric_limits<TId>::max()),
+            subjectBeginPos(std::numeric_limits<TPosition>::max()),
+            subjectEndPos(std::numeric_limits<TPosition>::max()),
+            queryId(std::numeric_limits<TId>::max()),
+            queryBeginPos(std::numeric_limits<TPosition>::max()),
+            queryEndPos(std::numeric_limits<TPosition>::max())
     {}
 
     LocalMatch(TId id_,
@@ -358,16 +358,16 @@ appendLocalMatch(TLocalMatchStore & store,
 
     // Get id for subject and query sequences;  Insert sequences into name stores/caches if not already there.
     TId subjectId = 0;
-    if (!getIdByName(store.sequenceNameStore, subjectName, subjectId, store._sequenceNameStoreCache))
+    if (!getIdByName(subjectId, store.sequenceNameStore, subjectName))
     {
         subjectId = length(store.sequenceNameStore);
-        appendName(store.sequenceNameStore, subjectName, store._sequenceNameStoreCache);
+        appendName(store._sequenceNameStoreCache, subjectName);
     }
     TId queryId = 0;
-    if (!getIdByName(store.sequenceNameStore, queryName, queryId, store._sequenceNameStoreCache))
+    if (!getIdByName(queryId, store.sequenceNameStore, queryName))
     {
         queryId = length(store.sequenceNameStore);
-        appendName(store.sequenceNameStore, queryName, store._sequenceNameStoreCache);
+        appendName(store._sequenceNameStoreCache, queryName);
     }
 
     appendLocalMatch(store, subjectId, subjectBeginPos, subjectEndPos, queryId, queryBeginPos, queryEndPos);
diff --git a/include/seqan/pipe/pipe_source.h b/include/seqan/pipe/pipe_source.h
index f2a99f6..d521333 100644
--- a/include/seqan/pipe/pipe_source.h
+++ b/include/seqan/pipe/pipe_source.h
@@ -74,7 +74,7 @@ namespace seqan
             in(_cont), cur(), val() {}
 
         inline typename Value<TInput>::Type const & operator*()
-        { return val = getValue(cur); }
+        { return val = *cur; }
 
         inline Pipe& operator++()
         {
diff --git a/include/seqan/pipe/pool_base.h b/include/seqan/pipe/pool_base.h
index d8d1adf..2f43f56 100644
--- a/include/seqan/pipe/pool_base.h
+++ b/include/seqan/pipe/pool_base.h
@@ -832,11 +832,13 @@ namespace seqan
         //////////////////////////////////////////////////////////////////////////////
         // auto-disposal interface (deprecated)
 
+        [[deprecated]]
         inline void addListener() {
             if (!listeners) return;
             ++listeners;
         }
 
+        [[deprecated]]
         inline void delListener() {
             if (!listeners) return;
             if (--listeners == 0) {
@@ -918,7 +920,7 @@ namespace seqan
             if (reader) reader->end();
             delete reader;
             reader = NULL;
-            delListener();
+            // delListener(); (deprecated)
             return true;
         }
 
@@ -969,7 +971,7 @@ namespace seqan
             writeBackBuffers = _conf.writeBackBuffers;
             writeBackBuckets = _conf.writeBackBuffers;
             _partiallyFilled = true;
-            listeners = 0;
+            listeners = 0; // (deprecated)
             reader = NULL;
             writer = NULL;
             _ownFile = true;
@@ -1064,8 +1066,8 @@ namespace seqan
         return me.clear();
     }
 
-    // deprecated
     template < typename TValue, typename TSpec >
+    [[deprecated]]
     inline typename Size< Pool<TValue, TSpec> >::Type
     size(Pool<TValue, TSpec> const &me)
     {
diff --git a/include/seqan/platform.h b/include/seqan/platform.h
index 40ab71f..ab0c7ba 100644
--- a/include/seqan/platform.h
+++ b/include/seqan/platform.h
@@ -276,15 +276,23 @@
  * @signature typdef (...) __uint8;
  */
 
+[[deprecated("Use uint64_t instead.")]]
 typedef uint64_t __uint64; // nolint
+[[deprecated("Use uint32_t instead.")]]
 typedef uint32_t __uint32; // nolint
+[[deprecated("Use uint16_t instead.")]]
 typedef uint16_t __uint16; // nolint
+[[deprecated("Use uint8_t instead.")]]
 typedef uint8_t __uint8;   // nolint
 
 #if !(defined(COMPILER_LINTEL) || defined(STDLIB_VS))
+[[deprecated("Use int64_t instead.")]]
 typedef int64_t __int64;   // nolint
+[[deprecated("Use int32_t instead.")]]
 typedef int32_t __int32;   // nolint
+[[deprecated("Use int16_t instead.")]]
 typedef int16_t __int16;   // nolint
+[[deprecated("Use int8_t instead.")]]
 typedef int8_t __int8;     // nolint
 #endif
 
@@ -488,41 +496,41 @@ namespace seqan
 {
 
 template <typename T>
-constexpr void ensure_little_endian(T &)
+constexpr void enforceLittleEndian(T &)
 {}
 
 #if SEQAN_BIG_ENDIAN
-inline void ensure_little_endian(int16_t & in)
+inline void enforceLittleEndian(int16_t & in)
 {
     in = htole16(in);
 }
-inline void ensure_little_endian(uint16_t & in)
+inline void enforceLittleEndian(uint16_t & in)
 {
     in = htole16(in);
 }
-inline void ensure_little_endian(int32_t & in)
+inline void enforceLittleEndian(int32_t & in)
 {
     in = htole32(in);
 }
-inline void ensure_little_endian(uint32_t & in)
+inline void enforceLittleEndian(uint32_t & in)
 {
     in = htole32(in);
 }
-inline void ensure_little_endian(int64_t & in)
+inline void enforceLittleEndian(int64_t & in)
 {
     in = htole64(in);
 }
-inline void ensure_little_endian(uint64_t & in)
+inline void enforceLittleEndian(uint64_t & in)
 {
     in = htole64(in);
 }
-inline void ensure_little_endian(float & in)
+inline void enforceLittleEndian(float & in)
 {
     uint32_t tmp = htole32(*reinterpret_cast<uint32_t*>(&in));
     char *out = reinterpret_cast<char*>(&in);
     *out = *reinterpret_cast<char*>(&tmp);
 }
-inline void ensure_little_endian(double & in)
+inline void enforceLittleEndian(double & in)
 {
     uint64_t tmp = htole64(*reinterpret_cast<uint64_t*>(&in));
     char *out = reinterpret_cast<char*>(&in);
@@ -534,6 +542,7 @@ inline void ensure_little_endian(double & in)
 
 // DEFAULT PAGESIZE FOR MMAP
 #ifndef SEQAN_DEFAULT_PAGESIZE
+    // 64K is supported on all platforms (whereas 4K is not)
     #define SEQAN_DEFAULT_PAGESIZE 64 * 1024
 #endif
 
diff --git a/include/seqan/realign/realign_base.h b/include/seqan/realign/realign_base.h
index 6f43e03..3bb23c3 100644
--- a/include/seqan/realign/realign_base.h
+++ b/include/seqan/realign/realign_base.h
@@ -111,8 +111,8 @@ struct ContigAlignmentsInfo_
     // Reset everything.
     void reset()
     {
-        minPos = maxValue<TReadPos>();
-        maxPos = minValue<TReadPos>();
+        minPos = std::numeric_limits<TReadPos>::max();
+        maxPos = std::numeric_limits<TReadPos>::min();
         alignedItBegin = TAlignedReadIter();
         alignedItEnd = TAlignedReadIter();
     }
@@ -673,9 +673,9 @@ void AnsonMyersRealigner_<TFragmentStore>::run(unsigned contigID, unsigned windo
     _checkReadAlignments();
 
     // Perform realignment round until the score does not decrease any more.
-    int score = maxValue<int>();
-    int oldScore = maxValue<int>();
-    for (unsigned roundNo = 0; score == maxValue<int>() || score < oldScore; ++roundNo)
+    int score = std::numeric_limits<int>::max();
+    int oldScore = std::numeric_limits<int>::max();
+    for (unsigned roundNo = 0; score == std::numeric_limits<int>::max() || score < oldScore; ++roundNo)
     {
         if (options.debug)
             std::cerr << "Realignment round " << roundNo << "\n";
diff --git a/include/seqan/rna_io/rna_record.h b/include/seqan/rna_io/rna_record.h
index aea4330..9abdfd9 100644
--- a/include/seqan/rna_io/rna_record.h
+++ b/include/seqan/rna_io/rna_record.h
@@ -120,16 +120,23 @@ class RnaRecord
 {
 private:
     // Constant for an undefined ID.
-    static std::uint32_t const undef = UINT32_MAX;
+    static std::uint32_t const _undef = std::numeric_limits<std::uint32_t>::max();
 
 public:
+    // NOTE(marehr): Explicitly define a default constructor, to fix a msvc 2017
+    // (msvc versions before did not have this bug) compiler bug:
+    //     error C2248: 'seqan::RnaRecord::_undef': cannot access private member
+    //     declared in class 'seqan::RnaRecord'
+    RnaRecord() : recordID{_undef}
+    {}
+
     /*!
      * @var std::uint32_t RnaRecord::recordID
      * @brief Identification of the record.
      *
      * In an RNA structure file the first record gets ID 0, the following ID 1 and so on.
      */
-    std::uint32_t recordID{undef};
+    std::uint32_t recordID{_undef};
 
     /*!
      * @var TSizeRna5String RnaRecord::seqLen
@@ -234,7 +241,7 @@ public:
      */
     bool hasUndefinedID() const
     {
-        return recordID == undef;
+        return recordID == _undef;
     }
 
     /*!
@@ -244,7 +251,7 @@ public:
      */
     void clearID()
     {
-        recordID = undef;
+        recordID = _undef;
     }
 };
 
diff --git a/include/seqan/seeds/banded_chain_alignment_impl.h b/include/seqan/seeds/banded_chain_alignment_impl.h
index a99a14e..970d993 100644
--- a/include/seqan/seeds/banded_chain_alignment_impl.h
+++ b/include/seqan/seeds/banded_chain_alignment_impl.h
@@ -89,9 +89,11 @@ template <typename TDist,
 inline bool _checkScoreOverflow(TDist const distance,
                                 Score<TScoreValue, TScoreSpec> const & score)
 {
-    auto mxScore = _max(scoreMatch(score), std::abs(scoreMismatch(score)));
-    return static_cast<decltype(BitsPerValue<TScoreValue>::VALUE)>(bitScanReverse(mxScore) + bitScanReverse(distance))
-            <= BitsPerValue<TScoreValue>::VALUE - 1;
+    using TBits = decltype(BitsPerValue<TScoreValue>::VALUE);
+    TScoreValue mxScore = _max(scoreMatch(score), std::abs(scoreMismatch(score)));
+
+    TBits bits = bitScanReverse(mxScore) + bitScanReverse(distance);
+    return bits <= BitsPerValue<TScoreValue>::VALUE - 1;
 }
 
 // ----------------------------------------------------------------------------
@@ -1225,7 +1227,7 @@ _computeAlignment(TTraceSet & globalTraceSet,
 
     // Handle case of empty seed set.
     if (length(seedSet) < 1)
-        return MinValue<TScoreValue>::VALUE;
+        return std::numeric_limits<TScoreValue>::min();
 
     // Find the first anchor that is not covered by the region between the beginning of the matrix and the next anchor
     // considering the minbandwidh parameter.
diff --git a/include/seqan/seeds/seeds_extension.h b/include/seqan/seeds/seeds_extension.h
index 9f724f6..ec6bcb8 100644
--- a/include/seqan/seeds/seeds_extension.h
+++ b/include/seqan/seeds/seeds_extension.h
@@ -627,14 +627,14 @@ _extendSeedGappedXDropOneDirection(
         return 0;
 
     TScoreValue len = 2 * _max(cols, rows); // number of antidiagonals
-    TScoreValue const minErrScore = minValue<TScoreValue>() / len; // minimal allowed error penalty
+    TScoreValue const minErrScore = std::numeric_limits<TScoreValue>::min() / len; // minimal allowed error penalty
     setScoreGap(scoringScheme, _max(scoreGap(scoringScheme), minErrScore));
     typename Value<TQuerySegment>::Type * tag = 0;
     (void)tag;
     _extendSeedGappedXDropOneDirectionLimitScoreMismatch(scoringScheme, minErrScore, tag);
 
     TScoreValue gapCost = scoreGap(scoringScheme);
-    TScoreValue undefined = minValue<TScoreValue>() - gapCost;
+    TScoreValue undefined = std::numeric_limits<TScoreValue>::min() - gapCost;
 
     // DP matrix is calculated by anti-diagonals
     String<TScoreValue> antiDiag1;    //smallest anti-diagonal
diff --git a/include/seqan/seeds/seeds_global_chaining.h b/include/seqan/seeds/seeds_global_chaining.h
index 2f49a50..5a6e867 100644
--- a/include/seqan/seeds/seeds_global_chaining.h
+++ b/include/seqan/seeds/seeds_global_chaining.h
@@ -138,7 +138,7 @@ chainSeedsGlobally(
         // sparse chaining algorithm expects.
         // std::cout << "| " << **it << std::endl;
         qualityOfChainEndingIn[i] = seedSize(seeds[i]);
-        predecessor[i] = maxValue<unsigned>();
+        predecessor[i] = std::numeric_limits<unsigned>::max();
         appendValue(intervalPoints, TIntervalPoint(beginPositionH(seeds[i]), true, i));
         appendValue(intervalPoints, TIntervalPoint(endPositionH(seeds[i]), false, i));
     }
@@ -177,7 +177,7 @@ chainSeedsGlobally(
             // *first* one that compares greater than the reference
             // one.  Searching for the this one and decrementing the
             // result iterator gives the desired result.
-            TIntermediateSolution referenceSolution(beginPositionV(seedK), maxValue<TSize>(), maxValue<unsigned>());
+            TIntermediateSolution referenceSolution(beginPositionV(seedK), std::numeric_limits<TSize>::max(), std::numeric_limits<unsigned>::max());
             // std::cout << "    intermediateSolutions.upper_bound(" << beginPositionV(seedK) << ")" << std::endl;
             TIntermediateSolutionsIterator itJ = intermediateSolutions.upper_bound(referenceSolution);
             if (itJ == intermediateSolutions.begin()) {
@@ -210,7 +210,7 @@ chainSeedsGlobally(
             // value that is > so we have to work around this to get
             // >= again...
             SEQAN_ASSERT_GT(endPositionV(seedK), 0u);
-            TIntermediateSolution referenceSolution(endPositionV(seedK), 0, maxValue<unsigned>());
+            TIntermediateSolution referenceSolution(endPositionV(seedK), 0, std::numeric_limits<unsigned>::max());
             TIntermediateSolutionsIterator itSol = intermediateSolutions.upper_bound(referenceSolution);
             if (itSol == intermediateSolutions.end()) {
                 // None found.  Insert a new triple for seed k.
@@ -256,7 +256,7 @@ chainSeedsGlobally(
     // TODO(holtgrew): We could use two different algorithms for target containers that are strings and those that are lists.
     clear(target);
     unsigned next = intermediateSolutions.rbegin()->i3;
-    while (next != maxValue<unsigned>())
+    while (next != std::numeric_limits<unsigned>::max())
     {
         appendValue(target, seeds[next]);
         next = predecessor[next];
diff --git a/include/seqan/seq_io/bam_sam.h b/include/seqan/seq_io/bam_sam.h
index 53b7f4d..d328fe4 100644
--- a/include/seqan/seq_io/bam_sam.h
+++ b/include/seqan/seq_io/bam_sam.h
@@ -115,7 +115,7 @@ inline int32_t readBamRecord(TIdString & meta,
     // BamAlignmentRecordCore.
     BamAlignmentRecordCore recordCore;
     arrayCopyForward(it, it + sizeof(BamAlignmentRecordCore), reinterpret_cast<char *>(&recordCore));
-    ensure_little_endian(recordCore);
+    enforceLittleEndian(recordCore);
     it += sizeof(BamAlignmentRecordCore);
 
     clear(meta);
@@ -144,9 +144,9 @@ inline int32_t readBamRecord(TIdString & meta,
     {
         unsigned char ui = getValue(it);
         ++it;
-        assignValue(sit, Iupac(ui >> 4));
+        *sit =  Iupac(ui >> 4);
         ++sit;
-        assignValue(sit, Iupac(ui & 0x0f));
+        *sit =  Iupac(ui & 0x0f);
         ++sit;
     }
     if (recordCore._l_qseq & 1)
diff --git a/include/seqan/seq_io/sequence_file.h b/include/seqan/seq_io/sequence_file.h
index 9be397a..8c52443 100644
--- a/include/seqan/seq_io/sequence_file.h
+++ b/include/seqan/seq_io/sequence_file.h
@@ -110,7 +110,7 @@ typedef
 typedef TagSelector<SeqInFormats>   SeqInFormat;
 typedef TagSelector<SeqOutFormats>  SeqOutFormat;
 
-// deprecated
+[[deprecated]]
 typedef SeqInFormat AutoSeqFormat;
 
 // ============================================================================
@@ -359,7 +359,7 @@ inline void readRecords(TIdStringSet & meta,
                         TSeqStringSet & seq,
                         FormattedFile<Fastq, Input, TSpec> & file)
 {
-    readRecords(meta, seq, file, MaxValue<uint64_t>::VALUE);
+    readRecords(meta, seq, file, std::numeric_limits<uint64_t>::max());
 }
 
 // ----------------------------------------------------------------------------
@@ -406,7 +406,7 @@ inline void readRecords(TIdStringSet & meta,
                         TQualStringSet & qual,
                         FormattedFile<Fastq, Input, TSpec> & file)
 {
-    readRecords(meta, seq, qual, file, MaxValue<uint64_t>::VALUE);
+    readRecords(meta, seq, qual, file, std::numeric_limits<uint64_t>::max());
 }
 
 // ----------------------------------------------------------------------------
diff --git a/include/seqan/sequence/adapt_stl_container.h b/include/seqan/sequence/adapt_stl_container.h
index ee7ea0b..d5128d8 100644
--- a/include/seqan/sequence/adapt_stl_container.h
+++ b/include/seqan/sequence/adapt_stl_container.h
@@ -539,7 +539,8 @@ capacity(std::array<TChar, N> const & me)
 // VC2015 implements some C++17 functions which would collide for
 // applications that do using namespace std
 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4280.pdf
-#ifndef _MSC_VER
+// Disable those functions for C++17 and upwards (pre-C++17 defines __cplusplus as <=201402L).
+#if !(defined(STDLIB_VS) || __cplusplus > 201402L)
 template <typename TContainer>
 inline SEQAN_FUNC_ENABLE_IF(Is<StlContainerConcept<TContainer> >, bool)
 empty(TContainer const & me)
diff --git a/include/seqan/sequence/sequence_forwards.h b/include/seqan/sequence/sequence_forwards.h
index ac0cebd..829effd 100644
--- a/include/seqan/sequence/sequence_forwards.h
+++ b/include/seqan/sequence/sequence_forwards.h
@@ -135,8 +135,11 @@ template <typename TContainer, typename TPos> inline SEQAN_FUNC_ENABLE_IF(And<Is
 template <typename TContainer, typename TPos> inline SEQAN_FUNC_ENABLE_IF(And<Is<StlContainerConcept<TContainer> >, Not<HasSubscriptOperator<TContainer> > >, typename Reference<TContainer>::Type) value(TContainer & me, TPos const pos);
 template <typename TContainer, typename TPos> inline SEQAN_FUNC_ENABLE_IF(And<Is<StlContainerConcept<TContainer> >, Not<HasSubscriptOperator<TContainer> > >, typename Reference<TContainer const>::Type) value(TContainer const & me, TPos const pos);
 template <typename TContainer, typename TPos> inline SEQAN_FUNC_ENABLE_IF(And<Is<StlContainerConcept<TContainer> >, Not<HasSubscriptOperator<TContainer> > >, typename Value<TContainer>::Type) value(TContainer && me, TPos const pos);
+
+#if !(defined(STDLIB_VS) || __cplusplus > 201402L)
 template <typename TContainer> inline SEQAN_FUNC_ENABLE_IF(Is<StlContainerConcept<TContainer> >, bool) empty(TContainer const & me);
 template <typename T> inline SEQAN_FUNC_DISABLE_IF(Is<StlContainerConcept<typename RemoveReference<T>::Type> >, bool) empty(T const & me);
+#endif
 
 // --------------------------------------------------------------------------
 // Forwards For arrays and pointers.
diff --git a/include/seqan/sequence/string_cstyle.h b/include/seqan/sequence/string_cstyle.h
index 3b3eb55..02b3e97 100644
--- a/include/seqan/sequence/string_cstyle.h
+++ b/include/seqan/sequence/string_cstyle.h
@@ -582,11 +582,10 @@ struct CreateArrayStringExpand_
                 _deallocateStorage(target, buf, old_target_capacity);
             }
         }
-        assignValue(begin(target, Standard()), 0); //set target length to 0
+        assign(*begin(target, Standard()), 0); //set target length to 0
         assign(begin(target, Standard()), source, Insist());
         typedef typename Iterator<TTarget>::Type TTargetIterator;
         _setEnd(target, TTargetIterator( begin(target) + source_length));
-
     }
 
     template <typename TTarget, typename TSource, typename TLimit>
diff --git a/include/seqan/sequence/string_packed.h b/include/seqan/sequence/string_packed.h
index ba0af1f..06d3eb0 100644
--- a/include/seqan/sequence/string_packed.h
+++ b/include/seqan/sequence/string_packed.h
@@ -594,7 +594,7 @@ resize(String<TValue, Packed<THostspec> > & me,
     // create WORD
     THostValue tmp;
     tmp.i = 0;
-    __uint64 ord = ordValue(TValue(newValue));
+    uint64_t ord = ordValue(TValue(newValue));
     for (unsigned j = 0; j < TTraits::VALUES_PER_HOST_VALUE; ++j)
         tmp.i |= ord << (j * TTraits::BITS_PER_VALUE);
 
@@ -611,7 +611,7 @@ resize(String<TValue, Packed<THostspec> > & me,
         TStringSize alreadySet = old_length % TTraits::VALUES_PER_HOST_VALUE;
 
         // clear non-set positions (which may be uninitialized ( != 0 )
-        tmp.i = (~static_cast<__uint64>(0) << (64 - alreadySet * TTraits::BITS_PER_VALUE)) >> TTraits::WASTED_BITS;
+        tmp.i = (~static_cast<uint64_t>(0) << (64 - alreadySet * TTraits::BITS_PER_VALUE)) >> TTraits::WASTED_BITS;
         host(me)[old_host_length-1].i &= tmp.i;
 
         for (TStringSize i = alreadySet; i < TTraits::VALUES_PER_HOST_VALUE; ++i)
@@ -1063,7 +1063,7 @@ arrayCopyBackward(Iter<TPackedString, Packed<TSpec> > source_begin,
             {
                 --hostIterator(source_end);
                 --hostIterator(target_begin);
-                assignValue(hostIterator(target_begin), getValue(hostIterator(source_end)));
+                *hostIterator(target_begin) = getValue(hostIterator(source_end));
             }
         }
 
@@ -1246,7 +1246,7 @@ struct ClearSpaceStringPacked_
         typename Size<T>::Type start,
         typename Size<T>::Type end)
     {
-        return _clearSpace_(seq, size, start, end, maxValue<typename Size<T>::Type >());
+        return _clearSpace_(seq, size, start, end, std::numeric_limits<typename Size<T>::Type >::max());
     }
 
     template <typename T>
@@ -1753,7 +1753,7 @@ bitScanReverse(String<bool, Packed<THostSpec> > const & obj)
     typedef typename THostValue::TBitVector TBitVector;
 
     if (empty(host(obj)))
-        return MaxValue<TPosition>::VALUE;
+        return std::numeric_limits<TPosition>::max();
 
     TConstPackedHostIterator it = end(host(obj), Standard()) - 1;
     TConstPackedHostIterator itBegin = begin(host(obj), Standard());
@@ -1792,7 +1792,7 @@ bitScanForward(String<bool, Packed<THostSpec> > const & obj)
     typedef typename THostValue::TBitVector TBitVector;
 
     if (empty(host(obj)))
-        return MaxValue<TPosition>::VALUE;
+        return std::numeric_limits<TPosition>::max();
 
     TConstPackedHostIterator itBegin = begin(host(obj), Standard()) + 1;
     TConstPackedHostIterator it = itBegin;
diff --git a/include/seqan/sequence/string_packed_old.h b/include/seqan/sequence/string_packed_old.h
index 13a2e61..60d47c0 100644
--- a/include/seqan/sequence/string_packed_old.h
+++ b/include/seqan/sequence/string_packed_old.h
@@ -701,7 +701,7 @@ struct ClearSpaceStringPacked2_
         typename Size<T>::Type start,
         typename Size<T>::Type end)
     {
-        return _clearSpace_(seq, size, start, end, maxValue<typename Size<T>::Type >());
+        return _clearSpace_(seq, size, start, end, std::numeric_limits<typename Size<T>::Type >::max());
     }
 
     template <typename T>
diff --git a/include/seqan/sequence/string_set_base.h b/include/seqan/sequence/string_set_base.h
index 3e7eee4..3ae5aea 100644
--- a/include/seqan/sequence/string_set_base.h
+++ b/include/seqan/sequence/string_set_base.h
@@ -1345,7 +1345,7 @@ assign(StringSet<TString, TSpec> & target,
     TSourceIterator it = begin(source, Standard());
     TSourceIterator itEnd = end(source, Standard());
     for (; it != itEnd; ++it)
-        appendValue(target, getValue(it), tag);
+        appendValue(target, *it, tag);
 }
 
 template <typename TString, typename TSpec, typename TSource>
@@ -1619,6 +1619,7 @@ concat(StringSet<TString, TSpec> const & constMe)
 
 // this function is deprecated and the return value is very ungeneric, e.g. doesn't work if strings are std::string
 template <typename TStrings, typename TDelim>
+[[deprecated]]
 inline String<typename Value<typename Value<TStrings>::Type>::Type>
 concat(TStrings const & strings, TDelim const & delimiter, bool ignoreEmptyStrings = false)
 {
@@ -1665,7 +1666,7 @@ inline void prefixSums(TPrefixSums & sums, TText const & text)
     // Compute symbol frequencies.
     TIter itEnd = end(concat(text), Standard());
     for (TIter it = begin(concat(text), Standard()); it != itEnd; goNext(it))
-        sums[ordValue(static_cast<TValue>(value(it))) + 1]++;
+        sums[ordValue(static_cast<TValue>(*it)) + 1]++;
 
     // Cumulate symbol frequencies.
     partialSum(sums);
diff --git a/include/seqan/sequence/string_set_owner.h b/include/seqan/sequence/string_set_owner.h
index dd33981..abdac6b 100644
--- a/include/seqan/sequence/string_set_owner.h
+++ b/include/seqan/sequence/string_set_owner.h
@@ -328,6 +328,7 @@ erase(StringSet<TString, Owner<Default> > & me, TPos pos, TPosEnd posEnd)
 // --------------------------------------------------------------------------
 
 template <typename TString, typename TSpec, typename TId>
+// [[deprecated("Use the subscript operator (operator[]) instead.")]]
 inline typename Reference<StringSet<TString, Owner<TSpec> > >::Type
 getValueById(StringSet<TString, Owner<TSpec> >& me,
             TId const id)
@@ -352,6 +353,7 @@ getValueById(StringSet<TString, Owner<TSpec> > const & me,
 // --------------------------------------------------------------------------
 
 template <typename TString, typename TSpec, typename TId>
+// [[deprecated("Use assignValue instead.")]]
 inline typename Id<StringSet<TString, Owner<TSpec> > >::Type
 assignValueById(StringSet<TString, Owner<TSpec> > & me,
                 TString& obj,
@@ -372,6 +374,7 @@ assignValueById(StringSet<TString, Owner<TSpec> > & me,
 // --------------------------------------------------------------------------
 
 template<typename TString, typename TSpec, typename TId>
+// [[deprecated("Use erase instead.")]]
 inline void
 removeValueById(StringSet<TString, Owner<TSpec> > & me, TId const id)
 {
@@ -385,6 +388,7 @@ removeValueById(StringSet<TString, Owner<TSpec> > & me, TId const id)
 // --------------------------------------------------------------------------
 
 template <typename TString, typename TSpec, typename TPos>
+// [[deprecated("ID is the same as the position")]]
 inline typename Id<StringSet<TString, Owner<TSpec> > >::Type
 positionToId(StringSet<TString, Owner<TSpec> > &,
             TPos const pos)
@@ -397,6 +401,7 @@ positionToId(StringSet<TString, Owner<TSpec> > &,
 // --------------------------------------------------------------------------
 
 template <typename TString, typename TSpec, typename TPos>
+// [[deprecated("ID is the same as the position")]]
 inline typename Id<StringSet<TString, Owner<TSpec> > >::Type
 positionToId(StringSet<TString, Owner<TSpec> > const &,
             TPos const pos)
@@ -409,6 +414,7 @@ positionToId(StringSet<TString, Owner<TSpec> > const &,
 // --------------------------------------------------------------------------
 
 template <typename TString, typename TSpec, typename TId>
+// [[deprecated("ID is the same as the position")]]
 inline typename Id<StringSet<TString, Owner<TSpec> > >::Type
 idToPosition(StringSet<TString, Owner<TSpec> > const&,
             TId const id)
diff --git a/include/seqan/simd.h b/include/seqan/simd.h
index e61f20b..b2f0081 100644
--- a/include/seqan/simd.h
+++ b/include/seqan/simd.h
@@ -86,6 +86,18 @@
     #error SEQAN::SIMD (vector extension) is not supported by msvc and windows intel compiler, try compiling with -DSEQAN_UMESIMD_ENABLED
 #endif
 
+// SIMD operations have severe performance issues on <= gcc4.9
+#if defined(SEQAN_SEQANSIMD_ENABLED) && defined(COMPILER_GCC) && (__GNUC__ <= 4)
+    // TODO(marehr): If we switch to jenkins, filter out these warnings
+    #if !(defined(NDEBUG) || defined(SEQAN_ENABLE_TESTING))
+        #pragma message("SIMD acceleration was disabled for <=gcc4.9, because of known performance issues " \
+                        "https://github.com/seqan/seqan/issues/2017. Use a more recent gcc compiler.")
+    #endif
+    #undef SEQAN_SIMD_ENABLED
+    #undef SEQAN_SEQANSIMD_ENABLED
+    #undef SEQAN_UMESIMD_ENABLED
+#endif // defined(COMPILER_GCC) && __GNUC__ <= 4
+
 // Define maximal size of vector in byte.
 #if defined(SEQAN_SEQANSIMD_ENABLED) && defined(__AVX512F__)
     // TODO(marehr): If we switch to jenkins, filter out these warnings
diff --git a/include/seqan/simd/simd_base.h b/include/seqan/simd/simd_base.h
index 22ab483..938e37c 100644
--- a/include/seqan/simd/simd_base.h
+++ b/include/seqan/simd/simd_base.h
@@ -226,6 +226,10 @@ max(TSimdVector const & a, TSimdVector const & b);
 
 template <typename TSimdVector>
 inline SEQAN_FUNC_ENABLE_IF(Is<SimdVectorConcept<TSimdVector> >, TSimdVector)
+min(TSimdVector const & a, TSimdVector const & b);
+
+template <typename TSimdVector>
+inline SEQAN_FUNC_ENABLE_IF(Is<SimdVectorConcept<TSimdVector> >, TSimdVector)
 operator|(TSimdVector const & a, TSimdVector const & b);
 
 template <typename TSimdVector>
diff --git a/include/seqan/simd/simd_base_seqan_impl_avx2.h b/include/seqan/simd/simd_base_seqan_impl_avx2.h
index 882c975..05d2d80 100644
--- a/include/seqan/simd/simd_base_seqan_impl_avx2.h
+++ b/include/seqan/simd/simd_base_seqan_impl_avx2.h
@@ -194,28 +194,28 @@ inline TSimdVector _createVector(TValue const x, SimdParams_< 32, 4>)
 // --------------------------------------------------------------------------
 
 template <typename TSimdVector>
-inline TSimdVector _cmpEq(TSimdVector & a, TSimdVector & b, SimdParams_<32, 32>)
+inline TSimdVector _cmpEq(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 32>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector, _mm256_cmpeq_epi8(SEQAN_VECTOR_CAST_(const __m256i&, a),
                                                              SEQAN_VECTOR_CAST_(const __m256i&, b)));
 }
 
 template <typename TSimdVector>
-inline TSimdVector _cmpEq(TSimdVector & a, TSimdVector & b, SimdParams_<32, 16>)
+inline TSimdVector _cmpEq(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 16>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector, _mm256_cmpeq_epi16(SEQAN_VECTOR_CAST_(const __m256i&, a),
                                                               SEQAN_VECTOR_CAST_(const __m256i&, b)));
 }
 
 template <typename TSimdVector>
-inline TSimdVector _cmpEq(TSimdVector & a, TSimdVector & b, SimdParams_<32, 8>)
+inline TSimdVector _cmpEq(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 8>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector, _mm256_cmpeq_epi32(SEQAN_VECTOR_CAST_(const __m256i&, a),
                                                               SEQAN_VECTOR_CAST_(const __m256i&, b)));
 }
 
 template <typename TSimdVector>
-inline TSimdVector _cmpEq(TSimdVector & a, TSimdVector & b, SimdParams_<32, 4>)
+inline TSimdVector _cmpEq(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 4>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector, _mm256_cmpeq_epi64(SEQAN_VECTOR_CAST_(const __m256i&, a),
                                                               SEQAN_VECTOR_CAST_(const __m256i&, b)));
@@ -226,14 +226,14 @@ inline TSimdVector _cmpEq(TSimdVector & a, TSimdVector & b, SimdParams_<32, 4>)
 // --------------------------------------------------------------------------
 
 template <typename TSimdVector>
-inline TSimdVector _cmpGt(TSimdVector & a, TSimdVector & b, SimdParams_<32, 32, int8_t>)
+inline TSimdVector _cmpGt(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 32, int8_t>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector, _mm256_cmpgt_epi8(SEQAN_VECTOR_CAST_(const __m256i&, a),
                                                              SEQAN_VECTOR_CAST_(const __m256i&, b)));
 }
 
 template <typename TSimdVector>
-inline TSimdVector _cmpGt(TSimdVector & a, TSimdVector & b, SimdParams_<32, 32, uint8_t>)
+inline TSimdVector _cmpGt(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 32, uint8_t>)
 {
     // There is no unsigned cmpgt, we reduce it to the signed case.
     // Note that 0x80 = ~0x7F (prevent overflow messages).
@@ -244,14 +244,14 @@ inline TSimdVector _cmpGt(TSimdVector & a, TSimdVector & b, SimdParams_<32, 32,
 }
 
 template <typename TSimdVector>
-inline TSimdVector _cmpGt(TSimdVector & a, TSimdVector & b, SimdParams_<32, 16, int16_t>)
+inline TSimdVector _cmpGt(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 16, int16_t>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector, _mm256_cmpgt_epi16(SEQAN_VECTOR_CAST_(const __m256i&, a),
                                                               SEQAN_VECTOR_CAST_(const __m256i&, b)));
 }
 
 template <typename TSimdVector>
-inline TSimdVector _cmpGt(TSimdVector & a, TSimdVector & b, SimdParams_<32, 16, uint16_t>)
+inline TSimdVector _cmpGt(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 16, uint16_t>)
 {
     // There is no unsigned cmpgt, we reduce it to the signed case.
     // Note that 0x8000 = ~0x7FFF (prevent overflow messages).
@@ -262,14 +262,14 @@ inline TSimdVector _cmpGt(TSimdVector & a, TSimdVector & b, SimdParams_<32, 16,
 }
 
 template <typename TSimdVector>
-inline TSimdVector _cmpGt(TSimdVector & a, TSimdVector & b, SimdParams_<32, 8, int32_t>)
+inline TSimdVector _cmpGt(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 8, int32_t>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector, _mm256_cmpgt_epi32(SEQAN_VECTOR_CAST_(const __m256i&, a),
                                                               SEQAN_VECTOR_CAST_(const __m256i&, b)));
 }
 
 template <typename TSimdVector>
-inline TSimdVector _cmpGt(TSimdVector & a, TSimdVector & b, SimdParams_<32, 8, uint32_t>)
+inline TSimdVector _cmpGt(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 8, uint32_t>)
 {
     // There is no unsigned cmpgt, we reduce it to the signed case.
     // Note that 0x80000000 = ~0x7FFFFFFF (prevent overflow messages).
@@ -280,14 +280,14 @@ inline TSimdVector _cmpGt(TSimdVector & a, TSimdVector & b, SimdParams_<32, 8, u
 }
 
 template <typename TSimdVector>
-inline TSimdVector _cmpGt(TSimdVector & a, TSimdVector & b, SimdParams_<32, 4, int64_t>)
+inline TSimdVector _cmpGt(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 4, int64_t>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector, _mm256_cmpgt_epi64(SEQAN_VECTOR_CAST_(const __m256i&, a),
                                                               SEQAN_VECTOR_CAST_(const __m256i&, b)));
 }
 
 template <typename TSimdVector>
-inline TSimdVector _cmpGt(TSimdVector & a, TSimdVector & b, SimdParams_<32, 4, uint64_t>)
+inline TSimdVector _cmpGt(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 4, uint64_t>)
 {
     // There is no unsigned cmpgt, we reduce it to the signed case.
     // Note that 0x8000000000000000ul = ~0x7FFFFFFFFFFFFFFFul (prevent overflow messages).
@@ -302,7 +302,7 @@ inline TSimdVector _cmpGt(TSimdVector & a, TSimdVector & b, SimdParams_<32, 4, u
 // --------------------------------------------------------------------------
 
 template <typename TSimdVector, int L>
-inline TSimdVector _bitwiseOr(TSimdVector & a, TSimdVector & b, SimdParams_<32, L>)
+inline TSimdVector _bitwiseOr(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, L>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector, _mm256_or_si256(SEQAN_VECTOR_CAST_(const __m256i&, a),
                                                            SEQAN_VECTOR_CAST_(const __m256i&, b)));
@@ -313,32 +313,18 @@ inline TSimdVector _bitwiseOr(TSimdVector & a, TSimdVector & b, SimdParams_<32,
 // --------------------------------------------------------------------------
 
 template <typename TSimdVector, int L>
-inline TSimdVector _bitwiseAnd(TSimdVector & a, TSimdVector & b, SimdParams_<32, L>)
+inline TSimdVector _bitwiseAnd(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, L>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector, _mm256_and_si256(SEQAN_VECTOR_CAST_(const __m256i&, a),
                                                             SEQAN_VECTOR_CAST_(const __m256i&, b)));
 }
 
-template <typename TSimdVector>
-inline TSimdVector _bitwiseAnd(TSimdVector & a, TSimdVector & b, SimdParams_<32, 8>)
-{
-    return SEQAN_VECTOR_CAST_(TSimdVector, _mm256_and_ps(SEQAN_VECTOR_CAST_(const __m256&, a),
-                                                         SEQAN_VECTOR_CAST_(const __m256&, b)));
-}
-
-template <typename TSimdVector>
-inline TSimdVector _bitwiseAnd(TSimdVector & a, TSimdVector & b, SimdParams_<32, 4>)
-{
-    return SEQAN_VECTOR_CAST_(TSimdVector, _mm256_and_pd(SEQAN_VECTOR_CAST_(const __m256d&, a),
-                                                         SEQAN_VECTOR_CAST_(const __m256d&, b)));
-}
-
 // --------------------------------------------------------------------------
 // _bitwiseAndNot (256bit)
 // --------------------------------------------------------------------------
 
 template <typename TSimdVector, int L>
-inline TSimdVector _bitwiseAndNot(TSimdVector & a, TSimdVector & b, SimdParams_<32, L>)
+inline TSimdVector _bitwiseAndNot(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, L>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector, _mm256_andnot_si256(SEQAN_VECTOR_CAST_(const __m256i&, a),
                                                                SEQAN_VECTOR_CAST_(const __m256i&, b)));
@@ -349,28 +335,28 @@ inline TSimdVector _bitwiseAndNot(TSimdVector & a, TSimdVector & b, SimdParams_<
 // --------------------------------------------------------------------------
 
 template <typename TSimdVector>
-inline TSimdVector _bitwiseNot(TSimdVector & a, SimdParams_<32, 32>)
+inline TSimdVector _bitwiseNot(TSimdVector const & a, SimdParams_<32, 32>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm256_cmpeq_epi8(SEQAN_VECTOR_CAST_(const __m256i&, a), _mm256_setzero_si256()));
 }
 
 template <typename TSimdVector>
-inline TSimdVector _bitwiseNot(TSimdVector & a, SimdParams_<32, 16>)
+inline TSimdVector _bitwiseNot(TSimdVector const & a, SimdParams_<32, 16>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm256_cmpeq_epi16(SEQAN_VECTOR_CAST_(const __m256i&, a), _mm256_setzero_si256()));
 }
 
 template <typename TSimdVector>
-inline TSimdVector _bitwiseNot(TSimdVector & a, SimdParams_<32, 8>)
+inline TSimdVector _bitwiseNot(TSimdVector const & a, SimdParams_<32, 8>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm256_cmpeq_epi32(SEQAN_VECTOR_CAST_(const __m256i&, a), _mm256_setzero_si256()));
 
 }
 template <typename TSimdVector>
-inline TSimdVector _bitwiseNot(TSimdVector & a, SimdParams_<32, 4>)
+inline TSimdVector _bitwiseNot(TSimdVector const & a, SimdParams_<32, 4>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm256_cmpeq_epi64(SEQAN_VECTOR_CAST_(const __m256i&, a), _mm256_setzero_si256()));
@@ -381,25 +367,25 @@ inline TSimdVector _bitwiseNot(TSimdVector & a, SimdParams_<32, 4>)
 // --------------------------------------------------------------------------
 
 template <typename TSimdVector>
-inline TSimdVector _divide(TSimdVector & a, int b, SimdParams_<32, 32>)
+inline TSimdVector _divide(TSimdVector const & a, int b, SimdParams_<32, 32>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector, _mm256_div_epi8(a, _mm256_set1_epi8(b)));
 }
 
 template <typename TSimdVector>
-inline TSimdVector _divide(TSimdVector & a, int b, SimdParams_<32, 16>)
+inline TSimdVector _divide(TSimdVector const & a, int b, SimdParams_<32, 16>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector, _mm256_div_epi16(a, _mm256_set1_epi16(b)));
 }
 
 template <typename TSimdVector>
-inline TSimdVector _divide(TSimdVector & a, int b, SimdParams_<32, 8>)
+inline TSimdVector _divide(TSimdVector const & a, int b, SimdParams_<32, 8>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector, _mm256_div_epi32(a, _mm256_set1_epi32(b)));
 }
 
 template <typename TSimdVector>
-inline TSimdVector _divide(TSimdVector & a, int b, SimdParams_<32, 4>)
+inline TSimdVector _divide(TSimdVector const & a, int b, SimdParams_<32, 4>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector, _mm256_div_epi64(a, _mm256_set1_epi64x(b)));
 }
@@ -409,7 +395,7 @@ inline TSimdVector _divide(TSimdVector & a, int b, SimdParams_<32, 4>)
 // --------------------------------------------------------------------------
 
 template <typename TSimdVector>
-inline TSimdVector _add(TSimdVector & a, TSimdVector & b, SimdParams_<32, 32>)
+inline TSimdVector _add(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 32>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm256_add_epi8(SEQAN_VECTOR_CAST_(const __m256i&, a),
@@ -417,7 +403,7 @@ inline TSimdVector _add(TSimdVector & a, TSimdVector & b, SimdParams_<32, 32>)
 }
 
 template <typename TSimdVector>
-inline TSimdVector _add(TSimdVector & a, TSimdVector & b, SimdParams_<32, 16>)
+inline TSimdVector _add(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 16>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm256_add_epi16(SEQAN_VECTOR_CAST_(const __m256i&, a),
@@ -425,7 +411,7 @@ inline TSimdVector _add(TSimdVector & a, TSimdVector & b, SimdParams_<32, 16>)
 }
 
 template <typename TSimdVector>
-inline TSimdVector _add(TSimdVector & a, TSimdVector & b, SimdParams_<32, 8>)
+inline TSimdVector _add(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 8>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm256_add_epi32(SEQAN_VECTOR_CAST_(const __m256i&, a),
@@ -433,7 +419,7 @@ inline TSimdVector _add(TSimdVector & a, TSimdVector & b, SimdParams_<32, 8>)
 }
 
 template <typename TSimdVector>
-inline TSimdVector _add(TSimdVector & a, TSimdVector & b, SimdParams_<32, 4>)
+inline TSimdVector _add(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 4>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm256_add_epi64(SEQAN_VECTOR_CAST_(const __m256i&, a),
@@ -445,7 +431,7 @@ inline TSimdVector _add(TSimdVector & a, TSimdVector & b, SimdParams_<32, 4>)
 // --------------------------------------------------------------------------
 
 template <typename TSimdVector>
-inline TSimdVector _sub(TSimdVector & a, TSimdVector & b, SimdParams_<32, 32>)
+inline TSimdVector _sub(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 32>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm256_sub_epi8(SEQAN_VECTOR_CAST_(const __m256i&, a),
@@ -453,7 +439,7 @@ inline TSimdVector _sub(TSimdVector & a, TSimdVector & b, SimdParams_<32, 32>)
 }
 
 template <typename TSimdVector>
-inline TSimdVector _sub(TSimdVector & a, TSimdVector & b, SimdParams_<32, 16>)
+inline TSimdVector _sub(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 16>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm256_sub_epi16(SEQAN_VECTOR_CAST_(const __m256i&, a),
@@ -461,7 +447,7 @@ inline TSimdVector _sub(TSimdVector & a, TSimdVector & b, SimdParams_<32, 16>)
 }
 
 template <typename TSimdVector>
-inline TSimdVector _sub(TSimdVector & a, TSimdVector & b, SimdParams_<32, 8>)
+inline TSimdVector _sub(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 8>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm256_sub_epi32(SEQAN_VECTOR_CAST_(const __m256i&, a),
@@ -469,7 +455,7 @@ inline TSimdVector _sub(TSimdVector & a, TSimdVector & b, SimdParams_<32, 8>)
 }
 
 template <typename TSimdVector>
-inline TSimdVector _sub(TSimdVector & a, TSimdVector & b, SimdParams_<32, 4>)
+inline TSimdVector _sub(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 4>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm256_sub_epi64(SEQAN_VECTOR_CAST_(const __m256i&, a),
@@ -481,7 +467,7 @@ inline TSimdVector _sub(TSimdVector & a, TSimdVector & b, SimdParams_<32, 4>)
 // --------------------------------------------------------------------------
 
 template <typename TSimdVector>
-inline TSimdVector _mult(TSimdVector & a, TSimdVector &/*b*/, SimdParams_<32, 32>)
+inline TSimdVector _mult(TSimdVector const & a, TSimdVector const &/*b*/, SimdParams_<32, 32>)
 {
     SEQAN_SKIP_TEST;
     SEQAN_ASSERT_FAIL("AVX2 intrinsics for multiplying 8 bit values not implemented!");
@@ -489,7 +475,7 @@ inline TSimdVector _mult(TSimdVector & a, TSimdVector &/*b*/, SimdParams_<32, 32
 }
 
 template <typename TSimdVector>
-inline TSimdVector _mult(TSimdVector & a, TSimdVector & b, SimdParams_<32, 16>)
+inline TSimdVector _mult(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 16>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm256_mullo_epi16(SEQAN_VECTOR_CAST_(const __m256i&, a),
@@ -497,7 +483,7 @@ inline TSimdVector _mult(TSimdVector & a, TSimdVector & b, SimdParams_<32, 16>)
 }
 
 template <typename TSimdVector>
-inline TSimdVector _mult(TSimdVector & a, TSimdVector & b, SimdParams_<32, 8>)
+inline TSimdVector _mult(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 8>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm256_mullo_epi32(SEQAN_VECTOR_CAST_(const __m256i&, a),
@@ -505,7 +491,7 @@ inline TSimdVector _mult(TSimdVector & a, TSimdVector & b, SimdParams_<32, 8>)
 }
 
 template <typename TSimdVector>
-inline TSimdVector _mult(TSimdVector & a, TSimdVector &/*b*/, SimdParams_<32, 4>)
+inline TSimdVector _mult(TSimdVector const & a, TSimdVector const &/*b*/, SimdParams_<32, 4>)
 {
     SEQAN_SKIP_TEST;
     SEQAN_ASSERT_FAIL("AVX2 intrinsics for multiplying 64 bit values not implemented!");
@@ -517,7 +503,7 @@ inline TSimdVector _mult(TSimdVector & a, TSimdVector &/*b*/, SimdParams_<32, 4>
 // --------------------------------------------------------------------------
 
 template <typename TSimdVector>
-inline TSimdVector _max(TSimdVector & a, TSimdVector & b, SimdParams_<32, 32, int8_t>)
+inline TSimdVector _max(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 32, int8_t>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm256_max_epi8(SEQAN_VECTOR_CAST_(const __m256i&, a),
@@ -525,7 +511,7 @@ inline TSimdVector _max(TSimdVector & a, TSimdVector & b, SimdParams_<32, 32, in
 }
 
 template <typename TSimdVector>
-inline TSimdVector _max(TSimdVector & a, TSimdVector & b, SimdParams_<32, 32, uint8_t>)
+inline TSimdVector _max(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 32, uint8_t>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm256_max_epu8(SEQAN_VECTOR_CAST_(const __m256i&, a),
@@ -533,7 +519,7 @@ inline TSimdVector _max(TSimdVector & a, TSimdVector & b, SimdParams_<32, 32, ui
 }
 
 template <typename TSimdVector>
-inline TSimdVector _max(TSimdVector & a, TSimdVector & b, SimdParams_<32, 16, int16_t>)
+inline TSimdVector _max(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 16, int16_t>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm256_max_epi16(SEQAN_VECTOR_CAST_(const __m256i&, a),
@@ -541,7 +527,7 @@ inline TSimdVector _max(TSimdVector & a, TSimdVector & b, SimdParams_<32, 16, in
 }
 
 template <typename TSimdVector>
-inline TSimdVector _max(TSimdVector & a, TSimdVector & b, SimdParams_<32, 16, uint16_t>)
+inline TSimdVector _max(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 16, uint16_t>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm256_max_epu16(SEQAN_VECTOR_CAST_(const __m256i&, a),
@@ -549,7 +535,7 @@ inline TSimdVector _max(TSimdVector & a, TSimdVector & b, SimdParams_<32, 16, ui
 }
 
 template <typename TSimdVector>
-inline TSimdVector _max(TSimdVector & a, TSimdVector & b, SimdParams_<32, 8, int32_t>)
+inline TSimdVector _max(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 8, int32_t>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm256_max_epi32(SEQAN_VECTOR_CAST_(const __m256i&, a),
@@ -557,7 +543,7 @@ inline TSimdVector _max(TSimdVector & a, TSimdVector & b, SimdParams_<32, 8, int
 }
 
 template <typename TSimdVector>
-inline TSimdVector _max(TSimdVector & a, TSimdVector & b, SimdParams_<32, 8, uint32_t>)
+inline TSimdVector _max(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 8, uint32_t>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm256_max_epu32(SEQAN_VECTOR_CAST_(const __m256i&, a),
@@ -565,7 +551,7 @@ inline TSimdVector _max(TSimdVector & a, TSimdVector & b, SimdParams_<32, 8, uin
 }
 
 template <typename TSimdVector>
-inline TSimdVector _max(TSimdVector & a, TSimdVector & b, SimdParams_<32, 4, int64_t>)
+inline TSimdVector _max(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 4, int64_t>)
 {
     #if defined(__AVX512VL__)
         return SEQAN_VECTOR_CAST_(TSimdVector,
@@ -577,7 +563,7 @@ inline TSimdVector _max(TSimdVector & a, TSimdVector & b, SimdParams_<32, 4, int
 }
 
 template <typename TSimdVector>
-inline TSimdVector _max(TSimdVector & a, TSimdVector & b, SimdParams_<32, 4, uint64_t>)
+inline TSimdVector _max(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 4, uint64_t>)
 {
     #if defined(__AVX512VL__)
         return SEQAN_VECTOR_CAST_(TSimdVector,
@@ -588,6 +574,83 @@ inline TSimdVector _max(TSimdVector & a, TSimdVector & b, SimdParams_<32, 4, uin
     #endif // defined(__AVX512VL__)
 }
 
+
+// --------------------------------------------------------------------------
+// _min (256bit)
+// --------------------------------------------------------------------------
+
+template <typename TSimdVector>
+inline TSimdVector _min(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 32, int8_t>)
+{
+    return SEQAN_VECTOR_CAST_(TSimdVector,
+                              _mm256_min_epi8(SEQAN_VECTOR_CAST_(const __m256i&, a),
+                                              SEQAN_VECTOR_CAST_(const __m256i&, b)));
+}
+
+template <typename TSimdVector>
+inline TSimdVector _min(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 32, uint8_t>)
+{
+    return SEQAN_VECTOR_CAST_(TSimdVector,
+                              _mm256_min_epu8(SEQAN_VECTOR_CAST_(const __m256i&, a),
+                                              SEQAN_VECTOR_CAST_(const __m256i&, b)));
+}
+
+template <typename TSimdVector>
+inline TSimdVector _min(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 16, int16_t>)
+{
+    return SEQAN_VECTOR_CAST_(TSimdVector,
+                              _mm256_min_epi16(SEQAN_VECTOR_CAST_(const __m256i&, a),
+                                               SEQAN_VECTOR_CAST_(const __m256i&, b)));
+}
+
+template <typename TSimdVector>
+inline TSimdVector _min(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 16, uint16_t>)
+{
+    return SEQAN_VECTOR_CAST_(TSimdVector,
+                              _mm256_min_epu16(SEQAN_VECTOR_CAST_(const __m256i&, a),
+                                               SEQAN_VECTOR_CAST_(const __m256i&, b)));
+}
+
+template <typename TSimdVector>
+inline TSimdVector _min(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 8, int32_t>)
+{
+    return SEQAN_VECTOR_CAST_(TSimdVector,
+                              _mm256_min_epi32(SEQAN_VECTOR_CAST_(const __m256i&, a),
+                                               SEQAN_VECTOR_CAST_(const __m256i&, b)));
+}
+
+template <typename TSimdVector>
+inline TSimdVector _min(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 8, uint32_t>)
+{
+    return SEQAN_VECTOR_CAST_(TSimdVector,
+                              _mm256_min_epu32(SEQAN_VECTOR_CAST_(const __m256i&, a),
+                                               SEQAN_VECTOR_CAST_(const __m256i&, b)));
+}
+
+template <typename TSimdVector>
+inline TSimdVector _min(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 4, int64_t>)
+{
+    #if defined(__AVX512VL__)
+        return SEQAN_VECTOR_CAST_(TSimdVector,
+                                  _mm256_min_epi64(SEQAN_VECTOR_CAST_(const __m256i&, a),
+                                                   SEQAN_VECTOR_CAST_(const __m256i&, b)));
+    #else // defined(__AVX512VL__)
+        return blend(a, b, cmpGt(a, b));
+    #endif // defined(__AVX512VL__)
+}
+
+template <typename TSimdVector>
+inline TSimdVector _min(TSimdVector const & a, TSimdVector const & b, SimdParams_<32, 4, uint64_t>)
+{
+    #if defined(__AVX512VL__)
+        return SEQAN_VECTOR_CAST_(TSimdVector,
+                                  _mm256_min_epu64(SEQAN_VECTOR_CAST_(const __m256i&, a),
+                                                   SEQAN_VECTOR_CAST_(const __m256i&, b)));
+    #else // defined(__AVX512VL__)
+        return blend(a, b, cmpGt(a, b));
+    #endif // defined(__AVX512VL__)
+}
+
 // --------------------------------------------------------------------------
 // _blend (256bit)
 // --------------------------------------------------------------------------
@@ -606,7 +669,7 @@ inline TSimdVector _blend(TSimdVector const & a, TSimdVector const & b, TSimdVec
 // --------------------------------------------------------------------------
 
 template <typename T, typename TSimdVector, int L>
-inline void _storeu(T * memAddr, TSimdVector & vec, SimdParams_<32, L>)
+inline void _storeu(T * memAddr, TSimdVector const & vec, SimdParams_<32, L>)
 {
     _mm256_storeu_si256((__m256i*)memAddr, SEQAN_VECTOR_CAST_(const __m256i&, vec));
 }
diff --git a/include/seqan/simd/simd_base_seqan_impl_sse4.2.h b/include/seqan/simd/simd_base_seqan_impl_sse4.2.h
index 8ceba99..8b0bafc 100644
--- a/include/seqan/simd/simd_base_seqan_impl_sse4.2.h
+++ b/include/seqan/simd/simd_base_seqan_impl_sse4.2.h
@@ -209,7 +209,7 @@ inline TSimdVector _createVector(TValue const x, SimdParams_<16, 2>)
 // --------------------------------------------------------------------------
 
 template <typename TSimdVector>
-inline TSimdVector _cmpEq(TSimdVector & a, TSimdVector & b, SimdParams_<16, 16>)
+inline TSimdVector _cmpEq(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 16>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm_cmpeq_epi8(SEQAN_VECTOR_CAST_(const __m128i&, a),
@@ -217,7 +217,7 @@ inline TSimdVector _cmpEq(TSimdVector & a, TSimdVector & b, SimdParams_<16, 16>)
 }
 
 template <typename TSimdVector>
-inline TSimdVector _cmpEq(TSimdVector & a, TSimdVector & b, SimdParams_<16, 8>)
+inline TSimdVector _cmpEq(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 8>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm_cmpeq_epi16(SEQAN_VECTOR_CAST_(const __m128i&, a),
@@ -225,7 +225,7 @@ inline TSimdVector _cmpEq(TSimdVector & a, TSimdVector & b, SimdParams_<16, 8>)
 }
 
 template <typename TSimdVector>
-inline TSimdVector _cmpEq(TSimdVector & a, TSimdVector & b, SimdParams_<16, 4>)
+inline TSimdVector _cmpEq(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 4>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm_cmpeq_epi32(SEQAN_VECTOR_CAST_(const __m128i&, a),
@@ -233,7 +233,7 @@ inline TSimdVector _cmpEq(TSimdVector & a, TSimdVector & b, SimdParams_<16, 4>)
 }
 
 template <typename TSimdVector>
-inline TSimdVector _cmpEq(TSimdVector & a, TSimdVector & b, SimdParams_<16, 2>)
+inline TSimdVector _cmpEq(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 2>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm_cmpeq_epi64(SEQAN_VECTOR_CAST_(const __m128i&, a),
@@ -245,7 +245,7 @@ inline TSimdVector _cmpEq(TSimdVector & a, TSimdVector & b, SimdParams_<16, 2>)
 // --------------------------------------------------------------------------
 
 template <typename TSimdVector>
-inline TSimdVector _cmpGt(TSimdVector & a, TSimdVector & b, SimdParams_<16, 16, int8_t>)
+inline TSimdVector _cmpGt(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 16, int8_t>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm_cmpgt_epi8(SEQAN_VECTOR_CAST_(const __m128i&, a),
@@ -253,7 +253,7 @@ inline TSimdVector _cmpGt(TSimdVector & a, TSimdVector & b, SimdParams_<16, 16,
 }
 
 template <typename TSimdVector>
-inline TSimdVector _cmpGt(TSimdVector & a, TSimdVector & b, SimdParams_<16, 16, uint8_t>)
+inline TSimdVector _cmpGt(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 16, uint8_t>)
 {
     // There is no unsigned cmpgt, we reduce it to the signed case.
     // Note that 0x80 = ~0x7F (prevent overflow messages).
@@ -264,7 +264,7 @@ inline TSimdVector _cmpGt(TSimdVector & a, TSimdVector & b, SimdParams_<16, 16,
 }
 
 template <typename TSimdVector>
-inline TSimdVector _cmpGt(TSimdVector & a, TSimdVector & b, SimdParams_<16, 8, int16_t>)
+inline TSimdVector _cmpGt(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 8, int16_t>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm_cmpgt_epi16(SEQAN_VECTOR_CAST_(const __m128i&, a),
@@ -272,7 +272,7 @@ inline TSimdVector _cmpGt(TSimdVector & a, TSimdVector & b, SimdParams_<16, 8, i
 }
 
 template <typename TSimdVector>
-inline TSimdVector _cmpGt(TSimdVector & a, TSimdVector & b, SimdParams_<16, 8, uint16_t>)
+inline TSimdVector _cmpGt(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 8, uint16_t>)
 {
     // There is no unsigned cmpgt, we reduce it to the signed case.
     // Note that 0x8000 = ~0x7FFF (prevent overflow messages).
@@ -283,7 +283,7 @@ inline TSimdVector _cmpGt(TSimdVector & a, TSimdVector & b, SimdParams_<16, 8, u
 }
 
 template <typename TSimdVector>
-inline TSimdVector _cmpGt(TSimdVector & a, TSimdVector & b, SimdParams_<16, 4, int32_t>)
+inline TSimdVector _cmpGt(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 4, int32_t>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm_cmpgt_epi32(SEQAN_VECTOR_CAST_(const __m128i&, a),
@@ -291,7 +291,7 @@ inline TSimdVector _cmpGt(TSimdVector & a, TSimdVector & b, SimdParams_<16, 4, i
 }
 
 template <typename TSimdVector>
-inline TSimdVector _cmpGt(TSimdVector & a, TSimdVector & b, SimdParams_<16, 4, uint32_t>)
+inline TSimdVector _cmpGt(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 4, uint32_t>)
 {
     // There is no unsigned cmpgt, we reduce it to the signed case.
     // Note that 0x80000000 = ~0x7FFFFFFF (prevent overflow messages).
@@ -302,7 +302,7 @@ inline TSimdVector _cmpGt(TSimdVector & a, TSimdVector & b, SimdParams_<16, 4, u
 }
 
 template <typename TSimdVector>
-inline TSimdVector _cmpGt(TSimdVector & a, TSimdVector & b, SimdParams_<16, 2, int64_t>)
+inline TSimdVector _cmpGt(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 2, int64_t>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm_cmpgt_epi64(SEQAN_VECTOR_CAST_(const __m128i&, a),
@@ -310,7 +310,7 @@ inline TSimdVector _cmpGt(TSimdVector & a, TSimdVector & b, SimdParams_<16, 2, i
 }
 
 template <typename TSimdVector>
-inline TSimdVector _cmpGt(TSimdVector & a, TSimdVector & b, SimdParams_<16, 2, uint64_t>)
+inline TSimdVector _cmpGt(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 2, uint64_t>)
 {
     // There is no unsigned cmpgt, we reduce it to the signed case.
     // Note that 0x8000000000000000ul = ~0x7FFFFFFFFFFFFFFFul (prevent overflow messages).
@@ -325,7 +325,7 @@ inline TSimdVector _cmpGt(TSimdVector & a, TSimdVector & b, SimdParams_<16, 2, u
 // --------------------------------------------------------------------------
 
 template <typename TSimdVector, int L>
-inline TSimdVector _bitwiseOr(TSimdVector & a, TSimdVector & b, SimdParams_<16, L>)
+inline TSimdVector _bitwiseOr(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, L>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm_or_si128(SEQAN_VECTOR_CAST_(const __m128i&, a),
@@ -337,7 +337,7 @@ inline TSimdVector _bitwiseOr(TSimdVector & a, TSimdVector & b, SimdParams_<16,
 // --------------------------------------------------------------------------
 
 template <typename TSimdVector, int L>
-inline TSimdVector _bitwiseAnd(TSimdVector & a, TSimdVector & b, SimdParams_<16, L>)
+inline TSimdVector _bitwiseAnd(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, L>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm_and_si128(SEQAN_VECTOR_CAST_(const __m128i&, a),
@@ -349,7 +349,7 @@ inline TSimdVector _bitwiseAnd(TSimdVector & a, TSimdVector & b, SimdParams_<16,
 // --------------------------------------------------------------------------
 
 template <typename TSimdVector, int L>
-inline TSimdVector _bitwiseAndNot(TSimdVector & a, TSimdVector & b, SimdParams_<16, L>)
+inline TSimdVector _bitwiseAndNot(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, L>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm_andnot_si128(SEQAN_VECTOR_CAST_(const __m128i&, a),
@@ -361,7 +361,7 @@ inline TSimdVector _bitwiseAndNot(TSimdVector & a, TSimdVector & b, SimdParams_<
 // --------------------------------------------------------------------------
 
 template <typename TSimdVector>
-inline TSimdVector _bitwiseNot(TSimdVector & a, SimdParams_<16, 16>)
+inline TSimdVector _bitwiseNot(TSimdVector const & a, SimdParams_<16, 16>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm_cmpeq_epi8(SEQAN_VECTOR_CAST_(const __m128i&, a),
@@ -369,7 +369,7 @@ inline TSimdVector _bitwiseNot(TSimdVector & a, SimdParams_<16, 16>)
 }
 
 template <typename TSimdVector>
-inline TSimdVector _bitwiseNot(TSimdVector & a, SimdParams_<16, 8>)
+inline TSimdVector _bitwiseNot(TSimdVector const & a, SimdParams_<16, 8>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm_cmpeq_epi16(SEQAN_VECTOR_CAST_(const __m128i&, a),
@@ -377,7 +377,7 @@ inline TSimdVector _bitwiseNot(TSimdVector & a, SimdParams_<16, 8>)
 }
 
 template <typename TSimdVector>
-inline TSimdVector _bitwiseNot(TSimdVector & a, SimdParams_<16, 4>)
+inline TSimdVector _bitwiseNot(TSimdVector const & a, SimdParams_<16, 4>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm_cmpeq_epi32(SEQAN_VECTOR_CAST_(const __m128i&, a),
@@ -385,7 +385,7 @@ inline TSimdVector _bitwiseNot(TSimdVector & a, SimdParams_<16, 4>)
 }
 
 template <typename TSimdVector>
-inline TSimdVector _bitwiseNot(TSimdVector & a, SimdParams_<16, 2>)
+inline TSimdVector _bitwiseNot(TSimdVector const & a, SimdParams_<16, 2>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm_cmpeq_epi64(SEQAN_VECTOR_CAST_(const __m128i&, a),
@@ -397,25 +397,25 @@ inline TSimdVector _bitwiseNot(TSimdVector & a, SimdParams_<16, 2>)
 // --------------------------------------------------------------------------
 
 template <typename TSimdVector>
-inline TSimdVector _divide(TSimdVector & a, int b, SimdParams_<16, 16>)
+inline TSimdVector _divide(TSimdVector const & a, int b, SimdParams_<16, 16>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector, _mm_div_epi8(a, _mm_set1_epi8(b)));
 }
 
 template <typename TSimdVector>
-inline TSimdVector _divide(TSimdVector & a, int b, SimdParams_<16, 8>)
+inline TSimdVector _divide(TSimdVector const & a, int b, SimdParams_<16, 8>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector, _mm_div_epi16(a, _mm_set1_epi16(b)));
 }
 
 template <typename TSimdVector>
-inline TSimdVector _divide(TSimdVector & a, int b, SimdParams_<16, 4>)
+inline TSimdVector _divide(TSimdVector const & a, int b, SimdParams_<16, 4>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector, _mm_div_epi32(a, _mm_set1_epi32(b)));
 }
 
 template <typename TSimdVector>
-inline TSimdVector _divide(TSimdVector & a, int b, SimdParams_<16, 2>)
+inline TSimdVector _divide(TSimdVector const & a, int b, SimdParams_<16, 2>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector, _mm_div_epi64(a, _mm_set1_epi64x(b)));
 }
@@ -425,7 +425,7 @@ inline TSimdVector _divide(TSimdVector & a, int b, SimdParams_<16, 2>)
 // --------------------------------------------------------------------------
 
 template <typename TSimdVector>
-inline TSimdVector _add(TSimdVector & a, TSimdVector & b, SimdParams_<16, 16>)
+inline TSimdVector _add(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 16>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm_add_epi8(SEQAN_VECTOR_CAST_(const __m128i&, a),
@@ -433,7 +433,7 @@ inline TSimdVector _add(TSimdVector & a, TSimdVector & b, SimdParams_<16, 16>)
 }
 
 template <typename TSimdVector>
-inline TSimdVector _add(TSimdVector & a, TSimdVector & b, SimdParams_<16, 8>)
+inline TSimdVector _add(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 8>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm_add_epi16(SEQAN_VECTOR_CAST_(const __m128i&, a),
@@ -441,7 +441,7 @@ inline TSimdVector _add(TSimdVector & a, TSimdVector & b, SimdParams_<16, 8>)
 }
 
 template <typename TSimdVector>
-inline TSimdVector _add(TSimdVector & a, TSimdVector & b, SimdParams_<16, 4>)
+inline TSimdVector _add(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 4>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm_add_epi32(SEQAN_VECTOR_CAST_(const __m128i&, a),
@@ -449,7 +449,7 @@ inline TSimdVector _add(TSimdVector & a, TSimdVector & b, SimdParams_<16, 4>)
 }
 
 template <typename TSimdVector>
-inline TSimdVector _add(TSimdVector & a, TSimdVector & b, SimdParams_<16, 2>)
+inline TSimdVector _add(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 2>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm_add_epi64(SEQAN_VECTOR_CAST_(const __m128i&, a),
@@ -461,7 +461,7 @@ inline TSimdVector _add(TSimdVector & a, TSimdVector & b, SimdParams_<16, 2>)
 // --------------------------------------------------------------------------
 
 template <typename TSimdVector>
-inline TSimdVector _sub(TSimdVector & a, TSimdVector & b, SimdParams_<16, 16>)
+inline TSimdVector _sub(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 16>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm_sub_epi8(SEQAN_VECTOR_CAST_(const __m128i&, a),
@@ -469,7 +469,7 @@ inline TSimdVector _sub(TSimdVector & a, TSimdVector & b, SimdParams_<16, 16>)
 }
 
 template <typename TSimdVector>
-inline TSimdVector _sub(TSimdVector & a, TSimdVector & b, SimdParams_<16, 8>)
+inline TSimdVector _sub(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 8>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm_sub_epi16(SEQAN_VECTOR_CAST_(const __m128i&, a),
@@ -477,7 +477,7 @@ inline TSimdVector _sub(TSimdVector & a, TSimdVector & b, SimdParams_<16, 8>)
 }
 
 template <typename TSimdVector>
-inline TSimdVector _sub(TSimdVector & a, TSimdVector & b, SimdParams_<16, 4>)
+inline TSimdVector _sub(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 4>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm_sub_epi32(SEQAN_VECTOR_CAST_(const __m128i&, a),
@@ -485,7 +485,7 @@ inline TSimdVector _sub(TSimdVector & a, TSimdVector & b, SimdParams_<16, 4>)
 }
 
 template <typename TSimdVector>
-inline TSimdVector _sub(TSimdVector & a, TSimdVector & b, SimdParams_<16, 2>)
+inline TSimdVector _sub(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 2>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm_sub_epi64(SEQAN_VECTOR_CAST_(const __m128i&, a),
@@ -497,14 +497,14 @@ inline TSimdVector _sub(TSimdVector & a, TSimdVector & b, SimdParams_<16, 2>)
 // --------------------------------------------------------------------------
 
 template <typename TSimdVector>
-inline TSimdVector _mult(TSimdVector & a, TSimdVector &/*b*/, SimdParams_<16, 16>)
+inline TSimdVector _mult(TSimdVector const & a, TSimdVector const &/*b*/, SimdParams_<16, 16>)
 {
     SEQAN_ASSERT_FAIL("SSE intrinsics for multiplying 8 bit values not implemented!");
     return a;
 }
 
 template <typename TSimdVector>
-inline TSimdVector _mult(TSimdVector & a, TSimdVector & b, SimdParams_<16, 8>)
+inline TSimdVector _mult(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 8>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm_mullo_epi16(SEQAN_VECTOR_CAST_(const __m128i&, a),
@@ -512,7 +512,7 @@ inline TSimdVector _mult(TSimdVector & a, TSimdVector & b, SimdParams_<16, 8>)
 }
 
 template <typename TSimdVector>
-inline TSimdVector _mult(TSimdVector & a, TSimdVector & b, SimdParams_<16, 4>)
+inline TSimdVector _mult(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 4>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm_mullo_epi32(SEQAN_VECTOR_CAST_(const __m128i&, a),
@@ -520,7 +520,7 @@ inline TSimdVector _mult(TSimdVector & a, TSimdVector & b, SimdParams_<16, 4>)
 }
 
 template <typename TSimdVector>
-inline TSimdVector _mult(TSimdVector & a, TSimdVector &/*b*/, SimdParams_<16, 2>)
+inline TSimdVector _mult(TSimdVector const & a, TSimdVector const &/*b*/, SimdParams_<16, 2>)
 {
     SEQAN_ASSERT_FAIL("SSE intrinsics for multiplying 64 bit values not implemented!");
     return a;
@@ -531,7 +531,7 @@ inline TSimdVector _mult(TSimdVector & a, TSimdVector &/*b*/, SimdParams_<16, 2>
 // --------------------------------------------------------------------------
 
 template <typename TSimdVector>
-inline TSimdVector _max(TSimdVector & a, TSimdVector & b, SimdParams_<16, 16, int8_t>)
+inline TSimdVector _max(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 16, int8_t>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm_max_epi8(SEQAN_VECTOR_CAST_(const __m128i&, a),
@@ -539,7 +539,7 @@ inline TSimdVector _max(TSimdVector & a, TSimdVector & b, SimdParams_<16, 16, in
 }
 
 template <typename TSimdVector>
-inline TSimdVector _max(TSimdVector & a, TSimdVector & b, SimdParams_<16, 16, uint8_t>)
+inline TSimdVector _max(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 16, uint8_t>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm_max_epu8(SEQAN_VECTOR_CAST_(const __m128i&, a),
@@ -547,7 +547,7 @@ inline TSimdVector _max(TSimdVector & a, TSimdVector & b, SimdParams_<16, 16, ui
 }
 
 template <typename TSimdVector>
-inline TSimdVector _max(TSimdVector & a, TSimdVector & b, SimdParams_<16, 8, int16_t>)
+inline TSimdVector _max(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 8, int16_t>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm_max_epi16(SEQAN_VECTOR_CAST_(const __m128i&, a),
@@ -555,7 +555,7 @@ inline TSimdVector _max(TSimdVector & a, TSimdVector & b, SimdParams_<16, 8, int
 }
 
 template <typename TSimdVector>
-inline TSimdVector _max(TSimdVector & a, TSimdVector & b, SimdParams_<16, 8, uint16_t>)
+inline TSimdVector _max(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 8, uint16_t>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm_max_epu16(SEQAN_VECTOR_CAST_(const __m128i&, a),
@@ -563,7 +563,7 @@ inline TSimdVector _max(TSimdVector & a, TSimdVector & b, SimdParams_<16, 8, uin
 }
 
 template <typename TSimdVector>
-inline TSimdVector _max(TSimdVector & a, TSimdVector & b, SimdParams_<16, 4, int32_t>)
+inline TSimdVector _max(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 4, int32_t>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm_max_epi32(SEQAN_VECTOR_CAST_(const __m128i&, a),
@@ -571,7 +571,7 @@ inline TSimdVector _max(TSimdVector & a, TSimdVector & b, SimdParams_<16, 4, int
 }
 
 template <typename TSimdVector>
-inline TSimdVector _max(TSimdVector & a, TSimdVector & b, SimdParams_<16, 4, uint32_t>)
+inline TSimdVector _max(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 4, uint32_t>)
 {
     return SEQAN_VECTOR_CAST_(TSimdVector,
                               _mm_max_epu32(SEQAN_VECTOR_CAST_(const __m128i&, a),
@@ -579,7 +579,7 @@ inline TSimdVector _max(TSimdVector & a, TSimdVector & b, SimdParams_<16, 4, uin
 }
 
 template <typename TSimdVector>
-inline TSimdVector _max(TSimdVector & a, TSimdVector & b, SimdParams_<16, 2, int64_t>)
+inline TSimdVector _max(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 2, int64_t>)
 {
 #if defined(__AVX512VL__)
     return SEQAN_VECTOR_CAST_(TSimdVector,
@@ -591,7 +591,7 @@ inline TSimdVector _max(TSimdVector & a, TSimdVector & b, SimdParams_<16, 2, int
 }
 
 template <typename TSimdVector>
-inline TSimdVector _max(TSimdVector & a, TSimdVector & b, SimdParams_<16, 2, uint64_t>)
+inline TSimdVector _max(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 2, uint64_t>)
 {
 #if defined(__AVX512VL__)
     return SEQAN_VECTOR_CAST_(TSimdVector,
@@ -602,6 +602,83 @@ inline TSimdVector _max(TSimdVector & a, TSimdVector & b, SimdParams_<16, 2, uin
 #endif // defined(__AVX512VL__)
 }
 
+
+// --------------------------------------------------------------------------
+// _min (128bit)
+// --------------------------------------------------------------------------
+
+template <typename TSimdVector>
+inline TSimdVector _min(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 16, int8_t>)
+{
+    return SEQAN_VECTOR_CAST_(TSimdVector,
+                              _mm_min_epi8(SEQAN_VECTOR_CAST_(const __m128i&, a),
+                                           SEQAN_VECTOR_CAST_(const __m128i&, b)));
+}
+
+template <typename TSimdVector>
+inline TSimdVector _min(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 16, uint8_t>)
+{
+    return SEQAN_VECTOR_CAST_(TSimdVector,
+                              _mm_min_epu8(SEQAN_VECTOR_CAST_(const __m128i&, a),
+                                           SEQAN_VECTOR_CAST_(const __m128i&, b)));
+}
+
+template <typename TSimdVector>
+inline TSimdVector _min(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 8, int16_t>)
+{
+    return SEQAN_VECTOR_CAST_(TSimdVector,
+                              _mm_min_epi16(SEQAN_VECTOR_CAST_(const __m128i&, a),
+                                            SEQAN_VECTOR_CAST_(const __m128i&, b)));
+}
+
+template <typename TSimdVector>
+inline TSimdVector _min(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 8, uint16_t>)
+{
+    return SEQAN_VECTOR_CAST_(TSimdVector,
+                              _mm_min_epu16(SEQAN_VECTOR_CAST_(const __m128i&, a),
+                                            SEQAN_VECTOR_CAST_(const __m128i&, b)));
+}
+
+template <typename TSimdVector>
+inline TSimdVector _min(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 4, int32_t>)
+{
+    return SEQAN_VECTOR_CAST_(TSimdVector,
+                              _mm_min_epi32(SEQAN_VECTOR_CAST_(const __m128i&, a),
+                                            SEQAN_VECTOR_CAST_(const __m128i&, b)));
+}
+
+template <typename TSimdVector>
+inline TSimdVector _min(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 4, uint32_t>)
+{
+    return SEQAN_VECTOR_CAST_(TSimdVector,
+                              _mm_min_epu32(SEQAN_VECTOR_CAST_(const __m128i&, a),
+                                            SEQAN_VECTOR_CAST_(const __m128i&, b)));
+}
+
+template <typename TSimdVector>
+inline TSimdVector _min(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 2, int64_t>)
+{
+#if defined(__AVX512VL__)
+    return SEQAN_VECTOR_CAST_(TSimdVector,
+                              _mm_min_epi64(SEQAN_VECTOR_CAST_(const __m128i&, a),
+                                            SEQAN_VECTOR_CAST_(const __m128i&, b)));
+#else // defined(__AVX512VL__)
+    return blend(a, b, cmpGt(a, b));
+#endif // defined(__AVX512VL__)
+}
+
+template <typename TSimdVector>
+inline TSimdVector _min(TSimdVector const & a, TSimdVector const & b, SimdParams_<16, 2, uint64_t>)
+{
+#if defined(__AVX512VL__)
+    return SEQAN_VECTOR_CAST_(TSimdVector,
+                              _mm_min_epu64(SEQAN_VECTOR_CAST_(const __m128i&, a),
+                                            SEQAN_VECTOR_CAST_(const __m128i&, b)));
+#else // defined(__AVX512VL__)
+    return blend(a, b, cmpGt(a, b));
+#endif // defined(__AVX512VL__)
+}
+
 // --------------------------------------------------------------------------
 // _blend (128bit)
 // --------------------------------------------------------------------------
@@ -620,7 +697,7 @@ inline TSimdVector _blend(TSimdVector const & a, TSimdVector const & b, TSimdVec
 // --------------------------------------------------------------------------
 
 template <typename T, typename TSimdVector, int L>
-inline void _storeu(T * memAddr, TSimdVector & vec, SimdParams_<16, L>)
+inline void _storeu(T * memAddr, TSimdVector const & vec, SimdParams_<16, L>)
 {
     _mm_storeu_si128((__m128i*)memAddr, reinterpret_cast<const __m128i &>(vec));
 }
diff --git a/include/seqan/simd/simd_base_seqan_interface.h b/include/seqan/simd/simd_base_seqan_interface.h
index 92114c9..add88d0 100644
--- a/include/seqan/simd/simd_base_seqan_interface.h
+++ b/include/seqan/simd/simd_base_seqan_interface.h
@@ -173,6 +173,18 @@ max(TSimdVector const & a, TSimdVector const & b)
 }
 
 // --------------------------------------------------------------------------
+// Function min()
+// --------------------------------------------------------------------------
+
+template <typename TSimdVector>
+inline SEQAN_FUNC_ENABLE_IF(Is<SimdVectorConcept<TSimdVector> >, TSimdVector)
+min(TSimdVector const & a, TSimdVector const & b)
+{
+    typedef typename Value<TSimdVector>::Type TValue;
+    return _min(a, b, SimdParams_<sizeof(TSimdVector), sizeof(TSimdVector) / sizeof(TValue), TValue>());
+}
+
+// --------------------------------------------------------------------------
 // Function operator|()
 // --------------------------------------------------------------------------
 
diff --git a/include/seqan/simd/simd_base_umesimd_impl.h b/include/seqan/simd/simd_base_umesimd_impl.h
index ea8f632..4bf54a8 100644
--- a/include/seqan/simd/simd_base_umesimd_impl.h
+++ b/include/seqan/simd/simd_base_umesimd_impl.h
@@ -390,6 +390,17 @@ max(TSimdVector const & a, TSimdVector const & b)
 }
 
 // --------------------------------------------------------------------------
+// Function min()
+// --------------------------------------------------------------------------
+
+template <typename TSimdVector>
+inline SEQAN_FUNC_ENABLE_IF(Is<SimdVectorConcept<TSimdVector> >, TSimdVector)
+min(TSimdVector const & a, TSimdVector const & b)
+{
+    return a.min(b);
+}
+
+// --------------------------------------------------------------------------
 // Function operator|()
 // --------------------------------------------------------------------------
 
diff --git a/include/seqan/statistics/statistics_markov_model.h b/include/seqan/statistics/statistics_markov_model.h
index d77948d..2390fb6 100644
--- a/include/seqan/statistics/statistics_markov_model.h
+++ b/include/seqan/statistics/statistics_markov_model.h
@@ -643,7 +643,7 @@ String<TValue> _ludcmp(Matrix<TValue,2> &result)
     double const TINY = 1.0e-20;
     int n = length(result,0);
     int i, imax, j, k,d;
-    imax = MinValue<int>::VALUE;
+    imax = std::numeric_limits<int>::min();
     double big,dum,sum,temp;
     String<TValue> vv;
     resize(vv, n, 1.0);
diff --git a/include/seqan/store/store_align.h b/include/seqan/store/store_align.h
index f6fa531..5fa7db2 100644
--- a/include/seqan/store/store_align.h
+++ b/include/seqan/store/store_align.h
@@ -196,7 +196,7 @@ TStream & operator<<(TStream & stream, AlignedReadStoreElement<TPos, TGapAnchor,
 
 template <typename TPos, typename TGapAnchor, typename TSpec>
 const typename Id<AlignedReadStoreElement<TPos, TGapAnchor, TSpec> >::Type
-AlignedReadStoreElement<TPos, TGapAnchor, TSpec>::INVALID_ID = MaxValue<typename Id<AlignedReadStoreElement<TPos, TGapAnchor, TSpec> >::Type>::VALUE;
+AlignedReadStoreElement<TPos, TGapAnchor, TSpec>::INVALID_ID = std::numeric_limits<typename Id<AlignedReadStoreElement<TPos, TGapAnchor, TSpec> >::Type>::max();
 
 //////////////////////////////////////////////////////////////////////////////
 
@@ -240,7 +240,7 @@ struct AlignQualityStoreElement
     AlignQualityStoreElement():
         pairScore(0),
         score(0),
-        errors(MaxValue<unsigned char>::VALUE) {}
+        errors(std::numeric_limits<unsigned char>::max()) {}
 
     AlignQualityStoreElement(TScore _pairScore, TScore _score, unsigned char _errors):
         pairScore(_pairScore),
diff --git a/include/seqan/store/store_all.h b/include/seqan/store/store_all.h
index 51b02dd..f44b20d 100644
--- a/include/seqan/store/store_all.h
+++ b/include/seqan/store/store_all.h
@@ -520,15 +520,15 @@ public:
         annotationKeyStoreCache(annotationKeyStore)
     {
         // ATTENTION: The order of these keywords must correspond to the order of the enums above.
-        appendName(annotationTypeStore, "<root>", annotationTypeStoreCache);
-        appendName(annotationTypeStore, "<deleted>", annotationTypeStoreCache);
-        appendName(annotationTypeStore, "gene", annotationTypeStoreCache);
-        appendName(annotationTypeStore, "mRNA", annotationTypeStoreCache);
-        appendName(annotationTypeStore, "CDS", annotationTypeStoreCache);
-        appendName(annotationTypeStore, "exon", annotationTypeStoreCache);
-        appendName(annotationTypeStore, "five_prime_UTR", annotationTypeStoreCache);
-        appendName(annotationTypeStore, "intron", annotationTypeStoreCache);
-        appendName(annotationTypeStore, "three_prime_UTR", annotationTypeStoreCache);
+        appendName(annotationTypeStoreCache, "<root>");
+        appendName(annotationTypeStoreCache, "<deleted>");
+        appendName(annotationTypeStoreCache, "gene");
+        appendName(annotationTypeStoreCache, "mRNA");
+        appendName(annotationTypeStoreCache, "CDS");
+        appendName(annotationTypeStoreCache, "exon");
+        appendName(annotationTypeStoreCache, "five_prime_UTR");
+        appendName(annotationTypeStoreCache, "intron");
+        appendName(annotationTypeStoreCache, "three_prime_UTR");
         _storeClearAnnotations(*this);
     }
 
@@ -717,7 +717,7 @@ _storeAppendRead (
     typedef typename Value<typename TFragmentStore::TMatePairStore>::Type TMatePairElement;
 
     // search for readId by name (could be me or my mate)
-    bool found = getIdByName(fragStore.readNameStore, qname, readId, fragStore.readNameStoreCache);
+    bool found = getIdByName(readId, fragStore.readNameStoreCache, qname);
 
     // if naming scheme is xx/1, xx/2 or xx/L, xx/R try to look up my mate
     if (!found && (flag & 1) == 1 && length(qname) >= 2 && qname[length(qname) - 2] == '/')
@@ -735,7 +735,7 @@ _storeAppendRead (
             mate = qname;
             back(mate) = (tag == 'L')? 'R': 'L';
         }
-        found = getIdByName(fragStore.readNameStore, mate, readId, fragStore.readNameStoreCache);
+        found = getIdByName(readId, fragStore.readNameStoreCache, mate);
     }
 
     if (found)
@@ -758,7 +758,7 @@ _storeAppendRead (
                     // set sequence and mate pair ID in new read store element
                     readId = appendRead(fragStore, readSeq, matePairId);
                     // add the identifier to the read name store
-                    appendName(fragStore.readNameStore, qname, fragStore.readNameStoreCache);
+                    appendName(fragStore.readNameStoreCache, qname);
                     // set the ID in the mate pair store
                     fragStore.matePairStore[matePairId].readId[inPair] = readId;
                     return true;
@@ -790,7 +790,7 @@ _storeAppendRead (
     else
         appendRead(fragStore, readSeq);
 
-    appendName(fragStore.readNameStore, qname, fragStore.readNameStoreCache);
+    appendName(fragStore.readNameStoreCache, qname);
     return true;
 }
 
@@ -810,13 +810,13 @@ _storeAppendContig (
     typedef FragmentStore<TSpec, TConfig> TFragmentStore;
     typedef typename Value<typename TFragmentStore::TContigStore>::Type TContigElement;
 
-    if (!getIdByName(fragStore.contigNameStore, rName, contigId, fragStore.contigNameStoreCache))
+    if (!getIdByName(contigId, fragStore.contigNameStoreCache, rName))
     {
         // if the contig is not in the store yet
         // set the ID on the last entry after appending
         contigId = length(fragStore.contigStore);
         // append contig store
-        appendName(fragStore.contigNameStore, rName, fragStore.contigNameStoreCache);
+        appendName(fragStore.contigNameStoreCache, rName);
         appendValue(fragStore.contigStore, TContigElement());
 //        std::cout << "added contig:" << rName << std::endl;
     }
@@ -837,12 +837,12 @@ _storeAppendAnnotationName (
     TTypeId typeId)
 {
     SEQAN_ASSERT_EQ(length(fragStore.annotationStore), length(fragStore.annotationNameStore));
-    if (!empty(annotationName) && getIdByName(fragStore.annotationNameStore, annotationName, annotationId, fragStore.annotationNameStoreCache))
+    if (!empty(annotationName) && getIdByName(annotationId, fragStore.annotationNameStoreCache, annotationName))
     {
         do
         {
             // allow different annotations to have the same name (but different typeId)
-            if (typeId == maxValue<TTypeId>() || fragStore.annotationStore[annotationId].typeId == typeId)
+            if (typeId == std::numeric_limits<TTypeId>::max() || fragStore.annotationStore[annotationId].typeId == typeId)
                 return;
             ++annotationId;
         } while (annotationId < length(fragStore.annotationNameStore) && fragStore.annotationNameStore[annotationId] == annotationName);
@@ -851,7 +851,7 @@ _storeAppendAnnotationName (
     // set the ID on the last entry after appending
     annotationId = length(fragStore.annotationNameStore);
     // append to annotationName store
-    appendName(fragStore.annotationNameStore, annotationName, fragStore.annotationNameStoreCache);
+    appendName(fragStore.annotationNameStoreCache, annotationName);
     // we also need to append an annotation to store the typeId in case of duplicate annotation names
     resize(fragStore.annotationStore, length(fragStore.annotationStore) + 1);
     back(fragStore.annotationStore).typeId = typeId;
@@ -864,7 +864,7 @@ _storeAppendAnnotationName (
     TId & annotationId,
     TName & annotationName)
 {
-    _storeAppendAnnotationName(fragStore, annotationId, annotationName, maxValue<TId>());
+    _storeAppendAnnotationName(fragStore, annotationId, annotationName, std::numeric_limits<TId>::max());
 }
 
 template <typename TSpec, typename TConfig, typename TId, typename TName>
@@ -874,14 +874,14 @@ _storeAppendType (
     TId & typeId,
     TName & annotationType)
 {
-    if (!getIdByName(fragStore.annotationTypeStore, annotationType, typeId, fragStore.annotationTypeStoreCache))
+    if (!getIdByName(typeId, fragStore.annotationTypeStoreCache, annotationType))
     {
         // if the annotation type name is not in the store yet
         // set the ID on the last entry after appending
         typeId = length(fragStore.annotationTypeStore);
         // append to annotationType store
         if (!empty(annotationType))
-            appendName(fragStore.annotationTypeStore, annotationType, fragStore.annotationTypeStoreCache);
+            appendName(fragStore.annotationTypeStoreCache, annotationType);
 //        std::cout << "added type:" << annotationType << std::endl;
     }
 }
@@ -893,14 +893,14 @@ _storeAppendKey (
     TId & keyId,
     TName & annotationKey)
 {
-    if (!getIdByName(fragStore.annotationKeyStore, annotationKey, keyId, fragStore.annotationKeyStoreCache))
+    if (!getIdByName(keyId, fragStore.annotationKeyStoreCache, annotationKey))
     {
         // if the key name is not in the store yet
         // set the ID on the last entry after appending
         keyId = length(fragStore.annotationKeyStore);
         // append to annotationKey store
         if (!empty(annotationKey))
-            appendName(fragStore.annotationKeyStore, annotationKey, fragStore.annotationKeyStoreCache);
+            appendName(fragStore.annotationKeyStoreCache, annotationKey);
 //        std::cout << "added key:" << annotationKey << std::endl;
     }
 }
@@ -937,7 +937,7 @@ annotationGetValueByKey (
     typedef typename Size<TValues>::Type    TKeyId;
 
     TKeyId keyId = 0;
-    if (!getIdByName(fragStore.annotationKeyStore, key, keyId, fragStore.annotationKeyStoreCache))
+    if (!getIdByName(keyId, fragStore.annotationKeyStoreCache, key))
         return false;
 
     if (keyId >= length(annotation.values))
@@ -963,7 +963,7 @@ annotationGetValueIdByKey (
     static const typename Value<typename TAnnotation::TValues const>::Type emptyString;
 
     TKeyId keyId = 0;
-    if (getIdByName(fragStore.annotationKeyStore, key, keyId, fragStore.annotationKeyStoreCache))
+    if (getIdByName(keyId, fragStore.annotationKeyStoreCache, key))
         if (keyId < length(annotation.values) && !empty(annotation.values[keyId]))
             return keyId;
     return TAnnotation::INVALID_ID;
diff --git a/include/seqan/store/store_annotation.h b/include/seqan/store/store_annotation.h
index 85b6946..595d3a3 100644
--- a/include/seqan/store/store_annotation.h
+++ b/include/seqan/store/store_annotation.h
@@ -164,11 +164,11 @@ struct AnnotationStoreElement
 
 template <typename TPos, typename TSpec>
 const typename Id<AnnotationStoreElement<TPos, TSpec> >::Type
-AnnotationStoreElement<TPos, TSpec>::INVALID_ID = MaxValue<typename Id<AnnotationStoreElement<TPos, TSpec> >::Type>::VALUE;
+AnnotationStoreElement<TPos, TSpec>::INVALID_ID = std::numeric_limits<typename Id<AnnotationStoreElement<TPos, TSpec> >::Type>::max();
 
 template <typename TPos, typename TSpec>
 const TPos
-AnnotationStoreElement<TPos, TSpec>::INVALID_POS = MaxValue<TPos>::VALUE;
+AnnotationStoreElement<TPos, TSpec>::INVALID_POS = std::numeric_limits<TPos>::max();
 
 //////////////////////////////////////////////////////////////////////////////
 
diff --git a/include/seqan/store/store_contig.h b/include/seqan/store/store_contig.h
index a5b59e8..bdc518c 100644
--- a/include/seqan/store/store_contig.h
+++ b/include/seqan/store/store_contig.h
@@ -155,7 +155,7 @@ struct ContigStoreElement
 
 template <typename TContigSeq_, typename TGapAnchor_, typename TSpec_>
 const typename Id<ContigStoreElement<TContigSeq_, TGapAnchor_, TSpec_> >::Type
-ContigStoreElement<TContigSeq_, TGapAnchor_, TSpec_>::INVALID_ID = MaxValue<typename Id<ContigStoreElement<TContigSeq_, TGapAnchor_, TSpec_> >::Type>::VALUE;
+ContigStoreElement<TContigSeq_, TGapAnchor_, TSpec_>::INVALID_ID = std::numeric_limits<typename Id<ContigStoreElement<TContigSeq_, TGapAnchor_, TSpec_> >::Type>::max();
 
 //////////////////////////////////////////////////////////////////////////////
 
@@ -192,13 +192,11 @@ struct ContigFile
     static const TId INVALID_ID;
 
     CharString        fileName;
-    AutoSeqFormat    format;
     TId                firstContigId;    // first sequence of the file corresponds to this contigId
 
     inline bool operator==(ContigFile const & other) const
     {
         return fileName == other.fileName &&
-                format == other.format &&
                 firstContigId == other.firstContigId;
     }
 };
@@ -207,7 +205,7 @@ struct ContigFile
 
 template <typename TSpec_>
 const typename Id<ContigFile<TSpec_> >::Type
-ContigFile<TSpec_>::INVALID_ID = MaxValue<typename Id<ContigFile<TSpec_> >::Type>::VALUE;
+ContigFile<TSpec_>::INVALID_ID = std::numeric_limits<typename Id<ContigFile<TSpec_> >::Type>::max();
 
 //////////////////////////////////////////////////////////////////////////////
 
diff --git a/include/seqan/store/store_io_sam.h b/include/seqan/store/store_io_sam.h
index af153d3..e14eab6 100644
--- a/include/seqan/store/store_io_sam.h
+++ b/include/seqan/store/store_io_sam.h
@@ -416,7 +416,7 @@ _readAlignments(
 
     // sync sizes of alignQualityStore and alignedReadTagStore with alignedReadStore
     TAlignQuality q;
-    q.score = maxValue(q.score);
+    q.score = std::numeric_limits<decltype(q.score)>::max();
     resize(fragStore.alignQualityStore, length(fragStore.alignedReadStore), q);
     resize(fragStore.alignedReadTagStore, length(fragStore.alignedReadStore));
 
@@ -898,14 +898,14 @@ setPrimaryMatch(BamAlignmentRecord & record,
 
     // Retrieve number of errors from quality store.
     int errors = -1;
-    if (alignQuality.errors != MaxValue<unsigned char>::VALUE)
+    if (alignQuality.errors != std::numeric_limits<unsigned char>::max())
         errors = alignQuality.errors;
 
     // Use record.qual as a temporary for the md string.
     alignAndGetCigarString(record.cigar, record.qual, store.contigStore[alignedRead.contigId],
             store.readSeqStore[alignedRead.readId], alignedRead, errors, functor);
 
-    if (alignQuality.errors != MaxValue<unsigned char>::VALUE)
+    if (alignQuality.errors != std::numeric_limits<unsigned char>::max())
     {
 //        if (errors > (int)alignQuality.errors)
 //            std::cerr << "WARNING: More errors in the alignment (" << errors << ") than given in NM tag / alignQuality ("
diff --git a/include/seqan/store/store_io_ucsc.h b/include/seqan/store/store_io_ucsc.h
index 43794e8..585f830 100644
--- a/include/seqan/store/store_io_ucsc.h
+++ b/include/seqan/store/store_io_ucsc.h
@@ -58,7 +58,7 @@ _storeAnnotationRecord(
     TId transId = TAnnotation::INVALID_ID;
     _storeAppendAnnotationName(fragStore, transId, record.transName, (TId) TFragmentStore::ANNO_MRNA);
     TId cdsId = length(fragStore.annotationStore);
-    appendName(fragStore.annotationNameStore, record.proteinName, fragStore.annotationNameStoreCache);
+    appendName(fragStore.annotationNameStoreCache, record.proteinName);
 
     resize(fragStore.annotationStore, cdsId + 1 + length(record.exonBegin), Generous());
     resize(fragStore.annotationNameStore, cdsId + 1 + length(record.exonBegin), Generous());
diff --git a/include/seqan/store/store_matepair.h b/include/seqan/store/store_matepair.h
index 9a4318c..b72ae5e 100644
--- a/include/seqan/store/store_matepair.h
+++ b/include/seqan/store/store_matepair.h
@@ -115,7 +115,7 @@ struct MatePairStoreElement
 
 template <typename TSpec>
 const typename Id<MatePairStoreElement<TSpec> >::Type
-MatePairStoreElement<TSpec>::INVALID_ID = MaxValue<typename Id<MatePairStoreElement<TSpec> >::Type>::VALUE;
+MatePairStoreElement<TSpec>::INVALID_ID = std::numeric_limits<typename Id<MatePairStoreElement<TSpec> >::Type>::max();
 
 //////////////////////////////////////////////////////////////////////////////
 
diff --git a/include/seqan/store/store_read.h b/include/seqan/store/store_read.h
index 607f13e..723eeed 100644
--- a/include/seqan/store/store_read.h
+++ b/include/seqan/store/store_read.h
@@ -92,7 +92,7 @@ struct ReadStoreElement
 
 template <typename TSpec>
 const typename Id<ReadStoreElement<TSpec> >::Type
-ReadStoreElement<TSpec>::INVALID_ID = MaxValue<typename Id<ReadStoreElement<TSpec> >::Type>::VALUE;
+ReadStoreElement<TSpec>::INVALID_ID = std::numeric_limits<typename Id<ReadStoreElement<TSpec> >::Type>::max();
 
 //////////////////////////////////////////////////////////////////////////////
 
diff --git a/include/seqan/stream.h b/include/seqan/stream.h
index ae0d6da..ddc2d3b 100644
--- a/include/seqan/stream.h
+++ b/include/seqan/stream.h
@@ -89,6 +89,12 @@
 #include <seqan/stream/stream_compressor.h>
 #include <seqan/stream/buffered_stream.h>
 
+#if SEQAN_HAS_BZIP2 && !SEQAN_HAS_ZLIB
+#error "-DSEQAN_HAS_BZIP2 is defined, but -DSEQAN_HAS_ZLIB not. \
+Since BZip2 depends on ZLIB, this would cause hard-to-track compiler errors. \
+Either disable -DSEQAN_HAS_BZIP2 or define -DSEQAN_HAS_ZLIB"
+#endif
+
 #if SEQAN_HAS_ZLIB
 #include <zlib.h>
 #include <seqan/stream/iostream_zutil.h>
diff --git a/include/seqan/stream/lexical_cast.h b/include/seqan/stream/lexical_cast.h
index 173dd97..0cb6011 100644
--- a/include/seqan/stream/lexical_cast.h
+++ b/include/seqan/stream/lexical_cast.h
@@ -149,7 +149,7 @@ lexicalCast(TInteger & target, TSource const & source)
             return false;
 
         // overflow detection
-        if (SEQAN_UNLIKELY(val > MaxValue<TInteger>::VALUE / 10))
+        if (SEQAN_UNLIKELY(val > std::numeric_limits<TInteger>::max() / 10))
             return false;
         val *= 10;
 
@@ -189,7 +189,7 @@ lexicalCast(TInteger & target, TSource const & source)
                 return false;
 
             // overflow detection
-            if (SEQAN_UNLIKELY(val > MaxValue<TInteger>::VALUE / 10))
+            if (SEQAN_UNLIKELY(val > std::numeric_limits<TInteger>::max() / 10))
                 return false;
             val *= 10;
 
@@ -213,12 +213,12 @@ lexicalCast(TInteger & target, TSource const & source)
                 return false;
 
             // overflow detection
-            if (SEQAN_UNLIKELY(val < MinValue<TInteger>::VALUE / 10))
+            if (SEQAN_UNLIKELY(val < std::numeric_limits<TInteger>::min() / 10))
                 return false;
             val *= 10;
 
             // overflow detection
-            if (SEQAN_UNLIKELY(MinValue<TInteger>::VALUE - val > -(TInteger)digit))
+            if (SEQAN_UNLIKELY(std::numeric_limits<TInteger>::min() - val > -(TInteger)digit))
                 return false;
             val -= digit;
         }
diff --git a/include/seqan/stream/stream_compressor.h b/include/seqan/stream/stream_compressor.h
index e820b4b..9eaa158 100644
--- a/include/seqan/stream/stream_compressor.h
+++ b/include/seqan/stream/stream_compressor.h
@@ -280,7 +280,7 @@ inline uint16_t
 _bgzfUnpack16(char const * buffer)
 {
     uint16_t tmp = *reinterpret_cast<uint16_t const *>(buffer);
-    ensure_little_endian(tmp);
+    enforceLittleEndian(tmp);
     return tmp;
 }
 
@@ -288,7 +288,7 @@ inline uint32_t
 _bgzfUnpack32(char const * buffer)
 {
     uint32_t tmp = *reinterpret_cast<uint32_t const *>(buffer);
-    ensure_little_endian(tmp);
+    enforceLittleEndian(tmp);
     return tmp;
 }
 
@@ -299,14 +299,14 @@ _bgzfUnpack32(char const * buffer)
 inline void
 _bgzfPack16(char * buffer, uint16_t value)
 {
-    ensure_little_endian(value);
+    enforceLittleEndian(value);
     *reinterpret_cast<uint16_t *>(buffer) = value;
 }
 
 inline void
 _bgzfPack32(char * buffer, uint32_t value)
 {
-    ensure_little_endian(value);
+    enforceLittleEndian(value);
     *reinterpret_cast<uint32_t *>(buffer) = value;
 }
 
diff --git a/include/seqan/stream/tokenization.h b/include/seqan/stream/tokenization.h
index 96c8ca3..cb9c8d5 100644
--- a/include/seqan/stream/tokenization.h
+++ b/include/seqan/stream/tokenization.h
@@ -407,7 +407,7 @@ inline std::enable_if_t<std::is_arithmetic<TValue>::value>
 readRawPod(TValue & value, TFwdIterator &srcIter)
 {
     readRawPodImpl(value, srcIter);
-    ensure_little_endian(value);
+    enforceLittleEndian(value);
 }
 
 template <typename TValue, typename TFwdIterator>
@@ -489,7 +489,7 @@ inline void writeWrappedString(TTarget & target, TSequence const & seq, TSize li
     TIter iter = begin(seq, Rooted());
     TSeqSize charsLeft = length(seq);
     TSeqSize charsPerLine;
-    TSeqSize lineLength_ = (lineLength == 0)? maxValue<TSeqSize>() : lineLength;
+    TSeqSize lineLength_ = (lineLength == 0)? std::numeric_limits<TSeqSize>::max() : lineLength;
 
     do
     {
@@ -651,7 +651,7 @@ strSplit(TResult & result,
     }
 
     for (TIter it = itBeg; it != itEnd; ++it)
-        if (sep(getValue(it)))
+        if (sep(*it))
         {
             if (allowEmptyStrings || itFrom != it)
             {
@@ -660,7 +660,7 @@ strSplit(TResult & result,
                 {
                     if (!allowEmptyStrings)
                     {
-                        while (it != itEnd && sep(getValue(it)))
+                        while (it != itEnd && sep(*it))
                             ++it;
                     }
                     else
@@ -684,7 +684,7 @@ inline SEQAN_FUNC_ENABLE_IF(And<Is<ContainerConcept<TResult> >,
                                 Is<ContainerConcept<typename Value<TResult>::Type > > >, void)
 strSplit(TResult & result, TSequence const & sequence, TFunctor const & sep, bool const allowEmptyStrings)
 {
-    strSplit(result, sequence, sep, allowEmptyStrings, maxValue<typename Size<TSequence>::Type>());
+    strSplit(result, sequence, sep, allowEmptyStrings, std::numeric_limits<typename Size<TSequence>::Type>::max());
 }
 
 template <typename TResult, typename TSequence, typename TFunctor>
diff --git a/include/seqan/system/file_async.h b/include/seqan/system/file_async.h
index 6bb1b11..f70723c 100644
--- a/include/seqan/system/file_async.h
+++ b/include/seqan/system/file_async.h
@@ -813,20 +813,17 @@ public:
 struct AiocbWrapper :
     public aiocb
 {
-    AiocbWrapper()
-    {}
+    AiocbWrapper() = default;
+    AiocbWrapper(AiocbWrapper &&) = default;
 
     AiocbWrapper(AiocbWrapper & other, Move) :
         aiocb(other)
     {}
 
-    AiocbWrapper(AiocbWrapper && other) :
-        aiocb(other)
-    {}
-
+    AiocbWrapper & operator=(AiocbWrapper &&) = default;
 private:
-    AiocbWrapper(AiocbWrapper const &)
-    {}
+    AiocbWrapper(AiocbWrapper const &) = delete;
+    AiocbWrapper & operator=(AiocbWrapper const &) = delete;
 };
 
 template <>
diff --git a/include/seqan/tabix_io/tabix_index_tbi.h b/include/seqan/tabix_io/tabix_index_tbi.h
index a91f1bd..ffe3dc0 100644
--- a/include/seqan/tabix_io/tabix_index_tbi.h
+++ b/include/seqan/tabix_io/tabix_index_tbi.h
@@ -134,7 +134,7 @@ public:
         colEnd(3),
         meta('#'),
         skip(0),
-        unalignedCount(maxValue<uint64_t>()),
+        unalignedCount(std::numeric_limits<uint64_t>::max()),
         _nameStoreCache(_nameStore)
     {}
 
@@ -145,7 +145,7 @@ public:
         colEnd(3),
         meta('#'),
         skip(0),
-        unalignedCount(maxValue<uint64_t>()),
+        unalignedCount(std::numeric_limits<uint64_t>::max()),
         _nameStoreCache(_nameStore)
     {
         if (!open(*this, fileName))
@@ -281,7 +281,7 @@ jumpToRegion(FormattedFile<TFileFormat, Input, TSpec> & fileIn,
     // ------------------------------------------------------------------------
     // Compute offset in BGZF file.
     // ------------------------------------------------------------------------
-    uint64_t offset = MaxValue<uint64_t>::VALUE;
+    uint64_t offset = std::numeric_limits<uint64_t>::max();
 
     // Retrieve the candidate bin identifiers for [posBeg, posEnd).
     String<uint16_t> candidateBins;
@@ -377,7 +377,7 @@ jumpToRegion(FormattedFile<TFileFormat, Input, TSpec> & fileIn,
             break;  // Cannot find overlapping any more.
     }
 
-    if (offset != MaxValue<uint64_t>::VALUE)
+    if (offset != std::numeric_limits<uint64_t>::max())
     {
         setPosition(fileIn, offset);
         
@@ -522,7 +522,7 @@ open(TabixIndex & index, char const * filename)
     if (!atEnd(iter))
         readRawPod(index.unalignedCount, iter);
     else
-        index.unalignedCount = maxValue<uint64_t>();
+        index.unalignedCount = std::numeric_limits<uint64_t>::max();
 
     return true;
 }
diff --git a/manual/source/Infrastructure/Use/CustomBuildSystem.rst b/manual/source/Infrastructure/Use/CustomBuildSystem.rst
index 1ed31a0..cd58c59 100644
--- a/manual/source/Infrastructure/Use/CustomBuildSystem.rst
+++ b/manual/source/Infrastructure/Use/CustomBuildSystem.rst
@@ -35,6 +35,31 @@ For XCode on macOS OpenMP is not yet available.
 
 With Visual Studio OpenMP is switched on by default.
 
+Compiler specifics
+------------------
+
+Intel Compiler
+^^^^^^^^^^^^^^
+
+The Intel Compiler does not ship a c++ standard library on its own and will use
+the one pre-installed on the system (e.g., the one from g++). This can be a
+problem [especially for cluster users through the use of a module system], if
+the standard library by a default g++ installation is to old.
+
+Please check with the following command which g++ version is being used and make
+sure it matches the supported gcc versions.
+
+.. code-block:: console
+
+    # icpc -v
+    icpc version 17.0.2 (gcc version 5.4.0 compatibility)
+
+If you have multiple g++ installations, you can choose the standard library by
+``icpc -gxx-name=g++-5.4.0 -gcc-name=gcc-5.4.0 …``.
+
+You may have to add the path of the library to ```$LD_LIBRARY_PATH`` for the
+linker.
+
 Operating System specifics
 --------------------------
 
diff --git a/manual/source/Infrastructure/Use/FindSeqAnCMake.rst b/manual/source/Infrastructure/Use/FindSeqAnCMake.rst
index 3ae1d83..ec4deae 100644
--- a/manual/source/Infrastructure/Use/FindSeqAnCMake.rst
+++ b/manual/source/Infrastructure/Use/FindSeqAnCMake.rst
@@ -269,6 +269,30 @@ Required additions to C++ compiler flags are in the following variable:
 
     Please note that these variables include whatever has been added by the dependencies mentioned above so **do not add** e.g. ``${OpenMP_CXX_FLAGS}`` yourself!
 
+Intel Compiler specifics
+^^^^^^^^^^^^^^^^^^^^^^^^
+
+The Intel Compiler does not ship a c++ standard library on its own and will use
+the one pre-installed on the system (e.g., the one from g++). This can be a
+problem [especially for cluster users through the use of a module system], if
+the standard library by a default g++ installation is to old.
+
+Please check with the following command which g++ version is being used and make
+sure it matches the supported gcc versions.
+
+.. code-block:: console
+
+    # icpc -v
+    icpc version 17.0.2 (gcc version 5.4.0 compatibility)
+
+If you have multiple g++ installations, you can choose the standard library by
+``icpc -gxx-name=g++-5.4.0 -gcc-name=gcc-5.4.0 …``. Use
+``cmake -DCMAKE_CXX_FLAGS="-gxx-name=g++-5.4.0 -gcc-name=gcc-5.4.0" …``
+to propagate those options through cmake.
+
+You may have to add the path of the library to ```$LD_LIBRARY_PATH`` for the
+linker.
+
 Static builds
 ^^^^^^^^^^^^^
 
diff --git a/manual/source/Tutorial/DataStructures/Indices/StringIndices.rst b/manual/source/Tutorial/DataStructures/Indices/StringIndices.rst
index 29dcd06..8a31f62 100644
--- a/manual/source/Tutorial/DataStructures/Indices/StringIndices.rst
+++ b/manual/source/Tutorial/DataStructures/Indices/StringIndices.rst
@@ -47,6 +47,22 @@ We will now show how we can create the different indices in SeqAn before we show
 All the mentioned indices belong to the generic :dox:`Index` class.
 A SeqAn index needs two pieces of information: the type of the :dox:`String` or :dox:`StringSet` to be indexed and the index specialization, such as :dox:`IndexEsa` or :dox:`FMIndex`.
 
+.. important::
+
+    Indices based on suffix arrays (also including the FM index) are built using secondary memory.
+    When building large indices, it is therefore possible to run out of disk space (in which case an exception will be
+    thrown).
+    To circumvent this, the directory used for temporary storage can be changed by specifying the TMPDIR environment variable (on UNIX)
+    respectively TEMP environment variable (on Windows):
+
+    .. code-block:: console
+
+       # export TMPDIR=/somewhere/else/with/more/space
+
+    .. code-block:: console
+
+       # SET TEMP=C:\somewhere\else\with\more\space
+
 The following code snippet creates an enhanced suffix array index of a string of type :dox:`Dna5`.
 
 .. includefrags:: demos/tutorial/indices/base.cpp
diff --git a/tests/align/CMakeLists.txt b/tests/align/CMakeLists.txt
index 214d76c..b65f2db 100644
--- a/tests/align/CMakeLists.txt
+++ b/tests/align/CMakeLists.txt
@@ -72,6 +72,12 @@ if (ALIGN_SIMD_TEST)
 
     # Add dependencies found by find_package (SeqAn).
     target_link_libraries (test_align_simd ${SEQAN_LIBRARIES})
+    # note(marehr): there is a bug when using <=clang3.8 with gcc4.9's stdlib,
+    # where the default -ftemplate-depth=256 of clang is insufficient.
+    # test_align_simd_avx2 needs a depth of at least 266.
+    if (COMPILER_CLANG)
+      target_compile_options(test_align_simd PRIVATE -ftemplate-depth=1024)
+    endif()
 endif()
 
 # Add CXX flags found by find_package (SeqAn).
diff --git a/tests/align/test_align_simd.h b/tests/align/test_align_simd.h
index 7da774c..dff2770 100644
--- a/tests/align/test_align_simd.h
+++ b/tests/align/test_align_simd.h
@@ -253,7 +253,7 @@ struct LocalAlignTester_
         int const lDiag,
         int const uDiag)
     {
-        if (lDiag == seqan::MinValue<int>::VALUE && uDiag == seqan::MaxValue<int>::VALUE)
+        if (lDiag == std::numeric_limits<int>::min() && uDiag == std::numeric_limits<int>::max())
             return localAlignment(align, score);
         else
             return localAlignment(align, score, lDiag, uDiag);
@@ -272,7 +272,7 @@ struct GlobalAlignTester_
         int const lDiag,
         int const uDiag)
     {
-        if (lDiag == seqan::MinValue<int>::VALUE && uDiag == seqan::MaxValue<int>::VALUE)
+        if (lDiag == std::numeric_limits<int>::min() && uDiag == std::numeric_limits<int>::max())
             return globalAlignment(align, score, config);
         else
             return globalAlignment(align, score, config, lDiag, uDiag);
@@ -293,7 +293,7 @@ struct GlobalAlignScoreTester_
         int const lDiag,
         int const uDiag)
     {
-        if (lDiag == seqan::MinValue<int>::VALUE && uDiag == seqan::MaxValue<int>::VALUE)
+        if (lDiag == std::numeric_limits<int>::min() && uDiag == std::numeric_limits<int>::max())
             return globalAlignmentScore(strH, strV, score, config);
         else
             return globalAlignmentScore(strH, strV, score, config, lDiag, uDiag);
@@ -370,8 +370,8 @@ void testAlignSimd(TFunctor const &,
                    seqan::Score<TScoreValue, TScoreSpec> const & score,
                    TAlignConfig const & config,
                    TSimdLength const & /*tag*/,
-                   int const lDiag = seqan::MinValue<int>::VALUE,
-                   int const uDiag = seqan::MaxValue<int>::VALUE)
+                   int const lDiag = std::numeric_limits<int>::min(),
+                   int const uDiag = std::numeric_limits<int>::max())
 {
     auto sets = impl::test_align_simd::TestSequences_<TAlphabet, TSimdLength>::getSequences();
 
@@ -440,8 +440,8 @@ void testAlignSimdScore(TTester const &,
                         seqan::Score<TScoreValue, TScoreSpec> const & score,
                         TAlignConfig const & config,
                         TSimdLength const & /*tag*/,
-                        int const lDiag = seqan::MinValue<int>::VALUE,
-                        int const uDiag = seqan::MaxValue<int>::VALUE)
+                        int const lDiag = std::numeric_limits<int>::min(),
+                        int const uDiag = std::numeric_limits<int>::max())
 {
     auto sets = impl::test_align_simd::TestSequences_<TAlphabet, TSimdLength>::getSequences();
 
diff --git a/tests/align/test_alignment_algorithms_band_position.h b/tests/align/test_alignment_algorithms_band_position.h
index 579ba14..13b2faf 100644
--- a/tests/align/test_alignment_algorithms_band_position.h
+++ b/tests/align/test_alignment_algorithms_band_position.h
@@ -67,7 +67,7 @@ SEQAN_DEFINE_TEST(test_alignment_algorithms_band_position_case1)
                                                            -static_cast<int>(length(strV)) - 1), TDPProfile());
         _adaptTraceSegmentsTo(row(align, 0), row(align, 1), traces);
 
-        int testScore = +MinValue<int>::VALUE;
+        int testScore = +std::numeric_limits<int>::min();
         SEQAN_ASSERT_EQ(score, testScore);
 
         std::stringstream ssH;
@@ -89,7 +89,7 @@ SEQAN_DEFINE_TEST(test_alignment_algorithms_band_position_case1)
                                                            -static_cast<int>(length(strV)) - 1), TDPProfileOverlap());
         _adaptTraceSegmentsTo(row(align, 0), row(align, 1), traces);
 
-        int testScore = +MinValue<int>::VALUE;
+        int testScore = +std::numeric_limits<int>::min();
         SEQAN_ASSERT_EQ(score, testScore);
 
         std::stringstream ssH;
@@ -132,7 +132,7 @@ SEQAN_DEFINE_TEST(test_alignment_algorithms_band_position_case2)
                                                            -static_cast<int>(length(strV))), TDPProfile());
         _adaptTraceSegmentsTo(row(align, 0), row(align, 1), traces);
 
-        int testScore = +MinValue<int>::VALUE;
+        int testScore = +std::numeric_limits<int>::min();
         SEQAN_ASSERT_EQ(score, testScore);
 
         std::stringstream ssH;
@@ -194,7 +194,7 @@ SEQAN_DEFINE_TEST(test_alignment_algorithms_band_position_case3)
                                       DPBandConfig<BandOn>(-static_cast<int>(length(strV)) - 1, -3), TDPProfile());
         _adaptTraceSegmentsTo(row(align, 0), row(align, 1), traces);
 
-        int testScore = +MinValue<int>::VALUE;
+        int testScore = +std::numeric_limits<int>::min();
         SEQAN_ASSERT_EQ(score, testScore);
 
         std::stringstream ssH;
@@ -256,7 +256,7 @@ SEQAN_DEFINE_TEST(test_alignment_algorithms_band_position_case4)
                                       DPBandConfig<BandOn>(-static_cast<int>(length(strV)) - 1, 0), TDPProfile());
         _adaptTraceSegmentsTo(row(align, 0), row(align, 1), traces);
 
-        int testScore = +MinValue<int>::VALUE;
+        int testScore = +std::numeric_limits<int>::min();
         SEQAN_ASSERT_EQ(score, testScore);
 
         std::stringstream ssH;
@@ -570,7 +570,7 @@ SEQAN_DEFINE_TEST(test_alignment_algorithms_band_position_case9)
                                       DPBandConfig<BandOn>(-static_cast<int>(length(strV)), -3), TDPProfile());
         _adaptTraceSegmentsTo(row(align, 0), row(align, 1), traces);
 
-        SEQAN_ASSERT_EQ(score, MinValue<int>::VALUE);
+        SEQAN_ASSERT_EQ(score, std::numeric_limits<int>::min());
 
         std::stringstream ssH;
         std::stringstream ssV;
@@ -631,7 +631,7 @@ SEQAN_DEFINE_TEST(test_alignment_algorithms_band_position_case10)
                                       DPBandConfig<BandOn>(-static_cast<int>(length(strV)), 0), TDPProfile());
         _adaptTraceSegmentsTo(row(align, 0), row(align, 1), traces);
 
-        SEQAN_ASSERT_EQ(score, MinValue<int>::VALUE);
+        SEQAN_ASSERT_EQ(score, std::numeric_limits<int>::min());
 
         std::stringstream ssH;
         std::stringstream ssV;
@@ -943,7 +943,7 @@ SEQAN_DEFINE_TEST(test_alignment_algorithms_band_position_case15)
                                       DPBandConfig<BandOn>(-3, 0), TDPProfile());
         _adaptTraceSegmentsTo(row(align, 0), row(align, 1), traces);
 
-        SEQAN_ASSERT_EQ(score, MinValue<int>::VALUE);
+        SEQAN_ASSERT_EQ(score, std::numeric_limits<int>::min());
 
         std::stringstream ssH;
         std::stringstream ssV;
@@ -1492,7 +1492,7 @@ SEQAN_DEFINE_TEST(test_alignment_algorithms_band_position_case24)
                                       DPBandConfig<BandOn>(length(strH) - length(strV), 6), TDPProfile());
         _adaptTraceSegmentsTo(row(align, 0), row(align, 1), traces);
 
-        SEQAN_ASSERT_EQ(score, MinValue<int>::VALUE);
+        SEQAN_ASSERT_EQ(score, std::numeric_limits<int>::min());
 
         std::stringstream ssH;
         std::stringstream ssV;
@@ -1555,7 +1555,7 @@ SEQAN_DEFINE_TEST(test_alignment_algorithms_band_position_case25)
                                       DPBandConfig<BandOn>(length(strH) - length(strV), length(strH)), TDPProfile());
         _adaptTraceSegmentsTo(row(align, 0), row(align, 1), traces);
 
-        SEQAN_ASSERT_EQ(score, MinValue<int>::VALUE);
+        SEQAN_ASSERT_EQ(score, std::numeric_limits<int>::min());
 
         std::stringstream ssH;
         std::stringstream ssV;
@@ -1618,7 +1618,7 @@ SEQAN_DEFINE_TEST(test_alignment_algorithms_band_position_case26)
                                       DPBandConfig<BandOn>(length(strH) - length(strV), length(strH) + 1), TDPProfile());
         _adaptTraceSegmentsTo(row(align, 0), row(align, 1), traces);
 
-        SEQAN_ASSERT_EQ(score, MinValue<int>::VALUE);
+        SEQAN_ASSERT_EQ(score, std::numeric_limits<int>::min());
 
         std::stringstream ssH;
         std::stringstream ssV;
@@ -1680,7 +1680,7 @@ SEQAN_DEFINE_TEST(test_alignment_algorithms_band_position_case27)
                                       DPBandConfig<BandOn>(6, length(strH)), TDPProfile());
         _adaptTraceSegmentsTo(row(align, 0), row(align, 1), traces);
 
-        SEQAN_ASSERT_EQ(score, MinValue<int>::VALUE);
+        SEQAN_ASSERT_EQ(score, std::numeric_limits<int>::min());
 
         std::stringstream ssH;
         std::stringstream ssV;
@@ -1742,7 +1742,7 @@ SEQAN_DEFINE_TEST(test_alignment_algorithms_band_position_case28)
                                       DPBandConfig<BandOn>(6, length(strH) + 1), TDPProfile());
         _adaptTraceSegmentsTo(row(align, 0), row(align, 1), traces);
 
-        SEQAN_ASSERT_EQ(score, MinValue<int>::VALUE);
+        SEQAN_ASSERT_EQ(score, std::numeric_limits<int>::min());
 
         std::stringstream ssH;
         std::stringstream ssV;
@@ -1803,7 +1803,7 @@ SEQAN_DEFINE_TEST(test_alignment_algorithms_band_position_case29)
                                       DPBandConfig<BandOn>(length(strH), length(strH) + 1), TDPProfile());
         _adaptTraceSegmentsTo(row(align, 0), row(align, 1), traces);
 
-        SEQAN_ASSERT_EQ(score, MinValue<int>::VALUE);
+        SEQAN_ASSERT_EQ(score, std::numeric_limits<int>::min());
 
         std::stringstream ssH;
         std::stringstream ssV;
@@ -1864,7 +1864,7 @@ SEQAN_DEFINE_TEST(test_alignment_algorithms_band_position_case30)
                                       DPBandConfig<BandOn>(length(strH) + 1, length(strH) + 1), TDPProfile());
         _adaptTraceSegmentsTo(row(align, 0), row(align, 1), traces);
 
-        SEQAN_ASSERT_EQ(score, MinValue<int>::VALUE);
+        SEQAN_ASSERT_EQ(score, std::numeric_limits<int>::min());
 
         std::stringstream ssH;
         std::stringstream ssV;
@@ -1884,7 +1884,7 @@ SEQAN_DEFINE_TEST(test_alignment_algorithms_band_position_case30)
                                       DPBandConfig<BandOn>(length(strH) + 1, length(strH) + 1), TDPProfileOverlap());
         _adaptTraceSegmentsTo(row(align, 0), row(align, 1), traces);
 
-        SEQAN_ASSERT_EQ(score, MinValue<int>::VALUE);
+        SEQAN_ASSERT_EQ(score, std::numeric_limits<int>::min());
 
         std::stringstream ssH;
         std::stringstream ssV;
@@ -1925,7 +1925,7 @@ SEQAN_DEFINE_TEST(test_alignment_algorithms_band_position_case31)
                                       TDPProfile());
         _adaptTraceSegmentsTo(row(align, 0), row(align, 1), traces);
 
-        SEQAN_ASSERT_EQ(score, MinValue<int>::VALUE);
+        SEQAN_ASSERT_EQ(score, std::numeric_limits<int>::min());
 
         std::stringstream ssH;
         std::stringstream ssV;
diff --git a/tests/align/test_alignment_dp_cell.h b/tests/align/test_alignment_dp_cell.h
index 6a53e85..dae0602 100644
--- a/tests/align/test_alignment_dp_cell.h
+++ b/tests/align/test_alignment_dp_cell.h
@@ -83,7 +83,7 @@ void testDPCellDefaultInfinity(TGapCosts const &)
     int result1 = DPCellDefaultInfinity<TDPCell>::VALUE;
     int result2 = DPCellDefaultInfinity<TDPConstCell>::VALUE;
 
-    int test = MinValue<int>::VALUE / 2;
+    int test = std::numeric_limits<int>::min() / 2;
     SEQAN_ASSERT_EQ(result1, test);
     SEQAN_ASSERT_EQ(result2, test);
 }
diff --git a/tests/align/test_alignment_dp_matrix_navigator.h b/tests/align/test_alignment_dp_matrix_navigator.h
index e5919b3..9172cea 100644
--- a/tests/align/test_alignment_dp_matrix_navigator.h
+++ b/tests/align/test_alignment_dp_matrix_navigator.h
@@ -703,7 +703,7 @@ void testAlignmentDPMatrixNavigatorScoreMarixSparseGoNext()
 
     {
         _init(dpScoreMatrixNavigator, dpMatrix, DPBandConfig<BandOff>());
-        assignValue(dpScoreMatrixNavigator._activeColIterator, 0);
+        *dpScoreMatrixNavigator._activeColIterator = 0;
 
         SEQAN_ASSERT_EQ(dpScoreMatrixNavigator._ptrDataContainer, &dpMatrix);
         SEQAN_ASSERT_EQ(dpScoreMatrixNavigator._activeColIterator - begin(dpMatrix, Standard()), 0);
@@ -746,7 +746,7 @@ void testAlignmentDPMatrixNavigatorScoreMarixSparseGoNext()
 
     {
         _init(dpScoreMatrixNavigator, dpMatrix, DPBandConfig<BandOff>());
-        assignValue(dpScoreMatrixNavigator._activeColIterator, 0);
+        *dpScoreMatrixNavigator._activeColIterator = 0;
 
         _goNextCell(dpScoreMatrixNavigator, MetaColumnDescriptor<DPInitialColumn, PartialColumnMiddle>(), FirstCell());
 
@@ -781,7 +781,7 @@ void testAlignmentDPMatrixNavigatorScoreMarixSparseGoNext()
 
     {
         _init(dpScoreMatrixNavigator, dpMatrix, DPBandConfig<BandOff>());
-        assignValue(dpScoreMatrixNavigator._activeColIterator, 0);
+        *dpScoreMatrixNavigator._activeColIterator = 0;
 
         _goNextCell(dpScoreMatrixNavigator, MetaColumnDescriptor<DPInitialColumn, PartialColumnBottom>(), FirstCell());
 
@@ -816,7 +816,7 @@ void testAlignmentDPMatrixNavigatorScoreMarixSparseGoNext()
 
     {
         _init(dpScoreMatrixNavigator, dpMatrix, DPBandConfig<BandOff>());
-        assignValue(dpScoreMatrixNavigator._activeColIterator, 0);
+        *dpScoreMatrixNavigator._activeColIterator = 0;
 
         _goNextCell(dpScoreMatrixNavigator, MetaColumnDescriptor<DPInitialColumn, FullColumn>(), FirstCell());
 
@@ -852,7 +852,7 @@ void testAlignmentDPMatrixNavigatorScoreMarixSparseGoNext()
     {
 
         _init(dpScoreMatrixNavigator, dpMatrix, DPBandConfig<BandOff>());
-        assignValue(dpScoreMatrixNavigator._activeColIterator, 0);
+        *dpScoreMatrixNavigator._activeColIterator = 0;
 
         // Need to update iterator just for the test.
         dpScoreMatrixNavigator._activeColIterator += 3;
@@ -890,7 +890,7 @@ void testAlignmentDPMatrixNavigatorScoreMarixSparseGoNext()
 
     {
         _init(dpScoreMatrixNavigator, dpMatrix, DPBandConfig<BandOff>());
-        assignValue(dpScoreMatrixNavigator._activeColIterator, 0);
+        *dpScoreMatrixNavigator._activeColIterator = 0;
 
         // Need to update Iterator just for the test.
         dpScoreMatrixNavigator._activeColIterator += 2;
@@ -928,7 +928,7 @@ void testAlignmentDPMatrixNavigatorScoreMarixSparseGoNext()
 
     {
         _init(dpScoreMatrixNavigator, dpMatrix, DPBandConfig<BandOff>());
-        assignValue(dpScoreMatrixNavigator._activeColIterator, 0);
+        *dpScoreMatrixNavigator._activeColIterator = 0;
 
         // Need to update Iterator just for the test.
         dpScoreMatrixNavigator._activeColIterator += 2;
@@ -968,7 +968,7 @@ void testAlignmentDPMatrixNavigatorScoreMarixSparseGoNext()
 
     {
         _init(dpScoreMatrixNavigator, dpMatrix, DPBandConfig<BandOff>());
-        assignValue(dpScoreMatrixNavigator._activeColIterator, 0);
+        *dpScoreMatrixNavigator._activeColIterator = 0;
 
         dpScoreMatrixNavigator._activeColIterator += 2;
 
@@ -1005,7 +1005,7 @@ void testAlignmentDPMatrixNavigatorScoreMarixSparseGoNext()
 
     {
         _init(dpScoreMatrixNavigator, dpMatrix, DPBandConfig<BandOff>());
-        assignValue(dpScoreMatrixNavigator._activeColIterator, 0);
+        *dpScoreMatrixNavigator._activeColIterator = 0;
 
         dpScoreMatrixNavigator._activeColIterator += 3;
 
@@ -1042,7 +1042,7 @@ void testAlignmentDPMatrixNavigatorScoreMarixSparseGoNext()
 
     {
         _init(dpScoreMatrixNavigator, dpMatrix, DPBandConfig<BandOff>());
-        assignValue(dpScoreMatrixNavigator._activeColIterator, 0);
+        *dpScoreMatrixNavigator._activeColIterator = 0;
 
         dpScoreMatrixNavigator._activeColIterator += 2;
 
@@ -1080,7 +1080,7 @@ void testAlignmentDPMatrixNavigatorScoreMarixSparseGoNext()
 
     {
         _init(dpScoreMatrixNavigator, dpMatrix, DPBandConfig<BandOff>());
-        assignValue(dpScoreMatrixNavigator._activeColIterator, 0);
+        *dpScoreMatrixNavigator._activeColIterator = 0;
 
         dpScoreMatrixNavigator._activeColIterator += 2;
 
@@ -1119,7 +1119,7 @@ void testAlignmentDPMatrixNavigatorScoreMarixSparseGoNext()
 
     {
         _init(dpScoreMatrixNavigator, dpMatrix, DPBandConfig<BandOff>());
-        assignValue(dpScoreMatrixNavigator._activeColIterator, 0);
+        *dpScoreMatrixNavigator._activeColIterator = 0;
 
         dpScoreMatrixNavigator._activeColIterator += 2;
 
diff --git a/tests/arg_parse/test_arg_parse_ctd_support.h b/tests/arg_parse/test_arg_parse_ctd_support.h
index cd59ad1..a9f02b4 100644
--- a/tests/arg_parse/test_arg_parse_ctd_support.h
+++ b/tests/arg_parse/test_arg_parse_ctd_support.h
@@ -96,8 +96,7 @@ SEQAN_DEFINE_TEST(test_arg_parse_ctd_support)
     ofstream.close();
 
     // compare ctd to expected
-    seqan::CharString goldPath = SEQAN_PATH_TO_ROOT();
-    append(goldPath, "/tests/arg_parse/test_app.ctd");
+    seqan::CharString goldPath = getAbsolutePath("/tests/arg_parse/test_app.ctd");
 
     SEQAN_ASSERT(seqan::_compareTextFilesAlt(toCString(outPath), toCString(goldPath)));
 }
diff --git a/tests/bam_io/test_bam_file.h b/tests/bam_io/test_bam_file.h
index 54d41bd..b5b91fa 100644
--- a/tests/bam_io/test_bam_file.h
+++ b/tests/bam_io/test_bam_file.h
@@ -49,8 +49,7 @@
 
 void testBamIOBamFileReadHeader(char const * pathFragment)
 {
-    seqan::CharString filePath = SEQAN_PATH_TO_ROOT();
-    append(filePath, pathFragment);
+    seqan::CharString filePath = seqan::getAbsolutePath(pathFragment);
 
     seqan::BamFileIn bamIO(toCString(filePath));
     seqan::BamHeader header;
@@ -85,8 +84,7 @@ SEQAN_DEFINE_TEST(test_bam_io_bam_file_bam_read_header)
 // Issue 489 reports a problems with reading/writing comment lines in SAM header.
 SEQAN_DEFINE_TEST(test_bam_io_sam_file_issue_489)
 {
-    seqan::CharString inFilePath = SEQAN_PATH_TO_ROOT();
-    append(inFilePath, "/tests/bam_io/sam_with_comments.sam");
+    seqan::CharString inFilePath = seqan::getAbsolutePath("/tests/bam_io/sam_with_comments.sam");
 
     seqan::CharString tmpPath = SEQAN_TEMP_FILENAME();
     append(tmpPath, ".sam");
@@ -119,8 +117,7 @@ SEQAN_DEFINE_TEST(test_bam_io_sam_file_issue_489)
 
 void testBamIOBamFileReadRecords(char const * pathFragment)
 {
-    seqan::CharString filePath = SEQAN_PATH_TO_ROOT();
-    append(filePath, pathFragment);
+    seqan::CharString filePath = seqan::getAbsolutePath(pathFragment);
 
     seqan::BamFileIn bamIO(toCString(filePath));
     seqan::BamHeader header;
@@ -210,8 +207,7 @@ SEQAN_DEFINE_TEST(test_bam_io_bam_file_bam_read_records)
 
 SEQAN_DEFINE_TEST(test_bam_io_bam_file_bam_read_ex1)
 {
-    seqan::CharString filePath = SEQAN_PATH_TO_ROOT();
-    append(filePath, "/tests/bam_io/ex1.bam");
+    seqan::CharString filePath = seqan::getAbsolutePath("/tests/bam_io/ex1.bam");
 
     seqan::BamFileIn bamIO(toCString(filePath));
     seqan::BamHeader header;
@@ -243,8 +239,7 @@ SEQAN_DEFINE_TEST(test_bam_io_bam_file_bam_read_ex1)
 
 void testBamIOBamFileWriteHeader(char const * pathFragmentExpected)
 {
-    seqan::CharString filePath = SEQAN_PATH_TO_ROOT();
-    append(filePath, pathFragmentExpected);
+    seqan::CharString filePath = seqan::getAbsolutePath(pathFragmentExpected);
 
     seqan::CharString tmpPath = SEQAN_TEMP_FILENAME();
     if (seqan::endsWith(pathFragmentExpected, ".bam"))
@@ -298,8 +293,7 @@ SEQAN_DEFINE_TEST(test_bam_io_bam_file_bam_write_header)
 
 void testBamIOBamFileWriteRecords(char const * pathFragmentExpected)
 {
-    seqan::CharString filePath = SEQAN_PATH_TO_ROOT();
-    append(filePath, pathFragmentExpected);
+    seqan::CharString filePath = seqan::getAbsolutePath(pathFragmentExpected);
 
     seqan::CharString tmpPath = SEQAN_TEMP_FILENAME();
     if (seqan::endsWith(pathFragmentExpected, ".bam"))
@@ -413,8 +407,7 @@ SEQAN_DEFINE_TEST(test_bam_io_bam_file_bam_write_records)
 
 SEQAN_DEFINE_TEST(test_bam_io_bam_file_sam_file_size)
 {
-    seqan::CharString filePath = SEQAN_PATH_TO_ROOT();
-    append(filePath, "/tests/bam_io/small.sam");
+    seqan::CharString filePath = seqan::getAbsolutePath("/tests/bam_io/small.sam");
 
     seqan::BamFileIn bamFile(toCString(filePath));
 
@@ -442,8 +435,7 @@ SEQAN_DEFINE_TEST(test_bam_io_bam_file_sam_file_size)
 
 SEQAN_DEFINE_TEST(test_bam_io_bam_file_bam_file_size)
 {
-    seqan::CharString filePath = SEQAN_PATH_TO_ROOT();
-    append(filePath, "/tests/bam_io/small.bam");
+    seqan::CharString filePath = seqan::getAbsolutePath("/tests/bam_io/small.bam");
 
     seqan::BamFileIn bamFile(toCString(filePath));
 
@@ -473,7 +465,7 @@ SEQAN_DEFINE_TEST(test_bam_io_bam_file_bam_file_seek)
 {
     typedef seqan::Position<seqan::BamFileIn>::Type TPosition;
 
-    std::string filePath = (std::string)SEQAN_PATH_TO_ROOT() + "/apps/ngs_roi/example/example.bam";
+    std::string filePath = seqan::getAbsolutePath("/apps/ngs_roi/example/example.bam");
 
     seqan::BamFileIn bamFile(filePath.c_str());
 
diff --git a/tests/bam_io/test_bam_index.h b/tests/bam_io/test_bam_index.h
index 48aabda..80196da 100644
--- a/tests/bam_io/test_bam_index.h
+++ b/tests/bam_io/test_bam_index.h
@@ -44,11 +44,9 @@ using namespace seqan;
 
 SEQAN_DEFINE_TEST(test_bam_io_bam_index_build)
 {
-    CharString expectedBaiFilename = SEQAN_PATH_TO_ROOT();
-    append(expectedBaiFilename, "/tests/bam_io/small.bam.bai");
+    CharString expectedBaiFilename = getAbsolutePath("/tests/bam_io/small.bam.bai");
 
-    CharString bamFilename = SEQAN_PATH_TO_ROOT();
-    append(bamFilename, "/tests/bam_io/small.bam");
+    CharString bamFilename = getAbsolutePath("/tests/bam_io/small.bam");
 
     CharString tmpOutPath = SEQAN_TEMP_FILENAME();
     append(tmpOutPath, ".bai");
@@ -63,8 +61,7 @@ SEQAN_DEFINE_TEST(test_bam_io_bam_index_build)
 
 SEQAN_DEFINE_TEST(test_bam_io_bam_index_open)
 {
-    CharString baiFilename = SEQAN_PATH_TO_ROOT();
-    append(baiFilename, "/tests/bam_io/small.bam.bai");
+    CharString baiFilename = getAbsolutePath("/tests/bam_io/small.bam.bai");
 
     BamIndex<Bai> baiIndex;
     SEQAN_ASSERT(open(baiIndex, toCString(baiFilename)));
@@ -80,8 +77,7 @@ SEQAN_DEFINE_TEST(test_bam_io_bam_index_open)
     SEQAN_ASSERT_EQ(getUnalignedCount(baiIndex), 0u);
 
     // File has same contents as in the SAM test.
-    CharString bamFilename = SEQAN_PATH_TO_ROOT();
-    append(bamFilename, "/tests/bam_io/small.bam");
+    CharString bamFilename = getAbsolutePath("/tests/bam_io/small.bam");
 
     BamFileIn bamFile(toCString(bamFilename));
 
@@ -101,8 +97,7 @@ SEQAN_DEFINE_TEST(test_bam_io_bam_index_open)
 
 SEQAN_DEFINE_TEST(test_bam_io_bam_index_save)
 {
-    CharString baiFilename = SEQAN_PATH_TO_ROOT();
-    append(baiFilename, "/tests/bam_io/small.bam.bai");
+    CharString baiFilename = getAbsolutePath("/tests/bam_io/small.bam.bai");
     
     CharString tmpOutPath = SEQAN_TEMP_FILENAME();
     append(tmpOutPath, ".bai");
diff --git a/tests/bam_io/test_bam_io.cpp b/tests/bam_io/test_bam_io.cpp
index 7d97118..33234c3 100644
--- a/tests/bam_io/test_bam_io.cpp
+++ b/tests/bam_io/test_bam_io.cpp
@@ -37,6 +37,7 @@
 #include <seqan/stream.h>
 
 #include "test_bam_alignment_record.h"
+#include "test_bam_file.h"
 #include "test_bam_header_record.h"
 #include "test_bam_io_context.h"
 #include "test_bam_sam_conversion.h"
@@ -48,7 +49,6 @@
 
 #if SEQAN_HAS_ZLIB
 #include "test_bam_index.h"
-#include "test_bam_file.h"
 #endif
 
 SEQAN_BEGIN_TESTSUITE(test_bam_io)
diff --git a/tests/bam_io/test_bam_sam_conversion.h b/tests/bam_io/test_bam_sam_conversion.h
index ac71e2b..50607df 100644
--- a/tests/bam_io/test_bam_sam_conversion.h
+++ b/tests/bam_io/test_bam_sam_conversion.h
@@ -124,6 +124,9 @@ SEQAN_DEFINE_TEST(test_assign_tags_bam_to_sam_type_I)
 
 SEQAN_DEFINE_TEST(test_assign_tags_bam_to_sam_type_f)
 {
+#if defined (__arm__) && defined(__ARM_PCS_VFP) // NOTE(h-2): armhf CRASHES here for unknown reasons
+    return;
+#endif
     using namespace seqan;
 
     CharString bamTags;
@@ -132,7 +135,7 @@ SEQAN_DEFINE_TEST(test_assign_tags_bam_to_sam_type_f)
     arrayCopy(DATA, DATA + 7, &bamTags[0]);
     CharString samTags;
     assignTagsBamToSam(samTags, bamTags);
-#if defined(__x86_64__) || defined(_M_X64) || defined(__i386) || defined(_M_IX86) // floaing point madness
+#if defined(__x86_64__) || defined(_M_X64) || defined(__i386) || defined(_M_IX86) // rounding errors on non-x86
     SEQAN_ASSERT_EQ(CharString("XX:f:0.5"), CharString(samTags));
 #endif
 }
@@ -251,7 +254,7 @@ SEQAN_DEFINE_TEST(test_assign_tags_bam_to_sam_type_Bf)
     arrayCopy(DATA, DATA + 16, &bamTags[0]);
     CharString samTags;
     assignTagsBamToSam(samTags, bamTags);
-#if defined(__x86_64__) || defined(_M_X64) || defined(__i386) || defined(_M_IX86) // floaing point madness
+#if defined(__x86_64__) || defined(_M_X64) || defined(__i386) || defined(_M_IX86) // rounding errors on non-x86
     SEQAN_ASSERT_EQ(CharString("XX:B:f,0.5,0.5"), CharString(samTags));
 #endif
 }
@@ -297,7 +300,7 @@ SEQAN_DEFINE_TEST(test_assign_tags_sam_to_bam_type_f)
     resize(expected, 7);
     char const * DATA = "XXf\x00\x00\x00\x3f";
     arrayCopy(DATA, DATA + 7, begin(expected, Standard()));
-#if defined(__x86_64__) || defined(_M_X64) || defined(__i386) || defined(_M_IX86) // floaing point madness
+#if defined(__x86_64__) || defined(_M_X64) || defined(__i386) || defined(_M_IX86) // rounding errors on non-x86
     SEQAN_ASSERT_EQ(expected, CharString(bamTags));
 #endif
 }
@@ -425,7 +428,7 @@ SEQAN_DEFINE_TEST(test_assign_tags_sam_to_bam_type_Bf)
     resize(expected, 16);
     char const * DATA = "XXBf\2\0\0\0\x00\x00\x00\x3f\x00\x00\x00\x3f";
     arrayCopy(DATA, DATA + 16, begin(expected, Standard()));
-#if defined(__x86_64__) || defined(_M_X64) || defined(__i386) || defined(_M_IX86) // floaing point madness
+#if defined(__x86_64__) || defined(_M_X64) || defined(__i386) || defined(_M_IX86) // rounding errors on non-x86
     SEQAN_ASSERT_EQ(expected, CharString(bamTags));
 #endif
 }
diff --git a/tests/bam_io/test_read_bam.h b/tests/bam_io/test_read_bam.h
index 871c8f9..53f7a49 100644
--- a/tests/bam_io/test_read_bam.h
+++ b/tests/bam_io/test_read_bam.h
@@ -50,9 +50,8 @@ SEQAN_DEFINE_TEST(test_bam_io_bam_read_header)
 
     // File has same contents as in the SAM test.
     CharString bamFilename;
-    append(bamFilename, SEQAN_PATH_TO_ROOT());
-    //append(bamFilename, "/tests/bam_io/small.bam");
-    append(bamFilename, "/tests/bam_io/test_small.bam");
+    append(bamFilename, getAbsolutePath("/tests/bam_io/test_small.bam"));
+    //append(bamFilename, getAbsolutPath("/tests/bam_io/small.bam"));
 
     String<char, MMap<> > in;
     open(in, toCString(bamFilename));
@@ -105,9 +104,8 @@ SEQAN_DEFINE_TEST(test_bam_io_bam_read_alignment)
     // -----------------------------------------------------------------------
 
     CharString bamFilename;
-    append(bamFilename, SEQAN_PATH_TO_ROOT());
-    //append(bamFilename, "/tests/bam_io/small.bam");
-    append(bamFilename, "/tests/bam_io/test_small.bam");
+    append(bamFilename, getAbsolutePath("/tests/bam_io/test_small.bam"));
+    //append(bamFilename, getAbsolutePath("/tests/bam_io/small.bam"));
 
     String<char, MMap<> > in;
     open(in, toCString(bamFilename));
diff --git a/tests/bam_io/test_write_bam.h b/tests/bam_io/test_write_bam.h
index 4780c7f..281f8a1 100644
--- a/tests/bam_io/test_write_bam.h
+++ b/tests/bam_io/test_write_bam.h
@@ -75,8 +75,7 @@ SEQAN_DEFINE_TEST(test_bam_io_bam_write_header)
 
     // Compare results.
     CharString bamFilename;
-    append(bamFilename, SEQAN_PATH_TO_ROOT());
-    append(bamFilename, "/tests/bam_io/header_uncompressed.bam");
+    append(bamFilename, getAbsolutePath("/tests/bam_io/header_uncompressed.bam"));
 
     String<char, MMap<> > EXPECTED;
     open(EXPECTED, toCString(bamFilename));
@@ -136,8 +135,7 @@ SEQAN_DEFINE_TEST(test_bam_io_bam_write_alignment)
     write(text, record, bamIOContext, Bam());
 
     CharString bamFilename;
-    append(bamFilename, SEQAN_PATH_TO_ROOT());
-    append(bamFilename, "/tests/bam_io/alignment_uncompressed.bam");
+    append(bamFilename, getAbsolutePath("/tests/bam_io/alignment_uncompressed.bam"));
 
     String<char, MMap<> > EXPECTED;
     open(EXPECTED, toCString(bamFilename));
diff --git a/tests/basic/test_basic.cpp b/tests/basic/test_basic.cpp
index b1b73d9..c8774aa 100644
--- a/tests/basic/test_basic.cpp
+++ b/tests/basic/test_basic.cpp
@@ -338,7 +338,6 @@ SEQAN_BEGIN_TESTSUITE(test_basic)
     // SEQAN_CALL_TEST(test_basic_conversions);
     SEQAN_CALL_TEST(test_basic_alphabet_extreme_values);
     // SEQAN_CALL_TEST(test_basic_simple_types);
-    SEQAN_CALL_TEST(test_basic_suprema_infima);
 
     SEQAN_CALL_TEST(test_basic_concepts_integer_concept);
 }
diff --git a/tests/basic/test_basic_alphabet.cpp b/tests/basic/test_basic_alphabet.cpp
index fd31cd5..b3d9ec7 100644
--- a/tests/basic/test_basic_alphabet.cpp
+++ b/tests/basic/test_basic_alphabet.cpp
@@ -55,9 +55,9 @@ SEQAN_BEGIN_TESTSUITE(test_basic_alphabet)
     // Test Math Functions
     // -----------------------------------------------------------------------
 
-    SEQAN_CALL_TEST(test_basic_alphabet_math_metafunctions);
-    SEQAN_CALL_TEST(test_basic_alphabet_math_min_value);
-    SEQAN_CALL_TEST(test_basic_alphabet_math_max_value);
+    // SEQAN_CALL_TEST(test_basic_alphabet_math_metafunctions); //deprecated
+    // SEQAN_CALL_TEST(test_basic_alphabet_math_min_value);     //deprecated
+    // SEQAN_CALL_TEST(test_basic_alphabet_math_max_value);     //deprecated
 
     // -----------------------------------------------------------------------
     // Test Adaptions of Builtin Types
diff --git a/tests/basic/test_basic_alphabet.h b/tests/basic/test_basic_alphabet.h
index 1ae1696..87c8d9a 100644
--- a/tests/basic/test_basic_alphabet.h
+++ b/tests/basic/test_basic_alphabet.h
@@ -456,20 +456,11 @@ void TestExtremeValuesSigned()
 
     long double maxVal = -minVal - 1;
 
-/*
-    std::cout << std::endl << "Max/Min of " << typeid(T).name() << std::endl;
-    std::cout << maxVal << " == " << MaxValue<T>::VALUE << "(" << (double)MaxValue<T>::VALUE << ")  " << maxValue<T>() << std::endl;
-    std::cout << minVal << " == " << MinValue<T>::VALUE << "(" << (double)MinValue<T>::VALUE << ")  " << minValue<T>() << std::endl;
-*/
-
     bool isSigned = IsSameType< typename MakeSigned_<T>::Type, T >::VALUE;
     SEQAN_ASSERT(isSigned);
 
-    SEQAN_ASSERT_EQ(maxValue<T>(), MaxValue<T>::VALUE);
-    SEQAN_ASSERT_EQ(minValue<T>(), MinValue<T>::VALUE);
-
-    long double maxDelta = maxVal - MaxValue<T>::VALUE;
-    long double minDelta = minVal - (long double)MinValue<T>::VALUE;
+    long double maxDelta = maxVal - std::numeric_limits<T>::max();
+    long double minDelta = minVal - (long double)std::numeric_limits<T>::min();
     SEQAN_ASSERT(maxDelta <= maxVal/1000);
     SEQAN_ASSERT(-maxVal/1000 <= maxDelta);
     SEQAN_ASSERT(minDelta <= maxVal/1000);
@@ -484,22 +475,13 @@ void TestExtremeValuesUnsigned()
         maxVal = 2*maxVal;
     maxVal = maxVal - 1;
 
-/*
-    std::cout << std::endl << "Max/Min of " << typeid(T).name() << std::endl;
-    std::cout << maxVal << " == " << MaxValue<T>::VALUE << "(" << (double)MaxValue<T>::VALUE << ")  " << maxValue<T>() << std::endl;
-    std::cout << 0 << " == " << MinValue<T>::VALUE << "(" << (double)MinValue<T>::VALUE << ")  " << minValue<T>() << std::endl;
-*/
-
     bool isUnsigned = IsSameType< typename MakeUnsigned_<T>::Type, T >::VALUE;
     SEQAN_ASSERT(isUnsigned);
 
-    SEQAN_ASSERT_EQ(maxValue<T>(), MaxValue<T>::VALUE);
-    SEQAN_ASSERT_EQ(minValue<T>(), MinValue<T>::VALUE);
-
-    long double maxDelta = maxVal - MaxValue<T>::VALUE;
+    long double maxDelta = maxVal - std::numeric_limits<T>::max();
     SEQAN_ASSERT_LEQ(maxDelta, maxVal/1000);
     SEQAN_ASSERT_LEQ(-maxVal/1000, maxDelta);
-    SEQAN_ASSERT_EQ((T)0, MinValue<T>::VALUE);
+    SEQAN_ASSERT_EQ((T)0, std::numeric_limits<T>::min());
 }
 
 SEQAN_DEFINE_TEST(test_basic_alphabet_extreme_values)
@@ -547,30 +529,6 @@ SEQAN_DEFINE_TEST(test_basic_array_functions)
     TestArrayFunctions<long double>(3.1, 1.2);
 }
 
-SEQAN_DEFINE_TEST(test_basic_suprema_infima)
-{
-  using namespace seqan;
-
-    // These tests are only here to instantiate the MaxValue and
-    // MinValue Metafunctions for double and float.
-    {
-        double x = MaxValue<double>::VALUE;
-        SEQAN_ASSERT_GT(x, 0);
-    }
-    {
-        double x = MinValue<double>::VALUE;
-        SEQAN_ASSERT_LT(x, 0);
-    }
-    {
-        float x = MaxValue<float>::VALUE;
-        SEQAN_ASSERT_GT(x, 0);
-    }
-    {
-        float x = MinValue<float>::VALUE;
-        SEQAN_ASSERT_LT(x, 0);
-    }
-}
-
 SEQAN_DEFINE_TEST(test_basic_alphabet_value_size)
 {
     SEQAN_ASSERT_EQ(+ValueSize<bool>::VALUE, 2u);
diff --git a/tests/basic/test_basic_alphabet_adapt_builtins.h b/tests/basic/test_basic_alphabet_adapt_builtins.h
index b0e6705..7d01a6c 100644
--- a/tests/basic/test_basic_alphabet_adapt_builtins.h
+++ b/tests/basic/test_basic_alphabet_adapt_builtins.h
@@ -70,19 +70,6 @@ SEQAN_DEFINE_TEST(test_basic_alphabet_adapt_builtins_concepts_bool)
         SEQAN_ASSERT_EQ(b, true);
     }
 
-    // Ordered Alphabet Concept
-    {
-        bool b = false, c = true;
-
-        SEQAN_ASSERT_EQ(minValue(bool()), false);
-        SEQAN_ASSERT_EQ(minValue<bool>(), false);
-        SEQAN_ASSERT_EQ(+(MinValue<bool>::VALUE), 0/*false*/);
-        SEQAN_ASSERT_EQ(maxValue(bool()), true);
-        SEQAN_ASSERT_EQ(maxValue<bool>(), true);
-        SEQAN_ASSERT_EQ(+(MaxValue<bool>::VALUE), 1/*true*/);
-        SEQAN_ASSERT(b < c);
-    }
-
     // Finite Ordered Alphabet
     {
         bool b = false;
@@ -114,19 +101,6 @@ SEQAN_DEFINE_TEST(test_basic_alphabet_adapt_builtins_concepts_char)
         SEQAN_ASSERT_EQ(b, true);
     }
 
-    // Ordered Alphabet Concept
-    {
-        char b = false, c = true;
-        SEQAN_ASSERT_EQ(minValue(char()), '\0');
-        SEQAN_ASSERT_EQ(minValue<char>(), '\0');
-        SEQAN_ASSERT_EQ(+(MinValue<char>::VALUE), '\0');
-        // TODO(holtgrew): Is the following correct?
-        SEQAN_ASSERT_EQ(maxValue(char()), char(-1));
-        SEQAN_ASSERT_EQ(maxValue<char>(), char(-1));
-        SEQAN_ASSERT_EQ(+(MaxValue<char>::VALUE), char(-1));
-        SEQAN_ASSERT(b < c);
-    }
-
     // Finite Ordered Alphabet
     {
         char b = 0;
@@ -168,19 +142,6 @@ SEQAN_DEFINE_TEST(test_basic_alphabet_adapt_builtins_concepts_short)
         SEQAN_ASSERT_EQ(b, 1);
     }
 
-    // Ordered Alphabet Concept
-    {
-        short b = 0, c = 42;
-
-        SEQAN_ASSERT_LEQ(minValue(short()), -32768);
-        SEQAN_ASSERT_LEQ(minValue<short>(), -32768);
-        SEQAN_ASSERT_LEQ(+(MinValue<short>::VALUE), -32768);
-        SEQAN_ASSERT_GEQ(maxValue(short()), 32767);
-        SEQAN_ASSERT_GEQ(maxValue<short>(), 32767);
-        SEQAN_ASSERT_GEQ(+(MaxValue<short>::VALUE), 32767);
-        SEQAN_ASSERT(b < c);
-    }
-
     // Finite Ordered Alphabet
     {
         short b = 0;
@@ -214,21 +175,6 @@ SEQAN_DEFINE_TEST(test_basic_alphabet_adapt_builtins_concepts_int)
         SEQAN_ASSERT_EQ(b, 1);
     }
 
-    // Ordered Alphabet Concept
-    {
-        int b = 0, c = 42;
-
-        // note(marehr): -2147483648 would produce the compiler warning C4146:
-        // unary minus operator applied to unsigned type, result still unsigned
-        SEQAN_ASSERT_EQ(minValue(int()), -2147483647 - 1);
-        SEQAN_ASSERT_EQ(minValue<int>(), -2147483647 - 1);
-        SEQAN_ASSERT_EQ(+(MinValue<int>::VALUE), -2147483647 - 1);
-        SEQAN_ASSERT_EQ(maxValue(int()), 2147483647);
-        SEQAN_ASSERT_EQ(maxValue<int>(), 2147483647);
-        SEQAN_ASSERT_EQ(+(MaxValue<int>::VALUE), 2147483647);
-        SEQAN_ASSERT(b < c);
-    }
-
     // Finite Ordered Alphabet
     {
         int b = 0;
@@ -262,19 +208,6 @@ SEQAN_DEFINE_TEST(test_basic_alphabet_adapt_builtins_concepts_long)
         SEQAN_ASSERT_EQ(b, 1);
     }
 
-    // Ordered Alphabet Concept
-    {
-        long b = 0, c = 42;
-
-        SEQAN_ASSERT_LEQ(minValue(long()), +(MinValue<int>::VALUE));
-        SEQAN_ASSERT_LEQ(minValue<long>(), +(MinValue<int>::VALUE));
-        SEQAN_ASSERT_LEQ(+(MinValue<long>::VALUE), +(MinValue<int>::VALUE));
-        SEQAN_ASSERT_GEQ(maxValue(long()), +(MaxValue<int>::VALUE));
-        SEQAN_ASSERT_GEQ(maxValue<long>(), +(MaxValue<int>::VALUE));
-        SEQAN_ASSERT_GEQ(+(MaxValue<long>::VALUE), +(MaxValue<int>::VALUE));
-        SEQAN_ASSERT(b < c);
-    }
-
     // Finite Ordered Alphabet
     {
         long b = 0;
@@ -317,19 +250,6 @@ SEQAN_DEFINE_TEST(test_basic_alphabet_adapt_builtins_concepts_int8)
         SEQAN_ASSERT_EQ(b, 1);
     }
 
-    // Ordered Alphabet Concept
-    {
-        int8_t b = 0, c = 42;
-
-        SEQAN_ASSERT_EQ(minValue(int8_t()), -128);
-        SEQAN_ASSERT_EQ(minValue<int8_t>(), -128);
-        SEQAN_ASSERT_EQ(+(MinValue<int8_t>::VALUE), -128);
-        SEQAN_ASSERT_GEQ(maxValue(int8_t()), 127);
-        SEQAN_ASSERT_GEQ(maxValue<int8_t>(), 127);
-        SEQAN_ASSERT_GEQ(+(MaxValue<int8_t>::VALUE), 127);
-        SEQAN_ASSERT(b < c);
-    }
-
     // Finite Ordered Alphabet
     {
         int8_t b = 0;
@@ -363,19 +283,6 @@ SEQAN_DEFINE_TEST(test_basic_alphabet_adapt_builtins_concepts_uint8)
         SEQAN_ASSERT_EQ(b, 1);
     }
 
-    // Ordered Alphabet Concept
-    {
-        uint8_t b = 0, c = 42;
-
-        SEQAN_ASSERT_EQ(minValue(uint8_t()), 0u);
-        SEQAN_ASSERT_EQ(minValue<uint8_t>(), 0u);
-        SEQAN_ASSERT_EQ(+(MinValue<uint8_t>::VALUE), 0);
-        SEQAN_ASSERT_EQ(maxValue(uint8_t()), 255u);
-        SEQAN_ASSERT_EQ(maxValue<uint8_t>(), 255u);
-        SEQAN_ASSERT_EQ(+(MaxValue<uint8_t>::VALUE), 255);
-        SEQAN_ASSERT(b < c);
-    }
-
     // Finite Ordered Alphabet
     {
         uint8_t b = 0;
@@ -408,19 +315,6 @@ SEQAN_DEFINE_TEST(test_basic_alphabet_adapt_builtins_concepts_int16)
         SEQAN_ASSERT_EQ(b, 1);
     }
 
-    // Ordered Alphabet Concept
-    {
-        int16_t b = 0, c = 42;
-
-        SEQAN_ASSERT_EQ(minValue(int16_t()), -32768);
-        SEQAN_ASSERT_EQ(minValue<int16_t>(), -32768);
-        SEQAN_ASSERT_EQ(+(MinValue<int16_t>::VALUE), -32768);
-        SEQAN_ASSERT_EQ(maxValue(int16_t()), 32767);
-        SEQAN_ASSERT_EQ(maxValue<int16_t>(), 32767);
-        SEQAN_ASSERT_EQ(+(MaxValue<int16_t>::VALUE), 32767);
-        SEQAN_ASSERT(b < c);
-    }
-
     // Finite Ordered Alphabet
     {
         int16_t b = 0;
@@ -454,19 +348,6 @@ SEQAN_DEFINE_TEST(test_basic_alphabet_adapt_builtins_concepts_uint16)
         SEQAN_ASSERT_EQ(b, 1);
     }
 
-    // Ordered Alphabet Concept
-    {
-        uint16_t b = 0, c = 42;
-
-        SEQAN_ASSERT_EQ(minValue(uint16_t()), 0u);
-        SEQAN_ASSERT_EQ(minValue<uint16_t>(), 0u);
-        SEQAN_ASSERT_EQ(+(MinValue<uint16_t>::VALUE), 0);
-        SEQAN_ASSERT_EQ(maxValue(uint16_t()), 65535u);
-        SEQAN_ASSERT_EQ(maxValue<uint16_t>(), 65535u);
-        SEQAN_ASSERT_EQ(+(MaxValue<uint16_t>::VALUE), 65535);
-        SEQAN_ASSERT(b < c);
-    }
-
     // Finite Ordered Alphabet
     {
         uint16_t b = 0;
@@ -499,21 +380,6 @@ SEQAN_DEFINE_TEST(test_basic_alphabet_adapt_builtins_concepts_int32)
         SEQAN_ASSERT_EQ(b, 1);
     }
 
-    // Ordered Alphabet Concept
-    {
-        int32_t b = 0, c = 42;
-
-        // note(marehr): -2147483648 would produce the compiler warning C4146:
-        // unary minus operator applied to unsigned type, result still unsigned
-        SEQAN_ASSERT_EQ(minValue(int32_t()), -2147483647 - 1);
-        SEQAN_ASSERT_EQ(minValue<int32_t>(), -2147483647 - 1);
-        SEQAN_ASSERT_EQ(+(MinValue<int32_t>::VALUE), -2147483647 - 1);
-        SEQAN_ASSERT_EQ(maxValue(int32_t()), 2147483647);
-        SEQAN_ASSERT_EQ(maxValue<int32_t>(), 2147483647);
-        SEQAN_ASSERT_EQ(+(MaxValue<int32_t>::VALUE), 2147483647);
-        SEQAN_ASSERT(b < c);
-    }
-
     // Finite Ordered Alphabet
     {
         int32_t b = 0;
@@ -547,19 +413,6 @@ SEQAN_DEFINE_TEST(test_basic_alphabet_adapt_builtins_concepts_uint32)
         SEQAN_ASSERT_EQ(b, 1u);
     }
 
-    // Ordered Alphabet Concept
-    {
-        uint32_t b = 0, c = 42;
-
-        SEQAN_ASSERT_EQ(minValue(uint32_t()), 0u);
-        SEQAN_ASSERT_EQ(minValue<uint32_t>(), 0u);
-        SEQAN_ASSERT_EQ(+(MinValue<uint32_t>::VALUE), 0u);
-        SEQAN_ASSERT_EQ(maxValue(uint32_t()), 4294967295u);
-        SEQAN_ASSERT_EQ(maxValue<uint32_t>(), 4294967295u);
-        SEQAN_ASSERT_EQ(+(MaxValue<uint32_t>::VALUE), 4294967295u);
-        SEQAN_ASSERT(b < c);
-    }
-
     // Finite Ordered Alphabet
     {
         uint32_t b = 0;
@@ -592,19 +445,6 @@ SEQAN_DEFINE_TEST(test_basic_alphabet_adapt_builtins_concepts_int64)
         SEQAN_ASSERT_EQ(b, 1);
     }
 
-    // Ordered Alphabet Concept
-    {
-        int64_t b = 0, c = 42;
-
-        SEQAN_ASSERT_LT(minValue((int64_t)(0)), minValue((int32_t)(0)));
-        SEQAN_ASSERT_LT(minValue<int64_t>(), minValue<int32_t>());
-        SEQAN_ASSERT_LT(+(MinValue<int64_t>::VALUE), +(MinValue<int32_t>::VALUE));
-        SEQAN_ASSERT_GT(maxValue((int64_t)(0)), maxValue((int32_t)(0)));
-        SEQAN_ASSERT_GT(maxValue<int64_t>(), maxValue<int32_t>());
-        SEQAN_ASSERT_GT(+(MaxValue<int64_t>::VALUE), +(MaxValue<int32_t>::VALUE));
-        SEQAN_ASSERT(b < c);
-    }
-
     // Finite Ordered Alphabet
     {
         int64_t b = 0;
@@ -638,19 +478,6 @@ SEQAN_DEFINE_TEST(test_basic_alphabet_adapt_builtins_concepts_uint64)
         SEQAN_ASSERT_EQ(b, 1u);
     }
 
-    // Ordered Alphabet Concept
-    {
-        uint64_t b = 0, c = 42;
-
-        SEQAN_ASSERT_EQ(minValue(uint64_t()), 0u);
-        SEQAN_ASSERT_EQ(minValue<uint64_t>(), 0u);
-        SEQAN_ASSERT_EQ(+(MinValue<uint64_t>::VALUE), 0u);
-        SEQAN_ASSERT_GT(maxValue(uint64_t()), maxValue(uint32_t()));
-        SEQAN_ASSERT_GT(maxValue<uint64_t>(), maxValue<uint32_t>());
-        SEQAN_ASSERT_GT(+(MaxValue<uint64_t>::VALUE), +(MaxValue<uint32_t>::VALUE));
-        SEQAN_ASSERT(b < c);
-    }
-
     // Finite Ordered Alphabet
     {
         uint64_t b = 0;
@@ -684,19 +511,6 @@ SEQAN_DEFINE_TEST(test_basic_alphabet_adapt_builtins_concepts_float)
         SEQAN_ASSERT_EQ(b, 1);
     }
 
-    // Ordered Alphabet Concept
-    {
-        float b = 0, c = 42;
-
-        SEQAN_ASSERT_LT(minValue(float()), 0);
-        SEQAN_ASSERT_LT(minValue<float>(), 0);
-        SEQAN_ASSERT_LT(+(MinValue<float>::VALUE), 0);
-        SEQAN_ASSERT_GT(maxValue(float()), 0);
-        SEQAN_ASSERT_GT(maxValue<float>(), 0);
-        SEQAN_ASSERT_GT(+(MaxValue<float>::VALUE), 0);
-        SEQAN_ASSERT(b < c);
-    }
-
     // Finite Ordered Alphabet - Not Applicable
     // Alphabet With Gaps - Not Applicable
     // Alphabet With Unknown Value - Not Applicable
@@ -716,19 +530,6 @@ SEQAN_DEFINE_TEST(test_basic_alphabet_adapt_builtins_concepts_double)
         SEQAN_ASSERT_EQ(b, 1);
     }
 
-    // Ordered Alphabet Concept
-    {
-        double b = 0, c = 42;
-
-        SEQAN_ASSERT_LT(minValue(double()), 0);
-        SEQAN_ASSERT_LT(minValue<double>(), 0);
-        SEQAN_ASSERT_LT(+(MinValue<double>::VALUE), 0);
-        SEQAN_ASSERT_GT(maxValue(double()), 0);
-        SEQAN_ASSERT_GT(maxValue<double>(), 0);
-        SEQAN_ASSERT_GT(+(MaxValue<double>::VALUE), 0);
-        SEQAN_ASSERT(b < c);
-    }
-
     // Alphabet With Gaps - Not Applicable
     // Alphabet With Unknown Value - Not Applicable
     // Alphabet With Qualities - Not Applicable
diff --git a/tests/basic/test_basic_alphabet_math.h b/tests/basic/test_basic_alphabet_math.h
index 918c124..6b342ed 100644
--- a/tests/basic/test_basic_alphabet_math.h
+++ b/tests/basic/test_basic_alphabet_math.h
@@ -61,34 +61,37 @@ struct MyNumber_
     {}
 };
 
-inline MyNumber_ const &
-infimumValueImpl(MyNumber_ * /*tag*/)
+namespace seqan
 {
-    static const MyNumber_ result(-1);
-    return result;
-}
+template <>
+struct MinValue<MyNumber_>
+{
+    static const MyNumber_ VALUE;
+};
 
-inline MyNumber_ const &
-supremumValueImpl(MyNumber_ * /*tag*/)
+const MyNumber_ MinValue<MyNumber_>::VALUE = MyNumber_(-1);
+
+template <>
+struct MaxValue<MyNumber_>
 {
-    static const MyNumber_ result(1);
-    return result;
+    static const MyNumber_ VALUE;
+};
+
+const MyNumber_ MaxValue<MyNumber_>::VALUE = MyNumber_(1);
 }
 
 SEQAN_DEFINE_TEST(test_basic_alphabet_math_min_value)
 {
     using namespace seqan;
 
-    SEQAN_ASSERT_EQ(minValue<MyNumber_>().value, -1);
-    SEQAN_ASSERT_EQ(minValue(MyNumber_()).value,  -1);
+    SEQAN_ASSERT_EQ(MinValue<MyNumber_>::VALUE.value, -1);
 }
 
 SEQAN_DEFINE_TEST(test_basic_alphabet_math_max_value)
 {
     using namespace seqan;
 
-    SEQAN_ASSERT_EQ(maxValue<MyNumber_>().value, 1);
-    SEQAN_ASSERT_EQ(maxValue(MyNumber_()).value,  1);
+    SEQAN_ASSERT_EQ(MaxValue<MyNumber_>::VALUE.value, 1);
 }
 
 #endif  // #ifndef SEQAN_TESTS_BASIC_TEST_BASIC_ALPHABET_MATH_H_
diff --git a/tests/basic/test_basic_alphabet_residue.h b/tests/basic/test_basic_alphabet_residue.h
index 4db2bd0..a7145db 100644
--- a/tests/basic/test_basic_alphabet_residue.h
+++ b/tests/basic/test_basic_alphabet_residue.h
@@ -102,13 +102,8 @@ SEQAN_DEFINE_TEST(test_basic_alphabet_residue_metafunctions_dna)
 
     // Ordered Alphabet Concept Metafunctions / Type Queries
 
-    SEQAN_ASSERT_EQ(MaxValue<Dna>::VALUE, Dna('T'));
-    SEQAN_ASSERT_EQ(maxValue<Dna>(), Dna('T'));
-    SEQAN_ASSERT_EQ(maxValue(Dna()), Dna('T'));
-
-    SEQAN_ASSERT_EQ(MinValue<Dna>::VALUE, Dna('A'));
-    SEQAN_ASSERT_EQ(minValue<Dna>(), Dna('A'));
-    SEQAN_ASSERT_EQ(minValue(Dna()), Dna('A'));
+    SEQAN_ASSERT_EQ(std::numeric_limits<Dna>::max(), Dna('T'));
+    SEQAN_ASSERT_EQ(std::numeric_limits<Dna>::min(), Dna('A'));
 
     // Finited Ordered Alphabet Concept Metafunctions / Type Queries
 
@@ -133,13 +128,8 @@ SEQAN_DEFINE_TEST(test_basic_alphabet_residue_metafunctions_dna5)
 
     // Ordered Alphabet Concept Metafunctions / Type Queries
 
-    SEQAN_ASSERT_EQ(MaxValue<Dna5>::VALUE, Dna5('N'));
-    SEQAN_ASSERT_EQ(maxValue<Dna5>(), Dna5('N'));
-    SEQAN_ASSERT_EQ(maxValue(Dna5()), Dna5('N'));
-
-    SEQAN_ASSERT_EQ(MinValue<Dna5>::VALUE, Dna5('A'));
-    SEQAN_ASSERT_EQ(minValue<Dna5>(), Dna5('A'));
-    SEQAN_ASSERT_EQ(minValue(Dna5()), Dna5('A'));
+    SEQAN_ASSERT_EQ(std::numeric_limits<Dna5>::max(), Dna5('N'));
+    SEQAN_ASSERT_EQ(std::numeric_limits<Dna5>::min(), Dna5('A'));
 
     // Finited Ordered Alphabet Concept Metafunctions / Type Queries
 
@@ -169,13 +159,8 @@ SEQAN_DEFINE_TEST(test_basic_alphabet_residue_metafunctions_dna_q)
 
     // Ordered Alphabet Concept Metafunctions / Type Queries
 
-    SEQAN_ASSERT_EQ(MaxValue<DnaQ>::VALUE, DnaQ('T'));
-    SEQAN_ASSERT_EQ(maxValue<DnaQ>(), DnaQ('T'));
-    SEQAN_ASSERT_EQ(maxValue(DnaQ()), DnaQ('T'));
-
-    SEQAN_ASSERT_EQ(MinValue<DnaQ>::VALUE, DnaQ('A'));
-    SEQAN_ASSERT_EQ(minValue<DnaQ>(), DnaQ('A'));
-    SEQAN_ASSERT_EQ(minValue(DnaQ()), DnaQ('A'));
+    SEQAN_ASSERT_EQ(std::numeric_limits<DnaQ>::max(), DnaQ('T'));
+    SEQAN_ASSERT_EQ(std::numeric_limits<DnaQ>::min(), DnaQ('A'));
 
     // Finited Ordered Alphabet Concept Metafunctions / Type Queries
 
@@ -205,13 +190,8 @@ SEQAN_DEFINE_TEST(test_basic_alphabet_residue_metafunctions_dna5_q)
 
     // Ordered Alphabet Concept Metafunctions / Type Queries
 
-    SEQAN_ASSERT_EQ(MaxValue<Dna5Q>::VALUE, Dna5Q('N'));
-    SEQAN_ASSERT_EQ(maxValue<Dna5Q>(), Dna5Q('N'));
-    SEQAN_ASSERT_EQ(maxValue(Dna5Q()), Dna5Q('N'));
-
-    SEQAN_ASSERT_EQ(MinValue<Dna5Q>::VALUE, Dna5Q('A'));
-    SEQAN_ASSERT_EQ(minValue<Dna5Q>(), Dna5Q('A'));
-    SEQAN_ASSERT_EQ(minValue(Dna5Q()), Dna5Q('A'));
+    SEQAN_ASSERT_EQ(std::numeric_limits<Dna5Q>::max(), Dna5Q('N'));
+    SEQAN_ASSERT_EQ(std::numeric_limits<Dna5Q>::min(), Dna5Q('A'));
 
     // Finited Ordered Alphabet Concept Metafunctions / Type Queries
 
@@ -246,13 +226,8 @@ SEQAN_DEFINE_TEST(test_basic_alphabet_residue_metafunctions_rna)
 
     // Ordered Alphabet Concept Metafunctions / Type Queries
 
-    SEQAN_ASSERT_EQ(MaxValue<Rna>::VALUE, Rna('U'));
-    SEQAN_ASSERT_EQ(maxValue<Rna>(), Rna('U'));
-    SEQAN_ASSERT_EQ(maxValue(Rna()), Rna('U'));
-
-    SEQAN_ASSERT_EQ(MinValue<Rna>::VALUE, Rna('A'));
-    SEQAN_ASSERT_EQ(minValue<Rna>(), Rna('A'));
-    SEQAN_ASSERT_EQ(minValue(Rna()), Rna('A'));
+    SEQAN_ASSERT_EQ(std::numeric_limits<Rna>::max(), Rna('U'));
+    SEQAN_ASSERT_EQ(std::numeric_limits<Rna>::min(), Rna('A'));
 
     // Finited Ordered Alphabet Concept Metafunctions / Type Queries
 
@@ -277,13 +252,8 @@ SEQAN_DEFINE_TEST(test_basic_alphabet_residue_metafunctions_rna5)
 
     // Ordered Alphabet Concept Metafunctions / Type Queries
 
-    SEQAN_ASSERT_EQ(MaxValue<Rna5>::VALUE, Rna5('N'));
-    SEQAN_ASSERT_EQ(maxValue<Rna5>(), Rna5('N'));
-    SEQAN_ASSERT_EQ(maxValue(Rna5()), Rna5('N'));
-
-    SEQAN_ASSERT_EQ(MinValue<Rna5>::VALUE, Rna5('A'));
-    SEQAN_ASSERT_EQ(minValue<Rna5>(), Rna5('A'));
-    SEQAN_ASSERT_EQ(minValue(Rna5()), Rna5('A'));
+    SEQAN_ASSERT_EQ(std::numeric_limits<Rna5>::max(), Rna5('N'));
+    SEQAN_ASSERT_EQ(std::numeric_limits<Rna5>::min(), Rna5('A'));
 
     // Finited Ordered Alphabet Concept Metafunctions / Type Queries
 
@@ -313,13 +283,8 @@ SEQAN_DEFINE_TEST(test_basic_alphabet_residue_metafunctions_iupac)
 
     // Ordered Alphabet Concept Metafunctions / Type Queries
 
-    SEQAN_ASSERT_EQ(MaxValue<Iupac>::VALUE, Iupac('N'));
-    SEQAN_ASSERT_EQ(maxValue<Iupac>(), Iupac('N'));
-    SEQAN_ASSERT_EQ(maxValue(Iupac()), Iupac('N'));
-
-    SEQAN_ASSERT_EQ(MinValue<Iupac>::VALUE, Iupac('U'));
-    SEQAN_ASSERT_EQ(minValue<Iupac>(), Iupac('U'));
-    SEQAN_ASSERT_EQ(minValue(Iupac()), Iupac('U'));
+    SEQAN_ASSERT_EQ(std::numeric_limits<Iupac>::max(), Iupac('N'));
+    SEQAN_ASSERT_EQ(std::numeric_limits<Iupac>::min(), Iupac('U'));
 
     // Finited Ordered Alphabet Concept Metafunctions / Type Queries
 
@@ -355,14 +320,9 @@ SEQAN_DEFINE_TEST(test_basic_alphabet_residue_metafunctions_amino_acid)
     SEQAN_ASSERT_EQ(+(BitsPerValue<AminoAcid>::VALUE), 5);
 
     // Ordered Alphabet Concept Metafunctions / Type Queries
-    SEQAN_ASSERT_EQ(MaxValue<AminoAcid>::VALUE, 26u);
-    SEQAN_ASSERT_EQ(MaxValue<AminoAcid>::VALUE, AminoAcid('*'));
-    SEQAN_ASSERT_EQ(maxValue<AminoAcid>(), AminoAcid('*'));
-    SEQAN_ASSERT_EQ(maxValue(AminoAcid()), AminoAcid('*'));
-
-    SEQAN_ASSERT_EQ(MinValue<AminoAcid>::VALUE, AminoAcid('A'));
-    SEQAN_ASSERT_EQ(minValue<AminoAcid>(), AminoAcid('A'));
-    SEQAN_ASSERT_EQ(minValue(AminoAcid()), AminoAcid('A'));
+    SEQAN_ASSERT_EQ(std::numeric_limits<AminoAcid>::max(), 26u);
+    SEQAN_ASSERT_EQ(std::numeric_limits<AminoAcid>::max(), AminoAcid('*'));
+    SEQAN_ASSERT_EQ(std::numeric_limits<AminoAcid>::min(), AminoAcid('A'));
 
     // Finited Ordered Alphabet Concept Metafunctions / Type Queries
 
diff --git a/tests/basic/test_basic_concept.cpp b/tests/basic/test_basic_concept.cpp
index 8f96601..6f4aa1a 100644
--- a/tests/basic/test_basic_concept.cpp
+++ b/tests/basic/test_basic_concept.cpp
@@ -38,11 +38,13 @@
 #include <seqan/sequence.h>
 
 #include "test_basic_fundamental_concepts.h"
+#include "test_basic_concepts.h"
 
 SEQAN_BEGIN_TESTSUITE(test_basic_concept)
 {
     SEQAN_CALL_TEST(test_basic_concepts_concept_impl);
     SEQAN_CALL_TEST(test_basic_concepts_concept_refine);
+
+    SEQAN_CALL_TEST(test_basic_concepts_move_construtible_concept);
 }
 SEQAN_END_TESTSUITE
-
diff --git a/tests/basic/test_basic_concepts.h b/tests/basic/test_basic_concepts.h
index a82af76..b3a039b 100644
--- a/tests/basic/test_basic_concepts.h
+++ b/tests/basic/test_basic_concepts.h
@@ -87,4 +87,43 @@ SEQAN_DEFINE_TEST(test_basic_concepts_integer_concept)
     // BOOST_CONCEPT_ASSERT((boost::Integer<double>));
 }
 
+SEQAN_DEFINE_TEST(test_basic_concepts_move_construtible_concept)
+{
+    using namespace seqan;
+
+    struct TestMoveable
+    {
+        TestMoveable() = default;
+
+        TestMoveable(TestMoveable && other)
+        {
+            ignoreUnusedVariableWarning(other);
+        }
+    };
+
+    struct TestNotMoveable
+    {
+        TestNotMoveable() = default;
+
+        TestNotMoveable(TestNotMoveable const & other)
+        {
+            ignoreUnusedVariableWarning(other);
+        }
+    };
+
+    struct TestNotCopyableAndMoveable
+    {
+        TestNotCopyableAndMoveable() = default;
+
+        TestNotCopyableAndMoveable(TestNotCopyableAndMoveable const &) = delete;
+        TestNotCopyableAndMoveable(TestNotCopyableAndMoveable &&) = delete;
+    };
+
+    SEQAN_CONCEPT_ASSERT((MoveConstructible<char>));
+    SEQAN_CONCEPT_ASSERT((MoveConstructible<TestMoveable>));
+    SEQAN_CONCEPT_ASSERT((MoveConstructible<TestNotMoveable>));
+    //NOTE: Fails compiling because of deleted copy and move c'tor, which is the expected behavior.
+    //SEQAN_CONCEPT_ASSERT((MoveConstructible<TestNotCopyableAndMoveable>));
+}
+
 #endif  // #ifndef TESTS_BASIC_TEST_BASIC_CONCEPTS_H_
diff --git a/tests/basic/test_basic_exception.h b/tests/basic/test_basic_exception.h
index f5fe6b9..cc6a86f 100644
--- a/tests/basic/test_basic_exception.h
+++ b/tests/basic/test_basic_exception.h
@@ -43,7 +43,7 @@ SEQAN_DEFINE_TEST(test_basic_exception_try_catch)
     {
         SEQAN_THROW(Exception());
     }
-    SEQAN_CATCH(Exception)
+    SEQAN_CATCH(Exception &)
     {
         return;
     }
@@ -57,7 +57,7 @@ SEQAN_DEFINE_TEST(test_basic_exception_bad_alloc)
     {
         SEQAN_THROW(BadAlloc());
     }
-    SEQAN_CATCH(BadAlloc)
+    SEQAN_CATCH(BadAlloc &)
     {
         return;
     }
@@ -71,7 +71,7 @@ SEQAN_DEFINE_TEST(test_basic_exception_runtime_error)
     {
         SEQAN_THROW(RuntimeError("Throwing a RuntimeError."));
     }
-    SEQAN_CATCH(RuntimeError)
+    SEQAN_CATCH(RuntimeError &)
     {
         return;
     }
diff --git a/tests/basic/test_basic_iterator.h b/tests/basic/test_basic_iterator.h
index e130c41..f17518d 100644
--- a/tests/basic/test_basic_iterator.h
+++ b/tests/basic/test_basic_iterator.h
@@ -276,7 +276,7 @@ SEQAN_DEFINE_TEST(test_basic_iterator_adapt_pointer_transport_value)
         resetCDStructStatics();
 
         CDStruct * ptr = &cs1;
-        assignValue(ptr, cs2);
+        *ptr = cs2;
 
         SEQAN_ASSERT_EQ(ptr->copiedFrom, -1);
         SEQAN_ASSERT_EQ(ptr->movedFrom, -1);
diff --git a/tests/bed_io/test_bed_io.cpp b/tests/bed_io/test_bed_io.cpp
index f2cde99..0489d31 100644
--- a/tests/bed_io/test_bed_io.cpp
+++ b/tests/bed_io/test_bed_io.cpp
@@ -385,8 +385,7 @@ SEQAN_DEFINE_TEST(test_bed_write_bed12_record)
 
 SEQAN_DEFINE_TEST(test_bed_bed_file_read)
 {
-    seqan::CharString inPath = SEQAN_PATH_TO_ROOT();
-    append(inPath, "/tests/bed_io/example.bed");
+    seqan::CharString inPath = getAbsolutePath("/tests/bed_io/example.bed");
 
     seqan::BedFileIn bedStream(toCString(inPath));
 
@@ -410,7 +409,7 @@ SEQAN_DEFINE_TEST(test_bed_bed_file_read)
 
 SEQAN_DEFINE_TEST(test_bed_bed_file_write)
 {
-    seqan::CharString tmpPath = SEQAN_PATH_TO_ROOT();
+    seqan::CharString tmpPath = SEQAN_TEMP_FILENAME();
     append(tmpPath, ".bed");
 
     seqan::BedFileOut bedStream(toCString(tmpPath));
@@ -431,8 +430,7 @@ SEQAN_DEFINE_TEST(test_bed_bed_file_write)
 
     close(bedStream);
 
-    seqan::CharString goldPath(SEQAN_PATH_TO_ROOT());
-    append(goldPath, "/tests/bed_io/example.bed");
+    seqan::CharString goldPath(getAbsolutePath("/tests/bed_io/example.bed"));
     SEQAN_ASSERT(seqan::_compareTextFiles(toCString(tmpPath), toCString(goldPath)));
 }
 
diff --git a/tests/blast/test_blast_input.h b/tests/blast/test_blast_input.h
index 0e2e621..0e922d2 100644
--- a/tests/blast/test_blast_input.h
+++ b/tests/blast/test_blast_input.h
@@ -46,7 +46,7 @@ using namespace seqan;
 inline void
 _test_blast_read_tabular_match_lowlevel(std::string const & path)
 {
-    std::string inPath = std::string(SEQAN_PATH_TO_ROOT()) + std::string(path);
+    std::string inPath = seqan::getAbsolutePath(path.c_str());
 
     std::ifstream ifstream(toCString(inPath),
                            std::ios_base::in | std::ios_base::binary);
@@ -159,8 +159,7 @@ void _testReadTabularWithoutComments(TContext &,
 {
     typedef BlastMatchField<> TField;
 
-    std::string inPath = std::string(SEQAN_PATH_TO_ROOT());
-    inPath += path;
+    std::string inPath = seqan::getAbsolutePath(path.c_str());
 
     BlastRecord<> r;
 
@@ -366,8 +365,7 @@ void _testReadTabularWithComments(TContext &,
 {
     typedef BlastMatchField<> TField;
 
-    std::string inPath = std::string(SEQAN_PATH_TO_ROOT());
-    inPath += path;
+    std::string inPath = seqan::getAbsolutePath(path.c_str());
 
     BlastRecord<> r;
 
diff --git a/tests/consensus/test_consensus.h b/tests/consensus/test_consensus.h
index 31d0257..8bca0ab 100644
--- a/tests/consensus/test_consensus.h
+++ b/tests/consensus/test_consensus.h
@@ -250,8 +250,7 @@ SEQAN_DEFINE_TEST(test_consensus_host_weightedconsensus_score)
 SEQAN_DEFINE_TEST(test_consensus_write_celera_cgb)
 {
     // Get path to input files.
-    seqan::CharString inPathSam = SEQAN_PATH_TO_ROOT();
-    append(inPathSam, "/tests/consensus/toy.sam");
+    seqan::CharString inPathSam = seqan::getAbsolutePath("/tests/consensus/toy.sam");
     // Get path to temporary file.
     seqan::CharString outPathCgb = SEQAN_TEMP_FILENAME();
 
@@ -266,16 +265,14 @@ SEQAN_DEFINE_TEST(test_consensus_write_celera_cgb)
     fCgbOut.close();
 
     // Compare result.
-    seqan::CharString goldPathCgb = SEQAN_PATH_TO_ROOT();
-    append(goldPathCgb, "/tests/consensus/sam_to_cgb_result.cgb");
+    seqan::CharString goldPathCgb = seqan::getAbsolutePath("/tests/consensus/sam_to_cgb_result.cgb");
     SEQAN_ASSERT(seqan::_compareTextFilesAlt(toCString(outPathCgb), toCString(goldPathCgb)));
 }
 
 SEQAN_DEFINE_TEST(test_consensus_write_celera_frg)
 {
     // Get path to input files.
-    seqan::CharString inPathSam = SEQAN_PATH_TO_ROOT();
-    append(inPathSam, "/tests/consensus/toy.sam");
+    seqan::CharString inPathSam = seqan::getAbsolutePath("/tests/consensus/toy.sam");
     // Get path to temporary file.
     seqan::CharString outPathFrg = SEQAN_TEMP_FILENAME();
 
@@ -290,18 +287,15 @@ SEQAN_DEFINE_TEST(test_consensus_write_celera_frg)
     fFrgOut.close();
 
     // Compare result.
-    seqan::CharString goldPathFrg = SEQAN_PATH_TO_ROOT();
-    append(goldPathFrg, "/tests/consensus/sam_to_frg_result.frg");
+    seqan::CharString goldPathFrg = seqan::getAbsolutePath("/tests/consensus/sam_to_frg_result.frg");
     SEQAN_ASSERT(seqan::_compareTextFiles(toCString(outPathFrg), toCString(goldPathFrg)));
 }
 
 SEQAN_DEFINE_TEST(test_consensus_write_fasta_read_format)
 {
     // Get path to input files.
-    seqan::CharString inPathSam = SEQAN_PATH_TO_ROOT();
-    append(inPathSam, "/tests/consensus/toy.sam");
-    seqan::CharString inPathFasta = SEQAN_PATH_TO_ROOT();
-    append(inPathFasta, "/tests/consensus/toy.fa");
+    seqan::CharString inPathSam = seqan::getAbsolutePath("/tests/consensus/toy.sam");
+    seqan::CharString inPathFasta = seqan::getAbsolutePath( "/tests/consensus/toy.fa");
     // Get path to temporary file.
     seqan::CharString outPathFasta = SEQAN_TEMP_FILENAME();
 
@@ -317,16 +311,14 @@ SEQAN_DEFINE_TEST(test_consensus_write_fasta_read_format)
     fFastaOut.close();
 
     // Compare result.
-    seqan::CharString goldPathFasta = SEQAN_PATH_TO_ROOT();
-    append(goldPathFasta, "/tests/consensus/sam_to_fasta_read_result.fa");
+    seqan::CharString goldPathFasta = seqan::getAbsolutePath("/tests/consensus/sam_to_fasta_read_result.fa");
     SEQAN_ASSERT(seqan::_compareTextFiles(toCString(outPathFasta), toCString(goldPathFasta)));
 }
 
 SEQAN_DEFINE_TEST(test_consensus_convert_simple_read_file)
 {
     // Get path to input files.
-    seqan::CharString inPathFasta = SEQAN_PATH_TO_ROOT();
-    append(inPathFasta, "/tests/consensus/simulated_reads.fasta");
+    seqan::CharString inPathFasta = seqan::getAbsolutePath("/tests/consensus/simulated_reads.fasta");
     std::string filePath(toCString(inPathFasta));
     // Get path to temporary file.
     std::string outPathSam = (std::string)SEQAN_TEMP_FILENAME() + ".sam";
@@ -343,8 +335,7 @@ SEQAN_DEFINE_TEST(test_consensus_convert_simple_read_file)
     close(fSamOut);
 
     // Compare result.
-    seqan::CharString goldPathSam = SEQAN_PATH_TO_ROOT();
-    append(goldPathSam, "/tests/consensus/reads_to_sam_read_result.sam");
+    seqan::CharString goldPathSam = seqan::getAbsolutePath("/tests/consensus/reads_to_sam_read_result.sam");
     SEQAN_ASSERT(seqan::_compareTextFiles(outPathSam.c_str(), toCString(goldPathSam)));
 }
 
diff --git a/tests/consensus/test_consensus_realign.h b/tests/consensus/test_consensus_realign.h
index 12bcc28..12de360 100644
--- a/tests/consensus/test_consensus_realign.h
+++ b/tests/consensus/test_consensus_realign.h
@@ -48,8 +48,7 @@ SEQAN_DEFINE_TEST(test_consensus_realign_one_contig_small)
     //
     // There are many superfluous gaps in the SAM file that we will get rid of below.
     seqan::FragmentStore<> store;
-    seqan::CharString samPath = SEQAN_PATH_TO_ROOT();
-    append(samPath, "/tests/consensus/small_example.sam");
+    seqan::CharString samPath = seqan::getAbsolutePath("/tests/consensus/small_example.sam");
     seqan::BamFileIn fSamIn(toCString(samPath));
     readRecords(store, fSamIn);
 
@@ -61,7 +60,7 @@ SEQAN_DEFINE_TEST(test_consensus_realign_one_contig_small)
     seqan::Score<int, seqan::WeightedConsensusScore<
                           seqan::Score<int, seqan::FractionalScore>,
                           seqan::Score<int, seqan::ConsensusScore> > > combinedScore;
-    reAlign(store, combinedScore, 0, 1, 30, false);
+    reAlignment(store, 0, 1, 30, false);
 
     layoutAlignment(layout, store);
     std::stringstream ss;
diff --git a/tests/gff_io/test_gff_io.h b/tests/gff_io/test_gff_io.h
index 342840c..7fae00b 100644
--- a/tests/gff_io/test_gff_io.h
+++ b/tests/gff_io/test_gff_io.h
@@ -44,8 +44,7 @@ using namespace seqan;
 
 SEQAN_DEFINE_TEST(test_store_io_read_record_context_gff)
 {
-    CharString gffPath = SEQAN_PATH_TO_ROOT();
-    append(gffPath, "/tests/gff_io/example.gff");
+    CharString gffPath = getAbsolutePath("/tests/gff_io/example.gff");
 
     String<char, MMap<> > inString;
     open(inString, toCString(gffPath));
@@ -102,8 +101,7 @@ SEQAN_DEFINE_TEST(test_store_io_read_record_context_gff)
 
 SEQAN_DEFINE_TEST(test_store_io_write_record_context_gff)
 {
-    CharString gffPath = SEQAN_PATH_TO_ROOT();
-    append(gffPath, "/tests/gff_io/example.gff");
+    CharString gffPath = getAbsolutePath("/tests/gff_io/example.gff");
 
     String<char, MMap<> > inString;
     open(inString, toCString(gffPath));
@@ -125,8 +123,7 @@ SEQAN_DEFINE_TEST(test_store_io_write_record_context_gff)
         ++count;
     }
 
-    String<char> goldPath = SEQAN_PATH_TO_ROOT();
-    append(goldPath, "/tests/gff_io/example_context.gff");
+    String<char> goldPath = getAbsolutePath("/tests/gff_io/example_context.gff");
     String<char, MMap<> > goldString;
     open(goldString, toCString(goldPath));
 
@@ -135,10 +132,8 @@ SEQAN_DEFINE_TEST(test_store_io_write_record_context_gff)
 
 SEQAN_DEFINE_TEST(test_store_io_comment_processing_context_gff)
 {
-    CharString gffPath = SEQAN_PATH_TO_ROOT();
-
     // slightly modified version of "example.gff". 3 lines of comments are included.
-    append(gffPath, "/tests/gff_io/example_with_comments.gff");
+    CharString gffPath = getAbsolutePath("/tests/gff_io/example_with_comments.gff");
 
     String<char, MMap<> > inString;
     open(inString, toCString(gffPath));
@@ -196,8 +191,7 @@ SEQAN_DEFINE_TEST(test_store_io_comment_processing_context_gff)
 // Complex GTF format, from pseudogenes.org
 SEQAN_DEFINE_TEST(test_store_io_read_record_gtf_pseudogenes)
 {
-    CharString gtfPath = SEQAN_PATH_TO_ROOT();
-    append(gtfPath, "/tests/gff_io/example_pseudogenes.gtf");
+    CharString gtfPath = getAbsolutePath("/tests/gff_io/example_pseudogenes.gtf");
 
     String<char, MMap<> > inString;
     open(inString, toCString(gtfPath));
@@ -263,8 +257,7 @@ SEQAN_DEFINE_TEST(test_store_io_read_record_gtf_pseudogenes)
 
 SEQAN_DEFINE_TEST(test_store_io_read_record_context_gtf)
 {
-    CharString gtfPath = SEQAN_PATH_TO_ROOT();
-    append(gtfPath, "/tests/gff_io/example.gtf");
+    CharString gtfPath = getAbsolutePath("/tests/gff_io/example.gtf");
 
     String<char, MMap<> > inString;
     open(inString, toCString(gtfPath));
@@ -320,8 +313,7 @@ SEQAN_DEFINE_TEST(test_store_io_read_record_context_gtf)
 
 SEQAN_DEFINE_TEST(test_store_io_write_record_context_gtf)
 {
-    CharString gtfPath = SEQAN_PATH_TO_ROOT();
-    append(gtfPath, "/tests/gff_io/example.gtf");
+    CharString gtfPath = getAbsolutePath("/tests/gff_io/example.gtf");
 
     String<char, MMap<> > inString;
     open(inString, toCString(gtfPath));
@@ -347,8 +339,7 @@ SEQAN_DEFINE_TEST(test_store_io_write_record_context_gtf)
         appendValue(temp, 'A');
     }
 
-    String<char> goldPath = SEQAN_PATH_TO_ROOT();
-    append(goldPath, "/tests/gff_io/example_context.gtf");
+    String<char> goldPath = getAbsolutePath("/tests/gff_io/example_context.gtf");
     String<char, MMap<> > goldString;
     open(goldString, toCString(goldPath));
 
@@ -357,8 +348,7 @@ SEQAN_DEFINE_TEST(test_store_io_write_record_context_gtf)
 
 SEQAN_DEFINE_TEST(test_store_io_gff_stream_read_record_gff)
 {
-    CharString gffPath = SEQAN_PATH_TO_ROOT();
-    append(gffPath, "/tests/gff_io/example.gff");
+    CharString gffPath = getAbsolutePath("/tests/gff_io/example.gff");
 
     GffFileIn gffStream(toCString(gffPath));
 
@@ -411,8 +401,7 @@ SEQAN_DEFINE_TEST(test_store_io_gff_stream_read_record_gff)
 
 SEQAN_DEFINE_TEST(test_store_io_gff_stream_read_record_gtf)
 {
-    CharString gffPath = SEQAN_PATH_TO_ROOT();
-    append(gffPath, "/tests/gff_io/example.gtf");
+    CharString gffPath = getAbsolutePath("/tests/gff_io/example.gtf");
 
     GffFileIn gffStream(toCString(gffPath));
 
@@ -463,8 +452,7 @@ SEQAN_DEFINE_TEST(test_store_io_gff_stream_read_record_gtf)
 
 SEQAN_DEFINE_TEST(test_store_io_gff_stream_write_record_gff)
 {
-    CharString gtfPath = SEQAN_PATH_TO_ROOT();
-    append(gtfPath, "/tests/gff_io/example.gff");
+    CharString gtfPath = getAbsolutePath("/tests/gff_io/example.gff");
 
     GffFileIn inStream(toCString(gtfPath));
 
@@ -487,8 +475,7 @@ SEQAN_DEFINE_TEST(test_store_io_gff_stream_write_record_gff)
 
 SEQAN_DEFINE_TEST(test_store_io_gff_stream_write_record_gtf)
 {
-    CharString gtfPath = SEQAN_PATH_TO_ROOT();
-    append(gtfPath, "/tests/gff_io/example.gtf");
+    CharString gtfPath = getAbsolutePath("/tests/gff_io/example.gtf");
 
     GffFileIn inStream(toCString(gtfPath));
 
diff --git a/tests/index/test_index_creation.h b/tests/index/test_index_creation.h
index 97c622c..6852e16 100644
--- a/tests/index/test_index_creation.h
+++ b/tests/index/test_index_creation.h
@@ -138,7 +138,7 @@ SEQAN_DEFINE_TEST(testIndexCreation)
     TArray  child, childExt;
     TText   bwt;
 
-    std::string path = (std::string)SEQAN_PATH_TO_ROOT() + "/tests/index/m_tuberculosis_h37rv.fa";
+    std::string path = getAbsolutePath("/tests/index/m_tuberculosis_h37rv.fa");
 
     SeqFileIn inputFile(path.c_str());
     CharString id;
@@ -241,12 +241,12 @@ SEQAN_DEFINE_TEST(testIndexCreation)
 
     resize(child, size);
     for(unsigned i=0; i<size; ++i)
-        child[i] = maxValue<unsigned>();
+        child[i] = std::numeric_limits<unsigned>::max();
     createChildtab(child, lcp);
 
     unsigned undefs=0;
     for(unsigned i=0; i<size; ++i)
-        if (child[i] == maxValue<unsigned>()) ++undefs;
+        if (child[i] == std::numeric_limits<unsigned>::max()) ++undefs;
     if (undefs) std::cout << undefs << " undefined values";
 
     resize(childExt, size);
diff --git a/tests/index/test_index_helpers.h b/tests/index/test_index_helpers.h
index 9df599c..a4b8683 100644
--- a/tests/index/test_index_helpers.h
+++ b/tests/index/test_index_helpers.h
@@ -60,7 +60,7 @@ void generateText(TText & text, unsigned textLength = 100000)
 {
     typedef typename Value<TText>::Type TChar;
 
-    int minChar = MinValue<TChar>::VALUE;
+    int minChar = std::numeric_limits<TChar>::min();
     unsigned alphabetSize = ValueSize<TChar>::VALUE;
 
     std::mt19937 rng(time(nullptr));
@@ -96,7 +96,7 @@ void generateText(std::mt19937 & rng, TText & text, unsigned textLength = 100000
 {
     typedef typename Value<TText>::Type TChar;
 
-    int minChar = MinValue<TChar>::VALUE;
+    int minChar = std::numeric_limits<TChar>::min();
     unsigned alphabetSize = ValueSize<TChar>::VALUE;
 
     resize(text, textLength);
@@ -114,7 +114,7 @@ void generateText(StringSet<TText, TConfig> & text, unsigned numSeq = 1000, unsi
 {
     typedef typename Value<TText>::Type TChar;
 
-    int minChar = MinValue<TChar>::VALUE;
+    int minChar = std::numeric_limits<TChar>::min();
     unsigned alphabetSize = ValueSize<TChar>::VALUE;
 
     std::mt19937 rng(SEED);
@@ -138,7 +138,7 @@ void generatePattern(StringSet<TText> & pattern, TText const & text, unsigned pa
 {
     typedef typename Value<TText>::Type TChar;
 
-    int minChar = MinValue<TChar>::VALUE;
+    int minChar = std::numeric_limits<TChar>::min();
     unsigned alphabetSize = ValueSize<TChar>::VALUE;
 
     std::mt19937 rng(SEED);
diff --git a/tests/index/test_qgram_index.h b/tests/index/test_qgram_index.h
index 280d3af..b83285b 100644
--- a/tests/index/test_qgram_index.h
+++ b/tests/index/test_qgram_index.h
@@ -211,23 +211,18 @@ void testGappedQGramIndex()
 */
 SEQAN_DEFINE_TEST(testUngappedQGramIndex)
 {
-    String<Dna> text = "CTGAACCCTAAACCCT";
-    int q = 2;
-    Shape<Dna,SimpleShape> shape;
-    resize(shape, q);
+    typedef String<Dna> TString;
+    typedef Shape<Dna, UngappedShape<2> > TShape;
+    typedef Index<TString, IndexQGram<TShape> > TIndex;
+    typedef Position<TString>::Type TPosition;
 
-    typedef Position<String<Dna> >::Type TPosition;
-    String<TPosition> pos;
-    resize(pos, length(text) - q + 1);
+    TString text("CTGAACCCTAAACCCT");
 
-    String<TPosition> dir;
-    int pos_size = _intPow((unsigned)ValueSize<Dna>::VALUE, q);
-    pos_size += 1;
-    resize(dir, pos_size);
-
-    Nothing nothing;
-    createQGramIndex(pos, dir, nothing, text, shape, 1);
+    TIndex index(text);
+    indexCreate(index, QGramSADir());
 
+    String<TPosition> pos(getFibre(index, QGramSA()));
+    String<TPosition> dir(getFibre(index, QGramDir()));
 
     SEQAN_ASSERT(dir[0] == 0);
     SEQAN_ASSERT(dir[1] == 3);
diff --git a/tests/index/test_sa_bwtwalk.h b/tests/index/test_sa_bwtwalk.h
index 1691509..17845f1 100644
--- a/tests/index/test_sa_bwtwalk.h
+++ b/tests/index/test_sa_bwtwalk.h
@@ -115,7 +115,7 @@ SEQAN_DEFINE_TEST(testBWTWalk)
 //#  endif
 //#endif
 
-    std::string path = (std::string)SEQAN_PATH_TO_ROOT() + "/tests/index/m_tuberculosis_h37rv.fa";
+    std::string path = getAbsolutePath("/tests/index/m_tuberculosis_h37rv.fa");
 
     SeqFileIn inputFile(path.c_str());
     CharString text, id;
diff --git a/tests/journaled_string_tree/test_delta_map.h b/tests/journaled_string_tree/test_delta_map.h
index 95decc0..c76bc0a 100644
--- a/tests/journaled_string_tree/test_delta_map.h
+++ b/tests/journaled_string_tree/test_delta_map.h
@@ -262,9 +262,9 @@ SEQAN_DEFINE_TEST(test_delta_map_find)
     DeltaMap<TestDeltaMapConfig> deltaMap;
     createMock(deltaMap);
 
-    SEQAN_ASSERT_EQ(value(find(deltaMap,  2, DeltaTypeSnp())), deltaMap._entries[3]);
-    SEQAN_ASSERT_EQ(value(find(deltaMap,  1, DeltaTypeSV())), deltaMap._entries[2]);
-    SEQAN_ASSERT_EQ(value(find(deltaMap,  20, DeltaTypeDel())), deltaMap._entries[8]);
+    SEQAN_ASSERT_EQ(*find(deltaMap,  2, DeltaTypeSnp()), deltaMap._entries[3]);
+    SEQAN_ASSERT_EQ(*find(deltaMap,  1, DeltaTypeSV()), deltaMap._entries[2]);
+    SEQAN_ASSERT_EQ(*find(deltaMap,  20, DeltaTypeDel()), deltaMap._entries[8]);
     SEQAN_ASSERT(find(deltaMap,  1, DeltaTypeIns()) == end(deltaMap, Standard()));
     SEQAN_ASSERT(find(deltaMap,  6, DeltaTypeSnp()) == end(deltaMap, Standard()));
 }
@@ -355,19 +355,19 @@ _testDeltaMapIterator(TMap & deltaMap)
 
     unsigned counter = 0;
     for (; it != end(deltaMap, Standard()); ++it, ++counter)
-        SEQAN_ASSERT_EQ(value(it), deltaMap._entries[counter]);
+        SEQAN_ASSERT_EQ(*(it), deltaMap._entries[counter]);
     SEQAN_ASSERT_EQ(counter, size(deltaMap));
 
     for (; it != begin(deltaMap, Standard()); --it, --counter)
-        SEQAN_ASSERT_EQ(value(it - 1), deltaMap._entries[counter - 1]);
+        SEQAN_ASSERT_EQ(*(it - 1), deltaMap._entries[counter - 1]);
     SEQAN_ASSERT_EQ(counter, 0u);
 
     for (; !(it == end(deltaMap, Standard())); it++, ++counter)
-        SEQAN_ASSERT_EQ(value(it), deltaMap._entries[counter]);
+        SEQAN_ASSERT_EQ(*(it), deltaMap._entries[counter]);
     SEQAN_ASSERT_EQ(counter, size(deltaMap));
 
     for (; !(it == begin(deltaMap, Standard())); it--, --counter)
-        SEQAN_ASSERT_EQ(value(it - 1), deltaMap._entries[counter - 1]);
+        SEQAN_ASSERT_EQ(*(it - 1), deltaMap._entries[counter - 1]);
     SEQAN_ASSERT_EQ(counter, 0u);
 
 }
diff --git a/tests/journaled_string_tree/test_journaled_string_tree.h b/tests/journaled_string_tree/test_journaled_string_tree.h
index 7d81e79..10bcdf9 100644
--- a/tests/journaled_string_tree/test_journaled_string_tree.h
+++ b/tests/journaled_string_tree/test_journaled_string_tree.h
@@ -290,7 +290,7 @@ SEQAN_DEFINE_TEST(test_journaled_string_tree_max_size)
     typedef typename Member<JournaledStringTree<Dna5String>, JstDeltaMapMember>::Type TDeltaMap;
     typedef typename Size<TDeltaMap>::Type TSize;
 
-    SEQAN_ASSERT_EQ(maxSize(jst), MaxValue<TSize>::VALUE);
+    SEQAN_ASSERT_EQ(maxSize(jst), std::numeric_limits<TSize>::max());
 }
 
 #endif // TESTS_JOURNALED_STRING_TREE_TEST_JOURNALED_STRING_TREE_H_
diff --git a/tests/misc/test_misc.cpp b/tests/misc/test_misc.cpp
index 63aff88..b36fb58 100644
--- a/tests/misc/test_misc.cpp
+++ b/tests/misc/test_misc.cpp
@@ -64,13 +64,13 @@ SEQAN_DEFINE_TEST(test_misc_terminal_get_terminal_size)
 {
     using namespace seqan;
     
-    unsigned cols = maxValue<unsigned>(), rows = maxValue<unsigned>();
+    unsigned cols = std::numeric_limits<unsigned>::max(), rows = std::numeric_limits<unsigned>::max();
     bool succ = getTerminalSize(cols, rows);
 
 #if !defined(STDLIB_VS)
     SEQAN_ASSERT(succ);
-    SEQAN_ASSERT_NEQ(cols, maxValue<unsigned>());
-    SEQAN_ASSERT_NEQ(rows, maxValue<unsigned>());
+    SEQAN_ASSERT_NEQ(cols, std::numeric_limits<unsigned>::max());
+    SEQAN_ASSERT_NEQ(rows, std::numeric_limits<unsigned>::max());
 #else  // #if !defined(STDLIB_VS)
     SEQAN_ASSERT_NOT(succ);
 #endif  // #if !defined(STDLIB_VS)
diff --git a/tests/parse_lm/test_parse_lm.h b/tests/parse_lm/test_parse_lm.h
index 5e4aada..692e989 100644
--- a/tests/parse_lm/test_parse_lm.h
+++ b/tests/parse_lm/test_parse_lm.h
@@ -48,7 +48,7 @@ SEQAN_DEFINE_TEST(test_parse_lm_local_match_constructor)
     // Default constructor.
     {
         TLocalMatch localMatch;
-        unsigned const maxU = MaxValue<unsigned>::VALUE;
+        unsigned const maxU = std::numeric_limits<unsigned>::max();
 
         SEQAN_ASSERT_EQ(maxU, localMatch.id);
         SEQAN_ASSERT_EQ(maxU, localMatch.subjectId);
diff --git a/tests/rna_io/CMakeLists.txt b/tests/rna_io/CMakeLists.txt
index d450d1e..fb2e9a7 100644
--- a/tests/rna_io/CMakeLists.txt
+++ b/tests/rna_io/CMakeLists.txt
@@ -15,7 +15,9 @@ message (STATUS "Configuring tests/rna_io")
 # ----------------------------------------------------------------------------
 
 # Search SeqAn and select dependencies.
-find_package (SeqAn REQUIRED)
+if (NOT "${SEQAN_BUILD_SYSTEM}" STREQUAL "DEVELOP")
+    find_package (SeqAn REQUIRED)
+endif ()
 
 # ----------------------------------------------------------------------------
 # Build Setup
diff --git a/tests/roi_io/test_roi_io.cpp b/tests/roi_io/test_roi_io.cpp
index a671ffa..df34312 100644
--- a/tests/roi_io/test_roi_io.cpp
+++ b/tests/roi_io/test_roi_io.cpp
@@ -90,8 +90,7 @@ SEQAN_DEFINE_TEST(test_roi_write_roi_record)
 
 SEQAN_DEFINE_TEST(test_roi_roi_file_read)
 {
-    seqan::CharString inPath = SEQAN_PATH_TO_ROOT();
-    append(inPath, "/tests/roi_io/example.roi");
+    seqan::CharString inPath = seqan::getAbsolutePath("/tests/roi_io/example.roi");
 
     seqan::RoiFileIn roiFileIn(toCString(inPath));
 
@@ -129,7 +128,7 @@ SEQAN_DEFINE_TEST(test_roi_roi_file_read)
 
 SEQAN_DEFINE_TEST(test_roi_roi_file_write)
 {
-    seqan::CharString tmpPath = SEQAN_PATH_TO_ROOT();
+    seqan::CharString tmpPath = SEQAN_TEMP_FILENAME();
     append(tmpPath, ".roi");
 
     seqan::RoiFileOut roiFileOut(toCString(tmpPath));
@@ -162,8 +161,7 @@ SEQAN_DEFINE_TEST(test_roi_roi_file_write)
 
     close(roiFileOut);
 
-    seqan::CharString goldPath(SEQAN_PATH_TO_ROOT());
-    append(goldPath, "/tests/roi_io/example.roi");
+    seqan::CharString goldPath(seqan::getAbsolutePath("/tests/roi_io/example.roi"));
     SEQAN_ASSERT(seqan::_compareTextFiles(toCString(tmpPath), toCString(goldPath)));
 }
 
diff --git a/tests/score/test_score.cpp b/tests/score/test_score.cpp
index 9dc358a..bea5056 100644
--- a/tests/score/test_score.cpp
+++ b/tests/score/test_score.cpp
@@ -125,8 +125,7 @@ SEQAN_DEFINE_TEST(test_score_matrix) {
 
     // Define path to BLOSUM62 matrix that we want to load.
     // TODO(holtgrew): It should be easier to construct these paths.
-    String<char> pathToTestSrc = SEQAN_PATH_TO_ROOT();
-    append(pathToTestSrc, "/tests/score/");
+    String<char> pathToTestSrc = getAbsolutePath("/tests/score/");
     String<char> pathToBlosum62(pathToTestSrc);
     append(pathToBlosum62, "BLOSUM62");
 
@@ -251,8 +250,7 @@ SEQAN_DEFINE_TEST(test_score_matrix) {
 SEQAN_DEFINE_TEST(test_score_matrix_file) {
     // TODO(holtgrew): It should be easier to construct these paths.
     // The path to the directory with the test's sources and fixtures.
-    String<char> pathToTestSrc = SEQAN_PATH_TO_ROOT();
-    append(pathToTestSrc, "/tests/score/");
+    String<char> pathToTestSrc = getAbsolutePath("/tests/score/");
 
     // Load fixture BLOSUM62 matrix.
     // TODO(holtgrew): Should be done in a function.
@@ -479,8 +477,7 @@ SEQAN_DEFINE_TEST(test_score_matrix_data) {
     typedef Score<TValue, ScoreMatrix<AminoAcid, ScoreMatrixFile> > TScore;
 
     // TODO(holtgrew): It should be easier to construct these paths.
-    String<char> pathToTestSrc = SEQAN_PATH_TO_ROOT();
-    append(pathToTestSrc, "/tests/score/");
+    String<char> pathToTestSrc = getAbsolutePath("/tests/score/");
 
     // Test with BLOSUM30.
     {
diff --git a/tests/seeds/test_align_banded_chain_impl.cpp b/tests/seeds/test_align_banded_chain_impl.cpp
index af04e69..220a0a4 100644
--- a/tests/seeds/test_align_banded_chain_impl.cpp
+++ b/tests/seeds/test_align_banded_chain_impl.cpp
@@ -66,7 +66,7 @@ void testBandedChainAlignmentEmptyChain(TGapCosts const &)
         scoreScheme = Score<int,Simple>(5, -3, -1, -5);
 
     int score = bandedChainAlignment(align, seedSet, scoreScheme, alignConfig, 5);
-    SEQAN_ASSERT_EQ(score, MinValue<int>::VALUE);
+    SEQAN_ASSERT_EQ(score, std::numeric_limits<int>::min());
     SEQAN_ASSERT_EQ(row(align,0), seqH);
     SEQAN_ASSERT_EQ(row(align,1), seqV);
 }
diff --git a/tests/seq_io/test_fai_index.h b/tests/seq_io/test_fai_index.h
index c05984b..a13cf27 100644
--- a/tests/seq_io/test_fai_index.h
+++ b/tests/seq_io/test_fai_index.h
@@ -39,8 +39,7 @@
 
 SEQAN_DEFINE_TEST(test_seq_io_genomic_fai_index_build)
 {
-    seqan::CharString filePath = SEQAN_PATH_TO_ROOT();
-    append(filePath, "/tests/seq_io/adeno_genome.fa");
+    seqan::CharString filePath = getAbsolutePath("/tests/seq_io/adeno_genome.fa");
 
     seqan::FaiIndex faiIndex;
     SEQAN_ASSERT_EQ(build(faiIndex, toCString(filePath)), true);
@@ -54,8 +53,7 @@ SEQAN_DEFINE_TEST(test_seq_io_genomic_fai_index_build)
 
 SEQAN_DEFINE_TEST(test_seq_io_genomic_fai_index_write)
 {
-    seqan::CharString filePath = SEQAN_PATH_TO_ROOT();
-    append(filePath, "/tests/seq_io/adeno_genome.fa");
+    seqan::CharString filePath = getAbsolutePath("/tests/seq_io/adeno_genome.fa");
 
     seqan::FaiIndex faiIndex;
     SEQAN_ASSERT_EQ(build(faiIndex, toCString(filePath)), true);
@@ -64,15 +62,13 @@ SEQAN_DEFINE_TEST(test_seq_io_genomic_fai_index_write)
     seqan::CharString tmpOut = SEQAN_TEMP_FILENAME();
     SEQAN_ASSERT_EQ(save(faiIndex, toCString(tmpOut)), true);
 
-    seqan::CharString pathToExpected = SEQAN_PATH_TO_ROOT();
-    append(pathToExpected, "/tests/seq_io/adeno_genome.fa.fai");
+    seqan::CharString pathToExpected = getAbsolutePath("/tests/seq_io/adeno_genome.fa.fai");
     SEQAN_ASSERT_MSG(seqan::_compareTextFiles(toCString(pathToExpected), toCString(tmpOut)), "Output should match example.");
 }
 
 SEQAN_DEFINE_TEST(test_seq_io_genomic_fai_index_read)
 {
-    seqan::CharString filePath = SEQAN_PATH_TO_ROOT();
-    append(filePath, "/tests/seq_io/adeno_genome.fa");
+    seqan::CharString filePath = getAbsolutePath("/tests/seq_io/adeno_genome.fa");
 
     seqan::FaiIndex faiIndex;
     SEQAN_ASSERT_EQ(open(faiIndex, toCString(filePath)), true);
@@ -86,8 +82,7 @@ SEQAN_DEFINE_TEST(test_seq_io_genomic_fai_index_read)
 
 SEQAN_DEFINE_TEST(test_seq_io_genomic_fai_index_read_sequence)
 {
-    seqan::CharString filePath = SEQAN_PATH_TO_ROOT();
-    append(filePath, "/tests/seq_io/adeno_genome.fa");
+    seqan::CharString filePath = getAbsolutePath("/tests/seq_io/adeno_genome.fa");
 
     seqan::FaiIndex faiIndex;
     SEQAN_ASSERT_EQ(open(faiIndex, toCString(filePath)), true);
@@ -102,8 +97,7 @@ SEQAN_DEFINE_TEST(test_seq_io_genomic_fai_index_read_region)
 {
     // From integers.
     {
-        seqan::CharString filePath = SEQAN_PATH_TO_ROOT();
-        append(filePath, "/tests/seq_io/adeno_genome.fa");
+        seqan::CharString filePath = getAbsolutePath("/tests/seq_io/adeno_genome.fa");
 
         seqan::FaiIndex faiIndex;
         SEQAN_ASSERT_EQ(open(faiIndex, toCString(filePath)), true);
@@ -114,8 +108,7 @@ SEQAN_DEFINE_TEST(test_seq_io_genomic_fai_index_read_region)
     }
     // From integers, over the end of the sequence.
     {
-        seqan::CharString filePath = SEQAN_PATH_TO_ROOT();
-        append(filePath, "/tests/seq_io/adeno_genome.fa");
+        seqan::CharString filePath = getAbsolutePath("/tests/seq_io/adeno_genome.fa");
 
         seqan::FaiIndex faiIndex;
         SEQAN_ASSERT_EQ(open(faiIndex, toCString(filePath)), true);
@@ -126,8 +119,7 @@ SEQAN_DEFINE_TEST(test_seq_io_genomic_fai_index_read_region)
     }
     // From GenomicRegion.
     {
-        seqan::CharString filePath = SEQAN_PATH_TO_ROOT();
-        append(filePath, "/tests/seq_io/adeno_genome.fa");
+        seqan::CharString filePath = getAbsolutePath("/tests/seq_io/adeno_genome.fa");
 
         seqan::FaiIndex faiIndex;
         SEQAN_ASSERT_EQ(open(faiIndex, toCString(filePath)), true);
diff --git a/tests/seq_io/test_sequence_file.h b/tests/seq_io/test_sequence_file.h
index ccd0712..5c95d0a 100644
--- a/tests/seq_io/test_sequence_file.h
+++ b/tests/seq_io/test_sequence_file.h
@@ -47,8 +47,7 @@ SEQAN_DEFINE_TEST(test_seq_io_sequence_file_recognize_file_type_gz_fasta)
 {
 #if SEQAN_HAS_ZLIB
     // Build path to file.
-    seqan::CharString filePath = SEQAN_PATH_TO_ROOT();
-    append(filePath, "/tests/seq_io/test_dna.fa.gz");
+    seqan::CharString filePath = getAbsolutePath("/tests/seq_io/test_dna.fa.gz");
 
     // Create SequenceStream object.
     SeqFileIn seqIO(toCString(filePath));
@@ -62,8 +61,7 @@ SEQAN_DEFINE_TEST(test_seq_io_sequence_file_recognize_file_type_bz2_fasta)
 {
 #if SEQAN_HAS_BZIP2
     // Build path to file.
-    seqan::CharString filePath = SEQAN_PATH_TO_ROOT();
-    append(filePath, "/tests/seq_io/test_dna.fa.bz2");
+    seqan::CharString filePath = getAbsolutePath("/tests/seq_io/test_dna.fa.bz2");
 
     // Create SequenceStream object.
     SeqFileIn seqIO(toCString(filePath));
@@ -80,8 +78,7 @@ SEQAN_DEFINE_TEST(test_seq_io_sequence_file_recognize_file_type_bz2_fasta)
 SEQAN_DEFINE_TEST(test_seq_io_sequence_file_recognize_file_format_text_fasta)
 {
     // Build path to file.
-    seqan::CharString filePath = SEQAN_PATH_TO_ROOT();
-    append(filePath, "/tests/seq_io/test_dna.fa");
+    seqan::CharString filePath = getAbsolutePath("/tests/seq_io/test_dna.fa");
 
     // Create SequenceStream object.
     SeqFileIn seqIO(toCString(filePath));
@@ -93,8 +90,7 @@ SEQAN_DEFINE_TEST(test_seq_io_sequence_file_recognize_file_format_text_fasta)
 SEQAN_DEFINE_TEST(test_seq_io_sequence_file_recognize_file_format_text_fastq)
 {
     // Build path to file.
-    seqan::CharString filePath = SEQAN_PATH_TO_ROOT();
-    append(filePath, "/tests/seq_io/test_dna.fq");
+    seqan::CharString filePath = getAbsolutePath("/tests/seq_io/test_dna.fq");
 
     // Create SequenceStream object.
     SeqFileIn seqIO(toCString(filePath));
@@ -111,8 +107,7 @@ template <typename TId, typename TSeq>
 void testSeqIOSequenceFileReadRecordTextFasta()
 {
     // Build path to file.
-    seqan::CharString filePath = SEQAN_PATH_TO_ROOT();
-    append(filePath, "/tests/seq_io/test_dna.fa");
+    seqan::CharString filePath = getAbsolutePath("/tests/seq_io/test_dna.fa");
 
     // Create SequenceStream object.
     SeqFileIn seqIO(toCString(filePath));
@@ -147,8 +142,7 @@ SEQAN_DEFINE_TEST(test_seq_io_sequence_file_read_record_text_fasta)
 SEQAN_DEFINE_TEST(test_seq_io_sequence_file_read_all_text_fasta)
 {
     // Build path to file.
-    seqan::CharString filePath = SEQAN_PATH_TO_ROOT();
-    append(filePath, "/tests/seq_io/test_dna.fa");
+    seqan::CharString filePath = getAbsolutePath("/tests/seq_io/test_dna.fa");
 
     // Create SequenceStream object.
     SeqFileIn seqIO(toCString(filePath));
@@ -196,8 +190,7 @@ SEQAN_DEFINE_TEST(test_seq_io_sequence_file_write_record_text_fasta)
 
     close(seqIO);  // Make sure we can read this later.
 
-    seqan::CharString pathToExpected = SEQAN_PATH_TO_ROOT();
-    append(pathToExpected, "/tests/seq_io/test_dna.fa");
+    seqan::CharString pathToExpected = getAbsolutePath("/tests/seq_io/test_dna.fa");
     SEQAN_ASSERT_MSG(seqan::_compareTextFilesAlt(toCString(pathToExpected), toCString(filePath)), "Output should match example.");
 }
 
@@ -224,8 +217,7 @@ SEQAN_DEFINE_TEST(test_seq_io_sequence_file_write_all_text_fasta)
 
     close(seqIO);  // Make sure we can read this later.
 
-    seqan::CharString pathToExpected = SEQAN_PATH_TO_ROOT();
-    append(pathToExpected, "/tests/seq_io/test_dna.fa");
+    seqan::CharString pathToExpected = getAbsolutePath("/tests/seq_io/test_dna.fa");
     SEQAN_ASSERT_MSG(seqan::_compareTextFilesAlt(toCString(pathToExpected), toCString(filePath)), "Output should match example.");
 }
 
@@ -234,8 +226,7 @@ SEQAN_DEFINE_TEST(test_seq_io_sequence_file_write_record_text_fastq_no_qual)
     // Build path to file.
     seqan::CharString filePath = SEQAN_TEMP_FILENAME();
     append(filePath, ".fq");
-    seqan::CharString pathToExpected = SEQAN_PATH_TO_ROOT();
-    append(pathToExpected, "/tests/seq_io/test_dna.fq");
+    seqan::CharString pathToExpected = getAbsolutePath("/tests/seq_io/test_dna.fq");
 
     // Create SequenceStream object.
     SeqFileIn seqIn(toCString(pathToExpected));
@@ -281,8 +272,7 @@ SEQAN_DEFINE_TEST(test_seq_io_sequence_file_write_record_text_fastq_with_qual)
 
     close(seqIO);  // Make sure we can read this later.
 
-    seqan::CharString pathToExpected = SEQAN_PATH_TO_ROOT();
-    append(pathToExpected, "/tests/seq_io/test_dna.fq");
+    seqan::CharString pathToExpected = getAbsolutePath("/tests/seq_io/test_dna.fq");
     SEQAN_ASSERT_MSG(seqan::_compareTextFilesAlt(toCString(pathToExpected), toCString(filePath)), "Output should match example.");
 }
 
@@ -309,8 +299,7 @@ SEQAN_DEFINE_TEST(test_seq_io_sequence_file_write_all_text_fastq_no_qual)
 
     close(seqIO);  // Make sure we can read this later.
 
-    seqan::CharString pathToExpected = SEQAN_PATH_TO_ROOT();
-    append(pathToExpected, "/tests/seq_io/test_dna.fq");
+    seqan::CharString pathToExpected = getAbsolutePath("/tests/seq_io/test_dna.fq");
     SEQAN_ASSERT_MSG(seqan::_compareTextFilesAlt(toCString(pathToExpected), toCString(filePath)), "Output should match example.");
 }
 
@@ -341,8 +330,7 @@ SEQAN_DEFINE_TEST(test_seq_io_sequence_file_write_all_text_fastq_with_qual)
 
     close(seqIO);  // Make sure we can read this later.
 
-    seqan::CharString pathToExpected = SEQAN_PATH_TO_ROOT();
-    append(pathToExpected, "/tests/seq_io/test_dna.fq");
+    seqan::CharString pathToExpected = getAbsolutePath("/tests/seq_io/test_dna.fq");
     SEQAN_ASSERT_MSG(seqan::_compareTextFilesAlt(toCString(pathToExpected), toCString(filePath)), "Output should match example.");
 }
 
diff --git a/tests/sequence/test_sequence.h b/tests/sequence/test_sequence.h
index d8dc2c6..36c19f1 100755
--- a/tests/sequence/test_sequence.h
+++ b/tests/sequence/test_sequence.h
@@ -1400,39 +1400,20 @@ std::cout << __LINE__ << std::endl;
 std::cout << __LINE__ << std::endl;
 }
 
-// Test of getValue().
-template <typename TString>
-void testSequenceGetValue(TString & /*Tag*/)
-{
-    typedef typename Value<TString>::Type TValue;
-
-     // In contrast to value(), getValue() does not return a reference but a copy.
-     // We test this using the variable value_.
-    TString string;
-    assign(string, "ACGT");
-    TValue dummy_ = 'T';
-    TValue & value_ = dummy_;
-    SEQAN_ASSERT_EQ(value_, TValue('T'));
-
-    value_ = getValue(string, 0);
-    SEQAN_ASSERT_EQ(value_, TValue('A'));
-
-    value_ = 'T';
-    SEQAN_ASSERT_EQ(getValue(string, 0), TValue('A'));
-}
-
 SEQAN_TYPED_TEST(StringTestCommon, GetValue)
 {
-    CountingChar::clear();
-
-    typename TestFixture::TString str;
-    testSequenceGetValue(str);
-
-    //TODO
-//     typename TestFixture::TString const constStr;
-//     testSequenceGetValue(constStr);
+    SEQAN_SKIP_TEST; // getValue() is deprecated.
 
-    testConstructDeconstruct(str);
+//    CountingChar::clear();
+//
+//    typename TestFixture::TString str;
+//    testSequenceGetValue(str);
+//
+//    //TODO
+////     typename TestFixture::TString const constStr;
+////     testSequenceGetValue(constStr);
+//
+//    testConstructDeconstruct(str);
 }
 
 // Test of insert().
@@ -1536,9 +1517,9 @@ void testSequenceIter(TString & /*Tag*/)
         TIterator iterator = iter(string, 0);
         TStandardIterator standardIterator = iter(string, 0);
         TRootedIterator rootedIterator = iter(string, 0);
-        SEQAN_ASSERT_EQ(getValue(iterator), getValue(string, 0));
-        SEQAN_ASSERT_EQ(getValue(standardIterator), getValue(string, 0));
-        SEQAN_ASSERT_EQ(getValue(rootedIterator), getValue(string, 0));
+        SEQAN_ASSERT_EQ(*iterator, getValue(string, 0));
+        SEQAN_ASSERT_EQ(*standardIterator, getValue(string, 0));
+        SEQAN_ASSERT_EQ(*rootedIterator, getValue(string, 0));
     }
 
     // Test on a non empty string.
@@ -1548,9 +1529,9 @@ void testSequenceIter(TString & /*Tag*/)
         TIterator iterator = iter(string, 3);
         TStandardIterator standardIterator = iter(string, 3);
         TRootedIterator rootedIterator = iter(string, 3);
-        SEQAN_ASSERT_EQ(getValue(iterator), getValue(string, 3));
-        SEQAN_ASSERT_EQ(getValue(standardIterator), getValue(string, 3));
-        SEQAN_ASSERT_EQ(getValue(rootedIterator), getValue(string, 3));
+        SEQAN_ASSERT_EQ(*iterator, getValue(string, 3));
+        SEQAN_ASSERT_EQ(*standardIterator, getValue(string, 3));
+        SEQAN_ASSERT_EQ(*rootedIterator, getValue(string, 3));
     }
 }
 
diff --git a/tests/sequence/test_string_packed_extension.h b/tests/sequence/test_string_packed_extension.h
index e91005b..652369a 100644
--- a/tests/sequence/test_string_packed_extension.h
+++ b/tests/sequence/test_string_packed_extension.h
@@ -628,7 +628,7 @@ void testStringPackedExtensionBitScanForward()
 
     {
         TBitString str;
-        SEQAN_ASSERT_EQ(bitScanForward(str), MaxValue<TPosition>::VALUE);
+        SEQAN_ASSERT_EQ(bitScanForward(str), std::numeric_limits<TPosition>::max());
     }
 }
 
@@ -662,7 +662,7 @@ void testStringPackedExtensionBitScanReverse()
 
     {
         TBitString str;
-        SEQAN_ASSERT_EQ(bitScanForward(str), MaxValue<TPosition>::VALUE);
+        SEQAN_ASSERT_EQ(bitScanForward(str), std::numeric_limits<TPosition>::max());
     }
 }
 
diff --git a/tests/sequence/test_string_set.h b/tests/sequence/test_string_set.h
index 4b7c313..550c0af 100755
--- a/tests/sequence/test_string_set.h
+++ b/tests/sequence/test_string_set.h
@@ -1353,50 +1353,19 @@ SEQAN_TYPED_TEST(StringSetTestCommon, Front)
 //    testConstructDeconstruct(strSet);
 }
 
-// Test of getValue().
-template <typename TStringSet>
-void testStringSetGetValue(TStringSet & /*Tag*/)
-{
-    using namespace seqan;
-
-    typedef typename RemoveConst<TStringSet>::Type TNonConstStringSet;
-    typedef typename TestStringSetValue_<TStringSet>::Type TString;
-
-     // In contrast to value(), getValue() does not return a reference but a copy.
-     // We test this using the variable value_.
-    TString str("CG");
-    TString str2("ACGT");
-    TString str3("CGACGT");
-
-    TNonConstStringSet nonConstStringSet;
-    appendValue(nonConstStringSet, str);
-    appendValue(nonConstStringSet, str2);
-    appendValue(nonConstStringSet, str3);
-    TStringSet stringSet(nonConstStringSet);
-    SEQAN_ASSERT(TString(getValue(stringSet, 1)) == TString(str2));
-}
-
-// TODO(singer): No appendValue for string sets of packed strings
-template <typename TValue, typename TStringSetSpec>
-void testStringSetGetValue(StringSet<String<TValue, Packed<> >, TStringSetSpec> & /*Tag*/) {}
-template <typename TValue, typename TStringSetSpec>
-void testStringSetGetValue(StringSet<String<TValue, Packed<> >, TStringSetSpec> const & /*Tag*/) {}
-template <typename TValue, typename TStringSetSpec>
-void testStringSetGetValue(StringSet<String<TValue, Array<100> >, TStringSetSpec> & /*Tag*/) {}
-template <typename TValue, typename TStringSetSpec>
-void testStringSetGetValue(StringSet<String<TValue, Array<100> >, TStringSetSpec> const & /*Tag*/) {}
-
 SEQAN_TYPED_TEST(StringSetTestCommon, GetValue)
 {
-    CountingChar::clear();
+    SEQAN_SKIP_TEST; // getValue() is deprecated.
 
-    typename TestFixture::TStringSet strSet;
-    testStringSetGetValue(strSet);
-
-    typename TestFixture::TStringSet const constStrSet;
-    testStringSetGetValue(constStrSet);
-
-//    testConstructDeconstruct(strSet);
+//    CountingChar::clear();
+//
+//    typename TestFixture::TStringSet strSet;
+//    testStringSetGetValue(strSet);
+//
+//    typename TestFixture::TStringSet const constStrSet;
+//    testStringSetGetValue(constStrSet);
+//
+////    testConstructDeconstruct(strSet);
 }
 
 // TODO (singer): not defined for const string sets.
@@ -1544,10 +1513,10 @@ void testStringSetIter(TStringSet & /*Tag*/)
         TIterator iterator = iter(stringSet, 0);
         TStandardIterator standardIterator = iter(stringSet, 0);
         TRootedIterator rootedIterator = iter(stringSet, 0);
-        SEQAN_ASSERT(TString(getValue(iterator)) == "AAAA");
-        SEQAN_ASSERT(getValue(iterator) == getValue(stringSet, 0));
-        SEQAN_ASSERT(getValue(standardIterator) == getValue(stringSet, 0));
-        SEQAN_ASSERT(getValue(rootedIterator) == getValue(stringSet, 0));
+        SEQAN_ASSERT(TString(*iterator) == "AAAA");
+        SEQAN_ASSERT(*iterator == getValue(stringSet, 0));
+        SEQAN_ASSERT(*standardIterator == getValue(stringSet, 0));
+        SEQAN_ASSERT(*rootedIterator == getValue(stringSet, 0));
     }
 
     // Test on a non empty stringSet.
@@ -1565,10 +1534,10 @@ void testStringSetIter(TStringSet & /*Tag*/)
         TIterator iterator = iter(stringSet, 3);
         TStandardIterator standardIterator = iter(stringSet, 3);
         TRootedIterator rootedIterator = iter(stringSet, 3);
-        SEQAN_ASSERT(TString(getValue(iterator)) == "TTTT");
-        SEQAN_ASSERT(getValue(iterator) == getValue(stringSet, 3));
-        SEQAN_ASSERT(getValue(standardIterator) == getValue(stringSet, 3));
-        SEQAN_ASSERT(getValue(rootedIterator) == getValue(stringSet, 3));
+        SEQAN_ASSERT(TString(*iterator) == "TTTT");
+        SEQAN_ASSERT(*iterator == getValue(stringSet, 3));
+        SEQAN_ASSERT(*standardIterator == getValue(stringSet, 3));
+        SEQAN_ASSERT(*rootedIterator == getValue(stringSet, 3));
     }
 }
 
diff --git a/tests/simd/CMakeLists.txt b/tests/simd/CMakeLists.txt
index 02e17c9..030c4ca 100644
--- a/tests/simd/CMakeLists.txt
+++ b/tests/simd/CMakeLists.txt
@@ -15,7 +15,10 @@ message (STATUS "Configuring tests/simd")
 # ----------------------------------------------------------------------------
 
 # Search SeqAn and select dependencies.
-find_package (SeqAn REQUIRED)
+if (NOT "${SEQAN_BUILD_SYSTEM}" STREQUAL "DEVELOP")
+    find_package (SeqAn REQUIRED)
+endif ()
+
 include (SeqAnSimdUtility)
 
 # ----------------------------------------------------------------------------
diff --git a/tests/simd/test_simd_vector.h b/tests/simd/test_simd_vector.h
index d9e3c24..822f271 100644
--- a/tests/simd/test_simd_vector.h
+++ b/tests/simd/test_simd_vector.h
@@ -193,7 +193,7 @@ SEQAN_DEFINE_TEST(test_simd_types)
     static_assert(LENGTH<SimdVector<uint32_t, 4>::Type>::VALUE == 4, "128bit register fits 4 int's");
     SimdVector<uint32_t, 4>::Type a128 = {0, 1, 2, 3};
     for (uint32_t i = 0; i < 4; ++i) {
-        // std::cout << i << ": " << a128[i] << " = " << i << std::endl;
+        // std::cout << "DEBUG: " << i << ": " << a128[i] << " = " << i << std::endl;
         SEQAN_ASSERT_EQ(a128[i], i);
     }
 
@@ -212,7 +212,7 @@ SEQAN_DEFINE_TEST(test_simd_types)
     static_assert(LENGTH<SimdVector<uint32_t, 8>::Type>::VALUE == 8, "256bit register fits 8 int's");
     SimdVector<uint32_t, 8>::Type a256 = {0, 1, 2, 3, 4, 5, 6, 7};
     for (uint32_t i = 0; i < 8; ++i) {
-        // std::cout << i << ": " << a256[i] << " = " << i << std::endl;
+        // std::cout << "DEBUG: " << i << ": " << a256[i] << " = " << i << std::endl;
         SEQAN_ASSERT_EQ(a256[i], i);
     }
 #endif
@@ -231,7 +231,7 @@ SEQAN_DEFINE_TEST(test_simd_types)
     static_assert(LENGTH<SimdVector<uint32_t, 16>::Type>::VALUE == 16, "512bit register fits 16 int's");
     SimdVector<uint32_t, 16>::Type a512 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
     for (uint32_t i = 0; i < 16; ++i) {
-        // std::cout << i << ": " << a512[i] << " = " << i << std::endl;
+        // std::cout << "DEBUG: " << i << ": " << a512[i] << " = " << i << std::endl;
         SEQAN_ASSERT_EQ(a512[i], i);
     }
 #endif
@@ -299,7 +299,7 @@ SEQAN_TYPED_TEST(SimdVectorTestCommon, ClearVector)
 
     for (auto i = 0; i < length; ++i)
     {
-        // std::cout << i << " / " << length << ": " << (int)a[i] << " = " << 0 << std::endl;
+        // std::cout << "DEBUG: " << i << " / " << length << ": " << (int)a[i] << " = " << 0 << std::endl;
         SEQAN_ASSERT_EQ(a[i], zero);
     }
 }
@@ -316,7 +316,7 @@ SEQAN_TYPED_TEST(SimdVectorTestCommon, CreateVector)
 
     for (auto i = 0; i < length; ++i)
     {
-        // std::cout << i << " / " << length << ": " << (int)a[i] << " = " << 23 << std::endl;
+        // std::cout << "DEBUG: " << i << " / " << length << ": " << (int)a[i] << " = " << 23 << std::endl;
         SEQAN_ASSERT_EQ(a[i], scalar);
     }
 }
@@ -334,7 +334,7 @@ SEQAN_TYPED_TEST(SimdVectorTestCommon, FillVectorConstant)
 
     for (auto i = 0; i < length; ++i)
     {
-        // std::cout << i << " / " << length << ": " << (int)a[i] << " = " << i << std::endl;
+        // std::cout << "DEBUG: " << i << " / " << length << ": " << (int)a[i] << " = " << i << std::endl;
         SEQAN_ASSERT_EQ(a[i], static_cast<TValue>(5));
     }
 }
@@ -360,7 +360,7 @@ SEQAN_TYPED_TEST(SimdVectorTestCommon, FillVector)
 
     for (auto i = 0; i < length; ++i)
     {
-        // std::cout << i << " / " << length << ": " << (int)a[i] << " = " << i << std::endl;
+        // std::cout << "DEBUG: " << i << " / " << length << ": " << (int)a[i] << " = " << i << std::endl;
         SEQAN_ASSERT_EQ(a[i], static_cast<TValue>(i));
     }
 }
@@ -389,7 +389,7 @@ SEQAN_TYPED_TEST(SimdVectorTestCommon, CmpEqual)
     {
         TValue a_i = (i == 1) ? 23 : (-3 + i * 3);
         TValue b_i = (i == 1) ? 23 : (length - i);
-        // std::cout << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[i] << " == " << (int)b[i] << std::endl;
+        // std::cout << "DEBUG: " << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[i] << " == " << (int)b[i] << std::endl;
         SEQAN_ASSERT_EQ(c[i], a[i] == b[i] ? true_ : false_);
         SEQAN_ASSERT_EQ(c[i], a_i == b_i ? true_ : false_);
     }
@@ -414,7 +414,7 @@ SEQAN_TYPED_TEST(SimdVectorTestCommon, CmpGt)
     for (auto i = 0; i < length; ++i)
     {
         TValue a_i = -3 + i * 3, b_i = length - i;
-        // std::cout << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[i] << " > " << (int)b[i] << std::endl;
+        // std::cout << "DEBUG: " << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[i] << " > " << (int)b[i] << std::endl;
         SEQAN_ASSERT_EQ(c[i], a[i] > b[i] ? true_ : false_);
         SEQAN_ASSERT_EQ(c[i], a_i > b_i ? true_ : false_);
     }
@@ -435,12 +435,33 @@ SEQAN_TYPED_TEST(SimdVectorTestCommon, Max)
     for (auto i = 0; i < length; ++i)
     {
         TValue a_i = -3 + i * 3, b_i = length - i;
-        // std::cout << i << " / " << length << ": " << (int)c[i] << " = max (" << (int)a[i] << ", " << (int)b[i] << ")" << std::endl;
+        // std::cout << "DEBUG: " << i << " / " << length << ": " << (int)c[i] << " = max (" << (int)a[i] << ", " << (int)b[i] << ")" << std::endl;
         SEQAN_ASSERT_EQ(c[i], std::max(a[i], b[i]));
         SEQAN_ASSERT_EQ(c[i], std::max(a_i, b_i));
     }
 }
 
+SEQAN_TYPED_TEST(SimdVectorTestCommon, Min)
+{
+    using namespace seqan;
+    using TSimdVector = typename TestFixture::TSimdVector;
+    using TValue = typename TestFixture::TValue;
+    constexpr auto length = TestFixture::LENGTH;
+
+    TSimdVector a{0u}, b{0u};
+    fillVectors(a, b);
+
+    auto c = min(a, b);
+
+    for (auto i = 0; i < length; ++i)
+    {
+        TValue a_i = -3 + i * 3, b_i = length - i;
+        // std::cout << "DEBUG: " << i << " / " << length << ": " << (int)c[i] << " = min (" << (int)a[i] << ", " << (int)b[i] << ")" << std::endl;
+        SEQAN_ASSERT_EQ(c[i], std::min(a[i], b[i]));
+        SEQAN_ASSERT_EQ(c[i], std::min(a_i, b_i));
+    }
+}
+
 SEQAN_TYPED_TEST(SimdVectorTestCommon, BitwiseOr)
 {
     using namespace seqan;
@@ -456,7 +477,7 @@ SEQAN_TYPED_TEST(SimdVectorTestCommon, BitwiseOr)
     for (auto i = 0; i < length; ++i)
     {
         TValue a_i = -3 + i * 3, b_i = length - i;
-        // std::cout << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[i] << " | " << (int)b[i] << std::endl;
+        // std::cout << "DEBUG: " << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[i] << " | " << (int)b[i] << std::endl;
         SEQAN_ASSERT_EQ(c[i], a[i] | b[i]);
         SEQAN_ASSERT_EQ(c[i], static_cast<TValue>(a_i | b_i));
     }
@@ -478,7 +499,7 @@ SEQAN_TYPED_TEST(SimdVectorTestCommon, BitwiseOrAssign)
     for (auto i = 0; i < length; ++i)
     {
         TValue a_i = -3 + i * 3, b_i = length - i;
-        // std::cout << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[i] << " | " << (int)b[i] << std::endl;
+        // std::cout << "DEBUG: " << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[i] << " | " << (int)b[i] << std::endl;
         SEQAN_ASSERT_EQ(c[i], a[i] | b[i]);
         SEQAN_ASSERT_EQ(c[i], static_cast<TValue>(a_i | b_i));
     }
@@ -499,7 +520,7 @@ SEQAN_TYPED_TEST(SimdVectorTestCommon, BitwiseAnd)
     for (auto i = 0; i < length; ++i)
     {
         TValue a_i = -3 + i * 3, b_i = length - i;
-        // std::cout << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[i] << " & " << (int)b[i] << std::endl;
+        // std::cout << "DEBUG: " << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[i] << " & " << (int)b[i] << std::endl;
         SEQAN_ASSERT_EQ(c[i], a[i] & b[i]);
         SEQAN_ASSERT_EQ(c[i], static_cast<TValue>(a_i & b_i));
     }
@@ -521,7 +542,7 @@ SEQAN_TYPED_TEST(SimdVectorTestCommon, BitwiseAndAssign)
     for (auto i = 0; i < length; ++i)
     {
         TValue a_i = -3 + i * 3, b_i = length - i;
-        // std::cout << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[i] << " & " << (int)b[i] << std::endl;
+        // std::cout << "DEBUG: " << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[i] << " & " << (int)b[i] << std::endl;
         SEQAN_ASSERT_EQ(c[i], a[i] & b[i]);
         SEQAN_ASSERT_EQ(c[i], static_cast<TValue>(a_i & b_i));
     }
@@ -542,7 +563,7 @@ SEQAN_TYPED_TEST(SimdVectorTestCommon, BitwiseNot)
     for (auto i = 0; i < length; ++i)
     {
         TValue a_i = -3 + i * 3;
-        // std::cout << i << " / " << length << ": " << (int)c[i] << " = ~" << (int)a[i] << std::endl;
+        // std::cout << "DEBUG: " << i << " / " << length << ": " << (int)c[i] << " = ~" << (int)a[i] << std::endl;
         SEQAN_ASSERT_EQ(c[i], static_cast<TValue>(~a[i]));
         SEQAN_ASSERT_EQ(c[i], static_cast<TValue>(~a_i));
     }
@@ -563,7 +584,7 @@ SEQAN_TYPED_TEST(SimdVectorTestCommon, Addition)
     for (auto i = 0; i < length; ++i)
     {
         TValue a_i = -3 + i * 3, b_i = length - i;
-        // std::cout << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[i] << " + " << (int)b[i] << std::endl;
+        // std::cout << "DEBUG: " << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[i] << " + " << (int)b[i] << std::endl;
         SEQAN_ASSERT_EQ(c[i], static_cast<TValue>(a[i] + b[i]));
         SEQAN_ASSERT_EQ(c[i], static_cast<TValue>(a_i + b_i));
     }
@@ -584,7 +605,7 @@ SEQAN_TYPED_TEST(SimdVectorTestCommon, Subtraction)
     for (auto i = 0; i < length; ++i)
     {
         TValue a_i = -3 + i * 3, b_i = length - i;
-        // std::cout << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[i] << " - " << (int)b[i] << std::endl;
+        // std::cout << "DEBUG: " << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[i] << " - " << (int)b[i] << std::endl;
         SEQAN_ASSERT_EQ(c[i], static_cast<TValue>(a[i] - b[i]));
         SEQAN_ASSERT_EQ(c[i], static_cast<TValue>(a_i - b_i));
     }
@@ -605,7 +626,7 @@ SEQAN_TYPED_TEST(SimdVectorTestCommon, Multiplication)
     for (size_t i = 0; i < length; ++i)
     {
         TValue a_i = -3 + i * 3, b_i = length - i;
-        // std::cout << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[i] << " * " << (int)b[i] << std::endl;
+        // std::cout << "DEBUG: " << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[i] << " * " << (int)b[i] << std::endl;
         SEQAN_ASSERT_EQ(c[i], static_cast<TValue>(a[i] * b[i]));
         SEQAN_ASSERT_EQ(c[i], static_cast<TValue>(a_i * b_i));
     }
@@ -626,7 +647,7 @@ SEQAN_TYPED_TEST(SimdVectorTestCommon, Division)
     for (auto i = 0; i < length; ++i)
     {
         TValue a_i = -3 + i * 3, b_i = length - i;
-        // std::cout << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[i] << " / " << (int)b[i] << std::endl;
+        // std::cout << "DEBUG: " << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[i] << " / " << (int)b[i] << std::endl;
         SEQAN_ASSERT_EQ(c[i], a[i] / b[i]);
         SEQAN_ASSERT_EQ(c[i], a_i / b_i);
     }
@@ -646,7 +667,7 @@ SEQAN_TYPED_TEST(SimdVectorTestCommon, BitwiseAndNot)
 
     for (auto i = 0; i < length; ++i)
     {
-        // std::cout << i << " / " << length << ": " << (int)c[i] << " = (~" << (int)a[i] << ") & " << (int)b[i] << std::endl;
+        // std::cout << "DEBUG: " << i << " / " << length << ": " << (int)c[i] << " = (~" << (int)a[i] << ") & " << (int)b[i] << std::endl;
         SEQAN_ASSERT_EQ(c[i], static_cast<TValue>(~a[i] & b[i]));
         SEQAN_ASSERT_EQ(c[i], static_cast<TValue>(~(-3 + i * 3) & (length - i)));
     }
@@ -671,7 +692,7 @@ SEQAN_TYPED_TEST(SimdVectorTestCommon, ShiftRightLogical)
     for (auto i = 0; i < length; ++i)
     {
         TValue a_i = i * 3;
-        // std::cout << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[i] << " >> " << (int)2 << std::endl;
+        // std::cout << "DEBUG: " << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[i] << " >> " << (int)2 << std::endl;
         SEQAN_ASSERT_EQ(c[i], a[i] >> 2);
         SEQAN_ASSERT_EQ(c[i], static_cast<TValue>(a_i >> 2));
     }
@@ -692,7 +713,7 @@ SEQAN_TYPED_TEST(SimdVectorTestCommon, Blend)
     for (auto i = 0; i < length; ++i)
     {
         TValue a_i = -3 + i * 3, b_i = length - i;
-        // std::cout << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[i] << " > " << (int)b[i] << " ? " << (int)a[i] << " : " << (int)b[i] << std::endl;
+        // std::cout << "DEBUG: " << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[i] << " > " << (int)b[i] << " ? " << (int)a[i] << " : " << (int)b[i] << std::endl;
         SEQAN_ASSERT_EQ(c[i], a[i] > b[i] ? (TValue)a[i] : (TValue)b[i]);
         SEQAN_ASSERT_EQ(c[i], a_i > b_i ? a_i : b_i);
     }
@@ -713,7 +734,7 @@ SEQAN_TYPED_TEST(SimdVectorTestCommon, Storeu)
 
     for (auto i = 0; i < length; ++i)
     {
-        // std::cout << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[i] << std::endl;
+        // std::cout << "DEBUG: " << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[i] << std::endl;
         SEQAN_ASSERT_EQ(c[i], a[i]);
         SEQAN_ASSERT_EQ(c[i], static_cast<TValue>(-3 + i * 3));
     }
@@ -735,7 +756,7 @@ SEQAN_TYPED_TEST(SimdVectorTestCommon, Load)
 
     for (auto i = 0; i < length; ++i)
     {
-        // std::cout << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[i] << std::endl;
+        // std::cout << "DEBUG: " << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[i] << std::endl;
         SEQAN_ASSERT_EQ(c[i], a[i]);
         SEQAN_ASSERT_EQ(c[i], static_cast<TValue>(-3 + i * 3));
     }
@@ -758,7 +779,7 @@ SEQAN_TYPED_TEST(SimdVectorTestCommon, Gather)
 
     for (auto i = 0; i < length; ++i)
     {
-        // std::cout << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[idx[i]] << std::endl;
+        // std::cout << "DEBUG: " << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[idx[i]] << std::endl;
         SEQAN_ASSERT_EQ(c[i], a[idx[i]]);
         SEQAN_ASSERT_EQ(c[i], a[length - i - 1]);
     }
@@ -779,7 +800,7 @@ SEQAN_TYPED_TEST(SimdVectorTestCommon, ShuffleConstant1)
 
     for (auto i = 0; i < length; ++i)
     {
-        // std::cout << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[idx[i]] << ", idx: " << (int)idx[i] << std::endl;
+        // std::cout << "DEBUG: " << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[idx[i]] << ", idx: " << (int)idx[i] << std::endl;
         SEQAN_ASSERT_EQ(c[i], a[idx[i]]);
         SEQAN_ASSERT_EQ(c[i], a[1]);
     }
@@ -800,7 +821,7 @@ SEQAN_TYPED_TEST(SimdVectorTestCommon, ShuffleConstant2)
 
     for (auto i = 0; i < length; ++i)
     {
-        // std::cout << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[idx[i]] << ", idx: " << (int)idx[i] << std::endl;
+        // std::cout << "DEBUG: " << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[idx[i]] << ", idx: " << (int)idx[i] << std::endl;
         SEQAN_ASSERT_EQ(c[i], a[idx[i]]);
         SEQAN_ASSERT_EQ(c[i], a[length-2]);
     }
@@ -822,7 +843,7 @@ SEQAN_TYPED_TEST(SimdVectorTestCommon, Shuffle)
 
     for (auto i = 0; i < length; ++i)
     {
-        // std::cout << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[idx[i]] << ", idx: " << (int)idx[i] << std::endl;
+        // std::cout << "DEBUG: " << i << " / " << length << ": " << (int)c[i] << " = " << (int)a[idx[i]] << ", idx: " << (int)idx[i] << std::endl;
         SEQAN_ASSERT_EQ(c[i], a[idx[i]]);
         SEQAN_ASSERT_EQ(c[i], a[length - i - 1]);
     }
@@ -849,7 +870,7 @@ inline void test_gather_array()
 
     for (auto i = 0; i < length; ++i)
     {
-        // std::cout << i << " / " << length << ": " << (TValue)c[i] << " = " << (TValue)a[idx[i]] << std::endl;
+        // std::cout << "DEBUG: " << i << " / " << length << ": " << (TValue)c[i] << " = " << (TValue)a[idx[i]] << std::endl;
         SEQAN_ASSERT_EQ(c[i], static_cast<TValue>(a[idx[i]]));
         SEQAN_ASSERT_EQ(c[i], static_cast<TValue>(a[length - i - 1]));
     }
diff --git a/tests/statistics/test_statistics_base.h b/tests/statistics/test_statistics_base.h
index ec27381..ba4395e 100644
--- a/tests/statistics/test_statistics_base.h
+++ b/tests/statistics/test_statistics_base.h
@@ -159,8 +159,7 @@ SEQAN_DEFINE_TEST(test_statistics_statistics)
     MarkovModel<TAlphabet> mmNew(1);
 
 
-    std::string buffer = SEQAN_PATH_TO_ROOT();
-    buffer +="/tests/statistics/zscore_human_mm.3";
+    std::string buffer = getAbsolutePath("/tests/statistics/zscore_human_mm.3");
     FILE *fd = fopen(buffer.c_str(), "r");
     read(fd, mm);
     fclose(fd);
diff --git a/tests/store/test_store_io.h b/tests/store/test_store_io.h
index 358c636..de8331d 100644
--- a/tests/store/test_store_io.h
+++ b/tests/store/test_store_io.h
@@ -45,8 +45,7 @@ SEQAN_DEFINE_TEST(test_store_io_read_ucsc_known_genes)
 {
     // The file contains 13 annotations in total which will be checked line
     // after line.
-    seqan::CharString ucscPath = SEQAN_PATH_TO_ROOT();
-    append(ucscPath, "/tests/store/example_knownGene.txt");
+    seqan::CharString ucscPath = seqan::getAbsolutePath("/tests/store/example_knownGene.txt");
 
     UcscFileIn fin(toCString(ucscPath));
     seqan::FragmentStore<> store;
@@ -56,10 +55,10 @@ SEQAN_DEFINE_TEST(test_store_io_read_ucsc_known_genes)
     it = begin(store, AnnotationTree<>());
 
     SEQAN_ASSERT_EQ(getType(it), "<root>");
-    SEQAN_ASSERT_EQ(getAnnotation(it).beginPos, maxValue(getAnnotation(it).beginPos));
-    SEQAN_ASSERT_EQ(getAnnotation(it).endPos, maxValue(getAnnotation(it).endPos));
+    SEQAN_ASSERT_EQ(getAnnotation(it).beginPos, std::numeric_limits<decltype(getAnnotation(it).beginPos)>::max());
+    SEQAN_ASSERT_EQ(getAnnotation(it).endPos, std::numeric_limits<decltype(getAnnotation(it).endPos)>::max());
     SEQAN_ASSERT_EQ(value(it), 0u);
-    SEQAN_ASSERT_EQ(getAnnotation(it).parentId, maxValue(getAnnotation(it).parentId));
+    SEQAN_ASSERT_EQ(getAnnotation(it).parentId, std::numeric_limits<decltype(getAnnotation(it).parentId)>::max());
     SEQAN_ASSERT_EQ(getParentName(it), "<root>");
     goNext(it);
 
@@ -166,10 +165,8 @@ SEQAN_DEFINE_TEST(test_store_io_read_ucsc_known_genes_and_isoforms)
 {
     // The file contains 13 annotations in total which will be checked line
     // after line.
-    seqan::CharString ucscGenesPath = SEQAN_PATH_TO_ROOT();
-    append(ucscGenesPath, "/tests/store/example_knownGene.txt");
-    seqan::CharString ucscIsoformsPath = SEQAN_PATH_TO_ROOT();
-    append(ucscIsoformsPath, "/tests/store/example_knownIsoforms.txt");
+    seqan::CharString ucscGenesPath = getAbsolutePath("/tests/store/example_knownGene.txt");
+    seqan::CharString ucscIsoformsPath = getAbsolutePath("/tests/store/example_knownIsoforms.txt");
 
     UcscFileIn finGenes(toCString(ucscGenesPath));
     UcscFileIn finIsoforms(toCString(ucscIsoformsPath));
@@ -181,10 +178,10 @@ SEQAN_DEFINE_TEST(test_store_io_read_ucsc_known_genes_and_isoforms)
     it = begin(store, AnnotationTree<>());
 
     SEQAN_ASSERT_EQ(getType(it), "<root>");
-    SEQAN_ASSERT_EQ(getAnnotation(it).beginPos, maxValue(getAnnotation(it).beginPos));
-    SEQAN_ASSERT_EQ(getAnnotation(it).endPos, maxValue(getAnnotation(it).endPos));
+    SEQAN_ASSERT_EQ(getAnnotation(it).beginPos, std::numeric_limits<decltype(getAnnotation(it).beginPos)>::max());
+    SEQAN_ASSERT_EQ(getAnnotation(it).endPos, std::numeric_limits<decltype(getAnnotation(it).endPos)>::max());
     SEQAN_ASSERT_EQ(value(it), 0u);
-    SEQAN_ASSERT_EQ(getAnnotation(it).parentId, maxValue(getAnnotation(it).parentId));
+    SEQAN_ASSERT_EQ(getAnnotation(it).parentId, std::numeric_limits<decltype(getAnnotation(it).parentId)>::max());
     SEQAN_ASSERT_EQ(getParentName(it), "<root>");
     goNext(it);
 
@@ -325,8 +322,7 @@ SEQAN_DEFINE_TEST(test_store_io_read_ucsc_known_genes_and_isoforms)
 
 SEQAN_DEFINE_TEST(test_store_io_write_ucsc_known_genes)
 {
-    seqan::CharString ucscPath = SEQAN_PATH_TO_ROOT();
-    append(ucscPath, "/tests/store/example_knownGene.txt");
+    seqan::CharString ucscPath = getAbsolutePath("/tests/store/example_knownGene.txt");
 
     UcscFileIn fin(toCString(ucscPath));
     seqan::FragmentStore<> store;
@@ -338,16 +334,14 @@ SEQAN_DEFINE_TEST(test_store_io_write_ucsc_known_genes)
     writeRecords(fout, store);
     close(fout);
 
-    seqan::CharString goldPath = SEQAN_PATH_TO_ROOT();
-    append(goldPath, "/tests/store/example_knownGene.txt");
+    seqan::CharString goldPath = getAbsolutePath("/tests/store/example_knownGene.txt");
 
     SEQAN_ASSERT(seqan::_compareTextFilesAlt(toCString(outPath), toCString(goldPath)));
 }
 
 SEQAN_DEFINE_TEST(test_store_io_read_gff)
 {
-    seqan::CharString gffPath = SEQAN_PATH_TO_ROOT();
-    append(gffPath, "/tests/store/example.gff");
+    seqan::CharString gffPath = getAbsolutePath("/tests/store/example.gff");
 
     GffFileIn f(toCString(gffPath));
     typedef typename seqan::FragmentStore<>::TAnnotationStoreElement::TId TId;
@@ -360,10 +354,10 @@ SEQAN_DEFINE_TEST(test_store_io_read_gff)
     it = begin(store, AnnotationTree<>());
 
     SEQAN_ASSERT_EQ(getType(it), "<root>");
-    SEQAN_ASSERT_EQ(getAnnotation(it).beginPos, maxValue(getAnnotation(it).beginPos));
-    SEQAN_ASSERT_EQ(getAnnotation(it).endPos, maxValue(getAnnotation(it).endPos));
+    SEQAN_ASSERT_EQ(getAnnotation(it).beginPos, std::numeric_limits<decltype(getAnnotation(it).beginPos)>::max());
+    SEQAN_ASSERT_EQ(getAnnotation(it).endPos, std::numeric_limits<decltype(getAnnotation(it).endPos)>::max());
     SEQAN_ASSERT_EQ(value(it), 0u);
-    SEQAN_ASSERT_EQ(getAnnotation(it).parentId, maxValue<TId>());
+    SEQAN_ASSERT_EQ(getAnnotation(it).parentId, std::numeric_limits<TId>::max());
     SEQAN_ASSERT_EQ(getParentName(it), "<root>");
     goNext(it);
 
@@ -393,8 +387,7 @@ SEQAN_DEFINE_TEST(test_store_io_read_gff)
 
 SEQAN_DEFINE_TEST(test_store_io_write_gff)
 {
-    seqan::CharString goldPath = SEQAN_PATH_TO_ROOT();
-    append(goldPath, "/tests/store/example.gff");
+    seqan::CharString goldPath = getAbsolutePath("/tests/store/example.gff");
 
     GffFileIn fin(toCString(goldPath));
     seqan::FragmentStore<> store;
@@ -413,8 +406,7 @@ SEQAN_DEFINE_TEST(test_store_io_read_gtf)
 {
     typedef typename seqan::FragmentStore<>::TAnnotationStoreElement::TId TId;
 
-    seqan::CharString gtfPath = SEQAN_PATH_TO_ROOT();
-    append(gtfPath, "/tests/store/example.gtf");
+    seqan::CharString gtfPath = getAbsolutePath("/tests/store/example.gtf");
 
     GffFileIn fin(toCString(gtfPath));
     seqan::FragmentStore<> store;
@@ -424,10 +416,10 @@ SEQAN_DEFINE_TEST(test_store_io_read_gtf)
     it = begin(store, AnnotationTree<>());
 
     SEQAN_ASSERT_EQ(getType(it), "<root>");
-    SEQAN_ASSERT_EQ(getAnnotation(it).beginPos, maxValue(getAnnotation(it).beginPos));
-    SEQAN_ASSERT_EQ(getAnnotation(it).endPos, maxValue(getAnnotation(it).endPos));
+    SEQAN_ASSERT_EQ(getAnnotation(it).beginPos, std::numeric_limits<decltype(getAnnotation(it).beginPos)>::max());
+    SEQAN_ASSERT_EQ(getAnnotation(it).endPos, std::numeric_limits<decltype(getAnnotation(it).endPos)>::max());
     SEQAN_ASSERT_EQ(value(it), 0u);
-    SEQAN_ASSERT_EQ(getAnnotation(it).parentId, maxValue<TId>());
+    SEQAN_ASSERT_EQ(getAnnotation(it).parentId, std::numeric_limits<TId>::max());
     SEQAN_ASSERT_EQ(getParentName(it), "<root>");
     goNext(it);
 
@@ -529,8 +521,7 @@ SEQAN_DEFINE_TEST(test_store_io_read_gtf)
 
 SEQAN_DEFINE_TEST(test_store_io_write_gtf)
 {
-    seqan::CharString goldPath = SEQAN_PATH_TO_ROOT();
-    append(goldPath, "/tests/store/example.gtf");
+    seqan::CharString goldPath = getAbsolutePath("/tests/store/example.gtf");
 
     GffFileIn fin(toCString(goldPath));
     seqan::FragmentStore<> store;
@@ -551,11 +542,11 @@ SEQAN_DEFINE_TEST(test_store_io_sam)
     FragmentStore<> store;
 
     // 1. LOAD CONTIGS
-    std::string goldPathRef = (std::string)SEQAN_PATH_TO_ROOT() + "/tests/store/ex1.fa";
+    std::string goldPathRef = getAbsolutePath("/tests/store/ex1.fa");
     loadContigs(store, toCString(goldPathRef));
 
     // 2. LOAD SAM ALIGNMENTS
-    std::string goldPathSam = (std::string)SEQAN_PATH_TO_ROOT() + "/tests/store/ex1.copy.sam";
+    std::string goldPathSam = getAbsolutePath("/tests/store/ex1.copy.sam");
     BamFileIn inFile(toCString(goldPathSam));
     readRecords(store, inFile);
 
@@ -573,11 +564,11 @@ SEQAN_DEFINE_TEST(test_store_io_sam2)
     FragmentStore<> store;
 
     // 1. LOAD CONTIGS
-    std::string goldPathRef = (std::string)SEQAN_PATH_TO_ROOT() + "/tests/store/ex1.fa";
+    std::string goldPathRef = getAbsolutePath("/tests/store/ex1.fa");
     loadContigs(store, toCString(goldPathRef));
 
     // 2. LOAD SAM ALIGNMENTS
-    std::string goldPathSam = (std::string)SEQAN_PATH_TO_ROOT() + "/tests/store/ex1.copy.sam";
+    std::string goldPathSam = getAbsolutePath("/tests/store/ex1.copy.sam");
     BamFileIn inFile(toCString(goldPathSam));
     readRecords(store, inFile);
 
@@ -595,7 +586,7 @@ void _appendReadAlignments(TFragStore &store, char const *fileName)
 {
     using namespace seqan;
 
-    std::string str = (std::string)SEQAN_PATH_TO_ROOT() + fileName;
+    std::string str = getAbsolutePath(fileName);
     BamFileIn inFile(str.c_str());
     readRecords(store, inFile);
   }
@@ -612,7 +603,8 @@ void _writeStore(TFragStore &store, std::string const &outPath, char const *suff
     printAlignment(file, layout, store, 1, 0, 1030, 0, 36);
     file.close();
 
-    std::string goldPathTxt = (std::string)SEQAN_PATH_TO_ROOT() + "/tests/store/ex1.splitmerge" + suffix;
+    std::string goldFileName = (std::string)"/tests/store/ex1.splitmerge" + (std::string)suffix;
+    std::string goldPathTxt = seqan::getAbsolutePath(goldFileName.c_str());
     SEQAN_ASSERT(seqan::_compareTextFilesAlt(toCString(outPathTxt), toCString(goldPathTxt)));
 }
 
@@ -623,7 +615,7 @@ SEQAN_DEFINE_TEST(test_store_io_split_sam)
     FragmentStore<> store;
 
     // 1. LOAD CONTIGS
-    std::string fastaFileName = (std::string)SEQAN_PATH_TO_ROOT() + "/tests/store/ex1.fa";
+    std::string fastaFileName = seqan::getAbsolutePath("/tests/store/ex1.fa");
     loadContigs(store, toCString(fastaFileName));
 
     std::string outPath = (std::string)SEQAN_TEMP_FILENAME();
@@ -642,7 +634,7 @@ SEQAN_DEFINE_TEST(test_store_io_split_sam)
     writeRecords(outFile, store);
     close(outFile);
 
-    std::string goldPathSam = (std::string)SEQAN_PATH_TO_ROOT() + "/tests/store/ex1.splitmerge.sam";
+    std::string goldPathSam = seqan::getAbsolutePath("/tests/store/ex1.splitmerge.sam");
     SEQAN_ASSERT(seqan::_compareTextFilesAlt(toCString(outPathSam), toCString(goldPathSam)));
 }
 
@@ -654,11 +646,11 @@ SEQAN_DEFINE_TEST(test_store_io_read_bam)
     FragmentStore<> store;
 
     // 1. LOAD CONTIGS
-    std::string fastaFileName = (std::string)SEQAN_PATH_TO_ROOT() + "/tests/store/ex1.fa";
+    std::string fastaFileName = seqan::getAbsolutePath("/tests/store/ex1.fa");
     loadContigs(store, toCString(fastaFileName));
 
     // 2. LOAD BAM ALIGNMENTS
-    std::string bamFileName = (std::string)SEQAN_PATH_TO_ROOT() + "/tests/store/ex1.bam";
+    std::string bamFileName = seqan::getAbsolutePath("/tests/store/ex1.bam");
 
     // Read reference Sam from file.
     {
@@ -678,8 +670,7 @@ SEQAN_DEFINE_TEST(test_store_io_read_bam)
     close(outFile);
 
     // 4. COMPARE BOTH SAM FILES
-    CharString samFileName = SEQAN_PATH_TO_ROOT();
-    append(samFileName, "/tests/store/ex1.copy.sam");
+    CharString samFileName = seqan::getAbsolutePath("/tests/store/ex1.copy.sam");
     SEQAN_ASSERT(seqan::_compareTextFilesAlt(toCString(samFileName), toCString(outFileName)));
 }
 
@@ -690,7 +681,7 @@ SEQAN_DEFINE_TEST(test_store_io_read_bam)
 SEQAN_DEFINE_TEST(test_store_io_read_amos)
 {
     // Get path to input file.
-    std::string inPath = (std::string)SEQAN_PATH_TO_ROOT() + "/tests/store/toy.amos";
+    std::string inPath = seqan::getAbsolutePath("/tests/store/toy.amos");
     // Get path to temporary file.
     std::string outPathSam = (std::string)SEQAN_TEMP_FILENAME() + ".sam";
     std::string outPathFasta = (std::string)SEQAN_TEMP_FILENAME() + ".fa";
@@ -718,11 +709,9 @@ SEQAN_DEFINE_TEST(test_store_io_read_amos)
     SEQAN_ASSERT_EQ(length(store.matePairStore), 1u);
     SEQAN_ASSERT_EQ(length(store.alignedReadStore), 12u);
 
-    seqan::CharString goldPathSam = SEQAN_PATH_TO_ROOT();
-    append(goldPathSam, "/tests/store/amos_to_sam_result.sam");
+    seqan::CharString goldPathSam = seqan::getAbsolutePath("/tests/store/amos_to_sam_result.sam");
     SEQAN_ASSERT(seqan::_compareTextFilesAlt(toCString(outPathSam), toCString(goldPathSam)));
-    seqan::CharString goldPathFasta = SEQAN_PATH_TO_ROOT();
-    append(goldPathFasta, "/tests/store/amos_to_sam_result.fasta");
+    seqan::CharString goldPathFasta = seqan::getAbsolutePath("/tests/store/amos_to_sam_result.fasta");
 
 
     SEQAN_ASSERT(seqan::_compareTextFilesAlt(toCString(outPathFasta), toCString(goldPathFasta)));
@@ -732,8 +721,8 @@ SEQAN_DEFINE_TEST(test_store_io_read_amos)
 SEQAN_DEFINE_TEST(test_store_io_write_amos)
 {
     // Get path to input files.
-    std::string inPathSam = (std::string)SEQAN_PATH_TO_ROOT() + "/tests/store/ex1.copy.sam";
-    std::string inPathFasta = (std::string)SEQAN_PATH_TO_ROOT() + "/tests/store/ex1.fa";
+    std::string inPathSam = seqan::getAbsolutePath("/tests/store/ex1.copy.sam");
+    std::string inPathFasta = seqan::getAbsolutePath("/tests/store/ex1.fa");
     // Get path to temporary file.
     std::string outPathAmos = SEQAN_TEMP_FILENAME();
 
@@ -749,8 +738,7 @@ SEQAN_DEFINE_TEST(test_store_io_write_amos)
     fAmosOut.close();
 
     // Compare result.
-    seqan::CharString goldPathAmos = SEQAN_PATH_TO_ROOT();
-    append(goldPathAmos, "/tests/store/sam_to_amos_result.amos");
+    seqan::CharString goldPathAmos = seqan::getAbsolutePath("/tests/store/sam_to_amos_result.amos");
     SEQAN_ASSERT(seqan::_compareTextFilesAlt(toCString(outPathAmos), toCString(goldPathAmos)));
 }
 
@@ -758,7 +746,7 @@ SEQAN_DEFINE_TEST(test_store_io_write_amos)
 SEQAN_DEFINE_TEST(test_store_io_readwrite_amos)
 {
     // Get path to input files.
-    std::string goldPathAmos = (std::string)SEQAN_PATH_TO_ROOT() + "/tests/store/toy.amos";
+    std::string goldPathAmos = seqan::getAbsolutePath("/tests/store/toy.amos");
     // Get path to temporary file.
     std::string outPathAmos = SEQAN_TEMP_FILENAME();
 
diff --git a/tests/store/test_store_io_bam.h b/tests/store/test_store_io_bam.h
index 0489589..e9df78d 100644
--- a/tests/store/test_store_io_bam.h
+++ b/tests/store/test_store_io_bam.h
@@ -44,15 +44,15 @@ SEQAN_DEFINE_TEST(test_store_io_bam_read)
   /*
     // Construct name to reference FASTA files.
     char fastaBuffer[1023];
-    strcpy(fastaBuffer, SEQAN_PATH_TO_ROOT());
+    strcpy(fastaBuffer, getAbsolutePath(""));
     strcat(fastaBuffer, "/projects/tests/store/toy.fa");
     // Construct file name to SAM file.
     char samBuffer[1023];
-    strcpy(samBuffer, SEQAN_PATH_TO_ROOT());
+    strcpy(samBuffer, getAbsolutePath(""));
     strcat(samBuffer, "/projects/tests/store/toy.sam");
     // Construct file name to BAM file.
     char bamBuffer[1023];
-    strcpy(bamBuffer, SEQAN_PATH_TO_ROOT());
+    strcpy(bamBuffer, getAbsolutePath(""));
     strcat(bamBuffer, "/projects/tests/store/toy.bam");
 
     // Load FragmentStore from SAM and BAM file.
@@ -117,12 +117,12 @@ SEQAN_DEFINE_TEST(test_store_io_bam_write)
 {
     // Construct name to reference FASTA files.
     char fastaBuffer[1023];
-    strcpy(fastaBuffer, SEQAN_PATH_TO_ROOT());
+    strcpy(fastaBuffer, getAbsolutePath(""));
     strcat(fastaBuffer, "/projects/tests/store/toy.fa");
     // strcat(fastaBuffer, "/projects/tests/store/ex1.fa");
     // Construct file name to SAM file.
     char samBuffer[1023];
-    strcpy(samBuffer, SEQAN_PATH_TO_ROOT());
+    strcpy(samBuffer, getAbsolutePath(""));
     strcat(samBuffer, "/projects/tests/store/toy.sam");
     // strcat(samBuffer, "/projects/tests/store/ex1.sam");
     // Construct path to a temporary output file.
diff --git a/tests/stream/test_stream_lexical_cast.h b/tests/stream/test_stream_lexical_cast.h
index f8c40f9..19c0d78 100644
--- a/tests/stream/test_stream_lexical_cast.h
+++ b/tests/stream/test_stream_lexical_cast.h
@@ -197,7 +197,7 @@ SEQAN_TYPED_TEST(LexicalCastTest, FloatingPointSource)
 
     assign(this->source, "-123.45");
     bool success = lexicalCast(this->target, this->source);
-    SEQAN_ASSERT(success ^ IsIntegral<typename TestFixture::TTarget>::VALUE);
+    SEQAN_ASSERT(success ^ Is<IntegerConcept<typename TestFixture::TTarget> >::Type::VALUE);
     if (success) SEQAN_ASSERT_LT(this->target + reciprocal, epsilon);
 }
 
@@ -232,7 +232,7 @@ SEQAN_TYPED_TEST(LexicalCastTest, Exception)
     {
         this->target = lexicalCast<typename TestFixture::TTarget>(this->source);
     }
-    catch (BadLexicalCast)
+    catch (BadLexicalCast &)
     {
         return;
     }
diff --git a/tests/stream/test_stream_tokenization.h b/tests/stream/test_stream_tokenization.h
index 4fdcece..533b6cb 100644
--- a/tests/stream/test_stream_tokenization.h
+++ b/tests/stream/test_stream_tokenization.h
@@ -203,7 +203,7 @@ SEQAN_TYPED_TEST(TokenizationTest, read)
     // check EOF-handling
     clear(buf);
     readUntil(buf, ctx.iter, EqualsChar<'*'>());
-    SEQAN_ASSERT_EQ(value(ctx.iter), '*');
+    SEQAN_ASSERT_EQ(*(ctx.iter), '*');
 
     clear(buf);
     SEQAN_ASSERT_EQ(read(buf,ctx.iter, 3), 1);
@@ -222,14 +222,14 @@ SEQAN_TYPED_TEST(TokenizationTest, ReadIgnoring)
 
     // skip to where we want to go
     readUntil(buf, ctx.iter, IsInAlphabet<Dna5>());
-    SEQAN_ASSERT_EQ(value(ctx.iter), 'A');
+    SEQAN_ASSERT_EQ(*(ctx.iter), 'A');
 
     readUntil(buf2, ctx.iter, NotFunctor<OrFunctor<IsInAlphabet<Dna5>, IsWhitespace> >(), IsWhitespace());
     SEQAN_ASSERT_EQ(buf2, "AAAACCCGGGTTTTCG");
-    SEQAN_ASSERT_EQ(value(ctx.iter), 'f');
+    SEQAN_ASSERT_EQ(*(ctx.iter), 'f');
 
     readUntil(buf, ctx.iter, IsInAlphabet<Dna5>());
-    SEQAN_ASSERT_EQ(value(ctx.iter), 'A');
+    SEQAN_ASSERT_EQ(*(ctx.iter), 'A');
 
     clear(buf2);
     readUntil(buf2, ctx.iter, EqualsChar<'_'>(), NotFunctor<IsInAlphabet<Dna5> >());
@@ -246,16 +246,16 @@ SEQAN_TYPED_TEST(TokenizationTest, ReadUntil_ReadLine)
     CharString buf;
     // skip to where we want to go
     readUntil(buf, ctx.iter, EqualsChar<'A'>());
-    SEQAN_ASSERT_EQ(value(ctx.iter), 'A');
+    SEQAN_ASSERT_EQ(*(ctx.iter), 'A');
 
     clear(buf);
     readLine(buf, ctx.iter);
     SEQAN_ASSERT_EQ(buf, "AAAACCCGGGTTT");
-    SEQAN_ASSERT_EQ(value(ctx.iter), ' ');
+    SEQAN_ASSERT_EQ(*(ctx.iter), ' ');
 
     clear(buf);
     readLine(buf, ctx.iter);
-    SEQAN_ASSERT_EQ(value(ctx.iter), '\a');
+    SEQAN_ASSERT_EQ(*(ctx.iter), '\a');
 
     clear(buf);
     readUntil(buf, ctx.iter, EqualsChar<'1'>());
@@ -263,12 +263,12 @@ SEQAN_TYPED_TEST(TokenizationTest, ReadUntil_ReadLine)
     clear(buf);
     readLine(buf, ctx.iter);
     SEQAN_ASSERT_EQ(buf, "123gogogo ");
-    SEQAN_ASSERT_EQ(value(ctx.iter), 'T');
+    SEQAN_ASSERT_EQ(*(ctx.iter), 'T');
 
     // check EOF-handling
     clear(buf);
     readUntil(buf, ctx.iter, EqualsChar<'*'>());
-    SEQAN_ASSERT_EQ(value(ctx.iter), '*');
+    SEQAN_ASSERT_EQ(*(ctx.iter), '*');
 
     clear(buf);
     readLine(buf, ctx.iter);
@@ -283,35 +283,35 @@ SEQAN_TYPED_TEST(TokenizationTest, SkipUntil)
     SEQAN_ASSERT_NOT(atEnd(ctx.iter));
 
     skipUntil(ctx.iter, EqualsChar<'.'>());
-    SEQAN_ASSERT_EQ(value(ctx.iter), '.');
+    SEQAN_ASSERT_EQ(*(ctx.iter), '.');
 
     skipUntil(ctx.iter, IsBlank());
-    SEQAN_ASSERT_EQ(value(ctx.iter), ' ');
+    SEQAN_ASSERT_EQ(*(ctx.iter), ' ');
 
     skipUntil(ctx.iter, EqualsChar<'A'>());
-    SEQAN_ASSERT_EQ(value(ctx.iter), 'A');
+    SEQAN_ASSERT_EQ(*(ctx.iter), 'A');
 
     skipUntil(ctx.iter, IsWhitespace());
-    SEQAN_ASSERT_EQ(value(ctx.iter), '\n');
+    SEQAN_ASSERT_EQ(*(ctx.iter), '\n');
 
     skipUntil(ctx.iter, EqualsChar<'A'>());
-    SEQAN_ASSERT_EQ(value(ctx.iter), 'A');
+    SEQAN_ASSERT_EQ(*(ctx.iter), 'A');
 
     skipUntil(ctx.iter, IsBlank());
-    SEQAN_ASSERT_EQ(value(ctx.iter), ' ');
+    SEQAN_ASSERT_EQ(*(ctx.iter), ' ');
 
     skipUntil(ctx.iter, EqualsChar<'A'>());
-    SEQAN_ASSERT_EQ(value(ctx.iter), 'A');
+    SEQAN_ASSERT_EQ(*(ctx.iter), 'A');
 
     skipUntil(ctx.iter, IsWhitespace());
-    SEQAN_ASSERT_EQ(value(ctx.iter), '\n');
+    SEQAN_ASSERT_EQ(*(ctx.iter), '\n');
 
     skipUntil(ctx.iter, IsGraph()); // skip over \a
-    SEQAN_ASSERT_EQ(value(ctx.iter), '1');
+    SEQAN_ASSERT_EQ(*(ctx.iter), '1');
 
     // check EOF-handling
     skipUntil(ctx.iter, EqualsChar<'*'>());
-    SEQAN_ASSERT_EQ(value(ctx.iter), '*');
+    SEQAN_ASSERT_EQ(*(ctx.iter), '*');
 
     skipUntil(ctx.iter, IsWhitespace());
     SEQAN_ASSERT(atEnd(ctx.iter));
@@ -324,37 +324,37 @@ SEQAN_TYPED_TEST(TokenizationTest, SkipLine)
     SEQAN_ASSERT_NOT(atEnd(ctx.iter));
 
     skipLine(ctx.iter);
-    SEQAN_ASSERT_EQ(value(ctx.iter), ' ');
+    SEQAN_ASSERT_EQ(*(ctx.iter), ' ');
 
     skipLine(ctx.iter);
-    SEQAN_ASSERT_EQ(value(ctx.iter), '\a');
+    SEQAN_ASSERT_EQ(*(ctx.iter), '\a');
 
     skipLine(ctx.iter);
-    SEQAN_ASSERT_EQ(value(ctx.iter), 'T');
+    SEQAN_ASSERT_EQ(*(ctx.iter), 'T');
 
     skipLine(ctx.iter);
-    SEQAN_ASSERT_EQ(value(ctx.iter), 'e');
+    SEQAN_ASSERT_EQ(*(ctx.iter), 'e');
 
     skipLine(ctx.iter);
-    SEQAN_ASSERT_EQ(value(ctx.iter), 'e');
+    SEQAN_ASSERT_EQ(*(ctx.iter), 'e');
 
     skipLine(ctx.iter);
-    SEQAN_ASSERT_EQ(value(ctx.iter), '\n');
+    SEQAN_ASSERT_EQ(*(ctx.iter), '\n');
 
     skipLine(ctx.iter);
-    SEQAN_ASSERT_EQ(value(ctx.iter), '\v');
+    SEQAN_ASSERT_EQ(*(ctx.iter), '\v');
 
     skipLine(ctx.iter);
-    SEQAN_ASSERT_EQ(value(ctx.iter), '\r');
+    SEQAN_ASSERT_EQ(*(ctx.iter), '\r');
 
     skipLine(ctx.iter);
-    SEQAN_ASSERT_EQ(value(ctx.iter), 'A');
+    SEQAN_ASSERT_EQ(*(ctx.iter), 'A');
 
     skipLine(ctx.iter);
-    SEQAN_ASSERT_EQ(value(ctx.iter), '\n');
+    SEQAN_ASSERT_EQ(*(ctx.iter), '\n');
 
     skipLine(ctx.iter);
-    SEQAN_ASSERT_EQ(value(ctx.iter), 'A');
+    SEQAN_ASSERT_EQ(*(ctx.iter), 'A');
 
     skipLine(ctx.iter);
     SEQAN_ASSERT(atEnd(ctx.iter));
diff --git a/tests/stream/test_stream_virtual_stream.h b/tests/stream/test_stream_virtual_stream.h
index 81d0bc3..23ba0a5 100644
--- a/tests/stream/test_stream_virtual_stream.h
+++ b/tests/stream/test_stream_virtual_stream.h
@@ -76,8 +76,7 @@ IIIIIIII\n";
 
 SEQAN_TYPED_TEST(VStreamTest, Construct)
 {
-    CharString fileName = SEQAN_PATH_TO_ROOT();
-    append(fileName, "/tests/seq_io/test_dna.fq");
+    CharString fileName = getAbsolutePath("/tests/seq_io/test_dna.fq");
     append(fileName, FileExtensions<typename TestFixture::Type>::VALUE[0]);
     VirtualStream<char, Input> vstream(toCString(fileName), OPEN_RDONLY);
     SEQAN_ASSERT((bool)vstream);
@@ -89,8 +88,7 @@ SEQAN_TYPED_TEST(VStreamTest, Construct)
 
 SEQAN_TYPED_TEST(VStreamTest, OpenClose)
 {
-    CharString fileName = SEQAN_PATH_TO_ROOT();
-    append(fileName, "/tests/seq_io/test_dna.fq");
+    CharString fileName = getAbsolutePath("/tests/seq_io/test_dna.fq");
     append(fileName, FileExtensions<typename TestFixture::Type>::VALUE[0]);
     VirtualStream<char, Input> vstream;
 
@@ -111,8 +109,7 @@ SEQAN_TYPED_TEST(VStreamTest, OpenClose)
 SEQAN_TYPED_TEST(VStreamTest, Decompression)
 {
     typedef typename TestFixture::Type TCompressionTag;
-    CharString fileName = SEQAN_PATH_TO_ROOT();
-    append(fileName, "/tests/seq_io/test_dna.fq");
+    CharString fileName = getAbsolutePath("/tests/seq_io/test_dna.fq");
     append(fileName, FileExtensions<TCompressionTag>::VALUE[0]);
     VirtualStream<char, Input> vstream(toCString(fileName), OPEN_RDONLY);
     SEQAN_ASSERT((bool)vstream);
@@ -123,8 +120,7 @@ SEQAN_TYPED_TEST(VStreamTest, Decompression)
     close(vstream);
     SEQAN_ASSERT_NOT((bool)vstream);
 
-    fileName = SEQAN_PATH_TO_ROOT();
-    append(fileName, "/tests/seq_io/test_dna.fa");
+    fileName = getAbsolutePath("/tests/seq_io/test_dna.fa");
     append(fileName, FileExtensions<TCompressionTag>::VALUE[0]);
     open(vstream, toCString(toCString(fileName)), OPEN_RDONLY);
 
@@ -164,8 +160,7 @@ SEQAN_TYPED_TEST(VStreamTest, Compression)
 SEQAN_TYPED_TEST(VStreamTest, AutoDetection)
 {
     typedef typename TestFixture::Type TCompressionTag;
-    CharString fileName = SEQAN_PATH_TO_ROOT();
-    append(fileName, "/tests/seq_io/test_dna.fq");
+    CharString fileName = getAbsolutePath("/tests/seq_io/test_dna.fq");
     append(fileName, FileExtensions<TCompressionTag>::VALUE[0]);
     std::fstream file(toCString(fileName), std::ios::in | std::ios::binary);
 
diff --git a/tests/tabix_io/test_tabix_io.h b/tests/tabix_io/test_tabix_io.h
index b076e4c..a0f1ac8 100644
--- a/tests/tabix_io/test_tabix_io.h
+++ b/tests/tabix_io/test_tabix_io.h
@@ -43,11 +43,11 @@
 #include <seqan/tabix_io.h>
 
 
+#if SEQAN_HAS_ZLIB
 SEQAN_DEFINE_TEST(test_tabix_io_read_indexed_vcf)
 {
     // Open TABIX file
-    seqan::CharString vcfPath = SEQAN_PATH_TO_ROOT();
-    append(vcfPath, "/tests/tabix_io/test.vcf.gz");
+    seqan::CharString vcfPath = seqan::getAbsolutePath("/tests/tabix_io/test.vcf.gz");
     seqan::VcfFileIn vcfFile(toCString(vcfPath));
 
     // Read header (to get the contig names)
@@ -116,5 +116,12 @@ SEQAN_DEFINE_TEST(test_tabix_io_read_indexed_vcf)
     SEQAN_ASSERT_NOT(atEnd(vcfFile));
 }
 
+#else // SEQAN_HAS_ZLIB
+SEQAN_DEFINE_TEST(test_tabix_io_read_indexed_vcf)
+{
+    SEQAN_SKIP_TEST;
+}
+#endif // SEQAN_HAS_ZLIB
+
 
 #endif  // SEQAN_TESTS_TABIX_TEST_TABIX_IO_H_
diff --git a/tests/translation/test_translation.h b/tests/translation/test_translation.h
index 88ec7a9..50bbdbb 100644
--- a/tests/translation/test_translation.h
+++ b/tests/translation/test_translation.h
@@ -620,9 +620,10 @@ SEQAN_DEFINE_TEST(test_translation_stringset_multiframe_parallel)
 
 SEQAN_DEFINE_TEST(test_translation_stringset_multiframe_concatdirect_parallel)
 {
-
+#ifndef __alpha__ // NOTE(h-2): fails on alpha for unknown reasons
     test_translation_stringset_multiframe_impl0<Owner<ConcatDirect<> >,
                                                 Parallel>();
+#endif
 }
 
 #endif  // SEQAN_TESTS_BASIC_TEST_TRANSLATION_H_
diff --git a/tests/ucsc_io/test_ucsc_io.cpp b/tests/ucsc_io/test_ucsc_io.cpp
index 2c28ef9..7a2fec3 100755
--- a/tests/ucsc_io/test_ucsc_io.cpp
+++ b/tests/ucsc_io/test_ucsc_io.cpp
@@ -48,8 +48,7 @@ SEQAN_DEFINE_TEST(test_ucsc_io_read_record_ucsc_known_genes)
 {
     // The file contains 13 annotations in total which will be checked line
     // after line.
-    CharString ucscPath = SEQAN_PATH_TO_ROOT();
-    append(ucscPath, "/tests/ucsc_io/example_knownGene.txt");
+    CharString ucscPath = getAbsolutePath("/tests/ucsc_io/example_knownGene.txt");
 
     String<char, MMap<> > mmapString;
     SEQAN_ASSERT(open(mmapString, toCString(ucscPath)));
@@ -104,8 +103,7 @@ SEQAN_DEFINE_TEST(test_ucsc_io_read_record_ucsc_known_isoforms)
 {
     // The file contains 13 annotations in total which will be checked line
     // after line.
-    CharString ucscPath = SEQAN_PATH_TO_ROOT();
-    append(ucscPath, "/tests/ucsc_io/example_knownIsoforms.txt");
+    CharString ucscPath = getAbsolutePath("/tests/ucsc_io/example_knownIsoforms.txt");
 
     String<char, MMap<> > mmapString;
     SEQAN_ASSERT(open(mmapString, toCString(ucscPath)));
@@ -136,8 +134,7 @@ SEQAN_DEFINE_TEST(test_ucsc_io_read_record_ucsc_known_isoforms)
 
 SEQAN_DEFINE_TEST(test_ucsc_io_write_record_ucsc_known_genes)
 {
-    CharString ucscPath = SEQAN_PATH_TO_ROOT();
-    append(ucscPath, "/tests/store/example_knownGene.txt");
+    CharString ucscPath = getAbsolutePath("/tests/store/example_knownGene.txt");
 
     String<char, MMap<> > mmapString;
     SEQAN_ASSERT(open(mmapString, toCString(ucscPath)));
@@ -157,8 +154,7 @@ SEQAN_DEFINE_TEST(test_ucsc_io_write_record_ucsc_known_genes)
 
 SEQAN_DEFINE_TEST(test_ucsc_io_write_record_ucsc_known_isoforms)
 {
-    CharString ucscPath = SEQAN_PATH_TO_ROOT();
-    append(ucscPath, "/tests/store/example_knownIsoforms.txt");
+    CharString ucscPath = getAbsolutePath("/tests/store/example_knownIsoforms.txt");
 
     String<char, MMap<> > mmapString;
     SEQAN_ASSERT(open(mmapString, toCString(ucscPath)));
@@ -180,8 +176,7 @@ SEQAN_DEFINE_TEST(test_ucsc_io_ucsc_file_in_read_record_ucsc_known_genes)
 {
     // The file contains 13 annotations in total which will be checked line
     // after line.
-    CharString ucscPath = SEQAN_PATH_TO_ROOT();
-    append(ucscPath, "/tests/ucsc_io/example_with_errors_knownGene.txt");
+    CharString ucscPath = getAbsolutePath("/tests/ucsc_io/example_with_errors_knownGene.txt");
 
     UcscFileIn ucscFileIn(toCString(ucscPath));
     UcscRecord record;
@@ -231,8 +226,7 @@ SEQAN_DEFINE_TEST(test_ucsc_io_ucsc_file_in_read_record_ucsc_known_isoforms)
 {
     // The file contains 13 annotations in total which will be checked line
     // after line.
-    CharString ucscPath = SEQAN_PATH_TO_ROOT();
-    append(ucscPath, "/tests/ucsc_io/example_knownIsoforms.txt");
+    CharString ucscPath = getAbsolutePath("/tests/ucsc_io/example_knownIsoforms.txt");
 
     
     UcscFileIn ucscFileIn(toCString(ucscPath));
@@ -259,8 +253,7 @@ SEQAN_DEFINE_TEST(test_ucsc_io_ucsc_file_in_read_record_ucsc_known_isoforms)
 
 SEQAN_DEFINE_TEST(test_ucsc_io_ucsc_file_out_write_record_ucsc_known_genes)
 {
-    CharString ucscPath = SEQAN_PATH_TO_ROOT();
-    append(ucscPath, "/tests/store/example_knownGene.txt");
+    CharString ucscPath = getAbsolutePath("/tests/store/example_knownGene.txt");
 
     String<char, MMap<> > mmapString;
     SEQAN_ASSERT(open(mmapString, toCString(ucscPath)));
@@ -281,8 +274,7 @@ SEQAN_DEFINE_TEST(test_ucsc_io_ucsc_file_out_write_record_ucsc_known_genes)
 
 SEQAN_DEFINE_TEST(test_ucsc_io_ucsc_file_out_write_record_ucsc_known_isoforms)
 {
-    CharString ucscPath = SEQAN_PATH_TO_ROOT();
-    append(ucscPath, "/tests/store/example_knownIsoforms.txt");
+    CharString ucscPath = getAbsolutePath("/tests/store/example_knownIsoforms.txt");
 
     String<char, MMap<> > mmapString;
     SEQAN_ASSERT(open(mmapString, toCString(ucscPath)));
diff --git a/tests/vcf_io/test_vcf_io.h b/tests/vcf_io/test_vcf_io.h
index 33ab5db..c9d1852 100644
--- a/tests/vcf_io/test_vcf_io.h
+++ b/tests/vcf_io/test_vcf_io.h
@@ -44,8 +44,7 @@
 
 SEQAN_DEFINE_TEST(test_vcf_io_read_vcf_header)
 {
-    seqan::CharString vcfPath = SEQAN_PATH_TO_ROOT();
-    append(vcfPath, "/tests/vcf_io/example.vcf");
+    seqan::CharString vcfPath = seqan::getAbsolutePath("/tests/vcf_io/example.vcf");
 
     seqan::String<char, seqan::MMap<> > mmapString;
     SEQAN_ASSERT(open(mmapString, toCString(vcfPath)));
@@ -106,8 +105,7 @@ SEQAN_DEFINE_TEST(test_vcf_io_read_vcf_header)
 
 SEQAN_DEFINE_TEST(test_vcf_io_read_vcf_record)
 {
-    seqan::CharString vcfPath = SEQAN_PATH_TO_ROOT();
-    append(vcfPath, "/tests/vcf_io/example_records_with_errors.vcf");
+    seqan::CharString vcfPath = seqan::getAbsolutePath("/tests/vcf_io/example_records_with_errors.vcf");
 
     seqan::String<char, seqan::MMap<> > mmapString;
     open(mmapString, toCString(vcfPath));
@@ -171,8 +169,7 @@ SEQAN_DEFINE_TEST(test_vcf_io_read_vcf_record)
 
 SEQAN_DEFINE_TEST(test_vcf_io_vcf_file_read_record)
 {
-    seqan::CharString vcfPath = SEQAN_PATH_TO_ROOT();
-    append(vcfPath, "/tests/vcf_io/example.vcf");
+    seqan::CharString vcfPath = seqan::getAbsolutePath("/tests/vcf_io/example.vcf");
 
     seqan::VcfFileIn vcfStream(toCString(vcfPath));
     seqan::VcfHeader header;
@@ -322,14 +319,14 @@ SEQAN_DEFINE_TEST(test_vcf_io_write_vcf_header)
     writeHeader(iter, vcfHeader, vcfIOContext, seqan::Vcf());
     file.close();
 
-    std::string goldPath = (std::string)SEQAN_PATH_TO_ROOT() + "/tests/vcf_io/vcf_header.vcf";
+    std::string goldPath = seqan::getAbsolutePath("/tests/vcf_io/vcf_header.vcf");
     SEQAN_ASSERT(seqan::_compareTextFilesAlt(tmpPath.c_str(), goldPath.c_str()));
 }
 
 
 SEQAN_DEFINE_TEST(test_vcf_io_write_vcf_record)
 {
-    std::string goldPath = (std::string)SEQAN_PATH_TO_ROOT() + "/tests/vcf_io/example_records.vcf";
+    std::string goldPath = seqan::getAbsolutePath("/tests/vcf_io/example_records.vcf");
     std::string tmpPath = (std::string)SEQAN_TEMP_FILENAME() + ".vcf";
 
     std::ifstream file(goldPath.c_str());
@@ -462,8 +459,7 @@ SEQAN_DEFINE_TEST(test_vcf_io_vcf_file_write_record)
 
     close(vcfStream);
 
-    seqan::CharString goldPath(SEQAN_PATH_TO_ROOT());
-    append(goldPath, "/tests/vcf_io/example.vcf");
+    seqan::CharString goldPath(seqan::getAbsolutePath("/tests/vcf_io/example.vcf"));
     SEQAN_ASSERT(seqan::_compareTextFilesAlt(tmpPath.c_str(), toCString(goldPath)));
 }
 
diff --git a/util/cmake/SeqAnBuildSystem.cmake b/util/cmake/SeqAnBuildSystem.cmake
index e705b0e..e642f81 100644
--- a/util/cmake/SeqAnBuildSystem.cmake
+++ b/util/cmake/SeqAnBuildSystem.cmake
@@ -44,6 +44,12 @@
 # SEQAN_RELEASE_LIBRARY
 # APP:${app_name}
 
+# require python 2.7, not python3
+set(PythonInterp_FIND_VERSION 2.7)
+set(PythonInterp_FIND_VERSION_MAJOR 2)
+set(PythonInterp_FIND_VERSION_MINOR 7)
+set(PythonInterp_FIND_VERSION_COUNT 2)
+
 include (SeqAnUsabilityAnalyzer)
 include (CheckCXXCompilerFlag)
 
@@ -784,9 +790,15 @@ function (seqan_register_demos PREFIX)
             (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.6.0))
             set (SKIP TRUE)
         # bug in visual studio
-        elseif ((ENTRY MATCHES "queue_example.cpp") AND
-                COMPILER_MSVC)
+        elseif ((ENTRY MATCHES "queue_example.cpp") AND COMPILER_MSVC)
             set (SKIP TRUE)
+        # all demos/* that require ZLIB[_FOUND]
+        elseif (NOT ZLIB_FOUND)
+            if ((ENTRY MATCHES "tabix_io/tabix_vcf.cpp") OR
+                (ENTRY MATCHES "sam_and_bam_io/example7.cpp") OR
+                (ENTRY MATCHES "unassigned_or_unused/bamutil.cpp"))
+                set (SKIP TRUE)
+            endif()
         endif ()
 
         if (SKIP)
diff --git a/util/cmake/SeqAnContribs.cmake b/util/cmake/SeqAnContribs.cmake
index 16c3e6a..bac9029 100644
--- a/util/cmake/SeqAnContribs.cmake
+++ b/util/cmake/SeqAnContribs.cmake
@@ -35,83 +35,68 @@
 # ============================================================================
 
 if (WIN32)
-  # For all contrib versions...
-  foreach (_SEQAN_CONTRIB_VERSION D20170601 D20160115)
+# For all contrib versions...
+foreach (_SEQAN_CONTRIB_VERSION D20170601 D20160115)
     set (_SEQAN_CONTRIB_DIR "seqan-contrib-${_SEQAN_CONTRIB_VERSION}")
 
-	  # Determine architecture for the precompiled contribs.
-	  if (CMAKE_SIZEOF_VOID_P EQUAL 8)
-		set (CONTRIB_ARCH "x64")
-	  else ()
-		set (CONTRIB_ARCH "x86")
-	  endif ()
+    # Determine architecture for the precompiled contribs.
+    if (CMAKE_SIZEOF_VOID_P EQUAL 8)
+        set (CONTRIB_ARCH "x64")
+    else ()
+        set (CONTRIB_ARCH "x86")
+    endif ()
 
-	  # Try to figure out where the user installed the contrib.  We expect
-	  # it to be either in C:\, or one of the Program Files dirs.
-	  #
-	  # First, look into Program Files on 64 bit.
-	  if (DEFINED ENV{ProgramW6432})
-		if (IS_DIRECTORY "$ENV{ProgramW6432}/${_SEQAN_CONTRIB_DIR}-${CONTRIB_ARCH}")
-		  set (SEQAN_CONTRIB_BASE "$ENV{ProgramW6432}/${_SEQAN_CONTRIB_DIR}-${CONTRIB_ARCH}")
-		endif (IS_DIRECTORY "$ENV{ProgramW6432}/${_SEQAN_CONTRIB_DIR}-${CONTRIB_ARCH}")
-	  endif (DEFINED ENV{ProgramW6432})
-	  # Try out Program Files for 32bit Windows.
-	  if (NOT DEFINED SEQAN_CONTRIB_BASE)
-		if (IS_DIRECTORY "$ENV{ProgramFiles}/${_SEQAN_CONTRIB_DIR}-${CONTRIB_ARCH}")
-		  set (SEQAN_CONTRIB_BASE "$ENV{ProgramFiles}/${_SEQAN_CONTRIB_DIR}-${CONTRIB_ARCH}")
-		endif (IS_DIRECTORY "$ENV{ProgramFiles}/${_SEQAN_CONTRIB_DIR}-${CONTRIB_ARCH}")
-	  endif (NOT DEFINED SEQAN_CONTRIB_BASE)
-	  # Try out on C:/.
-	  if (NOT DEFINED SEQAN_CONTRIB_BASE)
-		if (IS_DIRECTORY C:\\${_SEQAN_CONTRIB_DIR}-${CONTRIB_ARCH})
-		  set (SEQAN_CONTRIB_BASE "C:\\${_SEQAN_CONTRIB_DIR}-${CONTRIB_ARCH}")
-		elseif ()
-		  set (SEQAN_CONTRIB_BASE "C:\\${_SEQAN_CONTRIB_DIR}-${CONTRIB_ARCH}")
-		endif ()
-	  endif (NOT DEFINED SEQAN_CONTRIB_BASE)
-      # Try to fall back to x64 on C:\ (MinGW is only available as 32 bit).
-      set (CONTRIB_ARCH "x64")
-      if (NOT DEFINED SEQAN_CONTRIB_BASE)
-        if (IS_DIRECTORY "C:\\${_SEQAN_CONTRIB_DIR}-${CONTRIB_ARCH}")
-          set (SEQAN_CONTRIB_BASE "C:\\${_SEQAN_CONTRIB_DIR}-${CONTRIB_ARCH}")
+    # Try to figure out where the user installed the contrib.  We expect
+    # it to be either in C:\, or one of the Program Files dirs.
+    #
+    # First, look into Program Files on 64 bit.
+    # Then look into C:\\ and finally check special environment variable.
+
+    set(_paths "$ENV{ProgramW6432}" "$ENV{ProgramFiles}" "C:" "$ENV{SEQAN_WIN_CONTRIB_DIRECTORY}")
+
+    foreach(path ${_paths})
+        set(path "${path}/${_SEQAN_CONTRIB_DIR}-${CONTRIB_ARCH}")
+        # message("Path is ${path}")
+        if (IS_DIRECTORY "${path}")
+            set (SEQAN_CONTRIB_BASE "${path}")
+            break ()
         endif ()
-      endif ()
+    endforeach ()
 
-	  # Debug help.
-      #if (NOT DEFINED SEQAN_CONTRIB_BASE)
-      #	message("SEQAN_CONTRIB_BASE is undefined!")
-      #else (NOT DEFINED SEQAN_CONTRIB_BASE)
-      #	message("SEQAN_CONTRIB_BASE is ${SEQAN_CONTRIB_BASE}")
-      #endif (NOT DEFINED SEQAN_CONTRIB_BASE)
+	# Debug help.
+    # if (NOT DEFINED SEQAN_CONTRIB_BASE)
+    #     message("SEQAN_CONTRIB_BASE is undefined!")
+    # else (NOT DEFINED SEQAN_CONTRIB_BASE)
+    #   	message("SEQAN_CONTRIB_BASE is ${SEQAN_CONTRIB_BASE}")
+    # endif (NOT DEFINED SEQAN_CONTRIB_BASE)
 
-	  # Try to figure out the generator.
-	  if (IS_DIRECTORY ${SEQAN_CONTRIB_BASE})
-		if (CMAKE_GENERATOR MATCHES "^Visual Studio .*")
-		  string (REGEX REPLACE "^Visual Studio ([0-9]+).*$" "\\1" SEQAN_CONTRIB_VARIANT ${CMAKE_GENERATOR})
-		  set (SEQAN_CONTRIB_VARIANT "vs${SEQAN_CONTRIB_VARIANT}")
-		elseif (MINGW)
-		  set (SEQAN_CONTRIB_VARIANT mingw)
-		endif (CMAKE_GENERATOR MATCHES "^Visual Studio .*")
+    # Try to figure out the generator.
+    if (IS_DIRECTORY ${SEQAN_CONTRIB_BASE})
+        if (CMAKE_GENERATOR MATCHES "^Visual Studio .*")
+            string (REGEX REPLACE "^Visual Studio ([0-9]+).*$" "\\1" SEQAN_CONTRIB_VARIANT ${CMAKE_GENERATOR})
+            set (SEQAN_CONTRIB_VARIANT "vs${SEQAN_CONTRIB_VARIANT}")
+        elseif (MINGW)
+            set (SEQAN_CONTRIB_VARIANT mingw)
+        endif (CMAKE_GENERATOR MATCHES "^Visual Studio .*")
 
         #message(STATUS "SEQAN_CONTRIB_BASE    is ${SEQAN_CONTRIB_BASE}")
         #message(STATUS "SEQAN_CONTRIB_VARIANT is ${SEQAN_CONTRIB_VARIANT}")
 
-		# Compose contrib path.
-		set(SEQAN_CONTRIB_PATH "${SEQAN_CONTRIB_BASE}/${SEQAN_CONTRIB_VARIANT}")
+        # Compose contrib path.
+        set(SEQAN_CONTRIB_PATH "${SEQAN_CONTRIB_BASE}/${SEQAN_CONTRIB_VARIANT}")
 
-		# Extend CMAKE_PREFIX_PATH.
-		if (IS_DIRECTORY ${SEQAN_CONTRIB_PATH})
-		  set (CMAKE_PREFIX_PATH ${SEQAN_CONTRIB_PATH} ${CMAKE_PREFIX_PATH})
-		endif (IS_DIRECTORY ${SEQAN_CONTRIB_PATH})
-	  endif (IS_DIRECTORY ${SEQAN_CONTRIB_BASE})
+        # Extend CMAKE_PREFIX_PATH.
+        if (IS_DIRECTORY ${SEQAN_CONTRIB_PATH})
+            set (CMAKE_PREFIX_PATH ${SEQAN_CONTRIB_PATH} ${CMAKE_PREFIX_PATH})
+        endif (IS_DIRECTORY ${SEQAN_CONTRIB_PATH})
+    endif (IS_DIRECTORY ${SEQAN_CONTRIB_BASE})
 
-      message(STATUS "CMAKE_PREFIX_PATH is \"${CMAKE_PREFIX_PATH}\".")
+    message(STATUS "CMAKE_PREFIX_PATH is \"${CMAKE_PREFIX_PATH}\".")
 
-      # Break out if contribs could be found.
-      if (DEFINED SEQAN_CONTRIB_BASE)
+    # Break out if contribs could be found.
+    if (DEFINED SEQAN_CONTRIB_BASE)
         break ()  # found contribs at current path
-      endif (DEFINED SEQAN_CONTRIB_BASE)
+    endif (DEFINED SEQAN_CONTRIB_BASE)
 
-    endforeach ()  # all contrib versions.
+endforeach ()  # all contrib versions.
 endif (WIN32)
-
diff --git a/util/cmake/SeqAnSimdUtility.cmake b/util/cmake/SeqAnSimdUtility.cmake
index 4d22d6f..e48d46c 100644
--- a/util/cmake/SeqAnSimdUtility.cmake
+++ b/util/cmake/SeqAnSimdUtility.cmake
@@ -88,7 +88,6 @@
 #         (e.g. sse4, avx2, avx512_knl, avx512_skx, avx512_cnl)
 #
 
-find_package (SeqAn CONFIG REQUIRED)
 find_package (SDE)
 find_package (Umesimd)
 
@@ -185,18 +184,22 @@ set(SEQAN_SIMD_AVX512_KNL_SOURCE
 "#include <cstdint>
 #include <immintrin.h>
 #include <iostream>
+#include <random>
 
 int main() {
+  std::random_device r;
+  std::default_random_engine e(r());
+  std::uniform_int_distribution<int64_t> d(1, 10);
+
   alignas(64) uint64_t s[]{9,9,9,9,9,9,9,9};
   alignas(64) uint64_t t[]{0,0,0,0,0,0,0,0};
 
   // gcc 4.9 does not know _mm512_cmpgt_epu64_mask
-  volatile auto a = _mm512_setr_epi64(7,6,5,4,3,2,1,0);
+  volatile auto a = _mm512_setr_epi64(d(e),d(e),d(e),d(e),d(e),d(e),d(e),d(e));
   volatile auto m = _mm512_cmpgt_epu64_mask(a, _mm512_set1_epi64(4)); // m = a > 4
   volatile auto z = _mm512_mask_load_epi64(a, m, s); // (a > 4) ? s : a
   _mm512_store_epi64(t, z);
 
-  // (9, 9, 9, 4, 3, 2, 1, 0)
   std::cout << \"(\" << t[0] << \", \" << t[1] << \", \" << t[2] << \", \" << t[3] << \", ...)\" << std::endl;
   return 0;
 }")
@@ -206,6 +209,7 @@ set(SEQAN_SIMD_AVX512_CNL_SOURCE "${SEQAN_SIMD_AVX512_KNL_SOURCE}")
 
 set(SEQAN_SIMD_SEQANSIMD_SOURCE
 "#include <cstdint>
+#include <iostream>
 using int32x4_t = int32_t __attribute__ ((__vector_size__(4 * sizeof(int32_t)))); // SSE4 = 128bit
 using int32x8_t = int32_t __attribute__ ((__vector_size__(8 * sizeof(int32_t)))); // AVX2 = 256bit
 
@@ -266,7 +270,12 @@ int main() {
   auto z = x + y;
 
   // gcc 4.9 bug
-  constexpr auto length = LENGTH<int32x8_t>::VALUE;
+  constexpr auto length1 = LENGTH<int32x4_t>::VALUE;
+  constexpr auto length2 = LENGTH<int32x8_t>::VALUE;
+  static_assert(length1 == 4u, \"\");
+  static_assert(length2 == 8u, \"\");
+  std::cout << \"length1: \" << length1 << std::endl;
+  std::cout << \"length2: \" << length2 << std::endl;
 
   // icc 16.0.0, 16.0.1 bug
   assign(a, 0, 4);
@@ -395,6 +404,7 @@ macro(detect_simd_support)
         endforeach()
 
         # test seqan simd
+        set(CMAKE_REQUIRED_FLAGS "")
         check_cxx_source_compiles("${SEQAN_SIMD_SEQANSIMD_SOURCE}" SEQAN_SIMD_SEQANSIMD_SUPPORTED)
 
         # try-compile known compiler crashes/errors with seqan-simd and exclude them
@@ -522,10 +532,11 @@ macro(add_simd_platform_tests target)
     set(umesimd_test_blacklist "")
 
     if (COMPILER_CLANG)
-        # clang >=4.0.0
-        if (NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.0) AND (";${SEQAN_SIMD_COMPILER_SUPPORTS_SEQANSIMD};" MATCHES ";avx512_skx;"))
-            message(AUTHOR_WARNING "Clang >=4.0.0 reevaluate if AVX512_skx (seqan-simd only) binaries are working. "
-                    "At least https://llvm.org/bugs/show_bug.cgi?id=31731 seems to be fixed")
+        # clang 4.x
+        if (NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.0) AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0) AND (";${SEQAN_SIMD_COMPILER_SUPPORTS_SEQANSIMD};" MATCHES ";avx512_skx;"))
+            message(AUTHOR_WARNING "Clang 4.x; reevaluate if AVX512_skx (seqan-simd only) binaries are working. "
+                    "An earlier version had an Internal Compiler Error (https://llvm.org/bugs/show_bug.cgi?id=31731), "
+                    "which was fixed, the produced binaries might work now. (clang 5.0 is known to work)")
         # clang =3.9.0
         elseif (NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.9) AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.9.1)
             # Build the executables, but don't execute them, because clang <= 3.9.x
@@ -583,10 +594,10 @@ macro(add_simd_platform_tests target)
     set(seqansimd_compile_blacklist ${seqansimd_compile_blacklist} ${_simd_intrinsics_blacklist} ${_simd_seqansimd_blacklist})
     set(umesimd_compile_blacklist ${umesimd_compile_blacklist} ${_simd_intrinsics_blacklist})
 
-    if (UMESIMD_FOUND AND umesimd_test_blacklist)
+    if (UMESIMD_FOUND AND umesimd_test_blacklist AND seqansimd_test_blacklist)
         message(STATUS "Disable test `${target}` for seqan-simd and ume-simd and the following simd extensions ${seqansimd_test_blacklist} and ${umesimd_test_blacklist}")
         message(STATUS "\tReason: ${reason_for_disabled_test}")
-    elseif (UMESIMD_FOUND AND umesimd_test_blacklist AND seqansimd_test_blacklist)
+    elseif (UMESIMD_FOUND AND umesimd_test_blacklist)
         message(STATUS "Disable test `${target}` for ume-simd and the following simd extensions ${umesimd_test_blacklist}")
         message(STATUS "\tReason: ${reason_for_disabled_test}")
     elseif (seqansimd_test_blacklist)
diff --git a/util/cmake/seqan-config.cmake b/util/cmake/seqan-config.cmake
index f075feb..55e9691 100644
--- a/util/cmake/seqan-config.cmake
+++ b/util/cmake/seqan-config.cmake
@@ -298,12 +298,9 @@ if ((${CMAKE_SYSTEM_NAME} STREQUAL "Linux") OR (${CMAKE_SYSTEM_NAME} STREQUAL "k
   set (SEQAN_LIBRARIES ${SEQAN_LIBRARIES} rt)
 endif ()
 
+# some OSes don't link pthread fully when building statically so we explicitly include whole archive
 if (UNIX AND NOT APPLE)
-  if ((CMAKE_CXX_FLAGS MATCHES "-static") OR (SEQAN_CXX_FLAGS MATCHES "-static") OR (CMAKE_EXE_LINKER_FLAGS MATCHES "-static"))
     set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--whole-archive -lpthread -Wl,--no-whole-archive")
-  else ()
-    set (SEQAN_LIBRARIES ${SEQAN_LIBRARIES} pthread)
-  endif ()
 endif ()
 
 if ((${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") OR (${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD"))
@@ -352,6 +349,15 @@ if (NOT _SEQAN_FIND_BZIP2 EQUAL -1)
     find_package(BZip2 QUIET)
 endif ()
 
+if (NOT ZLIB_FOUND AND BZIP2_FOUND)
+    # NOTE(marehr): iostream_bzip2 uses the type `uInt`, which is defined by
+    # `zlib`. Therefore, `bzip2` will cause a ton of errors without `zlib`.
+    message(AUTHOR_WARNING "Disabling BZip2 [which was successfully found], "
+            "because ZLIB was not found. BZip2 is depending on ZLIB.")
+    unset(BZIP2_FOUND)
+    unset(SEQAN_HAS_BZIP2)
+endif ()
+
 if (BZIP2_FOUND)
     set (SEQAN_HAS_BZIP2    TRUE) # deprecated: use BZIP2_FOUND instead
     set (SEQAN_LIBRARIES         ${SEQAN_LIBRARIES}         ${BZIP2_LIBRARIES})
diff --git a/util/py_lib/CMakeLists.txt b/util/py_lib/CMakeLists.txt
index ef4b578..3509a07 100644
--- a/util/py_lib/CMakeLists.txt
+++ b/util/py_lib/CMakeLists.txt
@@ -9,6 +9,11 @@
 # ===========================================================================
 
 # Look for Python and stop if it could not be found.
+# require python 2.7, not python3
+set(PythonInterp_FIND_VERSION 2.7)
+set(PythonInterp_FIND_VERSION_MAJOR 2)
+set(PythonInterp_FIND_VERSION_MINOR 7)
+set(PythonInterp_FIND_VERSION_COUNT 2)
 find_package (PythonInterp)
 
 if (NOT PYTHONINTERP_FOUND)

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



More information about the debian-med-commit mailing list