diff --git a/src/amdis/Marker.cpp b/src/amdis/Marker.cpp
index 9584989b291d69a4b5df746e6a655cbd522ed5d3..0c646b49226a7337a2376845e170271bfeb84711 100644
--- a/src/amdis/Marker.cpp
+++ b/src/amdis/Marker.cpp
@@ -9,35 +9,34 @@ namespace AMDiS {
   using std::pow;
 
   template <class Traits>
-  Marker<Traits>* Marker<Traits>::createMarker(std::string name, std::string component, const EstType& est, Grid* grid)
+  std::shared_ptr<Marker<Traits> > Marker<Traits>::createMarker(std::string name, std::string component, const EstType& est, std::shared_ptr<Grid> grid)
   {
     int strategy = 0;
     Parameters::get(name + "->strategy", strategy);
 
-    Marker *marker = NULL;
+    std::shared_ptr<Marker<Traits> > marker;
 
     switch (strategy) {
     case 0:  // no refinement/coarsening
-      marker = NULL;
       break;
     case 1:
-      msg("Creating global refinement (GR) marker\n");
-      marker = new GRMarker<Traits>(name, component, est, grid);
+      msg("Creating global refinement (GR) marker");
+      marker = std::make_shared<GRMarker<Traits> >(name, component, est, grid);
       break;
     case 2:
-      msg("Creating maximum strategy (MS) marker\n");
-      marker = new MSMarker<Traits>(name, component, est, grid);
+      msg("Creating maximum strategy (MS) marker");
+      marker = std::make_shared<MSMarker<Traits> >(name, component, est, grid);
       break;
     case 3:
-      msg("Creating equidistribution strategy (ES) marker\n");
-      marker = new ESMarker<Traits>(name, component, est, grid);
+      msg("Creating equidistribution strategy (ES) marker");
+      marker = std::make_shared<ESMarker<Traits> >(name, component, est, grid);
       break;
     case 4:
-      msg("Creating guaranteed error reduction strategy (GERS) marker\n");
-      marker = new GERSMarker<Traits>(name, component, est, grid);
+      msg("Creating guaranteed error reduction strategy (GERS) marker");
+      marker = std::make_shared<GERSMarker<Traits> >(name, component, est, grid);
       break;
     default:
-      error_exit("invalid strategy\n");
+      error_exit("invalid strategy");
     }
 
     return marker;
@@ -61,8 +60,8 @@ namespace AMDiS {
   template <class Traits>
   void Marker<Traits>::finishMarking(AdaptInfo& adaptInfo)
   {
-    msg(elMarkRefine, " elements marked for refinement\n");
-    msg(elMarkCoarsen, " elements marked for coarsening\n");
+    msg(elMarkRefine, " elements marked for refinement");
+    msg(elMarkCoarsen, " elements marked for coarsening");
   }
 
 
@@ -91,7 +90,8 @@ namespace AMDiS {
   template <class Traits>
   Flag Marker<Traits>::markGrid(AdaptInfo& adaptInfo)
   {
-    test_exit(grid, "No grid!\n");
+    if (!(grid))
+      error_exit("No grid!");
 
     initMarking(adaptInfo);
 
@@ -126,7 +126,7 @@ namespace AMDiS {
     this->markRLimit = MSGammaP * adaptInfo.getEstMax(this->component);
     this->markCLimit = MSGammaCP * adaptInfo.getEstMax(this->component);
 
-    msg("start max_est: ", adaptInfo.getEstMax(this->component), ", mark_limits: ", this->markRLimit, ", " , this->markCLimit, "\n");
+    msg("start max_est: ", adaptInfo.getEstMax(this->component), ", mark_limits: ", this->markRLimit, ", " , this->markCLimit);
   }
 
 
@@ -147,7 +147,7 @@ namespace AMDiS {
     this->markRLimit = ESThetaP * epsP / nLeaves;
     this->markCLimit = ESThetaCP * epsP / nLeaves;
 
-    msg("start mark_limits: ", this->markRLimit, ", " , this->markCLimit, "; nt = ", nLeaves , "\n");
+    msg("start mark_limits: ", this->markRLimit, ", " , this->markCLimit, "; nt = ", nLeaves);
   }
 
 
@@ -173,7 +173,7 @@ namespace AMDiS {
 
       if (redfac < 1.0) {
         LTheta *= redfac;
-        msg("GERS: use extrapolated theta_star = ", pow(LTheta, 1.0 / this->p), "\n");
+        msg("GERS: use extrapolated theta_star = ", pow(LTheta, 1.0 / this->p));
       }
     }
 
@@ -193,7 +193,7 @@ namespace AMDiS {
         } while((GERSGamma > 0) && (GERSSum < LTheta * this->estSum));
       }
 
-      msg("GERS refinement with gamma = ", GERSGamma, "\n");
+      msg("GERS refinement with gamma = ", GERSGamma);
     }
 
     if (this->coarsenAllowed) {
@@ -208,10 +208,10 @@ namespace AMDiS {
         for (const auto& elem : Dune::elements(this->grid->leafGridView()))
           markElementForCoarsening(adaptInfo, elem);
 
-        msg("coarse loop: gamma = ", GERSGamma, ", sum = ", GERSSum, ", limit = ", LTheta, "\n");
+        msg("coarse loop: gamma = ", GERSGamma, ", sum = ", GERSSum, ", limit = ", LTheta);
       } while(GERSSum > LTheta);
 
-      msg("GERS coarsening with gamma = ", GERSGamma, "\n");
+      msg("GERS coarsening with gamma = ", GERSGamma);
     }
 
     Marker<Traits>::finishMarking(adaptInfo);
diff --git a/src/amdis/Marker.hpp b/src/amdis/Marker.hpp
index 4491b06d1f654baa9fc84f153d21e45ffae3d464..96ae49d612afc3c9a6d4d88732743fce0f540da1 100644
--- a/src/amdis/Marker.hpp
+++ b/src/amdis/Marker.hpp
@@ -32,7 +32,7 @@ namespace AMDiS {
     Marker() {}
 
     /// Constructor.
-    Marker(std::string name_, std::string component_, const EstType& est_, Grid* grid_)
+    Marker(std::string name_, std::string component_, const EstType& est_, std::shared_ptr<Grid> grid_)
       : name(name_),
         component(component_),
         grid(grid_),
@@ -116,7 +116,7 @@ namespace AMDiS {
     }
 
     /// Creates a scalar marker depending on the strategy set in parameters.
-    static Marker<Traits>* createMarker(std::string name, std::string component_, const EstType& est_, Grid* grid_);
+    static std::shared_ptr<Marker<Traits> > createMarker(std::string name, std::string component_, const EstType& est_, std::shared_ptr<Grid> grid_);
 
   protected:
     /// Name of the scalar marker.
@@ -126,7 +126,7 @@ namespace AMDiS {
     std::string component;
 
     /// Pointer to the grid
-    Grid* grid;
+    std::shared_ptr<Grid> grid;
 
     /// Pointer to the local error estimates
     EstType est;
@@ -191,7 +191,7 @@ namespace AMDiS {
 
   public:
     /// Constructor.
-    GRMarker(std::string name_, std::string component_, const EstType& est_, Grid* grid_)
+    GRMarker(std::string name_, std::string component_, const EstType& est_, std::shared_ptr<Grid> grid_)
       : Marker<Traits>(name_, component_, est_, grid_)
     {}
 
@@ -223,7 +223,7 @@ namespace AMDiS {
 
   public:
     /// Constructor.
-    MSMarker(std::string name_, std::string component_, const EstType& est_, Grid* grid_)
+    MSMarker(std::string name_, std::string component_, const EstType& est_, std::shared_ptr<Grid> grid_)
       : Marker<Traits>(name_, component_, est_, grid_),
         MSGamma(0.5),
         MSGammaC(0.1)
@@ -263,7 +263,7 @@ namespace AMDiS {
 
   public:
     /// Constructor.
-    ESMarker(std::string name_, std::string component_, const EstType& est_, Grid* grid_)
+    ESMarker(std::string name_, std::string component_, const EstType& est_, std::shared_ptr<Grid> grid_)
       : Marker<Traits>(name_, component_, est_, grid_),
         ESTheta(0.9),
         ESThetaC(0.2)
@@ -303,7 +303,7 @@ namespace AMDiS {
 
   public:
     /// Constructor.
-    GERSMarker(std::string name_, std::string component_, const EstType& est_, Grid* grid_)
+    GERSMarker(std::string name_, std::string component_, const EstType& est_, std::shared_ptr<Grid> grid_)
       : Marker<Traits>(name_, component_, est_, grid_),
         oldErrSum(0.0),
         GERSThetaStar(0.6),
diff --git a/src/amdis/ProblemStat.hpp b/src/amdis/ProblemStat.hpp
index 5665e44786adb248d182328f96ed224ef2aac42c..77c84c0f3c50cb75ea63f18c6c34f49d8ec5728e 100644
--- a/src/amdis/ProblemStat.hpp
+++ b/src/amdis/ProblemStat.hpp
@@ -390,7 +390,7 @@ namespace AMDiS
     std::list<std::shared_ptr<FileWriterInterface>> filewriter_;
 
     /// Pointer to the adaptation markers
-    std::list<Marker<Traits>* > marker;
+    std::list<std::shared_ptr<Marker<Traits> > > marker;
 
     /// Pointer to the estimators for this problem
 //    std::vector<Estimator*> estimator;
diff --git a/src/amdis/ProblemStat.inc.hpp b/src/amdis/ProblemStat.inc.hpp
index 339f5adb9916f9d52b454361522082bf2a8723d8..c40f6d83b0fbd32bb953bd6d9185fe10c93b9a83 100644
--- a/src/amdis/ProblemStat.inc.hpp
+++ b/src/amdis/ProblemStat.inc.hpp
@@ -143,11 +143,12 @@ void ProblemStat<Traits>::createMarker()
 
     int i = std::stoi(to_string(treePath)); // TODO: To be removed
     // replace i with treePath once supported
-    auto marker_ = Marker<Traits>::createMarker(
-      componentName, std::to_string(i), estimates[std::to_string(i)], componentGrids[i]);
-    if (marker_)
-      marker.push_back(marker_);
-
+    auto newMarker = Marker<Traits>::createMarker(
+      componentName, std::to_string(i), estimates[std::to_string(i)], grid);
+    if (newMarker)
+    {
+      marker.push_back(std::move(newMarker));
+    }
     // If there is more than one marker, and all components are defined
     // on the same grid, the maximum marking has to be enabled.
     // TODO: What about two markers each for two grids?
@@ -363,8 +364,8 @@ Flag ProblemStat<Traits>::markElements(AdaptInfo& adaptInfo)
   Dune::Timer t;
 
   Flag markFlag = 0;
-  for (auto marker_ : marker)
-    markFlag |= marker_->markGrid(adaptInfo);
+  for (auto currentMarker : marker)
+    markFlag |= currentMarker->markGrid(adaptInfo);
 
   msg("markElements needed ", t.elapsed(), " seconds");