diff --git a/dune/alugrid/impl/parallel/gitter_pll_mgb.cc b/dune/alugrid/impl/parallel/gitter_pll_mgb.cc
index d33c10cd15bdad80064f2bd71e28cd16e36b333e..fe044d2b1df3e6547b7b99562aeae730d098793d 100644
--- a/dune/alugrid/impl/parallel/gitter_pll_mgb.cc
+++ b/dune/alugrid/impl/parallel/gitter_pll_mgb.cc
@@ -1187,12 +1187,16 @@ namespace ALUGrid
         AccessIterator < hface_STI >::Handle w (containerPll ());
         for (w.first (); ! w.done (); w.next ()) w.item().packAll( osv );
       }
+
+      // check if load balance handle also has user data 
+      GatherScatterType* userData = ( gatherScatter && gatherScatter->hasUserData() ) ? gatherScatter : 0 ;
+
       // pack elements 
       {
         AccessIterator < helement_STI >::Handle w (containerPll ());
-        if( gatherScatter ) 
+        if( userData ) 
         {
-          GatherScatterType& gs = *gatherScatter ;
+          GatherScatterType& gs = *userData ;
           for (w.first (); ! w.done (); w.next ()) w.item().dunePackAll( osv, gs );
         }
         else 
@@ -1212,7 +1216,7 @@ namespace ALUGrid
       
       {
         // data handle  
-        UnpackLBData data( containerPll (), mpa, gatherScatter, db );
+        UnpackLBData data( containerPll (), mpa, userData, db );
 
         // pack, exchange, and unpack data 
         mpa.exchange ( osv, data );
diff --git a/dune/alugrid/impl/serial/gatherscatter.hh b/dune/alugrid/impl/serial/gatherscatter.hh
index 7bbf88329050907f1292ce35f78a92052defaebb..c3c69e97a544798dfd56b6a99ce83145f1b959e7 100644
--- a/dune/alugrid/impl/serial/gatherscatter.hh
+++ b/dune/alugrid/impl/serial/gatherscatter.hh
@@ -45,6 +45,9 @@ namespace ALUGrid
 
     virtual bool contains(int,int) const = 0;
 
+    // returns true if data handle contains user data for redistribution 
+    virtual bool hasUserData () const { return false ; }
+
     virtual bool containsItem(const Gitter::helement_STI &elem ) const { alugrid_assert (false); abort(); return false; }
     virtual bool containsItem(const Gitter::hface_STI   & elem ) const { alugrid_assert (false); abort(); return false; }
     virtual bool containsItem(const Gitter::hedge_STI   & elem ) const { alugrid_assert (false); abort(); return false; }
diff --git a/dune/alugrid/impl/test/sizes.cc b/dune/alugrid/impl/test/sizes.cc
index eea3585459a0089fb9716a86af564f57ad75f20c..cb8daa17c90bdab80c1010e44c6cb6a11c1bda64 100644
--- a/dune/alugrid/impl/test/sizes.cc
+++ b/dune/alugrid/impl/test/sizes.cc
@@ -48,6 +48,8 @@ struct EmptyGatherScatter : public ALUGrid::GatherScatter
     return _rank < (_size-1) ? _rank+1 : 0 ;
   }
 
+  bool hasUserData () const { return true; }
+
   bool contains ( int, int ) const { return true ;} 
 
   virtual void inlineData ( ObjectStreamType & str , HElemType & elem, const int ) {}