diff --git a/src/alugrid_serial.h b/src/alugrid_serial.h
index 3c6f0a868c75b51e16fffb91a161a5a915c74e53..54b47e1bb89dd615eff22bfcff04f7d3a53d8803 100644
--- a/src/alugrid_serial.h
+++ b/src/alugrid_serial.h
@@ -30,6 +30,7 @@ typedef Gitter::hbndseg       HGhostType;
 
 struct GatherScatter
 {
+  virtual ~GatherScatter () {}
   virtual void inlineData ( ObjectStream & str , HElemType & elem ) = 0;
   virtual void xtractData ( ObjectStream & str , HElemType & elem ) = 0;
   virtual void sendData ( ObjectStream & str , const HElemType  & elem ) = 0;
diff --git a/src/parallel/gitter_pll_sti.h b/src/parallel/gitter_pll_sti.h
index 317486e61ca8009335c6c9ee5245259dbf1437ae..99e62d046508d4fb96d4146e80574029ebf6bd0e 100644
--- a/src/parallel/gitter_pll_sti.h
+++ b/src/parallel/gitter_pll_sti.h
@@ -149,6 +149,7 @@ class LinkedObject {
   inline bool isValid () const ;
     } ;
   public :
+    virtual ~LinkedObject () {}
     virtual Identifier getIdentifier () const = 0 ;
     virtual vector < int > estimateLinkage () const = 0 ;
 } ;
diff --git a/src/serial/gitter_hexa_top.h b/src/serial/gitter_hexa_top.h
index 89046ea39c882f62bbd6997ebb4377f35621b971..4c7f592152ee1f4f76bfe6cefb92ef053c1791fb 100644
--- a/src/serial/gitter_hexa_top.h
+++ b/src/serial/gitter_hexa_top.h
@@ -751,7 +751,7 @@ template < class A > bool Hface4Top < A > :: coarse () {
       f->coarse () ;
       x = false ;
     }
-  } while (f = f->next()) ;
+  } while ( (f = f->next()) ) ;
   if (x) {
     
 	// Hier wird tats"achlich vergr"obert, d.h. alle Kinder 
@@ -880,7 +880,7 @@ template < class A > bool Hbnd4Top < A > :: coarse () {
   bool x = true ;
   do {
     if(b->myhface4(0)->ref > 1) (b->coarse (), x = false) ;
-  } while (b = b->next()) ;
+  } while ( (b = b->next()) ) ;
   if (x) {
     if (! this->lockedAgainstCoarsening ()) {
       this->preCoarsening () ;
@@ -1766,7 +1766,7 @@ template < class A > bool Periodic4Top < A > :: bndNotifyCoarsen () {
     if (p->myhface4 (0)->ref > 1) (x = false) ;
     if (p->myhface4 (1)->ref > 1) (x = false) ;
 
-  } while (p = p->next ()) ;
+  } while ( (p = p->next ()) ) ;
   if (x) {
   
 	// Falls keine Fl"achen anliegen, die auf Kinder oder Kindes- 
diff --git a/src/serial/gitter_sti.h b/src/serial/gitter_sti.h
index 1276f1e9234b29108e45269aebf767ab8897eecd..684420863aba52f8ad9ed425d6fbe0bf216de25c 100644
--- a/src/serial/gitter_sti.h
+++ b/src/serial/gitter_sti.h
@@ -61,6 +61,7 @@ enum { numOfIndexManager = 6 };
 
 class ProjectVertex {
 public:
+  virtual ~ProjectVertex () {}
   virtual int operator()(const double (&p)[3],double (&ret)[3]) const = 0;
 };
 
@@ -224,6 +225,7 @@ public :
     Dune_vertex () : _idx(-1) {}
 #endif
   public:
+    virtual ~Dune_vertex () {}
     // backup and restore index of vertices 
     virtual void backupIndex  (ostream & os ) const {};
     virtual void restoreIndex (istream & is ) {};
@@ -270,6 +272,7 @@ public :
     Dune_hface_or_hedge () : _index (-1) {}
 #endif
   public:
+    virtual ~Dune_hface_or_hedge () {}
     // use only this methods to get and set the _index 
     inline int getIndex () const;  
     inline void setIndex (const int index) ; 
@@ -344,6 +347,7 @@ public :
     Dune_helement () : _index (-1) , _refinedTag (true) {}
 #endif
   public:
+    virtual ~Dune_helement () {}
     // reset the _refinedTag to false 
     void resetRefinedTag(); 
     // true if element was refined this adaptation step 
@@ -368,6 +372,7 @@ public :
   class hbndseg;
   struct AdaptRestrictProlong
   {
+    virtual ~AdaptRestrictProlong () {}
     virtual int preCoarsening (helement & elem )   = 0;
     virtual int postRefinement (helement  & elem ) = 0;
     virtual int preCoarsening (hbndseg & bnd )     = 0;
@@ -717,6 +722,7 @@ public :
       inline VertexGeo (int,double,double,double, IndexManagerType & im ) ;
       inline virtual ~VertexGeo () ;
       inline const double (& Point () const) [3] ;
+      // return level of vertex 
       inline int level () const ;
       // Methode um einen Vertex zu verschieben; f"ur die Randanpassung
       virtual inline void project(const ProjectVertex &pv) ; 
diff --git a/src/serial/gitter_tetra_top.h b/src/serial/gitter_tetra_top.h
index 6e1b004fc2ec6cb507c084b08576443ca0fb5cee..c4b3109e43532269e29226c389ba45a6a8f8e0bf 100644
--- a/src/serial/gitter_tetra_top.h
+++ b/src/serial/gitter_tetra_top.h
@@ -588,7 +588,7 @@ template < class A > bool Hface3Top < A > :: coarse () {
       f->coarse () ;
       x = false ;
     }
-  } while (f = f->next()) ;
+  } while ( (f = f->next()) ) ;
   if (x) {
     
   // Hier wird tats"achlich vergr"obert, d.h. alle Kinder 
@@ -792,8 +792,8 @@ template < class A > bool Hbnd3Top < A > :: coarse () {
   if (!b) return false ;
   bool x = true ;
   do {
-    if(b->myhface3(0)->ref > 1) (b->coarse (), x = false) ;
-  } while (b = b->next()) ;
+    if( (b->myhface3(0)->ref > 1) ) ((b->coarse ()), x = false) ;
+  } while ( (b = b->next()) ) ;
   if (x) {
     if (!this->lockedAgainstCoarsening ()) {
       this->preCoarsening () ;
@@ -1923,7 +1923,7 @@ template < class A > bool Periodic3Top < A > :: bndNotifyCoarsen () {
     if (p->myhface3 (0)->ref > 1) (x = false) ;
     if (p->myhface3 (1)->ref > 1) (x = false) ;
 
-  } while (p = p->next ()) ;
+  } while ( (p = p->next ()) ) ;
   if (x) {
   
   // Falls keine Fl"achen anliegen, die auf Kinder oder Kindes- 
diff --git a/src/serial/parallel.h b/src/serial/parallel.h
index 6c074baef5cea81e14e7abdda9cea507bbe9a075..0a85111998ea0068bd82fc7123948c345acf2d9a 100644
--- a/src/serial/parallel.h
+++ b/src/serial/parallel.h
@@ -15,6 +15,7 @@ class Parallel {
   
     class VertexIF {
       public :
+        virtual ~VertexIF () {}
         typedef class Key1SLZ identifier_t ;
         inline virtual VertexPllXIF_t & accessPllX () throw (AccessPllException) ;
         inline virtual const VertexPllXIF_t & accessPllX () const throw (AccessPllException) ;
@@ -22,6 +23,7 @@ class Parallel {
     } ;
     class EdgeIF {
       public :
+        virtual ~EdgeIF () {}
         typedef class Key2SLZ identifier_t ;
         inline virtual EdgePllXIF_t & accessPllX () throw (AccessPllException) ;
         inline virtual const EdgePllXIF_t & accessPllX () const throw (AccessPllException) ;
@@ -29,6 +31,7 @@ class Parallel {
     } ;
     class FaceIF {
       public :
+        virtual ~FaceIF () {}
         typedef class Key3SLZ identifier_t ;
         inline virtual FacePllXIF_t & accessPllX () throw (AccessPllException) ;
         inline virtual const FacePllXIF_t & accessPllX () const throw (AccessPllException) ;
@@ -36,6 +39,7 @@ class Parallel {
     } ;
     class ElementIF {
       public :
+        virtual ~ElementIF () {}
         inline virtual ElementPllXIF_t & accessPllX () throw (AccessPllException) ;
         inline virtual const ElementPllXIF_t & accessPllX () const throw (AccessPllException) ;
       	inline virtual void detachPllXFromMacro () throw (AccessPllException) ;
diff --git a/src/serial/serialize.h b/src/serial/serialize.h
index c9ee60b23b3f1aea0881ee6b18dce8cc4c9ba83d..fb3187b439c5a38589f2d5e2533402930ce2012a 100644
--- a/src/serial/serialize.h
+++ b/src/serial/serialize.h
@@ -29,6 +29,8 @@ class ObjectStream;
 
 class Serializable {
   friend class ObjectStream ;
+public:  
+  virtual ~Serializable () {}
   virtual bool readObject (ObjectStream &) = 0 ;
   virtual void writeObject (ObjectStream &) const = 0 ;
 } ;
diff --git a/src/serial/walk.h b/src/serial/walk.h
index 4c85beeabd6cb7324749adf764b14c8fc203ff7d..61bda0b312fd7e09a3ec96acaf38cfdc824451c2 100644
--- a/src/serial/walk.h
+++ b/src/serial/walk.h
@@ -329,7 +329,7 @@ template < class A, class B > inline int TreeIterator < A, B > :: pushdown () {
 }
 
 template < class A, class B > inline int TreeIterator < A, B > :: pullup () {
-  for( ; _pos >= 0 ; _pos -- ) if (_stack [_pos] = _stack [_pos]->next ()) break ;
+  for( ; _pos >= 0 ; _pos -- ) if ( (_stack [_pos] = _stack [_pos]->next () ) ) break ;
   return _pos < 0 ? 0 : 1 ; 
 }
 
diff --git a/src/stlheaders.h b/src/stlheaders.h
index 76465639b96075af6452131db5640ebf3b50754b..170d03cfe8fc6cbf196303e6b5667639ffaba67f 100644
--- a/src/stlheaders.h
+++ b/src/stlheaders.h
@@ -33,6 +33,7 @@
   #include <stack>
   #include <map>
   #include <numeric>
+  #include <set>
 #else
   #include <memory.h>
   #include <iostream.h>
@@ -47,6 +48,7 @@
   #include <deque.h>
   #include <stack.h>
   #include <map.h>
+  #include <set.h>
 #endif
 
 #endif