diff --git a/usadelndsoc/solver.py b/usadelndsoc/solver.py
index f9d7f7f1e766898015edbba6f63554f8442686b7..3ca19edff08df177d5beb22defc9142668a3245e 100644
--- a/usadelndsoc/solver.py
+++ b/usadelndsoc/solver.py
@@ -188,7 +188,7 @@ class Solver:
         skip_precond = 0
 
         if solver is None:
-            solver = "lgmres"
+            solver = "gcrotmk"
 
         if A_size > 40000:
             _log_solve.debug(
@@ -561,8 +561,13 @@ class Solver:
         self._t_solve_min = np.inf
         self._M = None
         self._Phi[...] = 0
+        prev_omega = None
 
         for j in js:
+            if prev_omega is not None and prev_omega < 0 and omega[j] > 0:
+                self._M = None
+                self._Phi[...] = 0
+            prev_omega = omega[j]
             self.solve(omega=omega[j], **kw)
             Phi_prev = self._Phi.copy()
             Phi[j] = self._Phi