diff --git a/dune/matrix-vector/triangularsolve.hh b/dune/matrix-vector/triangularsolve.hh
index a9ab4c8312be52356e99a32a3496acc1a4fe317c..9289992e7bd0f4d6323d2aa8ad31653adc569ba7 100644
--- a/dune/matrix-vector/triangularsolve.hh
+++ b/dune/matrix-vector/triangularsolve.hh
@@ -15,16 +15,16 @@ namespace MatrixVector {
     if (transpose) {
       for (auto it = L.begin(); it != L.end(); ++it) {
         const size_t i = it.index();
-        if (ignore != nullptr and (*ignore)[i].all())
-          continue;
         auto cIt = it->begin();
         assert(cIt.index() == i);
-        x[i] = b[i] / *cIt;
+        if (ignore == nullptr or (*ignore)[cIt.index()].none())
+          x[i] = b[i] / *cIt;
         cIt++;
         for (; cIt != it->end(); ++cIt) {
           const size_t j = cIt.index();
           assert(j > i);
-          b[j] -= x[i] * *cIt;
+          if (ignore == nullptr or (*ignore)[j].none())
+            b[j] -= x[i] * *cIt;
         }
       }
     } else {
@@ -57,16 +57,16 @@ namespace MatrixVector {
     if (transpose) {
       for (auto it = U.beforeEnd(); it != U.beforeBegin(); --it) {
         const size_t i = it.index();
-        if (ignore != nullptr and (*ignore)[i].all())
-          continue;
         auto cIt = it->beforeEnd();
         assert(cIt.index() == i);
-        x[i] = b[i] / *cIt;
+        if (ignore == nullptr or (*ignore)[cIt.index()].none())
+          x[i] = b[i] / *cIt;
         cIt--;
         for (; cIt != it->beforeBegin(); --cIt) {
           const size_t j = cIt.index();
           assert(j < i);
-          b[j] -= *cIt * x[i];
+          if (ignore == nullptr or (*ignore)[j].none())
+            b[j] -= *cIt * x[i];
         }
       }
     } else {