diff --git a/dumux/common/geometry/geometryintersection.hh b/dumux/common/geometry/geometryintersection.hh
index 18f611aa7f871c8b0a39c49b8f5b9e380f9faed2..31ce8ea999756f07a1d6c52c94d64c7ca3f377c7 100644
--- a/dumux/common/geometry/geometryintersection.hh
+++ b/dumux/common/geometry/geometryintersection.hh
@@ -114,7 +114,7 @@ using DefaultPolicy = typename DefaultPolicyChooser<Geometry1, Geometry2>::type;
 
 } // end namespace IntersectionPolicy
 
-namespace Impl {
+namespace Detail {
 
 /*!
  * \ingroup Geometry
@@ -198,7 +198,7 @@ bool computeSegmentIntersection(const Geo1& geo1, const Geo2& geo2, ctype baseEp
     return true;
 }
 
-} // end namespace Impl
+} // end namespace Detail
 
 /*!
  * \ingroup Geometry
@@ -503,7 +503,7 @@ private:
              return n;
          };
 
-         return Impl::computeSegmentIntersection(geo1, geo2, eps_, tfirst, tlast, getFacetCorners, computeNormal);
+         return Detail::computeSegmentIntersection(geo1, geo2, eps_, tfirst, tlast, getFacetCorners, computeNormal);
      }
 };
 
@@ -796,7 +796,7 @@ private:
              return n;
          };
 
-         return Impl::computeSegmentIntersection(geo1, geo2, eps_, tfirst, tlast, getFacetCorners, computeNormal);
+         return Detail::computeSegmentIntersection(geo1, geo2, eps_, tfirst, tlast, getFacetCorners, computeNormal);
      }
 };
 
@@ -1156,7 +1156,7 @@ private:
             return n;
         };
 
-        return Impl::computeSegmentIntersection(geo1, geo2, eps_, tfirst, tlast, getFacetCorners, computeNormal);
+        return Detail::computeSegmentIntersection(geo1, geo2, eps_, tfirst, tlast, getFacetCorners, computeNormal);
     }
 
     /*!
diff --git a/dumux/common/integrate.hh b/dumux/common/integrate.hh
index 679753185fb13f8f945bc4b6b00eb6a76147d0db..b7999f0bdd79314ec923930d4bac5926219fbc3c 100644
--- a/dumux/common/integrate.hh
+++ b/dumux/common/integrate.hh
@@ -43,7 +43,7 @@ namespace Dumux {
 
 // implementation details of the integrate functions
 #ifndef DOXYGEN
-namespace Impl {
+namespace Detail {
 
 struct HasLocalFunction
 {
@@ -92,7 +92,7 @@ struct FieldTypeImpl<T, typename std::enable_if<(sizeof(std::declval<T>()[0]) >
 template<class T>
 using FieldType = typename FieldTypeImpl<T>::type;
 
-} // end namespace Impl
+} // end namespace Detail
 #endif
 
 /*!
@@ -102,13 +102,13 @@ using FieldType = typename FieldTypeImpl<T>::type;
  * \param order the order of the quadrature rule
  */
 template<class GridGeometry, class SolutionVector,
-         typename std::enable_if_t<!Impl::hasLocalFunction<SolutionVector>(), int> = 0>
+         typename std::enable_if_t<!Detail::hasLocalFunction<SolutionVector>(), int> = 0>
 auto integrateGridFunction(const GridGeometry& gg,
                            const SolutionVector& sol,
                            std::size_t order)
 {
     using GridView = typename GridGeometry::GridView;
-    using Scalar = typename Impl::FieldType< std::decay_t<decltype(sol[0])> >;
+    using Scalar = typename Detail::FieldType< std::decay_t<decltype(sol[0])> >;
 
     Scalar integral(0.0);
     for (const auto& element : elements(gg.gridView()))
@@ -135,14 +135,14 @@ auto integrateGridFunction(const GridGeometry& gg,
  * \note dune functions currently doesn't support composing two functions
  */
 template<class GridGeometry, class Sol1, class Sol2,
-         typename std::enable_if_t<!Impl::hasLocalFunction<Sol1>(), int> = 0>
+         typename std::enable_if_t<!Detail::hasLocalFunction<Sol1>(), int> = 0>
 auto integrateL2Error(const GridGeometry& gg,
                       const Sol1& sol1,
                       const Sol2& sol2,
                       std::size_t order)
 {
     using GridView = typename GridGeometry::GridView;
-    using Scalar = typename Impl::FieldType< std::decay_t<decltype(sol1[0])> >;
+    using Scalar = typename Detail::FieldType< std::decay_t<decltype(sol1[0])> >;
 
     Scalar l2norm(0.0);
     for (const auto& element : elements(gg.gridView()))
@@ -176,7 +176,7 @@ auto integrateL2Error(const GridGeometry& gg,
  * \note overload for a Dune::Funtions::GridFunction
  */
 template<class GridView, class F,
-         typename std::enable_if_t<Impl::hasLocalFunction<F>(), int> = 0>
+         typename std::enable_if_t<Detail::hasLocalFunction<F>(), int> = 0>
 auto integrateGridFunction(const GridView& gv,
                            const F& f,
                            std::size_t order)
@@ -185,7 +185,7 @@ auto integrateGridFunction(const GridView& gv,
 
     using Element = typename GridView::template Codim<0>::Entity;
     using LocalPosition = typename Element::Geometry::LocalCoordinate;
-    using Scalar = typename Impl::FieldType< std::decay_t<decltype(fLocal(std::declval<LocalPosition>()))> >;
+    using Scalar = typename Detail::FieldType< std::decay_t<decltype(fLocal(std::declval<LocalPosition>()))> >;
 
     Scalar integral(0.0);
     for (const auto& element : elements(gv))
@@ -216,7 +216,7 @@ auto integrateGridFunction(const GridView& gv,
  * \note dune functions currently doesn't support composing two functions
  */
 template<class GridView, class F, class G,
-         typename std::enable_if_t<Impl::hasLocalFunction<F>(), int> = 0>
+         typename std::enable_if_t<Detail::hasLocalFunction<F>(), int> = 0>
 auto integrateL2Error(const GridView& gv,
                       const F& f,
                       const G& g,
@@ -227,7 +227,7 @@ auto integrateL2Error(const GridView& gv,
 
     using Element = typename GridView::template Codim<0>::Entity;
     using LocalPosition = typename Element::Geometry::LocalCoordinate;
-    using Scalar = typename Impl::FieldType< std::decay_t<decltype(fLocal(std::declval<LocalPosition>()))> >;
+    using Scalar = typename Detail::FieldType< std::decay_t<decltype(fLocal(std::declval<LocalPosition>()))> >;
 
     Scalar l2norm(0.0);
     for (const auto& element : elements(gv))
diff --git a/dumux/common/typetraits/isvalid.hh b/dumux/common/typetraits/isvalid.hh
index ea065be3eff8d2e0829dc1b3f0a89c5961ea872e..92664a38c551bb96010f80d867725cf13d34bb02 100644
--- a/dumux/common/typetraits/isvalid.hh
+++ b/dumux/common/typetraits/isvalid.hh
@@ -30,7 +30,7 @@
 
 namespace Dumux {
 
-namespace Impl {
+namespace Detail {
 
 // the functor testing an expression for validity
 // Expression: can be for example a lambda expression
@@ -68,7 +68,7 @@ public:
     { return testArgument_<Argument>(int()); }
 };
 
-} // end namespace Impl
+} // end namespace Detail
 
 
 /*!
@@ -91,7 +91,7 @@ public:
  */
 template <typename Expression>
 constexpr auto isValid(const Expression& t)
-{ return Impl::ValidityTestFunctor<Expression>(); }
+{ return Detail::ValidityTestFunctor<Expression>(); }
 
 } // end namespace Dumux
 
diff --git a/dumux/common/typetraits/problem.hh b/dumux/common/typetraits/problem.hh
index c6aa0257ba6bfd3649f001e8f72e32a2fbdf1af0..0131254abd3831b190cb0ac61025ca26c5a5c4a3 100644
--- a/dumux/common/typetraits/problem.hh
+++ b/dumux/common/typetraits/problem.hh
@@ -30,10 +30,10 @@
 namespace Dumux {
 
 // forward declare
-namespace Impl {
+namespace Detail {
 template<class Problem, DiscretizationMethod dm>
 struct ProblemTraits;
-} // end namespace Impl
+} // end namespace Detail
 
 /*!
  * \ingroup Common
@@ -43,7 +43,7 @@ template<class Problem>
 struct ProblemTraits
 {
     using GridGeometry = std::decay_t<decltype(std::declval<Problem>().gridGeometry())>;
-    using BoundaryTypes = typename Impl::template ProblemTraits<Problem, GridGeometry::discMethod>::BoundaryTypes;
+    using BoundaryTypes = typename Detail::template ProblemTraits<Problem, GridGeometry::discMethod>::BoundaryTypes;
 };
 
 } // end namespace Dumux
diff --git a/dumux/discretization/box.hh b/dumux/discretization/box.hh
index 02d223ae3b73390038579fb513e42c7b451e64d0..7ec91488a925c62821935a6e1e1500617adbddf2 100644
--- a/dumux/discretization/box.hh
+++ b/dumux/discretization/box.hh
@@ -107,7 +107,7 @@ struct BaseLocalResidual<TypeTag, TTag::BoxModel> { using type = BoxLocalResidua
 
 } // namespace Properties
 
-namespace Impl {
+namespace Detail {
 
 template<class Problem>
 struct ProblemTraits<Problem, DiscretizationMethod::box>
@@ -122,7 +122,7 @@ public:
     using BoundaryTypes = std::decay_t<decltype(std::declval<Problem>().boundaryTypes(std::declval<Element>(), std::declval<SubControlVolume>()))>;
 };
 
-} // end namespace Impl
+} // end namespace Detail
 
 } // namespace Dumux
 
diff --git a/dumux/discretization/ccmpfa.hh b/dumux/discretization/ccmpfa.hh
index b457451f83109f4e4e4276db60a4f94d9b385844..2d0e9e1182b9a77653aadadc668a7db71f1424c3 100644
--- a/dumux/discretization/ccmpfa.hh
+++ b/dumux/discretization/ccmpfa.hh
@@ -160,7 +160,7 @@ template<class TypeTag>
 struct BaseLocalResidual<TypeTag, TTag::CCMpfaModel> { using type = CCLocalResidual<TypeTag>; };
 } // namespace Properties
 
-namespace Impl {
+namespace Detail {
 
 template<class Problem>
 struct ProblemTraits<Problem, DiscretizationMethod::ccmpfa>
@@ -175,7 +175,7 @@ public:
     using BoundaryTypes = std::decay_t<decltype(std::declval<Problem>().boundaryTypes(std::declval<Element>(), std::declval<SubControlVolumeFace>()))>;
 };
 
-} // end namespace Impl
+} // end namespace Detail
 
 } // namespace Dumux
 
diff --git a/dumux/discretization/cctpfa.hh b/dumux/discretization/cctpfa.hh
index bbce1cd7ad588592d5f1e2d2f85978794b431f49..0735de0923d6340b25a5a285b3d58018b5ac3270 100644
--- a/dumux/discretization/cctpfa.hh
+++ b/dumux/discretization/cctpfa.hh
@@ -96,7 +96,7 @@ template<class TypeTag>
 struct BaseLocalResidual<TypeTag, TTag::CCTpfaModel> { using type = CCLocalResidual<TypeTag>; };
 } // namespace Properties
 
-namespace Impl {
+namespace Detail {
 
 template<class Problem>
 struct ProblemTraits<Problem, DiscretizationMethod::cctpfa>
@@ -111,7 +111,7 @@ public:
     using BoundaryTypes = std::decay_t<decltype(std::declval<Problem>().boundaryTypes(std::declval<Element>(), std::declval<SubControlVolumeFace>()))>;
 };
 
-} // end namespace Impl
+} // end namespace Detail
 
 } // namespace Dumux
 
diff --git a/dumux/discretization/projection/projector.hh b/dumux/discretization/projection/projector.hh
index 9c21793dd47a21fc3ace7c2cd6c013434fe61016..6125cd66a00f8b5a762f6997eccaf2e6aea215b9 100644
--- a/dumux/discretization/projection/projector.hh
+++ b/dumux/discretization/projection/projector.hh
@@ -215,7 +215,7 @@ public:
 
 
 // Projector construction details
-namespace Impl {
+namespace Detail {
 
 /*!
  * \brief Reduces a mass matrix and projection matrix such that they are composed
@@ -585,7 +585,7 @@ auto makeProjectorPair(const FEBasisDomain& feBasisDomain,
     }
 }
 
-} // end namespace Implementation
+} // end namespace Detail
 
 
 /*!
@@ -610,7 +610,7 @@ auto makeProjectorPair(const FEBasisDomain& feBasisDomain,
     static constexpr int targetDim = FEBasisTarget::GridView::dimension;
     static_assert(targetDim <= domainDim, "makeProjectorPair() expects targetDim < domainDim, please swap arguments");
 
-    return Impl::makeProjectorPair<true>(feBasisDomain, feBasisTarget, glue);
+    return Detail::makeProjectorPair<true>(feBasisDomain, feBasisTarget, glue);
 }
 
 /*!
@@ -633,7 +633,7 @@ auto makeProjector(const FEBasisDomain& feBasisDomain,
     static constexpr int targetDim = FEBasisTarget::GridView::dimension;
     static_assert(targetDim <= domainDim, "makeProjectorPair() expects targetDim < domainDim, please swap arguments");
 
-    return Impl::makeProjectorPair<false>(feBasisDomain, feBasisTarget, glue).first;
+    return Detail::makeProjectorPair<false>(feBasisDomain, feBasisTarget, glue).first;
 }
 
 /*!
@@ -657,7 +657,7 @@ auto makeProjectionMatricesPair(const FEBasisDomain& feBasisDomain,
     static constexpr int targetDim = FEBasisTarget::GridView::dimension;
     static_assert(targetDim <= domainDim, "makeProjectionMatrixPair() expects targetDim < domainDim, please swap arguments");
 
-    return Impl::createProjectionMatrices<true>(feBasisDomain, feBasisTarget, glue);
+    return Detail::createProjectionMatrices<true>(feBasisDomain, feBasisTarget, glue);
 }
 
 /*!
@@ -678,7 +678,7 @@ auto makeProjectionMatrices(const FEBasisDomain& feBasisDomain,
     static constexpr int targetDim = FEBasisTarget::GridView::dimension;
     static_assert(targetDim <= domainDim, "makeProjectionMatrixPair() expects targetDim < domainDim, please swap arguments");
 
-    return Impl::createProjectionMatrices<false>(feBasisDomain, feBasisTarget, glue).first;
+    return Detail::createProjectionMatrices<false>(feBasisDomain, feBasisTarget, glue).first;
 }
 
 } // end namespace Dumux
diff --git a/dumux/discretization/staggered.hh b/dumux/discretization/staggered.hh
index 059d60756f95400f52abc9754fc2cafdd3a0e974..f8c5bec7e4b9447a16d0d5df59d859c818114f77 100644
--- a/dumux/discretization/staggered.hh
+++ b/dumux/discretization/staggered.hh
@@ -203,7 +203,7 @@ public:
 
 } // namespace Properties
 
-namespace Impl {
+namespace Detail {
 
 template<class Problem>
 struct ProblemTraits<Problem, DiscretizationMethod::staggered>
@@ -218,7 +218,7 @@ public:
     using BoundaryTypes = std::decay_t<decltype(std::declval<Problem>().boundaryTypes(std::declval<Element>(), std::declval<SubControlVolumeFace>()))>;
 };
 
-} // end namespace Impl
+} // end namespace Detail
 
 } // namespace Dumux
 
diff --git a/dumux/io/vtkfunction.hh b/dumux/io/vtkfunction.hh
index e71d9a4f1d8f635510c64c2d8485099e15ffb7e9..5664ffba00136dda60c8868895dfeb10c84af4e8 100644
--- a/dumux/io/vtkfunction.hh
+++ b/dumux/io/vtkfunction.hh
@@ -36,7 +36,7 @@
 
 namespace Dumux::Vtk {
 
-namespace Impl {
+namespace Detail {
 
 template<class Field>
 double accessEntry(const Field& f, [[maybe_unused]] int mycomp, [[maybe_unused]] int i)
@@ -52,7 +52,7 @@ double accessEntry(const Field& f, [[maybe_unused]] int mycomp, [[maybe_unused]]
         return f[i];
 }
 
-} // end namespace Impl
+} // end namespace Detail
 
 /*!
  * \ingroup InputOutput
@@ -79,7 +79,7 @@ public:
 
     //! evaluate
     double evaluate(int mycomp, const Element& e, const Dune::FieldVector<ctype, dim>&) const final
-    { return Impl::accessEntry(field_, mycomp, mapper_.index(e)); }
+    { return Detail::accessEntry(field_, mycomp, mapper_.index(e)); }
 
     //! get output precision for the field
     Dumux::Vtk::Precision precision() const final
@@ -138,7 +138,7 @@ public:
 
         std::vector<Dune::FieldVector<ctype, 1>> cornerValues(nVertices);
         for (unsigned i = 0; i < nVertices; ++i)
-            cornerValues[i] = Impl::accessEntry(field_, mycomp, mapper_.subIndex(e, i, dim));
+            cornerValues[i] = Detail::accessEntry(field_, mycomp, mapper_.subIndex(e, i, dim));
 
         // (Ab)use the MultiLinearGeometry class to do multi-linear interpolation between scalars
         const Dune::MultiLinearGeometry<ctype, dim, 1> interpolation(e.type(), std::move(cornerValues));
diff --git a/dumux/multidomain/embedded/cylinderintegration.hh b/dumux/multidomain/embedded/cylinderintegration.hh
index dbcb901a4ff24cb872230148e8809c76bc9711a5..e909c5d94d1ea23da9a53984cbeb44a361f79df0 100644
--- a/dumux/multidomain/embedded/cylinderintegration.hh
+++ b/dumux/multidomain/embedded/cylinderintegration.hh
@@ -208,7 +208,7 @@ private:
     std::vector<std::vector<Scalar>> sincos_;
 };
 
-namespace Impl {
+namespace Detail {
 //! check if a point is in an ellipse
 template<class GlobalPosition>
 inline bool pointInEllipse(const GlobalPosition& p,
@@ -273,7 +273,7 @@ ellipseIntegrationPoints(const GlobalPosition& center,
     // return points and integration element
     return {points, aStep*bStep};
 }
-} // end namespace Impl
+} // end namespace Detail
 
 /*!
  * \ingroup EmbeddedCoupling
@@ -336,7 +336,7 @@ public:
         auto startZ = bottomCenter;
         startZ.axpy(0.5*zStep, zAxis);
         auto [ellipseIPs, ellipseIntegrationElement]
-            = Impl::ellipseIntegrationPoints(startZ, firstUnitAxis, secondUnitAxis, a, b, normal, characteristicLength);
+            = Detail::ellipseIntegrationPoints(startZ, firstUnitAxis, secondUnitAxis, a, b, normal, characteristicLength);
 
         // compute total number of points
         const auto abPoints = ellipseIPs.size();
@@ -434,7 +434,7 @@ public:
 
         // generate integration points
         std::tie(points_, integrationElement_)
-            = Impl::ellipseIntegrationPoints(center, firstUnitAxis, secondUnitAxis, a, b, normal, characteristicLength);
+            = Detail::ellipseIntegrationPoints(center, firstUnitAxis, secondUnitAxis, a, b, normal, characteristicLength);
 
         // store number of sample points
         const auto abPoints = points_.size();