diff --git a/.gitmodules b/.gitmodules
index 442ac76345bc8676ac9ff97ebddd226b829c9542..1ae3a515ca97c782c0ffddb7421022274bd84a3a 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,3 @@
-[submodule "externals/fmt"]
-	path = externals/fmt
+[submodule "libs/fmt"]
+	path = libs/fmt
 	url = https://github.com/fmtlib/fmt.git
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a6705c673cfca97564c2ab2ddd891ca48526dcc8..cf9f42f0c15e2b700a53af215bee80758d04a8c0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,5 +1,5 @@
 cmake_minimum_required(VERSION 3.1)
-project(amdis CXX)
+project(amdis LANGUAGES CXX VERSION 0.2)
 
 #find dune-common and set the module path
 find_package(dune-common REQUIRED)
@@ -17,16 +17,18 @@ dune_enable_all_packages(MODULE_LIBRARIES amdis fmt)
 add_subdirectory("bin")
 add_subdirectory("cmake/modules")
 add_subdirectory("doc")
-add_subdirectory("externals")
+add_subdirectory("examples" EXCLUDE_FROM_ALL)
+add_subdirectory("libs")
 add_subdirectory("src")
 add_subdirectory("test")
-add_subdirectory("examples" EXCLUDE_FROM_ALL)
 
 target_link_libraries(amdis fmt)
 
 option(ENABLE_ALL_WARNINGS "enable all meaningful warnings" OFF)
 if (ENABLE_ALL_WARNINGS)
-  target_compile_options(amdis PUBLIC "-Wall" "-Wextra" "-pedantic" "-Wnon-virtual-dtor" "-Wold-style-cast" "-Wcast-align" "-Woverloaded-virtual" "-Wpedantic" "-Wconversion")
+  target_compile_options(amdis PUBLIC "-Wall" "-Wextra" "-pedantic" "-Wnon-virtual-dtor"
+                                      "-Wold-style-cast" "-Wcast-align" "-Woverloaded-virtual"
+                                      "-Wpedantic" "-Wconversion")
 endif (ENABLE_ALL_WARNINGS)
 
 # finalize the dune project, e.g. generating config.h etc.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 36efd13485251cdd625f3a3be4ce6125e7c15916..b12dfa6d5c9d46b8c2073f718ab417ce084b80a1 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,14 +1,13 @@
 # GIT Workflow
 
-Follow the ideas of [a-successful-git-branching-model](http://nvie.com/posts/a-successful-git-branching-model),
-especially
+Follow the git workflow:
 - Create a new branch for all new features, following the naming convention
   `feature/XYZ`
-- Merge features in the `develop` branch only
 - Correct Bugs in issue branches, following the naming convention `issue/XYZ`
-- Merge issues in the `develop` branch, except when it is a hotfix, then merge
-  to `master` and `develop`
-- For all merges create a meaningful *Merge Request* in GitLab
+- For features and issues *Merge Request* into the master branch should be created in GitLab
+- Do not push into `master` directly
+- Releases are created in a new branch `release/VERSION` that is not deleted after merged into master.
+  After the merge, a tag with name `vVERSION` should be created.
 
 # Code Style-Guide
 
@@ -44,24 +43,6 @@ files, such as `math.h` (remember that windows files-systems are case insensitiv
 thus, there is no difference between `math.h` and `Math.H`.)
 
 ## Generale file structure
-Every header file should start with a copyright notice and an include guard `#pragma once`,
-where the text of the copyright notice is given in the file `tools/license.templ.txt`
-and can automatically by added, using the script files in the `tools` directory:
-
-``` c++
-// Software License for AMDiS
-//
-// Copyright (c) 2015 Institute for Scientific Computing, Technische Universitaet Dresden
-// All rights reserved.
-// Authors: Simon Praetorius
-//
-// This file is part of the AMDiS Library
-// see also the LICENSE file in the distribution.
-
-#pragma once
-```
-
-After the include guard a list of include files can be added, see *Names and Order of Includes*.
 
 ### Names and Order of Includes
 
@@ -84,9 +65,7 @@ For example, the includes in `io/VtkWriter.cpp` might look like this:
 #include "io/VtkWriter.hpp"
 
 // [open]mpi header
-#ifdef HAVE_PARALLEL_DOMAIN_AMDIS
 #include <mpi.h>
-#endif
 
 // std c++ headers
 #include <cmath>
@@ -141,7 +120,7 @@ double const& d_ref = d;
 
 ### Functions
 Try to put all parameters in the line of the function declaration until it exceeds
-the maximum line length. Then list remaining arguments aligned with the first 
+the maximum line length. Then list remaining arguments aligned with the first
 function argument.  Follow the style of the brackets, like
 
 ```c++
@@ -166,7 +145,7 @@ public:
     : member1_(arg1)
     , member2_(arg2)
   {}
-  
+
 private:
   Arg1 member1_;
   Arg2 member2_;
diff --git a/LICENSE b/LICENSE
index 0abd3507f63bfb8dc5be8d32d2b222b4dd626625..e32b9fc379b26e8c7b478091c9d1eb7a6b43b598 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,7 +1,7 @@
 The MIT License (MIT)
 
-Copyright (c) 2016-2018 Simon Praetorius
-              2018      Felix Müller
+Copyright (c) 2016-2019 Simon Praetorius
+              2019      Felix Müller
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/README.md b/README.md
index 85344c1e21a3baf4d8e44780b662025afe21e4d7..e5970dde6f5db8622a4ea50ba057674ca07360ed 100644
--- a/README.md
+++ b/README.md
@@ -25,7 +25,14 @@ The `dunecontrol` script searches for the required
 (See the file `dune.module` for an up-to-date list of dependencies). The dune modules
 can be obtained from https://gitlab.dune-project.org and need to be found in a
 subdirectory of `DUNE_CONTROL_PATH`. See also https://dune-project.org/doc/installation
-for details about the installation of dune modules.
+for details about the installation of dune modules. You can use the script
+
+```
+bin/install_all_dune_modules.sh DOWNLOAD_DIR
+```
+
+to clone all dune repositories into `DOWNLOAD_DIR` and provide a simple way using `dunecontrol`
+to install all of them at once.
 
 Additionally the following optional libraries can be used:
 - [MTL4](https://gitlab.math.tu-dresden.de/spraetor/mtl4) (use this fork to get up-to-date changes)
diff --git a/amdis.pc.in b/amdis.pc.in
index c41ceecce7b6d78dbf18a6e44596979726328989..69e6642e19dc316c611b19b7867ee072276f625f 100644
--- a/amdis.pc.in
+++ b/amdis.pc.in
@@ -9,8 +9,8 @@ DEPENDENCIES=@REQUIRES@
 Name: @PACKAGE_NAME@
 Version: @VERSION@
 Description: AMDiS dune-module
-URL: https://gitlab.math.tu-dresden.de/spraetor/dune-amdis
+URL: https://gitlab.mn.tu-dresden.de/amdis/amdis-core
 Requires: dune-common dune-geometry dune-localfunctions dune-typetree dune-grid dune-functions
-Suggests: dune-uggrid dune-alugrid dune-foamgrid
+Suggests: dune-uggrid dune-alugrid dune-foamgrid dune-spgrid dune-ist
 Libs: -L${libdir}
 Cflags: -I${includedir}
diff --git a/bin/amdisproject b/bin/amdisproject
index 6c0e11bed29952416ab8c4d0ca3b9202206ba6d5..6985c88c59cfb75aca4435fcd466ba8bc07a0f7e 100644
--- a/bin/amdisproject
+++ b/bin/amdisproject
@@ -523,10 +523,6 @@ M_DELIM
 ################## PROJECT.CC ##################
 echo "- $PROJECT/src/$MODULE.cpp"
 cat> "$PROJECT/src/$MODULE.cpp" << CC_DELIM
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
 #include <amdis/AMDiS.hpp>
 
 using namespace AMDiS;
@@ -684,7 +680,7 @@ mesh->global refinements: 0
 
 $NAME->mesh: mesh
 $NAME->solver->name: default
-$NAME->solver->tolerance: 1.e-8
+$NAME->solver->relative tolerance: 1.e-6
 $NAME->solver->info: 1
 
 $NAME->output[0]->filename: $NAME_
@@ -801,4 +797,5 @@ echo
 echo "done."
 echo "------------------------------------------"
 echo "For further details read the Dune build system documentation at"
-echo "https://www.dune-project.org/buildsystem/"
+echo "https://www.dune-project.org/buildsystem/ or in the file"
+echo "dune-common/doc/buildsystem/dune-common.rst"
diff --git a/bin/install_all_dune_modules.sh b/bin/install_all_dune_modules.sh
new file mode 100755
index 0000000000000000000000000000000000000000..c28675ab4964b616b61d5c9a57733a23feaf6356
--- /dev/null
+++ b/bin/install_all_dune_modules.sh
@@ -0,0 +1,34 @@
+#!/usr/bin/env bash
+
+if [ $# -lt 1 ]; then
+  echo "usage: $0 DOWNLOAD_DIR"
+  exit 1
+fi
+
+DOWNLOAD_DIR="$1"
+
+mkdir -p ${DOWNLOAD_DIR}/dune
+cd ${DOWNLOAD_DIR}/dune
+
+CORE_MODULES=("dune-common" "dune-geometry" "dune-grid" "dune-istl" "dune-localfunctions")
+STAGING_MODULES=("dune-functions" "dune-typetree" "dune-uggrid")
+EXTENSIONS_MODULES=("dune-alugrid" "dune-spgrid" "dune-foamgrid")
+
+for MOD in ${CORE_MODULES[*]}; do
+  git clone https://gitlab.dune-project.org/core/${MOD}.git --branch releases/2.6 --single-branch
+done
+
+for MOD in ${STAGING_MODULES[*]}; do
+  git clone https://gitlab.dune-project.org/staging/${MOD}.git --branch releases/2.6 --single-branch
+done
+
+for MOD in ${EXTENSIONS_MODULES[*]}; do
+  git clone https://gitlab.dune-project.org/extensions/${MOD}.git --branch releases/2.6 --single-branch
+done
+
+echo ""
+echo "=============================================================="
+echo "To build all dune modules run the commands...                 "
+echo "  DUNE_CONTROL_PATH=${DOWNLOAD_DIR}/dune dunecontrol configure"
+echo "  DUNE_CONTROL_PATH=${DOWNLOAD_DIR}/dune dunecontrol make -j4 "
+echo "=============================================================="
\ No newline at end of file
diff --git a/dune.module b/dune.module
index bd22ba1dd5e77e68e84713eeb8d7624f062f645a..fecc62715f734a0be199526ab67863e9a35061e4 100644
--- a/dune.module
+++ b/dune.module
@@ -3,7 +3,7 @@
 ################################
 
 Module: amdis
-Version: 0.1
+Version: 0.2
 Maintainer: simon.praetorius@tu-dresden.de
 Depends: dune-common (>= 2.6) dune-geometry (>= 2.6) dune-localfunctions (>= 2.6) dune-typetree (>= 2.6) dune-grid (>= 2.6) dune-functions (>= 2.6)
-Suggests: dune-uggrid dune-alugrid dune-foamgrid dune-spgrid
+Suggests: dune-uggrid dune-alugrid dune-foamgrid dune-spgrid dune-istl
diff --git a/externals/CMakeLists.txt b/libs/CMakeLists.txt
similarity index 89%
rename from externals/CMakeLists.txt
rename to libs/CMakeLists.txt
index 119453ecae6e0574354ce7d9dee84b652323e5ba..2234cb005fafbb9ce33921fbf96a5fcc3b808505 100644
--- a/externals/CMakeLists.txt
+++ b/libs/CMakeLists.txt
@@ -12,7 +12,7 @@ if (GIT_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git")
   endif()
 endif()
 
-if (NOT EXISTS "${PROJECT_SOURCE_DIR}/externals/fmt/CMakeLists.txt")
+if (NOT EXISTS "${PROJECT_SOURCE_DIR}/libs/fmt/CMakeLists.txt")
   message(FATAL_ERROR "The submodules were not downloaded! GIT_SUBMODULE was turned off or failed. Please update submodules and try again.")
 endif()
 
@@ -23,7 +23,7 @@ dune_library_add_sources(fmt SOURCES
 )
 
 target_include_directories(fmt PUBLIC
-  $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/externals/fmt/include>)
+  $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/libs/fmt/include>)
 
 install(FILES
   fmt/include/fmt/core.h
diff --git a/externals/fmt b/libs/fmt
similarity index 100%
rename from externals/fmt
rename to libs/fmt
diff --git a/src/amdis/BoundaryCondition.hpp b/src/amdis/BoundaryCondition.hpp
index e3a231aad23b6a1244480d7309019133baf73d3d..1b10038ff0f401860ecfcb0529d8ba88f034ee48 100644
--- a/src/amdis/BoundaryCondition.hpp
+++ b/src/amdis/BoundaryCondition.hpp
@@ -26,8 +26,8 @@ namespace AMDiS
     template <class RowBasis, class ColBasis>
     void init(RowBasis const& rowBasis, ColBasis const& colBasis) { /* do nothing */ }
 
-    template <class Matrix, class X, class B, class RN, class CN>
-    void fillBoundaryCondition(Matrix& A, X& x, B& b, RN const& rowNode, CN const& colNode) { /* do nothing */ }
+    template <class Matrix, class X, class B, class RN, class RTP, class CN, class CTP>
+    void fillBoundaryCondition(Matrix& A, X& x, B& b, RN const& rowNode, RTP rowTreePath, CN const& colNode, CTP colTreePath) { /* do nothing */ }
 
   protected:
     std::shared_ptr<BoundaryManagerBase const> boundaryManager_{nullptr};
diff --git a/src/amdis/CMakeLists.txt b/src/amdis/CMakeLists.txt
index cde9be08724e21a1ceb68249b8df7a5863d31b1b..706ce91d9481db4232090b5ad6295ae0645adc1c 100644
--- a/src/amdis/CMakeLists.txt
+++ b/src/amdis/CMakeLists.txt
@@ -30,6 +30,7 @@ install(FILES
     DataTransfer.hpp
     DataTransfer.inc.hpp
     DirichletBC.hpp
+    DirichletBC.inc.hpp
     FileWriter.hpp
     FileWriterInterface.hpp
     Flag.hpp
diff --git a/src/amdis/DirichletBC.hpp b/src/amdis/DirichletBC.hpp
index df1947d1d6e057b90ea4401d1f8008755f924c9c..c097c9bd4fa21d6269e0d7c2b1800119c0445739 100644
--- a/src/amdis/DirichletBC.hpp
+++ b/src/amdis/DirichletBC.hpp
@@ -73,8 +73,8 @@ namespace AMDiS
      * \tparam RN   RowNode
      * \tparam CN   ColNode
      **/
-    template <class Mat, class Sol, class Rhs, class RN, class CN>
-    void fillBoundaryCondition(Mat& matrix, Sol& solution, Rhs& rhs, RN const& rowNode, CN const& colNode);
+    template <class Mat, class Sol, class Rhs, class RN, class RTP, class CN, class CTP>
+    void fillBoundaryCondition(Mat& matrix, Sol& solution, Rhs& rhs, RN const& rowNode, RTP rowTreePath, CN const& colNode, CTP colTreePath);
 
   private:
     Dune::Std::optional<std::function<bool(Domain)>> predicate_;
diff --git a/src/amdis/DirichletBC.inc.hpp b/src/amdis/DirichletBC.inc.hpp
index 69f873ccb63a5a74514371ea0dd7a14295189f00..af7e85ff71bd893088c45604ccf9834650a16951 100644
--- a/src/amdis/DirichletBC.inc.hpp
+++ b/src/amdis/DirichletBC.inc.hpp
@@ -28,15 +28,15 @@ init(RB const& rowBasis, CB const& colBasis)
 
 
 template <class D, class R>
-  template <class Mat, class Sol, class Rhs, class RN, class CN>
+  template <class Mat, class Sol, class Rhs, class RN, class RTP, class CN, class CTP>
 void DirichletBC<D,R>::
-fillBoundaryCondition(Mat& matrix, Sol& solution, Rhs& rhs, RN const& rowNode, CN const& colNode)
+fillBoundaryCondition(Mat& matrix, Sol& solution, Rhs& rhs, RN const& rowNode, RTP rowTreePath, CN const& colNode, CTP colTreePath)
 {
   auto columns = Constraints<Mat>::dirichletBC(matrix, dirichletNodes_);
 
   Dune::Hybrid::ifElse(std::is_same<RangeType_t<RN>, R>{},
     [&](auto id) {
-      auto subBasis = Dune::Functions::subspaceBasis(rhs.basis(), rowNode.treePath());
+      auto subBasis = Dune::Functions::subspaceBasis(rhs.basis(), rowTreePath);
       Dune::Functions::interpolate(subBasis, rhs, values_, dirichletNodes_);
     });
 
@@ -46,7 +46,7 @@ fillBoundaryCondition(Mat& matrix, Sol& solution, Rhs& rhs, RN const& rowNode, C
 
   Dune::Hybrid::ifElse(std::is_same<RangeType_t<CN>, R>{},
     [&](auto id) {
-      auto subBasis = Dune::Functions::subspaceBasis(solution.basis(), colNode.treePath());
+      auto subBasis = Dune::Functions::subspaceBasis(solution.basis(), colTreePath);
       Dune::Functions::interpolate(subBasis, solution, values_, dirichletNodes_);
     });
 }
diff --git a/src/amdis/PeriodicBC.hpp b/src/amdis/PeriodicBC.hpp
index 4b8229e52a7ea384fcc6cb005caed50c2320550e..c4253a2f9b34b861a7c35546f5f22bbc590d0871 100644
--- a/src/amdis/PeriodicBC.hpp
+++ b/src/amdis/PeriodicBC.hpp
@@ -65,8 +65,8 @@ namespace AMDiS
     template <class RB, class CB>
     void init(RB const& rowBasis, CB const& colBasis);
 
-    template <class Mat, class Sol, class Rhs, class RN, class CN>
-    void fillBoundaryCondition(Mat& A, Sol& x, Rhs& b, RN const& rowNode, CN const& colNode);
+    template <class Mat, class Sol, class Rhs, class RN, class RTP, class CN, class CTP>
+    void fillBoundaryCondition(Mat& A, Sol& x, Rhs& b, RN const& rowNode, RTP rowTreePath, CN const& colNode, CTP colTreePath);
 
     auto const& associations() const
     {
diff --git a/src/amdis/PeriodicBC.inc.hpp b/src/amdis/PeriodicBC.inc.hpp
index 7c5ebbf139a2ebf1a6b178a82a05edd62e416663..104b47f338a93c20fc6c3a94c27a327cf06105c3 100644
--- a/src/amdis/PeriodicBC.inc.hpp
+++ b/src/amdis/PeriodicBC.inc.hpp
@@ -231,9 +231,9 @@ coords(Node const& tree, std::vector<std::size_t> const& localIndices) const
 
 
 template <class D, class MI>
-  template <class Mat, class Sol, class Rhs, class RN, class CN>
+  template <class Mat, class Sol, class Rhs, class RN, class RTP, class CN, class CTP>
 void PeriodicBC<D,MI>::
-fillBoundaryCondition(Mat& matrix, Sol& solution, Rhs& rhs, RN const& rowNode, CN const& colNode)
+fillBoundaryCondition(Mat& matrix, Sol& solution, Rhs& rhs, RN const& rowNode, RTP rowTreePath, CN const& colNode, CTP colTreePath)
 {
   Constraints<Mat>::periodicBC(matrix, periodicNodes_, associations_);
 
diff --git a/src/amdis/ProblemStat.inc.hpp b/src/amdis/ProblemStat.inc.hpp
index a7786ad972be1eca17ba386ac7887ea3919a3feb..4e4f89bbd8f78d234bb16ce40d558518e17e6606 100644
--- a/src/amdis/ProblemStat.inc.hpp
+++ b/src/amdis/ProblemStat.inc.hpp
@@ -456,13 +456,13 @@ buildAfterAdapt(AdaptInfo& /*adaptInfo*/, Flag /*flag*/, bool asmMatrix, bool as
   systemMatrix_->finish(asmMatrix);
   rhs_->finish(asmVector);
 
-  for_each_node(localView.tree(), [&,this](auto const& rowNode, auto) {
-    for_each_node(localView.tree(), [&,this](auto const& colNode, auto) {
+  for_each_node(localView.tree(), [&,this](auto const& rowNode, auto row_tp) {
+    for_each_node(localView.tree(), [&,this](auto const& colNode, auto col_tp) {
       // finish boundary condition
       for (auto bc : dirichletBCs_[rowNode][colNode])
-        bc->fillBoundaryCondition(*systemMatrix_, *solution_, *rhs_, rowNode, colNode);
+        bc->fillBoundaryCondition(*systemMatrix_, *solution_, *rhs_, rowNode, row_tp, colNode, col_tp);
       for (auto bc : periodicBCs_[rowNode][colNode])
-        bc->fillBoundaryCondition(*systemMatrix_, *solution_, *rhs_, rowNode, colNode);
+        bc->fillBoundaryCondition(*systemMatrix_, *solution_, *rhs_, rowNode, row_tp, colNode, col_tp);
     });
   });
 
diff --git a/src/amdis/ProblemStatTraits.hpp b/src/amdis/ProblemStatTraits.hpp
index 27a4610dafce018344467bb502a27228f5194b7f..432be6f05bbe6e5bfe1a0e293666bcf3fa094238 100644
--- a/src/amdis/ProblemStatTraits.hpp
+++ b/src/amdis/ProblemStatTraits.hpp
@@ -4,7 +4,6 @@
 #include <dune/functions/functionspacebases/compositebasis.hh>
 #include <dune/functions/functionspacebases/lagrangebasis.hh>
 #include <dune/functions/functionspacebases/powerbasis.hh>
-#include <dune/functions/functionspacebases/pqknodalbasis.hh>
 #include <dune/grid/yaspgrid.hh>
 
 #include <amdis/common/Logical.hpp>
diff --git a/src/amdis/common/CMakeLists.txt b/src/amdis/common/CMakeLists.txt
index 1eec42e568a6e7b63a9135be22071466aae8f489..ebf8a782466ce7b9fa2fd0c71dc86059bc87272a 100644
--- a/src/amdis/common/CMakeLists.txt
+++ b/src/amdis/common/CMakeLists.txt
@@ -16,7 +16,6 @@ install(FILES
     Index.hpp
     Literals.hpp
     Logical.hpp
-    Loops.hpp
     Math.hpp
     MultiTypeMatrix.hpp
     MultiTypeVector.hpp
diff --git a/src/amdis/linearalgebra/eigen/SolverConfig.hpp b/src/amdis/linearalgebra/eigen/SolverConfig.hpp
index 3296aba7e354c08842bc4724430db41a47f410ab..cbc1b43e56c4a5e2844b56034daba65c4bae67b5 100644
--- a/src/amdis/linearalgebra/eigen/SolverConfig.hpp
+++ b/src/amdis/linearalgebra/eigen/SolverConfig.hpp
@@ -72,7 +72,7 @@ namespace AMDiS
     static void init(std::string const& prefix, Eigen::UmfPackLU<M>& solver)
     {
       DUNE_UNUSED auto& control = solver.umfpackControl();
-      // here, umfpack parameters could be initialized
+      // TODO: initialized umfpack parameters
     }
   };
 #endif
diff --git a/src/amdis/linearalgebra/eigen/SolverCreator.hpp b/src/amdis/linearalgebra/eigen/SolverCreator.hpp
index 1e92827c5f392eab919f85996217a329b34096ae..4110f9efd959db502d73224fe6ae3b8292af8135 100644
--- a/src/amdis/linearalgebra/eigen/SolverCreator.hpp
+++ b/src/amdis/linearalgebra/eigen/SolverCreator.hpp
@@ -30,7 +30,7 @@ namespace AMDiS
     using SolverBase = LinearSolverInterface<Matrix, VectorX, VectorB>;
     using Scalar = typename Matrix::Scalar;
 
-    std::unique_ptr<SolverBase> createWithString(std::string const& prefix) override
+    std::unique_ptr<SolverBase> createWithString(std::string prefix) override
     {
       // get creator string for preconditioner
       std::string precon = "no";
@@ -40,12 +40,12 @@ namespace AMDiS
           precon == "jacobi")
       {
         auto creator = SolverCreator<Eigen::DiagonalPreconditioner<Scalar>>{};
-        return creator.create(prefix);
+        return creator.createWithString(prefix);
       }
       else if (precon == "ilu")
       {
         auto creator = SolverCreator<Eigen::IncompleteLUT<Scalar>>{};
-        return creator.create(prefix);
+        return creator.createWithString(prefix);
       }
       else if (precon == "ic")
       {
@@ -53,7 +53,7 @@ namespace AMDiS
       }
       else {
         auto creator = SolverCreator<Eigen::IdentityPreconditioner>{};
-        return creator.create(prefix);
+        return creator.createWithString(prefix);
       }
     }
 
@@ -62,18 +62,18 @@ namespace AMDiS
     using IncompleteCholesky =
       SolverCreator<Eigen::IncompleteCholesky<Scalar, Eigen::Lower|Eigen::Upper, Ordering>>;
 
-    std::unique_ptr<SolverBase> createIncompleteCholesky(std::string const& prefix) const
+    std::unique_ptr<SolverBase> createIncompleteCholesky(std::string prefix) const
     {
       std::string ordering = "amd";
       Parameters::get(prefix + "->precon->ordering", ordering);
 
       if (ordering == "amd") {
         using AMD = Eigen::AMDOrdering<typename Matrix::StorageIndex>;
-        return IncompleteCholesky<AMD>{}.create(prefix);
+        return IncompleteCholesky<AMD>{}.createWithString(prefix);
       }
       else {
         using NATURAL = Eigen::NaturalOrdering<typename Matrix::StorageIndex>;
-        return IncompleteCholesky<NATURAL>{}.create(prefix);
+        return IncompleteCholesky<NATURAL>{}.createWithString(prefix);
       }
     }
   };