diff --git a/dumux/discretization/cellcentered/mpfa/fvelementgeometry.hh b/dumux/discretization/cellcentered/mpfa/fvelementgeometry.hh
index b4de9dd31bcb9266a688d47419e2743718b2d948..1f0257088296cb151d5c4fde08302a8097987c8c 100644
--- a/dumux/discretization/cellcentered/mpfa/fvelementgeometry.hh
+++ b/dumux/discretization/cellcentered/mpfa/fvelementgeometry.hh
@@ -19,6 +19,7 @@
 
 #include <dune/common/exceptions.hh>
 #include <dune/common/iteratorrange.hh>
+#include <dune/geometry/type.hh>
 
 #include <dumux/common/parameters.hh>
 #include <dumux/common/indextraits.hh>
@@ -26,6 +27,41 @@
 
 namespace Dumux {
 
+#ifndef DOXYGEN
+namespace Detail::Mpfa {
+
+template<typename GridGeometry, typename SubControlVolumeFace>
+typename SubControlVolumeFace::Traits::Geometry makeScvfGeometry(const GridGeometry& gridGeometry,
+                                                                 const SubControlVolumeFace& scvf)
+{
+    static constexpr int dim = GridGeometry::GridView::dimension;
+
+    const auto& facetInfo = scvf.facetInfo();
+    const auto element = gridGeometry.element(facetInfo.elementIndex);
+    const auto elemGeo = element.geometry();
+    const auto refElement = referenceElement(elemGeo);
+    for (const auto& is : intersections(gridGeometry.gridView(), element))
+    {
+        if (is.indexInInside() == facetInfo.facetIndex)
+        {
+            const auto numCorners = is.geometry().corners();
+            const auto isPositions = GridGeometry::MpfaHelper::computeScvfCornersOnIntersection(
+                elemGeo, refElement, facetInfo.facetIndex, numCorners
+            );
+            return {
+                Dune::GeometryTypes::cube(dim-1),
+                GridGeometry::MpfaHelper::getScvfCorners(
+                    isPositions, numCorners, facetInfo.facetCornerIndex
+                )
+            };
+        }
+    }
+    DUNE_THROW(Dune::InvalidStateException, "Could not construct scvf geometry");
+}
+
+} // namespace Detail::Mpfa
+#endif // DOXYGEN
+
 /*!
  * \ingroup CCMpfaDiscretization
  * \brief Stencil-local finite volume geometry (scvs and scvfs) for cell-centered mpfa models
@@ -52,6 +88,7 @@ class CCMpfaFVElementGeometry<GG, true>
     using GridIndexType = typename IndexTraits<GridView>::GridIndex;
 
     static constexpr int dim = GridView::dimension;
+    static constexpr int dimWorld = GridView::dimensionworld;
 
 public:
     //! export type of the element
@@ -184,16 +221,9 @@ public:
     typename Element::Geometry geometry(const SubControlVolume& scv) const
     { return gridGeometryPtr_->element(scv.dofIndex()).geometry(); }
 
-    // suppress warnings due to current implementation
-    // these interfaces should be used!
-    #pragma GCC diagnostic push
-    #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-
     //! Create the geometry of a given sub control volume face
     typename SubControlVolumeFace::Traits::Geometry geometry(const SubControlVolumeFace& scvf) const
-    { return scvf.geometry(); }
-
-    #pragma GCC diagnostic pop
+    { return Detail::Mpfa::makeScvfGeometry(gridGeometry(), scvf); }
 
 private:
 
@@ -215,8 +245,8 @@ class CCMpfaFVElementGeometry<GG, false>
     using GridIndexType = typename IndexTraits<GridView>::GridIndex;
     using MpfaHelper = typename GG::MpfaHelper;
 
-    static const int dim = GridView::dimension;
-    static const int dimWorld = GridView::dimensionworld;
+    static constexpr int dim = GridView::dimension;
+    static constexpr int dimWorld = GridView::dimensionworld;
     using CoordScalar = typename GridView::ctype;
 
 public:
@@ -345,20 +375,13 @@ public:
     bool hasBoundaryScvf() const
     { return hasBoundaryScvf_; }
 
-    // suppress warnings due to current implementation
-    // these interfaces should be used!
-    #pragma GCC diagnostic push
-    #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-
     //! Create the geometry of a given sub control volume
     typename SubControlVolume::Traits::Geometry geometry(const SubControlVolume& scv) const
-    { return scv.geometry(); }
+    { return gridGeometryPtr_->element(scv.dofIndex()).geometry(); }
 
     //! Create the geometry of a given sub control volume face
     typename SubControlVolumeFace::Traits::Geometry geometry(const SubControlVolumeFace& scvf) const
-    { return scvf.geometry(); }
-
-    #pragma GCC diagnostic pop
+    { return Detail::Mpfa::makeScvfGeometry(gridGeometry(), scvf); }
 
 private:
 
@@ -489,10 +512,15 @@ private:
                     continue;
 
                 hasBoundaryScvf_ = (hasBoundaryScvf_ || is.boundary());
-
+                typename SubControlVolumeFace::FacetInfo facetInfo{
+                    gridGeometry().elementMapper().index(e),
+                    useNeighbor ? is.indexInOutside() : is.indexInInside(),
+                    c
+                };
                 scvfs_.emplace_back(MpfaHelper(),
                                     MpfaHelper::getScvfCorners(isPositions, numCorners, c),
                                     is,
+                                    std::move(facetInfo),
                                     vIdxGlobal,
                                     vIdxLocal,
                                     scvFaceIndices[scvfCounter],
@@ -580,9 +608,15 @@ private:
                 }
 
                 // build scvf
+                typename SubControlVolumeFace::FacetInfo facetInfo{
+                    gridGeometry().elementMapper().index(e),
+                    useNeighbor ? is.indexInOutside() : is.indexInInside(),
+                    c
+                };
                 neighborScvfs_.emplace_back(MpfaHelper(),
                                             MpfaHelper::getScvfCorners(isPositions, numCorners, c),
                                             is,
+                                            std::move(facetInfo),
                                             vIdxGlobal,
                                             vIdxLocal,
                                             scvFaceIndices[scvfCounter],
diff --git a/dumux/discretization/cellcentered/mpfa/fvgridgeometry.hh b/dumux/discretization/cellcentered/mpfa/fvgridgeometry.hh
index f89340ab07379df227f2ad2355b35ad62cca05e2..5ddc0345db8ce1887ecc71ae5133b14760942a8e 100644
--- a/dumux/discretization/cellcentered/mpfa/fvgridgeometry.hh
+++ b/dumux/discretization/cellcentered/mpfa/fvgridgeometry.hh
@@ -308,7 +308,7 @@ private:
                 const bool usesSecondaryIV = secondaryIvIndicator_(element, is, isBranchingPoint);
 
                 // make the scv faces belonging to each corner of the intersection
-                for (std::size_t c = 0; c < numCorners; ++c)
+                for (int c = 0; c < numCorners; ++c)
                 {
                     // get the global vertex index the scv face is connected to
                     const auto vIdxLocal = refElement.subEntity(indexInElement, 1, c, dim);
@@ -337,9 +337,15 @@ private:
                                                     } ();
 
                     scvfIndexSet.push_back(scvfIdx);
+                    typename SubControlVolumeFace::FacetInfo facetInfo{
+                        this->elementMapper().index(e),
+                        useNeighbor ? is.indexInOutside() : is.indexInInside(),
+                        c
+                    };
                     scvfs_.emplace_back(MpfaHelper(),
                                         MpfaHelper::getScvfCorners(isPositions, numCorners, c),
                                         is,
+                                        std::move(facetInfo),
                                         vIdxGlobal,
                                         vIdxLocal,
                                         scvfIdx,
diff --git a/dumux/discretization/cellcentered/mpfa/subcontrolvolumeface.hh b/dumux/discretization/cellcentered/mpfa/subcontrolvolumeface.hh
index d677c55da6d041b04515784f3eb6aeb4c1887dc1..427617e4ae11c664b9f586b28644de85118a51af 100644
--- a/dumux/discretization/cellcentered/mpfa/subcontrolvolumeface.hh
+++ b/dumux/discretization/cellcentered/mpfa/subcontrolvolumeface.hh
@@ -12,6 +12,7 @@
 #ifndef DUMUX_DISCRETIZATION_CC_MPFA_SUBCONTROLVOLUMEFACE_HH
 #define DUMUX_DISCRETIZATION_CC_MPFA_SUBCONTROLVOLUMEFACE_HH
 
+#include <utility>
 #include <vector>
 #include <array>
 
@@ -92,6 +93,14 @@ class CCMpfaSubControlVolumeFace
     using BoundaryFlag = typename T::BoundaryFlag;
 
 public:
+    // Information on the intersection from which this scvf was constructed
+    struct FacetInfo
+    {
+        GridIndexType elementIndex;
+        int facetIndex;
+        int facetCornerIndex;
+    };
+
     //! export the type used for global coordinates
     using GlobalPosition = typename T::GlobalPosition;
     //! state the traits public and thus export all types
@@ -103,6 +112,7 @@ public:
      * \param helper The helper class for mpfa schemes
      * \param corners The corners of the scv face
      * \param intersection The intersection
+     * \param facetInfo Information on the facet from which this scvf is constructed
      * \param vIdxGlobal The global vertex index the scvf is connected to
      * \param vIdxLocal The element-local vertex index the scvf is connected to
      * \param scvfIndex The global index of this scv face
@@ -116,6 +126,7 @@ public:
     CCMpfaSubControlVolumeFace(const MpfaHelper& helper,
                                CornerStorage&& corners,
                                const Intersection& intersection,
+                               FacetInfo facetInfo,
                                GridIndexType vIdxGlobal,
                                unsigned int vIdxLocal,
                                GridIndexType scvfIndex,
@@ -133,6 +144,7 @@ public:
     , center_(0.0)
     , unitOuterNormal_(intersection.centerUnitOuterNormal())
     , boundaryFlag_{intersection}
+    , facetInfo_{std::move(facetInfo)}
     {
           // compute the center of the scvf
           for (const auto& corner : corners_)
@@ -205,15 +217,14 @@ public:
     const GlobalPosition& unitOuterNormal() const
     { return unitOuterNormal_; }
 
-    //! The geometry of the sub control volume face
-    [[deprecated("Will be removed after 3.7. Use fvGeometry.geometry(scvf).")]]
-    Geometry geometry() const
-    { return Geometry(Dune::GeometryTypes::cube(Geometry::mydimension), corners_); }
-
     //! Return the boundary flag
     typename BoundaryFlag::value_type boundaryFlag() const
     { return boundaryFlag_.get(); }
 
+    //! Return information on the facet from which this scvf was constructed
+    const FacetInfo& facetInfo() const
+    { return facetInfo_; }
+
 private:
     bool boundary_;
     GridIndexType vertexIndex_;
@@ -228,6 +239,7 @@ private:
     GlobalPosition unitOuterNormal_;
     Scalar area_;
     BoundaryFlag boundaryFlag_;
+    FacetInfo facetInfo_;
 };
 
 } // end namespace Dumux