diff --git a/src/geometry/SymmetryUtils.hpp b/src/geometry/SymmetryUtils.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..6524a0791aef79b5440110d7180a472865c12d89
--- /dev/null
+++ b/src/geometry/SymmetryUtils.hpp
@@ -0,0 +1,32 @@
+#ifndef SYMMETRY_UTILS_HPP
+#define SYMMETRY_UTILS_HPP
+
+#include <algebra/TinyMatrix.hpp>
+#include <algebra/TinyVector.hpp>
+#include <utils/PugsMacros.hpp>
+
+template <size_t Dimension>
+PUGS_INLINE auto
+symmetrize_vector(const TinyVector<Dimension>& normal, const TinyVector<Dimension>& u)
+{
+  return u - 2 * dot(u, normal) * normal;
+}
+
+template <size_t Dimension>
+PUGS_INLINE auto
+symmetrize_matrix(const TinyVector<Dimension>& normal, const TinyMatrix<Dimension>& A)
+{
+  const TinyMatrix S = TinyMatrix<Dimension>{identity} - 2 * tensorProduct(normal, normal);
+  return S * A * S;
+}
+
+template <size_t Dimension>
+PUGS_INLINE auto
+symmetrize_coordinates(const TinyVector<Dimension>& origin,
+                       const TinyVector<Dimension>& normal,
+                       const TinyVector<Dimension>& u)
+{
+  return u - 2 * dot(u - origin, normal) * normal;
+}
+
+#endif   // SYMMETRY_UTILS_HPP
diff --git a/src/scheme/PolynomialReconstruction.cpp b/src/scheme/PolynomialReconstruction.cpp
index 3123063361c458385f34a2ab02b983bbfcad8517..6073da9c8ca1547a7aa36479b098b43999191c6f 100644
--- a/src/scheme/PolynomialReconstruction.cpp
+++ b/src/scheme/PolynomialReconstruction.cpp
@@ -2,8 +2,8 @@
 
 #include <algebra/Givens.hpp>
 #include <algebra/ShrinkMatrixView.hpp>
-#include <algebra/ShrinkVectorView.hpp>
 #include <algebra/SmallMatrix.hpp>
+#include <geometry/SymmetryUtils.hpp>
 #include <mesh/MeshData.hpp>
 #include <mesh/MeshDataManager.hpp>
 #include <mesh/MeshFlatFaceBoundary.hpp>
@@ -18,31 +18,6 @@
 #include <scheme/reconstruction_utils/ElementIntegralReconstructionMatrixBuilder.hpp>
 #include <scheme/reconstruction_utils/MutableDiscreteFunctionDPkVariant.hpp>
 
-#warning put in a file in geometry
-template <size_t Dimension>
-PUGS_INLINE auto
-symmetrize_vector(const TinyVector<Dimension>& normal, const TinyVector<Dimension>& u)
-{
-  return u - 2 * dot(u, normal) * normal;
-}
-
-template <size_t Dimension>
-PUGS_INLINE auto
-symmetrize_matrix(const TinyVector<Dimension>& normal, const TinyMatrix<Dimension>& A)
-{
-  const TinyMatrix S = TinyMatrix<Dimension>{identity} - 2 * tensorProduct(normal, normal);
-  return S * A * S;
-}
-
-template <size_t Dimension>
-PUGS_INLINE auto
-symmetrize_coordinates(const TinyVector<Dimension>& origin,
-                       const TinyVector<Dimension>& normal,
-                       const TinyVector<Dimension>& u)
-{
-  return u - 2 * dot(u - origin, normal) * normal;
-}
-
 template <MeshConcept MeshType>
 class PolynomialReconstruction::Internal
 {