diff --git a/src/amdis/CreatorMap.hpp b/src/amdis/CreatorMap.hpp
index 4ec1eae1680e907dc23ca21e0569f50af748d3fe..46d779b6d978e9df3dfa3184e33d06582b979b40 100644
--- a/src/amdis/CreatorMap.hpp
+++ b/src/amdis/CreatorMap.hpp
@@ -46,11 +46,13 @@ namespace AMDiS
       init();
 
       auto it = creatorMap.find(key);
-      if (it == creatorMap.end())
+      if (it == creatorMap.end()) {
+        warning("No creator for key `{}` defined (used in init-file parameter `{}`). Falling back to `default`.", key, initFileStr);
         key = "default";
+      }
 
       auto creator = creatorMap[key];
-      test_exit(creator, "No creator for key `{}` defined in init file for parameter `{}`", key, initFileStr);
+      test_exit(creator, "Undefined creator for `{}` (used in init-file parameter `{}`)", key, initFileStr);
 
       return creator;
     }
diff --git a/src/amdis/linearalgebra/istl/ISTL_Preconditioner.hpp b/src/amdis/linearalgebra/istl/ISTL_Preconditioner.hpp
index ca8c16e42731ec3d7aec42a2555044f98f8f10e1..833dbb7f6252ad94841200fc1db37cf684ab8baf 100644
--- a/src/amdis/linearalgebra/istl/ISTL_Preconditioner.hpp
+++ b/src/amdis/linearalgebra/istl/ISTL_Preconditioner.hpp
@@ -84,6 +84,7 @@ namespace AMDiS
       = typename ISTLPreconCreator<Precon, Mat>::Creator;
 
     using Map = CreatorMap<ISTLPreconCreatorInterface<Mat, Sol, Rhs>>;
+    using FTraits = Dune::FieldTraits<typename Mat::field_type>;
 
   public:
     static void init()
@@ -102,23 +103,33 @@ namespace AMDiS
       auto ssor = new PreconCreator<Dune::SeqSSOR<Mat, Sol, Rhs>>;
       Map::addCreator("ssor", ssor);
 
-      init_ilu(std::is_arithmetic<typename Dune::FieldTraits<Mat>::field_type>{});
-      init_amg(std::is_same<typename Dune::FieldTraits<Mat>::real_type, double>{});
+      init_ilu(std::is_arithmetic<typename FTraits::field_type>{});
+      init_amg(std::is_same<typename FTraits::real_type, double>{});
 
       auto richardson = new PreconCreator<Dune::Richardson<Sol, Rhs>>;
       Map::addCreator("richardson", richardson);
       Map::addCreator("default", richardson);
     }
 
-    static void init_ilu(std::false_type) {}
+    static void init_ilu(std::false_type)
+    {
+      warning("ILU preconditioners not created for the matrix with field_type = {}.",
+        Dune::className<typename FTraits::field_type>());
+    }
+
     static void init_ilu(std::true_type)
     {
       auto ilu = new PreconCreator<Dune::SeqILU<Mat, Sol, Rhs>>;
-      Map::addCreator("ilu", id(ilu));
-      Map::addCreator("ilu0", id(ilu));
+      Map::addCreator("ilu", ilu);
+      Map::addCreator("ilu0", ilu);
+    }
+
+    static void init_amg(std::false_type)
+    {
+      warning("AMG preconditioners not created for the matrix with real_type = {}.",
+        Dune::className<typename FTraits::real_type>());
     }
 
-    static void init_amg(std::false_type) {}
     static void init_amg(std::true_type)
     {
       auto amg = new AMGPreconCreator<Dune::Amg::AMG, Mat, Sol, Rhs>;
diff --git a/src/amdis/linearalgebra/istl/ISTL_Solver.hpp b/src/amdis/linearalgebra/istl/ISTL_Solver.hpp
index 700cb1fa31978230f069cbd37d1446d882c56e4a..826157848191d25401bb72d5ad402fb0f0e563d5 100644
--- a/src/amdis/linearalgebra/istl/ISTL_Solver.hpp
+++ b/src/amdis/linearalgebra/istl/ISTL_Solver.hpp
@@ -2,6 +2,7 @@
 
 #include <memory>
 
+#include <dune/common/classname.hh>
 #include <dune/istl/solvers.hh>
 #include <dune/istl/umfpack.hh>
 #include <dune/istl/superlu.hh>
@@ -141,6 +142,7 @@ namespace AMDiS
   class DefaultCreators<LinearSolverInterface<Dune::BCRSMatrix<Block,Alloc>, VectorX, VectorB>>
   {
     using Matrix = Dune::BCRSMatrix<Block,Alloc>;
+    using FTraits = Dune::FieldTraits<typename Matrix::field_type>;
     using SolverBase = LinearSolverInterface<Matrix, VectorX, VectorB>;
 
     template <class Solver>
@@ -178,10 +180,15 @@ namespace AMDiS
       // default iterative solver
       Map::addCreator("default", gmres);
 
-      init_direct(std::is_same<typename Dune::FieldTraits<Matrix>::real_type, double>{});
+      init_direct(std::is_same<typename FTraits::real_type, double>{});
+    }
+
+    static void init_direct(std::false_type)
+    {
+      warning("Direct solvers not created for the matrix with real_type = {}.",
+        Dune::className<typename FTraits::real_type>());
     }
 
-    static void init_direct(std::false_type) {}
     static void init_direct(std::true_type)
     {
 #if HAVE_SUITESPARSE_UMFPACK