diff --git a/dune/solvers/transferoperators/genericmultigridtransfer.hh b/dune/solvers/transferoperators/genericmultigridtransfer.hh
index 6adca9fed76d2cc394339ba5e34abe3728575598..b1c3ffac3b583efcae2a26a0992caf07944d1bd2 100644
--- a/dune/solvers/transferoperators/genericmultigridtransfer.hh
+++ b/dune/solvers/transferoperators/genericmultigridtransfer.hh
@@ -402,35 +402,7 @@ public:
 
     //! Multiply the vector f from the right to the prolongation matrix
     template<class TransferOperatorType, class DiscFuncType>
-    static void prolong(const TransferOperatorType& matrix, const DiscFuncType& f, DiscFuncType &t)
-    {
-        if (f.size() != matrix.M())
-            DUNE_THROW(Dune::Exception, "Number of entries in the coarse grid vector is not equal "
-                    << "to the number of columns of the interpolation matrix!");
-
-        t.resize(matrix.N());
-
-        typedef typename TransferOperatorType::row_type RowType;
-        typedef typename RowType::ConstIterator ColumnIterator;
-
-        for(size_t rowIdx=0; rowIdx<matrix.N(); rowIdx++)
-        {
-            const RowType& row = matrix[rowIdx];
-
-            t[rowIdx] = 0.0;
-
-            ColumnIterator cIt    = row.begin();
-            ColumnIterator cEndIt = row.end();
-
-            for(; cIt!=cEndIt; ++cIt)
-                umv(*cIt, f[cIt.index()], t[rowIdx]);
-        }
-    }
-
-
-    //! Multiply the vector f from the right to the prolongation matrix
-    template<class TransferOperatorType, class DiscFuncType>
-    static void prolong(const TransferOperatorType& matrix, const DiscFuncType& f, DiscFuncType &t, int virtualBlockSize)
+    static void prolong(const TransferOperatorType& matrix, const DiscFuncType& f, DiscFuncType &t, int virtualBlockSize = 1)
     {
         if (virtualBlockSize<0)
             virtualBlockSize = f.size()/matrix.M();
@@ -465,34 +437,7 @@ public:
 
     //! Multiply the vector f from the right to the transpose of the prolongation matrix
     template<class TransferOperatorType, class DiscFuncType>
-    static void restrict(const TransferOperatorType& matrix, const DiscFuncType& f, DiscFuncType &t)
-    {
-        if (f.size() != matrix.N())
-            DUNE_THROW(Dune::Exception, "Fine grid vector has " << f.size() << " entries "
-                    << "but the interpolation matrix has " << matrix.N() << " rows!");
-
-        t.resize(matrix.M());
-        t = 0;
-
-        typedef typename TransferOperatorType::row_type RowType;
-        typedef typename RowType::ConstIterator ColumnIterator;
-
-        for (size_t rowIdx=0; rowIdx<matrix.N(); rowIdx++)
-        {
-            const RowType& row = matrix[rowIdx];
-
-            ColumnIterator cIt    = row.begin();
-            ColumnIterator cEndIt = row.end();
-
-            for(; cIt!=cEndIt; ++cIt)
-                umtv(*cIt, f[rowIdx], t[cIt.index()]);
-        }
-    }
-
-
-    //! Multiply the vector f from the right to the transpose of the prolongation matrix
-    template<class TransferOperatorType, class DiscFuncType>
-    static void restrict(const TransferOperatorType& matrix, const DiscFuncType& f, DiscFuncType &t, int virtualBlockSize)
+    static void restrict(const TransferOperatorType& matrix, const DiscFuncType& f, DiscFuncType &t, int virtualBlockSize = 1)
     {
         if (virtualBlockSize<0)
             virtualBlockSize = f.size()/matrix.N();