diff --git a/src/duneinterface/gitter_dune_pll_impl.cc b/src/duneinterface/gitter_dune_pll_impl.cc
index f7dd194578779a0237b3034cfbca188a40487e16..6c0c849eb5e0699dd3a8b2578905719398d3abe0 100644
--- a/src/duneinterface/gitter_dune_pll_impl.cc
+++ b/src/duneinterface/gitter_dune_pll_impl.cc
@@ -31,7 +31,7 @@ bool GitterDunePll :: duneNotifyNewGrid ()
   }
   {
     AccessIterator < helement_STI > :: Handle w (containerPll ()) ;
-    for (w.first () ; ! w.done () ; w.next ()) w.item ().accessPllX ().ldbUpdateGraphVertex (db) ;
+    for (w.first () ; ! w.done () ; w.next ()) w.item ().ldbUpdateGraphVertex (db) ;
   }
   bool neu = false ;
   {
@@ -119,7 +119,7 @@ bool GitterDunePll :: duneLoadBalance (GatherScatterType & gs, AdaptRestrictProl
   }
   {
     AccessIterator < helement_STI > :: Handle w (containerPll ()) ;
-    for (w.first () ; ! w.done () ; w.next ()) w.item ().accessPllX ().ldbUpdateGraphVertex (db) ;
+    for (w.first () ; ! w.done () ; w.next ()) w.item ().ldbUpdateGraphVertex (db) ;
   }
   bool neu = false ;
   {
diff --git a/src/duneinterface/gitter_dune_pll_mgb.cc b/src/duneinterface/gitter_dune_pll_mgb.cc
index 2c745bd7adda8a177fcf73489f72c43253d897aa..5c4125ba8ee8b64bf07c30224fdef82c68de98ec 100644
--- a/src/duneinterface/gitter_dune_pll_mgb.cc
+++ b/src/duneinterface/gitter_dune_pll_mgb.cc
@@ -519,7 +519,7 @@ void DuneParallelGridMover :: initialize ()
     const elementMap_t :: iterator _hexaMapend = _hexaMap.end ();
     for (elementMap_t :: iterator i = _hexaMap.begin () ; i != _hexaMapend ; ++i)
     {
-      if (Gitter :: InternalElement ()(*((hexa_GEO *)(*i).second)).accessPllX ().erasable ()) 
+      if (Gitter :: InternalElement ()(*((hexa_GEO *)(*i).second)).erasable ()) 
       {
         toDelete.push_back ((*i).first) ;
       }
@@ -529,7 +529,7 @@ void DuneParallelGridMover :: initialize ()
     const elementMap_t :: iterator _tetraMapend = _tetraMap.end ();
     for (elementMap_t :: iterator i = _tetraMap.begin () ; i != _tetraMapend ; ++i)
     {
-      if (Gitter :: InternalElement ()(*((tetra_GEO *)(*i).second)).accessPllX ().erasable ()) 
+      if (Gitter :: InternalElement ()(*((tetra_GEO *)(*i).second)).erasable ()) 
       {
         toDelete.push_back ((*i).first) ;
       }
@@ -539,7 +539,7 @@ void DuneParallelGridMover :: initialize ()
     const elementMap_t :: iterator _periodic3Mapend = _periodic3Map.end ();
     for (elementMap_t :: iterator i = _periodic3Map.begin () ; i != _periodic3Mapend ; ++i)
     {
-      if (Gitter :: InternalElement ()(*((periodic3_GEO *)(*i).second)).accessPllX ().erasable ()) 
+      if (Gitter :: InternalElement ()(*((periodic3_GEO *)(*i).second)).erasable ()) 
       {
         toDelete.push_back ((*i).first) ;
       }
@@ -549,7 +549,7 @@ void DuneParallelGridMover :: initialize ()
     const elementMap_t :: iterator _periodic4Mapend = _periodic4Map.end ();
     for (elementMap_t :: iterator i = _periodic4Map.begin () ; i != _periodic4Mapend ; ++i)
     {
-      if (Gitter :: InternalElement ()(*((periodic4_GEO *)(*i).second)).accessPllX ().erasable ()) 
+      if (Gitter :: InternalElement ()(*((periodic4_GEO *)(*i).second)).erasable ()) 
       {
         toDelete.push_back ((*i).first) ;
       }
@@ -756,9 +756,9 @@ void GitterDunePll :: repartitionMacroGrid (LoadBalancer :: DataBase & db)
     {
       AccessIterator < helement_STI > :: Handle w (containerPll ()) ;
       for (w.first () ; ! w.done () ; w.next ()) {
-      int to = db.getDestination (w.item ().accessPllX ().ldbVertexIndex ()) ;
+      int to = db.getDestination (w.item ().ldbVertexIndex ()) ;
         if (me != to)
-          w.item ().accessPllX ().attach2 (mpAccess ().link (to)) ;
+          w.item ().attach2 (mpAccess ().link (to)) ;
       }
     }
     lap1 = clock () ;
@@ -781,7 +781,7 @@ void GitterDunePll :: repartitionMacroGrid (LoadBalancer :: DataBase & db)
     }
     {
       AccessIterator < helement_STI > :: Handle w (containerPll ()) ;
-      for (w.first () ; ! w.done () ; w.next ()) w.item ().accessPllX ().packAll (osv) ;
+      for (w.first () ; ! w.done () ; w.next ()) w.item ().packAll (osv) ;
     }
     {
       for (vector < ObjectStream > :: iterator i = osv.begin () ; i != osv.end () ; 
@@ -828,10 +828,10 @@ duneRepartitionMacroGrid (LoadBalancer :: DataBase & db, GatherScatterType & gs)
       AccessIterator < helement > :: Handle w (containerPll ()) ;
       for (w.first () ; ! w.done () ; w.next ()) 
       {
-        int to = db.getDestination (w.item ().accessPllX ().ldbVertexIndex ()) ;
+        int to = db.getDestination (w.item ().ldbVertexIndex ()) ;
         if (me != to)
         {
-          w.item ().accessPllX ().attach2 (mpAccess ().link (to)) ;
+          w.item ().attach2 (mpAccess ().link (to)) ;
         }
       }
     }
@@ -860,7 +860,7 @@ duneRepartitionMacroGrid (LoadBalancer :: DataBase & db, GatherScatterType & gs)
       AccessIterator < helement_STI > :: Handle w (containerPll ()) ;
       for (w.first () ; ! w.done () ; w.next ()) 
       {
-        w.item ().accessPllX ().dunePackAll (osv,gs) ;
+        w.item ().dunePackAll (osv,gs) ;
       }
     }
     
diff --git a/src/parallel/gitter_pll_impl.h b/src/parallel/gitter_pll_impl.h
index e06112e1a1af08c19d2d8e45118562744eba2cf1..aa0fe17f7ae988e31f2bd024010101f71ff15221 100644
--- a/src/parallel/gitter_pll_impl.h
+++ b/src/parallel/gitter_pll_impl.h
@@ -652,6 +652,8 @@ public :
       inline TetraEmptyPll (myhface3_t *f0, int s0, myhface3_t *f1, int s1, 
                             myhface3_t *f2, int s2, myhface3_t *f3, int s3) 
         : TetraPllXBase< TetraEmpty >(f0, s0, f1, s1, f2, s2, f3, s3 ) {}
+      virtual ElementPllXIF & accessPllX () throw (Parallel :: AccessPllException) { return *this; }
+      virtual const ElementPllXIF & accessPllX () const throw (Parallel :: AccessPllException) { return *this; }
     } ;
     typedef TetraTop < TetraEmptyPll > tetra_IMPL ;
 
@@ -661,6 +663,8 @@ public :
       inline TetraEmptyPllMacro (myhface3_t *f0, int s0, myhface3_t *f1, int s1, 
                                  myhface3_t *f2, int s2, myhface3_t *f3, int s3) 
         : TetraPllXBaseMacro< tetra_IMPL >(0, f0, s0, f1, s1, f2, s2, f3, s3 ) {} // 0 == level 0
+      virtual ElementPllXIF & accessPllX () throw (Parallel :: AccessPllException) { return *this; }
+      virtual const ElementPllXIF & accessPllX () const throw (Parallel :: AccessPllException) { return *this; }
     } ;
 
    /////////////////////////////////
@@ -752,6 +756,8 @@ public :
                            myhface4_t *f2, int s2, myhface4_t *f3, int s3,
                            myhface4_t *f4, int s4, myhface4_t *f5, int s5)
         : HexaPllBaseX< HexaEmpty >(f0, s0, f1, s1, f2, s2, f3, s3, f4, s4, f5, s5) {}
+      virtual ElementPllXIF & accessPllX () throw (Parallel :: AccessPllException) { return *this; }
+      virtual const ElementPllXIF & accessPllX () const throw (Parallel :: AccessPllException) { return *this; }
     } ;
     typedef HexaTop < HexaEmptyPll > hexa_IMPL ;
 
@@ -762,6 +768,8 @@ public :
                                myhface4_t *f2, int s2, myhface4_t *f3, int s3,
                                myhface4_t *f4, int s4, myhface4_t *f5, int s5)
         : HexaPllBaseXMacro< hexa_IMPL >(0, f0, s0, f1, s1, f2, s2, f3, s3, f4, s4, f5, s5) {}
+      virtual ElementPllXIF & accessPllX () throw (Parallel :: AccessPllException) { return *this; }
+      virtual const ElementPllXIF & accessPllX () const throw (Parallel :: AccessPllException) { return *this; }
     } ;
   
     // Die Randelemente des verteilten Gitters werden aus Templates 
@@ -1026,8 +1034,11 @@ template < class A > pair < const ElementPllXIF_t *, int > FacePllBaseX < A > ::
 
 template < class A > pair < ElementPllXIF_t *, int > FacePllBaseX < A > :: accessInnerPllX () {
 
-  assert(myhface ().nb.front().first );
-  assert(myhface ().nb.rear ().first );
+  assert( myhface ().nb.front().first );
+  assert( myhface ().nb.rear ().first );
+  cout << myhface ().nb.front().first->isboundary() << endl; 
+  cout << myhface ().nb.rear ().first->isboundary() << endl; 
+  ElementPllXIF_t * p = & myhface ().nb.rear ().first->accessPllX ();
   return myhface ().nb.front ().
     first->accessPllX ().accessInnerPllX (
         pair < ElementPllXIF_t *, int > (& myhface ().nb.rear ().first->accessPllX (), 
diff --git a/src/parallel/gitter_pll_mgb.cc b/src/parallel/gitter_pll_mgb.cc
index 677d0faa83cef168314d7b8200efbdbb688e004f..e5794196ebad76b1842a0e8c93c56452eb7a1c37 100644
--- a/src/parallel/gitter_pll_mgb.cc
+++ b/src/parallel/gitter_pll_mgb.cc
@@ -23,23 +23,23 @@ void ParallelGridMover ::initialize ()
   assert(_initialized);
   vector < elementKey_t > toDelete ;
   {for (elementMap_t :: iterator i = _hexaMap.begin () ; i != _hexaMap.end () ; i ++)
-    if (Gitter :: InternalElement ()(*((hexa_GEO *)(*i).second)).accessPllX ().erasable ()) {
+    if (Gitter :: InternalElement ()(*((hexa_GEO *)(*i).second)).erasable ()) {
       toDelete.push_back ((*i).first) ;
     } 
   }
   {for (elementMap_t :: iterator i = _tetraMap.begin () ; i != _tetraMap.end () ; i ++)
-    if (Gitter :: InternalElement ()(*((tetra_GEO *)(*i).second)).accessPllX ().erasable ()) {
+    if (Gitter :: InternalElement ()(*((tetra_GEO *)(*i).second)).erasable ()) {
       toDelete.push_back ((*i).first) ;
     }
   }
   {for (elementMap_t :: iterator i = _periodic3Map.begin () ; i != _periodic3Map.end () ; i ++)
-    if (Gitter :: InternalElement ()(*((periodic3_GEO *)(*i).second)).accessPllX ().erasable ()) {
+    if (Gitter :: InternalElement ()(*((periodic3_GEO *)(*i).second)).erasable ()) {
       toDelete.push_back ((*i).first) ;
     }
   }
 
   {for (elementMap_t :: iterator i = _periodic4Map.begin () ; i != _periodic4Map.end () ; i ++)
-    if (Gitter :: InternalElement ()(*((periodic4_GEO *)(*i).second)).accessPllX ().erasable ()) {
+    if (Gitter :: InternalElement ()(*((periodic4_GEO *)(*i).second)).erasable ()) {
       toDelete.push_back ((*i).first) ;
     }
   }
@@ -314,9 +314,9 @@ void GitterPll :: repartitionMacroGrid (LoadBalancer :: DataBase & db) {
     {
       AccessIterator < helement > :: Handle w (containerPll ()) ;
       for (w.first () ; ! w.done () ; w.next ()) {
-      int to = db.getDestination (w.item ().accessPllX ().ldbVertexIndex ()) ;
+      int to = db.getDestination (w.item ().ldbVertexIndex ()) ;
         if (me != to)
-          w.item ().accessPllX ().attach2 (mpAccess ().link (to)) ;
+          w.item ().attach2 (mpAccess ().link (to)) ;
       }
     }
     lap1 = clock () ;
@@ -335,7 +335,7 @@ void GitterPll :: repartitionMacroGrid (LoadBalancer :: DataBase & db) {
     }
     {
       AccessIterator < helement_STI > :: Handle w (containerPll ()) ;
-      for (w.first () ; ! w.done () ; w.next ()) w.item ().accessPllX ().packAll (osv) ;
+      for (w.first () ; ! w.done () ; w.next ()) w.item ().packAll (osv) ;
     }
     {
       for (vector < ObjectStream > :: iterator i = osv.begin () ; i != osv.end () ; 
diff --git a/src/parallel/gitter_pll_sti.cc b/src/parallel/gitter_pll_sti.cc
index cfd83169defe6f504a2ec3fbe5bdf5db6938abfc..4402e54aec4c8659be5bf4048f8225990a99f422 100644
--- a/src/parallel/gitter_pll_sti.cc
+++ b/src/parallel/gitter_pll_sti.cc
@@ -843,7 +843,7 @@ void GitterPll :: loadBalancerGridChangesNotify () {
   }
   {
     AccessIterator < helement_STI > :: Handle w (containerPll ()) ;
-    for (w.first () ; ! w.done () ; w.next ()) w.item ().accessPllX ().ldbUpdateGraphVertex (db) ;
+    for (w.first () ; ! w.done () ; w.next ()) w.item ().ldbUpdateGraphVertex (db) ;
   }
   bool neu = false ;
   {
@@ -881,7 +881,7 @@ void GitterPll :: loadBalancerMacroGridChangesNotify () {
   AccessIterator < helement_STI > :: Handle w (containerPll ()) ;
   vector < int > sizes = mpAccess ().gcollect (w.size ()) ;
   for (int i = 0 ; i < mpAccess ().myrank () ; cnt += sizes [i++]) ;
-  for (w.first () ; ! w.done () ; w.next ()) w.item ().accessPllX ().ldbVertexIndex () = cnt ++ ;
+  for (w.first () ; ! w.done () ; w.next ()) w.item ().ldbVertexIndex () = cnt ++ ;
   return ;
 }
 
diff --git a/src/serial/elementif.h b/src/serial/elementif.h
index cf0de2a8a6a793fb574d81b148e4d908a6301985..c70ed4dc5f5a9974dd40e38be930dc7b0d6b553f 100644
--- a/src/serial/elementif.h
+++ b/src/serial/elementif.h
@@ -97,104 +97,7 @@ class ElementPllXIF : public MacroGridMoverDefault
     virtual bool unlockAndResume (bool) = 0 ;
 } ;
 */
-
-// type of ElementPllXIF_t is ElementPllXIF, see parallel.h
-class ElementPllXIF : public MacroGridMoverDefault 
-{
-  protected :
-    virtual ~ElementPllXIF () {}
-  public :
-    virtual pair < ElementPllXIF *, int > accessOuterPllX (const pair < ElementPllXIF *, int > &, int) 
-    { assert( false ); abort(); return pair< ElementPllXIF *, int > ( (ElementPllXIF *) 0, -1); }
-    virtual pair < const ElementPllXIF *, int > accessOuterPllX (const pair < const ElementPllXIF *, int > &, int) const
-    { assert( false ); abort(); return pair< ElementPllXIF *, int > ( (ElementPllXIF *) 0, -1); }
-    virtual pair < ElementPllXIF *, int > accessInnerPllX (const pair < ElementPllXIF *, int > &, int) 
-    { assert( false ); abort(); return pair< ElementPllXIF *, int > ( (ElementPllXIF *) 0, -1); }
-    virtual pair < const ElementPllXIF *, int > accessInnerPllX (const pair < const ElementPllXIF *, int > &, int) const
-    { assert( false ); abort(); return pair< ElementPllXIF *, int > ( (ElementPllXIF *) 0, -1); }
-  public :
-    typedef pair<helement*, int> ghostpair_t ;
-    virtual ghostpair_t getGhost () 
-    { 
-      cerr << "ERROR: method getGhost of Interface class should not be used! in: " << __FILE__ << " line: " <<__LINE__<<"\n";
-      abort(); 
-      return ghostpair_t( (helement*)0 , -1); 
-    }
-
-    virtual int ghostLevel () const
-    { 
-      cerr << "ERROR: method ghostLevel of Interface class should not be used! in: " << __FILE__ << " line: " <<__LINE__<<"\n";
-      abort(); 
-      return 0; 
-    }
-
-    virtual bool ghostLeaf () const
-    { 
-      cerr << "ERROR: method ghostLeaf of Interface class should not be used! in: " << __FILE__ << " line: " <<__LINE__<<"\n";
-      abort(); 
-      return 0; 
-    }
-
-    virtual void getAttachedElement ( pair < helement* , hbndseg * > & p)
-    {
-      cerr << "Overload method in the classes file:" << __FILE__ << " line:" << __LINE__ << "\n";
-      abort();
-      p.first  = 0;
-      p.second = 0;
-    }
-
-    virtual void writeStaticState (ObjectStream &, int) const 
-    { assert(false);abort(); }
-    virtual void readStaticState (ObjectStream &, int)
-    { assert(false);abort(); }
-    virtual void writeDynamicState (ObjectStream &, int) const
-    { assert(false);abort(); }
-    virtual void readDynamicState (ObjectStream &, int)
-    { assert(false);abort(); }
-
-    virtual void VertexData2os(ObjectStream &, GatherScatterType &, int) 
-    { assert(false);abort(); }
-    virtual void EdgeData2os  (ObjectStream &, GatherScatterType &, int)
-    { assert(false);abort(); }
-    virtual void FaceData2os  (ObjectStream &, GatherScatterType &, int)
-    { assert(false);abort(); }
-    virtual void writeElementData (ObjectStream &, GatherScatterType &)
-    { assert(false);abort(); }
-    virtual void writeDynamicState(ObjectStream &, GatherScatterType &) const
-    { assert(false);abort(); }
-    virtual void readDynamicState (ObjectStream &, GatherScatterType &)
-    { assert(false);abort(); }
-
-    // pack as ghost, default does nothing but macro elements are pack as
-    // ghosts 
-    virtual void packAsGhost(ObjectStream &,int) const {}
-
-    // unpack as ghost data and insert ghost cell, default does nothing
-    virtual void insertGhostCell(ObjectStream &,int) {}
-    
-  public :
-    virtual int ldbVertexIndex () const
-    { assert(false);abort(); return -1;  }
-    virtual int & ldbVertexIndex ()
-    { assert(false);abort(); return *(new int ());  }
-    virtual bool ldbUpdateGraphVertex (LoadBalancer :: DataBase &)
-    { assert(false);abort(); return false;  }
-  public :
-    virtual void packAsBnd (int,int,ObjectStream &) const
-    { assert(false);abort(); }
-    virtual bool erasable () const
-    { assert(false);abort(); return false;  }
-  public :
-    virtual void getRefinementRequest (ObjectStream &)
-    { assert(false);abort(); }
-    virtual bool setRefinementRequest (ObjectStream &)
-    { assert(false);abort(); return false;  }
-  public :
-    virtual bool lockAndTry ()
-    { assert(false);abort(); return false;  }
-    virtual bool unlockAndResume (bool)
-    { assert(false);abort(); return false;  }
-} ;
+class ElementPllXIF ;
 
 class FacePllXIF : public LinkedObjectDefault //, public MacroGridMoverIF
 {
@@ -316,12 +219,120 @@ class Parallel {
         inline const FacePllXIF & accessPllX () const { return *this; }
         inline void detachPllXFromMacro () {}
     } ;
-    class ElementIF : public ElementPllXIF {
+    class ElementIF {
       public :
         virtual ~ElementIF () {}
-        inline ElementPllXIF & accessPllX () { return *this; }
-        inline const ElementPllXIF & accessPllX () const { return *this; }
-        inline virtual void detachPllXFromMacro () {}
+        inline virtual ElementPllXIF & accessPllX () throw (AccessPllException)
+        {
+          assert ((abort (), (cerr << "  FEHLER in " << __FILE__ << " " << __LINE__ << endl))) ;
+          throw AccessPllException () ;
+        }
+        inline virtual const ElementPllXIF & accessPllX () const throw (AccessPllException) 
+        {
+          assert ((abort (), (cerr << "  FEHLER in " << __FILE__ << " " << __LINE__ << endl))) ;
+          throw AccessPllException () ;
+        }
+        inline virtual void detachPllXFromMacro () {} 
     } ;
 } ;
+
+// type of ElementPllXIF_t is ElementPllXIF, see parallel.h
+class ElementPllXIF : public MacroGridMoverDefault 
+{
+  protected :
+    virtual ~ElementPllXIF () {}
+  public :
+    virtual void detachPllXFromMacro () {} 
+    virtual pair < ElementPllXIF *, int > accessOuterPllX (const pair < ElementPllXIF *, int > &, int) 
+    { assert( false ); abort(); return pair< ElementPllXIF *, int > ( (ElementPllXIF *) 0, -1); }
+    virtual pair < const ElementPllXIF *, int > accessOuterPllX (const pair < const ElementPllXIF *, int > &, int) const
+    { assert( false ); abort(); return pair< ElementPllXIF *, int > ( (ElementPllXIF *) 0, -1); }
+    virtual pair < ElementPllXIF *, int > accessInnerPllX (const pair < ElementPllXIF *, int > &, int) 
+    { assert( false ); abort(); return pair< ElementPllXIF *, int > ( (ElementPllXIF *) 0, -1); }
+    virtual pair < const ElementPllXIF *, int > accessInnerPllX (const pair < const ElementPllXIF *, int > &, int) const
+    { assert( false ); abort(); return pair< ElementPllXIF *, int > ( (ElementPllXIF *) 0, -1); }
+  public :
+    typedef pair<helement*, int> ghostpair_t ;
+    virtual ghostpair_t getGhost () 
+    { 
+      cerr << "ERROR: method getGhost of Interface class should not be used! in: " << __FILE__ << " line: " <<__LINE__<<"\n";
+      abort(); 
+      return ghostpair_t( (helement*)0 , -1); 
+    }
+
+    virtual int ghostLevel () const
+    { 
+      cerr << "ERROR: method ghostLevel of Interface class should not be used! in: " << __FILE__ << " line: " <<__LINE__<<"\n";
+      abort(); 
+      return 0; 
+    }
+
+    virtual bool ghostLeaf () const
+    { 
+      cerr << "ERROR: method ghostLeaf of Interface class should not be used! in: " << __FILE__ << " line: " <<__LINE__<<"\n";
+      abort(); 
+      return 0; 
+    }
+
+    virtual void getAttachedElement ( pair < helement* , hbndseg * > & p)
+    {
+      cerr << "Overload method in the classes file:" << __FILE__ << " line:" << __LINE__ << "\n";
+      abort();
+      p.first  = 0;
+      p.second = 0;
+    }
+
+    virtual void writeStaticState (ObjectStream &, int) const 
+    { assert(false);abort(); }
+    virtual void readStaticState (ObjectStream &, int)
+    { assert(false);abort(); }
+    virtual void writeDynamicState (ObjectStream &, int) const
+    { assert(false);abort(); }
+    virtual void readDynamicState (ObjectStream &, int)
+    { assert(false);abort(); }
+
+    virtual void VertexData2os(ObjectStream &, GatherScatterType &, int) 
+    { assert(false);abort(); }
+    virtual void EdgeData2os  (ObjectStream &, GatherScatterType &, int)
+    { assert(false);abort(); }
+    virtual void FaceData2os  (ObjectStream &, GatherScatterType &, int)
+    { assert(false);abort(); }
+    virtual void writeElementData (ObjectStream &, GatherScatterType &)
+    { assert(false);abort(); }
+    virtual void writeDynamicState(ObjectStream &, GatherScatterType &) const
+    { assert(false);abort(); }
+    virtual void readDynamicState (ObjectStream &, GatherScatterType &)
+    { assert(false);abort(); }
+
+    // pack as ghost, default does nothing but macro elements are pack as
+    // ghosts 
+    virtual void packAsGhost(ObjectStream &,int) const {}
+
+    // unpack as ghost data and insert ghost cell, default does nothing
+    virtual void insertGhostCell(ObjectStream &,int) {}
+    
+  public :
+    virtual int ldbVertexIndex () const
+    { assert(false);abort(); return -1;  }
+    virtual int & ldbVertexIndex ()
+    { assert(false);abort(); return *(new int ());  }
+    virtual bool ldbUpdateGraphVertex (LoadBalancer :: DataBase &)
+    { assert(false);abort(); return false;  }
+  public :
+    virtual void packAsBnd (int,int,ObjectStream &) const
+    { assert(false);abort(); }
+    virtual bool erasable () const
+    { assert(false);abort(); return false;  }
+  public :
+    virtual void getRefinementRequest (ObjectStream &)
+    { assert(false);abort(); }
+    virtual bool setRefinementRequest (ObjectStream &)
+    { assert(false);abort(); return false;  }
+  public :
+    virtual bool lockAndTry ()
+    { assert(false);abort(); return false;  }
+    virtual bool unlockAndResume (bool)
+    { assert(false);abort(); return false;  }
+} ;
+
 #endif
diff --git a/src/serial/gitter_sti.h b/src/serial/gitter_sti.h
index b3de604ddfb4d5843421da29e871d0b2105406e7..b6a28afcbe60507b36ba2b0cadaa473ff12378d2 100644
--- a/src/serial/gitter_sti.h
+++ b/src/serial/gitter_sti.h
@@ -562,7 +562,8 @@ public :
   };
   typedef AdaptRestrictProlong AdaptRestrictProlongType;
 
-  class helement : public virtual stiExtender_t :: ElementIF 
+  // --helement 
+  class helement : public ElementPllXIF
                  , public Dune_helement 
   {
   protected :
@@ -1242,6 +1243,7 @@ public :
   
     typedef class Tetra : public helement_STI, public hasFace3, public MyAlloc {
     protected :
+
       typedef VertexGeo  myvertex_t ;
       typedef hedge1_GEO myhedge1_t ;
       typedef hface3_GEO myhface3_t ;
@@ -1251,6 +1253,7 @@ public :
       inline int postRefinement () ;
       inline int preCoarsening () ;
     public :
+      using hasFace3     :: accessPllX ;
       static const int prototype [4][3] ;
       static const int edgeMap [6][2] ;
 
@@ -1330,6 +1333,7 @@ public :
       inline int postRefinement () ;
       inline int preCoarsening () ;
     public :
+      using hasFace3     :: accessPllX ;
       static const int prototype [2][3] ;
       inline virtual ~Periodic3 () ;
       inline hface3_GEO * myhface3 (int) ;
@@ -1384,6 +1388,7 @@ public :
       inline int postRefinement () ;
       inline int preCoarsening () ;
     public :
+      using hasFace4     :: accessPllX ;
       static const int prototype [2][4] ;
       inline virtual ~Periodic4 () ;
       inline hface4_GEO * myhface4 (int) ;
@@ -1444,6 +1449,7 @@ public :
       inline int preCoarsening () ;
 
     public :
+      using hasFace4     :: accessPllX ;
       static const int prototype [6][4] ;
       static const int oppositeFace [6] ;
       static const int edgeMap [12][2];
@@ -1556,10 +1562,6 @@ public :
       // unmark edges and vertices as leaf 
       virtual void detachleafs() ;
 
-      // import both getGhost methods 
-      using hbndseg_STI :: getGhost ; 
-      using hasFace3 :: getGhost ;
-
     protected :
       // no projection for ghost faces 
       const ProjectVertex* projection() const { return ( this->isGhost() ) ? 0 : _face->myvertex(0)->myGrid()->vertexProjection(); }
@@ -1604,10 +1606,6 @@ public :
       
       virtual void detachleafs() ;
 
-      // import both getGhost methods 
-      using hbndseg_STI :: getGhost ; 
-      using hasFace4 :: getGhost ;
-
     protected :
       // no projection for ghost faces 
       const ProjectVertex* projection() const { return ( this->isGhost() ) ? 0 : _face->myvertex(0)->myGrid()->vertexProjection(); }