diff --git a/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.h b/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.h
index db3a1d49c0d02a65fbd6c9bb3a3d1656417aff96..94635b3b10cfc3aaa3e592b8bef7c6591871554d 100644
--- a/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.h
+++ b/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.h
@@ -14,7 +14,7 @@
 
 #include "AssemblerLib/VectorMatrixAssembler.h"
 #include "ProcessLib/Process.h"
-#include "ProcessLib/ProcessUtil.h"
+#include "ProcessLib/Utils/CreateLocalAssemblers.h"
 
 #include "GroundwaterFlowFEM.h"
 #include "GroundwaterFlowProcessData.h"
diff --git a/ProcessLib/NeumannBc.h b/ProcessLib/NeumannBc.h
index e8ee166da5db136d4efea5c526165cf1ed1ccd57..4d841002a2647b69b92dcefddcbe474c9aaa88c3 100644
--- a/ProcessLib/NeumannBc.h
+++ b/ProcessLib/NeumannBc.h
@@ -20,9 +20,10 @@
 #include "MeshLib/MeshSubset.h"
 #include "MeshLib/MeshSearch/NodeSearch.h"
 
+#include "Utils/CreateLocalAssemblers.h"
+
 #include "NeumannBcConfig.h"
 #include "NeumannBcAssembler.h"
-#include "ProcessUtil.h"
 
 namespace ProcessLib
 {
diff --git a/ProcessLib/ProcessUtil.h b/ProcessLib/ProcessUtil.h
index c5f6d114c6b26fb820d0e71479f8e640c3836d63..9221823b93eaee2e2942a08116e9130abc9f05bf 100644
--- a/ProcessLib/ProcessUtil.h
+++ b/ProcessLib/ProcessUtil.h
@@ -10,58 +10,14 @@
 #define PROCESSLIB_PROCESSUTIL_H
 
 #include <vector>
-#include <logog/include/logog.hpp>
 
-#include "AssemblerLib/LocalToGlobalIndexMap.h"
-
-#include "Utils/LocalDataInitializer.h"
+#include "MeshLib/Elements/Element.h"
+#include "NumLib/Fem/FiniteElement/TemplateIsoparametric.h"
 
 
 namespace ProcessLib
 {
 
-namespace detail
-{
-
-template<unsigned GlobalDim, typename GlobalSetup,
-         template <typename, typename, typename, typename, unsigned> class
-         LocalAssemblerImplementation,
-         typename LocalAssemblerInterface,
-         typename... ExtraCtorArgs>
-void createLocalAssemblers(
-        AssemblerLib::LocalToGlobalIndexMap const& dof_table,
-        std::vector<MeshLib::Element*> const& mesh_elements,
-        unsigned const integration_order,
-        std::vector<std::unique_ptr<LocalAssemblerInterface>>& local_assemblers,
-        ExtraCtorArgs&&... extra_ctor_args
-        )
-{
-    // Shape matrices initializer
-    using LocalDataInitializer = LocalDataInitializer<
-        LocalAssemblerInterface,
-        LocalAssemblerImplementation,
-        typename GlobalSetup::MatrixType,
-        typename GlobalSetup::VectorType,
-        GlobalDim,
-        ExtraCtorArgs...>;
-
-    DBUG("Create local assemblers.");
-    // Populate the vector of local assemblers.
-    local_assemblers.resize(mesh_elements.size());
-
-    LocalDataInitializer initializer(dof_table);
-
-    DBUG("Calling local assembler builder for all mesh elements.");
-    GlobalSetup::transformDereferenced(
-            initializer,
-            mesh_elements,
-            local_assemblers,
-            integration_order,
-            std::forward<ExtraCtorArgs>(extra_ctor_args)...);
-}
-
-} // namespace detail
-
 
 template<typename ShapeFunction, typename ShapeMatricesType, typename IntegrationMethod,
          unsigned GlobalDim>
@@ -90,63 +46,6 @@ initShapeMatrices(MeshLib::Element const& e, unsigned integration_order)
     return shape_matrices;
 }
 
-/*! Creates local assemblers for each element of the given \c mesh.
- *
- * \tparam GlobalSetup the global setup of the process
- * \tparam LocalAssemblerImplementation the individual local assembler type
- * \tparam LocalAssemblerInterface the general local assembler interface
- * \tparam ExtraCtorArgs types of additional constructor arguments.
- *         Those arguments will be passed to the constructor of
- *         \c LocalAssemblerImplementation.
- *
- * The first two template parameters cannot be deduced from the arguments.
- * Therefore they always have to be provided manually.
- */
-template<typename GlobalSetup,
-         template <typename, typename, typename, typename, unsigned> class
-         LocalAssemblerImplementation,
-         typename LocalAssemblerInterface,
-         typename... ExtraCtorArgs>
-void createLocalAssemblers(
-        const unsigned dimension,
-        std::vector<MeshLib::Element*> const& mesh_elements,
-        AssemblerLib::LocalToGlobalIndexMap const& dof_table,
-        unsigned const integration_order,
-        std::vector<std::unique_ptr<LocalAssemblerInterface>>& local_assemblers,
-        ExtraCtorArgs&&... extra_ctor_args
-        )
-{
-    DBUG("Create local assemblers.");
-
-    switch (dimension)
-    {
-    case 1:
-        detail::createLocalAssemblers<
-            1, GlobalSetup, LocalAssemblerImplementation>(
-                dof_table, mesh_elements, integration_order,
-                local_assemblers,
-                std::forward<ExtraCtorArgs>(extra_ctor_args)...);
-        break;
-    case 2:
-        detail::createLocalAssemblers<
-            2, GlobalSetup, LocalAssemblerImplementation>(
-                dof_table, mesh_elements, integration_order,
-                local_assemblers,
-                std::forward<ExtraCtorArgs>(extra_ctor_args)...);
-        break;
-    case 3:
-        detail::createLocalAssemblers<
-            3, GlobalSetup, LocalAssemblerImplementation>(
-                dof_table, mesh_elements, integration_order,
-                local_assemblers,
-                std::forward<ExtraCtorArgs>(extra_ctor_args)...);
-        break;
-    default:
-        ERR("Meshes with dimension greater than three are not supported.");
-        std::abort();
-    }
-}
-
 } // ProcessLib
 
 
diff --git a/ProcessLib/Utils/CreateLocalAssemblers.h b/ProcessLib/Utils/CreateLocalAssemblers.h
new file mode 100644
index 0000000000000000000000000000000000000000..8d61deb840129a95b5fd2fcc33ff15282f8a1e3f
--- /dev/null
+++ b/ProcessLib/Utils/CreateLocalAssemblers.h
@@ -0,0 +1,126 @@
+/**
+ * \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 PROCESSLIB_UTILS_CREATE_LOCAL_ASSEMBLERS_H_
+#define PROCESSLIB_UTILS_CREATE_LOCAL_ASSEMBLERS_H_
+
+#include <vector>
+#include <logog/include/logog.hpp>
+
+#include "AssemblerLib/LocalToGlobalIndexMap.h"
+
+#include "LocalDataInitializer.h"
+
+
+namespace ProcessLib
+{
+
+namespace detail
+{
+
+template<unsigned GlobalDim, typename GlobalSetup,
+         template <typename, typename, typename, typename, unsigned> class
+         LocalAssemblerImplementation,
+         typename LocalAssemblerInterface,
+         typename... ExtraCtorArgs>
+void createLocalAssemblers(
+        AssemblerLib::LocalToGlobalIndexMap const& dof_table,
+        std::vector<MeshLib::Element*> const& mesh_elements,
+        unsigned const integration_order,
+        std::vector<std::unique_ptr<LocalAssemblerInterface>>& local_assemblers,
+        ExtraCtorArgs&&... extra_ctor_args
+        )
+{
+    // Shape matrices initializer
+    using LocalDataInitializer = LocalDataInitializer<
+        LocalAssemblerInterface,
+        LocalAssemblerImplementation,
+        typename GlobalSetup::MatrixType,
+        typename GlobalSetup::VectorType,
+        GlobalDim,
+        ExtraCtorArgs...>;
+
+    DBUG("Create local assemblers.");
+    // Populate the vector of local assemblers.
+    local_assemblers.resize(mesh_elements.size());
+
+    LocalDataInitializer initializer(dof_table);
+
+    DBUG("Calling local assembler builder for all mesh elements.");
+    GlobalSetup::transformDereferenced(
+            initializer,
+            mesh_elements,
+            local_assemblers,
+            integration_order,
+            std::forward<ExtraCtorArgs>(extra_ctor_args)...);
+}
+
+} // namespace detail
+
+
+/*! Creates local assemblers for each element of the given \c mesh.
+ *
+ * \tparam GlobalSetup the global setup of the process
+ * \tparam LocalAssemblerImplementation the individual local assembler type
+ * \tparam LocalAssemblerInterface the general local assembler interface
+ * \tparam ExtraCtorArgs types of additional constructor arguments.
+ *         Those arguments will be passed to the constructor of
+ *         \c LocalAssemblerImplementation.
+ *
+ * The first two template parameters cannot be deduced from the arguments.
+ * Therefore they always have to be provided manually.
+ */
+template<typename GlobalSetup,
+         template <typename, typename, typename, typename, unsigned> class
+         LocalAssemblerImplementation,
+         typename LocalAssemblerInterface,
+         typename... ExtraCtorArgs>
+void createLocalAssemblers(
+        const unsigned dimension,
+        std::vector<MeshLib::Element*> const& mesh_elements,
+        AssemblerLib::LocalToGlobalIndexMap const& dof_table,
+        unsigned const integration_order,
+        std::vector<std::unique_ptr<LocalAssemblerInterface>>& local_assemblers,
+        ExtraCtorArgs&&... extra_ctor_args
+        )
+{
+    DBUG("Create local assemblers.");
+
+    switch (dimension)
+    {
+    case 1:
+        detail::createLocalAssemblers<
+            1, GlobalSetup, LocalAssemblerImplementation>(
+                dof_table, mesh_elements, integration_order,
+                local_assemblers,
+                std::forward<ExtraCtorArgs>(extra_ctor_args)...);
+        break;
+    case 2:
+        detail::createLocalAssemblers<
+            2, GlobalSetup, LocalAssemblerImplementation>(
+                dof_table, mesh_elements, integration_order,
+                local_assemblers,
+                std::forward<ExtraCtorArgs>(extra_ctor_args)...);
+        break;
+    case 3:
+        detail::createLocalAssemblers<
+            3, GlobalSetup, LocalAssemblerImplementation>(
+                dof_table, mesh_elements, integration_order,
+                local_assemblers,
+                std::forward<ExtraCtorArgs>(extra_ctor_args)...);
+        break;
+    default:
+        ERR("Meshes with dimension greater than three are not supported.");
+        std::abort();
+    }
+}
+
+} // ProcessLib
+
+
+#endif // PROCESSLIB_UTILS_CREATE_LOCAL_ASSEMBLERS_H_
diff --git a/Tests/NumLib/TestExtrapolation.cpp b/Tests/NumLib/TestExtrapolation.cpp
index 97c17589e66ec27c406c1d62c07426b1333da23e..552211569f373f50acd8573d94f323b702f7115e 100644
--- a/Tests/NumLib/TestExtrapolation.cpp
+++ b/Tests/NumLib/TestExtrapolation.cpp
@@ -26,6 +26,7 @@
 
 #include "ProcessLib/NumericsConfig.h"
 #include "ProcessLib/Utils/LocalDataInitializer.h"
+#include "ProcessLib/Utils/CreateLocalAssemblers.h"
 #include "ProcessLib/ProcessUtil.h"