diff --git a/dune/solvers/iterationsteps/projectedblockgsstep.cc b/dune/solvers/iterationsteps/projectedblockgsstep.cc
index 51b3694a242ef32d0abc7076b89f450cbb520255..f7a7ccd038245072c590751f2601d1df0356b2f0 100644
--- a/dune/solvers/iterationsteps/projectedblockgsstep.cc
+++ b/dune/solvers/iterationsteps/projectedblockgsstep.cc
@@ -40,7 +40,7 @@ void ProjectedBlockGSStep<OperatorType, DiscFuncType>::iterate()
         VectorBlock& x = (*this->x_)[i];
 
 
-        if ((*hasObstacle_)[i] == false) {
+        if ((*hasObstacle_)[i].none()) {
 
             // No obstacle --> solve linear problem
             mat[i][i].solve(v, r);
@@ -68,10 +68,12 @@ void ProjectedBlockGSStep<OperatorType, DiscFuncType>::iterate()
                     v[k] += sr / mat[i][i][k][k];
 
                     // Project
-                    if (v[k] < defectObstacle.lower(k))
-                        v[k] = defectObstacle.lower(k);
-                    else if (v[k] > defectObstacle.upper(k))
-                        v[k] = defectObstacle.upper(k);
+                    if (hasObstacle_[i][j]==true) {
+                        if (v[k] < defectObstacle.lower(k))
+                            v[k] = defectObstacle.lower(k);
+                        else if (v[k] > defectObstacle.upper(k))
+                            v[k] = defectObstacle.upper(k);
+                    }
 
                 }
 
diff --git a/dune/solvers/iterationsteps/projectedblockgsstep.hh b/dune/solvers/iterationsteps/projectedblockgsstep.hh
index e5b25414f308ae680279af907fd0f454cd74efd3..ec356f38f3abc1e5cbb63c4eb800e75048658a63 100644
--- a/dune/solvers/iterationsteps/projectedblockgsstep.hh
+++ b/dune/solvers/iterationsteps/projectedblockgsstep.hh
@@ -31,7 +31,7 @@ public:
     
     virtual DiscFuncType getSol();
     
-    Dune::BitSetVector<1>* hasObstacle_;
+    const Dune::BitSetVector<BlockSize>* hasObstacle_;
     
     const std::vector<BoxConstraint<field_type,BlockSize> >* obstacles_;
 };