             	Z4[i] += DZ4[i];
             }
 
-            NewtonDone = (NewtonRate*NewtonIncrement <= NewtonTol);
+#ifndef NEWTON_UNROLL
             if (NewtonDone) break;
+#else //only break if it's at the end of the unroll
+            if (NewtonDone && (NewtonIter + 1) % NewtonIter == 0) break;
+#endif
         }
         if (!NewtonDone) {
         	H = Fac*H;

		double Fac = 0.5; //Step reduction if too many iterations
		int NewtonIter = 0;
		double Theta = 0;
		for (; NewtonIter < NewtonMaxit; NewtonIter++) {
			RK_PrepareRHS(t, pr, H, y, F0, Z1, Z2, Z3, DZ1, DZ2, DZ3);
			RK_Solve(H, E1, E2, DZ1, DZ2, DZ3, ipiv1, ipiv2);

		NewtonDone = false;
        Fac = 0.5; // ! Step reduction factor if too many iterations
        double NewtonIncrement = 0;
#ifdef NEWTON_UNROLL
		#pragma unroll NEWTON_UNROLL
#endif
        for (NewtonIter = 0; NewtonIter < NewtonMaxit; NewtonIter++) {
        	//!~~~>   Prepare the loop-dependent part of the right-hand side
        	WADD(y, Z4, TMP);
