diff --git a/MathLib/ODE/ConcreteODESolver.h b/MathLib/ODE/ConcreteODESolver.h
index a0022dae8aee47affc8d7ab1fa4f302271c3eb3e..3a27d78d4fcd9207aed68c5cffdfdf15ac4ede8d 100644
--- a/MathLib/ODE/ConcreteODESolver.h
+++ b/MathLib/ODE/ConcreteODESolver.h
@@ -110,18 +110,6 @@ private:
 	createODESolver<NumEquations>(BaseLib::ConfigTree const& config);
 };
 
-template <unsigned NumEquations>
-std::unique_ptr<ODESolver<NumEquations>> createODESolver(
-    BaseLib::ConfigTree const& config)
-{
-#ifdef CVODE_FOUND
-	return std::unique_ptr<ODESolver<NumEquations>>(
-	    new ConcreteODESolver<CVodeSolver, NumEquations>(config));
-#else
-	return nullptr;
-#endif  // CVODE_FOUND
-}
-
 }  // namespace MathLib
 
 #endif  // MATHLIB_ODE_CONCRETEODESOLVER_H
diff --git a/MathLib/ODE/ODESolverBuilder.h b/MathLib/ODE/ODESolverBuilder.h
new file mode 100644
index 0000000000000000000000000000000000000000..213f5ff2f97c20e4d8b78a0a25f9cd5dea1072f8
--- /dev/null
+++ b/MathLib/ODE/ODESolverBuilder.h
@@ -0,0 +1,41 @@
+/**
+ * \copyright
+ * Copyright (c) 2012-2016, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/project/license
+ *
+ */
+
+#ifndef MATHLIB_ODE_ODESOLVERBUILDER_H
+#define MATHLIB_ODE_ODESOLVERBUILDER_H
+
+#include "ODESolver.h"
+#include "ConcreteODESolver.h"
+
+#ifdef CVODE_FOUND
+#include "CVodeSolver.h"
+#endif
+
+namespace BaseLib
+{
+class ConfigTree;
+}
+
+namespace MathLib
+{
+template <unsigned NumEquations>
+std::unique_ptr<ODESolver<NumEquations>> createODESolver(
+    BaseLib::ConfigTree const& config)
+{
+#ifdef CVODE_FOUND
+	return std::unique_ptr<ODESolver<NumEquations>>(
+	    new ConcreteODESolver<CVodeSolver, NumEquations>(config));
+#else
+	return nullptr;
+#endif  // CVODE_FOUND
+}
+
+}  // namespace MathLib
+
+#endif  // MATHLIB_ODE_ODESOLVERBUILDER_H