diff --git a/modcc/symge.cpp b/modcc/symge.cpp
index 704936c3af718a6524a1fa01a5f247aa2c1ea053..0968b0406f9ce171e50b8fa18f315771596cb214 100644
--- a/modcc/symge.cpp
+++ b/modcc/symge.cpp
@@ -94,10 +94,14 @@ std::vector<std::vector<symge::symbol>> gj_reduce(sym_matrix& A, symbol_table& t
             pivot p;
             p.row = r;
             const sym_row &row = A[r];
-            for (unsigned c = 0; c < A.nrow(); ++c) {
-                if (row[c]) {
-                    p.col = c;
-                    break;
+            if (row[r]) {
+                p.col = r;
+            } else {
+                for (unsigned c = 0; c < A.nrow(); ++c) {
+                    if (row[c]) {
+                        p.col = c;
+                        break;
+                    }
                 }
             }
             pivots.push_back(std::move(p));