diff --git a/NumLib/Fem/CoordinatesMapping/NaturalCoordinatesMapping.cpp b/NumLib/Fem/CoordinatesMapping/NaturalCoordinatesMapping.cpp
index 1938678bdc7b218eab88b7e672ab2ce0f7d906b6..e025ba6b85a10af8e806af8577828948da7e6bd5 100644
--- a/NumLib/Fem/CoordinatesMapping/NaturalCoordinatesMapping.cpp
+++ b/NumLib/Fem/CoordinatesMapping/NaturalCoordinatesMapping.cpp
@@ -129,6 +129,7 @@ computeMappingMatrices(
     shapemat.detJ = shapemat.J.determinant();
 
 #ifndef NDEBUG
+    // TODO make fatal?
     if (shapemat.detJ<=.0)
         ERR("det|J|=%e is not positive.\n", shapemat.detJ);
 #endif
@@ -180,7 +181,7 @@ computeMappingMatrices(
         auto const nnodes(shapemat.dNdr.cols());
         auto const ele_dim(shapemat.dNdr.rows());
         assert(shapemat.dNdr.rows()==ele.getDimension());
-        const unsigned global_dim(ele_local_coord.getGlobalCoordinateSystem().getDimension());
+        const unsigned global_dim = ele_local_coord.getGlobalDimension();
         if (global_dim==ele_dim) {
             shapemat.dNdx.topLeftCorner(ele_dim, nnodes).noalias() = shapemat.invJ * shapemat.dNdr;
         } else {
@@ -226,10 +227,10 @@ template <class T_MESH_ELEMENT,
           ShapeMatrixType T_SHAPE_MATRIX_TYPE>
 void naturalCoordinatesMappingComputeShapeMatrices(const T_MESH_ELEMENT& ele,
                                                    const double* natural_pt,
-                                                   T_SHAPE_MATRICES& shapemat)
+                                                   T_SHAPE_MATRICES& shapemat,
+                                                   const unsigned global_dim)
 {
-    const MeshLib::CoordinateSystem coords(ele);
-    const MeshLib::ElementCoordinatesMappingLocal ele_local_coord(ele, coords);
+    const MeshLib::ElementCoordinatesMappingLocal ele_local_coord(ele, global_dim);
 
     detail::computeMappingMatrices<
         T_MESH_ELEMENT,
@@ -251,7 +252,8 @@ void naturalCoordinatesMappingComputeShapeMatrices(const T_MESH_ELEMENT& ele,
         ShapeMatrixType::WHICHPART>(                             \
         MeshLib::TemplateElement<MeshLib::RULE> const&,          \
         double const*,                                           \
-        SHAPEMATRIXPOLICY<NumLib::SHAPE, DIM>::ShapeMatrices&)
+        SHAPEMATRIXPOLICY<NumLib::SHAPE, DIM>::ShapeMatrices&,   \
+        const unsigned global_dim)
 
 #define OGS_INSTANTIATE_NATURAL_COORDINATES_MAPPING_DYN(RULE, SHAPE) \
     OGS_INSTANTIATE_NATURAL_COORDINATES_MAPPING_PART(                \
diff --git a/NumLib/Fem/CoordinatesMapping/NaturalCoordinatesMapping.h b/NumLib/Fem/CoordinatesMapping/NaturalCoordinatesMapping.h
index b066c597d9c22761b1b3f95bf60e9041e14c14b6..22fbac0459fa1c4f617f6dc3c2fa7539e2c2d59d 100644
--- a/NumLib/Fem/CoordinatesMapping/NaturalCoordinatesMapping.h
+++ b/NumLib/Fem/CoordinatesMapping/NaturalCoordinatesMapping.h
@@ -28,7 +28,8 @@ template <class T_MESH_ELEMENT,
           ShapeMatrixType T_SHAPE_MATRIX_TYPE>
 void naturalCoordinatesMappingComputeShapeMatrices(const T_MESH_ELEMENT& ele,
                                                    const double* natural_pt,
-                                                   T_SHAPE_MATRICES& shapemat);
+                                                   T_SHAPE_MATRICES& shapemat,
+                                                   const unsigned global_dim);
 }  // namespace detail
 
 /**
@@ -54,9 +55,10 @@ struct NaturalCoordinatesMapping
      */
     static void computeShapeMatrices(const T_MESH_ELEMENT& ele,
                                      const double* natural_pt,
-                                     T_SHAPE_MATRICES& shapemat)
+                                     T_SHAPE_MATRICES& shapemat,
+                                     const unsigned global_dim)
     {
-        computeShapeMatrices<ShapeMatrixType::ALL>(ele, natural_pt, shapemat);
+        computeShapeMatrices<ShapeMatrixType::ALL>(ele, natural_pt, shapemat, global_dim);
     }
 
     /**
@@ -72,13 +74,14 @@ struct NaturalCoordinatesMapping
     template <ShapeMatrixType T_SHAPE_MATRIX_TYPE>
     static void computeShapeMatrices(const T_MESH_ELEMENT& ele,
                                      const double* natural_pt,
-                                     T_SHAPE_MATRICES& shapemat)
+                                     T_SHAPE_MATRICES& shapemat,
+                                     const unsigned global_dim)
     {
         detail::naturalCoordinatesMappingComputeShapeMatrices<
             T_MESH_ELEMENT,
             T_SHAPE_FUNC,
             T_SHAPE_MATRICES,
-            T_SHAPE_MATRIX_TYPE>(ele, natural_pt, shapemat);
+            T_SHAPE_MATRIX_TYPE>(ele, natural_pt, shapemat, global_dim);
     }
 };
 
diff --git a/NumLib/Fem/FiniteElement/TemplateIsoparametric.h b/NumLib/Fem/FiniteElement/TemplateIsoparametric.h
index 54931172ea380465f9c92e4ab855c77440a770dc..0ec829ad1230dcc02acb028f7ea28c15580411a9 100644
--- a/NumLib/Fem/FiniteElement/TemplateIsoparametric.h
+++ b/NumLib/Fem/FiniteElement/TemplateIsoparametric.h
@@ -77,16 +77,17 @@ public:
     {
         this->_ele = &e;
     }
-
     /**
      * compute shape functions
      *
      * @param natural_pt    position in natural coordinates
      * @param shape         evaluated shape function matrices
      */
-    void computeShapeFunctions(const double *natural_pt, ShapeMatrices &shape) const
+    void computeShapeFunctions(const double* natural_pt, ShapeMatrices& shape,
+                               const unsigned global_dim) const
     {
-        NaturalCoordsMappingType::computeShapeMatrices(*_ele, natural_pt, shape);
+        NaturalCoordsMappingType::computeShapeMatrices(*_ele, natural_pt, shape,
+                                                       global_dim);
     }
 
     /**
@@ -97,12 +98,13 @@ public:
      * @param shape                 evaluated shape function matrices
      */
     template <ShapeMatrixType T_SHAPE_MATRIX_TYPE>
-    void computeShapeFunctions(const double *natural_pt, ShapeMatrices &shape) const
+    void computeShapeFunctions(const double* natural_pt, ShapeMatrices& shape,
+                               const unsigned global_dim) const
     {
-        NaturalCoordsMappingType::template computeShapeMatrices<T_SHAPE_MATRIX_TYPE>(*_ele, natural_pt, shape);
+        NaturalCoordsMappingType::template computeShapeMatrices<
+            T_SHAPE_MATRIX_TYPE>(*_ele, natural_pt, shape, global_dim);
     }
 
-
 private:
     const MeshElementType* _ele;
 };