diff --git a/nonlinelast.cc b/nonlinelast.cc
index 5737b684233fa8d6c9cbea46dd6dd8fd9a8b9d53..501d5130cf057f8d59eb72fac80f154afd4936bc 100644
--- a/nonlinelast.cc
+++ b/nonlinelast.cc
@@ -169,10 +169,10 @@ int main (int argc, char *argv[]) try
         //  Create the transfer operator
         //////////////////////////////////
 
-        std::vector<TruncatedCompressedMGTransfer<VectorType>* > mgTransfers(grid->maxLevel());
+        std::vector<std::shared_ptr<TruncatedCompressedMGTransfer<VectorType> > > mgTransfers(grid->maxLevel());
         for (size_t i=0; i<mgTransfers.size(); i++) {
 
-            mgTransfers[i] = new TruncatedCompressedMGTransfer<VectorType>;
+            mgTransfers[i] = std::make_shared<TruncatedCompressedMGTransfer<VectorType> >();
             mgTransfers[i]->setup(*grid,i,i+1);
         }
 
@@ -322,9 +322,6 @@ int main (int argc, char *argv[]) try
                 << "   elements: " << grid->size(0)<<std::endl;
         std::cout << "####################################################" << std::endl;
 
-        for (size_t j=0; j<mgTransfers.size(); j++)
-            delete(mgTransfers[j]);
-
         Dune::LeafAmiraMeshWriter<GridType> amiramesh2;
         amiramesh2.addLeafGrid(*grid,true);
         amiramesh2.addVertexData(x,grid->leafGridView(),true);