diff --git a/dune/common/bitsetvector.hh b/dune/common/bitsetvector.hh
index 2dd1e370f4bb8ee0038ffca9646a20a07c6eda8a..e7b1cef50abd64413ee4ee4f30f4cc0c9947d489 100644
--- a/dune/common/bitsetvector.hh
+++ b/dune/common/bitsetvector.hh
@@ -236,7 +236,6 @@ namespace Dune {
     {
       for(int i=0; i<block_size; ++i)
         getBit(i) = b;
-
       return (*this);
     }
 
@@ -244,8 +243,7 @@ namespace Dune {
     BitSetVectorReference& operator=(const bitset & b)
     {
       for(int i=0; i<block_size; ++i)
-        getBit(i) = b[i];
-
+        getBit(i) = b.test(i);
       return (*this);
     }
 
@@ -253,8 +251,7 @@ namespace Dune {
     BitSetVectorReference& operator=(const BitSetVectorConstReference & b)
     {
       for(int i=0; i<block_size; ++i)
-        getBit(i) = b[i];
-
+        getBit(i) = b.test(i);
       return (*this);
     }
 
@@ -262,32 +259,55 @@ namespace Dune {
     BitSetVectorReference& operator=(const BitSetVectorReference & b)
     {
       for(int i=0; i<block_size; ++i)
-        getBit(i) = b.getBit(i);
-
+        getBit(i) = b.test(i);
       return (*this);
     }
 
-    //! Bitwise and.
+    //! Bitwise and (for bitset).
+    BitSetVectorReference& operator&=(const bitset& x)
+    {
+      for (size_type i=0; i<block_size; i++)
+        getBit(i) = (test(i) & x.test(i));
+      return *this;
+    }
+
+    //! Bitwise and (for BitSetVectorConstReference and BitSetVectorReference)
     BitSetVectorReference& operator&=(const BitSetVectorConstReference& x)
     {
       for (size_type i=0; i<block_size; i++)
-        set(i, getBit(i) & x.getBit(i));
+        getBit(i) = (test(i) & x.test(i));
       return *this;
     }
 
-    //! Bitwise inclusive or.
+    //! Bitwise inclusive or (for bitset)
+    BitSetVectorReference& operator|=(const bitset& x)
+    {
+      for (size_type i=0; i<block_size; i++)
+        getBit(i) = (test(i) | x.test(i));
+      return *this;
+    }
+
+    //! Bitwise inclusive or (for BitSetVectorConstReference and BitSetVectorReference)
     BitSetVectorReference& operator|=(const BitSetVectorConstReference& x)
     {
       for (size_type i=0; i<block_size; i++)
-        set(i, getBit(i) | x.getBit(i));
+        getBit(i) = (test(i) | x.test(i));
+      return *this;
+    }
+
+    //! Bitwise exclusive or (for bitset).
+    BitSetVectorReference& operator^=(const bitset& x)
+    {
+      for (size_type i=0; i<block_size; i++)
+        getBit(i) = (test(i) ^ x.test(i));
       return *this;
     }
 
-    //! Bitwise exclusive or.
+    //! Bitwise exclusive or (for BitSetVectorConstReference and BitSetVectorReference)
     BitSetVectorReference& operator^=(const BitSetVectorConstReference& x)
     {
       for (size_type i=0; i<block_size; i++)
-        set(i, getBit(i) ^ x.getBit(i));
+        getBit(i) = (test(i) ^ x.test(i));
       return *this;
     }
 
@@ -295,7 +315,7 @@ namespace Dune {
     BitSetVectorReference& operator<<=(size_type n)
     {
       for (size_type i=0; i<block_size-n; i++)
-        set(i, getBit(i+n));
+        getBit(i) = test(i+n);
       return *this;
     }
 
@@ -303,7 +323,7 @@ namespace Dune {
     BitSetVectorReference& operator>>=(size_type n)
     {
       for (size_type i=0; i<block_size-n; i++)
-        set(i+n, getBit(i));
+        getBit(i+n) = test(i);
       return *this;
     }
 
@@ -348,6 +368,7 @@ namespace Dune {
       return *this;
     }
 
+    using BitSetVectorConstReference::test;
     using BitSetVectorConstReference::operator[];
 
     reference operator[](size_type i)