 	}
 }
 
+#ifdef NEWTON_UNROLL
+	#define NEWTON_UNROLLER	#pragma unroll NEWTON_UNROLL
+#else
+	#define NEWTON_UNROLLER #pragma unroll 1
+#endif
 #define Max_no_steps (200000)
 #define NewtonMaxit (8)
 #define StartNewton (true)

		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);

		double Fac = 0.5; //Step reduction if too many iterations
		int NewtonIter = 0;
		double Theta = 0;
		
		NEWTON_UNROLLER
		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);
