making implicit_solver very clean