diff --git a/grid/albertagrid/agrid.hh b/grid/albertagrid/agrid.hh
index 8edaf43db25901e558f7b3a9c15cf4093630afde..a1bda331a3540a97153a9f0cee6758d2016f4e52 100644
--- a/grid/albertagrid/agrid.hh
+++ b/grid/albertagrid/agrid.hh
@@ -49,7 +49,7 @@
 #include "albertaheader.hh"
 
 // grape data io
-#include <dune/io/file/grapedataio.hh>
+#include <dune/grid/utility/grapedataioformattypes.hh>
 
 // IndexManager defined in indexstack.hh
 // 10000 is the size of the finite stack used by IndexStack
diff --git a/grid/albertagrid/albertaextra.hh b/grid/albertagrid/albertaextra.hh
index 9b4b64da87977c6228890b72b80409de27659a6e..b7393395cfbce88e5a587dc771eb6f5b1a580cb8 100644
--- a/grid/albertagrid/albertaextra.hh
+++ b/grid/albertagrid/albertaextra.hh
@@ -105,7 +105,7 @@ public:
   {
     stack_ = 0;
     refCount_ = 0;
-    if(copy.stack_ != 0)
+    if(copy.stackExists())
     {
       stack_ = copy.stack_;
       refCount_ = copy.refCount_;
@@ -119,6 +119,9 @@ public:
   //! get_traverse_stack, which get an new or free stack
   void create ()
   {
+    // remove existing stack, does nothing if no stack exists
+    remove();
+
     assert( stack_ == 0 );
     assert( refCount_ ==  0 );
     stack_ = getTraverseStack();
@@ -129,24 +132,12 @@ public:
   //! set Stack free, if no more refences exist
   ~ManageTravStack()
   {
-    if(refCount_ && stack_)
-    {
-      (*refCount_)--;
-      if((*refCount_) <= 0)
-      {
-        // in free_traverse_stack stack != 0 is checked
-        if(stack_)
-        {
-          stack_ = freeTraverseStack(stack_);
-          owner_ = false;
-        }
-        if(refCount_)
-        {
-          delete refCount_;
-          refCount_ = 0;
-        }
-      }
-    }
+    remove();
+  }
+
+  bool stackExists() const
+  {
+    return stack_ != 0;
   }
 
   //! return the TRAVERSE_STACK pointer for use
@@ -163,18 +154,43 @@ private:
   //! if copy is made than one more Reference exists
   ManageTravStack & operator = (const ManageTravStack & copy)
   {
+    remove();
     // do not use this method
     if(copy.stack_ != 0)
     {
       stack_ = copy.stack_;
       refCount_ = copy.refCount_;
-      (*refCount_)++;
+      ++(*refCount_);
       copy.owner_ = false;
       owner_ = true;
     }
     assert(false);
     return (*this);
   }
+
+  void remove()
+  {
+    if(refCount_ && stack_)
+    {
+      (*refCount_)--;
+      if((*refCount_) <= 0)
+      {
+        // in free_traverse_stack stack != 0 is checked
+        if(stack_)
+        {
+          stack_ = freeTraverseStack(stack_);
+          owner_ = false;
+        }
+        if(refCount_)
+        {
+          delete refCount_;
+          refCount_ = 0;
+        }
+      }
+    }
+    stack_ = 0;
+    refCount_ = 0;
+  }
 };
 
 
diff --git a/grid/albertagrid/albertagrid.cc b/grid/albertagrid/albertagrid.cc
index f809b2d702cb9bd45ecbd2aedb06b4b1abebf5c3..8e9ba3e4755d6fe81ed4cb4de3034ca43e2c37ab 100644
--- a/grid/albertagrid/albertagrid.cc
+++ b/grid/albertagrid/albertagrid.cc
@@ -1651,9 +1651,18 @@ namespace Dune
   operator = (const AlbertaGridHierarchicIterator<GridImp> & org)
   {
     const_cast<int &> (startLevel_) = org.startLevel_;
-    level_ = ( org.level_ );
-    maxlevel_ = ( org.maxlevel_ );
-    manageStack_ = ( org.manageStack_ );
+    level_    = org.level_;
+    maxlevel_ = org.maxlevel_;
+
+    if(org.manageStack_.stackExists())
+    {
+      // full copy of stack
+      manageStack_.create();
+      ALBERTA TRAVERSE_STACK * stack = manageStack_.getStack();
+      const ALBERTA TRAVERSE_STACK * orgStack = org.manageStack_.getStack();
+      ALBERTA copyTraverseStack( stack , orgStack );
+    }
+
     if( org.virtualEntity_.getElInfo() )
       virtualEntity_.setEntity( org.virtualEntity_ );
     else
@@ -3557,9 +3566,7 @@ namespace Dune
     }
     else
     {
-      double time = 0.0;
-      GrapeDataIO < AlbertaGrid <dim,dimworld> > dataIO;
-      dataIO.readGrid ( *this, MacroTriangFilename,time,0);
+      DUNE_THROW(NotImplemented,"Constructor reading backup file not implemented!");
     }
     std::cout << "AlbertaGrid<"<<dim<<","<<dimworld<<"> created from macro grid file '" << macroTriangFilename << "'. \n\n";
   }