diff --git a/dune/gfe/realtuple.hh b/dune/gfe/realtuple.hh
index 9fecb7e934d5f365ad8dc99949663e50b8bdba5d..87e8a2b8bda63544a1921d26e9721388fcb5cdf5 100644
--- a/dune/gfe/realtuple.hh
+++ b/dune/gfe/realtuple.hh
@@ -147,6 +147,16 @@ public:
         return v;
     }
 
+        /** \brief Project tangent vector of R^n onto the normal space space */
+    EmbeddedTangentVector projectOntoNormalSpace(const EmbeddedTangentVector& v) const {
+        return EmbeddedTangentVector(0);
+    }
+
+    /** \brief The Weingarten map */
+    EmbeddedTangentVector weingarten(const EmbeddedTangentVector& z, const EmbeddedTangentVector& v) const {
+        return EmbeddedTangentVector(0);
+    }
+
     /** \brief The global coordinates, if you really want them */
     const Dune::FieldVector<T,N>& globalCoordinates() const {
         return data_;
diff --git a/dune/gfe/rotation.hh b/dune/gfe/rotation.hh
index 3fc8f2d75ffa5dd5bb67e830a121610abef3afb2..a392d62517521c17c7fcda4efe12dbe94cea62a2 100644
--- a/dune/gfe/rotation.hh
+++ b/dune/gfe/rotation.hh
@@ -994,6 +994,28 @@ public:
         return result;
     }
 
+    /** \brief Project tangent vector of R^n onto the normal space space */
+    EmbeddedTangentVector projectOntoNormalSpace(const EmbeddedTangentVector& v) const {
+        Dune::FieldVector<T,4> data = *this;
+        T sp = v*data;
+        EmbeddedTangentVector result = *this;
+        result *= sp;
+        return result;
+    }
+
+    /** \brief The Weingarten map */
+    EmbeddedTangentVector weingarten(const EmbeddedTangentVector& z, const EmbeddedTangentVector& v) const {
+
+        EmbeddedTangentVector result;
+
+        T sp = v*(*this);
+
+        for (int i=0; i<embeddedDim; i++)
+          result[i] = -sp * z[i];
+
+        return result;
+    }
+
     /** \brief The global coordinates, if you really want them */
     const CoordinateType& globalCoordinates() const {
         return *this;