diff --git a/dumux/discretization/staggered/freeflow/subcontrolvolumeface.hh b/dumux/discretization/staggered/freeflow/subcontrolvolumeface.hh
index 5caf10a4e67d368336885a8be6f793abcd08d954..46603e72d8eb48c299c37d453465f14384ae2f39 100644
--- a/dumux/discretization/staggered/freeflow/subcontrolvolumeface.hh
+++ b/dumux/discretization/staggered/freeflow/subcontrolvolumeface.hh
@@ -146,7 +146,6 @@ public:
                                           const std::vector<GridIndexType>& scvIndices,
                                           const typename T::GeometryHelper& geometryHelper)
     : ParentType(),
-      geomType_(isGeometry.type()),
       area_(isGeometry.volume()),
       center_(isGeometry.center()),
       unitOuterNormal_(is.centerUnitOuterNormal()),
@@ -222,13 +221,6 @@ public:
         return scvfIndex_;
     }
 
-    //! The geometry of the sub control volume face
-    [[deprecated("Will be removed after 3.7. Use fvGeometry.geometry(scvf).")]]
-    const Geometry geometry() const
-    {
-        return Geometry(geomType_, corners_);
-    }
-
     //! The local index of this sub control volume face
     LocalIndexType localFaceIdx() const
     {
@@ -442,7 +434,6 @@ public:
     { isGhostFace_ = isGhostFaceFlag; }
 
 private:
-    Dune::GeometryType geomType_;
     CornerStorage corners_;
     Scalar area_;
     GlobalPosition center_;
diff --git a/dumux/discretization/staggered/fvelementgeometry.hh b/dumux/discretization/staggered/fvelementgeometry.hh
index ee9ec9747ea74296c8a387ec142085998a89acff..0bd81fdd5b068e214f77e6ff53c9302d96bbb0e5 100644
--- a/dumux/discretization/staggered/fvelementgeometry.hh
+++ b/dumux/discretization/staggered/fvelementgeometry.hh
@@ -15,6 +15,7 @@
 #include <optional>
 #include <dumux/common/indextraits.hh>
 #include <dumux/discretization/cellcentered/tpfa/fvelementgeometry.hh>
+#include <dumux/discretization/staggered/freeflow/subcontrolvolumeface.hh>
 
 namespace Dumux {
 
@@ -207,20 +208,41 @@ 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(); }
+    {
+        const auto element = gridGeometryPtr_->element(scvf.insideScvIdx());
+        const auto& scvfIndices = gridGeometryPtr_->scvfIndicesOfScv(scvf.insideScvIdx());
+        const LocalIndexType localScvfIdx = Detail::Tpfa::findLocalIndex(scvf.index(), scvfIndices);
+        LocalIndexType localIdx = 0;
+        using FaceCornerStorage = typename SubControlVolumeFace::Traits::CornerStorage;
+        for (const auto& intersection : intersections(gridGeometryPtr_->gridView(), element))
+        {
+            if (intersection.neighbor() || intersection.boundary())
+            {
+                if (localIdx == localScvfIdx)
+                {
+                    FaceCornerStorage corners{};
+                    const auto& isGeometry = intersection.geometry();
+                    if constexpr (Detail::hasResize<FaceCornerStorage>())
+                        corners.resize(isGeometry.corners());
 
-    #pragma GCC diagnostic pop
+                    for (int i = 0; i < isGeometry.corners(); ++i)
+                        corners[i] = isGeometry.corner(i);
+
+                    return {intersection.type(), corners};
+                }
+                else
+                    ++localIdx;
+            }
+        }
+
+        DUNE_THROW(Dune::InvalidStateException, "Could not find scvf geometry");
+    }
 
 private:
     //! Binding of an element preparing the geometries only inside the element
diff --git a/dumux/discretization/staggered/subcontrolvolumeface.hh b/dumux/discretization/staggered/subcontrolvolumeface.hh
index 6adf5ef48044914edb3a56eea382d3f08ec799e9..99f2d61dcd098be39fccb7fb0159a90dbc283e58 100644
--- a/dumux/discretization/staggered/subcontrolvolumeface.hh
+++ b/dumux/discretization/staggered/subcontrolvolumeface.hh
@@ -90,6 +90,7 @@ struct StaggeredDefaultScvfGeometryTraits
     using LocalIndexType = typename IndexTraits<GridView>::LocalIndex;
     using Scalar = typename GridView::ctype;
     using GlobalPosition = Dune::FieldVector<Scalar, GridView::dimensionworld>;
+    using CornerStorage = std::vector<GlobalPosition>;
 };
 
 /*!
@@ -129,7 +130,6 @@ public:
                                   const std::vector<GridIndexType>& scvIndices,
                                   const GeometryHelper& geometryHelper)
     : ParentType()
-    , geomType_(isGeometry.type())
     , area_(isGeometry.volume())
     , center_(isGeometry.center())
     , unitOuterNormal_(is.centerUnitOuterNormal())
@@ -137,10 +137,6 @@ public:
     , scvIndices_(scvIndices)
     , boundary_(is.boundary())
     {
-        corners_.resize(isGeometry.corners());
-        for (int i = 0; i < isGeometry.corners(); ++i)
-            corners_[i] = isGeometry.corner(i);
-
         dofIdx_ = geometryHelper.dofIndex();
         localFaceIdx_ = geometryHelper.localFaceIndex();
     }
@@ -200,13 +196,6 @@ public:
         return scvfIndex_;
     }
 
-    //! The geometry of the sub control volume face
-    [[deprecated("Will be removed after 3.7. Use fvGeometry.geometry(scvf).")]]
-    const Geometry geometry() const
-    {
-        return Geometry(geomType_, corners_);
-    }
-
     //! The global index of the dof living on this face
     GridIndexType dofIndex() const
     {
@@ -220,8 +209,6 @@ public:
     }
 
 private:
-    Dune::GeometryType geomType_;
-    std::vector<GlobalPosition> corners_;
     Scalar area_;
     GlobalPosition center_;
     GlobalPosition unitOuterNormal_;